zoukankan      html  css  js  c++  java
  • 计划订单转采购申请

    程序包含INCLUDE  使用------------------------------------------隔开

    *&---------------------------------------------------------------------*
    *& Report ZMMR012
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT zppr105.
    TABLES: rm61h, ekko, marc, plaf, ioitem, mara.
    SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
    PARAMETERS: p_werks TYPE rm61h-werks OBLIGATORY DEFAULT '3100'.
    SELECT-OPTIONS: s_dispo FOR rm61h-dispo,
                    s_matnr FOR rm61h-matnr,
                    s_ekgrp FOR marc-ekgrp,
                    s_fevor FOR marc-fevor,
                    s_mtart FOR mara-mtart,
                    s_matkl FOR mara-matkl,
                    s_kdauf FOR ioitem-kdauf MATCHCODE OBJECT vmva,
                    s_kdpos FOR ioitem-kdpos.

    PARAMETERS: p_sdatv TYPE rm61p-sdatv,
                p_pertr TYPE rm61p-pertr,

                p_beskz TYPE rm61p-beskz DEFAULT 'F' OBLIGATORY,
                p_fixkz TYPE rm61p-fixkz DEFAULT 'X' AS CHECKBOX,
                p_kzzuo TYPE rm61p-kzzuo DEFAULT 'X' AS CHECKBOX.

    SELECT-OPTIONS: s_mbeskz FOR marc-beskz NO-EXTENSION NO INTERVALS DEFAULT 'F' " OBLIGATORY,
                    s_msobsl FOR marc-sobsl NO-EXTENSION NO INTERVALS.

    SELECTION-SCREEN END OF BLOCK blk1.

    INCLUDE zppr105top.
    INCLUDE zppr105f01.

    INITIALIZATION.
      PERFORM frm_init_fcat.

    AT SELECTION-SCREEN.
       PERFORM FRM_JURISD.     " 权限检查

    START-OF-SELECTION.
      PERFORM frm_get_data.

    END-OF-SELECTION.
      PERFORM frm_show_data.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    *&---------------------------------------------------------------------*
    *&  包含                ZPPR105TOP
    *&---------------------------------------------------------------------*

    CONSTANTS: cv_vpauft(4TYPE VALUE 'VP  '.   "Vorplanungsauftrag

    TYPESBEGIN OF tp_output.
        INCLUDE STRUCTURE plaf.
    TYPES: box        TYPE xfeld,
           lock       TYPE xfeld,
           lockusr    TYPE sy-msgv1,
           fixkz      TYPE mdba-fixkz,
    *       zzbednr    TYPE mdba-zzbednr,
           ekgrp      TYPE marc-ekgrp,
           fevor      TYPE marc-fevor,
           mtart      TYPE mara-mtart,
           matkl      TYPE mara-matkl,
           maktx      TYPE makt-maktx,
           mbeskz     TYPE marc-beskz,
           msobsl     TYPE marc-sobsl,
           wrkst     TYPE mara-wrkst,
           zcpgg     TYPE mara-zcpgg,
           aufnr_t    TYPE string,
           cy_seqnr_t TYPE string,
           zhhbz      TYPE eban-zhhbz,
           rcol       TYPE char4,     " 颜色
           fstyle     TYPE lvc_t_styl,
           msg        TYPE char100.
    TYPESEND OF tp_output.

    TYPESBEGIN OF tp_material,
             matnr TYPE marc-matnr,
             fevor TYPE marc-fevor,
             ekgrp TYPE marc-ekgrp,
             mtart TYPE mara-mtart,
             matkl TYPE mara-matkl,
             maktx TYPE makt-maktx,
             beskz TYPE marc-beskz,
             sobsl TYPE marc-sobsl,
             wrkst TYPE mara-wrkst,
             zcpgg TYPE mara-zcpgg,
           END OF tp_material.

    DATA: gt_fcat TYPE lvc_t_fcat,
          gs_layo TYPE lvc_s_layo.

    DATA: gt_output TYPE STANDARD TABLE OF tp_output.

    DATA: gcl_alv_grid  TYPE REF TO cl_gui_alv_grid.
    DATA: gs_stbl       TYPE lvc_s_stbl.                "ALV 控制:刷新稳定性

    DATA: rs_selfield TYPE slis_selfield.

    DATA: i_grid_settings TYPE lvc_s_glay .
    DATA: lr_grid TYPE REF TO cl_gui_alv_grid.

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    *&---------------------------------------------------------------------*
    *&  包含                ZPPR105F01
    *&---------------------------------------------------------------------*

    *&---------------------------------------------------------------------*
    *& Form FRM_INIT_FCAT
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM frm_init_fcat .
      DATA: ls_fcat TYPE lvc_s_fcat.
      gs_layo-zebra 'X'.
    *  gs_layo-cwidth_opt = 'X'.
      gs_layo-no_merging 'X'.
      gs_layo-box_fname 'BOX'.
      gs_layo-info_fname 'RCOL'.
      gs_layo-stylefname 'FSTYLE'.

      DEFINE mro_fcat.
        CLEAR: ls_fcat.
        ls_fcat-fieldname = &1.
        ls_fcat-coltext = &2.
        ls_fcat-scrtext_l = &2.
        ls_fcat-scrtext_m = &2.
        ls_fcat-scrtext_s = &2.
        ls_fcat-DD_OUTLEN = &4.
        ls_fcat-no_zero 'X'.
        TRANSLATE ls_fcat-fieldname TO UPPER CASE.
        IF &3 NE space.
          ls_fcat-ref_table = &3.
          TRANSLATE ls_fcat-ref_table TO UPPER CASE.
          IF &1 EQ 'mbeskz'.
            ls_fcat-ref_field 'BESKZ'.
          ELSEIF &1 EQ 'msobsl'.
            ls_fcat-ref_field 'SOBSL'.
          ELSE.
            ls_fcat-ref_field = ls_fcat-fieldname.
          ENDIF.
        ENDIF.
        IF &1 EQ 'fixkz' OR &1 EQ 'pertr' OR &1 EQ 'psttr' OR &1 EQ 'pedtr' OR  &1 EQ 'gsmng' OR &1 EQ 'zhhbz'.
          ls_fcat-edit 'X'.
        ENDIF.
        IF &1 EQ 'fixkz'.
          ls_fcat-checkbox 'X'.
        ENDIF.
        IF &1 EQ 'aufnr_t' OR &1 EQ 'cy_seqnr_t'.
          ls_fcat-outputlen 20 .
        ENDIF .
        IF  &1 NE 'aufnr_t' AND &1 NE 'cy_seqnr_t'.
          ls_fcat-col_opt 'X' .
        ENDIF .
        APPEND ls_fcat TO gt_fcat.
      END-OF-DEFINITION.

      mro_fcat 'matnr' '物料编码' 'plaf' ''.
      mro_fcat 'maktx' '物料描述' space ''.

      mro_fcat 'wrkst' '基本物料' space ''.
      mro_fcat 'zcpgg' '产品规格' space ''.

      mro_fcat 'dispo' 'MRP控制者' 'plaf' ''.
      mro_fcat 'pertr' '期初日期' 'plaf' ''.
      mro_fcat 'psttr' '订单开始' 'plaf' ''.
      mro_fcat 'pedtr' '订单完成' 'plaf' ''.
      mro_fcat 'gsmng' '订货数量' 'plaf' ''.
      mro_fcat 'meins' '单位' 'plaf' ''.

      mro_fcat 'beskz' '采购类型' 'plaf' ''.

      mro_fcat 'fixkz' '采购申请固定' 'mdba' ''.
    *  mro_fcat 'zzbednr' '需求跟踪号' 'mdba'.
      mro_fcat 'flief' '固定供应商' 'plaf' ''.

      mro_fcat 'ekgrp' '采购组' 'marc' ''.
      mro_fcat 'fevor' '生产管理员' 'marc' ''.
      mro_fcat 'mtart' '物料类型' 'mara' ''.
      mro_fcat 'matkl' '物料组' 'mara' ''.

      mro_fcat 'plnum' '计划订单' 'plaf' ''.
      mro_fcat 'aufnr_t' '来源工单' '' ''.
      mro_fcat 'cy_seqnr_t' '优先级' '' ''.
      mro_fcat 'paart' '订单类型' 'plaf' ''.
      mro_fcat 'knttp' '科目分配类' 'plaf' ''.
      mro_fcat 'kdauf' '销售订单' 'plaf' ''.
      mro_fcat 'kdpos' '项目' 'plaf' ''.
      mro_fcat 'kdein' '计划行' 'plaf' ''.

      mro_fcat 'mbeskz' '物料主数据采购类型' 'marc' ''.
      mro_fcat 'msobsl' '物料主数据特殊采购类' 'marc' ''.
      mro_fcat 'zhhbz' '回货备注' '' '100'.
    *         mbeskz  TYPE marc-beskz,
    *       msobsl  TYPE marc-sobsl,

      mro_fcat 'msg'  '消息' space ''.
    ENDFORM.


    *&---------------------------------------------------------------------*
    *& Form FRM_GET_DATA
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM frm_get_data .
      CLEAR: gt_output, gt_output[].
      DATA: ls_output LIKE LINE OF gt_output.
      DATA: lt_plaf TYPE STANDARD TABLE OF plaf,
            ls_plaf LIKE LINE OF lt_plaf.

      DATA: lt_material TYPE STANDARD TABLE OF tp_material,
            ls_material LIKE LINE OF lt_material.

      DATABEGIN OF ls_ekko,
              matnr TYPE ekpo-matnr,
              ebeln TYPE ekpo-ebeln,
              ebelp TYPE ekpo-ebelp,
              lifnr TYPE ekko-lifnr,
            END OF ls_ekko,
            lt_ekko LIKE TABLE OF ls_ekko.

      RANGES: rg_matnr FOR plaf-matnr.
      IF p_pertr IS INITIAL.
        p_pertr '99991231'.
      ENDIF.


      SELECT * FROM plaf INTO CORRESPONDING FIELDS OF TABLE lt_plaf
               WHERE plwrk = p_werks "rm61h-werks
                 AND dispo IN s_dispo "= rm61h-dispo
                 AND plscn '000'
                 AND pertr <= p_pertr "Pruefen Eroeffnungstermin Ende
                 AND pertr >= p_sdatv "Pruefen Eroeffnungstermin Anfang
                 AND paart NE cv_vpauft
                 AND kdauf IN s_kdauf
                 AND kdpos IN s_kdpos
                 AND matnr IN s_matnr
                 AND umskz EQ 'X'.
    *             AND beskz EQ p_beskz.


      LOOP AT lt_plaf INTO ls_plaf.
        CHECK rg_matnr IS INITIAL OR ls_plaf-matnr NOT IN rg_matnr.
        rg_matnr-sign 'I'.
        rg_matnr-option 'EQ'.
        rg_matnr-low = ls_plaf-matnr.
        APPEND rg_matnr.
      ENDLOOP.

      DATABEGIN OF ls_resb,
              rsnum    LIKE resb-rsnum,
              rspos    LIKE resb-rspos,
              rsart    LIKE resb-rsart,
              matnr    LIKE resb-matnr,
              werks    LIKE resb-werks,
              bdter    LIKE resb-bdter,
              aufnr    LIKE resb-aufnr,
              cy_seqnr LIKE afko-cy_seqnr,
            END OF ls_resb,
            lt_resb LIKE TABLE OF ls_resb.

      CLEAR: lt_resb[], lt_resb .
      SELECT resb~rsnum
             resb~rspos
             resb~rsart
             resb~matnr
             resb~werks
             resb~bdter
             resb~aufnr         afko
    ~cy_seqnr    
    INTO CORRESPONDING FIELDS OF TABLE lt_resb    
    FROM resb    INNER 
    JOIN afko ON resb~aufnr = afko~aufnr    
    WHERE resb~matnr IN rg_matnr      
    AND resb~xloek ''      
    AND resb~kzear ''.  

    IF rg_matnr[] IS NOT INITIAL.    
    SELECT mara~matnr mara~mtart mara~matkl           marc
    ~fevor marc~ekgrp makt~maktx marc~werks           marc
    ~beskz marc~sobsl mara~wrkst mara~zcpgg      
    INTO CORRESPONDING FIELDS OF TABLE lt_material      
    FROM mara INNER JOIN marc        
    ON mara~matnr EQ marc~matnr      
    LEFT OUTER JOIN makt        
    ON mara~matnr EQ makt~matnr       
    AND makt~spras EQ sy-langu     
    WHERE mara~matnr IN rg_matnr       
    AND marc~werks EQ p_werks       
    AND marc~ekgrp IN s_ekgrp       
    AND marc~fevor IN s_fevor       
    AND mara~mtart IN s_mtart       
    AND mara~matkl IN s_matkl       
    AND marc~beskz IN s_mbeskz       
    AND marc~sobsl IN s_msobsl     
    ORDER BY mara~matnr ASCENDING.    

    SELECT ekpo~matnr ekpo~ebeln ekpo~ebelp ekko~lifnr      
    INTO CORRESPONDING FIELDS OF TABLE lt_ekko      
    FROM ekpo      INNER 
    JOIN ekko ON ekpo~ebeln = ekko~ebeln      
    WHERE ekpo~matnr IN rg_matnr .  

    ENDIF.  

    SORT lt_ekko BY matnr ASCENDING ebeln DESCENDING .  
    DELETE ADJACENT DUPLICATES FROM lt_ekko COMPARING matnr ebeln .  




    LOOP AT lt_plaf INTO ls_plaf.    
    READ TABLE lt_material INTO ls_material WITH KEY matnr = ls_plaf-matnr BINARY SEARCH.    
    CHECK sy-subrc 0.    
    IF p_beskz EQ 'E' AND ls_plaf-beskz NE 'E' OR p_beskz EQ 'F' AND ls_plaf-beskz NE 'F'.      
    CONTINUE.    
    ENDIF.    
    CLEAR: ls_output.    
    MOVE-CORRESPONDING ls_plaf TO ls_output.    ls_output
    -ekgrp = ls_material-ekgrp.    ls_output
    -fevor = ls_material-fevor.    ls_output
    -mtart = ls_material-mtart.    ls_output
    -matkl = ls_material-matkl.    ls_output
    -maktx = ls_material-maktx.    ls_output
    -fixkz = p_fixkz.    ls_output
    -mbeskz = ls_material-beskz.    ls_output
    -msobsl = ls_material-sobsl.    ls_output
    -wrkst = ls_material-wrkst.    ls_output
    -zcpgg = ls_material-zcpgg.    

    READ TABLE lt_ekko INTO ls_ekko WITH KEY matnr = ls_plaf-matnr .    
    IF sy-subrc .      ls_output
    -flief = ls_ekko-lifnr .    
    ENDIF .    

    LOOP AT lt_resb INTO ls_resb WHERE matnr = ls_plaf-matnr                                    
    AND bdter <= ls_plaf-pertr .      
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        
    EXPORTING          
    input  = ls_resb-aufnr        
    IMPORTING          
    output = ls_resb-aufnr.      

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        
    EXPORTING          
    input  = ls_resb-cy_seqnr        
    IMPORTING          
    output = ls_resb-cy_seqnr.      ls_output

    -aufnr_t    = ls_output-aufnr_t     && '/' && ls_resb-aufnr .      ls_output
    -cy_seqnr_t = ls_output-cy_seqnr_t  && '/' && ls_resb-cy_seqnr .      
    CLEAR: ls_resb .    
    ENDLOOP .    

    APPEND ls_output TO gt_output.    
    CLEAR: ls_output .  
    ENDLOOP.

    ENDFORM.


    *&---------------------------------------------------------------------*
    *& Form FRM_SHOW_DATA
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM frm_show_data .  i_grid_settings
    -edt_cll_cb 'X' .  
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    
    EXPORTING      i_callback_program       
    = sy-repid      i_callback_pf_status_set 
    'FRM_SET_STATUS'      i_callback_user_command  
    'FRM_USER_COMMAND'      is_layout_lvc            
    = gs_layo      it_fieldcat_lvc          
    = gt_fcat      i_grid_settings          
    = i_grid_settings      i_save                   
    'A'    
    TABLES      t_outtab                 
    = gt_output    
    EXCEPTIONS      program_error            
    1      
    OTHERS                   2.  
    IF sy-subrc <> 0.
    * Implement suitable error handling here  
    ENDIF.
    ENDFORM.


    FORM frm_set_status USING rt_extab TYPE slis_t_extab.  
    SET PF-STATUS 'ZPF_001'.  

    DATA: lo_grid TYPE REF TO cl_gui_alv_grid.  
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'    
    IMPORTING      e_grid 
    = lo_grid.  

    CALL METHOD lo_grid->register_edit_event    
    EXPORTING      i_event_id 
    = cl_gui_alv_grid=>mc_evt_modified.  
    IF sy-subrc <> 0.  
    ENDIF.

    ENDFORM.

    FORM frm_user_command USING r_ucomm LIKE sy-ucomm                            rs_selfield 
    TYPE slis_selfield.  
    IF r_ucomm EQ 'CPL1'.    
    PERFORM frm_planord_to_pr.    rs_selfield
    -refresh 'X'.  
    ENDIF.
    ENDFORM.


    FORM frm_planord_to_pr.  
    DATA: ls_output LIKE LINE OF gt_output,        lv_index  
    LIKE sy-tabix.  
    DATA: ls_plaf  LIKE plaf,        ls_cm61o 
    LIKE cm61o,        ls_mdba  
    LIKE mdba.  
    DATA: lv_gsmng LIKE plaf-gsmng,        lv_flief 
    LIKE plaf-flief,        lv_error 
    TYPE xfeld.  
    DATA: ls_temp  LIKE ls_output,        ls_style 
    TYPE lvc_s_styl.  
    DATA:lv_banfn TYPE eban-banfn,       lv_bnfpo 
    TYPE eban-bnfpo.  

    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'    
    IMPORTING      e_grid 
    = lr_grid.  
    CALL METHOD lr_grid->check_changed_data .  

    LOOP AT gt_output INTO ls_output WHERE box EQ 'X' AND rcol NE 'C510'.    lv_index 
    = sy-tabix.    
    MOVE-CORRESPONDING ls_output TO ls_plaf.    
    MOVE-CORRESPONDING ls_output TO ls_temp.    
    "------ Steuerparamenter setzen --------------------------    
    CLEAR: ls_cm61o, lv_error.
    *    ls_cm61o-trtyp = 'V'.             "Change    ls_cm61o
    -lockx 'X'.             "Lock planned order
    *    ls_cm61o-autho = 'X'.             "Authority check durchfuehren
    *    ls_cm61o-stpre = 'VC'.            "Change but no Save
    *    ls_cm61o-wtpst = 'X'.             "Wait for time stamp TL: P4DK111222    ls_cm61o
    -bapco 'X'.    ls_cm61o
    -darkx 'X'.    ls_cm61o
    -bapix 'X'.    
    CLEAR ls_mdba.
    *    ls_mdba-lfdat = ls_output-lfdat.
    *    ls_mdba-frgdt = ls_output-frgdt.    ls_mdba
    -werks = p_werks"ls_output-werks.    ls_mdba
    -dispo = ls_output-dispo.    ls_mdba
    -ekgrp = ls_output-ekgrp.    ls_mdba
    -lgort = ls_output-lgort.                              "TL 46A
    *    ls_mdba-reswk = ls_output-reswk.    ls_mdba
    -fixkz = ls_output-fixkz.    ls_mdba
    -flief = ls_output-flief.
    *    ls_mdba-zzbednr = ls_output-zzbednr.    lv_gsmng 

    = ls_plaf-gsmng.
    *    lv_flief = ls_plaf-flief.    

    CALL FUNCTION 'MD_PLANNED_ORDER_2_REQUISITION'      
    EXPORTING        plaf1      
    = ls_plaf        mdba1      
    = ls_mdba        cm61o      
    = ls_cm61o        manyorders 
    = space        findsource 
    = p_kzzuo      
    IMPORTING        plaf2      
    = ls_plaf
    *       no_next_order = gv_no_next_order      
    EXCEPTIONS        error      
    1.    
    IF sy-subrc NE 0.      
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.      lv_error 
    'X'.    
    ELSE.      
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'        
    EXPORTING          
    wait 'X'.    
    ENDIF.    

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno      
    INTO ls_output-msg      
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    

    IF ( sy-msgty 'S' AND sy-msgv2 IS NOT INITIAL AND sy-msgv3 IS NOT INITIAL )        
    AND ( ls_output-pwwrk '3100' OR  ls_output-pwwrk '3200' ).        
    CLEAR:lv_banfn,lv_bnfpo.        lv_banfn 
    = sy-msgv2.        lv_bnfpo 
    = sy-msgv3.        
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'          
    EXPORTING            
    input         = lv_banfn         
    IMPORTING            
    OUTPUT        =  lv_banfn .        

    UPDATE eban SET zhhbz = ls_output-zhhbz WHERE banfn = lv_banfn                                                  
    AND BNFPO = lv_bnfpo.        
    IF sy-subrc 0.            
    COMMIT WORK.            
    ELSE.              
    ROLLBACK WORK.        
    ENDIF.    
    ENDIF.    

    IF ls_plaf-gsmng > OR lv_error 'X'.      ls_output
    -rcol 'C610'.      
    MOVE-CORRESPONDING ls_plaf TO ls_output.      ls_output
    -ekgrp = ls_temp-ekgrp.      ls_output
    -fevor = ls_temp-fevor.      ls_output
    -mtart = ls_temp-mtart.      ls_output
    -matkl = ls_temp-matkl.      ls_output
    -maktx = ls_temp-maktx.      ls_output
    -fixkz = ls_temp-fixkz.
    *      ls_output-zzbednr = ls_temp-zzbednr.    
    ELSE.      
    " 删除该行      ls_output
    -rcol 'C510'.      
    CLEAR: ls_output-fstyle, ls_output-fstyle[], ls_style.      ls_style
    -style = cl_gui_alv_grid=>mc_style_disabled.      
    INSERT ls_style INTO TABLE ls_output-fstyle.    
    ENDIF.    
    MODIFY gt_output FROM ls_output INDEX lv_index.  
    ENDLOOP.

    ENDFORM.

    *&---------------------------------------------------------------------*
    *& Form FRM_JURISD
    *&---------------------------------------------------------------------*
    *& text 权限检查
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM FRM_JURISD .    "权限检查   
    AUTHORITY-CHECK OBJECT 'M_BANF_WRK'     
    ID 'WERKS' FIELD P_WERKS     
    ID 'ACTVT' DUMMY."FIELD '03'.    
    IF SY-SUBRC <> 0.    
    MESSAGE E002(ZMM01WITH P_WERKS.    
    ENDIF.


    ENDFORM.

    社会很单纯,复杂的是人
  • 相关阅读:
    JAVA 线程安全与同步机制
    JAVA 多线程
    el-table 宽度自适应bug
    详解迭代器Iterator
    理解基本类型的溢出
    理解classpath
    I/O(一):基础知识
    C++: 智能指针
    C++: 值类别与移动语义基础
    CUDA 架构与编程概述
  • 原文地址:https://www.cnblogs.com/coderfarmer/p/14641479.html
Copyright © 2011-2022 走看看