| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | <?phpnamespace App\Service\Box;use App\Model\Box;use App\Model\BoxDetail;use App\Model\Header_ext;use App\Model\Orders;use App\Model\OrdersProduct;use App\Service\Service;/** * 包装相关工厂模式 * @package App\Models */class BoxHookService extends Service{    protected static $instance;    protected static $box_header;    protected static $box_detail_header;    public function __construct(){        self::$box_header = Header_ext::where('type','box')->pluck('value','key')->toArray();        self::$box_detail_header = Header_ext::where('type','box_detail')->pluck('value','key')->toArray();    }    public static function getInstance(): self    {        if (self::$instance == null) {            self::$instance = new BoxHookService();        }        return self::$instance;    }    /**     * 包装单新增     * @param $data     * @return array     */    public function boxInsert($data){        $box = new Box();        if(!isset($data['order_no'])||empty($data['order_no'])) $data['order_no'] = $this->setOrderNo();        if(!isset($data['out_order_no'])) return [false,'out_order_no is not exist'];//        if(!isset($data['top_id'])) return [false,'top_id is not exist'];//        if(!isset($data['num'])) return [false,'num is not exist'];        list($status,$box) = $this->dealBox($box,$data);        if(!$status) return [false,$box];        $box->save();        list($status,$msg) =  $this->boxDetailInsert($data);        if(!$status) return [false,$msg];        return [true,$box];    }    /**     * @param $box     * @param $data     * @return mixed     */    public function dealBox($box,$data){        $box->order_no = $data['order_no'];        $box->out_order_no = $data['out_order_no'];//        $box->top_id = $data['top_id'];//        $box->num = $data['num'];        $box->ext_1 = isset($data['ext_1']) ? $data['ext_1'] : '';        $box->ext_2 = isset($data['ext_2']) ? $data['ext_2'] : '';        $box->ext_3 = isset($data['ext_3']) ? $data['ext_3'] : '';        $box->ext_4 = isset($data['ext_4']) ? $data['ext_4'] : '';        $box->ext_5 = isset($data['ext_5']) ? $data['ext_5'] : '';        $box->top_order_no = $data['top_order_no'];        $box->shipment_order_no = isset($data['shipment_order_no'])? $data['shipment_order_no'] : '';        return [true,$box];    }    /**     * 包装单详情新增     * @param $data     * @return array     */    public function boxDetailInsert($data){        $order_no = $data['order_no'];        $out_order_no = $data['out_order_no'];        $box_detail = new BoxDetail(['channel'=>$order_no]);        if(!isset($data['detail'])||empty($data['detail'])) return [true,''];        $insert = $data['detail'];        $top_order_no = $data['top_order_no'];        list($status,$insert) = $this->dealBoxDetail($insert,$order_no,$out_order_no,$top_order_no);        if(!$status) return [false,$insert];        $box_detail->insert($insert);        return [true,''];    }    /**     * 包装单详情数据处理     * @param $data     * @return array     */    public function dealBoxDetail($data,$order_no,$out_order_no,$top_order_no){        $insert = [];        $time = time();        foreach ($data as $v){            if(!isset($v['top_id'])) return [false,'top_id is not exist'];//            if(!isset($v['code'])) return [false,'code is not exist'];//            if(!isset($v['title'])) return [false,'title is not exist'];//            if(!isset($v['type'])) return [false,'type is not exist'];            if(!isset($v['num'])) return [false,'type is not exist'];            $insert[] = [                'order_no' => $order_no,                'out_order_no' => $out_order_no,                'top_id' => $v['top_id'],                'code' => '',                'title' => '',                'num' => $v['num'],                'type' => isset($v['type'])?$v['type'] : 1,                'crt_time' => $time,                'upd_time' => $time,                'top_order_no' => $top_order_no,                'box_type' => $v['box_type'],                'ext_1' => isset($v['ext_1']) ? $v['ext_1'] : '',                'ext_2' => isset($v['ext_2']) ? $v['ext_2'] : '',                'ext_3' => isset($v['ext_3']) ? $v['ext_3'] : '',                'ext_4' => isset($v['ext_4']) ? $v['ext_4'] : '',                'ext_5' => isset($v['ext_5']) ? $v['ext_5'] : '',                'team_id' => isset($v['team_id']) ? $v['team_id'] : '',                'shipment_order_no' => isset($v['shipment_order_no']) ? $v['shipment_order_no'] : '',            ];        }        return [true,$insert];    }    /**     * @return string     */    public function setOrderNo(){        return date('YmdHis').rand(1000,9999);    }    /**     * @param $data     * @return array     */    public function boxDetail($data){//        var_dump($data);        if(isset($data['top_order_no'])) $top_order_no = $data['top_order_no'];        else $top_order_no = Box::where('order_no',$data['order_no'])->where('del_time',0)->value('top_order_no');        $box = new BoxDetail(['channel'=>$top_order_no]);//        $list = [];        $box = $box->where('order_no',$data['order_no'])->where('del_time',0);        if(isset($data['id'])) {            $box = $box->where('top_id',$data['id']);        }        if(isset($data['order_no'])){            $box = $box->where('order_no',$data['order_no']);        }//        var_dump($box->toSql());        $box = $box->get()->toArray();//        var_dump($box);die;        return [true,$box];    }    /**     * @param $order_no     * @return array     */    public function delBox($order_no){        $box = Box::where('del_time',0)->where('order_no',$order_no)->first();        if(empty($box)) return [];        $boxDetail = new BoxDetail(['channel'=>$box->top_order_no]);//        $list = [];        $list = $boxDetail->where('order_no',$order_no)->where('del_time',0)->select('id','top_id','num','ext_1','ext_2','ext_3','ext_4','ext_5','out_order_no','box_type')->get()->toArray();        $boxDetail->where('order_no',$order_no)->where('del_time',0)->update([            'del_time' => time()        ]);        $box->del_time = time();        $box->save();        return $list;    }//    /**//     * @param $data//     * @return array//     *///    public function boxDetail($data){//        $order_no = $data['order_no'];////        $box = new BoxDetail(['channel'=>$order_no]);////        $list = $this->limit($box,'*',$data);////        return [true,$list];//    }}
 |