<?php
namespace admin\action;
use \model;
use \model\work;
use \model\carmodel;
use \model\ypApi;
use \model\check;
use model\homecn\trade;
use model\oeNumidx;
use model\user;

class workAction  extends \action
{
	public function importDemo()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->getDataList($req, $rules);
		
		$columns = json_decode($data['rows'][0]['wdlist_cols'], true);
		$dataArr = [array_column($columns, 'type'), array_column($columns, 'name')];
		$excel = new \model\excel();
		$excel->writer($dataArr, 'workdata.xlsx');
	}

	function checkTitle()
	{
		$req = \mvc::$req;
		$check = new check();
		$data = $check->checkExist($req['tag'], $req);
		$this->successJson(['id'=>$data]);
	}


	public function dataList()
    {
		$req = \mvc::$req;
		\view::set('QUERY_STRING', $_SERVER['QUERY_STRING']);
		\view::set('req', $req);
		\view::put();
    }

	//数据工单明细
	public function getDataList()
	{
		$req = \mvc::$req;
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = explode(',', $req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getDataList($req, $rules);

		$this->successJson($data);
	}
	
	public function dataItemList()
    {
		$req = \mvc::$req;
		if($req['wdlist_id']){
			$work = new work();
			$data = $work->getDataList($req, []);
			foreach ($data['rows'] as &$val) {
				$val['clean_count_rate']= round($val['clean_count']/$val['item_count']*100,1);
				$val['clean_has_count_rate']= round($val['clean_has_count']/$val['item_count']*100,1);
				$val['poe_has_count_rate'] = $val['poe_has_count']? round($val['poe_has_count']/$val['item_count']*100,1):'';
				$val['sup_has_count_rate'] = $val['sup_has_count']? round($val['sup_has_count']/$val['item_count']*100,1):'';
				$val['pro_has_count_rate'] = $val['pro_has_count']? round($val['pro_has_count']/$val['item_count']*100,1):'';
			}
			unset($val);
			\view::set('dataItem', $data['rows'][0]??[]);
		}
		/*$work = new work();
		$data = $work->formatWordDataCols($req['wdlist_id']);
		\view::set('data', $data);*/
		\view::set('QUERY_STRING', $_SERVER['QUERY_STRING']);
		\view::set('proFromSelect', $work->proFromSelect);
		\view::set('req', $req);
		\view::put();
    }

	//数据列表
	public function getDataItemList()
	{
		$req = \mvc::$req;
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = explode(',', $req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getDataItemList($req, $rules);
		$this->successJson($data);
	}
	
	//数据清洗明细
	public function wdiDetail()
    {
		$req = \mvc::$req;
		$work = new work();
		$dataArr = $work->getWdiDetail($req['wdi_id']);
		\view::set('cleanArr', $dataArr['cleans']);
		\view::set('cleanChkArr', $dataArr['cleans_chk']);
		\view::set('dataArr', $dataArr);
		/*$chkArr = $work->oePreCheck($req['woi_id']);
		$hasArr = array_filter(array_column($chkArr['nums'],'has'));
		$oeArr = [];
		$proArr = [];
		foreach ($hasArr as $key => $val) {
			if($val['oe']){
				foreach ($val['oe'] as $kk => $vv) {
					$oeArr[$vv['oe_id']] = [
						'show_num'=>$vv['show_num'],
						'oe_id'=>$vv['oe_id']
					];
				}
			}
			if($val['pro']){
				foreach ($val['pro'] as $kk => $vv) {
					$proArr[$vv['p_id']] = [
						'show_num'=>$vv['show_num'],
						'p_id'=>$vv['p_id']
					];
				}
			}
		}
		\view::set('chkArr', $chkArr);
		\view::set('proArr',array_values($proArr));
		\view::set('oeArr',array_values($oeArr));*/
		\view::put();
    }


	public function cleanDetail()
	{
		$req = \mvc::$req;
		$work = new work();
		$dataArr = $work->cleanDetail($req);
		\view::set('cleanArr', $dataArr['cleans']);
		\view::set('cleanChkArr', $dataArr['cleans_chk']);
		\view::set('dataArr', $dataArr);
		\view::put();
	}

	public function saveCleanToPoe()
    {
		$req = \mvc::$req;
		$work = new work();
		$data = $work->saveCleanToPoe($req['oe_id'], $req);
		$this->successJson($data);
    }


	public function saveWdiDetail()
    {
		$req = \mvc::$req;
		$work = new work();
		$data = $work->saveWdiDetail($req['wdi_id'], $req);
		$this->successJson($data);
    }


	public function setWdiStatus()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->setWdiStatus($req);
		$this->successJson($data);
	}


	public function setCell()
	{
		$req = \mvc::$req;
		if(!empty($req['id']) && preg_match('/^\d+$/', $req['id'])){
			$setArr = [
				$req['field']=>$req[$req['field']]
			];
			$work = new work();
			$work->setCell($req['table'], $req['id'], $setArr);
		}
		if($req['grid'] == -1) $this->successJson([]);
	}


	public function autoCleanCat()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->autoCleanCat($req);
		$this->successJson([]);
	}

	public function getWdiIds(){
		$req = \mvc::$req;
		$work = new work();
		$data = $work->getWdiIds($req);
		$this->successJson($data);
	}

	//删除数据
	public function delData()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->delData($req['table'], explode(',', $req['ids']));
		$this->successJson($data);
	}
	
	//检测工单数据
	public function cleanWorkData()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->cleanWorkData($req);
		$this->successJson([]);
	}

	public function cleanWorkChkOkPro()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->cleanWorkChkOkPro(explode(',', $req['ids']));
		$this->successJson([]);
	}

	function chkProOeByWdi()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->chkProOeByWdi($req['wdi_id']);
		$this->successJson($data);
	}


	//保存确认清洗产品
	function saveDataItemChkPro()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->saveDataItemChkPro($req);
		$this->successJson($data);
	}


	function workItemToPoeItem()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->workItemToPoeItem($req);
		$this->successJson($data);
	}
	
	//数据工单转产品工单
	function workItemToOeItem()
	{
		$req = \mvc::$req;
		$work = new work();
		$woe_id = $req['old_id']?:0;
		$data = $work->workItemToOeItem($req,$woe_id);
		$this->successJson($data);
	}

	//数据工单转询源单
	function workItemToAskItem()
	{
		$req = \mvc::$req;
		$work = new work();
		$was_id = $req['old_id']?:0;
		$data = $work->workItemToAskItem($req,$was_id);
		$this->successJson($data);
	}


	

	public function setCate()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->setCate($req['table'], explode(',', $req['ids']), $req['cate_id']);
		$this->successJson($data);
	}
	
	public function oeList()
    {
		$req = \mvc::$req;
		\view::set('QUERY_STRING', $_SERVER['QUERY_STRING']);
		\view::set('req', $req);
		\view::put();
    }

	//数据工单明细
	public function getOeList()
	{
		$req = \mvc::$req;
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = explode(',', $req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getOeList($req, $rules);
		$this->successJson($data);
	}

	public function oeItemList()
    {
		$req = \mvc::$req;
		$work = new work();
		\view::set('QUERY_STRING', $_SERVER['QUERY_STRING']);
		\view::set('req', $req);
		\view::put();
    }


	//数据列表
	public function getOeItemList()
	{
		$req = \mvc::$req;
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = explode(',', $req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getOeItemList($req, $rules);
		$this->successJson($data);
	}

	
	public function saveOeDetail()
    {
		$req = \mvc::$req;
		$work = new work();
		$data = $work->saveOeDetail($req['woi_id'], $req);
		$this->successJson($data);
    }

	//修改记录
	public function setOeCell()
	{
		$req = \mvc::$req;
		if(!empty($req['id']) && preg_match('/^\d+$/', $req['id'])){
			$setArr = [
				$req['field']=>$req[$req['field']]
			];
			$work = new work();
			$work->setOeCell($req['id'], $setArr);
		}
	}

	public function cleanOeData()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->cleanOeData(explode(',', $req['ids']), $req['type']);
		$this->successJson($data);
	}
	
	//审核预检测
	function oePreCheck()
	{
		$req = \mvc::$req;
		$work = new work();
		$dataArr = $work->oePreCheck($req['id']);
		
		$hasArr = array_filter(array_column($dataArr['nums'],'has'));
		$oeArr = [];
		$proArr = [];
		foreach ($hasArr as $key => $val) {
			if($val['oe']){
				foreach ($val['oe'] as $kk => $vv) {
					$oeArr[$vv['oe_id']] = [
						'show_num'=>$vv['show_num'],
						'oe_id'=>$vv['oe_id']
					];
				}
			}
			if($val['pro']){
				foreach ($val['pro'] as $kk => $vv) {
					$proArr[$vv['p_id']] = [
						'show_num'=>$vv['show_num'],
						'p_id'=>$vv['p_id']
					];
				}
			}
		}
		//正式库存在
		\view::set('isExist',count($proArr)>0?1:0);
		\view::set('proArr',array_values($proArr));
		\view::set('oeArr',array_values($oeArr));
		\view::set('dataArr', $dataArr);
		\view::put();
	}

	//审核到OE库
	function checkWorkOeToOe()
	{
		$req = \mvc::$req;
		$work = new work();
		$chkArr = [
			'ckremark1'=>$req['remark'],
		];
		$data = $work->checkWorkOeToOe($req['id'],$chkArr,$req['oe_id']);
		$this->successJson($data);
	}

	function checkWorkOeToPro()
	{
		$req = \mvc::$req;
		$work = new work();
		$chkArr = [
			'ckremark1'=>$req['remark'],
		];
		$data = $work->checkWorkOeToPro($req['id'],$chkArr,$req['p_id']);
		$this->successJson($data);
	}


	//宜配数据比较
	function compareNumByYiparts(){
		$req = \mvc::$req;
		$work = new work();
		$numArr = $work->compareNumByYiparts($req);
		$numUnikeyArr = [];
		$hasCount = 0;
		$chkArr = [];
		$noArr = $req['nochk']? explode(',',$req['nochk']):[];
		//如果存在oe_id
		$oeNumArr =[];
		if($req['oe_id']){
			$mainoe = '';
			//获取这个oe_id的号码
			$oeNumidx = new oeNumidx();
			$res = $oeNumidx->getNumList(['oe_id'=>$req['oe_id']]);
			foreach ($res['rows'] as $key => $val) {
				if($val['on_ismain'] =='Y'){
					$mainoe = $val['pf_name'].':'.$val['on_formart'];
				}
				$oeNumArr[] = $val['pf_name'].$val['on_formart'];
			}
			\view::set('mainoe',$mainoe);
		}
		foreach ($numArr as $key => &$val) {
			$val['isExist'] = 'N';
			if(in_array($val['factory'].$val['format'],$oeNumArr)){
				$val['isExist'] = 'Y';
			}
			$chkArr[] = $val; 
			if(in_array($val['factory'].$val['format'],$noArr)){
				unset($numArr[$key]);
			}
		}
		unset($val);
		$numArr = array_values($numArr);
		foreach($numArr as $k=>$v){
			
			if(!empty($v['nums'])){
				$hasCount++;
				foreach($v['nums'] as $kk=>$vv){
					$numUnikeyArr[$vv['unikey']]['keys'][$k] = $kk;
					$numUnikeyArr[$vv['unikey']]['count']++;
					$numUnikeyArr[$vv['unikey']]['unikey'] = $vv['unikey'];
					$numUnikeyArr[$vv['unikey']]['orinumber'] = ($vv['factory']?$vv['factory'].':':'').$vv['number'];
				}
			}
		}
		if($numUnikeyArr){
			$sort = [];
			foreach($numUnikeyArr as $k=>$v){
				$sort['count'][$k] = $v['count'];
				$sort['unikey'][$k] = $v['unikey'];
			}
			array_multisort($sort['count'], SORT_DESC, $sort['unikey'], SORT_ASC, $numUnikeyArr);
		}
		$allPicEmpty = count(array_filter($numArr, function($item) {
			return !empty($item['pic']);
		})) === 0;
		$allParaEmpty = count(array_filter($numArr, function($item) {
			return !empty($item['para']);
		})) === 0;
		$allExistEmpty = count(array_filter($numArr, function($item) {
			return $item['isExist'] == 'N';
		})) === 0;

		\view::set('allExistEmpty',$allExistEmpty);
		\view::set('allPicEmpty',$allPicEmpty);
		\view::set('allParaEmpty',$allParaEmpty);
		\view::set('numCount', count($numArr));
		\view::set('hasCount', $hasCount);
		\view::set('numUnikeyArr', array_values($numUnikeyArr));
		\view::set('numArr', $numArr);
		\view::set('req', $req);
		\view::set('chkArr',$chkArr);
		\view::set('noArr',$noArr);
		\view::put('work/compareNumByYiparts2');
	}


	//宜配数据比较
	function chkNumByYiparts(){
		$req = \mvc::$req;
		$work = new work();
		$numArr = $work->chkNumByYiparts($req);
		\view::set('numArr', $numArr);
		\view::set('req', $req);
		\view::put();
	}
	

	function modelByoknum(){
		$req = \mvc::$req;
		$carmodel = new carmodel();
		$modArr = $carmodel->getModelInfo($req['mm_id']);
		
		$ypApi = new ypApi();
		$res = $ypApi->Get('tcd/artNumber', $req);
		$artArr = $res['status']? $res['data']: [];
		\view::set('artArr', $artArr);
		\view::set('modArr', $modArr);
		\view::put();
	}

	/**
	 * @method 审核询源明细
	 * @author zhengweihua 
	 * @copyright 2024-12-12
	 */
	function checkAskItem()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->checkAskItem(explode(',', $req['ids']), $req);
		$this->successJson($data);
	}

	function saveAskSup()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->saveAskSup($req);
		$this->successJson($data);
	}

	function task()
	{
		$work = new work();
		$tjArr = $work->getBaseTj();
		\view::set('tjArr', $tjArr);
        \view::put();
	}

	/*
	 * @method 导出解决方案
	 * @author zhengweihua 
	 * @copyright 2024-12-13
	 */
	public function exportSolution($url,$query,$fields,$keyField,$keys,$searchoptions,$pwcode='',$page=1,$pagesize=2147483647,$callback=null)
	{
		ini_set('memory_limit', \mvc::$cfg['export_memory_limit']);
		set_time_limit(\mvc::$cfg['export_time_limit']);
		
		preg_match('/(\w+)\/action/i',str_replace('\\','/',__DIR__),$m);
		$path_info = '/'. explode($m[1].'/',$url)[1];

        parse_str(html_entity_decode($query), $post);
       
        list($class,$method,$uri_params,$req,$reqUriValues) = \mvc::parseurl($path_info);
		if($req){
		    foreach ($req as $k=>$v){
		        $post[$k] = $v;
		    }
		}
		\mvc::$req = [];
		if(strpos($url,'?')){
		    parse_str(html_entity_decode(explode('?',$url)[1]), \mvc::$req);
		}
	    foreach ($post as $k=>$v){
	        \mvc::$req[$k] = $v;
	    }	
        $req = \mvc::$req;
		//前置条件
		$rules = $this->urlRulesToWhere($req);
		$work = new work();
		$work->exportSolution($req, $rules);

	}

	/**
	 * @method 检测数据单转成其他单据
	 * @author zhengweihua 
	 * @copyright 2024-12-20
	 */
	public function chkDataToOth()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->chkDataToOth($req);
		\view::set('data',$data);
		$html = \view::fetch();
		$this->successJson(['html'=>$html]);
	}

	public function workPoesTask()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->workPoesTask($req);
		$this->successJson($data);
	}

	/**
	 * @method 导出询单
	 * @author zhengweihua 
	 * @copyright 2025-07-05
	 */
	public function exportTrade()
	{	
		ini_set('memory_limit', \mvc::$cfg['bigtable_memory_limit']);
		set_time_limit(0);
		$req = \mvc::$req;
		$trade = new \model\homecn\trade();
		$trade->exportTrade($req['was_id'], $req['u_id']);
	}

	
	//询单
	public function askList()
    {
		$req = \mvc::$req;
		\view::set('QUERY_STRING', $_SERVER['QUERY_STRING']);
		\view::set('req', $req);
		\view::put();
    }
	
	public function askItemList()
    {
		$req = \mvc::$req;
		if($req['was_id']){
			$work = new work();
			$data = $work->getAskList($req, []);
			foreach ($data['rows'] as &$val) {
				$val['ok_count_rate'] = $val['ok_count']? round($val['ok_count']/$val['item_count']*100,1):'';
				$val['cost_ok_count_rate'] = $val['cost_ok_count']? round($val['cost_ok_count']/$val['item_count']*100,1):'';
				$val['poe_count_rate'] = $val['poe_count']? round($val['poe_count']/$val['item_count']*100,1):'';
			}
			unset($val);
			\view::set('dataItem', $data['rows'][0]??[]);
		}
		\view::set('QUERY_STRING', $_SERVER['QUERY_STRING']);
		\view::set('proFromSelect', $work->proFromSelect);
		\view::set('req', $req);
		\view::put();
    }

	//询单列表
	public function getAskItemList()
	{
		$req = \mvc::$req;
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = explode(',', $req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getAskItemList($req, $rules);
		$this->successJson($data);
	}

	//批量改价
	function changeAnyAskPrice()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->changeAnyAskPrice(explode(',', $req['ids']), $req);
		$this->successJson($data);
	}

	
	//检测询单项价格
	function getAskItemPrice()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->getAskItemRefPrice($req['wai_id']);
		$this->successJson($data);
	}



	//询单
	public function getAskList()
	{
		$req = \mvc::$req;
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = explode(',', $req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getAskList($req, $rules);
		$this->successJson($data);
	}

	//询单详情
	public function askDes()
    {
		$req = \mvc::$req;
		$work = new work();
		$data = $work->getAskDes($req['was_id']);
		\view::set('data', $data);
		\view::put();
    }

	public function saveAskDetail()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->saveAskDetail($req['was_id'], $req);
		$this->successJson($data);
	}

	public function numToWorkOrder()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->numToWorkOrder($req);
		$this->successJson($data);
	}

	public function askItemToWorkOrder()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->askItemToWorkOrder(explode(',', $req['ids']));
		$this->successJson($data);
	}


	/**
	 * @param  [type] $url
	 * @param  [type] $query
	 * @param  [type] $fields
	 * @param  [type] $keyField
	 * @param  [type] $keys
	 * @param  [type] $searchoptions
	 * @param  string $pwcode
	 * @param  int    $page
	 * @param  int    $pagesize
	 * @method 数据单导出
	 * @author zhengweihua 
	 * @copyright 2025-05-16
	 */
	public function dataItemExport($url,$query,$fields,$keyField,$keys,$searchoptions,$pwcode='',$page=1,$pagesize=2147483647)
	{
		ini_set('memory_limit', \mvc::$cfg['export_memory_limit']);
		set_time_limit(\mvc::$cfg['export_time_limit']);
		
		preg_match('/(\w+)\/action/i',str_replace('\\','/',__DIR__),$m);
		$path_info = '/'. explode($m[1].'/',$url)[1];
		
        $fields = html_entity_decode($fields);
        $arr1 = explode(',',$fields);
        $fields = [];
        foreach($arr1 as $k=>$v){
            $arr2 = explode('=>',$v);
            $fields[$arr2[0]] = $arr2[1];
        }
        parse_str(html_entity_decode($query), $post);
        
        if(!\p::isAdmin() && !in_array($url,\mvc::$cfg['export_record_max_urls'])){
			if ($pwcode != '') {
				if ($pwcode == 'ALL') {

				} else {
					$pagesize = \p::fieldval($pwcode, 'export_limit');
				}
            } else {
				$pagesize = \mvc::$cfg['export_record_limit'];
			}
        }
        if(empty($pagesize)) $pagesize = \mvc::$cfg['export_record_limit'];
        $post['page'] = 1;
        $post['rows'] = $pagesize;
        list($class,$method,$uri_params,$req,$reqUriValues) = \mvc::parseurl($path_info);
		if($req){
		    foreach ($req as $k=>$v){
		        $post[$k] = $v;
		    }
		}
		\mvc::$req = [];
		if(strpos($url,'?')){
		    parse_str(html_entity_decode(explode('?',$url)[1]), \mvc::$req);
		}
		$_hasJsonFields = [];
        if(!empty($post['_hasJsonFields'])){
    		$_hasJsonFields = explode(',',$post['_hasJsonFields']);
        }
	    foreach ($post as $k=>$v){
	        if(in_array($k,$_hasJsonFields)) $v = json_decode(urldecode(base64_decode($v)), true);
	        \mvc::$req[$k] = $v;
	    }

		$req = \mvc::$req;
		//前置条件
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = formatNums($req['numbers']);
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
		$work = new work();
		$data = $work->getDataItemList($req, $rules);
		//导出
		// dd($data,$fields);die;
		$res = $work->dataItemExport($fields,$data['rows']);
		$this->successJson($res);
	}


	public function tcdMfaList()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->tcdMfaList($req);
		$this->successJson($data);
	}

	public function tcdSupGaByMfa()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->tcdSupGaByMfa($req);
		$this->successJson($data);
	}

	//tcd产品统计
	public function tcdGaSupTj()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->tcdGaSupTj($req);
		$this->successJson($data);
	}

	//tcd产品列表
	public function tcdGaSupArtList()
	{
		$req = \mvc::$req;
		$work = new work();
		$data = $work->tcdGaSupArtList($req);
		$this->successJson($data);
	}
}