file-type

集体行动:Dockerfile的效度验证方法

ZIP文件

下载需积分: 5 | 3KB | 更新于2025-09-06 | 14 浏览量 | 0 下载量 举报 收藏
download 立即下载
标题:“group-validity-action”描述中提到的“效度集体行动”可以被解读为一种集体或团队内部在执行特定任务或活动时所遵循的验证过程或规则。在此处,这个概念特别关联到Dockerfile,那么我们可以推断该知识点涉及到Docker容器技术,并关注于如何通过Dockerfile这一脚本文件来确保容器的有效性和正确性。Dockerfile是容器化过程中的关键组件,其本身并不执行任何动作,而是包含了创建Docker镜像所需的命令和参数。接下来将详细阐释这些知识点。 1. Docker技术基础 Docker是一种开源的容器化平台,它允许开发者打包应用以及应用的依赖环境到一个可移植的容器中。容器化技术与传统虚拟化不同,它不依赖于一个完整的操作系统,而是利用宿主机的内核,因此具有启动速度快、资源占用低的优势。容器的创建是通过Dockerfile来定义的。 2. Dockerfile的结构和命令 Dockerfile遵循特定的语法规则,由一系列的指令(Directive)和参数组成,每条指令对应一个容器配置。Dockerfile文件中的命令可以大致分为几类:基础镜像指定、环境配置、应用部署、网络设置、容器执行指令等。 3. 构建Docker镜像 使用Dockerfile构建镜像的命令是`docker build`。在执行这个命令时,Docker客户端会读取Dockerfile,并按顺序执行其中的指令,最终生成一个Docker镜像。每次执行Dockerfile中的指令,Docker都会在基础镜像上创建一个新的镜像层。 4. 验证Docker镜像的有效性 在构建过程中,保证Docker镜像的有效性和安全性是非常重要的。这通常通过以下几种方式实现: - 使用基础镜像时,选择可信赖的源,并确保其是最新版本。 - 在Dockerfile中明确指定版本号,避免“latest”标签可能带来的不确定性。 - 利用Dockerfile中的`RUN`指令执行验证步骤,确保安装的软件包是经过授权的。 - 利用Docker的镜像扫描工具检查镜像中的已知漏洞。 5. Dockerfile的最佳实践 在编写Dockerfile时,有一些最佳实践可以遵循以确保最终的镜像既高效又安全: - 尽量使用官方提供的基础镜像,这些镜像一般都经过了优化和安全加固。 - 尽量减少镜像层数,可以在`RUN`指令中使用反斜杠`\`来实现多条命令的合并,减少镜像的大小。 - 使用`.dockerignore`文件来排除不需要复制到镜像中的文件,以减小镜像体积。 - 对于需要暴露的端口,使用`EXPOSE`指令声明,这虽然不保证端口会被实际监听,但作为文档信息很有用。 - 为构建好的镜像打上标签,方便管理和区分不同版本。 6. “效度集体行动”与Dockerfile的关联 考虑到“group-validity-action”这一概念,这可能是一个组织或团队内进行Docker实践时所遵循的一套流程和标准。这个流程中可能包含了代码审核、自动化测试、权限控制等多方面的工作。确保团队成员遵循统一标准来编写Dockerfile,并对其构建的镜像进行有效性的验证,对于提高开发流程的安全性和可靠性至关重要。 7. 从压缩包子文件的文件名称看知识应用 文件名称“group-validity-action-main”暗示了这是一个项目的主要部分,可能是Dockerfile文件或者与构建Docker镜像有关的核心文件。这进一步强化了Dockerfile在确保“效度集体行动”中的关键作用,以及它在实现Docker镜像标准化、自动化构建和部署过程中的中心地位。 结合上述分析,可以看出“group-validity-action”这一概念深入到了Dockerfile的编写、验证和管理等关键环节。通过遵循有效的策略和最佳实践,团队能够确保其构建的容器镜像满足效能和安全的要求,从而使得“效度集体行动”成为软件交付过程中的一个强而有力的实践方法。

相关推荐

filetype

**&--------------------------------------------------------------------* **---------------------------------------------------------------------* ** PROGRAM ID :ZMMR0006 * ** DESCRIPTION :采购计划协议批导 * ** APPLICATION NAME :MM * ** TRANSACTION :N/A * ** DEVELOPMENT CLAS@5B@ :ZMIND001 * ** AUTHOR : * ** REQ DATE : * **---------------------------------------------------------------------* **=====================================================================* ** MODIFICATIONS * **---------------------------------------------------------------------* ** DATE CHANGE BY DESCRIPTION TR NO. * **---------------------------------------------------------------------* ** 20241229 采购计划协议批导 DS4K900065 * **---------------------------------------------------------------------* REPORT zmmr0006. *&---------------------------------------------------------------------* *& 包含 ZMMR0006_TOP *&---------------------------------------------------------------------* TYPE-POOLS: slis,icon,truxs. TABLES: sscrfields. DATA: functxt TYPE smp_dyntxt. *导入模板 DATA: BEGIN OF i_data, zxh(4) TYPE n, bsart TYPE string, "计划协议类型 ebeln TYPE string, "协议编号 bukrs TYPE string, "公司代码 * bstyp TYPE string, "凭证类别 lifnr TYPE string, "供应商 waers TYPE string, "货币 ekorg TYPE string, "采购组织 ekgrp TYPE string, "采购组 kdatb TYPE string, "有效起始日期 kdate TYPE string, "有效截至日期 aedat TYPE string, "协议日期 unsez TYPE string, " 我方参考 * ebelp TYPE string, "行项目 pstyp TYPE string, "项目类别 ematn TYPE string, "物料编码 txz01 TYPE string, "短文本 ktmng TYPE string, "目标数量 meins TYPE string, "订单单位 netpr TYPE string, "净价 peinh TYPE string, "价格单位 bprme TYPE string, "订单价格单位(采购) * matkl TYPE string, "物料组 werks TYPE string, "工厂 lgort TYPE string, "库存地点 * bstae TYPE string, "确认控制默认0001 uebtk TYPE string, "无限制过量交货 etfz1 TYPE string, "确定域 etfz2 TYPE string, "平衡域 kzstu TYPE string, "捆绑在MRP * loekz TYPE string , "删除标识 light(4) TYPE c, "执行情况 message TYPE string, "消息 END OF i_data. DATA: t_data LIKE TABLE OF i_data, "ALV显示 w_data LIKE LINE OF t_data. DATA: BEGIN OF l_data2 OCCURS 0, zxh(4) TYPE n, bsart TYPE ekko-bsart, "计划协议类型 ebeln TYPE ekko-ebeln, "协议编号 bukrs TYPE ekko-bukrs, "公司代码 * bstyp TYPE ekko-bstyp, "凭证类别 lifnr TYPE ekko-lifnr, "供应商 waers TYPE ekko-waers, "货币 ekorg TYPE ekko-ekorg, "采购组织 ekgrp TYPE ekko-ekgrp, "采购组 kdatb TYPE ekko-kdatb, "有效起始日期 kdate TYPE ekko-kdate, "有效截至日期 aedat TYPE ekko-aedat, "协议日期 unsez TYPE ekko-unsez, " 我方参考 * ebelp TYPE ekpo-ebelp, "行项目 pstyp TYPE ekpo-pstyp, "项目类别 ematn TYPE ekpo-ematn, "物料编码 txz01 TYPE ekpo-txz01, "短文本 ktmng TYPE ekpo-ktmng, "目标数量 meins TYPE ekpo-meins, "订单单位 netpr TYPE ekpo-netpr, "净价 peinh TYPE ekpo-peinh, "价格单位 bprme TYPE ekpo-bprme, "订单价格单位(采购) * matkl TYPE ekpo-matkl, "物料组 werks TYPE ekpo-werks, "工厂 lgort TYPE ekpo-lgort, "库存地点 * bstae TYPE ekpo-bstae, "确认控制默认0001 uebtk TYPE ekpo-uebtk, "无限制过量交货 etfz1 TYPE ekpo-etfz1, "确定域 etfz2 TYPE ekpo-etfz2, "平衡域 kzstu TYPE ekpo-kzstu, "捆绑在MRP * loekz TYPE ekpo-loekz , "删除标识 light(4) TYPE c, "执行情况 message TYPE string, "消息 END OF l_data2. DATA:ls_data2 LIKE l_data2, t_data_dl LIKE TABLE OF l_data2. "ALV显示 DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, gd_tab_group TYPE slis_t_sp_group_alv, gd_layout TYPE slis_layout_alv, gd_repid LIKE sy-repid. DATA lv_c1(10) TYPE c. DATA lv_n1(2) TYPE n. DATA lv_ebelp TYPE ebelp. SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-901. "单选按钮 PARAMETERS: p_dwload RADIOBUTTON GROUP ch DEFAULT 'X' USER-COMMAND a, p_upload RADIOBUTTON GROUP ch. SELECTION-SCREEN: FUNCTION KEY 1. PARAMETERS: p_file LIKE rlgrap-filename MODIF ID lo. "文件路径 SELECTION-SCREEN END OF BLOCK blk1. INITIALIZATION. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM select_path. AT SELECTION-SCREEN OUTPUT. IF p_dwload = 'X'. LOOP AT SCREEN. IF screen-group1 = 'LO'. screen-active = '0'. ENDIF . IF screen-group1 = 'X'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDLOOP. ELSEIF p_upload = 'X'. LOOP AT SCREEN. IF screen-group1 = 'LO'. screen-active = '1'. ENDIF. IF screen-group1 = 'X'. screen-active = '1'. ENDIF. MODIFY SCREEN. ENDLOOP. ENDIF. START-OF-SELECTION. IF p_dwload = 'X'. * 下载模板 PERFORM temp_excel_get USING sy-repid. ELSE. IF NOT p_file IS INITIAL. CLEAR: t_data[]. * 数据导入 PERFORM upload_material_data. PERFORM get_data_pd. * FIELDCAT PERFORM build_fieldcatalog. * LAYOUT PERFORM build_layout. * ALV展示 PERFORM display_alv_report. ELSE. MESSAGE '请输入文件路径!' TYPE '@5B@' DISPLAY LIKE '@5C@'. LEAVE LIST-PROCESSING. ENDIF. ENDIF. *&---------------------------------------------------------------------* *& 包含 ZMMR0003_FORM *&---------------------------------------------------------------------* FORM temp_excel_get USING p_objid TYPE wwwdata-objid. "-----检查系统是否纯在模板 DATA: lv_objname TYPE wwwdata-objid. DATA: ls_objdata TYPE wwwdatatab. DATA:lv_ret TYPE abap_bool, lv_answer. "-----弹出选择存放的路径. DATA: lv_window_title TYPE string VALUE '文件下载', lv_default_extension TYPE string VALUE 'XLS', "缺省文件类型 lv_default_file_name TYPE string, lv_file_filter TYPE string VALUE 'EXCEL 文件 (*.XLS)|*.XLS|EXCEL 文件 (*.XLSX)|*.XLSX|所有文件 (*.*)|*.*|', lv_filename TYPE string, lv_path TYPE string, lv_fullpath TYPE string, lv_user_action TYPE i. DATA: lv_key TYPE wwwdatatab, lv_destination TYPE rlgrap-filename, lv_rc TYPE i, lv_temp TYPE c. "****---------------------------------------------- CLEAR:ls_objdata. *从SAP服务器中下载EXCEL模板 SELECT SINGLE relid objid text FROM wwwdata "存对象模板的表 INTO CORRESPONDING FIELDS OF ls_objdata WHERE srtf2 = 0 AND relid = 'MI' "有三种类型 HT MI IT AND objid = p_objid. "MONTLYSTOCK IF sy-subrc <> 0. MESSAGE 'EXCEL 模板不存在,请用TCODE:SMW0进行加载' TYPE '@5C@'. RETURN. ENDIF. IF ls_objdata-objid = space . MESSAGE 'EXCEL 模板不存在,请用TCODE:SMW0进行加载' TYPE '@5C@'. RETURN. ENDIF. lv_default_file_name = ls_objdata-text && sy-datum && '.XLS'."模板名称=系统中模板描述 "---检查模板是否存在 CALL METHOD cl_gui_frontend_services=>file_exist EXPORTING file = lv_default_file_name RECEIVING result = lv_ret EXCEPTIONS cntl_error = 1 error_no_gui = 2 wrong_parameter = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = lv_window_title default_extension = lv_default_extension default_file_name = lv_default_file_name file_filter = lv_file_filter CHANGING filename = lv_filename "获得用户输入文件名 path = lv_path "获得用户所选路径 fullpath = lv_fullpath "路径加文件名 user_action = lv_user_action EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 invalid_default_file_name = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF lv_user_action = ( cl_gui_frontend_services=>action_ok ). * 下载模板 SELECT SINGLE * INTO CORRESPONDING FIELDS OF lv_key FROM wwwdata WHERE objid = p_objid . lv_destination = lv_fullpath. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = lv_key destination = lv_destination IMPORTING rc = lv_rc CHANGING temp = lv_temp. IF lv_rc <> 0. MESSAGE '下载EXCEL模板出错' TYPE '@5C@'. STOP. ENDIF. ELSE. MESSAGE '已取消选择下载文件!' TYPE '@5B@'. ENDIF. ENDIF. ENDFORM. " TEMP_EXCEL_GET FORM upload_material_data . DATA: lt_intern TYPE TABLE OF zalsmex_tabline, lw_intern TYPE zalsmex_tabline. DATA : ld_index TYPE i. FIELD-SYMBOLS: <fs>. *EXCEL导入 CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_file i_begin_col = 1 i_begin_row = 4 i_end_col = 26 i_end_row = 65535 TABLES intern = lt_intern EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE 'EXCEL数据导入失败!' TYPE '@5C@'. ENDIF. * 数据保存到内表 LOOP AT lt_intern INTO lw_intern. MOVE lw_intern-col TO ld_index. ASSIGN COMPONENT ld_index OF STRUCTURE w_data TO <fs>. MOVE lw_intern-value TO <fs>. AT END OF row. APPEND w_data TO t_data. CLEAR w_data. ENDAT. ENDLOOP. LOOP AT t_data ASSIGNING FIELD-SYMBOL(<fs_t_data>). MOVE-CORRESPONDING <fs_t_data> TO ls_data2. APPEND ls_data2 TO l_data2. ENDLOOP. t_data_dl[] = l_data2[]. SORT t_data_dl BY zxh. DELETE ADJACENT DUPLICATES FROM t_data_dl COMPARING zxh. ENDFORM. FORM select_path . DATA v_matnr LIKE rlgrap-filename. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING mask = ',*.* ,*.*.' mode = 'O' title = '请选择要上传的信息文件' IMPORTING filename = v_matnr EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. p_file = v_matnr. ENDFORM. " SELECT_PATH FORM build_fieldcatalog. CLEAR: fieldcatalog. DEFINE build_fieldcat. fieldcatalog-fieldname = &1. fieldcatalog-seltext_m = &2. fieldcatalog-outputlen = &3. IF fieldcatalog-fieldname = 'LIGHT'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'MESSAGE'. fieldcatalog-emphasize = 'X'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'EBELN'. fieldcatalog-key = 'X'. ENDIF. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. END-OF-DEFINITION. build_fieldcat 'ZXH' '序号' 10. build_fieldcat 'BSART' '计划协议类型' 10. build_fieldcat 'EBELN' '协议编号' 4. build_fieldcat 'BUKRS' '公司代码' 1. * build_fieldcat 'BSTYP' '凭证类别' 10. build_fieldcat 'LIFNR' '供应商' 4. build_fieldcat 'WAERS' '货币' 5. build_fieldcat 'EKORG' '采购组织' 4. build_fieldcat 'EKGRP' '采购组' 8. build_fieldcat 'KDATB' '有效起始日期' 8. build_fieldcat 'KDATE' '有效截至日期' 8. build_fieldcat 'AEDAT' '协议日期' 8. build_fieldcat 'UNSEZ' '我方参考' 8. * build_fieldcat 'EBELP' '行项目' 3. build_fieldcat 'PSTYP' '项目类别' 1. build_fieldcat 'EMATN' '物料编码' 40. build_fieldcat 'TXZ01' '短文本' 40. build_fieldcat 'KTMNG' '目标数量' 28. build_fieldcat 'MEINS' '订单单位' 3. build_fieldcat 'NETPR' '净价' 9. build_fieldcat 'PEINH' '价格单位' 4. build_fieldcat 'BPRME' '订单价格单位(采购)' 3. build_fieldcat 'WERKS' '工厂' 4. build_fieldcat 'LGORT' '库存地点' 4. * build_fieldcat 'BSTAE' '确认控制' 4. build_fieldcat 'UEBTK' '无限制过量交货' 1. build_fieldcat 'ETFZ1' '确定域' 3. build_fieldcat 'ETFZ2' '平衡域' 3. build_fieldcat 'KZSTU' '捆绑在MRP' 1. * build_fieldcat 'KZSTU' '捆绑在MRP' 1. build_fieldcat 'LIGHT' '执行情况' 1. build_fieldcat 'MESSAGE' '消息' 1. ENDFORM. "BUILD_FIELDCATALOG *&---------------------------------------------------------------------* *& FORM BUILD_LAYOUT *&---------------------------------------------------------------------* * LAYOUT *----------------------------------------------------------------------* FORM build_layout. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. gd_layout-header_text = '库存期初批导'. ENDFORM. "BUILD_LAYOUT *&---------------------------------------------------------------------* *& FORM DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * ALV 展示 *----------------------------------------------------------------------* FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid i_callback_pf_status_set = 'ALV_STATUS_SET' i_callback_user_command = 'FRM_USER_COMMAND' is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'A' TABLES t_outtab = l_data2[] EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. "DISPLAY_ALV_REPORT FORM alv_status_set USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'ZALV_STATUS' . ENDFORM. FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. "实时更新内表数据 DATA:ref_grid TYPE REF TO cl_gui_alv_grid. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref_grid. " 获取全局变量 CALL METHOD ref_grid->check_changed_data. " 获取响应事件 rs_selfield-refresh = 'X'. CASE r_ucomm. WHEN 'ZXZ'. PERFORM set_alv_data. ENDCASE. "刷新ALV CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref_grid. " 获取全局变量 CALL METHOD ref_grid->check_changed_data. " 获取响应事件 rs_selfield-refresh = 'X'. ENDFORM. FORM set_alv_data. TYPES: BEGIN OF ty_header, line(50) TYPE c, END OF ty_header. DATA: lv_filename TYPE string, lv_path TYPE string, lv_fullpath TYPE string, lv_destination LIKE rlgrap-filename, ls_objdata LIKE wwwdatatab, lv_objid TYPE wwwdatatab-objid, lv_fname TYPE string. DATA: lt_header TYPE STANDARD TABLE OF ty_header, " 内表 ls_header LIKE LINE OF lt_header. " 结构体 LOOP AT fieldcatalog ASSIGNING FIELD-SYMBOL(<fs_cat>). ls_header-line = <fs_cat>-seltext_m. APPEND ls_header TO lt_header. ENDLOOP. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING default_file_name = lv_fname window_title = '另存为:' default_extension = 'xls' "默认保存的类型 file_filter = '.xls' "选择要另存的文件类型 CHANGING filename = lv_filename path = lv_path fullpath = lv_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. CALL FUNCTION 'GUI_DOWNLOAD' " 使用GUI_DOWNLOAD函数将内表数据导入到Excel文件中 EXPORTING filename = lv_filename filetype = 'DAT' TABLES data_tab = t_data fieldnames = lt_header EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. ENDFORM. FORM get_file_name USING p_extension p_file_filter CHANGING p_fullpath. DATA: l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string, l_titile TYPE string, l_init_dir TYPE string. CLEAR p_fullpath. l_titile = '采购计划协议批导'. l_init_dir = TEXT-t03. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = l_titile default_extension = '.XLSX' initial_directory = l_init_dir prompt_on_overwrite = 'X' file_filter = p_file_filter CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. p_fullpath = l_fullpath. ENDFORM. "GET_FILE_NAME FORM get_data_pd . DATA: ls_header TYPE bapimeoutheader, ls_headerx TYPE bapimeoutheaderx, ls_item TYPE bapimeoutitem, lt_item TYPE bapimeout_t_item, ls_itemx TYPE bapimeoutitemx, lt_itemx TYPE bapimeout_t_itemx, ls_item_con TYPE bapimeoutcondition, lt_item_con TYPE TABLE OF bapimeoutcondition, ls_item_conx TYPE bapimeoutconditionx, lt_item_conx TYPE TABLE OF bapimeoutconditionx, lt_validity TYPE TABLE OF bapimeoutvalidity, "条件的有效期间 ls_validity TYPE bapimeoutvalidity, lt_validityx TYPE TABLE OF bapimeoutvalidityx, "更改参数 - 条件的有效期间 ls_validityx TYPE bapimeoutvalidityx, ls_schedule TYPE bapimeoutschedule, lt_schedule TYPE bapimeout_t_schedule, ls_schedulex TYPE bapimeoutschedulex, lt_schedulex TYPE bapimeout_t_schedulex, l_ebeln TYPE bapimeoutheader-number, lt_return TYPE bapiret2_t, ls_return TYPE bapiret2. LOOP AT t_data_dl ASSIGNING FIELD-SYMBOL(<fs_dl>). ls_header-vendor = |{ <fs_dl>-lifnr ALPHA = IN } |."供应商 ls_header-number = <fs_dl>-ebeln. "采购凭证编号 ls_header-doc_type = <fs_dl>-bsart. "计划协议类型 ls_header-comp_code = <fs_dl>-bukrs. "公司代码 ls_header-purch_org = <fs_dl>-ekorg. "采购组织 ls_header-pur_group = <fs_dl>-ekgrp. "采购组 ls_header-vper_start = <fs_dl>-kdatb. "有效起始日期 ls_header-vper_end = <fs_dl>-kdate. "有效截至日期 ls_header-doc_date = <fs_dl>-aedat. "采购凭证日期 ls_header-our_ref = <fs_dl>-unsez. "我方参考 IF <fs_dl>-waers IS INITIAL. SELECT SINGLE lifnr,ekorg,waers FROM lfm1 INTO @DATA(ls_lfmi) WHERE lifnr = @<fs_dl>-lifnr. IF sy-subrc = 0. ls_header-currency = ls_lfmi-waers. "货币 ENDIF. ELSE. ls_header-currency = <fs_dl>-waers. "货币 ENDIF. ls_headerx-vendor = 'X'. "供应商 ls_headerx-doc_type = <fs_dl>-bsart. "公司代码 ls_headerx-number = 'X'. "采购凭证编号 ls_headerx-comp_code = 'X'. "公司代码 * ls_headerx-doc_type = 'X'. "采购凭证类型 ls_headerx-purch_org = 'X'. "采购组织 ls_headerx-pur_group = 'X'. "采购组 ls_headerx-vper_start = 'X'. "有效起始日期 ls_headerx-vper_end = 'X'. "有效截至日期 ls_headerx-doc_date = 'X'. "采购凭证日期 ls_headerx-our_ref = 'X'. "我方参考 ls_headerx-currency = 'X'. "货币 CLEAR: lt_item[],lt_itemx[],lt_schedule[],lt_schedulex[],ls_item_con,lt_item_con[]. CLEAR:lt_validityx,lt_validity. CLEAR: ls_item,ls_itemx. CLEAR: lv_c1, lv_n1,lv_ebelp. LOOP AT l_data2 ASSIGNING FIELD-SYMBOL(<fs_data2>) WHERE zxh = <fs_dl>-zxh. SELECT SINGLE matnr ,spras,maktx FROM makt INTO @DATA(ls_makt) WHERE matnr = @<fs_data2>-ematn AND spras = '1'. lv_ebelp = lv_ebelp + 10. "项目类别 ls_item-item_no = lv_ebelp. * IF sy-subrc = 0. lv_c1 = lv_c1 + 1. lv_n1 = lv_n1 + 1. CLEAR:ls_item_con,ls_item_conx. ls_item_con-item_no = lv_ebelp. ls_item_con-serial_id = lv_c1. ls_item_con-cond_count = lv_n1."'01'. ls_item_con-cond_type = 'PB00'. ls_item_con-cond_value = <fs_data2>-netpr."净价 ls_item_con-currency = ls_lfmi-waers."'RMB'."货币码 ls_item_con-cond_unit = <fs_data2>-meins."'EA'. ls_item_con-cond_p_unt = 1. ls_item_con-calctypcon = 'C'. APPEND ls_item_con TO lt_item_con. ls_item_conx-item_no = lv_ebelp. ls_item_conx-serial_id = lv_c1. ls_item_conx-cond_count = lv_n1."'01'. ls_item_conx-item_nox = 'X'. ls_item_conx-serial_idx = 'X'. ls_item_conx-cond_countx = 'X'. ls_item_conx-cond_type = 'X'. ls_item_conx-cond_value = 'X'. ls_item_conx-currency = 'X'. ls_item_conx-cond_unit = 'X'. ls_item_conx-cond_p_unt = 'X'. ls_item_conx-calctypcon = 'X'. APPEND ls_item_conx TO lt_item_conx. CLEAR:ls_validity,ls_validityx. ls_validity-item_no = lv_ebelp. ls_validity-serial_id = lv_c1. ls_validity-valid_from = <fs_dl>-kdatb. ls_validity-valid_to = <fs_dl>-kdate. APPEND ls_validity TO lt_validity. ls_validityx-item_no = lv_ebelp. ls_validityx-serial_id = lv_c1. ls_validityx-valid_from = 'X'. ls_validityx-valid_to = 'X'. APPEND ls_validityx TO lt_validityx. * ENDIF. ls_item-ematerial_long = <fs_data2>-ematn. "物料编号 ls_item-plant = <fs_data2>-werks. "工厂 ls_item-stge_loc = <fs_data2>-lgort. "存储地点 ls_item-net_price = <fs_data2>-netpr. "净价 ls_item-po_unit = <fs_data2>-meins. "采购订单计量单位 ls_item-short_text = ls_makt-maktx. "短文本 ls_item-target_qty = <fs_data2>-ktmng. "目标数量 ls_item-price_unit = <fs_data2>-peinh. "价格单位 ls_item-orderpr_un = <fs_data2>-bprme. "订单价格单位(采购) * ls_item-matl_group = <fs_data2>-matkl. "物料组 ls_item-item_cat = <fs_data2>-pstyp. "物料组 ls_item-conf_ctrl = '0001'. "确认控制 ls_item-unlimited_dlv = <fs_data2>-uebtk. "无限制过量交货 ls_item-firm_zone = <fs_data2>-etfz1. "确定的域 ls_item-trade_off = <fs_data2>-etfz2. "平衡区域 ls_item-binding_mrp = <fs_data2>-kzstu. "捆绑在MRP. * ls_item-delete_ind = <fs_input>-loekz. "删除标识. ls_item-info_upd = 'C'. "删除标识. APPEND ls_item TO lt_item. ls_itemx-item_no = lv_ebelp. "项目类别 ls_itemx-item_nox = 'X'. " ls_itemx-ematerial_long = 'X'. "物料编号 ls_itemx-plant = 'X'. "工厂 ls_itemx-stge_loc = 'X'. "存储地点 ls_itemx-net_price = 'X'. "净价 ls_itemx-po_unit = 'X'. "采购订单计量单位 ls_itemx-short_text = 'X'. "短文本 ls_itemx-target_qty = 'X'. "目标数量 ls_itemx-price_unit = 'X'. "价格单位 ls_itemx-orderpr_un = 'X'. "订单价格单位(采购) * ls_itemx-matl_group = 'X'. "物料组 ls_itemx-item_cat = 'X'. "采购凭证中的项目类别 ls_itemx-conf_ctrl = 'X'. "确认控制 ls_itemx-unlimited_dlv = 'X'. "无限制过量交货 ls_itemx-firm_zone = 'X'. "确定的域 ls_itemx-trade_off = 'X'. "平衡区域 ls_itemx-binding_mrp = 'X'. "捆绑在MRP. * ls_itemx-delete_ind = 'X'. "删除标识 ls_itemx-info_upd = 'X'. "删除标识 APPEND ls_itemx TO lt_itemx. ENDLOOP. IF <fs_dl>-ebeln IS INITIAL. IF l_data2-light NE '@5C@'. CALL FUNCTION 'BAPI_SAG_CREATE' EXPORTING header = ls_header headerx = ls_headerx IMPORTING purchasingdocument = l_ebeln TABLES return = lt_return item = lt_item itemx = lt_itemx item_cond_validity = lt_validity item_cond_validityx = lt_validityx item_condition = lt_item_con item_conditionx = lt_item_conx. ELSE. <fs_dl>-light = l_data2-light. <fs_dl>-message = l_data2-message. <fs_dl>-unsez = l_ebeln. ENDIF. ELSE. CALL FUNCTION 'BAPI_SAG_CHANGE' EXPORTING purchasingdocument = <fs_dl>-ebeln header = ls_header headerx = ls_headerx TABLES return = lt_return item = lt_item itemx = lt_itemx item_cond_validity = lt_validity item_cond_validityx = lt_validityx item_condition = lt_item_con item_conditionx = lt_item_conx. ENDIF. LOOP AT lt_return INTO ls_return WHERE type CA 'EA'. IF <fs_dl>-message IS INITIAL. <fs_dl>-message = ls_return-message. ELSE. <fs_dl>-message = |{ l_data2-message },{ ls_return-message }|. ENDIF. ENDLOOP. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. <fs_dl>-light = '@5C@'. ELSE. LOOP AT lt_return INTO ls_return . IF ls_return-type = 'S'. <fs_dl>-message = ls_return-message. ENDIF. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. <fs_dl>-light = '@5B@'. <fs_dl>-unsez = l_ebeln. ENDIF. CLEAR: ls_header,ls_headerx,l_ebeln,lt_return[],lt_item[],lt_itemx[],lt_validity[],lt_validityx[],lt_item_con[],lt_item_conx. ENDLOOP. SORT t_data_dl BY zxh. LOOP AT l_data2 ASSIGNING FIELD-SYMBOL(<fs_data>). READ TABLE t_data_dl INTO DATA(ls_data_dl) WITH KEY zxh = <fs_data>-zxh BINARY SEARCH. IF sy-subrc = 0. <fs_data>-unsez = ls_data_dl-unsez. <fs_data>-light = ls_data_dl-light. <fs_data>-message = ls_data_dl-message. ENDIF. ENDLOOP. ENDFORM.此代码中价格单位维护1000 但是me33l前台显示1 为什么 怎么解决

filetype

[FATAL] [INS-10105] The given response file /usr/local/products/oracle19c/install/response/db_install.rsp is not valid. CAUSE: Syntactically incorrect response file. Either unexpected variables are specified or expected variables are not specified in the response file. ACTION: Refer the latest product specific response file template SUMMARY: - cvc-complex-type.2.4.a: Invalid content was found starting with element 'oracle.install.db.OSKMDBA'. One of '{oracle.install.responseFileVersion, oracle.install.option, oracle.install.db.ConfigureAsContainerDB, SELECTED_LANGUAGES, ORACLE_HOSTNAME, INVENTORY_LOCATION, UNIX_GROUP_NAME, oracle.install.db.InstallEdition, ORACLE_HOME, OSDBA_GROUP, OSOPER_GROUP, OSBACKUPDBA_GROUP, OSDGDBA_GROUP, OSKMDBA_GROUP, OSRACDBA_GROUP, CLUSTER_NODES, oracle.install.db.rac.configurationType, oracle.install.db.rac.serverpoolName, oracle.install.db.rac.serverpoolCardinality, oracle.install.db.CLUSTER_NODES, oracle.install.db.isRACOneInstall, oracle.install.db.racOneServiceName, oracle.install.db.DBA_GROUP, oracle.install.db.OPER_GROUP, oracle.install.db.BACKUPDBA_GROUP, oracle.install.db.DGDBA_GROUP, oracle.install.db.KMDBA_GROUP, oracle.install.db.OSDBA_GROUP, oracle.install.db.OSOPER_GROUP, oracle.install.db.OSDGDBA_GROUP, oracle.install.db.OSKMDBA_GROUP, oracle.install.db.OSRACDBA_GROUP, oracle.install.IsBuiltInAccount, oracle.install.IsVirtualAccount, oracle.install.OracleHomeUserName, oracle.install.OracleHomeUserPassword, oracle.install.db.rootconfig.executeRootScript, oracle.install.db.rootconfig.configMethod, oracle.install.db.rootconfig.sudoPath, oracle.install.db.config.starterdb.type, oracle.install.db.config.starterdb.SID, oracle.install.db.config.starterdb.globalDBName, oracle.install.db.config.PDBName, oracle.install.db.config.pdbName, oracle.install.db.config.starterdb.characterSet, oracle.install.db.config.starterdb.memoryLimit, oracle.install.db.config.starterdb.storageType, oracle.install.db.config.starterdb.fileSystemStorage.dataLocation, oracle.install.db.config.starterdb.password.ALL, oracle.install.db.config.starterdb.password.SYS, oracle.install.db.config.starterdb.password.DBSNMP, oracle.install.db.config.starterdb.password.SYSTEM, oracle.install.db.config.starterdb.password.PDBADMIN, oracle.install.db.config.starterdb.managementOption, oracle.install.db.config.starterdb.omsHost, oracle.install.db.config.starterdb.omsPort, oracle.install.db.config.starterdb.emAdminUser, oracle.install.db.config.starterdb.emAdminPassword, oracle.install.db.config.starterdb.useWalletForPasswords, oracle.install.db.config.starterdb.walletLocation, oracle.install.db.config.starterdb.walletPassword, SECURITY_UPDATES_VIA_MYORACLESUPPORT, DECLINE_SECURITY_UPDATES, MYORACLESUPPORT_USERNAME, MYORACLESUPPORT_PASSWORD, PROXY_PORT, PROXY_HOST, PROXY_USER, PROXY_PWD, PROXY_REALM, COLLECTOR_SUPPORTHUB_URL, AUTOUPDATES_MYORACLESUPPORT_USERNAME, AUTOUPDATES_MYORACLESUPPORT_PASSWORD, oracle.installer.autoupdates.option, oracle.installer.autoupdates.downloadUpdatesLoc}' is expected.

filetype

修改:检测代码里有没有方法 ‘_handle_run_analysis’ ,方法 ‘_handle_get_results’ ,没有的情况,根据代码的结构进行补充。(当模块收到子类界面的token里发送的“运行‘指令后就开始运行该模块(按照原来的方法进行)。。待分析数据完成,生成5注号码后回传数据到子类界面的token的相同标签的条目后面。)代码#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import uuid import queue import logging import random import numpy as np import pandas as pd import chardet from typing import Dict, List, Tuple, Optional import math import threading from collections import Counter, defaultdict from threading import Lock import time # Global event center instance event_center = None # Utility functions def map_positions_to_coords(position_matrix: Dict[str, str]) -> Dict[str, Tuple[int, int]]: """Map position strings to coordinate tuples""" coords = {} for num, pos in position_matrix.items(): row = int(pos[1:pos.find('c')]) col = int(pos[pos.find('c') + 1:]) coords[num] = (row, col) return coords def validate_numbers(num_list: List[int], min_val: int, max_val: int) -> bool: """Validate if numbers are within specified range""" return all(min_val <= n <= max_val for n in num_list) # Event system class Event: def __init__(self, event_id: str, event_type: str, source: str, target: str = None, data: dict = None, token: str = None): self.event_id = event_id self.type = event_type self.source = source self.target = target self.data = data or {} self.token = token class EventCenter: _instance = None _lock = Lock() def __new__(cls): if cls._instance is None: with cls._lock: if cls._instance is None: cls._instance = super().__new__(cls) cls._instance._subscribers = defaultdict(list) return cls._instance def subscribe(self, event_type: str, token: str, callback): with self._lock: self._subscribers[(event_type, token)].append(callback) def publish(self, event: Event): with self._lock: callbacks = self._subscribers.get((event.type, event.token), []) for callback in callbacks: callback(event) # Global configuration class GlobalConfig: MODULE1_ID = "input_analysis" MODULE2_ID = "combination_analysis" MODULE3_ID = "follow_analysis" MODULE4_ID = "trend_analysis" MODULE5_ID = "number_generation" class EventType: COMMAND = "command" DATA_RESULT = "data_result" ERROR = "error" # Position matrix configuration FRONT_POSITION_MATRIX = { '01': 'r4c3', '02': 'r3c3', '03': 'r3c4', '04': '极4c4', '05': 'r5c4', '06': 'r5c3', '07': 'r5c2', '08': 'r4c2', '09': 'r3c2', '10': 'r2c2', '11': 'r2c3', '12': 'r2c4', '13': 'r3c5', '14': 'r3c5', '15': 'r4c5', '16': 'r5c5', '17': 'r6c5', '18': 'r6c4', '19': 'r6c3', '20': 'r6c2', '21': 'r6c1', '22': 'r5c1', '23': 'r4c1', '24': 'r3c1', '25': 'r2c1', '26': 'r1c1', '27': 'r1c2', '28': 'r1c3', '29': 'r1c4', '30': 'r1c5', '31': 'r1c6', '32': 'r2c6', '33': 'r3c6', '34': 'r4c6', '35': 'r5c6' } BACK_POSITION_RANGES = { 'rows': ['r2', 'r3', 'r4', 'r5'], 'cols': ['c2', 'c3', 'c4'] } # Configure logging logging.basicConfig( level=logging.WARNING, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # Global event queues channel_b = queue.Queue() channel_c = queue.Queue() # Initialize global event center event_center = EventCenter() class CorrelationMatrixAnalyzer: def __init__(self, position_matrix: Dict[str, str]): self.position_matrix = position_matrix self.correlation_matrix: Dict[str, Dict[str, float]] = {} self.position_coords = map_positions_to_coords(self.position_matrix) def build_correlation_matrix(self, historical_data: pd.DataFrame): num_keys = list(self.position_coords.keys()) self.correlation_matrix = {n: {m: 0.0 for m in num_keys} for n in num_keys} # Co-occurrence frequency statistics for _, row in historical_data.iterrows(): nums = [f"{n:02d}" for n in row['前区号码']] for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] in self.correlation_matrix and nums[j] in self.correlation_matrix: self.correlation_matrix[nums[i]][nums[j]] += 1 self.correlation_matrix[nums[j]][nums[i]] += 1 # Position correlation enhancement for n1 in num_keys: for n2 in num_keys: if n1 != n2: coord1 = self.position_coords[n1] coord2 = self.position_coords[n2] distance = math.sqrt((coord1[0] - coord2[0]) ** 2 + (coord1[1] - coord2[1]) ** 2) self.correlation_matrix[n1][n2] *= (1 / (1 + distance)) # Normalization max_val = max(max(row.values()) for row in self.correlation_matrix.values()) if max_val > 0: for n1 in num_keys: for n2 in num_keys: self.correlation_matrix[n1][n2] /= max_val def get_correlation(self, num1: int, num2: int) -> float: """Get correlation between two numbers""" n1 = f"{num1:02d}" n2 = f"{num2:02d}" return self.correlation_matrix.get(n1, {}).get(n2, 0.0) class LotteryDataAnalyzer: def __init__(self, historical_data: pd.DataFrame): self.df = historical_data self.prime_numbers = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31} self.front_ranges = [(1, 5), (6, 10), (11, 15), (16, 20), (21, 25), (26, 30), (31, 35)] def analyze_front(self) -> Dict: """Analyze front area numbers""" data = self.df.tail(100) return { 'sum_range': self._calc_sum_range(data), 'prime_ratio': self._calc_prime_ratio(data), 'odd_ratio': self._calc_odd_ratio(data), 'exclude_range': self._find_exclude_range(data), 'consecutive': self._has_consecutive(data), 'hot_cold': self._analyze_hot_cold(data, '前区号码') } def analyze_rear(self) -> Dict: """Analyze rear area numbers""" data = self.df.tail(100) return { 'span': self._calc_span(data), 'hot_cold': self._analyze_hot_cold(data, '后区号码') } @staticmethod def _calc_sum_range(data: pd.DataFrame) -> List[int]: sums = data['前区号码'].apply(sum) avg, std = sums.mean(), sums.std() return [ max(45, int(avg - std)), int(avg - std / 2), int(avg), int(avg + std / 2), min(135, int(avg + std)) ] def _calc_prime_ratio(self, data: pd.DataFrame) -> List[int]: prime_counts = data['前区号码'].apply(lambda x: len(set(x) & self.prime_numbers)) ratio = prime_counts.mean() / 5 return [math.floor(ratio * 5), math.ceil(ratio * 5)] @staticmethod def _calc_odd_ratio(data: pd.DataFrame) -> List[int]: odd_counts = data['前区号码'].apply(lambda x: sum(1 for n in x if n % 2 != 0)) ratio = odd_counts.mean() / 5 return [math.floor(ratio * 5), math.ceil(ratio * 5)] def _find_exclude_range(self, data: pd.DataFrame) -> Tuple[int, int]: range_counts = [0] * len(self.front_ranges) for nums in data['前区号码']: for idx, rng in enumerate(self.front_ranges): if any(rng[0] <= n <= rng[1] for n in nums): range_counts[idx] += 1 return self.front_ranges[range_counts.index(min(range_counts))] @staticmethod def _has_consecutive(data: pd.DataFrame) -> bool: consecutive_counts = data['前区号码'].apply( lambda x: sum(1 for i in range(4) if x[i + 1] - x[i] == 1)) return consecutive_counts.mean() > 0.5 @staticmethod def _analyze_hot_cold(data: pd.DataFrame, area: str) -> Dict[str, List[int]]: num_list = np.concatenate(data[area].values) counts = Counter(num_list) avg = sum(counts.values()) / len(counts) hot = [n for n, c in counts.most_common(8) if c > avg * 1.2] cold = [n for n, c in counts.items() if c < avg * 0.8] if len(cold) < 3: cold = [n for n, c in counts.most_common()[-3:]] return {'hot': hot[:8], 'cold': cold[:3]} @staticmethod def _calc_span(data: pd.DataFrame) -> int: spans = data['后区号码'].apply(lambda x: max(x) - min(x)) return spans.mode()[0] class NumberGenerator: def __init__(self, module_config: Optional[dict] = None): config = module_config or {} self.module_id = config.get('module_id', GlobalConfig.MODULE5_ID) self.labels = config.get('labels', ['number_generation']) self.lock = Lock() self.position_matrix = FRONT_POSITION_MATRIX self.position_coords = map_positions_to_coords(self.position_matrix) self.correlation_matrix: Optional[Dict[str, Dict[str, float]]] = None self._register_event_handlers() def _register_event_handlers(self): event_center.subscribe( event_type=GlobalConfig.EventType.COMMAND, token=self.module_id, callback=self._handle_generation_command ) def build_correlation_matrix(self, historical_data: pd.DataFrame): num_keys = list(self.position_coords.keys()) self.correlation_matrix = {n: {m: 0.0 for m in num_keys} for n in num_keys} for _, row in historical_data.iterrows(): nums = [f"{n:02d}" for n in row['前区号码']] for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] in self.correlation_matrix and nums[j] in self.correlation_matrix: self.correlation_matrix[nums[i]][nums[j]] += 1 self.correlation_matrix[nums[j]][nums[i]] += 1 for n1 in num_keys: for n2 in num_keys: if n1 != n2: coord1 = self.position_coords[n1] coord2 = self.position_coords[n2] distance = math.sqrt((coord1[0] - coord2[0]) ** 2 + (coord1[1] - coord2[1]) ** 2) self.correlation_matrix[n1][n2] *= (1 / (1 + distance)) max_val = max(max(row.values()) for row in self.correlation_matrix.values()) if max_val > 0: for n1 in num_keys: for n2 in num_keys: self.correlation_matrix[n1][n2] /= max_val def get_correlation(self, num1: int, num2: int) -> float: n1 = f"{num1:02d}" n2 = f"{num2:02d}" return self.correlation_matrix.get(n1, {}).get(n2, 0.0) if self.correlation_matrix else 0.0 def _handle_generation_command(self, event: Event): if not self._validate_command(event): return try: with self.lock: generated_numbers = self.generate_numbers(5) self._send_results( target_token=event.token, numbers=generated_numbers, labels=self.labels + event.data.get('labels', []) ) except Exception as e: logging.error(f"Generation failed: {str(e)}") self._send_error(event.token, str(e)) def _validate_command(self, event: Event) -> bool: return (event.token == self.module_id and event.type == GlobalConfig.EventType.COMMAND and event.data.get('action') == 'generate') @staticmethod def generate_numbers(n: int = 5) -> List[Tuple[List[int], List[int]]]: """Generate random lottery numbers""" results = [] for _ in range(n): front_nums = sorted(random.sample(range(1, 36), 5)) rear_nums = sorted(random.sample(range(1, 13), 2)) results.append((front_nums, rear_nums)) return results def _send_results(self, target_token: str, numbers: List[Tuple[List[int], List[int]]], labels: List[str]): result_event = Event( event_id=str(uuid.uuid4()), event_type=GlobalConfig.EventType.DATA_RESULT, source=self.module_id, target=GlobalConfig.MODULE5_ID, data={'numbers': numbers, 'labels': labels}, token=target_token ) event_center.publish(result_event) def _send_error(self, target_token: str, error_msg: str): error_event = Event( event_id=str(uuid.uuid4()), event_type=GlobalConfig.EventType.ERROR, source=self.module_id, target=GlobalConfig.MODULE5_ID, data={'error': error_msg}, token=target_token ) event_center.publish(error_event) class NumberGeneratorCompat: """Compatibility layer for number generation""" _instance = None _lock = threading.Lock() def __new__(cls, *args, **kwargs): if cls._instance is None: with cls._lock: if cls._instance is None: cls._instance = super().__new__(cls) cls._instance._module_config = kwargs.get('module_config', {}) return cls._instance def __init__(self, module_config: Optional[Dict] = None): if hasattr(self, '_generator'): return config = module_config or { 'module_id': GlobalConfig.MODULE5_ID, 'labels': ['compatibility_layer'] } self._generator = NumberGenerator(config) def get_generator(self) -> NumberGenerator: return self._generator @staticmethod def generate(_data: Dict) -> List[Tuple[List[int], List[int]]]: """Generate random numbers (ignore unused parameter)""" instance = NumberGeneratorCompat() return instance._generator.generate_numbers(5) class AdvancedLotteryGenerator: def __init__(self, data_file: str): self.data_file = data_file self.df = self._load_data() self.position_model = FRONT_POSITION_MATRIX compat = NumberGeneratorCompat() self.correlation_analyzer = compat.get_generator() self.correlation_analyzer.build_correlation_matrix(self.df) self.position_validity_cache = self._build_position_cache() self.analyzer = LotteryDataAnalyzer(self.df) self.module_data = { 'historical': self.analyzer.analyze_front(), 'module1': {'hot': [], 'cold': [], 'special': {}}, 'module2': {'hot': [], 'cold': [], 'special': {}}, 'module3': {'hot': [], 'cold': [], 'special': {}} } self._start_event_system() def _load_data(self) -> pd.DataFrame: if not os.path.exists(self.data_file): raise FileNotFoundError(f"Data file not found: {self.data_file}") with open(self.data_file, 'rb') as f: encoding = chardet.detect(f.read())['encoding'] df = pd.read_csv(self.data_file, encoding=encoding) df = df.rename(columns={ '开奖期号': 'issue', '前区1': 'front1', '前区2': 'front2', '前区3': 'front3', '前区4': 'front4', '前区5': 'front5', '后区1': 'rear1', '后区2': 'rear2' }) df['前区号码'] = df[['front1', 'front2', 'front3', 'front4', 'front5']].values.tolist() df['后区号码'] = df[['rear1', 'rear2']].values.tolist() return df.drop_duplicates('issue') def _build_position_cache(self) -> Dict[str, Dict[int, bool]]: cache = {'front': {}, 'rear': {}} for num_val in range(1, 36): cache['front'][num_val] = f"{num_val:02d}" in self.position_model rear_positions = [] for r in BACK_POSITION_RANGES['rows']: for c in BACK_POSITION_RANGES['cols']: rear_positions.append((int(r[1:]), int(c[1:]))) for num_val in range(1, 13): cache['rear'][num_val] = num_val % len(rear_positions) in [c for _, c in rear_positions] return cache def _start_event_system(self): def data_producer(): while True: time.sleep(3) module = random.choice(['module1', 'module2', 'module3']) hot = random.sample(range(1, 36), random.randint(3, 6)) cold = random.sample(range(1, 36), random.randint(2, 4)) channel_b.put({ 'module': module, 'hot': hot, 'cold': cold, 'special': { 'sum_range': [random.randint(80, 120)], 'prime_ratio': [random.randint(1, 3), random.randint(2, 4)], 'odd_ratio': [random.randint(1, 3), random.randint(2, 4)] } }) def event_listener(): while True: try: data = channel_b.get() module = data['module'] if module in self.module_data: self.module_data[module]['hot'] = list(set( self.module_data[module]['hot'] + data['hot'])) self.module_data[module]['cold'] = list(set( self.module_data[module]['cold'] + data['cold'])) for k, v in data['special'].items(): if k in self.module_data[module]['special']: if isinstance(v, list): self.module_data[module]['special'][k] = v except Exception as e: logging.error(f"Event processing error: {e}") threading.Thread(target=data_producer, daemon=True).start() threading.Thread(target=event_listener, daemon=True).start() def generate_numbers(self, n: int = 5) -> List[Tuple[List[int], List[int]]]: try: combined_front = self._combine_front_data() combined_rear = self.analyzer.analyze_rear() candidates = [] for target_sum in combined_front['sum_range'][:5]: for _ in range(n * 2): front_nums = self._generate_front(target_sum, combined_front) rear_nums = self._generate_rear(combined_rear) if len(front_nums) == 5 and len(rear_nums) == 2: candidates.append((front_nums, rear_nums)) valid = [c for c in candidates if self._validate_combination(c, combined_front, combined_rear)] results = self._score_combinations(valid, combined_front)[:n] if not results: results = self._generate_backup(n) return results except Exception as e: logging.error(f"Number generation error: {e}") return self._generate_backup(n) def _combine_front_data(self) -> Dict: combined = { 'hot': [], 'cold': [], 'sum_range': [], 'prime_ratio': [1, 3], 'odd_ratio': [1, 4], 'exclude_range': (0, 0), 'consecutive': False } for module in self.module_data.values(): combined['hot'].extend(module.get('hot', [])) combined['cold'].extend(module.get('cold', [])) if 'sum_range' in module.get('special', {}): combined['sum_range'].extend(module['special']['sum_range']) if 'prime_ratio' in module.get('special', {}): combined['prime_ratio'] = [ max(combined['prime_ratio'][0], module['special']['prime_ratio'][0]), min(combined['prime_ratio'][1], module['special']['prime_ratio'][1]) ] if 'odd_ratio' in module.get('special', {}): combined['odd_ratio'] = [ max(combined['odd_ratio'][0], module['special']['odd_ratio'][0]), min(combined['odd_ratio'][1], module['special']['odd_ratio'][1]) ] if 'exclude_range' in module.get('special', {}): combined['exclude_range'] = module['special']['exclude_range'] if 'consecutive' in module.get('special', {}): combined['consecutive'] |= module['special']['consecutive'] combined['hot'] = list(set(combined['hot'])) combined['cold'] = list(set(combined['cold'])) if not combined['sum_range']: combined['sum_range'] = self.module_data['historical']['sum_range'] return combined def _generate_front(self, target_sum: int, analysis: Dict) -> List[int]: valid_nums = [n for n in range(1, 36) if self.position_validity_cache['front'].get(n, False)] hot_nums = [n for n in analysis['hot'] if n in valid_nums] cold_nums = [n for n in analysis['cold'] if n in valid_nums] for _ in range(100): selected = [] if hot_nums: selected.extend(random.sample(hot_nums, min(3, len(hot_nums)))) if cold_nums and len(selected) < 4: selected.extend(random.sample(cold_nums, min(1, len(cold_nums)))) remaining = 5 - len(selected) candidates = [n for n in valid_nums if n not in selected] if remaining > 0 and candidates: weights = [self._calc_number_weight(n, selected, analysis) for n in candidates] selected.extend(random.choices(candidates, weights=weights, k=remaining)) selected = sorted(list(set(selected))[:5]) if len(selected) == 5 and abs(sum(selected) - target_sum) <= 5: return selected return random.sample(valid_nums, 5) def _calc_number_weight(self, num: int, selected: List[int], analysis: Dict) -> float: corr_weight = sum(self.correlation_analyzer.get_correlation(num, s) for s in selected) if selected else 1 hot_weight = 2 if num in analysis['hot'] else 0.5 if num in analysis['cold'] else 1 pos_key = f"{num:02d}" pos_str = self.position_model.get(pos_key, 'r0c0') row = int(pos_str[1:pos_str.find('c')]) col = int(pos_str[pos_str.find('c') + 1:]) pos_weight = 1 + (1 / (1 + row * col)) return corr_weight * hot_weight * pos_weight def _generate_rear(self, analysis: Dict) -> List[int]: valid_nums = [n for n in range(1, 13) if self.position_validity_cache['rear'].get(n, False)] hot_nums = [n for n in analysis['hot_cold']['hot'] if n in valid_nums] cold_nums = [n for n in analysis['hot_cold']['cold'] if n in valid_nums] selected = random.sample(hot_nums, min(2, len(hot_nums))) if hot_nums else [] if len(selected) < 2 and cold_nums: select_count = min(2 - len(selected), len(cold_nums)) selected.extend(random.sample(cold_nums, select_count)) if len(selected) < 2: remaining = [n for n in valid_nums if n not in selected] selected.extend(random.sample(remaining, 2 - len(selected))) return sorted(selected) def _validate_combination(self, combination: Tuple[List[int], List[int]], front_analysis: Dict, rear_analysis: Dict) -> bool: front_nums, rear_nums = combination current_sum = sum(front_nums) if not any(abs(current_sum - s) <= 5 for s in front_analysis['sum_range']): return False prime_count = len([n for n in front_nums if n in self.analyzer.prime_numbers]) if not (front_analysis['prime_ratio'][0] <= prime_count <= front_analysis['prime_ratio'][1]): return False odd_count = sum(1 for n in front_nums if n % 2 != 0) if not (front_analysis['odd_ratio'][0] <= odd_count <= front_analysis['odd_ratio'][1]): return False has_consecutive = any(front_nums[i + 1] - front_nums[i] == 1 for i in range(4)) if front_analysis['consecutive'] != has_consecutive: return False rear_span = max(rear_nums) - min(rear_nums) if rear_span not in [rear_analysis['span'] - 1, rear_analysis['span'], rear_analysis['span'] + 1]: return False return True def _score_combinations(self, combinations: List[Tuple[List[int], List[int]]], front_analysis: Dict) -> List[Tuple[float, Tuple[List[int], List[int]]]]: scored = [] for front_nums, rear_nums in combinations: score = 0 current_sum = sum(front_nums) closest_sum = min(front_analysis['sum_range'], key=lambda x: abs(x - current_sum)) score += 10 - abs(current_sum - closest_sum) corr_score = 0 for i in range(len(front_nums)): for j in range(i + 1, len(front_nums)): corr_score += self.correlation_analyzer.get_correlation(front_nums[i], front_nums[j]) score += corr_score / 10 positions = [self.position_model.get(f"{n:02d}", 'r0c0') for n in front_nums] rows = [int(p[1:p.find('c')]) for p in positions] cols = [int(p[p.find('c') + 1:]) for p in positions] row_std = np.std(rows) col_std = np.std(cols) score += 5 / (1 + row_std + col_std) scored.append((score, (front_nums, rear_nums))) return sorted(scored, reverse=True, key=lambda x: x[0]) def _generate_backup(self, n: int) -> List[Tuple[List[int], List[int]]]: valid_front = [n for n in range(1, 36) if self.position_validity_cache['front'].get(n, False)] valid_rear = [n for n in range(1, 13) if self.position_validity_cache['rear'].get(n, False)] results = [] for _ in range(n): front_nums = sorted(random.sample(valid_front, 5)) rear_nums = sorted(random.sample(valid_rear, 2)) results.append((front_nums, rear_nums)) return results if __name__ == "__main__": generator = AdvancedLotteryGenerator('historical_data.csv') number_list = generator.generate_numbers(5) for idx, (front, rear) in enumerate(number_list, 1): print(f"Group {idx}: Front {front} Rear {rear} (Sum:{sum(front)})") # Ensure newline at end of file print()

filetype

CREATE TABLE “XINSPADM”.“SP_PO_MAST” ( “PO_ID” NUMBER(,0), “PO_NO” VARCHAR2(10), “PO_CAT” VARCHAR2(1), “PO_TYPE” VARCHAR2(10), “PMNT_TERM” VARCHAR2(20), “VENDOR_CODE” VARCHAR2(10), “CURRENCY” VARCHAR2(5), “INCO_TERMS1” VARCHAR2(3), “INCO_TERMS2” VARCHAR2(30), “CONTRACT_START_DATE” DATE, “CONTRACT_END_DATE” DATE, “TARGET_VAL” NUMBER(23,4), “REL_GROUP” VARCHAR2(2), “REL_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “REL_DATE” DATE, “DEL_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “COMPANY_CODE” VARCHAR2(10), “PUR_GROUP” VARCHAR2(5), “PURCH_ORG” VARCHAR2(10), “EPO_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “MATN_MAN” VARCHAR2(20), “SAP_CDATE” DATE, “BUYER” VARCHAR2(20), “CUR_REL_CODE” VARCHAR2(2), “SALES_PERSON” VARCHAR2(30), “PUR_GROUP_CONTACT” VARCHAR2(50), “PUR_GROUP_TEL” VARCHAR2(30), “PR_NO” VARCHAR2(20), “USERID” VARCHAR2(20), “VALIDITY_START” DATE, “VALIDITY_END” DATE, “MODIFIER” VARCHAR2(20), “WORKFLOW_STATUS” VARCHAR2(255), “STREET” VARCHAR2(100), “HOUSE_NUMBER” VARCHAR2(50), “POST_CODE” VARCHAR2(20), “CITY” VARCHAR2(200), “COUNTRY_CODE” VARCHAR2(100), “TEL” VARCHAR2(30), “TEL_EXT” VARCHAR2(30), “FAX” VARCHAR2(30), “FAX_EXT” VARCHAR2(30), “STOCK_TYPE” VARCHAR2(10), “CDATE” DATE, “UDATE” DATE, “WORKFLOW_ID” NUMBER(19,0), “FLOW_TYPE” VARCHAR2(255), “WORKFLOW_START_DATE” DATE, “WORKFLOW_FINISH_DATE” DATE, “WARRANTY_PERIOD” NUMBER(,0), “WARRANTY_METHOD” VARCHAR2(20), “HEAD_CAT” VARCHAR2(1), “HEAD_TAX” VARCHAR2(2), “CATEGORY” VARCHAR2(1), “MAX_ORG_LEVEL” VARCHAR2(20), “MAX_ORG_GRADE” NUMBER(18,0), CONSTRAINT "UQ_PO_MAST_PONO" UNIQUE ("PO_NO") DISABLE, PRIMARY KEY ("PO_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 8192 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_MAST_PONO” ON “XINSPADM”.“SP_PO_MAST” (“PO_NO”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_MAST_PRNO” ON “XINSPADM”.“SP_PO_MAST” (“PR_NO”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_MAST_VCODE” ON “XINSPADM”.“SP_PO_MAST” (“VENDOR_CODE”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“SP_PO_MAST_IDX1” ON “XINSPADM”.“SP_PO_MAST” (“PMNT_TERM”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE UNIQUE INDEX “XINSPADM”.“SYS_C0012217” ON “XINSPADM”.“SP_PO_MAST” (“PO_ID”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; GRANT SELECT ON “XINSPADM”.“SP_PO_MAST” TO “OEREAD”; GRANT SELECT ON “XINSPADM”.“SP_PO_MAST” TO “XINSPREAD”;-- XINSPADM.SP_PO_DETL definition CREATE TABLE “XINSPADM”.“SP_PO_DETL” ( “POITEM_ID” NUMBER(,0), “PO_ID” NUMBER(,0), “PO_NO” VARCHAR2(10), “PO_ITEM” VARCHAR2(10), “PLANT” VARCHAR2(30), “MAT_GRP” VARCHAR2(20), “MC_NO” VARCHAR2(18), “MC_DESC” VARCHAR2(40), “ITEM_QTY” NUMBER(16,3), “UNIT” VARCHAR2(4), “UNIT_PRICE” NUMBER(23,4), “TOTAL_AMOUT” NUMBER(23,4), “INFO_REC” VARCHAR2(20), “VEND_MAT” VARCHAR2(35), “TAX_CODE” VARCHAR2(2), “DELIV_COMPL_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “DELIV_DATE” DATE, “ITEM_CAT” VARCHAR2(1), “PR_NO” VARCHAR2(10), “PR_ITEM” VARCHAR2(10), “ACCT_ASSCAT” VARCHAR2(1), “GR_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “GR_BY” VARCHAR2(10), “DEL_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “PO_REF_NO” VARCHAR2(10), “REMAIN_BALANCE_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “SAP_UDATE” DATE, “FORECAST_DELIV_DATE” DATE, “RECEIVE_QTY” NUMBER(16,3) DEFAULT 0, “RECEIVE_PERCENT” NUMBER(10,4) DEFAULT 0, “EQ_SEQ_ID” VARCHAR2(10), “MANUFACTURER” VARCHAR2(60), “EQ_MAKER_PART_NO” VARCHAR2(30), “GL_ACCT” VARCHAR2(10), “TAX_FREE_ENG” VARCHAR2(92), “TAX_FREE_CHI” VARCHAR2(92), “DRAW_DOC” VARCHAR2(22), “DOC_VEND_MAT” VARCHAR2(60), “ORIGINAL_MC_NO” VARCHAR2(20), “PRICE_UNIT” NUMBER(*,0), “REQUISITIONER” VARCHAR2(20), “FINAL_INVOICE_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “FREE_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “IR_QTY” NUMBER(16,3), “IR_AMOUNT” NUMBER(16,3), “INVOICE_PLAN_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “GR_NOVALUE_FLAG” VARCHAR2(3) DEFAULT ‘NO’, “UNLOAD_POINT” VARCHAR2(20), “ASSET_NO” VARCHAR2(50), “ASSET_SUBNO” VARCHAR2(20), “COST_CENTER” VARCHAR2(20), “COAREA” VARCHAR2(30), “COMMIT_ITEM” VARCHAR2(20), “FUND_YEAR” VARCHAR2(10), “FUND_CENTER” VARCHAR2(20), “CDATE” DATE, “UDATE” DATE, “SHIP_QTY” NUMBER(16,3) DEFAULT 0, “SHIP_AMOUNT” NUMBER(23,4) DEFAULT 0, “AUTO_ACTION” VARCHAR2(10), “REM_SHELF_LIFE” NUMBER(16,4), “RFQ_NO” VARCHAR2(10), “RFQ_ITEM” VARCHAR2(6), “INFOUPDATE_FLAG” VARCHAR2(3), “FACILITY_PO_STATUS” VARCHAR2(20), “TMP_DEL” VARCHAR2(3), PRIMARY KEY ("POITEM_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ENABLE, CONSTRAINT “FK_PO_DETL_POID” FOREIGN KEY (“PO_ID”) REFERENCES “XINSPADM”.“SP_PO_MAST” (“PO_ID”) ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 8192 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE OR REPLACE TRIGGER “XINSPADM”.“TRI_SET_EQUIPMENTKEY3” BEFORE INSERT OR UPDATE ON XINSPADM.SP_PO_DETL FOR EACH ROW declare – local variables here equipmentID sp_po_detl.eq_seq_id%type; begin begin select eq_seq_id into equipmentID from ems_eq_id_view where eq_id=:new.eq_seq_id; :new.eq_seq_id := equipmentID; exception when no_data_found then null; end; end; / ALTER TRIGGER “XINSPADM”.“TRI_SET_EQUIPMENTKEY3” DISABLE; CREATE OR REPLACE TRIGGER “XINSPADM”.“TRI_SET_FORECASTDELIVYDATE2” BEFORE INSERT ON XINSPADM.SP_PO_DETL FOR EACH ROW begin :new.forecast_deliv_date:=:new.deliv_date; end; / ALTER TRIGGER “XINSPADM”.“TRI_SET_FORECASTDELIVYDATE2” ENABLE; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_EQ_SEQ_ID” ON “XINSPADM”.“SP_PO_DETL” (“EQ_SEQ_ID”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_ITEMCAT” ON “XINSPADM”.“SP_PO_DETL” (“ITEM_CAT”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_POID” ON “XINSPADM”.“SP_PO_DETL” (“PO_ID”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_POITEM” ON “XINSPADM”.“SP_PO_DETL” (“PO_NO”, “PO_ITEM”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_PONO” ON “XINSPADM”.“SP_PO_DETL” (“PO_NO”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_POREFNO” ON “XINSPADM”.“SP_PO_DETL” (“PO_REF_NO”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_PRITEM” ON “XINSPADM”.“SP_PO_DETL” (“PR_NO”, “PR_ITEM”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE INDEX “XINSPADM”.“INX_SP_PO_DETL_PRNO” ON “XINSPADM”.“SP_PO_DETL” (“PR_NO”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; CREATE UNIQUE INDEX “XINSPADM”.“SYS_C0021337” ON “XINSPADM”.“SP_PO_DETL” (“POITEM_ID”) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE “SUPPLY_DATA” ; GRANT SELECT ON “XINSPADM”.“SP_PO_DETL” TO “OEREAD”; GRANT SELECT ON “XINSPADM”.“SP_PO_DETL” TO “XINSPREAD”; 根据这两个表写一个接口文档 我需要po是主 SP_PO_DETL是子 然后只需要关键一点的信息 字段全一点

穆庭秋
  • 粉丝: 45
上传资源 快速赚钱