123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
- require_once APPPATH.'/models/Model_fullorder.php';
- require_once APPPATH.'/models/Model_fullordersmt.php';
- require_once APPPATH.'/models/Model_warehouse.php';
- require_once APPPATH.'/models/Model_headorder.php';
- require_once APPPATH.'/models/Model_typeclass.php';
- class Order_operation{
- var $ci;
- public function __construct()
- {
- $this->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,
- ]);
- }
- }
-
|