<?php

namespace model\sample;

use model\io;
use model\sample\sample;

/**
 * 样品与 BPM 类
 */
class sampleBPM extends \model
{

    public function __construct()
    {
        parent::__construct();
    }

    /**  PDC 发送样品进度到 BPM */
    public function sendSampleToBpm(array $ids = [])
    {
        errorLog('BEGIN', 'sendSampleToBPM');
        try {
            $io = new io();
            $ioMethod = 'sap/CreateJcNewProductFlow';
            $data = $this->getSampleToBpmData($ids);
            errorLog('getSampleToBpmData(), count(data) = ' . count($data), 'sendSampleToBPM');
        } catch (\Throwable $th) {
            errorLog('getSampleToBpmData(), ' . $th->getMessage(), 'sendSampleToBPM');
        }
        foreach ($data as $block) {
            try {
                $res = $io->sap($ioMethod, $block);
                if (empty($res) || !empty($res['code']) || empty($res['formNo'])) {
                    $error = [
                        'io' => 'io->sap()',
                        'ioMethod' => $ioMethod,
                        'res' => !empty($res) ? json_encode($res, JSON_UNESCAPED_UNICODE) : 'null',
                        'data' => mb_substr(json_encode($block, JSON_UNESCAPED_UNICODE), 0, 255)
                    ];
                    errorLog($error, 'sendSampleToBPM');
                } else {
                    errorLog($res, 'sendSampleToBPM');                
                }
                foreach ($block['items'] as $item) {
                    $this->db->update('sample', [
                        's_is_send_bpm'  => 1,
                        's_bpm_no' => $res['formNo'],
                        's_send_bpm_time'  => getNowTime()
                    ], ['s_id' => $item['SID']]);
                }
            } catch (\Throwable $th) {
                errorLog('$io->sap($ioMethod, $block);, ' . $th->getMessage(), 'sendSampleToBPM');
            }
        }
        errorLog('END', 'sendSampleToBPM');
    }

    /** 获取 到同步到 BPM 的样品数据 
     * 已登记 + 非目录核对 
     */
    public function getSampleToBpmData(array $ids = [])
    {
        // 传递的 json 格式
        $jsonFormat = '
            {
                "USERID":"017971",
                "CDATE":"2024-05-27",
                "CPX":"1",
                "KFLX":"自主开发",
                "items":[
                    {
                        "LSH":"123",
                        "OE":"yes",
                        "CX":"small",
                        "XCX":"yes",
                        "BYL":"100k",
                        "SC":"EU",
                        "YJXL":"5k",
                        "KFYY":"no why"
                    },
                    {
                        "LSH":"234",
                        "OE":"yes",
                        "CX":"small",
                        "XCX":"yes",
                        "BYL":"100k",
                        "SC":"EU",
                        "YJXL":"5k",
                        "KFYY":"no why"
                    }
                ]
            }
        ';
        $check_type = 10138; // 非目录核对
        $sql = qgprintf(
            "SELECT 
            s_id,s_apply_date, o.o_sort CPX, o.code jobno, cate.cn_name catename,s_form
            ,s_plmseq, sn_number,make.name makename,sm_series
            , s_model_vio, s_comein_model_vio,s_potential_market,s_expected_sales,s_develop_reason
            FROM sample 
            JOIN pro_cate cate ON cate.id = s_cate
            JOIN `object` o ON o_id = bpm_product_line
            LEFT OUTER JOIN sample_numidx num ON sn_pro_factory = 1 AND num.sn_s_id = s_id AND sn_number<>''
            LEFT OUTER JOIN sample_model_txt mtxt ON mtxt.smt_s_id = s_id
            LEFT OUTER JOIN m_make make ON make.mk_id = mtxt.sm_make
            WHERE s_stop = 0 AND s_is_send_bpm = 0 AND s_has_comein=1 AND s_check_type = 10138 AND o.o_sort>0 AND o.code>0
            AND s_state_sub = 52
            "
        );
        if(!empty($ids)) {
            $sql .= " AND s_id IN (" . implode(',', $ids). ")";
        }
        $sql .= " GROUP BY s_plmseq";
        //-- JOIN gsp_adm_user ON au_id = s_apply_user AND au_jobno>0
        //-- AND s_model_vio > 0 AND s_potential_market <> '' AND s_expected_sales<>'' AND s_develop_reason<>''
        $data = [];
        $this->db->useBuff(false);
        $st = $this->db->query($sql);
        while ($row = $st->fetch(2)) {
            $header = [
                'USERID' => $row['jobno'],
                'CDATE' => $row['s_apply_date'],
                'CPX' => $row['CPX'],
                'KFLX' => $row['s_form'] ? '客户来样开发' : '自主开发',
            ];
            $guid = md5(serialize($header));
            if (!isset($data[$guid])) {
                $data[$guid] = $header;
                $data[$guid]['items'] = [];
            }
            $data[$guid]['items'][] = [
                "SID" => $row['s_id'],
                "LSH" => $row['s_plmseq'],
                "OE" => $row['sn_number'],
                "CX" => $row['makename'],
                "XCX" => $row['sm_series'],
                "BYL" => $row['s_model_vio'],
                "SC" => $row['s_potential_market'],
                "YJXL" => $row['s_expected_sales'],
                "KFYY" => $row['s_develop_reason'],
                "PL" => $row['catename'],
            ];
        }
        return $data;
    }
}
