Parcourir la source

Merge branch 'pro' of http://code.pacsonline.cn/zskk_bg/yuanchengpasc into pro

# Conflicts:
#	application/inter/controller/Reciveremote.php
刘桂岩 il y a 5 ans
Parent
commit
1891cb58fd

+ 685 - 0
application/common/versionsql/sql.1

@@ -0,0 +1,685 @@
+-- Create syntax for TABLE 'bbs'
+CREATE TABLE `bbs` (
+  `id` varchar(50) NOT NULL,
+  `initiator` varchar(50) DEFAULT NULL COMMENT '发起人',
+  `reply` varchar(50) DEFAULT NULL COMMENT '回复人',
+  `remote_application_id` varchar(50) DEFAULT NULL COMMENT '申请单id',
+  `content` varchar(3000) DEFAULT NULL COMMENT '内容',
+  `attachment` varchar(255) DEFAULT NULL COMMENT '附件',
+  `createdAt` datetime DEFAULT NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `bbs_initiator` (`initiator`),
+  KEY `bbs_reply` (`reply`),
+  KEY `bbs_applicaition` (`remote_application_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'bodypart'
+CREATE TABLE `bodypart` (
+  `id` varchar(32) NOT NULL,
+  `name` varchar(100) DEFAULT NULL COMMENT '检查部位名称',
+  `exam_class_id` varchar(50) DEFAULT NULL COMMENT 'exam_class表id',
+  PRIMARY KEY (`id`),
+  KEY `bodypart-examclass` (`exam_class_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='检查部位';
+
+-- Create syntax for TABLE 'constant'
+CREATE TABLE `constant` (
+  `id` varchar(32) NOT NULL,
+  `constant_key` varchar(50) DEFAULT NULL COMMENT '常量名称',
+  `constant_value` varchar(50) DEFAULT NULL COMMENT '中文翻译',
+  `parent_id` varchar(20) DEFAULT NULL COMMENT '父集ID',
+  `remark` text COMMENT '备注',
+  `name` varchar(255) DEFAULT NULL COMMENT '常量名称',
+  `sign` varchar(255) DEFAULT NULL COMMENT '标记',
+  `ordernum` int(10) DEFAULT NULL COMMENT '排序',
+  PRIMARY KEY (`id`),
+  KEY `constant-parent` (`parent_id`) USING BTREE,
+  KEY `constant_value` (`constant_value`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='网站常量';
+
+-- Create syntax for TABLE 'department'
+CREATE TABLE `department` (
+  `id` varchar(32) NOT NULL,
+  `department_name` varchar(100) DEFAULT NULL COMMENT '科室名称',
+  `is_report` varchar(10) DEFAULT NULL COMMENT '是否能写报告',
+  `institution_id` varchar(50) DEFAULT NULL COMMENT '所属医院',
+  `parent_id` varchar(50) DEFAULT NULL COMMENT '上级ID',
+  `order_num` int(11) DEFAULT NULL COMMENT '排序号',
+  PRIMARY KEY (`id`),
+  KEY `depart-report` (`is_report`) USING BTREE,
+  KEY `depart-institution` (`institution_id`),
+  KEY `depart-parent` (`parent_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='科室';
+
+-- Create syntax for TABLE 'device'
+CREATE TABLE `device` (
+  `id` varchar(32) NOT NULL,
+  `name` varchar(100) DEFAULT NULL COMMENT '检查设备名称',
+  `exam_class_id` varchar(50) DEFAULT NULL COMMENT 'exam_class表id',
+  `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态 1:有效 0:无效',
+  PRIMARY KEY (`id`),
+  KEY `device-examclass` (`exam_class_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='检查设备';
+
+-- Create syntax for TABLE 'doctor_class'
+CREATE TABLE `doctor_class` (
+  `id` varchar(32) NOT NULL,
+  `doctor_id` varchar(50) DEFAULT NULL COMMENT '医生表ID',
+  `department_id` varchar(50) DEFAULT NULL COMMENT '科室id',
+  `doctor_class` varchar(20) DEFAULT NULL COMMENT '医生类别 1.临床医生2.报告医生3.审核医生4.确认医生5.登记医生6远程申请医生7.远程报告医生8.远程审核医生(可多选)',
+  `status` varchar(10) DEFAULT '1',
+  PRIMARY KEY (`id`),
+  KEY `docclass-depart` (`department_id`) USING BTREE,
+  KEY `docclass-docid` (`doctor_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医生类表';
+
+-- Create syntax for TABLE 'doctors'
+CREATE TABLE `doctors` (
+  `id` varchar(32) NOT NULL,
+  `username` varchar(100) NOT NULL COMMENT '用户名',
+  `password` varchar(200) NOT NULL COMMENT '密码',
+  `realname` varchar(200) DEFAULT NULL COMMENT '真实姓名',
+  `email` varchar(200) DEFAULT NULL COMMENT 'email',
+  `login_time` datetime DEFAULT NULL COMMENT '登录时间',
+  `createdAt` datetime DEFAULT NULL COMMENT '创建时间',
+  `updatedAt` datetime DEFAULT NULL COMMENT '修改时间',
+  `token` varchar(255) DEFAULT NULL COMMENT '每次登陆产生新的Session标识',
+  `phone` varchar(20) DEFAULT NULL COMMENT '电话',
+  `remark` varchar(1000) DEFAULT NULL COMMENT '备注',
+  `doctor_title` varchar(255) DEFAULT NULL COMMENT '职称',
+  `status` varchar(50) DEFAULT NULL,
+  `attachment` varchar(2000) DEFAULT NULL COMMENT '附件',
+  `institution_id` varchar(50) DEFAULT NULL COMMENT '医疗机构ID',
+  `department_id` varchar(50) DEFAULT NULL COMMENT '主要科室ID',
+  `doctor_role` varchar(20) DEFAULT NULL COMMENT '1.本地医生2.远程医生(可多选)',
+  `login_failure` int(11) DEFAULT NULL COMMENT '登录失败次数',
+  `is_report` varchar(10) DEFAULT NULL COMMENT '是否能写报告',
+  `exam_class` varchar(255) DEFAULT '*',
+  `send_sms` int(10) DEFAULT '0',
+  `message_push` varchar(10) DEFAULT '0' COMMENT '是否推送消息',
+  `is_admin` varchar(255) DEFAULT '0' COMMENT '是否为管理员',
+  `is_send_message` varchar(255) DEFAULT '0' COMMENT '登录是否发送短信',
+  `is_use_autograph` varchar(255) DEFAULT '0' COMMENT '是否使用电子签名',
+  `autograph` varchar(255) DEFAULT NULL COMMENT '电子签名',
+  PRIMARY KEY (`id`),
+  KEY `doc-institu` (`institution_id`),
+  KEY `doc-depart` (`department_id`),
+  KEY `doc-report` (`is_report`),
+  KEY `doc-username` (`username`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='医生表';
+
+-- Create syntax for TABLE 'dr_cla_permission'
+CREATE TABLE `dr_cla_permission` (
+  `id` varchar(32) NOT NULL,
+  `doctor_id` varchar(255) DEFAULT NULL COMMENT '医生ID',
+  `pass` varchar(255) DEFAULT NULL COMMENT '菜单ID   其他控制类型',
+  `type` varchar(50) DEFAULT NULL COMMENT '权限控制类型 1,菜单 2,其他',
+  PRIMARY KEY (`id`),
+  KEY `permiss-docid` (`doctor_id`),
+  KEY `dr_pass` (`pass`) USING BTREE,
+  KEY `dr_type` (`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'every_studies'
+CREATE TABLE `every_studies` (
+  `id` varchar(50) NOT NULL,
+  `institution_id` varchar(50) DEFAULT NULL COMMENT '医院id',
+  `institution_name` varchar(255) DEFAULT NULL COMMENT '医院名称',
+  `date` varchar(50) DEFAULT NULL COMMENT '检查时间',
+  `count` int(11) DEFAULT NULL COMMENT '检查数量',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'exam_class'
+CREATE TABLE `exam_class` (
+  `id` varchar(32) NOT NULL,
+  `institution_id` varchar(32) DEFAULT NULL COMMENT '医院id',
+  `name` varchar(200) DEFAULT NULL COMMENT '检查类别名称',
+  PRIMARY KEY (`id`),
+  KEY `eclass-institution` (`institution_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='检查类别表格';
+
+-- Create syntax for TABLE 'exam_project'
+CREATE TABLE `exam_project` (
+  `id` varchar(32) NOT NULL DEFAULT '',
+  `name` varchar(200) DEFAULT NULL COMMENT '检查项目名称',
+  `exam_class_id` varchar(20) DEFAULT NULL,
+  `status` varchar(255) DEFAULT '0' COMMENT '删除状态',
+  PRIMARY KEY (`id`),
+  KEY `eproject-examclass` (`exam_class_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='检查项目表';
+
+-- Create syntax for TABLE 'exam_subclass'
+CREATE TABLE `exam_subclass` (
+  `id` varchar(32) NOT NULL,
+  `name` varchar(255) DEFAULT NULL COMMENT '子类名称',
+  `exam_class_id` varchar(50) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `esubclass-eclass` (`exam_class_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'exams'
+CREATE TABLE `exams` (
+  `id` varchar(32) NOT NULL,
+  `dept_id` varchar(100) DEFAULT NULL COMMENT '检查科室(执行科室)',
+  `patient_id` varchar(100) DEFAULT NULL COMMENT '患者id',
+  `patient_num` varchar(200) DEFAULT NULL COMMENT '病历号',
+  `accession_num` varchar(100) DEFAULT NULL COMMENT '科室检查号',
+  `exam_datetime` varchar(20) DEFAULT NULL COMMENT '检查日期',
+  `exam_class` varchar(200) DEFAULT NULL COMMENT '检查类型',
+  `exam_sub_class` varchar(200) DEFAULT NULL COMMENT '检查子类',
+  `exam_project` varchar(200) DEFAULT NULL COMMENT '检查项目',
+  `device` varchar(200) DEFAULT NULL COMMENT '检查设备',
+  `body_part` varchar(200) DEFAULT NULL COMMENT '检查部位',
+  `exam_method` varchar(200) DEFAULT NULL COMMENT '检查方法',
+  `hopitalized_no` varchar(200) DEFAULT NULL COMMENT '住院号',
+  `bed_no` varchar(200) DEFAULT NULL COMMENT '床位号',
+  `clin_dept_id` varchar(50) DEFAULT NULL COMMENT '送诊科室id',
+  `technician` varchar(200) DEFAULT NULL COMMENT '技师',
+  `charge` varchar(200) DEFAULT NULL COMMENT '检查费用',
+  `cost` varchar(200) DEFAULT NULL COMMENT '实际费用',
+  `clin_doctors` varchar(200) DEFAULT NULL COMMENT '送诊医生',
+  `phone` varchar(20) DEFAULT NULL COMMENT '联系方式',
+  `institution_id` varchar(200) DEFAULT NULL COMMENT '医院id',
+  `study_id` varchar(50) DEFAULT NULL COMMENT 'studyuid(studykey)',
+  `illness_desc` text COMMENT '主诉',
+  `phys_sign` varchar(200) DEFAULT NULL COMMENT '体征',
+  `clin_diag` varchar(1000) DEFAULT NULL COMMENT '临床诊断',
+  `clin_symp` varchar(4000) DEFAULT NULL COMMENT '临床症状',
+  `patient_source` varchar(20) DEFAULT NULL COMMENT '病人来源 1门诊 2住院 3外来',
+  `req_datetime` datetime DEFAULT NULL COMMENT '申请时间',
+  `req_doctor` varchar(50) DEFAULT NULL COMMENT '申请医生(医生id)',
+  `remark` text COMMENT '其他说明',
+  `register` varchar(50) DEFAULT NULL COMMENT '登记人员( 医生id)',
+  `register_datetime` datetime DEFAULT NULL COMMENT '注册登记时间',
+  `exam_status` tinyint(6) DEFAULT '1' COMMENT '1、登记 2、开始检查3、检查完毕 4、申请 5、驳回 6、接收、7、初步报告 8、审核报告 9、确认、',
+  `status` varchar(20) DEFAULT '1' COMMENT '记录状态 0禁用 1正常',
+  `pay_status` varchar(10) DEFAULT '0' COMMENT '支付状态',
+  `is_remote` varchar(10) DEFAULT NULL COMMENT '远程诊断是被接受 0,未接受  1,已接受',
+  `urgent` varchar(10) NOT NULL DEFAULT '0' COMMENT '是否急诊 0否  1是',
+  `film_type` varchar(20) DEFAULT '2' COMMENT '0 未定义  1传统胶片  2电子胶片',
+  `anamnesis` varchar(255) DEFAULT NULL,
+  `family_ill` varchar(255) DEFAULT NULL,
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  `delivery_doctor` varchar(100) DEFAULT NULL COMMENT '送诊医生',
+  `exam_report` varchar(10) DEFAULT NULL COMMENT '检查结果',
+  `ext` json DEFAULT NULL,
+  `id_card` varchar(50) DEFAULT NULL COMMENT '身份证号',
+  `study_uid` varchar(100) DEFAULT NULL,
+  `application_department` varchar(255) DEFAULT NULL COMMENT '申请科室',
+  `application_doctor` varchar(255) DEFAULT NULL COMMENT '申请医生',
+  `severe` varchar(255) DEFAULT '0' COMMENT '重症标识',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `exam-study_id` (`study_id`),
+  KEY `exam-patient` (`patient_id`),
+  KEY `exam-institution` (`institution_id`),
+  KEY `exam-urgent` (`urgent`),
+  KEY `exam-remote` (`is_remote`),
+  KEY `exam-status` (`exam_status`),
+  KEY `exam-report` (`exam_report`),
+  KEY `exam-project` (`exam_project`) USING BTREE,
+  KEY `exam-device` (`device`),
+  KEY `exam-body` (`body_part`),
+  KEY `exams_exam_datetime` (`exam_datetime`),
+  KEY `exams_exam_class` (`exam_class`),
+  KEY `exams_exam_status` (`exam_status`),
+  KEY `exams_patient_num` (`patient_num`),
+  KEY `exams_patient_id` (`patient_id`),
+  KEY `exams_study_id` (`study_id`),
+  KEY `exams_institution_id` (`institution_id`),
+  KEY `exams_idcard` (`id_card`),
+  KEY `studyuid_index` (`study_uid`),
+  KEY `exams_study_uid` (`study_uid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='检查表';
+
+-- Create syntax for TABLE 'images'
+CREATE TABLE `images` (
+  `id` varchar(32) NOT NULL COMMENT 'id',
+  `series_id` varchar(200) DEFAULT NULL COMMENT '对应的序列',
+  `image_id` varchar(255) DEFAULT NULL COMMENT '影像ID',
+  `sop_uid` varchar(255) DEFAULT NULL,
+  `image_number` int(11) DEFAULT NULL COMMENT '影像号',
+  `owner` varchar(255) DEFAULT NULL COMMENT '所属人',
+  `window_width` varchar(200) DEFAULT NULL COMMENT '窗宽',
+  `windo_center` varchar(200) DEFAULT NULL COMMENT '窗位',
+  `rows` varchar(200) DEFAULT NULL COMMENT '行',
+  `columns` varchar(200) DEFAULT NULL COMMENT '队',
+  `pixe_spacing` varchar(255) DEFAULT NULL COMMENT '影像的展示参数',
+  `image_position` varchar(255) DEFAULT NULL COMMENT '影像的展示参数',
+  `image_orientation` varchar(255) DEFAULT NULL COMMENT '影像的展示参数',
+  `ctime` datetime DEFAULT NULL COMMENT '创建时间',
+  `utime` datetime DEFAULT NULL COMMENT '修改时间',
+  `url` varchar(255) DEFAULT NULL COMMENT '加载地址',
+  `metadata` varchar(255) DEFAULT NULL,
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  `size` varchar(255) DEFAULT NULL,
+  `institution_id` varchar(100) DEFAULT NULL,
+  `local_url` varchar(255) DEFAULT NULL,
+  `remote_url` varchar(100) DEFAULT NULL,
+  `status` int(11) DEFAULT '2',
+  `frame` int(11) DEFAULT '0',
+  `cineRate` int(11) DEFAULT '0',
+  `ext` json DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `image-image_id` (`image_id`),
+  KEY `image-sop` (`sop_uid`),
+  KEY `series_id_index` (`series_id`),
+  KEY `images_institution_id` (`institution_id`),
+  KEY `images_series_id` (`series_id`),
+  KEY `image_status` (`status`),
+  KEY `images_image_id` (`image_id`),
+  KEY `images_url` (`url`),
+  KEY `images_owner` (`owner`),
+  KEY `images_metadata` (`metadata`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='影像表(images)';
+
+-- Create syntax for TABLE 'institution'
+CREATE TABLE `institution` (
+  `id` varchar(32) NOT NULL COMMENT '机构代码',
+  `name` varchar(200) DEFAULT NULL COMMENT '医院名',
+  `address` varchar(200) DEFAULT NULL COMMENT '医院地址',
+  `remark` text COMMENT '备注',
+  `status` varchar(20) DEFAULT NULL,
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  `institution_level` varchar(200) DEFAULT NULL COMMENT '医疗机构等级',
+  `parent_institution` varchar(100) DEFAULT NULL COMMENT '上级机构(多对多关系)',
+  `charge_mode` varchar(20) DEFAULT NULL COMMENT '收费模式 1.向患者结算 2.向医院结算',
+  `local_domain` varchar(255) DEFAULT NULL COMMENT 'http://local.pacsonline.cn/img/189290/**.jpg',
+  `report_subtitle` varchar(200) DEFAULT NULL COMMENT '报告副标题',
+  `agent_id` varchar(50) DEFAULT NULL COMMENT '代理商 关联manage表',
+  `msg_phone` varchar(50) DEFAULT NULL,
+  `urgent_time` datetime DEFAULT NULL,
+  `not_urgent_time` datetime DEFAULT NULL,
+  `wx_source` varchar(64) NOT NULL DEFAULT '中世康恺电子胶片平台' COMMENT '医疗机构所属微信公众号',
+  `is_test` varchar(10) DEFAULT '0',
+  PRIMARY KEY (`id`),
+  KEY `institution-parent` (`parent_institution`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='医疗机构表';
+
+-- Create syntax for TABLE 'manager'
+CREATE TABLE `manager` (
+  `id` varchar(32) NOT NULL COMMENT 'ID',
+  `role_id` varchar(50) DEFAULT '0' COMMENT '角色id(0:admin;1:医院;2:代理商)',
+  `username` varchar(100) NOT NULL DEFAULT '' COMMENT '用户名',
+  `password` varchar(100) NOT NULL DEFAULT '' COMMENT '密码',
+  `email` varchar(100) DEFAULT '' COMMENT 'email',
+  `phone` varchar(50) DEFAULT '' COMMENT '电话',
+  `logintime` datetime DEFAULT NULL COMMENT '最后登录时间',
+  `loginip` varchar(50) DEFAULT '' COMMENT '登录IP',
+  `loginfailure` tinyint(1) DEFAULT NULL COMMENT '登陆失败次数',
+  `createdAt` datetime DEFAULT NULL COMMENT '????',
+  `updatedAt` datetime DEFAULT NULL COMMENT '????',
+  `institution_id` varchar(200) DEFAULT NULL COMMENT '机构ID',
+  `status` tinyint(1) DEFAULT '0' COMMENT '删除状态',
+  PRIMARY KEY (`id`),
+  KEY `username` (`username`),
+  KEY `mobile` (`phone`),
+  KEY `institution` (`institution_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='管理员表(代理商)';
+
+-- Create syntax for TABLE 'menu'
+CREATE TABLE `menu` (
+  `id` varchar(32) NOT NULL,
+  `name` varchar(255) DEFAULT NULL COMMENT '菜单名称',
+  `status` varchar(255) DEFAULT NULL,
+  `parent_id` varchar(36) DEFAULT NULL COMMENT '父集关系',
+  `url` varchar(255) DEFAULT NULL COMMENT '网址',
+  `ordernum` int(10) DEFAULT NULL COMMENT '排序',
+  `icon_name` varchar(255) DEFAULT NULL COMMENT '图标',
+  PRIMARY KEY (`id`),
+  KEY `menu-parent` (`parent_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='菜单表';
+
+-- Create syntax for TABLE 'messages'
+CREATE TABLE `messages` (
+  `id` varchar(32) NOT NULL DEFAULT '',
+  `title` varchar(255) DEFAULT NULL COMMENT '标题',
+  `content` text COMMENT '内容',
+  `is_read` int(255) DEFAULT '0' COMMENT '0|未读,1|已读`',
+  `ctime` datetime DEFAULT NULL,
+  `doctor_id` varchar(50) DEFAULT NULL COMMENT '所属医生id',
+  `status` varchar(255) DEFAULT '0' COMMENT '是否删除',
+  `institution_id` varchar(50) DEFAULT NULL COMMENT '机构',
+  `department_id` varchar(50) DEFAULT NULL COMMENT '科室',
+  `count` int(10) DEFAULT '1',
+  `url` varchar(255) DEFAULT NULL,
+  `type` varchar(50) DEFAULT NULL COMMENT '1,新增远程申请2,远程申请驳回3,远程申请被撤回4,远程诊断接收5,报告已审核6,报告确认7,对话8,审核驳回',
+  `htime` datetime DEFAULT NULL,
+  `application_id` varchar(50) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `message-read` (`is_read`),
+  KEY `message-doctor` (`doctor_id`),
+  KEY `message-institution` (`institution_id`),
+  KEY `message-department` (`department_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='消息表';
+
+-- Create syntax for TABLE 'open_application'
+CREATE TABLE `open_application` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `institution_name` varchar(128) DEFAULT NULL COMMENT '医疗机构名称',
+  `institution_level` varchar(45) DEFAULT NULL COMMENT '医疗机构等级',
+  `name` varchar(45) NOT NULL COMMENT '联系人',
+  `phone` varchar(45) NOT NULL COMMENT '联系电话',
+  `email` varchar(128) DEFAULT NULL COMMENT '联系邮箱',
+  `position` varchar(45) DEFAULT NULL COMMENT '联系人职务',
+  `title` varchar(45) DEFAULT NULL COMMENT '医生职称',
+  `department` varchar(64) DEFAULT NULL COMMENT '医生所在科室',
+  `company` varchar(128) DEFAULT NULL COMMENT '城市合伙人公司名称',
+  `type` int(11) DEFAULT NULL COMMENT '申请来源0:未定义1:医院申请2:医生申请3:城市合伙人申请',
+  `status` int(11) DEFAULT '1' COMMENT '状态0:未定义1:已接收2:已通知负责人3:已对接4:申请成功5:申请失败',
+  `ctime` int(11) NOT NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `phone` (`phone`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'operating'
+CREATE TABLE `operating` (
+  `id` varchar(32) NOT NULL,
+  `nums` varchar(255) DEFAULT NULL COMMENT '单子数量',
+  `month` int(10) DEFAULT NULL COMMENT '月份',
+  `exam_num` varchar(255) DEFAULT NULL COMMENT '影像数目',
+  `remote_num` varchar(255) DEFAULT NULL COMMENT '远程诊断数量',
+  `danger_num` varchar(255) DEFAULT NULL COMMENT '患者疾病阳性数量',
+  `role_id` varchar(255) DEFAULT NULL COMMENT '用户id',
+  `type` varchar(255) DEFAULT NULL COMMENT '1医生 2机构 3代理',
+  PRIMARY KEY (`id`),
+  KEY `operate-role` (`role_id`),
+  KEY `month` (`month`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='运营报告';
+
+-- Create syntax for TABLE 'oss_callbacks'
+CREATE TABLE `oss_callbacks` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `md5` varchar(255) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `region` varchar(255) NOT NULL,
+  `bucket` varchar(255) NOT NULL,
+  `size` int(11) NOT NULL,
+  `hospital_id` varchar(255) NOT NULL,
+  `status` int(11) NOT NULL DEFAULT '0',
+  `remark` varchar(255) DEFAULT NULL,
+  `x_real_ip` varchar(255) DEFAULT NULL,
+  `x_forwarded_for_ip` varchar(255) DEFAULT NULL,
+  `request_date` varchar(255) DEFAULT NULL,
+  `x_oss_request_id` varchar(255) DEFAULT NULL,
+  `x_oss_requester` varchar(255) DEFAULT NULL,
+  `x_oss_pub_key_url` varchar(255) DEFAULT NULL,
+  `authorization` varchar(255) DEFAULT NULL,
+  `content_md5` varchar(255) DEFAULT NULL,
+  `createdAt` datetime NOT NULL,
+  `updatedAt` datetime NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `md5_index` (`md5`),
+  UNIQUE KEY `url_index` (`url`),
+  KEY `oss_callbacks_hospital_id` (`hospital_id`),
+  KEY `oss_callbacks_bucket` (`bucket`),
+  KEY `oss_callbacks_status` (`status`),
+  KEY `oss_callbacks_x_real_ip` (`x_real_ip`),
+  KEY `oss_callbacks_region` (`region`),
+  KEY `oss_callbacks_x_forwarded_for_ip` (`x_forwarded_for_ip`),
+  KEY `oss_callbacks_x_oss_requester` (`x_oss_requester`),
+  KEY `oss_callbacks_x_oss_pub_key_url` (`x_oss_pub_key_url`),
+  KEY `oss_callbacks_x_oss_request_id` (`x_oss_request_id`),
+  KEY `oss_callbacks_authorization` (`authorization`)
+) ENGINE=InnoDB AUTO_INCREMENT=11762709 DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'patient_infos'
+CREATE TABLE `patient_infos` (
+  `id` varchar(32) NOT NULL,
+  `name` varchar(100) DEFAULT NULL COMMENT '患者姓名',
+  `sex` varchar(10) DEFAULT NULL COMMENT '性别',
+  `card_num` varchar(100) DEFAULT NULL COMMENT '身份证号',
+  `phone` varchar(20) DEFAULT NULL COMMENT '手机号',
+  `ctime` datetime DEFAULT NULL COMMENT '创建时间',
+  `birthday` varchar(20) DEFAULT NULL COMMENT '生日',
+  `age` varchar(10) DEFAULT NULL COMMENT '年龄',
+  `card_type` varchar(30) DEFAULT NULL COMMENT '证件类型',
+  `nationality` varchar(50) DEFAULT NULL COMMENT '国籍',
+  `nation` varchar(30) DEFAULT '' COMMENT '民族',
+  `marry` varchar(10) DEFAULT NULL COMMENT '婚否',
+  `professional` varchar(100) DEFAULT NULL COMMENT '职业',
+  `address` varchar(255) DEFAULT NULL COMMENT '联系地址',
+  `temp_patient_id` varchar(50) DEFAULT NULL COMMENT '检查临时患者id(从dicom影像中解析)',
+  `status` int(10) NOT NULL DEFAULT '1',
+  `institution_id` varchar(200) DEFAULT NULL COMMENT '所属医院',
+  `anamnesis` varchar(255) DEFAULT NULL COMMENT '疾病史',
+  `family_ill` varchar(255) DEFAULT NULL COMMENT '家族史',
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  `ext` json DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `parentinfo-institution` (`institution_id`),
+  KEY `card_num` (`card_num`),
+  KEY `patient_infos_institution_id` (`institution_id`),
+  KEY `patient_infos_temp_patient_id` (`temp_patient_id`),
+  KEY `patient_infos_phone` (`phone`),
+  KEY `patient_id_index` (`temp_patient_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='患者信息表';
+
+-- Create syntax for TABLE 'remote_application'
+CREATE TABLE `remote_application` (
+  `id` varchar(32) NOT NULL,
+  `remote_institution_id` varchar(100) DEFAULT NULL COMMENT '申请的目标医院',
+  `remote_doctor_id` varchar(100) DEFAULT NULL COMMENT '申请的目标医生',
+  `local_institution_id` varchar(100) DEFAULT NULL COMMENT '发起申请医院',
+  `req_date_time` datetime DEFAULT NULL COMMENT '发起时间',
+  `req_doctor_id` varchar(100) DEFAULT NULL COMMENT '申请医生',
+  `illness_desc` varchar(2000) NOT NULL COMMENT '主诉',
+  `clin_symp` varchar(2000) DEFAULT NULL COMMENT '临床症状',
+  `phys_sign` varchar(2000) DEFAULT NULL COMMENT '体征',
+  `clin_diag` varchar(2000) DEFAULT NULL COMMENT '临床诊断',
+  `anamnesis` varchar(2000) DEFAULT NULL COMMENT '既往史',
+  `family_ill` varchar(2000) DEFAULT NULL COMMENT '家族史',
+  `marrital` varchar(2000) DEFAULT '' COMMENT '婚姻史',
+  `remark` varchar(4000) DEFAULT NULL COMMENT '备注',
+  `exam_id` varchar(32) DEFAULT NULL COMMENT '检查表id',
+  `is_urgent` varchar(10) NOT NULL DEFAULT '0' COMMENT '是否急诊 0否  1是',
+  `status` varchar(10) DEFAULT '0' COMMENT '删除状态',
+  `createdAt` datetime DEFAULT NULL COMMENT '创建时间',
+  `application_desc` varchar(2000) DEFAULT NULL COMMENT '申请描述',
+  `attachment` varchar(255) DEFAULT NULL COMMENT '附件',
+  `report_status` varchar(10) DEFAULT '' COMMENT '4、申请 5、驳回 6、接收、7、初步报告 8、审核报告 9、确认、',
+  PRIMARY KEY (`id`),
+  KEY `application-remote-institution` (`remote_institution_id`),
+  KEY `local_institution_id` (`local_institution_id`),
+  KEY `application-remote_doctor` (`remote_doctor_id`) USING BTREE,
+  KEY `application-req_doctor` (`req_doctor_id`) USING BTREE,
+  KEY `application-is_urgent` (`is_urgent`) USING BTREE,
+  KEY `application--exam_id` (`exam_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='申请表';
+
+-- Create syntax for TABLE 'report'
+CREATE TABLE `report` (
+  `id` varchar(32) NOT NULL COMMENT '报告id',
+  `report_datetime` datetime DEFAULT NULL COMMENT '报告时间',
+  `description` text COMMENT '检查所见',
+  `impression` text COMMENT '意见建议',
+  `img_url` varchar(1500) DEFAULT NULL COMMENT '缩略图地址',
+  `exam_id` varchar(255) DEFAULT NULL COMMENT '检查表id',
+  `createdAt` datetime DEFAULT NULL,
+  `report_doctor_id` varchar(255) DEFAULT NULL COMMENT '报告医生id',
+  `review_doctor_id` varchar(255) DEFAULT NULL COMMENT '审核医生id',
+  `qr_code` varchar(255) DEFAULT NULL COMMENT '二维码',
+  `report_result` varchar(255) DEFAULT NULL COMMENT '报告结果(阴阳性) 1阴性 2阳性',
+  `review_datetime` datetime DEFAULT NULL COMMENT '审核时间',
+  `confirm_doctor_id` varchar(50) DEFAULT NULL COMMENT '确认医生',
+  `confirm_datetime` datetime DEFAULT NULL COMMENT '确认时间',
+  `type` varchar(10) DEFAULT '1' COMMENT '报告类型',
+  `remote_application_id` varchar(50) DEFAULT NULL COMMENT '申请id',
+  PRIMARY KEY (`id`),
+  KEY `唯一` (`exam_id`) USING BTREE,
+  KEY `report-doctor` (`report_doctor_id`) USING BTREE,
+  KEY `report-review_doctor` (`review_doctor_id`) USING BTREE,
+  KEY `report-confirm_doctor` (`confirm_doctor_id`) USING BTREE
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='诊断报告';
+
+-- Create syntax for TABLE 'report_record'
+CREATE TABLE `report_record` (
+  `id` varchar(32) NOT NULL,
+  `impression` varchar(2000) DEFAULT NULL COMMENT '检查所见',
+  `description` varchar(2000) DEFAULT NULL COMMENT '意见建议',
+  `report_id` varchar(50) DEFAULT NULL COMMENT '检查表id',
+  `createdAt` datetime DEFAULT NULL,
+  `doctor_id` varchar(50) DEFAULT NULL COMMENT '医生id',
+  `type` varchar(255) DEFAULT NULL COMMENT '操作类型 1报告 2审核 3确认 4驳回',
+  PRIMARY KEY (`id`),
+  KEY `record-report` (`report_id`) USING BTREE,
+  KEY `record-doctor` (`doctor_id`) USING BTREE
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='报告操作历史记录';
+
+-- Create syntax for TABLE 'send_message'
+CREATE TABLE `send_message` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `phone` varchar(100) DEFAULT NULL,
+  `type` varchar(255) DEFAULT NULL,
+  `doctor` varchar(255) DEFAULT NULL,
+  `content` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1668 DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'series'
+CREATE TABLE `series` (
+  `id` varchar(32) NOT NULL,
+  `study_id` varchar(255) DEFAULT NULL,
+  `seriesuid` varchar(255) DEFAULT NULL,
+  `series_num` int(11) unsigned zerofill DEFAULT NULL,
+  `modality` varchar(255) DEFAULT NULL,
+  `description` varchar(255) DEFAULT NULL,
+  `ctime` datetime DEFAULT NULL,
+  `utime` datetime DEFAULT NULL,
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  `ext` json DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY ` seriesuid` (`seriesuid`),
+  KEY `series_modality` (`modality`),
+  KEY `series_study_id` (`study_id`),
+  KEY `series_seriesuid` (`seriesuid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'studies'
+CREATE TABLE `studies` (
+  `id` varchar(32) NOT NULL,
+  `studyuid` varchar(200) NOT NULL DEFAULT '',
+  `patient_id` varchar(50) DEFAULT NULL COMMENT '患者id',
+  `studyid` varchar(50) DEFAULT NULL,
+  `accession_num` varchar(255) DEFAULT NULL COMMENT '科室检查号',
+  `studydate` varchar(255) DEFAULT NULL,
+  `ctime` datetime DEFAULT NULL,
+  `utime` datetime DEFAULT NULL,
+  `modality` varchar(255) DEFAULT NULL,
+  `status` int(11) DEFAULT NULL,
+  `patient_age` varchar(20) DEFAULT NULL,
+  `institution_name` varchar(50) DEFAULT NULL COMMENT '机构名称',
+  `institution_id` varchar(200) DEFAULT NULL,
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  `ext` json DEFAULT NULL,
+  PRIMARY KEY (`id`,`studyuid`),
+  UNIQUE KEY `studyuid` (`studyuid`),
+  KEY `studies_institution_name` (`institution_name`),
+  KEY `studies_patient_id` (`patient_id`),
+  KEY `studies_studydate` (`studydate`),
+  KEY `studies_modality` (`modality`),
+  KEY `studies_status` (`status`),
+  KEY `studies_studyid` (`studyid`),
+  KEY `studies_accession_num` (`accession_num`),
+  KEY `studies_studyuid` (`studyuid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'sys_logs'
+CREATE TABLE `sys_logs` (
+  `id` varchar(35) DEFAULT NULL,
+  `uid` varchar(50) DEFAULT NULL COMMENT '管理员id',
+  `module` varchar(50) DEFAULT NULL COMMENT '功能模块',
+  `type` varchar(5) DEFAULT NULL COMMENT 'CRUD[增查改删],L=login',
+  `txt` text COMMENT '信息',
+  `ip` varchar(50) DEFAULT NULL,
+  `cdate` datetime DEFAULT NULL,
+  KEY `slog-uid` (`uid`) USING BTREE,
+  KEY `slog-module` (`module`) USING BTREE,
+  KEY `slog-type` (`type`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'sys_menus'
+CREATE TABLE `sys_menus` (
+  `id` varchar(32) NOT NULL COMMENT '??',
+  `pid` varchar(32) DEFAULT NULL COMMENT '父类id',
+  `name` varchar(100) DEFAULT NULL COMMENT '菜单名',
+  `url` varchar(255) DEFAULT NULL COMMENT '地址',
+  `ordernum` int(11) DEFAULT NULL COMMENT '排序号',
+  `target` varchar(100) DEFAULT NULL COMMENT '是否弹出',
+  PRIMARY KEY (`id`),
+  KEY `smenu-pid` (`pid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统菜单';
+
+-- Create syntax for TABLE 'templates'
+CREATE TABLE `templates` (
+  `id` varchar(32) NOT NULL DEFAULT '' COMMENT '主键',
+  `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题',
+  `is_public` int(11) NOT NULL DEFAULT '0' COMMENT '公众模版 1:公众模版 2:私有模版',
+  `create_user` varchar(32) NOT NULL DEFAULT '' COMMENT '创建人',
+  `exam_class_id` varchar(32) NOT NULL COMMENT '检查id exam_class.id',
+  `description` varchar(4096) NOT NULL DEFAULT '' COMMENT '影响所见',
+  `impression` varchar(4096) NOT NULL DEFAULT '' COMMENT '印象',
+  `createdAt` datetime NOT NULL COMMENT '创建时间',
+  `parent_id` varchar(50) DEFAULT '0' COMMENT '父类',
+  PRIMARY KEY (`id`),
+  KEY `template-is_public` (`is_public`) USING HASH,
+  KEY `template-exam_class` (`exam_class_id`) USING HASH,
+  KEY `template-create_user` (`create_user`) USING HASH,
+  KEY `template-parent_id` (`parent_id`) USING HASH
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板';
+
+-- Create syntax for TABLE 'user'
+CREATE TABLE `user` (
+  `id` varchar(45) NOT NULL COMMENT '用户id',
+  `wx_openid` varchar(45) DEFAULT NULL COMMENT '微信openid',
+  `wx_icon` varchar(256) DEFAULT '' COMMENT '微信头像',
+  `wx_nickname` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '微信昵称',
+  `source` varchar(45) DEFAULT NULL COMMENT '来源公众号',
+  `phone` varchar(45) DEFAULT NULL COMMENT '手机号',
+  `idcard` varchar(45) DEFAULT NULL COMMENT '身份证号',
+  `subscribe_status` int(1) NOT NULL DEFAULT '0' COMMENT '公众号关注状态0:未关注1:取消关注2:已关注',
+  `createAt` datetime DEFAULT NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `wx_openid_UNIQUE` (`wx_openid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'user_bind'
+CREATE TABLE `user_bind` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `user_id` varchar(45) DEFAULT NULL COMMENT '用户id',
+  `exam_id` varchar(45) DEFAULT NULL COMMENT '检查id',
+  `patient_id` varchar(45) DEFAULT NULL COMMENT '患者id',
+  `storage_endtime` datetime DEFAULT NULL COMMENT '存储截止日期',
+  `bind_way` tinyint(2) NOT NULL DEFAULT '0' COMMENT '绑定途径0:未定义1:扫描报告二维码2:手动添加3:系统自动关联',
+  `status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '状态0:解绑1:正常',
+  `createAt` datetime DEFAULT NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `userid_index` (`user_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=324 DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'version'
+CREATE TABLE `version` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `version` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+
+-- Create syntax for TABLE 'wechat_bind'
+CREATE TABLE `wechat_bind` (
+  `id` int(32) NOT NULL AUTO_INCREMENT,
+  `uid` varchar(32) DEFAULT NULL COMMENT '用户id',
+  `patientName` varchar(100) DEFAULT NULL COMMENT '患者姓名',
+  `patientCode` varchar(100) DEFAULT NULL COMMENT '检查号/病历号/患者ID',
+  `idcard` varchar(100) DEFAULT NULL COMMENT '检查类别名称',
+  `phone` varchar(100) DEFAULT NULL COMMENT '手机号码',
+  `ctime` int(32) NOT NULL COMMENT '创建时间',
+  `status` int(200) DEFAULT '1' COMMENT '状态 1正常 2删除',
+  PRIMARY KEY (`id`),
+  KEY `user_id_index` (`uid`)
+) ENGINE=InnoDB AUTO_INCREMENT=1894 DEFAULT CHARSET=utf8 COMMENT='检查类别表格';

+ 105 - 0
application/common/versionsql/sql.2

@@ -0,0 +1,105 @@
+INSERT INTO `bodypart` (`id`, `name`, `exam_class_id`)
+VALUES
+	('1', '头颅', 'c8ee6b63d4e73871'),
+	('10', '腰椎', 'c8ee6b63d4e73871'),
+	('11', '四肢骨关节', 'c8ee6b63d4e73871'),
+	('12', '鼻窦', 'c8ee6b63d4e73871'),
+	('13', '胸腰椎', 'c8ee6b63d4e73871'),
+	('14', '盆骨', 'c8ee6b63d4e73871'),
+	('15', '四肢关节', 'c8ee6b63d4e73871'),
+	('16', '头颅', 'cfe527f085e4a377'),
+	('17', '胸部', 'cfe527f085e4a377'),
+	('18', '腰椎', 'cfe527f085e4a377'),
+	('19', '四肢骨关节', 'cfe527f085e4a377'),
+	('2', '胸部', 'c8ee6b63d4e73871'),
+	('20', '鼻窦', 'cfe527f085e4a377'),
+	('21', '腹部', 'cfe527f085e4a377'),
+	('22', '胸部', '2'),
+	('23', '颈椎', '2'),
+	('24', '胸腰椎', '2'),
+	('25', '盆骨', '2'),
+	('26', '四肢关节', '2'),
+	('27', '颈椎', '5ad1eb430bf536d0'),
+	('28', '胸部', '5ad1eb430bf536d0'),
+	('29', '胸腰椎', '5ad1eb430bf536d0'),
+	('3', '腹部', 'c8ee6b63d4e73871'),
+	('30', '腹部', '5ad1eb430bf536d0'),
+	('31', '盆骨', '5ad1eb430bf536d0'),
+	('32', '四肢关节', '5ad1eb430bf536d0'),
+	('4', '泌尿', 'c8ee6b63d4e73871'),
+	('5', '五官颈部', 'c8ee6b63d4e73871'),
+	('6', '骨关节', 'c8ee6b63d4e73871'),
+	('7', '盆腔', 'cfe527f085e4a377'),
+	('8', '颈椎', 'cfe527f085e4a377'),
+	('9', '胸椎', 'cfe527f085e4a377');
+INSERT INTO `exam_project` (`id`, `name`, `exam_class_id`, `status`)
+VALUES
+	('04607647bcd5e4b3', '123123', '1', '0'),
+	('1', '五官颈部', '2', '1'),
+	('10', '胸部', '1', '0'),
+	('11', '腰椎', '1', '0'),
+	('12', '腹部', '1', '0'),
+	('13', '颈椎', '1', '0'),
+	('14', '骨关节', '1', '0'),
+	('15', '鼻窦', '1', '0'),
+	('16', '2222', '2', '0'),
+	('1fbc79513610bd79', '123123', '1', '0'),
+	('2', '四肢关节', '1', '0'),
+	('3', '四肢骨关节', '1', '0'),
+	('4', '头颅', '1', '0'),
+	('4706269d2c9c7391', '123123', '1', '0'),
+	('5', '泌尿', '1', '0'),
+	('5712eec3b43a8166', '333', '1', '0'),
+	('6', '盆腔', '1', '0'),
+	('6c6799a7c7c1e20a', '44444', '1', '0'),
+	('7', '盆骨', '1', '0'),
+	('8', '胸椎', '1', '0'),
+	('9', '胸腰椎', '1', '0'),
+	('a99fbe50ff75cc47', '123455555', '1', '0');
+INSERT INTO `exam_subclass` (`id`, `name`, `exam_class_id`)
+VALUES
+	('700bae6ac9efcefc', 'CR平片', '5ad1eb430bf536d0'),
+	('e5fec1f1074b5dcb', 'CR造影片', '2');
+INSERT INTO `menu` (`id`, `name`, `status`, `parent_id`, `url`, `ordernum`, `icon_name`)
+VALUES
+	('64022a6a4b32abae', '本地系统', NULL, 'root', '', 1010, NULL),
+	('814dc08e8183952d', '远程系统', NULL, 'root', '', 1020, NULL),
+	('80ddb7d09ebc44b4', '科室报告', NULL, '64022a6a4b32abae', '/sectionreport/sectionreport', 1013, 'chart'),
+	('0eac42ef01de23ff', '登记列表', NULL, '64022a6a4b32abae', '/application/application', 1012, 'list'),
+	('0aa9d7b2fdf7268e', '工作列表', NULL, '814dc08e8183952d', '/remotereport/index', 1025, 'list');
+INSERT INTO `sys_menus` (`id`, `pid`, `name`, `url`, `ordernum`, `target`)
+VALUES
+	('07442f916c1d9a63', 'ad02fab359b91ebb', '配置-数据字典', '/manage/constant/index', 9089, NULL),
+	('0b48638f82818130', 'ad02fab359b91ebb', '每日上传统计数量', '/manage/studiesnums/index', 10001, NULL),
+	('0fd462a79d0f267c', 'ad02fab359b91ebb', '机构管理', '/manage/institution/index', 9001, NULL),
+	('15c7c3306f9846d7', 'ad02fab359b91ebb', '配置-检查类别项目', '/manage/examProject/index', 9084, NULL),
+	('186a2bea923f7a5a', 'ad02fab359b91ebb', '医生信息管理', '/manage/doctors/index', 9010, NULL),
+	('3b381700e023407f', 'root', '医院信息管理', '22', 2000, NULL),
+	('5b4b01c75308756f', 'ffa1ef3bbd49529f', '合作机构统计', '/manage/stats/insstat', 3020, NULL),
+	('5b4b01c753087asd', 'ffa1ef3bbd49529f', '数据统计信息', '/manage/counts/index', 3020, ''),
+	('5cc92a58584fea1d', 'ad02fab359b91ebb', '统计-代理', '', 9103, NULL),
+	('665dec1b9645000c', 'ad02fab359b91ebb', '患者信息管理', '/manage/patientInfo/index', 9050, NULL),
+	('66d2c37d572f4592', 'ad02fab359b91ebb', '配置-检查类别子类', '/manage/examsubclass/index', 9083, NULL),
+	('68e78adba43efaf8', 'ad02fab359b91ebb', '统计-医生', '', 9100, NULL),
+	('6e956175c1fe5325', 'ad02fab359b91ebb', '菜单配置', '/manage/sysmenu/index', 9998, NULL),
+	('867bbab88ac64a51', 'ad02fab359b91ebb', '检查信息管理', '/manage/exam/index', 9030, NULL),
+	('8e2a171b1f37f308', 'ad02fab359b91ebb', '配置-查检类别', '/manage/examclass/index', 9082, NULL),
+	('995defb30bac9f03', 'ad02fab359b91ebb', '管理员管理', '/manage/manager/index', 9997, NULL),
+	('ad02fab359b91ebb', 'root', '后台配置', '', 9000, NULL),
+	('afe7db2716908158', '3b381700e023407f', '医院医生管理', '/manage/insdoctors/index', 2010, NULL),
+	('b9f0e881525bc1e9', 'ad02fab359b91ebb', '系统日志', '/manage/syslog/index', 9999, NULL),
+	('c17cac89e28a3f60', 'ad02fab359b91ebb', '诊断模版管理', '/manage/template/index', 9011, NULL),
+	('c8c33f6bea1e1b74', 'ffa1ef3bbd49529f', '合作整体统计', '/manage/stats/index', 3010, NULL),
+	('ce5413b40457d096', 'ad02fab359b91ebb', '数据统计信息', '/manage/counts/index', 10000, NULL),
+	('d2f4f8aeeedd7dfc', 'ad02fab359b91ebb', '配置-前端菜单管理', '/manage/frontmenu/index', 9081, NULL),
+	('eed548fd10c592ff', '3b381700e023407f', '医院数据统计', '/manage/insdoctors/stats', 2011, NULL),
+	('f4513b798b2a3e6d', 'ad02fab359b91ebb', '统计-医院', '', 9102, NULL),
+	('f4c11ace1a11e682', 'ad02fab359b91ebb', '消息通知管理', '/manage/messages/index', 9012, NULL),
+	('ffa1ef3bbd49529f', 'root', '合作伙伴', '', 3000, NULL);
+INSERT INTO `version` (`id`, `version`)
+VALUES
+	(1, '2');
+INSERT INTO `manager` (`id`, `role_id`, `username`, `password`, `email`, `phone`, `logintime`, `loginip`, `loginfailure`, `createdAt`, `updatedAt`, `institution_id`, `status`)
+VALUES
+	('og11yjl51e7b3l4q', '0', 'admin', 'admin', '0', '13651111111', '2019-07-04 17:58:36', '121.69.81.74', 0, '2018-08-16 15:06:12', '2018-08-20 15:32:13', '', 1);
+

Fichier diff supprimé car celui-ci est trop grand
+ 571 - 0
application/common/versionsql/sql.3


+ 1 - 1
application/database.php

@@ -13,7 +13,7 @@ return [
     // 数据库类型
     'type'            => 'mysql',
     // 服务器地址
-    'hostname'        => '127.0.0.1',
+    'hostname'        => '47.104.6.21',
     // 数据库名
     'database'        => 'pacsonline',
     // 用户名

+ 387 - 23
application/inter/controller/Application.php

@@ -11,6 +11,8 @@ use app\common\library\Verify;
 use think\File;
 use app\common\library\send_message;
 use app\common\library\Message;
+use app\inter\service\WechatService;
+
 class Application extends Base
 {
     /**
@@ -75,22 +77,61 @@ class Application extends Base
             $doctor = Cache::get($sessionid);
             $institution_id = $doctor['institution_id'];
             $hospital = DB::table('institution')->where('id',$institution_id)->find();
-            $parent_hosp = explode(',',$hospital['parent_institution']);
+            $is_pay = $hospital['is_pay'];
             $parent_name = array();
-            foreach($parent_hosp as $v){
-                $phname = DB::table("institution")->where('id',$v)->cache(300)->field(['id','name'])->find();
-                log::record('上级医院----'.json_encode($phname));
-                if(!isset($phname['id']) || empty($phname['id'])){
-                    $phname['id'] = $v;
+            // select rc1.hospital_id, rc1.super_hospital_id, rc1.hospital_name, rc1.super_hospital_name, rc1.pay_type, rc2.super_doctor_id, rc2.super_doctor_name, rc2.exam_class from remote_contact rc1 join remote_cost rc2 on rc1.hospital_id = rc2.hospital_id and rc1.super_hospital_id = rc2.super_hospital_id where rc1.hospital_id = '13000003' and rc2.exam_class='CT' order by rc1.sort, rc2.sort
+            if($is_pay === 1) {
+                $super_hospitals = array();
+                $super_doctors = DB::table("remote_contact")
+                ->alias("rc1")
+                ->join('remote_cost rc2', 'rc1.hospital_id = rc2.hospital_id and rc1.super_hospital_id = rc2.super_hospital_id')
+                ->where('rc1.hospital_id', $institution_id)
+                ->where('rc2.exam_class', $info['exam_class'])
+                ->field('rc1.hospital_id, rc1.super_hospital_id, rc1.hospital_name, rc1.super_hospital_name, rc1.pay_type, rc2.super_doctor_id, rc2.super_doctor_name, rc2.exam_class, rc2.is_admin')
+                // ->fetchSql()
+                ->select();
+                // var_dump($super_doctors);
+                foreach($super_doctors as $v) {
+                    if(!isset($super_hospitals[$v['hospital_id']])){
+                        $super_hospitals[$v['hospital_id']] = [
+                            "doctor" => [
+                                [
+                                    "id" => $v['super_doctor_id'],
+                                    "is_admin" => $v['is_admin'],
+                                    "realname" => $v['super_doctor_name']
+                                ]
+                            ],
+                            "id" => $v['super_hospital_id'],
+                            "name" => $v['super_hospital_name'],
+                        ];
+                    } else {
+                        $super_hospitals[$v['hospital_id']]['doctor'][] = [
+                            "id" => $v['super_doctor_id'],
+                            "is_admin" => $v['is_admin'],
+                            "realname" => $v['super_doctor_name']
+                        ];
+                    }
                 }
-                $doctor_info = DB::table('doctors')->where('institution_id',$v)->field('id,realname,is_admin')->order('is_admin desc')->select();
-                foreach($doctor_info as $key=>$value){
-                    if($value['is_admin'] == 1){
-                        $doctor_info[$key]['realname'] = $value['realname'].'---医院管理员';
+                foreach($super_hospitals as $v) {
+                    $parent_name[] = $v;
+                }
+            } else {
+                $parent_hosp = explode(',',$hospital['parent_institution']);
+                foreach($parent_hosp as $v){
+                    $phname = DB::table("institution")->where('id',$v)->cache(300)->field(['id','name'])->find();
+                    log::record('上级医院----'.json_encode($phname));
+                    if(!isset($phname['id']) || empty($phname['id'])){
+                        $phname['id'] = $v;
+                    }
+                    $doctor_info = DB::table('doctors')->where('institution_id',$v)->field('id,realname,is_admin')->order('is_admin desc')->select();
+                    foreach($doctor_info as $key=>$value){
+                        if($value['is_admin'] == 1){
+                            $doctor_info[$key]['realname'] = $value['realname'].'---医院管理员';
+                        }
                     }
+                    $phname['doctor'] = $doctor_info;
+                    $parent_name[] =$phname;
                 }
-                $phname['doctor'] = $doctor_info;
-                $parent_name[] =$phname;
             }
             $info['parent_hospital'] = $parent_name;
             //申请信息
@@ -103,6 +144,15 @@ class Application extends Base
                 $application = DB::table('remote_application')->where('exam_id',$id)->field(['id,report_status,id,remote_doctor_id','application_desc','attachment','req_doctor_id','illness_desc','phys_sign','clin_symp','is_urgent','anamnesis','family_ill','remark','clin_diag'])->find();
                 $aid = $application['id'];
             }
+            $remote_order =  DB::table('remote_order')
+            ->where('application_id', $application['id'])
+            ->where('status', 'neq', self::ORDER_STATUS['CANCEL'])
+            ->where('status', 'neq', self::ORDER_STATUS['REDUCE'])
+            ->field('id, status, exam_class, super_hospital_id, super_doctor_id')
+            ->find();
+            if($remote_order) {
+                $info['remote_order'] = $remote_order;
+            }
             if($is_remote == 1){
                 Message::read($doctor['id'],$aid,1);
                 //远程申请点击进入
@@ -150,7 +200,44 @@ class Application extends Base
             return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
         }
     }
-
+    /**取消订单 */
+    public function cancel(){
+        try{
+            log::record($_REQUEST);
+            $sessionid = $_REQUEST['sessionid'];
+            $doctor = Cache::get($sessionid);
+            //  远程申请权限 6
+            $return  = Verify::check_role($sessionid, 6);
+            if($return != 1){
+                return json_encode(['status'=>'fail','code'=>'1029','msg'=>'没有操作权限']);
+            }
+            $param = $_REQUEST['param'];
+            $order_id = $param['order_id'];
+            $remote_order = DB::table('remote_order')->where('id', $order_id)->field('application_id, hospital_id, doctor_id, status, pay_type, order_money')->find();
+            if(!$remote_order) {
+                return json_encode(['status'=>'fail','code'=>'2101','msg'=> '没有找到该订单']);
+            }
+            if(!($remote_order['status'] === self::ORDER_STATUS['CREATE'] || $remote_order['status'] === self::ORDER_STATUS['PAYCOMPLTET'])) {
+                return json_encode(['status'=>'fail','code'=>'2102','msg'=> '订单状态不可取消']);
+            }
+            $application = DB::table('remote_application')->where('id', $remote_order['application_id'])->field('report_status')->find();
+            if(!$application) {
+                return json_encode(['status'=>'fail','code'=>'2103','msg'=> '没有找到远程诊断申请单']);
+            }
+            if(!($application['report_status'] === '5' || $application['report_status'] === '12')) {
+                return json_encode(['status'=>'fail','code'=>'2103','msg'=> '进行中的远程诊断订单不可取消']);
+            }
+            if($remote_order['pay_type'] === self::PAY_TYPE['HOSPITAL']) {
+                return $this->cancelHospitalOrder($order_id, $remote_order['hospital_id'], $remote_order['order_money']);
+            }
+            if($remote_order['pay_type'] === self::PAY_TYPE['PATIENT']) {
+                return $this->cancelPatientsOrder($order_id, $remote_order['application_id']);
+            }
+            return json_encode(['status'=>'ok','code'=>'0000','sessionid'=>$sessionid]);
+        }catch(\Exception $e){
+            return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
+        }
+    }
     /**
      *  提交申请
      *
@@ -189,8 +276,10 @@ class Application extends Base
     }
      *")
      **/
-    public function apply(){
+    public function apply(WechatService $wechatService){
         try{
+            // var_dump(1);
+            // var_dump($wechatService);
             log::record($_REQUEST);
             $sessionid = $_REQUEST['sessionid'];
             $doctor = Cache::get($sessionid);
@@ -256,16 +345,22 @@ class Application extends Base
             $application_info['clin_diag'] = isset($param['clin_diag']) ? $param['clin_diag'] : '';
             if(isset($param['is_urgent']) && $param['is_urgent'] == 'true' ){
                 $application_info['is_urgent'] = 1;
-                $application_info['remote_doctor_id'] = '';
+                $remote_doctor_id = '';
                 $d_time = date('H:i',strtotime('+30 min'));
             }else{
                 $application_info['is_urgent'] = 0;
-                $application_info['remote_doctor_id'] = isset($param['remote_doctor_id']) ? $param['remote_doctor_id'] : '';
+                $remote_doctor_id = isset($param['remote_doctor_id']) ? $param['remote_doctor_id'] : '';
                 $d_time = date('H:i',strtotime('+1 hour'));
             }
+            if($remote_doctor_id === '') {
+                $manager = DB::table('')->where('institution_id',$application_info['remote_institution_id'])->where('is_admin', '1')->field('id')->find();
+                if(!empty($manager)) {
+                    $remote_doctor_id = $manager['id'];
+                }
+            }
             $application_info['application_desc'] = isset($param['description']) ? $param['description'] : '';
             $application_info['req_doctor_id'] = $doctor['id'];
-            $application_info['remote_doctor_id'] = isset($param['remote_doctor_id']) ? $param['remote_doctor_id'] : '';
+            $application_info['remote_doctor_id'] = $remote_doctor_id;
             $application_info['attachment'] = isset($param['attachment']) ? $param['attachment'] : '';
 //            $remote_application = DB::table('remote_application')->where('exam_id',$param['id'])->select();
             // 申请远程
@@ -284,7 +379,7 @@ class Application extends Base
                 $app_id = $application_info['id'];
             }
             $aid = $app_id;
-            $r_info = DB::table('report')->where('exam_id',$param['id'])->find();
+            $r_info = DB::table('report')->where('exam_id',$param['id'])->where('remote_application_id', $aid)->find();
             if(empty($r_info)){
                 $report['id'] = UUIDs::uuid16();
                 $report['exam_id'] = $param['id'];
@@ -302,8 +397,87 @@ class Application extends Base
 //                $aid = $r['id'];
 //            }
             if(isset($param['apply']) && !empty($param['apply'])){
-                DB::table('remote_application')->where('exam_id',$param['id'])->update(['report_status'=>4]);
+                $institution_id = $doctor['institution_id'];
+                $lower_hospital = DB::table('institution')->where('id', $institution_id)->field('is_pay')->find();
+                $is_pay = $lower_hospital['is_pay'];
+                $application = DB::table('remote_application')->where('exam_id', $param['id'])->field('id, remote_institution_id, remote_doctor_id, local_institution_id, req_doctor_id, is_urgent')->find();
+                if(empty($application)) {
+                    return json_encode(['status'=>'fail','code'=>'2011','msg'=> '申请单创建失败']);
+                }
+                $remote_institution_id = $application['remote_institution_id'];
+                $remote_doctor_id = $application['remote_doctor_id'];
+                $is_urgent = $application['is_urgent'];
+                $local_institution_id = $application['local_institution_id'];
+                $req_doctor_id = $application['req_doctor_id'];
+                if(empty($remote_institution_id)) {
+                    return json_encode(['status'=>'fail','code'=>'2012','msg'=> '远程机构id为空']);
+                }
+                // if(empty($remote_doctor_id)) {
+                //     return json_encode(['status'=>'fail','code'=>'2013','msg'=> '远程医生id为空']);
+                // }
+                if(empty($local_institution_id)) {
+                    return json_encode(['status'=>'fail','code'=>'2014','msg'=> '本地机构id为空']);
+                }
+                if(empty($req_doctor_id)) {
+                    return json_encode(['status'=>'fail','code'=>'2015','msg'=> '本地医生id为空']);
+                }
+                if($is_pay === 1) {
+                    $cost = DB::table('remote_cost')
+                    ->where('hospital_id', $local_institution_id)
+                    ->where('super_hospital_id', $remote_institution_id)
+                    ->where('super_doctor_id', $remote_doctor_id)
+                    ->where('exam_class', $exam_info['exam_class'])
+                    ->field('money')
+                    ->find();
+                    if(!$cost) {
+                        return json_encode(['status'=>'ok','code'=>'2016','msg'=> '远程医生获取失败']);
+                    }
+                    if($cost['money'] !== 0) {
+                        $contact = DB::table('remote_contact')
+                        ->where('hospital_id', $local_institution_id)
+                        ->where('super_hospital_id', $remote_institution_id)
+                        ->field('pay_type')
+                        ->find();
+                        if(!$contact) {
+                            return json_encode(['status'=>'ok','code'=>'2017','msg'=> '远程机构获取失败']);
+                        }
+                        if($contact['pay_type'] === 0) { //医院挂账
+                            // $hospital_id, $super_hospital_id, $doctor_id, $super_doctor_id, $exam_class, $application_id, $order_money
+                            $res = $this->createHospitalOrder($local_institution_id, $remote_institution_id, $req_doctor_id, $remote_doctor_id, $exam_info['exam_class'], $application['id'], $cost['money'], $is_urgent);
+                            if($res !== true) {
+                                return $res;
+                            }
+                        }
+                        if($contact['pay_type'] === 1) { // 患者支付
+                            // var_dump(2);
+                            // var_dump($wechatService);
+                            // $push_res = WechatService::pushWechatOrder($param['id']);
+                            $wechatService->pushWechatOrder($param['id']);
+                            $res = $this->createPatientsOrder($local_institution_id, $remote_institution_id, $req_doctor_id, $remote_doctor_id, $exam_info['exam_class'], $application['id'], $cost['money'], $is_urgent);
+                            return json_encode(['status'=>'ok','code'=>'0000']);
+                        }
+                    }
+                } else {
+                    DB::table('remote_order')->insert([
+                        'id' => UUIDs::uuid16(),
+                        'hospital_id' => $local_institution_id,
+                        'super_hospital_id' => $remote_institution_id,
+                        'exam_class' => $exam_info['exam_class'],
+                        'doctor_id' => $req_doctor_id,
+                        'application_id' => $application['id'],
+                        'super_doctor_id' => $remote_doctor_id,
+                        'is_urgent' => $is_urgent,
+                        'status' => self::ORDER_STATUS['PAYCOMPLTET'],
+                        'order_money' => 0,
+                        'pay_type' => self::PAY_TYPE['HOSPITAL'],
+                        'pay_way' => self::PAY_WAY['HOSPITAL'],
+                        'timestamp' => time()
+                    ]);
+                    DB::table('remote_application')->where('exam_id',$param['id'])->update(['report_status'=>4]);
+                }
                 // 添加messages信息
+
+                $wechatService->pushWechatOrder($param['id']);
                 $t = '收到一条远程诊断申请';
                 $ins = DB::table('institution')->where('id',$doctor['institution_id'])->field('name')->find();
                 $c = $ins['name'].$doctor['realname'].'医师向您发起一条远程诊断申请';
@@ -318,10 +492,11 @@ class Application extends Base
                 if($dinfo['institution_id'] == '22100003' || $dinfo['send_sms'] == 1){ //魏庙
                     $repsone = send_message::sendSms2Apply($d_phone,$d_time,$d_name);
                 }
-                $tel = '18910184804';
-                $type = '发起申请';
-                $content  = $aid;
-//                $response = send_message::sendSms2Self($tel,$type,$content);
+                    // $tel = '18910184804';
+                    // $type = '发起申请';
+                    // $content  = $aid;
+    //                $response = send_message::sendSms2Self($tel,$type,$content);
+                
             }
             return json_encode(['status'=>'ok','code'=>'0000','sessionid'=>$sessionid,'aid'=>$aid]);
         }catch(\Exception $e){
@@ -329,6 +504,195 @@ class Application extends Base
         }
     }
 
+    private function createHospitalOrder($hospital_id, $super_hospital_id, $doctor_id, $super_doctor_id, $exam_class, $application_id, $order_money, $is_urgent = 0) {
+        DB::startTrans();
+        $pay_type = self::PAY_TYPE['HOSPITAL'];
+        $pay_way = self::PAY_TYPE['HOSPITAL'];
+        $water_type = self::WATER_TYPE['REDUCE'];
+        $water_why = self::WATER_WHY['REMOTEPAY'];
+        try{
+            $remote_order =  DB::table('remote_order')
+            ->where('application_id', $application_id)
+            ->where('status', 'neq', self::ORDER_STATUS['CANCEL'])
+            ->where('status', 'neq', self::ORDER_STATUS['REDUCE'])
+            ->field('id')
+            ->find();
+            DB::table('remote_application')->where('id',$application_id)->update(['report_status'=>4]);
+            if($remote_order) {
+                DB::commit();
+                // return true;
+                // DB::rollback();
+                return json_encode(['status'=>'fail','code'=>'2019','已存在订单,请勿重复发起']);
+            }
+            $hospital = DB::table('institution')
+            ->where('id', $hospital_id)
+            ->field('min_money, current_money')
+            ->find();
+            if(!$hospital) {
+                DB::rollback();
+                return json_encode(['status'=>'fail','code'=>'2017','查找本地医院失败']);
+            }
+            $min_money = $hospital['min_money'];
+            $current_money = $hospital['current_money'];
+            if($current_money - $order_money < $min_money) {
+                DB::rollback();
+                return json_encode(['status'=>'fail','code'=>'2017','余额不足请联系医院管理员充值']);
+            }
+            DB::table('institution')->where('id',$hospital_id)->update(['current_money'=> $current_money - $order_money]);
+            $order_id = UUIDs::uuid16();
+            DB::table('remote_order')->insert([
+                'id' => $order_id,
+                'hospital_id' => $hospital_id,
+                'super_hospital_id' => $super_hospital_id,
+                'exam_class' => $exam_class,
+                'doctor_id' => $doctor_id,
+                'is_urgent' => $is_urgent,
+                'application_id' => $application_id,
+                'super_doctor_id' => $super_doctor_id,
+                'order_money' => $order_money,
+                'pay_type' => $pay_type,
+                'pay_way' => $pay_way,
+                'timestamp' => time(),
+            ]);
+            DB::table('remote_water')->insert([
+                'id' => UUIDs::uuid16(),
+                'hospital_id' => $hospital_id,
+                'order_id' => $order_id,
+                'money' => $order_money,
+                'type' => $water_type,
+                'why' => $water_why,
+                'timestamp' => time(),
+            ]);
+            // 提交事务
+            DB::commit();
+            return true;
+        } catch (\Exception $e) {
+            // 回滚事务
+            DB::rollback();
+        }
+        return json_encode(['status'=>'fail','code'=>'2018','远程诊断发起失败']);
+    }
+    private function createPatientsOrder($hospital_id, $super_hospital_id, $doctor_id, $super_doctor_id, $exam_class, $application_id, $order_money, $is_urgent = 0) {
+        $pay_type = self::PAY_TYPE['PATIENT'];
+        $pay_way = self::PAY_WAY['WECHAT'];
+        DB::startTrans();
+        try{
+            $remote_order =  DB::table('remote_order')
+            ->where('application_id', $application_id)
+            ->where('status', 'neq', self::ORDER_STATUS['CANCEL'])
+            ->where('status', 'neq', self::ORDER_STATUS['REDUCE'])
+            ->field('id')
+            ->find();
+            DB::table('remote_application')->where('id',$application_id)->update(['report_status'=>4]);
+            if($remote_order) {
+                DB::commit();
+                // return json_encode(['status'=>'ok','code'=>'0000','oid'=>$remote_order['id'],'aid'=>$application_id]);
+                // DB::rollback();
+                return json_encode(['status'=>'fail','code'=>'2019','已存在订单,请勿重复发起']);
+            }
+            $order_id = UUIDs::uuid16();
+            DB::table('remote_order')->insert([
+                'id' => $order_id,
+                'hospital_id' => $hospital_id,
+                'super_hospital_id' => $super_hospital_id,
+                'exam_class' => $exam_class,
+                'doctor_id' => $doctor_id,
+                'application_id' => $application_id,
+                'super_doctor_id' => $super_doctor_id,
+                'is_urgent' => $is_urgent,
+                'order_money' => $order_money,
+                'pay_type' => $pay_type,
+                'pay_way' => $pay_way,
+                'timestamp' => time(),
+                'status' => self::ORDER_STATUS['CREATE']
+            ]);
+            DB::commit();
+            return json_encode(['status'=>'ok','code'=>'0000','oid'=>$order_id,'aid'=>$application_id]);
+        } catch (\Exception $e) {
+            var_dump($e);
+            DB::rollback();
+        }
+        return json_encode(['status'=>'fail','code'=>'2020','远程诊断发起失败']);
+    }
+
+    private function cancelHospitalOrder($order_id, $hospital_id, $order_money) {
+        DB::startTrans();
+        $water_type = self::WATER_TYPE['ADD'];
+        $water_why = self::WATER_WHY['REFUNDINCOME'];
+        try{
+            DB::table('remote_order')->where('id', $order_id)->update(["status" => self::ORDER_STATUS["REDUCE"]]);
+            $hospital = DB::table('institution')
+            ->where('id', $hospital_id)
+            ->field('current_money')
+            ->find();
+            $current_money = $hospital['current_money'];
+            DB::table('institution')->where('id',$hospital_id)->update(['current_money'=> $current_money + $order_money]);
+            DB::table('remote_water')->insert([
+                'id' => UUIDs::uuid16(),
+                'hospital_id' => $hospital_id,
+                'order_id' => $order_id,
+                'money' => $order_money,
+                'type' => $water_type,
+                'why' => $water_why,
+                'timestamp' => time(),
+            ]);
+            // 提交事务
+            DB::commit();
+            // todo 消息推送
+            return json_encode(['status'=>'ok','code'=>'0000']);
+        } catch (\Exception $e) {
+            // 回滚事务
+            DB::rollback();
+        }
+        return json_encode(['status'=>'fail','code'=>'2018','取消订单失败']);
+    }
+    private function cancelPatientsOrder($order_id) {
+        try{
+            DB::table('remote_order')->where('id', $order_id)->update(["status" => self::ORDER_STATUS["CANCEL"]]);
+            // todo 消息推送
+            return json_encode(['status'=>'ok','code'=>'0000']);
+        } catch (\Exception $e) {
+            var_dump($e);
+        }
+        return json_encode(['status'=>'fail','code'=>'2109','订单取消失败']);
+    }
+
+    /**订单状态 创建 支付完成 订单完成 取消 */
+    public const ORDER_STATUS = [
+        'CREATE' => 1,
+        'PAYCOMPLTET' => 2,
+        'CONFIRM' => 3,
+        'CANCEL' => 4,
+        'REDUCE' => 5
+    ];
+
+    /**流水类型 加 减 */
+    public const WATER_TYPE = [
+        'ADD' => 1,
+        'REDUCE' => 2
+    ];
+
+    /**流水原因 远程诊断医院扣款 远程诊断医院收入 远程诊断退款 远程诊断退款收入 */
+    public const WATER_WHY = [
+        'REMOTEPAY' => 21,
+        'REMOTEINCOME' => 11,
+        'REMOTEREFUND' => 22,
+        'REFUNDINCOME' => 12
+    ];
+    // why 患者支付/远程诊断收入/远程诊断付款/远程诊断退款/提现
+    /**支付方式 微信 支付宝 银联 医院扣款*/
+    public const PAY_WAY = [
+        "HOSPITAL" => 1,
+        "WECHAT" => 11,
+        "ALIPAY" => 12,
+        "BANK" => 13
+    ];
+   
+    /**支付类型 医院 微信 */
+    public const PAY_TYPE = [
+        "HOSPITAL" => 0,
+        "PATIENT" => 1
+    ];
 
     /**
      * 上传附件

+ 301 - 66
application/inter/controller/Reciveremote.php

@@ -6,8 +6,8 @@ use think\Cache;
 use think\Controller;
 use think\Db;
 use think\Log;
-
-
+// select count(*) from remote_application ra left join remote_order ro on ro.id = (select id from remote_order rot where rot.application_id = ra.id order by timestamp desc limit 1) where ra.remote_institution_id='09b4765b26ba8b7c' and (report_status = '4' or report_status = '6' or report_status = '7' or report_status = '8' or report_status = '9') and  (ra.remote_doctor_id='b5bed8f973852c22' or ra.remote_doctor_id = '') and (ro.status is null or ro.status = 2 or ro.status = 3)
+// select is_urgent, report_status, req_date_time from remote_application ra left join remote_order ro on ro.id = (select id from remote_order rot where rot.application_id = ra.id order by timestamp desc limit 1) where ra.remote_institution_id='09b4765b26ba8b7c' and (report_status = '4' or report_status = '6' or report_status = '7' or report_status = '8' or report_status = '9') and  (ra.remote_doctor_id='b5bed8f973852c22' or ra.remote_doctor_id = '') and (ro.status is null or ro.status = 2 or ro.status = 3) order by (ra.is_urgent = '1' and ra.report_status = '4') desc, (ra.is_urgent = '1' and ra.report_status = '6') desc, (ra.is_urgent = '1' and ra.report_status = '7'), ra.req_date_time desc limit 20
 class Reciveremote extends Base
 {
     /**
@@ -47,6 +47,161 @@ class Reciveremote extends Base
 }
  *")
  **/
+//     public function index()
+//     {
+//         try{
+//             log::record('---------工作列表--------');
+//             log::record($_REQUEST);
+//             $sessionid = $_REQUEST['sessionid'];
+//             $doctor = Cache::get($sessionid);
+//             log::record($doctor);
+//             $app_info = DB::table('remote_application')->where('remote_institution_id', $doctor['institution_id'])->select();
+//             foreach ($app_info as $k => $v) {
+//                 $exam_id = $v['exam_id'];
+//                 $report = DB::table('report')->where('exam_id', $exam_id)->where('remote_application_id',$v['id'])->find();
+//                 if (!$report) {
+//                     $data = array();
+//                     $data['id'] = UUIDs::uuid16();
+//                     $data['exam_id'] = $exam_id;
+//                     $data['remote_application_id'] = $v['id'];
+//                     $data['type'] = 2;
+//                     $data['createdAt'] = date('Y-m-d H:i:s',time());
+//                     DB::table('report')->insert($data);
+//                 }
+//             }
+//             $where = '';
+//             if(isset($_REQUEST['param'])){
+//                 $param = $_REQUEST['param'];
+//                 foreach ($param as $k => $v) {
+//                     switch ($k) {
+//                         case 'patient_num':
+//                             $where .= " and e." . $k . "='" . $v . "' ";
+//                             break;
+//                         case 'exam_class' :
+//                             if(empty($v)){
+//                                 break;
+//                             }
+//                             $ex = implode('\',\'',$v);
+//                             $where .= " and e.exam_class in ('".$ex."')";
+//                             break;
+//                         case 'name':
+//                             $where .= " and p.name  like '".$v."%' ";
+//                             break;
+//                         case 'applicationtime':
+//                             if(empty($v)){
+//                                 break;
+//                             }
+//                             $where .= " and ra.req_date_time between '$v[0]' and '$v[1]'";
+//                             break;
+//                         case 'is_urgent':
+//                             if($v == 0){
+//                                 break;
+//                             }
+//                             $where .= " and ra.is_urgent=".$v;
+//                             break;
+//                         case 'report_result':
+//                             if($v == 2){
+//                                 $where .= " and r.report_result=2";
+//                             }elseif($v == 1){
+//                                 $where .= " and r.report_result=1";
+//                             }{
+//                                 break;
+//                             }
+//                             break;
+//                         case 'exam_status':
+//                             if($v != 10){
+//                                 $where .= " and ra.report_status=".$v;
+//                             }
+//                             break;
+//                     }
+//                 }
+//             }
+//             $doc_class = DB::table('doctor_class')->where('doctor_id',$doctor['id'])->value('doctor_class');
+//             if(strpos('8',$doc_class) !== false){
+//                 $dwhere = ' or ra.report_status=7 ';
+//             }else{
+//                 $dwhere = '';
+//             }
+//             log::record($where);
+//             $page =  $_REQUEST['page'];
+//             $num =  $_REQUEST['num'];
+//             $fnum = ($page-1)*$num;
+//             $limit = " limit ".$fnum.",".$num;
+//             /*if(empty($where)){
+//                 $dclass = DB::table('doctor_class')->where('doctor_id',$doctor['id'])->cache(300)->field('doctor_class')->find();
+//                 if(empty($dclass['doctor_class'])){
+//                     $dclass['doctor_class'] = 0;
+//                 }
+//                 log::record($dclass);
+//                 $sql1 = "SELECT e.exam_status,e.exam_class,e.body_part,e.device,e.exam_sub_class,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.*,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id'] . "' and ra.is_urgent=1 and e.exam_status in (".$dclass['doctor_class'].")";
+//                 $sql2 = "SELECT e.exam_status,e.exam_class,e.body_part,e.device,e.exam_sub_class,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.*,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id'] . "' and ra.is_urgent=0  and e.exam_status in (".$dclass['doctor_class'].")";
+//                 $sql3 = "SELECT e.exam_status,e.exam_class,e.body_part,e.device,e.exam_sub_class,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.*,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id'] . "'and e.exam_status not in (".$dclass['doctor_class'].")";
+//                 $sql = '('.$sql1.') union ('.$sql2.') union ('.$sql3.')'.$limit;  //ra.report_status,6,7,8,4,9,5,12
+//             }else{*/
+//                 $sql = "SELECT e.id,e.severe,e.exam_status,e.exam_class,e.exam_sub_class,e.body_part,e.device,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.id as ra_id,ra.*,r.id as report_id,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where (ra.remote_doctor_id='".$doctor['id']."' or ra.remote_doctor_id=''".$dwhere.") and ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and r.remote_application_id=ra.id and ra.report_status !='' and ra.remote_institution_id='" . $doctor['institution_id']."'".$where." order by req_date_time desc,ra.is_urgent desc,ra.req_date_time desc".$limit;
+// //            }
+//             log::record($sql);
+//             $list = DB::query($sql);
+//             $csql = "SELECT count(1) from exams as e,remote_application as ra,patient_infos as p,report as r where (ra.remote_doctor_id='".$doctor['id']."' or ra.remote_doctor_id=''".$dwhere.") and r.remote_application_id=ra.id and ra.exam_id=e.id and ra.report_status !='' and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id']."'".$where;
+//             $count = DB::query($csql);
+//             foreach ($list as $k => $v) {
+//                 $cache_key = $doctor['id'].'_'.$v['id'];
+//                 if(Cache::get($cache_key)){
+//                     $list[$k]['status'] = 1;
+//                 }else{
+//                     $list[$k]['status'] = 0;
+//                 }
+//                 //申请医院
+//                 $local_institution = DB::table('institution')->where('id',$v['local_institution_id'])->cache(300)->field('name')->find();
+//                 $list[$k]['local_institution_name'] = $local_institution['name'];
+//                 //检查类型
+//                 $check_class = DB::table('constant')->where('id',$v['exam_class'])->cache(300)->field('constant_value as name')->find();
+//                 $list[$k]['class_name'] = $check_class['name'];
+//                 //检查子类
+//                 $subclass_name = DB::table('exam_subclass')->where('id',$v['exam_sub_class'])->cache(300)->field('name')->find();
+//                 $list[$k]['subclass_name'] = $subclass_name['name'];
+//                 //检查部位
+//                 $body_part = DB::table('bodypart')->where('id',$v['body_part'])->cache(300)->field('name')->find();
+//                 $list[$k]['body_name'] = $body_part['name'];
+//                 //检查设备
+//                 $device = DB::table('device')->where('id',$v['device'])->cache(300)->field('name')->find();
+//                 $list[$k]['device_name'] = $device['name'];
+//                 //报告医生
+//                 $report_doctor = DB::table('doctors')->where('id',$v['report_doctor_id'])->field('realname')->find();
+//                 $list[$k]['report_doctor_id'] = $report_doctor['realname'];
+//                 $list[$k]['datetime'] = $v['req_date_time'];
+//                 $list[$k]['rdatetime'] = $v['report_datetime'];
+//             }
+//             return json_encode(['status'=>'ok','code'=>'0000','count'=>$count[0]['count(1)'],'info'=>$list,'sessionid'=>$sessionid]);
+//         }catch(\Exception $e){
+//             return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
+//         }
+//         $remote_institution_id = '09b4765b26ba8b7c';
+//         $remote_doctor_id = 'b5bed8f973852c22';
+
+//         $filed = 'ra.id as ra_id, ra.anamnesis, ra.application_desc, ra.attachment, ra.clin_diag, ra.clin_symp, ra.createdAt, ra.exam_id, ra.family_ill, ra.illness_desc, ra.is_urgent, ra.local_institution_id, ra.marrital, ra.phys_sign, ra.remark, ra.remote_doctor_id, ra.remote_institution_id, ra.report_status, ra.req_date_time, ra.req_doctor_id, ra.status, e.body_part, e.exam_class, e.device, e.exam_datetime, e.id as exam_id, e.exam_status, e.exam_sub_class, e.id, e.severe, e.patient_id, r.report_datetime as rdatetime, r.report_datetime, r.report_doctor_id, r.id as report_id, r.report_result, pi.age, pi.name, pi.sex, i.name as local_institution_name';
+//         $table = 'remote_application ra left join remote_order ro on ro.id = (select id from remote_order rot where rot.application_id = ra.id order by timestamp desc limit 1) left join exams e on ra.exam_id = e.id left join report r on ra.id = r.remote_application_id left join patient_infos pi on e.patient_id = pi.id left join institution i on ra.local_institution_id = i.id';
+//         $where1 = "ra.remote_institution_id=:remote_institution_id";
+//         $where2 = "(ra.report_status = '4' or report_status = '6' or report_status = '7' or report_status = '8' or report_status = '9')";
+//         $where3 = "(ra.remote_doctor_id= :remote_doctor_id or ra.remote_doctor_id = '')";
+//         $where4 = "(ro.status is null or ro.status = 2 or ro.status = 3)";
+//         $order = "(ra.is_urgent = '1' and ra.report_status = '4') desc, (ra.is_urgent = '1' and ra.report_status = '6') desc, (ra.is_urgent = '1' and ra.report_status = '7'), ra.req_date_time desc";
+//         $limit = ":start :number";
+
+//         $where = $where1.$where2.$where3.$where4;
+//         $sql = "select ".$filed." from ".$table." where ".$where." order by ".$order." limit ".$limit;
+//         $options = [
+//             "remote_institution_id" => $remote_institution_id,
+//             "remote_doctor_id" => $remote_doctor_id,
+//             "start" => 0,
+//             "number" => 20
+//         ];
+//         DB::execute($sql, $options);
+//         // $db->execute(SQLServerHelp::SET_LIS_DEPARTEMT_SQL,$departemt);
+//     }
+
+// }
+
     public function index()
     {
         try{
@@ -55,102 +210,128 @@ class Reciveremote extends Base
             $sessionid = $_REQUEST['sessionid'];
             $doctor = Cache::get($sessionid);
             log::record($doctor);
-            $app_info = DB::table('remote_application')->where('remote_institution_id', $doctor['institution_id'])->select();
-            foreach ($app_info as $k => $v) {
-                $exam_id = $v['exam_id'];
-                $report = DB::table('report')->where('exam_id', $exam_id)->where('remote_application_id',$v['id'])->find();
-                if (!$report) {
-                    $data = array();
-                    $data['id'] = UUIDs::uuid16();
-                    $data['exam_id'] = $exam_id;
-                    $data['remote_application_id'] = $v['id'];
-                    $data['type'] = 2;
-                    $data['createdAt'] = date('Y-m-d H:i:s',time());
-                    DB::table('report')->insert($data);
-                }
+            $remote_institution_id = $doctor['institution_id'];
+            $remote_doctor_id = $doctor['id'];
+            $page =  $_REQUEST['page'];
+            $num =  $_REQUEST['num'];
+
+            $doc_class = DB::table('doctor_class')->where('doctor_id',$doctor['id'])->value('doctor_class');
+            if(strpos('8', $doc_class) !== false){
+                $where2 = "((`ra`.`report_status` = '7' or `ra`.`report_status` = '8' or `ra`.`report_status` = '9') or ((`ra`.`report_status` = '4' or `ra`.`report_status` = '6') and (`ra`.`remote_doctor_id`= ? or `ra`.`remote_doctor_id` = '')))";
+            } else {
+                $where2 = "(`ra`.`report_status` = '4' or `ra`.`report_status` = '6' or `ra`.`report_status` = '7' or `ra`.`report_status` = '8' or `ra`.`report_status` = '9') and (`ra`.`remote_doctor_id`= ? or `ra`.`remote_doctor_id` = '')";
             }
-            $where = '';
+            $filed = "`d`.`realname` as `report_doctor_id`, `ra`.`id` as `ra_id`, `ra`.`anamnesis`, `ra`.`application_desc`, `ra`.`attachment`, `ra`.`clin_diag`, `ra`.`clin_symp`, `ra`.`createdAt`, `ra`.`exam_id`, `ra`.`family_ill`, `ra`.`illness_desc`, `ra`.`is_urgent`, `ra`.`local_institution_id`, `ra`.`marrital`, `ra`.`phys_sign`, `ra`.`remark`, `ra`.`remote_doctor_id`, `ra`.`remote_institution_id`, `ra`.`report_status`, `ra`.`req_date_time`, `ra`.`req_doctor_id`, `ra`.`status`, `e`.`body_part`, `e`.`exam_class`, `e`.`exam_class` as `class_name`, `e`.`device`, `e`.`exam_datetime`, `e`.`id` as `exam_id`, `e`.`exam_status`, `e`.`exam_sub_class`, `e`.`id`, `e`.`severe`, `e`.`patient_id`, `r`.`report_datetime` as `rdatetime`, `r`.`report_datetime`, `r`.`report_doctor_id` as `r_report_doctor_id`, `r`.`id` as `report_id`, `r`.`report_result`, `pi`.`age`, `pi`.`name`, `pi`.`sex`, `pi`.`temp_patient_id`, `i`.`name` as `local_institution_name`";
+            $table = "`remote_application` `ra` left join `remote_order` `ro` on `ro`.`id` = (select `id` from `remote_order` `rot` where `rot`.`application_id` = `ra`.`id` order by `timestamp` desc limit 1) left join `exams` `e` on `ra`.`exam_id` = `e`.`id` left join `report` `r` on `ra`.`id` = `r`.`remote_application_id` left join `patient_infos` `pi` on `e`.`patient_id` = `pi`.`id` left join `institution` `i` on `ra`.`local_institution_id` = `i`.`id` left join `doctors` `d` on `r`.`report_doctor_id` = `d`.`id`";
+            $where1 = "`ra`.`remote_institution_id` = ?";
+            $where3 = "(`ro`.`status` is null or `ro`.`status` = 2 or `ro`.`status` = 3)";
+            $order = "(`ra`.`is_urgent` = '1' and `ra`.`report_status` = '4') desc, (`ra`.`is_urgent` = '1' and `ra`.`report_status` = '6') desc, (`ra`.`is_urgent` = '1' and `ra`.`report_status` = '7'), `ra`.`req_date_time` desc";
+            $limit = "?, ?";
+
+            $options = [
+                $remote_institution_id,$remote_doctor_id
+            ];
+            $queryWhere = "";
             if(isset($_REQUEST['param'])){
                 $param = $_REQUEST['param'];
                 foreach ($param as $k => $v) {
                     switch ($k) {
                         case 'patient_num':
-                            $where .= " and e." . $k . "='" . $v . "' ";
+                            $queryWhere.= " and `e`.`patient_num` like ?";
+                            $options[] = '%'.$v.'%';
                             break;
                         case 'exam_class' :
                             if(empty($v)){
                                 break;
                             }
-                            $ex = implode('\',\'',$v);
-                            $where .= " and e.exam_class in ('".$ex."')";
+                            $length = sizeof($v);
+                            if($length === 1) {
+                                $queryWhere.= " and `e`.`exam_class` = ?";
+                                $options[] = $v[0];
+                                break;
+                            }
+                            $index = 1;
+                            $queryWhere.= " and (`e`.`exam_class` = ?";
+                            $options[] = $v[0];
+                            while($index < $length) {
+                                $queryWhere.= " or `e`.`exam_class` = ?";
+                                $options[] = $v[$index];
+                                $index++;
+                            }
+                            $queryWhere.= ')';
+                            // $queryWhere.= " and `e`.`exam_class` in ?";
+                            // $ex = implode("or `e`.`exam_class` = ", $v);
+                            // $val = "('".$ex."')";
+                            // // $where .= " and e.exam_class in ('".$ex."')";
+                            // $options[] = $val;
+                            // var_dump($val);
                             break;
                         case 'name':
-                            $where .= " and p.name  like '".$v."%' ";
+                            $queryWhere.= " and `pi`.`name` like ?";
+                            $options[] = '%'.$v.'%';
                             break;
                         case 'applicationtime':
                             if(empty($v)){
                                 break;
                             }
-                            $where .= " and ra.req_date_time between '$v[0]' and '$v[1]'";
+                            $queryWhere.= " and `ra`.`req_date_time` between ? and ?";
+                            $options[] = $v[0];
+                            $options[] = $v[1];
                             break;
                         case 'is_urgent':
                             if($v == 0){
                                 break;
                             }
-                            $where .= " and ra.is_urgent=".$v;
+                            $queryWhere.= " and `ra`.`is_urgent` = ?";
+                            $options[] = $v[0];
                             break;
                         case 'report_result':
-                            if($v == 2){
-                                $where .= " and r.report_result=2";
-                            }elseif($v == 1){
-                                $where .= " and r.report_result=1";
-                            }{
-                                break;
+                            if($v == 1 || $v == 2) {
+                                $queryWhere.= " and `r`.`report_result` = ?";
+                                $options[] = $v[0];
                             }
                             break;
                         case 'exam_status':
                             if($v != 10){
-                                $where .= " and ra.report_status=".$v;
+                                $queryWhere.= " and `ra`.`report_status` = ?";
+                                $options[] = $v[0];
                             }
                             break;
                     }
                 }
             }
-            $doc_class = DB::table('doctor_class')->where('doctor_id',$doctor['id'])->value('doctor_class');
-            if(strpos('8',$doc_class) !== false){
-                $dwhere = ' or ra.report_status=7 ';
-            }else{
-                $dwhere = '';
-            }
-            log::record($where);
-            $page =  $_REQUEST['page'];
-            $num =  $_REQUEST['num'];
-            $fnum = ($page-1)*$num;
-            $limit = " limit ".$fnum.",".$num;
-            /*if(empty($where)){
-                $dclass = DB::table('doctor_class')->where('doctor_id',$doctor['id'])->cache(300)->field('doctor_class')->find();
-                if(empty($dclass['doctor_class'])){
-                    $dclass['doctor_class'] = 0;
-                }
-                log::record($dclass);
-                $sql1 = "SELECT e.exam_status,e.exam_class,e.body_part,e.device,e.exam_sub_class,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.*,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id'] . "' and ra.is_urgent=1 and e.exam_status in (".$dclass['doctor_class'].")";
-                $sql2 = "SELECT e.exam_status,e.exam_class,e.body_part,e.device,e.exam_sub_class,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.*,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id'] . "' and ra.is_urgent=0  and e.exam_status in (".$dclass['doctor_class'].")";
-                $sql3 = "SELECT e.exam_status,e.exam_class,e.body_part,e.device,e.exam_sub_class,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.*,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id'] . "'and e.exam_status not in (".$dclass['doctor_class'].")";
-                $sql = '('.$sql1.') union ('.$sql2.') union ('.$sql3.')'.$limit;  //ra.report_status,6,7,8,4,9,5,12
-            }else{*/
-                $sql = "SELECT e.id,e.severe,e.exam_status,e.exam_class,e.exam_sub_class,e.body_part,e.device,e.exam_datetime,p.name,p.sex,p.temp_patient_id,p.age,ra.id as ra_id,ra.*,r.id as report_id,r.report_doctor_id,r.report_datetime,r.report_result,e.id from exams as e,remote_application as ra,patient_infos as p,report as r where (ra.remote_doctor_id='".$doctor['id']."' or ra.remote_doctor_id=''".$dwhere.") and ra.exam_id=e.id and e.patient_id=p.id and r.exam_id=e.id and r.remote_application_id=ra.id and ra.report_status !='' and ra.remote_institution_id='" . $doctor['institution_id']."'".$where." order by req_date_time desc,ra.is_urgent desc,ra.req_date_time desc".$limit;
-//            }
-            log::record($sql);
-            $list = DB::query($sql);
-            $csql = "SELECT count(1) from exams as e,remote_application as ra,patient_infos as p,report as r where (ra.remote_doctor_id='".$doctor['id']."' or ra.remote_doctor_id=''".$dwhere.") and r.remote_application_id=ra.id and ra.exam_id=e.id and ra.report_status !='' and e.patient_id=p.id and r.exam_id=e.id and ra.remote_institution_id='" . $doctor['institution_id']."'".$where;
-            $count = DB::query($csql);
-            foreach ($list as $k => $v) {
-                $cache_key = $doctor['id'].'_'.$v['id'];
-                if(Cache::get($cache_key)){
-                    $list[$k]['status'] = 1;
-                }else{
-                    $list[$k]['status'] = 0;
+            $where = $where1." and ".$where2." and ".$where3.$queryWhere;
+            $listSql = "select ".$filed." from ".$table." where ".$where." order by ".$order." limit ".$limit;
+            $countSql = "select count(*) as count from ".$table." where ".$where;
+            log::record("----countSql----");
+            log::record($countSql);
+            log::record("----countSql----");
+            log::record("---countSql-options----");
+            log::record($options);
+            log::record("---countSql-options----");
+            $count = DB::query($countSql, $options);
+            // var_dump($count);
+            $options[] = ($page - 1) * $num;
+            $options[] = $num;
+            log::record("----sql----");
+            log::record($listSql);
+            log::record("----sql----");
+            log::record("----options----");
+            log::record($options);
+            log::record("----options----");
+            $list = DB::query($listSql, $options);
+            foreach($list as $v) {
+                if(empty($v['report_id'])) {
+                    $data = array();
+                    $data['id'] = UUIDs::uuid16();
+                    $data['exam_id'] = $v['exam_id'];
+                    $data['remote_application_id'] = $v['ra_id'];
+                    $data['type'] = 2;
+                    $data['createdAt'] = date('Y-m-d H:i:s',time());
+                    DB::table('report')->insert($data);
+                    $v['report_id'] = $data['id'];
                 }
+<<<<<<< HEAD
                 //申请医院
                 $local_institution = DB::table('institution')->where('id',$v['local_institution_id'])->field('name')->find();
                 $list[$k]['local_institution_name'] = $local_institution['name'];
@@ -171,14 +352,68 @@ class Reciveremote extends Base
                 $list[$k]['report_doctor_id'] = $report_doctor['realname'];
                 $list[$k]['datetime'] = $v['req_date_time'];
                 $list[$k]['rdatetime'] = $v['report_datetime'];
+=======
+>>>>>>> 3497031c6f13575f19fa22458e26584b3178f762
             }
-            return json_encode(['status'=>'ok','code'=>'0000','count'=>$count[0]['count(1)'],'info'=>$list,'sessionid'=>$sessionid]);
-        }catch(\Exception $e){
+            // var_dump($res);
+            return json_encode(['status'=>'ok','code'=>'0000','count'=>$count[0]['count'],'info'=>$list,'sessionid'=>$sessionid]);
+        } catch(\Exception $e) {
             return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
         }
-
     }
 
+//     select
+// 	ra.id as ra_id, ra.anamnesis, ra.application_desc, ra.attachment, ra.clin_diag, ra.clin_symp, ra.createdAt, ra.exam_id, ra.family_ill, ra.illness_desc, ra.is_urgent, ra.local_institution_id, ra.marrital, ra.phys_sign, ra.remark, ra.remote_doctor_id, ra.remote_institution_id, ra.report_status, ra.req_date_time, ra.req_doctor_id, ra.status,
+// 	e.body_part, e.exam_class, e.device, e.exam_datetime, e.id as exam_id, e.exam_status, e.exam_sub_class, e.id, e.severe, e.patient_id,
+// 	r.report_datetime as rdatetime, r.report_datetime, r.report_doctor_id, r.id as report_id, r.report_result,
+// 	pi.age, pi.name, pi.sex,
+// 	i.name as local_institution_name
+// from
+//     remote_application ra
+// left join
+//     remote_order ro
+// on
+//  	ro.id = (
+//  		select
+//  			id
+//  		from
+//  			remote_order rot
+//  		where
+//  			rot.application_id = ra.id
+//  		order by timestamp desc limit 1
+//  	)
+// left join
+//     exams e
+// on
+//  	ra.exam_id = e.id
+// left join 
+// 	report r
+// on 
+// 	ra.id = r.remote_application_id
+// left join 
+// 	patient_infos pi
+// on 
+// 	e.patient_id = pi.id
+// left join 
+// 	institution i
+// on 
+// 	ra.local_institution_id = i.id
+// where
+//  	ra.remote_institution_id='09b4765b26ba8b7c'
+//  and
+//  	(report_status = '4' or report_status = '6' or report_status = '7' or report_status = '8' or report_status = '9')
+//  and
+//  	(ra.remote_doctor_id='b5bed8f973852c22' or ra.remote_doctor_id = '')
+//  and
+//  	(ro.status is null or ro.status = 2 or ro.status = 3)
+//  order by
+//  	(ra.is_urgent = '1' and ra.report_status = '4') desc,
+//  	(ra.is_urgent = '1' and ra.report_status = '6') desc,
+//  	(ra.is_urgent = '1' and ra.report_status = '7'),
+//  	ra.req_date_time desc
+//  -- 4、申请 5、驳回 6、接收、7、初步报告 8、审核报告 9、确认、
+
+
     //接受 3
     /*public function accept(){
         $sessionid = $_REQUEST['sessionid'];

+ 120 - 0
application/inter/controller/Wechat.php

@@ -0,0 +1,120 @@
+<?php
+namespace app\inter\controller;
+
+use think\Controller;
+use think\Db;
+use think\Session;
+use app\common\library\UUIDs;
+use think\Cache;
+use think\Log;
+use app\common\library\Verify;
+use think\File;
+use app\common\library\send_message;
+use app\common\library\Message;
+class Wechat extends Base {
+    public function _initialize() {
+    }
+
+    public function wechatRefund() {
+        $repsone = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
+        $api_key = '9759a66938e8411ad5889e2b5b394d94';
+        Log::record('-----微信退款----开始----');
+        Log::record('-----微信退款----xml----');
+        $xml = file_get_contents("php://input");
+        Log::record($xml);
+        Log::record('-----xml转数组--------');
+        $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
+        Log::record($data);
+        $req_info = $data['req_info'];
+        // $req_info = 'Jsb+/EIaoJhD0BVWMEiFWeRuivKbS7/bs/wpgwHowHyvVNC+Kj3aiCsLHzQobul1mKwuKT/slYfoVgUQibGH+mEFcA2N10r6Qv5v+rwd7IXvMOM7iS7p9ciDD3fn+jZukjJdGME6KajDtD2rFs0MyZTqsKUTGQN1I8Q1w5aK7OISs437bXp5s4VgrxQWKNe5s18+ts2jrMoA91VXmHy024p010BiB1TJHr46cXC4zpZkeLtECkABhVlBGmDQPfw0JknMqaTriXRZPQcz2Ff/WuRPKPImiL9i0nVpcPuiFjIP863lWLfr2Aif7plPA/mJrAZ6K95hGRvAiiHqxEet7OjYMHu50OKnY/8j2pZjtBUX8Yr1fRnY+v8INLL8+CKS1tZRY0dAkilymPVOSN/naNkVILgwDrlYq5XisDMmXz2HzF1UBX0ZWNs5ltarJC8fyhLpZm1cd/prxcTB6KUm1mTnEYhToZLUlB0N2a0dCT9pm58oj8myMC6mJutCW79QCaHCtV6JIxjueErZkbWYEVSZWG+m7hcKcmcgGhqTcnXPLte5vE0imYoABZnw4uMnv9sMSVP0PhMJ8/JeeP/He/6oAHenvhPrh/J4Xpv/vCbDjVJo8Qo5xWFFG9pk/Aj1rlZiCqmJffy+TXkXceDp+wg4lEOIbZfENaqbj7gtN9RWFTjrtPapPBZzxGJQvEQKzF2TNoP7owsTUup3grDMuw/zreVYt+vYCJ/umU8D+YnTBdx9Q0Bog3qHSlEMnQten+v2X7cSwDcIzvf3UJKVD1041tiBKfJTJFvfbiT+q4vHLKcRn5q7QyWowKrGO/ZrWTIotM0m+1IRqVDHeCTGYDUMGDiQ/+1BupV135PlUg2tKHr0wIUS0wThD3z2ZZxcJ3VioCDcFmjPu128k1xqsjfz+1Np4DxiTZFR1W44wpF/E6Hwi11A440fABYGX4AF7UFBSNfStMCTjVAhcHaYY9P5AbNiUcENjwZEBWE5bcCKm2adIsdqT5isumPoFi6M5H7hL5slQoKqLadEPfazBMHE8r+m+UYLTHlCk9L/DLPmrkVk2HJzlATcg9VYTX+IPYqqv2kY/9BYW+q+O+a8gA==';
+       // 对加密信息进行解密,需要用到商户秘钥
+        $req_info_xml = openssl_decrypt(base64_decode($req_info), 'aes-256-ecb', md5($api_key),OPENSSL_RAW_DATA);
+        Log::record($req_info_xml);
+        $refund = (array)simplexml_load_string($req_info_xml, 'SimpleXMLElement', LIBXML_NOCDATA);
+        $refund['timestamp'] = time();
+        Log::record($refund);
+        DB::table('wechat_refund_log')->insert( array_merge($refund, $data));
+
+        $order_id = $refund['out_trade_no'];
+        $order = DB::table('remote_order')->where('id', $order_id)->field('status, ')-find();
+        if(!empty($order) && $order['status'] === Application::ORDER_STATUS['CANCEL']) {
+            DB::table('remote_order')->where('id', $order_id)->update(['status' => Application::ORDER_STATUS['REDUCE']]);
+            // todo 微信消息推送
+        }
+        Log::record('-----微信结束----xml----');
+        return $repsone;
+
+    }
+
+    public function  wechatCallback() {
+        // $param = $_REQUEST['param'];
+        $repsone = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
+        Log::record('-----微信支付回调----开始----');
+
+        Log::record('-----微信支付返回----xml----');
+        $xml = file_get_contents("php://input");
+        Log::record($xml);
+        Log::record('-----xml转数组--------');
+        $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
+        Log::record($data);
+        $out_trade_no = $data['out_trade_no'];
+        $data['timestamp'] = time();
+        Log::record('-----添加流水记录----');
+        Log::record($data);
+        Db::table("wechat_pay_log")->insert($data);
+
+        Log::record('-----获取订单信息-----');
+        $order = Db::table("remote_order")->where("id", $out_trade_no)->field("id, status, super_doctor_id, application_id, hospital_id, doctor_id, exam_class")->find();
+        Log::record($order);
+        if($order && $order['status'] === Application::ORDER_STATUS['CREATE']) {
+            $order['status'] = Application::ORDER_STATUS['PAYCOMPLTET'];
+            $d = $order['super_doctor_id'];
+            $aid = $order['application_id'];
+            // todo 消息通知
+            Log::record('-----更新订单状态-----');
+            DB::table("remote_order")->where("id", $out_trade_no)->update($order);
+            $application = DB::table('remote_application')->where('id', $order['application_id'])->field('exam_id')->find();
+            $exam_id = $application['exam_id'];
+            $r_info = DB::table('report')->where('exam_id',$exam_id)->where('remote_application_id', $aid)->find();
+            $t = '收到一条远程诊断申请';
+            $ins = DB::table('institution')->where('id',$order['hospital_id'])->field('name')->find();
+            $doctor = DB::table('doctors')->where('id',$order['doctor_id'])->field('realname')->find();
+            $c = $ins['name'].$doctor['realname'].'医师向您发起一条远程诊断申请';
+            $type = '1';
+            $url = Message::url(null, $exam_id,1,$order['exam_class'],$r_info['id'],$aid);
+            Log::record('-----系统内消息通知-----');
+            Message::insert($t,$c,$d,$type,$url,1,$aid);
+                //保存  申请
+            if(empty($d)) {
+                Log::record('---微信支付回调---结束---没有远程医生');
+                return $repsone;
+            }
+            $dinfo = DB::table('doctors')->where('id',$d)->find();
+            $d_phone = $dinfo['phone'];
+            $d_name = $dinfo['realname'];
+            if($order['is_urgent'] === 1) {
+                $d_time = date('H:i',strtotime('+30 min'));
+            } else {
+                $d_time = date('H:i',strtotime('+1 hour'));
+            }
+            if($dinfo['institution_id'] == '22100003' || $dinfo['send_sms'] == 1){ //魏庙
+                Log::record('-----短信通知-----');
+                send_message::sendSms2Apply($d_phone,$d_time,$d_name);
+            }
+        }
+        Log::record('---微信支付回调---结束---');
+        return $repsone;
+
+
+        // $order_id = $param['order_id'];
+        // $remote_order = DB::table('remote_order')->where('id', $order_id)->find();
+        // if(!$remote_order) {
+        //     return json_encode(['status'=>'fail','code'=>'3001','msg'=> "没有找到该订单"]);
+        // }
+        // if($remote_order !== Application::ORDER_STATUS['CREATE']) {
+        //     return json_encode(['status'=>'fail','code'=>'3002','msg'=> "订单状态出错"]);
+        // }
+        // DB::table('remote_order')->where('id', $order_id)->update(["status" => Application::ORDER_STATUS['PAYCOMPLTET']]);
+        // return json_encode(['status'=>'ok','code'=>'0000','msg'=> "支付回调成功"]);
+    }
+}

+ 72 - 4
application/inter/controller/Writereport.php

@@ -293,7 +293,7 @@ class Writereport extends Base
                 $id = $report_info['id'];
                 $cache_key = $doctor['id'].'_'.$report_id;
                 $rid = $report_id;
-            }else{
+            } else {
                 $id = $this->uuids->uuid16();
                 $info['id'] = $id;
                 $info['createdAt'] = date('Y-m-d H:i:s',time());
@@ -464,16 +464,20 @@ class Writereport extends Base
      **/
     public function confirm(){
         try{
+            Log::record('confirm');
             $is_remote = $_REQUEST['is_remote'];
             if($is_remote == 1){
                 return json_encode(['status'=>'fail','code'=>'1133','msg'=>'远程无法确诊报告']);
             }
             $sessionid = $_REQUEST['sessionid'];
             $doctor = Cache::get($sessionid);
+            Log::record($doctor);
             $param = $_REQUEST['param'];
+            Log::record($param);
             $id = $param['id'];
             $report_id = $param['report_id'];
             $report_info = DB::table('report')->where('id',$report_id)->find();
+            Log::record($report_info);
             if($report_info['type'] == 1){
                 //本地报告
                 $status = DB::table('exams')->where('id',$id)->field('exam_status')->find();
@@ -504,12 +508,15 @@ class Writereport extends Base
                 DB::table('exams')->where('id',$id)->update(['exam_status'=>'9']);
             }else{
                 Message::read($doctor['id'],$report_info['remote_application_id'],4);
-                //远程确认
-                DB::table('remote_application')->where('id',$report_info['remote_application_id'])->update(['report_status'=>'9']);
+                //远程
+                
+                $this->confirmReport($report_info['remote_application_id']);
+               
+                // DB::table('remote_application')->where('id',$report_info['remote_application_id'])->update(['report_status'=>'9']);
                 // 添加messages消息
                 $t = '您的报告已确认';
                 $institution = DB::table('institution')->where('id',$doctor['institution_id'])->field('name')->find();
-                $c = '您的远程诊断申请报告,已被'.$institution['name'].$doctor['realname'].'医师确认';
+                $c = '您的远程诊断报告,已被'.$institution['name'].$doctor['realname'].'医师确认';
                 $d = $status['remote_doctor_id'];
                 $type = '6';
                 $url = '';
@@ -531,11 +538,72 @@ class Writereport extends Base
             DB::table('report_record')->insert($info);
             return json_encode(['status'=>'ok','code'=>'0000','msg'=>'已确认']);
         }catch(\Exception $e){
+            Log::record('confirm error ');
+            Log::record($e);
             return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
         }
 
     }
 
+    private function confirmReport($application_id) {
+        Db::startTrans();
+        try{
+            DB::table('remote_application')->where('id', $application_id)->update(['report_status'=>'9']);
+            DB::table('remote_application')->where('id',$application_id)->update(['report_status'=>'9']);
+            $remote_order = DB::table('remote_order')
+            ->where('status', Application::ORDER_STATUS['PAYCOMPLTET'])
+            ->where('application_id', $application_id)
+            ->field('order_money, id, super_hospital_id')
+            ->find();
+            $hospital = DB::table('institution')->where('id', $remote_order['super_hospital_id'])->field('current_money')->find();
+            if(!$remote_order) {
+                DB::commit();
+                // todo 微信消息推送
+                return true;
+            }
+            $brfore_money =  $hospital['current_money'];
+            $order_money = $remote_order['order_money'];
+            $after_money = $brfore_money + $order_money;
+            DB::table('institution')->where('id', $remote_order['super_hospital_id'])->update(['current_money' => $after_money]);
+            DB::table('remote_order')->where('id', $remote_order['id'])->update(['status' => Application::ORDER_STATUS['CONFIRM']]);
+            $hospital_id = $remote_order['super_hospital_id'];
+            $order_id = $remote_order['id'];
+            
+            $type = Application::WATER_TYPE['ADD'];
+            $why = Application::WATER_WHY['REMOTEINCOME'];
+            $water_id = DB::table('remote_water')->insertGetId([
+                'hospital_id' => $hospital_id,
+                'order_id' => $order_id,
+                'money' => $order_money,
+                'type' => $type,
+                'why' =>  $why,
+                'timestamp' => time(),
+            ]);
+            DB::table('remote_water_log')->insert([
+                'hospital_id' => $hospital_id,
+                'order_id' => $order_id,
+                'water_id' => $water_id,
+                'order_money' => $order_money,
+                'brfore_money' => $brfore_money,
+                'after_money' => $after_money,
+                'type' => $type,
+                'why' =>  $why,
+                'timestamp' => time(),
+            ]);
+            // 提交事务
+            Db::commit();
+            // todo 消息推送
+            return true;
+        } catch (\Exception $e) {
+            // 回滚事务
+            Db::rollback();
+            Log::record("-----错误-----");
+            Log::record('xxxxxxxxx');
+            var_dump($e->getMessage());
+        }
+        return json_encode(['status'=>'fail','code'=>'2110','确认报告失败']);
+    }
+
     /**
      * 审核报告
      *

+ 143 - 0
application/inter/service/WechatService.php

@@ -0,0 +1,143 @@
+<?php
+namespace app\inter\service;
+
+use think\Db;
+use think\Log;
+
+class WechatService {
+
+
+  public function pushWechatOrder($exam_id) {
+    $openids = $this->getPushOpenId($exam_id);
+    if(!$openids) {
+      log::record('---------没有找到对应openid--------');
+      return false;
+    }
+
+    foreach($openids as $v) {
+      $url   = "http://wechat.pacsonline.cn/wx_patient/api/sendMsg?pushType=1&openid=";
+      $full_url = $url . $v['openid'];
+      // 请求
+      log::record('---------发送微信通知-发起订单-------');
+      log::record($full_url);
+      $res = $this->curl_request($full_url, 'GET');
+      log::record('---------微信通知结果--------');
+      log::record($res);
+    }
+    return true;
+  }
+
+  public function pushWechatCancel($exam_id) {
+    $openids = $this->getPushOpenId($exam_id);
+    if(!$openids) {
+      log::record('---------没有找到对应openid--------');
+      return false;
+    }
+
+    foreach($openids as $v) {
+      $url   = "http://wechat.pacsonline.cn/wx_patient/api/sendMsg?pushType=1&openid=";
+      $full_url = $url . $v['openid'];
+      // 请求
+      log::record('---------发送微信通知-取消订单-------');
+      log::record($full_url);
+      $res = $this->curl_request($full_url, 'GET');
+      log::record('---------微信通知结果--------');
+      log::record($res);
+    }
+    return true;
+  }
+
+  public function pushWechatComplete($exam_id) {
+    $openids = $this->getPushOpenId($exam_id);
+    if(!$openids) {
+      log::record('---------没有找到对应openid--------');
+      return false;
+    }
+
+    foreach($openids as $v) {
+      $url   = "http://wechat.pacsonline.cn/wx_patient/api/sendMsg?pushType=1&openid=";
+      $full_url = $url . $v['openid'];
+      // 请求
+      log::record('---------发送微信通知-完成订单-------');
+      log::record($full_url);
+      $res = $this->curl_request($full_url, 'GET');
+      log::record('---------微信通知结果--------');
+      log::record($res);
+    }
+    return true;
+  }
+
+  private function getPushOpenId($exam_id) {
+    $exams = DB::table("exams")
+    ->alias('e')
+    ->join('studies s', 'e.study_id = s.id')
+    ->join('patient_infos pi', 'e.patient_id = pi.id')
+    ->field('e.patient_id, s.accession_num, s.studyid, pi.temp_patient_id, pi.card_num, pi.phone')
+    ->where('e.id', $exam_id)
+    ->find();
+    if(!$exams) {
+      return false;
+    }
+    $options = [];
+    $accession_num = $exams['accession_num'];
+    $studyid = $exams['studyid'];
+    $patient_id = $exams['patient_id'];
+    $temp_patient_id = $exams['temp_patient_id'];
+    $card_num = $exams['card_num'];
+    $phone = $exams['phone'];
+
+    $sql1 = "select user_id as uid from user_bind where patient_id = ?";
+    $options[] = $patient_id;
+
+    $sql2 = "select uid from wechat_bind where ";
+    $sql2 .= "(patientCode = ?";
+    $options[] = $temp_patient_id;
+    if(!empty($accession_num)) {
+      $sql2 .= " or patientCode = ?";
+      $options[] = $accession_num;
+    }
+    if(!empty($studyid)) {
+      $sql2 .= " or patientCode = ?";
+      $options[] = $studyid;
+    }
+    $sql2 .=")";
+    if($card_num) {
+      $sql2 .= " or idcard = ?";
+      $options[] = $card_num;
+    }
+    if($card_num) {
+      $sql2 .= " or phone = ?";
+      $options[] = $phone;
+    }
+
+    $sql = "select wx_openid as openid from user where id in (".$sql1." union ".$sql2.")";
+    log::record('---------微信推送sql--------');
+    log::record($sql);
+    return Db::query($sql, $options);
+  }
+
+  private function curl_request($url,$method='get',$data=null,$https=true){
+    //1.初识化curl
+    $ch = curl_init($url);
+    //2.根据实际请求需求进行参数封装
+    //返回数据不直接输出
+    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
+    //如果是https请求
+    if($https === true){
+        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
+        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
+    }
+    //如果是post请求
+    if($method === 'post'){
+        //开启发送post请求选项
+        curl_setopt($ch,CURLOPT_POST,true);
+        //发送post的数据
+        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
+    }
+    //3.发送请求
+    $result = curl_exec($ch);
+    //4.返回返回值,关闭连接
+    curl_close($ch);
+    return $result;
+  }
+}

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff