def open_url(self,url,title): if not self.browser: self.browser = QBrowser(self) self.browser.open_url.emit(title,url) self.browser.show() # 自动缩放 无效 # def resizeEvent(self, event):#由于没有使用布局,这里当父窗口大小改变时自动改变webview的大小 # super(ReportReview, self).resizeEvent(event) # self.wv_report_equip.resize(self.size())
class ReportReview(ReportReviewUI): def __init__(self): super(ReportReview, self).__init__() self.gp_quick_search.returnPressed.connect(self.on_quick_search) # 快速检索 # 右键、双击、单击 self.table_report_review.setContextMenuPolicy(Qt.CustomContextMenu) ######允许右键产生子菜单 self.table_report_review.customContextMenuRequested.connect(self.onTableMenu) ####右键菜单 self.table_report_review.itemClicked.connect(self.on_table_set) self.btn_query.clicked.connect(self.on_btn_query_click) # 表格双击 self.table_report_review.doubleClicked.connect(self.on_table_double_click) # 审阅 self.gp_review_user.btnClick.connect(self.on_btn_review_click) self.btn_review_mode.clicked.connect(partial(self.on_btn_review_mode_click,True)) self.btn_review_mode2.clicked.connect(partial(self.on_btn_review_mode_click,False)) self.btn_review_batch.clicked.connect(self.on_btn_review_batch_click) self.gp_review_user.btnCancle.connect(self.on_btn_cancle_click) # 设置快速获取的变量 self.cur_tjbh = None self.cur_row = None self.browser = None # 退回 def on_btn_cancle_click(self,p_str): # 更新数据库 TJ_CZJLB TJ_BGGL data_obj = {'jllx': '0033', 'jlmc': '审阅退回', 'tjbh': self.cur_tjbh, 'mxbh': '','czgh': self.login_id, 'czxm': self.login_name, 'czqy': self.login_area,'bz': p_str } try: sql = "UPDATE TJ_TJDJB SET TJZT='4' WHERE TJBH ='%s' " %self.cur_tjbh self.session.bulk_insert_mappings(MT_TJ_CZJLB, [data_obj]) self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh == self.cur_tjbh).update({ MT_TJ_BGGL.bgzt: '0', MT_TJ_BGGL.bgth: '1',MT_TJ_BGGL.gcbz: p_str,MT_TJ_BGGL.sybz: p_str }) self.session.execute(sql) self.session.commit() mes_about(self,'退回成功!') except Exception as e: self.session.rollback() mes_about(self, '更新数据库失败!错误信息:%s' % e) return # 设置快速检索文本 def on_table_set(self,tableWidgetItem): row = tableWidgetItem.row() tjbh = self.table_report_review.item(row, 3).text() xm = self.table_report_review.item(row, 4).text() self.gp_quick_search.setText(tjbh,xm,'','') # 全屏操作 def on_btn_review_mode_click(self,is_full): sql = "SELECT 1 FROM GY_DMZD WHERE DMLB='1222' AND SRDM='%s';" %self.login_id result = self.session.execute(sql).fetchall() if not result: mes_about(self,"您没有审阅权限!") return if self.table_report_review.rowCount(): ui = ReportReviewFullScreen(self) ui.opened.emit(self.table_report_review.cur_data_set,self.table_report_review.currentIndex().row()) if is_full: ui.showFullScreen() else: ui.showMaximized() else: mes_about(self,"请先筛选需要审阅的报告,再全屏操作!") # 批量审阅 def on_btn_review_batch_click(self): rows = self.table_report_review.isSelectRows() if len(rows)>=200: if self.login_id!='BSSA': mes_about(self,"批量审阅请不要超过400个/次,避免影响其他业务!") return button = mes_warn(self, "温馨提示:批量审阅只适用于招工类型的报告!\n 您确认自动审阅当前选择的 %s 份体检报告?" %len(rows)) if button != QMessageBox.Yes: return count = 0 for row in rows: tjbh = self.table_report_review.getItemValueOfKey(row,'tjbh') tjlx = self.table_report_review.getItemValueOfKey(row,'tjlx') if tjlx in ['招工','从业','职业病'] : if request_create_report(tjbh, 'pdf'): count = count + 1 mes_about(self, '审阅结果:报告总数:%s,自动审阅:%s' % (len(rows), count)) # 更新状态 生成PDF报告是耗时任务,需再服务端更新状态 # sql = "UPDATE TJ_BGGL SET SYRQ=SHRQ WHERE BGZT='2' AND SYRQ IS NULL" # try: # self.session.execute(sql) # mes_about(self, '审阅结果:报告总数:%s,自动审阅:%s' % (len(rows), count)) # except Exception as e: # mes_about(self,'自动审阅更新数据库状态出错,错误信息:%s' %e) def on_btn_query_click(self): if self.gp_where_search.where_dwbh=='00000': mes_about(self,'不存在该单位,请重新选择!') return # 日期范围 必选 tstart,tend = self.gp_where_search.date_range print(self.gp_where_search.getText()) if self.gp_where_search.getText() =='审核日期': where_str = ''' (c.shrq>='%s' AND c.shrq<'%s') ''' %(tstart,tend) else: where_str = ''' (a.qdrq>='%s' AND a.qdrq<'%s' AND a.SUMOVER ='1') ''' % (tstart, tend) sql = get_report_review_sql(where_str) # 报告状态 if self.cb_report_state.where_state: sql = sql + self.cb_report_state.where_state # 报告审阅者 if self.cb_user.where_user: sql = sql + " AND SYXM ='%s' " %self.cb_user.where_user # 附加 关联SQL 必须 sql = sql + " INNER JOIN TJ_TJDAB b ON a.DABH=b.DABH " # 是否选择单位 if self.gp_where_search.where_dwbh: sql = sql + " AND a.DWBH = '%s' " %self.gp_where_search.where_dwbh # 是否选择 区域 if self.cb_area.where_tjqy2: sql = sql + self.cb_area.where_tjqy2 # 是否选择 报告类型 if self.cb_report_type.where_tjlx2: sql = sql + self.cb_report_type.where_tjlx2 try: results = self.session.execute(sql).fetchall() except Exception as e: results = [] mes_about(self,'执行SQL:%s 出错,错误信息:%s' %(sql,e)) # print(sql) self.table_report_review.load(results) self.gp_table.setTitle('审阅列表(%s)' %self.table_report_review.rowCount()) mes_about(self, '检索出数据%s条' % self.table_report_review.rowCount()) #results = self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.shrq>=tstart,MT_TJ_BGGL.shrq<tend).all() def on_table_double_click(self,QModelIndex): # 获取变量 bgzt = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'bgzt') tjbh = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'tjbh') xm = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'xm') xb = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'xb') nl = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'nl') syrq = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'syrq') syxm = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'syxm') sybz = self.table_report_review.getItemValueOfKey(QModelIndex.row(), 'sybz') # self.cur_tjbh = tjbh self.cur_row = QModelIndex.row() # 更新title self.gp_right.setTitle('报告预览 体检编号:%s 姓名:%s 性别:%s 年龄:%s' %(tjbh,xm,xb,nl)) # 未审阅则打开HTML 页面 url = gol.get_value('api_report_preview') %('html',tjbh) self.wv_report_equip.load(url) # 已审阅则 打开PDF 页面 PDF在窗口中加载奇慢无比,取消此功能 # 先下载 # url = gol.get_value('api_report_down') %tjbh # filename = os.path.join(gol.get_value('path_tmp'),'%s.pdf' %tjbh) # if request_get(url,filename): # # 下载成功 # url = gol.get_value('api_pdf_show') %filename # print(url) # self.wv_report_equip.load(url) # 刷新界面 self.gp_review_user.setData({'sybz':sybz,'syrq':syrq,'syxm':syxm,'syzt':bgzt}) # 右键功能 def onTableMenu(self,pos): row_num = -1 indexs=self.table_report_review.selectionModel().selection().indexes() if indexs: for i in indexs: row_num = i.row() menu = QMenu() item1 = menu.addAction(Icon("报告中心"), "浏览HTML报告") item2 = menu.addAction(Icon("报告中心"), "浏览PDF报告") item3 = menu.addAction(Icon("报告中心"), "重新生成待审阅报告") item4 = menu.addAction(Icon("报告中心"), "重新生成审阅报告") item5 = menu.addAction(Icon("报告中心"), "生成审阅报告") action = menu.exec_(self.table_report_review.mapToGlobal(pos)) tjbh = self.table_report_review.getCurItemValueOfKey('tjbh') bgzt = self.table_report_review.getCurItemValueOfKey('bgzt') if tjbh: if action == item1: try: url = gol.get_value('api_report_preview') % ('html', tjbh) url_title = "体检编号:%s" %tjbh self.open_url(url,url_title) #webbrowser.open(url) except Exception as e: mes_about(self, '打开出错,错误信息:%s' % e) return elif action == item2: if bgzt=='已审核': mes_about(self,'该报告还未审阅,不能查看PDF报告!') else: # 优先打开 新系统生成的 result = self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh == tjbh).scalar() if result: filename = os.path.join(result.bglj,'%s.pdf' %tjbh).replace('D:/activefile/','') url = gol.get_value('api_pdf_new_show') % filename url_title = "体检编号:%s" % tjbh self.open_url(url, url_title) #webbrowser.open(url) else: try: self.cxk_session = gol.get_value('cxk_session') result = self.cxk_session.query(MT_TJ_PDFRUL).filter(MT_TJ_PDFRUL.TJBH == tjbh).scalar() if result: url = gol.get_value('api_pdf_old_show') % result.PDFURL url_title = "体检编号:%s" % tjbh self.open_url(url, url_title) #webbrowser.open(url) else: mes_about(self, '未找到该顾客体检报告!') except Exception as e: mes_about(self, '查询出错,错误信息:%s' % e) return elif action == item3: if request_create_report(tjbh, 'html'): mes_about(self,"重新生成HTML报告成功!") else: mes_about(self,"重新生成HTML报告失败!") elif action == item4: if bgzt=='已审核': mes_about(self,'当前报告还未审阅,不能生成!') return if request_create_report(tjbh, 'pdf'): mes_about(self,"重新生成PDF报告成功!") else: mes_about(self,"重新生成PDF报告失败!") elif action == item5: if self.login_id!='BSSA': mes_about(self,'您不是管理员,不能使用该功能!') return if request_create_report(tjbh, 'pdf'): mes_about(self,"生成PDF报告成功!") else: mes_about(self,"生成PDF报告失败!") else: mes_about(self, '未找到该顾客体检报告!') #快速检索 def on_quick_search(self,p1_str,p2_str): if p1_str == 'tjbh': where_str = " a.TJBH = '%s' " % p2_str else: where_str = " b.XM = '%s' " % p2_str results = self.session.execute(get_report_review_sql2(where_str)).fetchall() if results: self.table_report_review.load(results) mes_about(self,'共检索出 %s 条数据!' %self.table_report_review.rowCount()) else: # 历史的报告或者追踪状态的 或者遗漏的报告 if p1_str == 'tjbh': result = self.session.query(MV_RYXX).filter(MV_RYXX.tjbh == p2_str).scalar() if not result: mes_about(self,'未找到体检编号(%s)相关信息,请确认是否输入正确!' %p2_str) return if str2(result.tjzt)=='已审核': # 刷新UI data =[result.tjzt,result.tjlx,result.tjqy,result.tjbh,str2(result.xm),result.xb,result.nl,'','',str2(result.dwmc),''] self.table_report_review.load([data]) # 更新数据库 try: self.session.bulk_insert_mappings(MT_TJ_BGGL, [result.get_bgjl]) self.session.commit() except Exception as e: self.session.rollback() print('插入 MT_TJ_BGGL 记录失败!错误代码:%s' % e) # 返回消息 if request_create_report(p2_str, 'html'): mes_about(self,"生成HTML报告成功!") elif str2(result.tjzt)=='已审阅': mes_about(self,"当前报告已审阅,不应该出现此选项!") else: mes_about(self,'该顾客体检状态(%s),只有医生审核后才能进行报告审阅!' %str2(result.tjzt)) # 审阅/取消审阅 def on_btn_review_click(self,syzt:bool,num:int): sql = "SELECT 1 FROM GY_DMZD WHERE DMLB='1222' AND SRDM='%s';" %self.login_id result = self.session.execute(sql).fetchall() if not result: mes_about(self,"您没有审阅权限!") return # 未双击过查看过报告 不允许审核 if not self.cur_tjbh: mes_about(self,'您还未打开报告,不允许审阅') return # 完成审阅 if syzt: # 更新数据库 TJ_CZJLB TJ_BGGL data_obj = {'jllx':'0031','jlmc':'报告审阅','tjbh':self.cur_tjbh,'mxbh':'', 'czgh':self.login_id,'czxm':self.login_name,'czqy':self.login_area,'jlnr':str(num),'bz':self.gp_review_user.get_sybz()} try: self.session.bulk_insert_mappings(MT_TJ_CZJLB, [data_obj]) self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh == self.cur_tjbh).update( { MT_TJ_BGGL.syxm: self.login_name, MT_TJ_BGGL.sygh: self.login_id, MT_TJ_BGGL.syrq: cur_datetime(), MT_TJ_BGGL.sybz: self.gp_review_user.get_sybz(), MT_TJ_BGGL.gcbz: self.gp_review_user.get_sybz(), MT_TJ_BGGL.sysc: num, MT_TJ_BGGL.bgzt: 2, } ) sql = "UPDATE TJ_TJDJB SET TJZT='8' WHERE TJBH='%s';" %self.cur_tjbh self.session.execute(sql) self.session.commit() except Exception as e: self.session.rollback() mes_about(self,'更新数据库失败!错误信息:%s' %e) return # 刷新控件 表格 和按钮 self.table_report_review.setItemValueOfKey(self.cur_row, 'bgzt', '已审阅', QColor("#f0e68c")) # 审阅状态 self.table_report_review.setItemValueOfKey(self.cur_row, 'syxm', self.login_name) # 审阅者 self.table_report_review.setItemValueOfKey(self.cur_row, 'syrq', cur_datetime()) # 审阅日期 self.table_report_review.setItemValueOfKey(self.cur_row, 'sybz', self.gp_review_user.get_sybz()) # 审阅备注 self.gp_review_user.statechange() self.gp_review_user.setData({'sybz':self.gp_review_user.get_sybz(),'syrq':cur_datetime(),'syxm':self.login_name,'syzt':2}) # 向服务端 发送请求 # HTML 报告需要重新生成 request_create_report(self.cur_tjbh, 'html') # 生成PDF 报告请求 request_create_report(self.cur_tjbh, 'pdf') # 取消审阅 else: if not self.gp_review_user.get_sybz(): mes_about(self,'请您输入取消审阅原因!') return # 更新数据库 TJ_CZJLB TJ_BGGL data_obj = {'jllx':'0032','jlmc':'取消审阅','tjbh':self.cur_tjbh,'mxbh':'', 'czgh':self.login_id,'czxm':self.login_name,'czqy':self.login_area,'bz':self.gp_review_user.get_sybz()} try: self.session.bulk_insert_mappings(MT_TJ_CZJLB, [data_obj]) self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh == self.cur_tjbh).update( { MT_TJ_BGGL.syxm: None, MT_TJ_BGGL.sygh: None, MT_TJ_BGGL.syrq: None, MT_TJ_BGGL.sybz: None, MT_TJ_BGGL.gcbz: self.gp_review_user.get_sybz(), MT_TJ_BGGL.sysc: 0, MT_TJ_BGGL.bgzt: 1, } ) sql = "UPDATE TJ_TJDJB SET TJZT='7' WHERE TJBH='%s';" %self.cur_tjbh self.session.execute(sql) self.session.commit() except Exception as e: self.session.rollback() mes_about(self,'更新数据库失败!错误信息:%s' %e) return # 更新表 self.table_report_review.setItemValueOfKey(self.cur_row, 'bgzt', '已审核',QColor("#FF0000")) # 审阅状态 self.table_report_review.setItemValueOfKey(self.cur_row, 'syxm', '') # 审阅者 self.table_report_review.setItemValueOfKey(self.cur_row, 'syrq', '') # 审阅日期 self.table_report_review.setItemValueOfKey(self.cur_row, 'sybz','') # 审阅备注 self.gp_review_user.clearData() # 清空数据 # 在窗口中打开报告,取消在浏览器中打开,主要用于外部查询中使用,避免地址外泄 def open_url(self,url,title): if not self.browser: self.browser = QBrowser(self) self.browser.open_url.emit(title,url) self.browser.show() # 自动缩放 无效 # def resizeEvent(self, event):#由于没有使用布局,这里当父窗口大小改变时自动改变webview的大小 # super(ReportReview, self).resizeEvent(event) # self.wv_report_equip.resize(self.size())
def open_url(self, url, title): if not self.browser: self.browser = QBrowser(self) self.browser.open_url.emit(title, url) self.browser.show()
class ReportOrder(GolParasMixin,ReportOrderUI): def __init__(self): super(ReportOrder, self).__init__() self.init() self.initParas() # 绑定信号槽 self.le_tjbh.returnPressed.connect(self.on_le_tjbh_search) self.btn_query.clicked.connect(self.on_btn_query_click) self.btn_export.clicked.connect(self.on_btn_export_click) self.table_report_progress.itemClicked.connect(self.on_table_detail) # 功能区按钮绑定 self.btn_order.clicked.connect(self.on_btn_order_click) self.btn_view.clicked.connect(self.on_btn_view_click) self.btn_print.clicked.connect(self.on_btn_print_click) self.btn_review.clicked.connect(self.on_btn_review_click) # 特殊变量 self.cur_bgzt = None # 当前报告状态,快速识别是否可以使用功能区按钮 self.browser = None # 初始化部分参数 def initParas(self): self.dwmc_bh = OrderedDict() self.dwmc_py = OrderedDict() results = self.session.query(MT_TJ_DW).all() for result in results: self.dwmc_bh[result.dwbh] = str2(result.mc) self.dwmc_py[result.pyjm.lower()] = str2(result.mc) self.report_dwmc.setBhs(self.dwmc_bh) self.report_dwmc.setPys(self.dwmc_py) def on_le_tjbh_search(self): tjbh = self.le_tjbh.text() if not tjbh: mes_about(self,'请输入体检编号!') return # 更新人员信息 result = self.session.query(MV_RYXX).filter(MV_RYXX.tjbh == tjbh).scalar() if result: self.set_user_data(result.to_dict) else: self.clear_user_data() mes_about(self,'不存在,请确认后重新输入!') return # 报告状态 result = self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh == tjbh).scalar() if result: self.lb_bgsy.setText('%s;%s' % (str2(result.syxm), result.syrq if result.syrq else '')) self.lb_bgdy.setText('%s;%s' % (str2(result.dyxm), result.dyrq if result.dyrq else '')) # 更新胶片信息 film = {} results = self.session.execute(get_film_num(tjbh)) for result in results: if result[0] in list(film.keys()): film[result[0]] = film[result[0]] + result[1] else: film[result[0]] = result[1] # 更新 self.init_film(film) # 手工报告单 # xmbh in ['1122', '1931', '0903', '501732', '501933', '501934']: results = self.session.query(MT_TJ_TJJLMXB).filter(MT_TJ_TJJLMXB.tjbh == tjbh, MT_TJ_TJJLMXB.sfzh == '1', MT_TJ_TJJLMXB.zhbh.in_(['1122', '1931', '0903', '501732', '501933', '501934'])).all() self.lb_manual.setText(" ".join([str2(result.xmmc) for result in results])) self.gp_middle_bottom2.setTitle('手工单报告(%s)' %str(len(results))) # 清空 self.le_tjbh.setText('') def set_user_data(self,user_data:dict): self.clear_user_data() self.lb_user_id.setText(user_data.get('tjbh','')) self.lb_user_name.setText(user_data.get('xm','')) self.lb_user_sex.setText(user_data.get('xb','')) self.lb_user_age.setText(user_data.get('nl','')) self.lb_user_sjhm.setText(user_data.get('sjhm','')) self.lb_user_sfzh.setText(user_data.get('sfzh','')) if user_data.get('depart',''): self.lb_user_dwmc.setText("%s(%s)" %(user_data.get('dwmc',''),user_data.get('depart',''))) else: self.lb_user_dwmc.setText(user_data.get('dwmc', '')) # self.report_dwmc.setText(user_data.get('dwmc', '')) def clear_user_data(self): self.lb_user_id.setText('') self.lb_user_name.setText('') self.lb_user_sex.setText('') self.lb_user_age.setText('') self.lb_user_sjhm.setText('') self.lb_user_sfzh.setText('') self.lb_user_dwmc.setText('') # 初始化胶片信息 def init_film(self,film:dict): self.lb_count_dr.setText(str(film.get('DR',''))) self.lb_count_ct.setText(str(film.get('CT', ''))) self.lb_count_mri.setText(str(film.get('MRI', ''))) self.lb_count_rx.setText(str(film.get('RX', ''))) self.gp_middle_bottom.setTitle('胶片数量(%s)' %str(film.get('DR',0)+film.get('CT',0)+film.get('MRI',0)+film.get('RX',0))) def on_table_detail(self,QTableWidgetItem): col = QTableWidgetItem.column() tjzt = list(self.table_report_progress_cols.keys())[col] tjzt_value = self.table_report_progress_cols[tjzt] if tjzt=='sum': sql = get_report_progress_sql2(self.report_dwmc.where_dwbh) else: sql = get_report_progress_sql(tjzt_value,self.report_dwmc.where_dwbh, tjzt) results = self.session.execute(sql).fetchall() self.table_report_detail.load(results) col_name = list(self.table_report_progress_cols.values())[col] self.gp_right_bottom.setTitle('%s(%s)' %(col_name,self.table_report_detail.rowCount())) mes_about(self, '检索出 %s 条数据!' %self.table_report_detail.rowCount()) def on_btn_query_click(self): if self.report_dwmc.where_dwbh: if self.report_dwmc.where_dwbh=='00000': mes_about(self,'不存在该单位,请重新选择!') return count = 0 tmp = { 'tjqx': 0, 'tjdj': 0, 'tjqd': 0, 'tjzz': 0, 'tjzj': 0, 'tjsh': 0, 'tjsy': 0, 'tjdy': 0, 'tjzl': 0, 'tjlq': 0, 'sum':0 } results = self.session.execute(get_report_progress_sum_sql(self.report_dwmc.where_dwbh)).fetchall() for result in results: tmp[result[0]] = result[1] count = count + result[1] tmp['sum'] = count self.table_report_progress.load([tmp]) else: mes_about(self,'请先选择单位!') def on_btn_order_click(self): pass # 导出功能 def on_btn_export_click(self): self.table_report_detail.export() #预览报告 def on_btn_view_click(self): tjbh = self.table_report_detail.getCurItemValueOfKey('tjbh') xm = self.table_report_detail.getCurItemValueOfKey('xm') dwmc = self.table_report_detail.getCurItemValueOfKey('dwmc') if not tjbh: mes_about(self,'请先选择一个人!') return else: url_title = "体检编号:%s 姓名:%s 单位名称:%s" %(tjbh,xm,dwmc) # 优先打开 新系统生成的 result = self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh == tjbh).scalar() if result: filename = os.path.join(result.bglj, '%s.pdf' % tjbh).replace('D:/activefile/', '') url = gol.get_value('api_pdf_new_show') % filename self.open_url(url, url_title) # webbrowser.open(url) else: try: self.cxk_session = gol.get_value('cxk_session') result = self.cxk_session.query(MT_TJ_PDFRUL).filter(MT_TJ_PDFRUL.TJBH == tjbh).scalar() if result: url = gol.get_value('api_pdf_old_show') % result.PDFURL self.open_url(url, url_title) else: mes_about(self, '未找到该顾客体检报告!') except Exception as e: mes_about(self, '查询出错,错误信息:%s' % e) return # 在窗口中打开报告,取消在浏览器中打开,主要用于外部查询中使用,避免地址外泄 def open_url(self, url, title): if not self.browser: self.browser = QBrowser(self) self.browser.open_url.emit(title, url) self.browser.show() # 打印 def on_btn_print_click(self): rows = self.table_report_detail.isSelectRows() if not rows: return is_remote,printer = self.gp_print_setup.get_printer() self.printer = printer button = mes_warn(self, "您确认用打印机:%s,打印当前选择的 %s 份体检报告?" %(printer,len(rows))) if button != QMessageBox.Yes: return net_print_ui = ReportPrintProgress(self) # 获取要打印的数据,并更新UI self.print_datas = self.table_print.isSetRowsValue('tjbh','bgzt','打印中',QColor('#FFB90F')) # 发送打印信号 net_print_ui.print_init.emit(list(self.print_datas.keys()),printer,is_remote) # 更新数据库:打印中 方便其他客户端进行筛选,避免重复打印 try: self.session.query(MT_TJ_BGGL).filter(MT_TJ_BGGL.tjbh.in_(tuple(list(self.print_datas.keys())))).update( { MT_TJ_BGGL.dyzt: '0', MT_TJ_BGGL.bgzt: '3', },synchronize_session=False ) self.session.commit() except Exception as e: self.session.rollback() mes_about(self, '更新数据库失败!错误信息:%s' % e) return # 打印接收信号 net_print_ui.printed.connect(self.on_print_refresh) net_print_ui.exec_() def on_btn_review_click(self): # 判断状态 if not ('已审核' in self.gp_right_bottom.title() or '已审阅' in self.gp_right_bottom.title()): mes_about(self,'已审核/已审阅的报告才能进入审阅功能!') return # 是否选择了报告 rows = self.table_report_detail.isSelectRows() if not rows: mes_about(self,'请选择要审阅的报告!') return # ui = ReportReviewFullScreen(self) ui.opened.emit(self.table_report_detail.cur_data_set, self.table_report_detail.currentIndex().row()) ui.showMaximized()
class ItemsStateUI(Dialog): # 自定义 信号,封装对外使用 returnPressed = pyqtSignal(str) def __init__(self, parent=None): super(ItemsStateUI, self).__init__(parent) self.setWindowTitle('项目查看') self.setMinimumHeight(600) self.setMinimumWidth(880) self.initUI() # 绑定信号槽 self.returnPressed.connect(self.setDatas) self.le_tjbh.returnPressed.connect(self.on_le_tjbh_press) self.btn_query.clicked.connect(self.on_le_tjbh_press) self.table_item.itemClicked.connect(self.on_table_item_click) # 右键 self.table_item.setContextMenuPolicy( Qt.CustomContextMenu) ######允许右键产生子菜单 self.table_item.customContextMenuRequested.connect( self.onTableMenu) ####右键菜单 self.table_item.itemDoubleClicked.connect( self.on_table_item_doubleclick) # 功能区 self.btn_report_suggest.clicked.connect( self.on_btn_report_suggest_click) self.btn_report_zdbl.clicked.connect(self.on_btn_report_zdbl_click) self.btn_report_browse.clicked.connect(self.on_btn_report_browse_click) self.btn_report_print.clicked.connect(self.on_btn_report_print_click) self.btn_report_down.clicked.connect(self.on_btn_report_down_click) self.tmp_path = gol.get_value('path_tmp') # 特殊变量 self.browser = None def on_btn_report_suggest_click(self): pass def on_btn_report_zdbl_click(self): pass def on_btn_report_browse_click(self): tjbh = self.gp_user.get_tjbh # 优先打开 新系统生成的 result = self.session.query(MT_TJ_BGGL).filter( MT_TJ_BGGL.tjbh == tjbh).scalar() if result: filename = os.path.join(result.bglj, '%s.pdf' % tjbh).replace( 'D:/activefile/', '') url = gol.get_value('api_pdf_new_show') % filename url_title = "体检编号:%s" % tjbh self.open_url(url, url_title) else: try: self.cxk_session = gol.get_value('cxk_session') result = self.cxk_session.query(MT_TJ_PDFRUL).filter( MT_TJ_PDFRUL.TJBH == tjbh).scalar() if result: url = gol.get_value('api_pdf_old_show') % result.PDFURL url_title = "体检编号:%s" % tjbh self.open_url(url, url_title) # webbrowser.open(url) else: mes_about(self, '未找到该顾客体检报告!') except Exception as e: mes_about(self, '查询出错,错误信息:%s' % e) return # 在窗口中打开报告,取消在浏览器中打开,主要用于外部查询中使用,避免地址外泄 def open_url(self, url, title): if not self.browser: self.browser = QBrowser(self) self.browser.open_url.emit(title, url) self.browser.show() def on_btn_report_print_click(self): printerInfo = QPrinterInfo() default_printer = printerInfo.defaultPrinterName() button = mes_warn(self, "您确认用打印机:%s,打印当前选择的体检报告?" % default_printer) if button != QMessageBox.Yes: return tjbh = self.gp_user.get_tjbh # 本地打印 需要下载 url = gol.get_value('api_report_down') % tjbh filename = os.path.join(gol.get_value('path_tmp'), '%s.pdf' % tjbh) if request_get(url, filename): # 打印成功 if print_pdf_gsprint(filename) == 0: # 打印成功 mes_about(self, '打印成功!') else: # 打印失败 mes_about(self, '打印失败!') else: mes_about(self, '未找到可打印的报告!') def on_btn_report_down_click(self): filepath = QFileDialog.getExistingDirectory( self, "下载保存路径", desktop(), QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks) if not filepath: return button = mes_warn(self, "您确认下载当前选择的体检报告到路径:%s?" % filepath) if button != QMessageBox.Yes: return tjbh = self.gp_user.get_tjbh url = gol.get_value('api_report_down') % tjbh filename = os.path.join(filepath, '%s.pdf' % tjbh) if request_get(url, filename): # 下载成功 mes_about(self, '下载成功!') else: mes_about(self, '未找到报告,无法下载!') # 右键功能 def onTableMenu(self, pos): row_num = -1 indexs = self.table_item.selectionModel().selection().indexes() if indexs: for i in indexs: row_num = i.row() menu = QMenu() item1 = menu.addAction(Icon(""), "手工小结") action = menu.exec_(self.table_item.mapToGlobal(pos)) xmbh = self.table_item.getCurItemValueOfKey('xmbh') tjbh = self.gp_user.get_tjbh if action == item1: if xmbh in [ '1122', '1931', '0903', '501732', '501933', '501934' ]: pass else: mes_about(self, '该项目不是手工单项目,不允许手工小结!') def initUI(self): self.item_cols = OrderedDict([("state", "状态"), ("xmbh", "项目编号"), ("xmmc", "项目名称"), ("ksmc", "科室名称"), ("jcrq", "检查日期"), ("jcys", "检查医生"), ("shrq", "审核日期"), ("shys", "审核医生"), ("tmbh", "条码号"), ("btn_name", "")]) lt_main = QVBoxLayout() # 搜索 lt_top = QHBoxLayout() self.le_tjbh = QTJBH() self.btn_query = QPushButton(Icon('query'), '查询') self.btn_receive = QPushButton(Icon('接收'), '结果接收') gp_top = QGroupBox('检索条件') lt_top.addWidget(QLabel('体检编号:')) lt_top.addWidget(self.le_tjbh) lt_top.addWidget(self.btn_query) lt_top.addWidget(self.btn_receive) lt_top.addStretch() gp_top.setLayout(lt_top) lt_middle = QHBoxLayout() self.gp_middle = QGroupBox('项目信息') # 用户基本信息 self.gp_user = UserBaseGroup() self.table_item = ItemsStateTable(self.item_cols) self.table_item.setAlternatingRowColors(False) # 使用行交替颜色 self.table_item.verticalHeader().setVisible(False) lt_middle.addWidget(self.table_item) self.gp_middle.setLayout(lt_middle) lt_bottom = QHBoxLayout() gp_bottom = QGroupBox() self.btn_report_suggest = QPushButton(Icon('小结建议'), '小结建议') self.btn_report_zdbl = QPushButton(Icon('病历'), '重点病历') self.btn_report_browse = QPushButton(Icon('报告'), '报告浏览') # 查看 self.btn_report_print = QPushButton(Icon('报告'), '报告打印') # 打印 self.btn_report_down = QPushButton(Icon('报告'), '报告下载') # 下载 lt_bottom.addWidget(self.btn_report_suggest) lt_bottom.addWidget(self.btn_report_zdbl) lt_bottom.addWidget(self.btn_report_browse) lt_bottom.addWidget(self.btn_report_print) lt_bottom.addWidget(self.btn_report_down) gp_bottom.setLayout(lt_bottom) # 添加布局 lt_main.addWidget(gp_top) lt_main.addLayout(self.gp_user) lt_main.addWidget(self.gp_middle) lt_main.addWidget(gp_bottom) self.setLayout(lt_main) # 双击查看明细结果 def on_table_item_doubleclick(self): pass # 变更项目状态 def on_table_item_click(self, QTableWidgetItem): row = QTableWidgetItem.row() col = QTableWidgetItem.column() if col != self.table_item.getLastCol(): return tjbh = self.le_tjbh.text() btn_name = self.table_item.getItemValueOfKey(row, "btn_name") xmbh = self.table_item.getItemValueOfKey(row, "xmbh") xmmc = self.table_item.getItemValueOfKey(row, "xmmc") ksmc = self.table_item.getItemValueOfKey(row, "ksmc") if btn_name: if btn_name == '核实': button = mes_warn(self, '您是否继续?') if button != QMessageBox.Yes: return try: data_obj = { 'jllx': '0121', 'jlmc': '项目核实', 'tjbh': tjbh, 'mxbh': '', 'czgh': self.login_id, 'czxm': self.login_name, 'czqy': self.login_area, 'jlnr': xmmc, 'bz': None } self.session.query(MT_TJ_TJJLMXB).filter( MT_TJ_TJJLMXB.tjbh == tjbh, MT_TJ_TJJLMXB.zhbh == xmbh).update({ MT_TJ_TJJLMXB.zxpb: '0', MT_TJ_TJJLMXB.jsbz: '0', MT_TJ_TJJLMXB.qzjs: None }) self.session.bulk_insert_mappings(MT_TJ_CZJLB, [data_obj]) self.session.commit() except Exception as e: self.session.rollback() mes_about(self, '执行出错,错误信息:%s' % e) return # 刷新界面 self.table_item.setItemValueOfKey(row, 'state', '核实', QColor("#FF0000")) elif btn_name == '拒检': button = mes_warn(self, '您是否继续?') if button != QMessageBox.Yes: return try: data_obj = { 'jllx': '0012', 'jlmc': '项目拒检', 'tjbh': tjbh, 'mxbh': '', 'czgh': self.login_id, 'czxm': self.login_name, 'czqy': self.login_area, 'jlnr': xmmc, 'bz': None } self.session.query(MT_TJ_TJJLMXB).filter( MT_TJ_TJJLMXB.tjbh == tjbh, MT_TJ_TJJLMXB.zhbh == xmbh).update({ MT_TJ_TJJLMXB.zxpb: '1', MT_TJ_TJJLMXB.jsbz: '1', MT_TJ_TJJLMXB.qzjs: '1' }) self.session.bulk_insert_mappings(MT_TJ_CZJLB, [data_obj]) self.session.commit() except Exception as e: self.session.rollback() mes_about(self, '执行出错,错误信息:%s' % e) return # 刷新界面 self.table_item.setItemValueOfKey(row, 'state', '已拒检', QColor("#008000")) elif btn_name == '图像接收': button = mes_warn(self, "您是否确认从检查系统重新接收图像?") if button != QMessageBox.Yes: return if '彩超' in ksmc: ksbm = '0020' elif '病理' in ksmc: ksbm = '0026' else: ksbm = '0024' if trans_pacs_pic(tjbh, ksbm, xmbh): mes_about(self, '传输成功!') else: mes_about(self, '传输失败!') # results = self.session.query(MT_TJ_PACS_PIC).filter(MT_TJ_PACS_PIC.tjbh==tjbh,MT_TJ_PACS_PIC.zhbh==xmbh).all() # if results: # button = mes_warn(self,"您是否确认从检查系统接收图像?") # if button != QMessageBox.Yes: # return # # 读取 # filenames = get_pacs_pic(tjbh,xmbh,self.tmp_path) # if filenames: # # 上传 http请求替代smb协议 # pass # else: # mes_about(self,'检查系统中未发现顾客(%s)%s项目的图像!' %(tjbh,xmmc)) # # 上传 # # 更新或者删除 # else: # mes_about(self,'功能未定义,请联系管理员!') # 初始化数据 def setDatas(self, p_str): self.le_tjbh.setText(p_str) self.on_le_tjbh_press() # 查询 def on_le_tjbh_press(self): if not self.le_tjbh.text(): mes_about(self, '请输入体检编号!') return # 人员信息 result = self.session.query(MV_RYXX).filter( MV_RYXX.tjbh == self.le_tjbh.text()).scalar() if result: self.gp_user.setData(result.to_dict) else: mes_about(self, '不存在,请确认后重新输入!') self.gp_user.clearData() # 项目结果 #results = self.session.query(MT_TJ_TJJLMXB).filter(MT_TJ_TJJLMXB.tjbh == self.le_tjbh.text(),MT_TJ_TJJLMXB.sfzh=='1').all() #self.table_item.load([result.item_result for result in results]) results = self.session.execute( get_item_state_sql(tjbh=self.le_tjbh.text())).fetchall() self.table_item.load(results) self.gp_middle.setTitle('项目信息 (%s)' % self.table_item.rowCount())