ci = &get_instance(); $this->fullorder=new Model_fullorder(); $this->fullordersmt=new Model_fullordersmt(); $this->warehouse=new Model_warehouse(); $this->headorder=new Model_headorder(); $this->typeclass=new Model_typeclass(); $this->ci->load->library('order_process'); } /*** * action str * order model order */ public function handle($action,$ordernumber){ switch($action){ case "add": return $this->add($ordernumber); break; case "update": $this->update($ordernumber); break; case "delete": $this->delete($ordernumber); break; } } public function add($orderinfo){ $where='1=1'; try { $thisdata=$this->fullorder->find('orderinfo='.$orderinfo); if (!$thisdata) { $thisdata=$this->fullordersmt->find('orderinfo='.$orderinfo); } if (!$thisdata) { return false; } $this->ci->db->trans_begin(); $headOrder_id=$this->headorder->setOrder($thisdata);//model insert if (!$headOrder_id) { throw new Exception('something wrong'); } $whlable=explode('|', trim($thisdata['whlabel'], "|")); $whlable=array_map(function ($v) { return substr($v, 0, (strpos($v, '-'))); }, $whlable); if (stripos($thisdata['fpdata'], ';') !== false) { $fpdata = explode(';', rtrim($thisdata['fpdata'], ';')); foreach ($fpdata as $k=>$v) { $fpdata[$k] = explode('|', $v); } } $typeClass=$this->typeclass->find_all(); $n=1; foreach ($fpdata as $k=>$fp) { if (stripos($fp[0], '128')>-1||stripos($fp[1], 'Wigs')>-1) {//头套 $sku=$this->sortsku($typeClass, $fp); $skustr=""; foreach ($sku as $v) { if (isset($v['zh'])&&!empty($v['zh'])) { $skustr.=$v['zh'].' '; } } $i=$fp[2]; for ($i=$fp[2];$i>0;$i--) { $orders[]=[ 'fpdata'=>$fp[0], 'warehouse'=>$thisdata['warehouse'], 'whlabel'=>$whlable[$k], 'number'=>$thisdata['number'].'-'.$n, 'orderinfo'=>$thisdata['orderinfo'].'-'.$n, 'p_order'=>$thisdata['orderinfo'], 'p_number'=>$thisdata['number'], 'orderremarks'=>$thisdata['orderremarks'],//订单品名 'product'=>$thisdata['product'], 'sku'=>json_encode($sku), 'shipremarks'=>$skustr, ]; $n++; } } } if (!empty($orders)) { foreach ($orders as $order) { $process=$this->ci->order_process->createOrderProcess($order); } } if ($this->ci->db->trans_status() == false) { throw new Exception('something wrong!'); } $this->ci->db->trans_commit(); return true; }catch(Exception $e){ $this->ci->db->trans_rollback(); return false; } } public function update($orderinfo){ $flag=false; $where='1=1'; // $orderinfo=22007131647400; $thisdata=$this->fullorder->find('orderinfo='.$orderinfo); if(!$thisdata){ $thisdata=$this->fullordersmt->find('orderinfo='.$orderinfo); } if(!$thisdata){ return false; } $query=$this->ci->db->select('a.whlabel,a.p_order,count(a.whlabel) as num') ->from('headorder_item as a') ->join('process as b',' a.`id`=b.`order_id`','inner') ->join('flow_status as c','b.`status_id`=c.id') ->where('a.p_order='.$orderinfo) ->where('b.state="'.Model_Process::STATUS_PROCESSING.'"') ->group_by('a.whlabel') ->order_by('a.whlabel ASC','c.order ASC') ->get(); $headOrder=$query->result_array(); $headOrder=array_combine(array_column($headOrder,'whlabel'),$headOrder); $whlable=explode('|',trim($thisdata['whlabel'],"|")); $whlable=array_map(function($v){ return substr($v,0,(strpos($v,'-'))); },$whlable); if(stripos($thisdata['fpdata'],';') !== false) { $fpdata = explode(';',rtrim($thisdata['fpdata'],';')); foreach ($fpdata as $k=>$v) { $fpdata[$k] = explode('|',$v); } } $n=$this->ci->db ->from('headorder_item') ->where('p_order='.$orderinfo) ->count_all_results(); $typeClass=$this->typeclass->find_all(); foreach ($fpdata as $k=>$fp) { if(stripos($fp[0],'128')>-1||stripos($fp[1],'Wigs')>-1){//头套 $label=$whlable[$k]?$whlable[$k]:''; if(!isset($headOrder[$label])||empty($headOrder[$label])){//新增 $add_num=$fp[2]; $this->additem($fp,$typeClass,$thisdata,$add_num,$label,$n); $n+=$add_num; }else{ $c_num=$fp[2]; $l_num=$headOrder[$label]['num']; //比较数量 多 增 if($c_num>$l_num){ $add_num=$c_num-$l_num; $this->additem($fp,$typeClass,$thisdata,$add_num,$label,$n); $n+=$add_num; }elseif($c_num<$l_num){ $del_num=$l_num-$c_num; $this->delitem($label,$del_num); }else{//不做任何操作 continue; } } } } return true; } private function additem($fp,$typeClass,$thisdata,$add_num,$label,$n){ $sku=$this->sortsku($typeClass,$fp); $skustr=""; foreach($sku as $v){ if(isset($v['zh'])&&!empty($v['zh'])){ $skustr.=$v['zh'].' '; } } for($i=$n;$i<$n+$add_num+1;$i++){ $n+=1; $orders[]=[ 'fpdata'=>$fp[0], 'warehouse'=>$thisdata['warehouse'], 'whlabel'=>$label, 'number'=>$thisdata['number'].'-'.$n, 'orderinfo'=>$thisdata['orderinfo'].'-'.$n, 'p_order'=>$thisdata['orderinfo'], 'p_number'=>$thisdata['number'], 'orderremarks'=>$thisdata['orderremarks'],//订单品名 'product'=>$thisdata['product'], 'sku'=>json_encode($sku), 'shipremarks'=>$skustr, ]; } //addprocess 完成 foreach($orders as $order){ $this->ci->order_process->createOrderProcess($order); } return true; } private function delitem($label,$num){ $query=$this->ci->db->select('a.id,a.whlabel,a.p_order,b.id as process_id,c.code,c.name,c.order') ->from('headorder_item as a') ->join('process as b',' a.`id`=b.`order_id`','inner') ->join('flow_status as c','b.`status_id`=c.id') ->where('a.whlabel='.$label) ->where('b.state="'.Model_Process::STATUS_PROCESSING.'"') ->order_by('c.order ASC') ->limit($num) ->get(); $del_items=$query->result_array(); return $this->db->where_in('id',array_column($del_items,'process_id'))->update('process',[ 'state'=>Model_Process::STATUS_CANCELED, ]); } private function sortsku($typeClass,$fp){ $arr = explode(',',$fp[0]); $length=$arr[0]; $arr1=explode('-',$arr[1]); array_push($arr1,$length); $ids=array_column($typeClass,'id'); $typeClass=array_combine($ids,$typeClass); foreach($arr1 as $v){ if(!empty($v)&&isset($typeClass[$v])&&!empty($typeClass[$v])){ $sku[$v]=$typeClass[$v]; } } // $cptt = array(16=>128,18=>'',6=>30,10=>72,9=>'');//头套 $pm = array(13=>'',22=>'',8=>'',15=>'',18=>'','100'=>'','dc'=>'','c'=>'',14=>'',12=>'',25=>'',26=>'',27=>'',10=>'',6=>'',9=>'',999=>'',9999=>'');//品名顺序 $res=[]; $sku=array_combine(array_column($sku,'classid'),$sku); foreach ($pm as $k => $v) { if(isset($sku[$k])&&!empty($sku[$k])){ $res[]=$sku[$k]; } } return $res; } public function delete($orderinfo){ $query=$this->ci->db->select('a.id,a.whlabel,a.p_order,b.id as process_id,c.code,c.name,c.order') ->from('headorder_item as a') ->join('process as b',' a.`id`=b.`order_id`','inner') ->join('flow_status as c','b.`status_id`=c.id') ->where('a.p_order='.$orderinfo) ->where('b.state="'.Model_Process::STATUS_PROCESSING.'"') ->order_by('c.order ASC') ->get(); $del_items=$query->result_array(); return $this->db->where_in('id',array_column($del_items,'process_id'))->update('process',[ 'state'=>Model_Process::STATUS_CANCELED, ]); } }