首页 > 其他分享 >项目编码信息查询工具

项目编码信息查询工具

时间:2023-02-14 17:14:35浏览次数:35  
标签:编码 ProductLine self 查询 工具 dic data def wx

UI界面作为主入口

#coding:utf8
#!/usr/bin/env python
#@author: 9527

import wx
import PicturepackageUI
import QueryProjectCodeList
import ProjectNumberManager
import PronjectInfoQuery
import json

class MainFrame(wx.Frame):
    """从wx.Frame派生主窗口类"""
    
    def __init__(self, parent):
        """构造函数"""
        
        wx.Frame.__init__(self, parent, style=wx.DEFAULT_FRAME_STYLE)
        
        #***********************
        self.ButtonValue1 = '' 
        #***********************
        
        self.SetTitle('项目编码管理工具')
        self.SetIcon(PicturepackageUI.find_png.GetIcon())
        self.SetSize((750,420)) # 设置窗口大小,宽750*高420
        
        self._init_ui() # 初始化界面
        self.Center() # 窗口在屏幕上居中
    
    #***************************************
    #绘制界面
    def _init_ui(self):
        """初始化界面"""
        
        panel = wx.Panel(self, -1) # 创建容器面板
        sizer = wx.GridBagSizer(10, 10)# 每个控件之间横纵间隔10像素   
        
          
        #*****************************************************************
        st = wx.StaticText(panel, -1, "选择产品线")
        sizer.Add(st, (1, 0), flag=wx.ALIGN_RIGHT) # 在第1行0列,右对齐      
        
        self.professional = wx.ComboBox(panel, -1, choices=self.Get_ProductLineInfo())
        self.professional.Bind(wx.EVT_COMBOBOX, self.on_select)
        sizer.Add(self.professional, (1, 1), (1, 3), flag=wx.EXPAND| wx.RIGHT, border=20) # 在第1行1列,跨3列
        
         
        #*************************************************    
        

        #已存在编码显示

        st2 = wx.StaticText(panel, -1, "禅道已有\n项目编码")
        sizer.Add(st2, (3, 0), flag=wx.ALIGN_RIGHT | wx.LEFT, border=20) # 在第3行0列,距离左边缘20像素,右对齐      
        
        self.ExistingCode = wx.TextCtrl(panel, -1,size=(-1,200),style=wx.TE_MULTILINE)#静态文本框宽度自适应,高度50
       
        sizer.Add(self.ExistingCode, (3, 1), (1, 3), flag=wx.EXPAND| wx.RIGHT, border=20) # 在第2行1列,跨3列
        self.ExistingCode.Bind(wx.EVT_LISTBOX, self.OnCopy)#绑定复制等右键菜单功能
        
        #**************************************************
        
        #可用新编码
        st = wx.StaticText(panel, -1, "可用编码")
        sizer.Add(st, (2, 0), flag=wx.ALIGN_RIGHT | wx.LEFT, border=20) # 在第2行0列,距离左边缘20像素,右对齐
        
        
        self.NewCreateCode = wx.TextCtrl(panel, -1,size=(-1, 50),style=wx.TE_MULTILINE)#静态文本框宽度自适应,高度50      
        sizer.Add(self.NewCreateCode, (2, 1), (1, 3), flag=wx.EXPAND| wx.RIGHT, border=20) # 在第2行1列,跨3列
        self.NewCreateCode.Bind(wx.EVT_LISTBOX, self.OnCopy)#绑定复制等右键菜单功能
    
        sizer.AddGrowableCol(3)  # 设置第3列可增长
        #*******************************************        
        #信息输入框
        self.QuerySerialInfo1 = wx.TextCtrl(panel, -1,value = "请输入要查询的编码")
        sizer.Add(self.QuerySerialInfo1, (1, 4), (1, 11), flag=wx.EXPAND | wx.RIGHT, border=30) # 在第1行4列,跨3列,距离右边缘30像素
        #查询按钮
        btn_query = wx.Button(panel, -1, "查询")
        sizer.Add(btn_query, (2, 4), (1, 9), flag=wx.ALIGN_CENTER | wx.BOTTOM, border=20)  # 在第4行0列,跨4列, 居中
        btn_query.Bind(wx.EVT_BUTTON,self.get_queryinputinfo)
        #显示查询结果信息
        
        self.queryresult1 = wx.TextCtrl(panel, -1,size=(-1,200),style=wx.TE_MULTILINE)#静态文本框宽度自适应,高度200
       
        sizer.Add(self.queryresult1, (3, 4), (1, 11), flag=wx.EXPAND| wx.RIGHT, border=20) # 在第2行1列,跨3列
        self.queryresult1.Bind(wx.EVT_LISTBOX, self.OnCopy)#绑定复制等右键菜单功能
    
        #*******************************************
   
        panel.SetSizer(sizer)
        panel.Layout()
        
    #******************************************
    #定义各种操作实现方法
    
    #触发查询信息操作生效,基于此,查询与显示  
    def get_queryinputinfo(self,event):
        
        InfoGroup = ["项目信息查询结果\n"]
        queryinputinfo = self.QuerySerialInfo1.GetValue()
        A = PronjectInfoQuery.PronjectInfoQuery(queryinputinfo)
        B = A.format_data()
        
        try :
            for key, value in B.items():
                InfoGroup.append(key + ':' + str(value))                
        except:
            InfoGroup = B
            pass                
            
        self.queryresult1.SetValue("\n".join(InfoGroup))#设置文本框内
            
    #触发选择产品线信息生效,基于此,查询与显示    
    def on_select(self,event):

        
        selectresult= self.professional.GetValue()
        
        choices = self.Get_ExistingProjectNumber(selectresult)
        self.ExistingCode.SetValue("\n".join(choices))#设置已存在编码文本框内容
        #wx.TextCtrl不支持显示列表,用join转换为字符串
        
        choices1 = self.Create_NewCode(selectresult)#获取创建的新项目编码
        self.NewCreateCode.SetValue(choices1)#设置新编码文本框内容 
    
    
    #复制方法  
    def OnCopy(self, event):
            text_ctrl = event.GetEventObject()
            menu = wx.Menu()
            menu.Append(wx.ID_COPY, 'Copy')
            text_ctrl.PopupMenu(menu)
            wx.TheClipboard.Open()
            wx.TheClipboard.SetData(wx.TextDataObject(text_ctrl.GetValue()))
            wx.TheClipboard.Close()
            
    #创建新编码    
    def Create_NewCode(self,ProductLine):
        Product01 = ProjectNumberManager.Generate_Project_Num(ProductLine)
        NewCode = Product01.generate_project_code()
        return NewCode
    
    #获取产品线组列表    
    def Get_ProductLineInfo(self):       
        
        with open('ProductLineDict.json', 'r',encoding='utf-8') as f:
            
            data = json.load(f)
            
            keys_list = list(data.keys())
            return keys_list    
    
    #获取当前产品线已存在项目编码列表
    def Get_ExistingProjectNumber(self,ProductLine):
        QueryExistingList = QueryProjectCodeList.QueryProjectCodeList(ProductLine)
        QueryExistingResult = QueryExistingList.QueryList()       
        data_list = [x[0] for x in QueryExistingResult]        
        return data_list
    #***********************************************************************************    

if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame(None)
    frame.Show()
    app.MainLoop()

 

项目可用编码管理模块

#coding:utf8
#!/usr/bin/env python
#@author: 9527 


import re
import datetime
import DatabaseQuery
import json






#项目编号生成
class Generate_Project_Num():
    
    def __init__(self,ProductLinName):
        self.ProductLine = ProductLinName 
        
        
        self.product = self.get_ProductLine(self.ProductLine)
        self.year = self.get_year()
        self.serial_number = self.get_serialNumber() 

    
    #获取产品线对应简称
    def get_ProductLine(self,ProuctLine):
            
        with open('ProductLineDict.json', 'r',encoding='utf-8') as f:
            
            data = json.load(f)
            value = data.get(self.ProductLine)
            return value
    
    #确认当前年份信息
    def get_year(self):
        currentyear = datetime.datetime.now().year
        return currentyear
    
    #确认序列号
    def get_serialNumber(self):
        serialNumber = 0        
        while True:
            #str(serialNumber).zfill(3)设置显示样式为3位,如5显示为005
            project_code =  "XXXX-" + self.product +"-"+ str(self.year) +"-"+str(serialNumber).zfill(3)#校验三位尾数
            project_code1 =  "XXXX-" + self.product +"-"+ str(self.year) +"-"+str(serialNumber).zfill(4)#校验四位尾数
            
            sql = "SELECT code FROM zt_project WHERE code='%s'"%project_code
            sql1 = "SELECT code FROM zt_project WHERE code='%s'"%project_code1 
            
            Query1 = DatabaseQuery.DatabaseQuery(sql)
            Query2 = Query1.Queryfunc()
            Query1.Close()
            
            Query3 = DatabaseQuery.DatabaseQuery(sql1)
            Query4 = Query3.Queryfunc()
            Query3.Close()  #查询两次,排除尾数位不同的影响
                      
            if len(Query2) or len(Query4) != 0:                
                serialNumber += 1
            else:             
                break                 
        return serialNumber        
        
    #生成项目编号
    def generate_project_code(self):
        # 定义项目编号规则
        pattern = re.compile(r'XXXX-(\w+)-(\d{4})-(\d{3})')
        project_code = 'XXXX-{}-{}-{:03d}'.format(self.product, self.year, self.serial_number)
        return project_code

数据库查询模块

#coding:utf8
#!/usr/bin/env python
#@author: 9527 


import MySQLdb


#查询数据库
class DatabaseQuery():
    def __init__(self,InputInfo):
        self.QueryData = InputInfo
        # 连接禅道数据库
        self.conn = MySQLdb.connect(
            host='192.168.1.1',
            port=3306,
            user='XXXXXX,
            passwd='XXXXX',
            db='zentaoep',
            charset='utf8'
            )
        # 使用cursor()方法获取操作游标
        self.cursor = self.conn.cursor()
        
        
    def Queryfunc(self):
        sql = self.QueryData
        # 使用execute()方法执行SQL语句
        self.cursor.execute(sql)
        # 使用fetchall()方法获取所有记录
        data = self.cursor.fetchall()
        
        return data
        
        '''
        # 遍历结果
        for row in data:
            project_code = row[0]            
            return project_code
        '''
                 
    def Close(self):
        try:
            if self.cursor is not None:
                self.cursor.close()
        finally:
            if self.conn is not None:
                self.conn.close()

查询已存在编码模块

#coding:utf8
#!/usr/bin/env python
#@author: 9527 

import DatabaseQuery
import json

class QueryProjectCodeList():
    def __init__(self,ProductLine):
        self.ProductLine = ProductLine
        self.sql = self.get_ProductLine(self.ProductLine)
    
    #获取产品线对应简称,整理查询语句
    def get_ProductLine(self,ProuctLine):
        
        with open('ProductLineDict.json', 'r',encoding='utf-8') as f:
            
            data = json.load(f)
            
            value = "%-" + str(data.get(self.ProductLine))+ "-%"
            #value = "%-" + str(dic.get(self.ProductLine))+ "-%"
            sql = "SELECT code FROM zt_project WHERE code LIKE '%s'"%value        
            return sql
        
    def QueryList(self):
        Query1 = DatabaseQuery.DatabaseQuery(self.sql)
        Query2 = Query1.Queryfunc()
        Query1.Close()
        return Query2    

'''
a = QueryProjectCodeList("XXXX")
b = a.QueryList()

data_list = [x[0] for x in b]
print(data_list)
'''

项目信息查询模块

#coding:utf8
#!/usr/bin/env python
#@author: 9527 

import DatabaseQuery
#import datetime

class PronjectInfoQuery():
    
    def __init__(self,ProjectNumber):
        
        self.ProjectNumber = ProjectNumber
            
    def get_ProjectInfo(self,target):
        
            
        sql = "SELECT * FROM zt_project WHERE code='%s'" %target
        Query1 = DatabaseQuery.DatabaseQuery(sql)
        Query2 = Query1.Queryfunc()
        Query1.Close()
        try :
            return Query2[0]
                
        except:
            return Query2
                
    def  format_data(self):
        
        dic = {"禅道序号":"","所属产品线":"","项目名称":"","编码":"","开始时间":"","截止时间":"","当前状态":"","类型":""}
        BcakInfo = self.get_ProjectInfo(self.ProjectNumber)
        try:
            dic["禅道序号"] = BcakInfo[0]
            dic["所属产品线"] = BcakInfo[1] 
            dic["项目名称"] = BcakInfo[7] 
            dic["编码"] = BcakInfo[8]
            
            #日期格式转换
            date1  =  BcakInfo[13]
            dic["开始时间"] = date1.strftime('%Y-%m-%d') 
            date2  =  BcakInfo[14]
            dic["截止时间"] = date2.strftime('%Y-%m-%d')
             
            dic["当前状态"] = BcakInfo[16] 
            
            #数字与类型转换
            if BcakInfo[17] == '1':
                dic["类型"] = "一类"
            elif BcakInfo[17] == '2':
                dic["类型"] = "二类"
            elif BcakInfo[17] == '3':
                dic["类型"] = "三类"
            elif BcakInfo[17] == '4':
                dic["类型"] = "四类"
            elif BcakInfo[17] == '5':
                dic["类型"] = "五类"
            else :
                dic["类型"] = "其他类"         
            return dic       
        
        except:            
            return "未查询到相关信息"
            
            
'''            
A = PronjectInfoQuery("XXXX-old-2055-0002")
B = A.format_data()
print(B)                        
'''

图标位图模块

#coding:utf8
from wx.lib.embeddedimage import PyEmbeddedImage


monitor_png = PyEmbeddedImage("")

find_png = PyEmbeddedImage("iVBORw0KGgoAAAANSUhEUgAAAJUAAACMCAYAAAB1e+scAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAx0SURBVHhe7Z35UxRnHof3H0u2UrVbyf6wx69rzGV2k5hERRLMYRKNimIwh9Go6xVi1NIYNRrQCEYIJHgEBFGGQ0BAroGZ6em5z/7s+7YNAr4O3TMvme7m+6l6qpTpeXum34f36H67+RMoFMkhqSjSQ1JRpIekokgPSUWRHpKKIj0kFUV68pLK5/Oj6ttTWLehknAZH5XvRM2FnxEOR4zath5LUqXTaVysbcDTz6/GE/9eSbiYNR9sR9/AEDRNM2rffCxJVd94FU8996bwQxDuY+U7W+D1Thm1bz6mpZqa8mPl+9vwpGDnhHvZe+i4YYD5mJaqvqEZ/3q1TLhjwr38fUWpYYD5mJbq+KlqPPNiiXDHhLuZGPcaFpiLaamOnDiHp19YI9wp4W48nh7DAnORKtWTy14nHMYTHEFdzqazs9uwwFykSrWs/ADhMP5ZVoE/L889oy+qVOXtKuEw3jhSh6cWGCuTVIQlSCpCOo6XqrJDxXf9EVwYimGfJ4Stgm0Od6moHlBxpPvR1zjbb/qwu7kfu64OouKmX7gNYR5HS/UJE+qGN4GsBp1IKouD3aE52/zQr8KrqAiqD7h6f24ZO1q9OHqxCd+dr2XUoaruBipbJ+dsQ1jD0VLt9oSRnndtskdJzbz+VaeK2xMqQqGHTDLB/sd+Pr3N/l86dZlOnbukc/LHy9jT1D3zOmEdR0t19G4E8693j0YyM6/v86jo8j4q1QH28+ltDl9uZTLVzkjFW6x9TLTp1wnrOFqqz+6EMB7NGKUBSdYHXhmNP3z9toqGYRX+4EOpephkO1i3Ob3NruYBnKi+MiPVMdYV7rw2PPM6YR1HS7XtlopjfRFcZ+OqDn8StSNxJtLcMdXuOypqB1W0jKloZIJ9zQbts1+vuBnA7t/u4vCVdhy60oYvr97DtjZlzjaENRwtFYfP9j5lIu1krVYFk0y0TSX7+U7Was1uoWaztT2ozwA5/N+ibQjzOF4qwn6QVIR03jhymUm1Vlif0xRVqsO9EcJhbD7TiL+8VCqsz2mKKhXFeam73Ii/rbBxS0VxXkgqivSQVBTpIako0kNSFSUakEkD2YeXmNwUkmqxw8TRwgoy40NI9XuQ8rQjebsViaaLSFyv1/+f6u5AerAXmckRaLGw8UbnhqRapGjJBNJ9txFvqEHkxD4EP18P//r/wrfq34+ydjmUTaugfvUxomeqkGhpQmbsHrR00ijNWSGpZCedQvLOdYSP7kFw21vwlT4nFulxrF4G/3v/gbpzA6LVx5EZ7TcKdk5IKonJjPQhfHwPAhtXiYWxiP/tF6BsK0P0wjFoKee0WiSVjLBxU/L2NSjby+ArWS4UpBD8pc8jyFquzNSIsUN7h6QqMFoqgUTzTwh88IpQCJkEK8rYgN7Ddpo19m7PkFSFhAvVWGN93FQAwR3vIdV7i/W19j0dQVLlG9bl8RbqjxRqGvXLjUjf67Jti0VS5ZnkrWYE1i9+l/c41L3lyCrWn0j3R4SkyiNZ35jeDYkqez7+d1Yg8OGr8K15Vvh63pQ8i8j3B4xPZK+QVFaTTiFytkqfkQkrex5BNiNMtjQgevog/G+9INwmX3h5qZ4W44PZJySVxaTvtkMpLxVWsohg5btsxsbGP9ks0sM9CHz8unC7fFE+KTM+mX1CUlkJm3FFzx3Vux5RBYuYkcqIloghXnsSgffldIm8xUze+tUo3R4hqSyEX49Td20UVu7jmC+VHjZzTN/tQOjAdv2SDL80I3qvKdh7eTn6qgebhKQyG01Dsu03JsFjLgo/BqFURrJBH+IN5/VxVyFiKVtKkfUOG6UWPySVyfBuK1pzQlipucgllR428E/1dyLKBv/5nvMKMNETV+uMAosfkspkeKsS/uYzYaXmYkGpjPB1VMmOG1A/Xy8sJydrlyNy+mujpOKHpDKZzNgQlG3mZ33TmJVKj5bVT2hGa47BX/aisLzHEa760jbjKpLKZDKjg1A2rxZWaC4sSTUdJke6t/3BCVaTM0R1z1bWmk4aBRQ3JJXJpPq6hJW5EHlJZUQLBxD9oQrKxjeZXLkH8iSVEZLKXBLN1fCvy90dklRGSKrc0eIRJNt+RWhfuT4YF5U/DUllxElSpYf7EfjwNWGF5iJfqTLjg4ic3I/AhjeE5c6HpDLiuIF6eYmwQnNhVSotGUfiWh2UirfhX2v+vFXo4A7b3N5FUplMVplE+OB2YYXmwopU2bCC8NEvrF8TZNuHT+w3Sil+SCqT0WIRNhP7RlypOVhQKi0LLRJCsqUe/rL8lsbwNVvx+nNGgcUPSWU2rPIT11jFW1wTlUsqLR7V15uHD1cWdBeOsmkNMkPW/n7eYoakspD0UC+Cn5pb8TmNUKpsVr/FPXbpFJTNawpepaDu3qzfhGGXkFQWwluWyMkDC56InI1IqmRbky6Cf91LwvdYgg3m403VRsn2CEllMfyGB8XkNJ8zWyp+M2io6nMEPpK3+jOweTW0aEgv3y4hqSyGL4EJHWBjIJNdli5VXwcSrfX62Ef2DRCJG7XGJ7NPSKo8wp+ZYPZ5Cfw2LmUz29bCEmSzqHs+Nj6RvUJS5ZnYz6el3x1jBWVLCbLe+8ansVdIqjyjpVOIfr9/UVqghVBYK8mvCdr1SXwkVQHRIor+QLOFLvbKhHen8YYf9bGdXUNSFRh9pebpQ/qzpEQSyIS3UInmS0xm1di7PUNSFRpN0ys5VndGvwFBJIMMAhvf1J+B5YSHn5FUssLkSvXchFLxVmFnyAWEDm3Vrz2ynTzYl81DUkkOfwhajN+BvGEV/OtWWDr7PkPJctbqvQJ17xZdVKeFpFqkaKoPid8uInT4UwQ/eReBD17LOe7yv/MylE2rEfzsQ4SP70XK8zsbjEeN0pwVkmqxw1ou/oThxO/1bNx1FpGz3yJy8hDCVV8gfPQrRL6v0n8Wb7yAVOfv+mOK7PyUPDMhqYoQPtjOhgIPrtnZ9FxTISGpKNJDUlGkh6SiSA9JRZEekooiPbaXquZSA+EwKncdwl+fXy2sz2mKKtU/Xi4lHMYzL67Bk8teF9bnNEWVinAnJBUhHZKKkA5JRUiHpCKkQ1IR0lk0qc6cr8XKsk1YUfIRscTweKw9UMS0VKFwGBMTXoyPTxBLjGTS2lp701IlEgmEwyGEQiqxxMhYXIhIUhELQlIR0iGpJBMMBuEPBBgKgmpQuI3bIakkMjoxia7+++jsG2bcx93BMfj8AeG2boakksTI+CTauu6hpXNghlbPgC6XX1GE73ErJJUEeDd3u3d4jlCzGR71Ct/nVkgqCUz5/GjvHhQKxeFdouh9boWkkgAfN93KIVX3wIjwfW6FpJIAn/Hx1kgkVCtjdGJK+D63QlJJwjvlQ0fP0CNC8RmgwqQTvcetkFSSUBlTrBscHJlgIo3q3B+bRGCJzfw4iyZVKpVaUlJNo7KZIJ8NclRVvI3bWTSpstksIpGwcKeEu9E0aw9wMy0VD18CIdop4V5iMesPwbUkFU88Hl+S3eBShPdMvIeyGstS8fDxFZcrGo3akAgm+cyts9u2dN8d0M+FiT+/PYgn4mwslTZq3FrykoqH97PcYruRZMK3tN3BmerLtuX8Tw3o6R9EOp0Wfgc7YHUcNTt5S2XX8CUqZ2t+xqlzl2zNlabrUIL2+otasuI6qS43XhdWou04X4uBodGCWgS7xlVS8d/8Hy7UO4ZfmlsRjcWNT++euEYq/hvfNzwx57KK3Wn13ENA5Q/yd1dcI5UaieHmvEV1TqD73hgbGLurC3SFVHy20jfsFVaa3dFbq2DY+CbuiCukUkJRdORYqWl3OnqHkLZ4fc3OcbxU6XQG/fed2UrNZmxSMb6R8+N4qXxKCO3dc9c9OZFbrLVKpvI7g223OFoqXgluaKU4fJIx6g244ryVY6XiB59Px3PdoOA0PP0jiCXs/4cnF4pjpdLHUg47L7UQbV2D+tjK6a2VraTiB5OvMuSrIBYiEo1haMSLASaWmxjz+hGLJ4TfeT6FXvhdrNhGKn6Q+PodvlbLDHy9D7/rxW08WLIs/s7z4ccrGotaXu672LGFVMlkYs7iMMIaXK5M2j4zx6JLxX/LQuy3TnSwCPPwxYm8O7RDii4VXwMtOkiEdfiiPzuk6FKFw3SHjiysPptzsVJ0qUQHh8gPksqI6OAQ+UFSGREdHCI/SCojooND5AdJZUR0cIj8IKmMxOMxQhL53vwpO0WXiuK+kFQU6SGpKNJDUlGkh6SiSA9JRZEc4P/71aMwqhjkYAAAAABJRU5ErkJggg==")

Lock_png = PyEmbeddedImage("")

json文件格式

{
    "BABA": "9527",
    "没关系呀": "大家都是神经病",
    "HelloKitt": "喵喵", 
    "娃哈哈": "Wahaha"
}

 

标签:编码,ProductLine,self,查询,工具,dic,data,def,wx
From: https://www.cnblogs.com/babashi9527/p/17120189.html

相关文章