Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
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())
Exemplo n.º 3
0
 def open_url(self, url, title):
     if not self.browser:
         self.browser = QBrowser(self)
     self.browser.open_url.emit(title, url)
     self.browser.show()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
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())