class GetData:
    """
    从MySQL数据库中获取组件、部件、纸箱信息的类
    """
    def __init__(self, log=None):
        self.log = log
        self.mysql = MysqlPool()

    def is_needing_pack(self):
        """
        查询组件表单是否有需要打包的组件
        :return: None(没有需要打包的组件) or Sec_id(组件号)
        """
        sql = "SELECT `Index`, `Sec_id` FROM `order_section_online` WHERE `Package_state`=0"
        section_info = self.mysql.do_sql_one(sql)
        if section_info is None:  # 没有需要打包的组件
            return None
        else:
            return section_info[1]

    def get_part_info(self):
        """
        获取部件表单信息(原始数据)
        :return: None(没有组件或部件信息) or part_lists(部件二维列表信息)
        """
        sec_id = self.is_needing_pack()
        part_lists = []
        if sec_id:
            sql = "SELECT `Contract_id`, `Order_id`, `Sec_id`, `Part_id`, `Door_type`, `Door_height`, `Door_width`, " \
                  "`Door_thick`, `Package_state`, `Element_type_id` FROM `order_part_online` WHERE `Sec_id` = '%s'" % \
                  sec_id
            part_info = self.mysql.do_sql(sql)
            if part_info is None:  # 部件表单无部件信息
                return None, part_lists
            else:
                for i in range(len(part_info)):
                    part_lists.append(list(part_info[i]))
                return sec_id, part_lists
        else:
            return None, part_lists

    def get_box_info(self):
        """
        获取纸箱表单信息(原始数据)
        :return: None(没有纸箱信息) or box_lists(纸箱二维列表信息)
        """
        box_lists = []
        sql = "SELECT `Box_type`, `Box_long`, `Box_short`, `Box_height` FROM `equipment_package_box` WHERE " \
              "`State`=5"
        box_info = self.mysql.do_sql(sql)
        if box_info is None:
            return None
        else:
            for i in range(len(box_info)):
                box_lists.append(list(box_info[i]))
            return box_lists
Example #2
0
    def __init__(self,
                 parent,
                 id=-1,
                 pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=wx.WANTS_CHARS,
                 name='结果显示'):
        wx.grid.Grid.__init__(self, parent, id, pos, size, style, name)
        self.app = wx.GetApp()
        self.mysql = MysqlPool()
        # self.showGrid()

        self.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.onCellLeftClick)
 def __init__(self, solution, section_id):
     self.solution = solution
     self.section_id = section_id
     self.mysql = MysqlPool()
class PutData:
    def __init__(self, solution, section_id):
        self.solution = solution
        self.section_id = section_id
        self.mysql = MysqlPool()

    def convert_package(self):
        result_dict = self.init_result_dict()
        if isinstance(self.solution, list):
            package_lists = [
                part_item.package_id_scheme for part_item in self.solution
            ]
            count = Counter(package_lists)
            for package_id in count.keys():
                total_area = 0
                total_weight = 0
                total_volume = 0
                current_counter = 0
                solution_item = []
                for part_item in self.solution:
                    if part_item.package_id_scheme == package_id:
                        total_area += part_item.area_scheme
                        total_weight += part_item.weight_scheme
                        total_volume += part_item.volume_scheme
                        current_counter += 1
                        solute = '&'.join((str(part_item.position_scheme[0]),
                                           str(part_item.position_scheme[1]),
                                           str(part_item.position_scheme[2]),
                                           str(part_item.part_size_scheme[0]),
                                           str(part_item.part_size_scheme[1]),
                                           str(part_item.part_size_scheme[2]),
                                           str(part_item.rotation_scheme),
                                           part_item.part_id_scheme))
                        solution_item.append(solute)
                        # print('旋转状态:%s'%part_item.rotation_scheme)
                        if current_counter == count[package_id]:
                            result_dict['package_id'] = package_id
                            result_dict[
                                'total_layers'] = part_item.position_scheme[2]
                            result_dict['total_area'] = total_area
                            result_dict['total_weight'] = total_weight
                            result_dict['total_volume'] = total_volume
                            result_dict['section_id'] = re.findall(
                                ".*P(.*)-.*", package_id)[0]  # 获取两个字符之间的字符串
                            result_dict['order_id'] = re.findall(
                                ".*P(.*)S.*", package_id)[0]
                            result_dict['box_type'] = part_item.box_type_scheme
                            result_dict[
                                'box_length'] = part_item.box_size_scheme[0]
                            result_dict[
                                'box_width'] = part_item.box_size_scheme[1]
                            result_dict[
                                'box_height'] = part_item.box_size_scheme[2]
                            result_dict['part_num'] = count[package_id]
                            result_dict['volume_rate'] = total_volume / (
                                part_item.box_size_scheme[0] *
                                part_item.box_size_scheme[1] *
                                part_item.box_size_scheme[2])
                            if len(solution_item) > 1:
                                solution_str = '#'.join(solution_item)
                                result_dict['solution'] = solution_str
                            else:
                                result_dict['solution'] = solution_item[0]
                            self.put_package_table(result_dict)
                    else:
                        continue
            self.update_database()

    def init_result_dict(self):
        result_dict = {
            'package_id': '',
            'total_layers': 0,
            'total_area': 0,
            'total_weight': 0,
            'total_volume': 0,
            'section_id': '',
            'order_id': '',
            'box_type': '',
            'box_length': 0,
            'box_width': 0,
            'box_height': 0,
            'solution': '',
            'part_num': 0,
            'volume_rate': 0
        }
        return result_dict

    def put_package_table(self, result_dict):
        if result_dict:
            column_str = ''  # 列的字段
            row_str = ''  # 行字段
            for key in result_dict.keys():
                column_str = column_str + ' ' + '`' + key + '`,'
                row_str = (row_str + '"%s"' + ',') % str(result_dict[key])
            sql = "INSERT INTO %s (%s) VALUES (%s);" % (
                'package_result', column_str[:-1], row_str[:-1]
            )  # 取[:-1]是去除字符串最后的逗号
            self.mysql.insert(sql)

    def update_database(self):
        sql = "UPDATE `order_section_online` SET `Package_state` = 5 WHERE `Sec_id` = '%s'" % self.section_id
        self.mysql.upda_sql(sql)
 def __init__(self, log=None):
     self.log = log
     self.mysql = MysqlPool()
Example #6
0
class ShowByGrid(wx.grid.Grid):
    def __init__(self,
                 parent,
                 id=-1,
                 pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=wx.WANTS_CHARS,
                 name='结果显示'):
        wx.grid.Grid.__init__(self, parent, id, pos, size, style, name)
        self.app = wx.GetApp()
        self.mysql = MysqlPool()
        # self.showGrid()

        self.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.onCellLeftClick)

    def getRows(self):
        """获取数据库状态为0的打包数据"""
        sql = "SELECT `package_id`, `total_layers`, `total_area`, `total_weight`, `total_volume`, `section_id`, " \
              "`order_id`, `create_time`, `box_type`, `box_length`, `box_width`, `box_height`, `part_num`, " \
              "`volume_rate`, `state` FROM `package_result` WHERE `state` = '0'"
        self.package = self.mysql.do_sql(sql)
        if self.package:
            return len(self.package)

    def showGrid(self):
        print('当前线程是:', threading.current_thread().name)
        rows_num = self.getRows()
        if rows_num:
            self.CreateGrid(rows_num, 15)  # 创建Grid
            #######################设置Column的Header####################
            colHeaders = [
                '包编号', '层数', '面积', '重量', '体积', '组件号', '订单号', '创建时间', '纸箱类型',
                '纸箱长', '纸箱宽', '纸箱高', '部件数', '体积利用率', '状态'
            ]
            for i, colHeader in enumerate(colHeaders):
                self.SetColLabelValue(col=i, value=colHeader)
            #######################显示每个单元Cell的值####################
            for j, row in enumerate(self.package):
                for k, col in enumerate(row):
                    self.SetCellValue(j, k, str(col))
                    self.SetReadOnly(j, k)
            self.SetFont(
                wx.Font(pointSize=12,
                        family=wx.FONTFAMILY_ROMAN,
                        style=wx.FONTSTYLE_NORMAL,
                        weight=wx.FONTWEIGHT_BOLD))
            # self.AutoSize()
            self.SetColSize(col=0, width=90)
            self.SetColSize(col=7, width=130)
            self.SetColSize(col=8, width=90)

    def onCellLeftClick(self, event):
        self.app.frame.logTextCtrl.write_textctrl_txt(
            '第{}行,第{}列,单元格左上角坐标{} \r\n'.format(str(event.GetRow()),
                                               str(event.GetCol()),
                                               str(event.GetPosition())))
        # total_rows = self.GetNumberRows()
        # total_cols = self.GetNumberCols()
        # gridRowAttr = wx.grid.GridCellAttr()
        # gridRowAttr.SetBackgroundColour('yellow')
        # self.SetRowAttr(event.GetRow(), gridRowAttr)

        # attr = wx.grid.GridCellAttr()
        # attr.SetBackgroundColour('yellow')
        # self.SetRowAttr(event.GetRow(), attr)

        evtRow = event.GetRow()  # 获取cell点击事件所在的行
        package_id = self.GetCellValue(evtRow, 0)
        create_time = self.GetCellValue(evtRow, 7)

        sql = "SELECT `solution`,`total_layers`,`box_length`,`box_width`,`box_height`, `part_num` FROM `package_result` WHERE `package_id` = '%s' and `create_time`='%s'" % (
            package_id, create_time)
        solution = self.mysql.do_sql_one(sql)
        if solution:

            packResultShowDialog = PackResultShowDialog(parent=None,
                                                        id=-1,
                                                        package_id=package_id,
                                                        solution=solution)
            packResultShowDialog.ShowModal()
            packResultShowDialog.Destroy()
        self.app.frame.logTextCtrl.write_textctrl_txt(package_id)
        event.Skip()