'收货单', self::two => '发货单', self::three => '采购单', self::four => '销售订单', self::five => '施工单', ]; const TYPE_ONE = 1;//通过 const TYPE_TWO = 2;//不通过 public static $opt_case = [ self::four => 'confirmSalesOrder' ]; public static $record = [ ]; public function confirmSalesOrder($data){ $model = SalesOrder::where('id',$data['id'])->where('del_time',0)->first(); if($data['type'] == self::TYPE_ONE){ if($model->state == SalesOrder::State_one) return [false,'已锁定,操作失败!']; $model->state = SalesOrder::State_one; }else{ if($model->state == SalesOrder::State_zero) return [false,'未锁定,操作失败!']; $model->state = SalesOrder::State_zero; } $model->save(); return [true,$model]; } public function checkAll($data,$user){ if(empty($data['id']) || empty($data['opt_case']) || empty($data['type'])) return [false,'必传参数不能为空或者参数值错误!']; //具体方法 $function = self::$opt_case[$data['opt_case']]; try{ DB::beginTransaction(); //更新单据的状态 从待审变成已审核 list($bool,$msg) = $this->$function($data); if(! $bool){ DB::rollBack(); return [false, $msg]; } DB::commit(); return [true, '']; }catch (\Throwable $exception){ DB::rollBack(); return [false, $exception->getMessage()]; } } public function createRecordAndInventory($data = []){ if(empty($data['order_number']) || empty($data['type']) || empty($data['opt_case']) || ! isset(self::$opt_case[$data['opt_case']])) return [false,300]; //具体方法 $function = self::$opt_case[$data['opt_case']]; try{ DB::beginTransaction(); //更新单据的状态 $bool = $this->$function($data); if($bool && $data['type'] == self::TYPE_ONE && isset(self::$record[$data['opt_case']])){ //审批通过 创建流水 $function_record = self::$record[$data['opt_case']]; $boolean = $this->$function_record($data); if(! $boolean) { //创建流水失败 数据库回滚 DB::rollBack(); return [false, 300]; } //更新库存 $inventory = new InventoryService(); $boole = $inventory->changeInventory($data); if(! $boole){ DB::rollBack(); return [false, 300]; } } DB::commit(); return [true, 200]; }catch (\Throwable $exception){ DB::rollBack(); return [false, 201]; } } }