<?php

/**
 * +----------------------------------------------------------------------
 * | Created By PhpStorm
 * +----------------------------------------------------------------------
 * | DATE: 2021/8/23
 * +----------------------------------------------------------------------
 * | TIME: 13:39
 * +----------------------------------------------------------------------
 * | Author: YangXing(925032253@qq.com)
 * +----------------------------------------------------------------------
 * | Class: packing
 * +----------------------------------------------------------------------
 */

namespace model\pro;

use model\collocation;
use \model\pro\pro;

class packing extends \model
{
    public $table = 'pro_pack';

    public $key = 'pp_id';
	public $packFileds = [];
	public $packArea = [];
	public function __construct()
    {
    
		parent::__construct($db);
		$this->packFileds = [
			'packingWay'=>lg('包装方式'),
			'netWeight'=>lg('产品净重').'(kg)',
			'zhSpecs'=>lg('纸盒规格').'(cm)',
			'zxSpecs'=>lg('外箱规格').'(cm)',
			'nylon1Specs'=>lg('尼龙袋1规格').'(cm)',
			'nylon2Specs'=>lg('尼龙袋2规格').'(cm)',
			'tpSpecs'=>lg('托盘规格').'(cm)',
			'perCartonGrossWeight'=>lg('每盒毛重').'(kg)',
			'perBoxGrossWeight'=>lg('每箱毛重').'(kg)',
			'perTorrGrossWeight'=>lg('每托毛重').'(kg)',
			'nylon1ProductNum'=>lg('尼龙袋1产品数量'),
			'nylon2ProductNum'=>lg('尼龙袋2产品数量'),
			'perCartonNum'=>lg('每盒数量'),
			'perBoxCartonNum'=>lg('每箱盒数'),
			'perBoxNum'=>lg('每箱袋数'),
			'perBagNum'=>lg('每袋袋数'),
			'perFloorBoxNum'=>lg('每层箱数'),
			'perTorrBoxNum'=>lg('每托箱数'),
			'perTorrNum'=>lg('每托层数'),
			'perTorrProductNum'=>lg('每托数量'),
			'perTorrVolume'=>lg('每托体积').'(m³)'
		];

		$this->packArea =  [
			['id'=>'欧洲','cn_name'=>'欧洲', 'en_name'=>'E.U.'],
			['id'=>'亚太','cn_name'=>'亚太', 'en_name'=>'Asia'],
			['id'=>'北美','cn_name'=>'北美', 'en_name'=>'N.A.'],
			['id'=>'南美', 'cn_name'=>'南美', 'en_name'=>'L.A.'],
			['id'=>'非洲', 'cn_name'=>'非洲', 'en_name'=>'A.F.'],
			['id'=>'中东', 'cn_name'=>'中东', 'en_name'=>'M.D.'],
			['id' => '国内', 'cn_name' => '国内', 'en_name' => 'C.N.'],
			['id' => '非欧洲', 'cn_name' => '非欧洲', 'en_name' => 'Non-Europe'],
		];
	}

	//通过sap接口更新产品包装 $date目前是无效的，接口只返回最近7天的数据
	public function updateProPack($date = '')
	{
		$io = new \model\io();
		if(empty($date)) $date = date('Y-m-d', strtotime('-7 days'));
		$result = $io->sap('sap/QueryConfigBomToPdc?modifyTime='.$date, []);
		//$result = '{"code":0,"data":[{"area":"北美","gspno":"249CABY2-00","packingWay":"产品袋+纸盒+托盘","netWeight":4.83,"zhSpecs":"70.5×12.0×12.0","zxSpecs":"无","nylon1Specs":"100.0×22.0","tpSpecs":"122.0×107.0","perCartonGrossWeight":0.0,"perBoxGrossWeight":0.0,"perTorrGrossWeight":639.51,"nylon1ProductNum":1.0,"nylon2ProductNum":0.0,"perCartonNum":1.0,"perBoxNum":0.0,"perBoxCartonNum":0.0,"perBagNum":0.0,"perFloorBoxNum":0.0,"perTorrBoxNum":0.0,"perTorrNum":8.0,"perTorrProductNum":112.0,"perTorrVolume":1.42}]}';
		//$result = json_decode($result, true);
		if(!empty($result['data']) && is_array($result['data']))
		{
			$pro = new pro();
			$kvArea = array_column($this->packArea, null, 'id');
			foreach($result['data'] as $row)
			{
				$pid = $pro->getPidByNumber($row['gspno'], '3');
				if($pid < 1) continue;
				$addArr = [
					'pp_p_id'=>$pid,
					'area'=>$row['area'],
					'cn_name'=>$kvArea[$row['area']]['cn_name'],
					'en_name'=>$kvArea[$row['area']]['en_name'],
					'packingWay'=>$row['packingWay'],
					'netWeight'=>$row['netWeight'],
					'zhSpecs'=>$row['zhSpecs'],
					'zxSpecs'=>$row['zxSpecs'],
					'nylon1Specs'=>$row['nylon1Specs'],
					'nylon2Specs'=>$row['nylon2Specs'],
					'tpSpecs'=>$row['tpSpecs'],
					'perCartonGrossWeight'=>$row['perCartonGrossWeight'],
					'perBoxGrossWeight'=>$row['perBoxGrossWeight'],
					'perTorrGrossWeight'=>$row['perTorrGrossWeight'],
					'nylon1ProductNum'=>$row['nylon1ProductNum'],
					'nylon2ProductNum'=>$row['nylon2ProductNum'],
					'perCartonNum'=>$row['perCartonNum'],
					'perBoxCartonNum'=>$row['perBoxCartonNum'],
					'perBoxNum'=>$row['perBoxNum'],
					'perBagNum'=>$row['perBagNum'],
					'perFloorBoxNum'=>$row['perFloorBoxNum'],
					'perTorrBoxNum'=>$row['perTorrBoxNum'],
					'perTorrNum'=>$row['perTorrNum'],
					'perTorrProductNum'=>$row['perTorrProductNum'],
					'perTorrVolume'=>$row['perTorrVolume'],
					'modifyTime'=>$row['modifyTime'],
					'update_time'=>getNowTime()
				];
				$this->db->replace('pro_pack_area', $addArr, ['pp_p_id', 'area']);
			}
		}
		$this->addLang();
		return true;
	}

    /**
     * 如果存在就更新不存在就添加
     * @param $data
     * @return false|\PDOStatement
     */
    public function add($data)
    {
        $data['update_time'] = $this->getDateTime();
        if($this->db->has($this->table,['pp_id' => $data['pp_id']])){
            $ppId = $data['pp_id'];
            unset($data['pp_id']);
            return $this->db->update($this->table,$data,['pp_id' => $ppId]);
        }else{
            $data['create_time'] = $this->getDateTime();
            return $this->db->insert($this->table,$data);
        }
    }

	public function getProPackArea($pid)
	{
		$hasArea = $this->db->select('pro_pack_area', 'area', ['pp_p_id'=>$pid]);
		$areas = $this->packArea;
		foreach($areas as $k=>$v)
		{
			if(!in_array($v['id'], $hasArea))
				unset($areas[$k]);
		}
		return array_values($areas);
	}

	public function getProPack($pid)
	{
		$row = $this->db->get('pro',['[>]pro_pack'=>['p_id'=>'pp_p_id']] ,'*', ['p_id'=>$pid]);
		
		$collocation =  new collocation();
		if($row['pp_pack_status']){
			$pp_pack_status = $collocation->getRowByKey($row['pp_pack_status'])[cateName()];
		}
		if($row['pp_pack_status']){
			$pp_pack_status = $collocation->getRowByKey($row['pp_pack_status'])[cateName()];
		}
		$pp_weight_unit = $collocation->getRowByKey($row['pp_weight_unit'])[cateName()];
		$row['captions'] = [
			'pp_outbox'=>'',
			'pp_inbox'=>'',
			'ppe_inpocket'=>'',
			'ppe_material'=>'',
			'ppe_tag'=>'',
			'pp_weight_unit'=>$pp_weight_unit??'',
			'pp_pack_status'=>$pp_pack_status??'',
		];
		$row['pp_outbox_val'] = '';	
		$row['pp_inbox_val'] = '';
		$arr = [];
		if($row['pp_outbox']) $arr[] = $row['pp_outbox'];
		if($row['pp_inbox']) $arr[] = $row['pp_inbox'];
		if($arr){
			$rows = $this->db->select('pro_brand_ext',['pbe_id','pbe_val'],['pbe_id'=>$arr]);
			$rows =array_column($rows,'pbe_val','pbe_id');
			$row['pp_outbox_val'] = $rows[$row['pp_outbox']]??'';	
			$row['pp_inbox_val'] = $rows[$row['pp_inbox']]??'';	
			$row['captions']['pp_outbox']= $rows[$row['pp_outbox']]??'';	
			$row['captions']['pp_inbox']= $rows[$row['pp_inbox']]??'';	
		}

		$ext = $this->db->select('pro_pack_ext',['[><]pro_brand_ext'=>['ppe_pbe_id'=>'pbe_id']],['ppe_type','pbe_id_str'=>raw('GROUP_CONCAT(ppe_pbe_id)'),'pbe_val_str'=>raw('GROUP_CONCAT(pbe_val)')], ['ppe_p_id'=>$pid,'GROUP'=>'ppe_type']);
		$ext = array_column($ext,null,'ppe_type');
		foreach (['inpocket','material','tag'] as $type) {
			$row['ppe_'.$type] = $ext[$type]??[];
			$row['captions']['ppe_'.$type] = $ext[$type]['pbe_val_str']??'';
		}
		
		return $row;
	}
	public function getProPackOld($pid, $area)
	{
		return $this->db->get('pro_pack_area', '*', ['pp_p_id'=>$pid, 'area'=>$area]);
	}
	

	public function addLang()
	{
		$sql = "INSERT INTO lang_kv(`type`, `cn`) SELECT 'pack', packingWay FROM `pro_pack_area` WHERE packingWay != '' AND packingWay NOT IN (SELECT `cn` FROM lang_kv where `type` ='pack') GROUP BY packingWay";
		$this->db->query($sql)->fetchAll();
	}
}