cqpCow пре 1 година
родитељ
комит
290a5d9791

+ 4 - 2
app/Model/Construction.php

@@ -21,10 +21,12 @@ class Construction extends UseScopeBaseModel
     ];
 
     const STATE_ZERO = 0;//未确认
-    const STATE_ONE = 1;//已确认
+    const STATE_ONE = 1;//待确认
+    const STATE_TWO = 2;//已确认
     public static $name = [
         self::STATE_ZERO => '未确认',
-        self::STATE_ONE => '已确认',
+        self::STATE_ONE => '待确认',
+        self::STATE_TWO => '已确认',
     ];
     const range_function = 'constructionRange';
 }

+ 4 - 2
app/Model/InvoiceOrder.php

@@ -9,11 +9,13 @@ class InvoiceOrder extends UseScopeBaseModel
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
     const STATE_ZERO = 0;//未确认
-    const STATE_ONE = 1;//已确认
+    const STATE_ONE = 1;//待确认
+    const STATE_TWO = 2;//已确认
     const prefix = 'FH';
     public static $name = [
         0 => '未确认',
-        1 => '已确认',
+        1 => '待确认',
+        2 => '已确认',
     ];
 
     const range_function = 'invoiceRange';

+ 8 - 4
app/Model/PurchaseOrder.php

@@ -9,13 +9,17 @@ class PurchaseOrder extends UseScopeBaseModel
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
     const STATE_ZERO = 0;//未确认
-    const STATE_ONE = 1;//未入库
-    const STATE_TWO = 2;//已入库
+    const STATE_ONE = 1;//待确认
+    const STATE_TWO = 2;//未入库
+    const STATE_Three = 3;//待入库
+    const STATE_Four = 4;//已入库
     const prefix = 'CG';
     public static $name = [
         self::STATE_ZERO => '未确认',
-        self::STATE_ONE => '未入库',
-        self::STATE_TWO => '已入库',
+        self::STATE_ONE => '待确认',
+        self::STATE_TWO => '未入库',
+        self::STATE_Three => '待入库',
+        self::STATE_Four => '已入库',
     ];
 
     const Order_type_one = 1;//总社采购

+ 4 - 2
app/Model/ReturnExchangeOrder.php

@@ -27,10 +27,12 @@ class ReturnExchangeOrder extends UseScopeBaseModel
     ];
 
     const State_zero = 0;//未确认
-    const State_one = 1;//已确认
+    const State_one = 1;//待确认
+    const State_two = 2;//已确认
     public static $state = [
         self::State_zero => '未确认',
-        self::State_one => '已确认',
+        self::State_one => '待确认',
+        self::State_two => '已确认',
     ];
 
     public static $prefix = [

+ 16 - 12
app/Model/SalesOrder.php

@@ -31,19 +31,23 @@ class SalesOrder extends UseScopeBaseModel
     ];
 
     //安装件
-    const State_zero = 0;//未派单
-    const State_one = 1;//已派销售
-    const State_two = 2;//已派公司或分社
-    const State_three = 3;//已下施工单
-    const State_four = 4;//退换货
-    const State_five = 5;//完结
+    const State_zero = 0;//未确认
+    const State_one = 1;//待确认
+    const State_two = 2;//已确认
+    const State_three = 3;//已派销售
+    const State_four = 4;//已派总设或分社
+    const State_five = 5;//已下施工单
+    const State_six = 6;//退换货
+    const State_seven = 7;//完结
     public static $state = [
-        self::State_zero => '未派单',
-        self::State_one => '已派销售',
-        self::State_two => '已派总设或分社',
-        self::State_three => '已下施工单',
-        self::State_four => '退换货',
-        self::State_five => '完结',
+        self::State_zero => '未确认',
+        self::State_one => '待确认',
+        self::State_two => '已确认',
+        self::State_three => '已派销售',
+        self::State_four => '已派总设或分社',
+        self::State_five => '已下施工单',
+        self::State_six => '退换货',
+        self::State_seven => '完结',
     ];
 
     //快递件

+ 362 - 58
app/Service/CheckService.php

@@ -5,6 +5,7 @@ namespace App\Service;
 use App\Model\Construction;
 use App\Model\ConstructionProductInfo;
 use App\Model\Depart;
+use App\Model\Employee;
 use App\Model\InOutRecord;
 use App\Model\InvoiceOrder;
 use App\Model\InvoiceOrderInfo;
@@ -24,6 +25,7 @@ use App\Model\SeeRange;
 use App\Model\Setting;
 use App\Model\Storehouse;
 use App\Model\Supplier;
+use App\Service\Oa\OaService;
 use Illuminate\Support\Facades\DB;
 
 class CheckService extends Service
@@ -36,16 +38,18 @@ class CheckService extends Service
     const five = 5; //施工单
     const six = 6; //退换货单
     const seven = 7; //采购单确认
+    const eight = 8; //合同确认
 
     //中文对照
     public $map = [
         self::one => '收货单',
         self::two => '发货单',//确认后出库
         self::three => '采购单',//确认后入库
-        self::four => '合同', // 合同完结
+        self::four => '合同', // 安装件 合同完结
         self::five => '施工单',//确认后出库
         self::six => '退换货单',//确认后出库或出库入库
         self::seven => '采购单确认',
+        self::eight => '合同确认',
     ];
 
     //入库操作
@@ -61,6 +65,21 @@ class CheckService extends Service
 
     const TYPE_ONE = 1;//通过
     const TYPE_TWO = 2;//不通过
+    const TYPE_THREE = 3;//通过后驳回
+
+    //改为待审核状态
+    public static $opt_1case = [
+        self::two => 'waitInvoice',//发货单
+        self::three => 'waitPurchase',//采购单 入库
+        self::five => 'waitConstruction',//施工单
+        self::six => 'waitReturnExchange',//退换货单
+        self::seven => 'waitPurchaseConfirm', //采购单确认
+        self::eight => 'waitSales', // 合同安装件 合同确认
+    ];
+
+    public static $finished = [
+        self::four => 'confirmSalesOrder', // 合同 安装件 合同完结
+    ];
 
     //单据操作
     public static $opt_case = [
@@ -69,7 +88,7 @@ class CheckService extends Service
         self::five => 'confirmConstruction',
         self::six => 'confirmReturnExchangeOrder',
         self::seven => 'confirmPurchaseOrderState',
-        self::four => 'confirmSalesOrder',
+        self::eight => 'confirmSales', // 合同 安装件 合同确认
     ];
 
     //单据库存流水
@@ -80,20 +99,115 @@ class CheckService extends Service
         self::six => 'recordReturnExchangeOrder'
     ];
 
+    //自动生成
     public static $create = [
         self::seven => 'createPurchaseOrderSales', //分社合同生成
         self::four => 'createPurchaseOrder', // 派给分社的合同确认以后生成虚拟采购单
     ];
 
-    public function confirmInvoiceOrder($data){
+    //审核通过后 驳回
+    public static $opt_case_reject = [
+        self::four => 'reject_sales', // 合同
+        self::three => 'reject_purchase', //采购
+        self::five => 'reject_construction',//施工单
+        self::six => 'reject_return_exchange',//退换货
+    ];
+
+    //审核通过后 驳回 产生流水
+    public static $reject_record = [
+        self::five => 'reject_record_construction', //施工单驳回
+        self::three => 'reject_record_purchase', //采购
+        self::six => 'reject_record_return_exchange',//退换货
+    ];
+
+    //改为待审核---------------------------------
+    public function waitInvoice($data){
         $model = InvoiceOrder::where('id',$data['id'])
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '发货单不存在或已被删除'];
-        if($model->state != InvoiceOrder::STATE_ZERO) return [false, '请确认发货单状态,操作失败'];
+        if($model->state != InvoiceOrder::STATE_ONE) return [false, '请确认发货单状态,操作失败'];
 
         InvoiceOrder::where('del_time',0)->where('id',$data['id'])
             ->update(['state' => InvoiceOrder::STATE_ONE]);
+
+        return [true, $model->toArray()];
+    }
+    public function waitPurchaseConfirm($data){
+        $model = PurchaseOrder::where('id',$data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false,'采购单不存在或已被删除'];
+        if($model->state != PurchaseOrder::STATE_ZERO) return [false,'请确认采购单状态,操作失败'];
+
+        //待确认
+        PurchaseOrder::where('id',$data['id'])->update(['state' => PurchaseOrder::STATE_ONE]);
+        return [true, $model->toArray()];
+    }
+    public function waitPurchase($data){
+        $model = PurchaseOrder::where('id',$data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '采购订单不存在或已被删除'];
+        if($model->state != PurchaseOrder::STATE_TWO) return [false, '请确认采购订单状态,操作失败'];
+
+        //待入库
+        PurchaseOrder::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => PurchaseOrder::STATE_Three]);
+
+        return [true, $model->toArray()];
+    }
+    public function waitConstruction($data){
+        $model = Construction::where('id',$data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '施工单不存在或已被删除'];
+        if($model->state != Construction::STATE_ZERO) return [false, '请确认施工单状态,操作失败'];
+
+        //待确认
+        Construction::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => Construction::STATE_ONE]);
+
+        return [true, $model->toArray()];
+    }
+    public function waitReturnExchange($data){
+        $model = ReturnExchangeOrder::where('id',$data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '退换货单不存在或已被删除'];
+        if($model->state != ReturnExchangeOrder::State_zero) return [false, '请确认退换货单状态,操作失败'];
+
+        //待确认
+        ReturnExchangeOrder::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => ReturnExchangeOrder::State_one]);
+
+        return [true, $model->toArray()];
+    }
+    public function waitSales($data){
+        $model = SalesOrder::where('id', $data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '合同不存在或已被删除'];
+        //安装件
+        if($model->state != SalesOrder::State_zero) return [false, '请确认合同状态,操作失败'];
+
+        SalesOrder::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => SalesOrder::State_one]);
+
+        return [true, $model->toArray()];
+    }
+    //改为待审核---------------------------------
+
+
+    public function confirmInvoiceOrder($data){
+        $model = InvoiceOrder::where('id',$data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '发货单不存在或已被删除'];
+        if($model->state != InvoiceOrder::STATE_ONE) return [false, '请确认发货单状态,操作失败'];
+
+        InvoiceOrder::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => InvoiceOrder::STATE_TWO]);
         SalesOrder::where('id',$model->sales_order_id)->update(['state' => SalesOrder::State2_one]);
 
         return [true, $model->toArray()];
@@ -135,9 +249,10 @@ class CheckService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false,'采购单不存在或已被删除'];
-        if(! empty($model->state)) return [false,'采购单已确认'];
+        if($model->state != PurchaseOrder::STATE_ONE) return [false,'请确认采购单状态,操作失败'];
 
-        PurchaseOrder::where('id',$data['id'])->update(['state' => PurchaseOrder::STATE_ONE]);
+        //未入库
+        PurchaseOrder::where('id',$data['id'])->update(['state' => PurchaseOrder::STATE_TWO]);
         return [true, $model->toArray()];
     }
 
@@ -146,10 +261,11 @@ class CheckService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '采购订单不存在或已被删除'];
-        if($model->state != PurchaseOrder::STATE_ONE) return [false, '请确认采购订单状态,操作失败'];
+        if($model->state != PurchaseOrder::STATE_Three) return [false, '请确认采购订单状态,操作失败'];
 
+        // 已出库
         PurchaseOrder::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => PurchaseOrder::STATE_TWO]);
+            ->update(['state' => PurchaseOrder::STATE_Four]);
 
         return [true, $model->toArray()];
     }
@@ -187,12 +303,17 @@ class CheckService extends Service
     }
 
     //todo
-    public function createPurchaseOrderSales($order, $user){
+    public function createPurchaseOrderSales($order){
         //没有供应商 不创建合同
         if(empty($order['supplier'])) return [true, ''];
         //总公司的采购单 不创建合同
-        $top_depart_id = $user['head'] ?? [];
-        if($top_depart_id['id'] == $order['top_depart_id']) return [true, ''];
+        $depart = Depart::where('del_time',0)
+            ->where('is_main',1)
+            ->where('parent_id',0)
+            ->first();
+        $head = 0;
+        if(! empty($depart)) $head = $depart->id;//总社
+        if($head == $order['top_depart_id']) return [true, ''];
         //分社公司的采购单 不向总供应商采购 不创建合同
         $is_create = Supplier::where('id',$order['supplier'])->value('is_main');
         if(empty($is_create)) return [true, ''];
@@ -264,11 +385,13 @@ class CheckService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '施工单不存在或已被删除'];
-        if($model->state != Construction::STATE_ZERO) return [false, '请确认施工单状态,操作失败'];
+        if($model->state != Construction::STATE_ONE) return [false, '请确认施工单状态,操作失败'];
 
+        //已确认
         Construction::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => Construction::STATE_ONE]);
-        SalesOrder::where('id',$model->sales_order_id)->update(['state' => SalesOrder::State_three]);
+            ->update(['state' => Construction::STATE_TWO]);
+        //已下施工
+        SalesOrder::where('id',$model->sales_order_id)->update(['state' => SalesOrder::State_five]);
 
         return [true, $model->toArray()];
     }
@@ -309,14 +432,14 @@ class CheckService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '退换货单不存在或已被删除'];
-        if($model->state != ReturnExchangeOrder::State_zero) return [false, '请确认退换货单状态,操作失败'];
+        if($model->state != ReturnExchangeOrder::State_one) return [false, '请确认退换货单状态,操作失败'];
 
         ReturnExchangeOrder::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => ReturnExchangeOrder::State_one]);
+            ->update(['state' => ReturnExchangeOrder::State_two]);
 
         if($data['data_type'] == ReturnExchangeOrder::Order_type){
             SalesOrder::where('id',$data['id'])->update([
-                'state' => SalesOrder::State_four
+                'state' => SalesOrder::State_six
             ]);
         }
 
@@ -386,20 +509,42 @@ class CheckService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '合同不存在或已被删除'];
+        //安装件
         if($model->state == SalesOrder::State_five) return [false, '请确认合同状态,操作失败'];
 
         SalesOrder::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => SalesOrder::State_five]);
+            ->update(['state' => SalesOrder::State_seven]);
+
+        return [true, $model->toArray()];
+    }
+
+    public function confirmSales($data){
+        $model = SalesOrder::where('id', $data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '合同不存在或已被删除'];
+        if($model->state != SalesOrder::State_one) return [false, '请确认合同状态,操作失败'];
+
+        //已确认
+        SalesOrder::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => SalesOrder::State_two]);
 
         return [true, $model->toArray()];
     }
 
     //总社派给分社的合同 完成生成虚拟采购单
-    public function createPurchaseOrder($order, $user){
+    public function createPurchaseOrder($order){
+        //快递件
+        if($order['sales_order_type'] == SalesOrder::Order_type_two) return [true,''];
+
         //不是总公司的合同
-        $top_depart_id = $user['head'] ?? [];
-        $top_depart_id = $top_depart_id['id'] ?? 0;
-        if($top_depart_id != $order['top_depart_id']) return [true, ''];
+        $depart = Depart::where('del_time',0)
+            ->where('is_main',1)
+            ->where('parent_id',0)
+            ->first();
+        $head = 0;
+        if(! empty($depart)) $head = $depart->id;//总社
+        if($head != $order['top_depart_id']) return [true, ''];
 
         $see = SeeRange::where('del_time',0)
             ->where('data_id',$order['id'])
@@ -410,7 +555,7 @@ class CheckService extends Service
         $depart_id = $see->param_id;//指派的分社
 
         //总社指派给自己
-        if($depart_id == $top_depart_id) return [true, ''];
+        if($depart_id == $head) return [true, ''];
 
         //获取指派分社时候的金额
         $fee = SalesOrderOtherFee::where('del_time',0)
@@ -420,7 +565,7 @@ class CheckService extends Service
         $fee = $fee->toArray();
 
         $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrderSpecial::prefix);
-        $storehouse = Storehouse::where('depart_id',$top_depart_id)->value('id');
+        $storehouse = Storehouse::where('depart_id',$head)->value('id');
         $product = SalesOrderProductInfo::where('del_time',0)
             ->where('sales_order_id',$order['id'])
             ->select('product_id','number','retail_price')
@@ -442,10 +587,10 @@ class CheckService extends Service
         $model = new PurchaseOrderSpecial();
         $model->order_number = $order_number;
         $model->sales_order_id = $order['id'];
-        $model->depart_id = $top_depart_id;
-        $model->top_depart_id = $top_depart_id;
-        $model->crt_id = $user['id'];
-        $model->purchase_id = $user['id'];
+        $model->depart_id = $head;
+        $model->top_depart_id = $head;
+        $model->crt_id = Employee::SPECIAL_ADMIN;
+        $model->purchase_id = Employee::SPECIAL_ADMIN;
         $model->purchase_total = $fee['other_fee_1'] ?? 0;
         $model->storehouse_id = $storehouse ?? 0;
         $model->save();
@@ -472,58 +617,76 @@ class CheckService extends Service
         return [true, ''];
     }
 
+    public function reject_sales($data){
+        $model = SalesOrder::where('id', $data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '合同不存在或已被删除'];
+        //安装件
+        if($model->state != SalesOrder::State_two) return [false, '请确认合同状态,操作失败'];
+
+        SalesOrder::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => SalesOrder::State_zero]);
+
+        return [true, $model->toArray()];
+    }
+
     public function checkAll($data,$user){
-        if(empty($data['id']) || empty($data['opt_case'])) return [false,'必传参数不能为空或者参数值错误!'];
+        if(empty($data['id']) || empty($data['order_number'])|| empty($data['opt_case'])) return [false,'必传参数不能为空或者参数值错误!'];
 
-        //具体方法
-        $function = self::$opt_case[$data['opt_case']] ?? "";
-        $record = self::$record[$data['opt_case']] ?? "";
-        $create = self::$create[$data['opt_case']] ?? "";
+        list($status,$msg) = $this->limitingSendRequestBackgExpire($data['order_number'].$data['opt_case']);
+        if(! $status) return [false,$msg];
 
+        //单据状态改为待审批方法
+        $function = self::$opt_1case[$data['opt_case']] ?? '';
+        $function2 = self::$finished[$data['opt_case']] ?? '';
         try{
             DB::beginTransaction();
 
+            if($function2) {
+                list($bool,$msg) = $this->$function($data);
+                if($bool) {
+                    DB::commit();
+                    return [true, ''];
+                }else{
+                    DB::rollBack();
+                    return [false, $msg];
+                }
+            }
+
+            //更新单据的状态 从未审核变成待审核
             list($bool,$msg) = $this->$function($data);
 
             if(! $bool){
                 DB::rollBack();
                 return [false, $msg];
             }
-            $order = $msg;
 
-            if($record) {
-                //流水
-                $bool = $this->$record($data, $order);
-                if(! $bool) {
-                    DB::rollBack();
-                    return [false, $msg];
-                }
-                //库存
-                $bool = $this->changeInventory($data, $order, $user);
-                if(! $bool) {
-                    DB::rollBack();
-                    return [false, $msg];
-                }
-            }
+            //创建审批流
+            $args = [
+                'order_no' => $data['order_number'],
+                'menu_id' => $data['menu_id'] ?? 0,
+                'opt_case' => $data['opt_case'],
+                'order' => $msg,
+            ];
 
-            if($create) {
-                $bool = $this->$create($order, $user);
-                if(! $bool) {
-                    DB::rollBack();
-                    return [false, $msg];
-                }
-            }
+            $return_msg = '';
+
+            $oa = new OaService();
+            $bool = $oa->createOaOrder($args);
+            if(! $bool) $return_msg = '审批失败!';
 
             DB::commit();
+            if($return_msg) return [false,$msg];
             return [true, ''];
         }catch (\Throwable $exception){
             DB::rollBack();
-            return [false, $exception->getMessage().$exception->getLine()];
+            return [false, $exception->getMessage() . $exception->getFile(). $exception->getLine()];
         }
     }
 
     //更新库存
-    public function changeInventory($data,$order,$user){
+    public function changeInventory($data,$order){
         $number_symbol = "";
         if(in_array($data['opt_case'],self::$in_opt)){
             $number_symbol = ">";
@@ -579,7 +742,13 @@ class CheckService extends Service
 
         //是否锁定
         $lock = 0;
-        if($user['head']['id'] != $order['top_depart_id']) $lock = DB::table('depart_set')->where('top_depart_id',$order['top_depart_id'])->value('param_one');
+        $depart = Depart::where('del_time',0)
+            ->where('is_main',1)
+            ->where('parent_id',0)
+            ->first();
+        $head = 0;
+        if(! empty($depart)) $head = $depart->id;//总社
+        if($head != $order['top_depart_id']) $lock = DB::table('depart_set')->where('top_depart_id',$order['top_depart_id'])->value('param_one');
 
         $result = array_values($result);
         foreach ($result as $key => $value){
@@ -607,4 +776,139 @@ class CheckService extends Service
 
         return [true,''];
     }
+
+    //业务单据审批通过后 驳回 更新库存
+    public function changeInventoryReject($data){
+        $number_symbol = "<";
+        if(in_array($data['opt_case'],self::$in_opt)){
+            $number_symbol = "<";
+        }elseif (in_array($data['opt_case'],self::$out_opt)){
+            $number_symbol = ">";
+        }
+
+        //获取单据最新数据时间
+        $latest = InOutRecord::where('del_time',0)
+            ->where('order_number',$data['order_number'])
+            ->where('number',$number_symbol,0)
+            ->select('crt_time')
+            ->orderBy('crt_time', 'desc')
+            ->first();
+
+        $model = InOutRecord::where('del_time',0)
+            ->where('order_number',$data['order_number'])
+            ->where('number',$number_symbol,0)
+            ->select('storehouse_id',DB::raw("sum(number) as number"),'roll_film_id','roll_film_number')
+            ->groupby('roll_film_id','roll_film_number','storehouse_id');
+        if(! empty($latest)) {
+            $t = $latest->toArray();
+            $model->where('crt_time',$t['crt_time']);
+        }
+
+        $result = $model->get()->toArray();
+        if (empty($result)) return false;
+
+        foreach ($result as $value){
+            RollFilmInventory::where('roll_film_id',$value['roll_film_id'])
+                ->where('roll_film_number',$value['roll_film_number'])
+                ->where('storehouse_id',$value['storehouse_id'])
+                ->lockForUpdate()
+                ->update([
+                    'number' => DB::raw('number + ('. $value['number'] . ')'),
+                    'lock_number' => DB::raw('lock_number + ('. $value['number'] . ')')
+                ]);
+        }
+
+        return true;
+    }
+
+    public function createRecordAndInventory($data = []){
+        if(empty($data['id']) || empty($data['type']) || empty($data['opt_case'])) return [false, ''];
+
+        if($data['type'] == self::TYPE_THREE){
+            //通过后弃审
+            if(! isset(self::$opt_case_reject[$data['opt_case']])) return [false, ''];
+            //具体方法
+            $function = self::$opt_case_reject[$data['opt_case']];
+
+            //流水
+            $function2 = self::$reject_record[$data['opt_case']] ?? '';
+            try{
+                DB::beginTransaction();
+
+                //更新单据的状态
+                $bool = $this->$function($data);
+                if(! $bool){
+                    DB::rollBack();
+                    return [false, ''];
+                }
+                if($function2) {
+                    //流水
+                    $boolean = $this->$function2($data);
+                    if(! $boolean) {
+                        DB::rollBack();
+                        return [false, ''];
+                    }
+
+                    //库存
+                    $bool = $this->changeInventoryReject($data);
+                    if(! $bool){
+                        DB::rollBack();
+                        return [false, ''];
+                    }
+                }
+
+                DB::commit();
+                return [true, ''];
+            }catch (\Throwable $exception){
+                DB::rollBack();
+                return [false, $exception->getLine(). $exception->getMessage()];
+            }
+        }else{
+            //具体方法
+            $function = self::$opt_case[$data['opt_case']] ?? "";
+            $record = self::$record[$data['opt_case']] ?? "";
+            $create = self::$create[$data['opt_case']] ?? "";
+
+            try{
+                DB::beginTransaction();
+
+                list($bool,$msg) = $this->$function($data);
+
+                if(! $bool){
+                    DB::rollBack();
+                    return [false, $msg];
+                }
+                $order = $msg;
+
+                if($record) {
+                    //流水
+                    $bool = $this->$record($data, $order);
+                    if(! $bool) {
+                        DB::rollBack();
+                        return [false, $msg];
+                    }
+                    //库存
+                    $bool = $this->changeInventory($data, $order);
+                    if(! $bool) {
+                        DB::rollBack();
+                        return [false, $msg];
+                    }
+                }
+
+                if($create) {
+                    $bool = $this->$create($order);
+                    if(! $bool) {
+                        DB::rollBack();
+                        return [false, $msg];
+                    }
+                }
+
+                DB::commit();
+                return [true, ''];
+            }catch (\Throwable $exception){
+                DB::rollBack();
+                return [false, $exception->getMessage().$exception->getLine()];
+            }
+        }
+    }
 }

+ 8 - 7
app/Service/Oa/OaService.php

@@ -9,6 +9,7 @@ use App\Model\OaOrder;
 use App\Model\OaOrderSub;
 use App\Model\OaOrderSubEmployee;
 use App\Model\OaSub;
+use App\Service\CheckService;
 use Illuminate\Support\Facades\DB;
 use App\Service\Service;
 
@@ -181,13 +182,13 @@ class OaService extends Service
         $order_no = $data['order_no'];
         $type = isset($data['type']) ? $data['type'] : 0;
 
-        $list = Oa::from('oa as o')
-            ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
-            ->select('os.sort', 'os.type', 'os.employee_id')
-            ->where('o.menu_id', $menu_id);
-        if(!empty($type)) $list = $list->where('o.type',$type);
-        $list = $list->orderBy('os.sort')
-        ->get()->toArray();
+//        $list = Oa::from('oa as o')
+//            ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
+//            ->select('os.sort', 'os.type', 'os.employee_id')
+//            ->where('o.menu_id', $menu_id);
+//        if(!empty($type)) $list = $list->where('o.type',$type);
+//        $list = $list->orderBy('os.sort')
+//        ->get()->toArray();
         if (empty($list)) {
             $service =  new CheckService();
             $service->createRecordAndInventory([

+ 11 - 10
app/Service/SalesOrderService.php

@@ -513,22 +513,22 @@ class SalesOrderService extends Service
         }
         if(! empty($data['add_construction'])) {
             //能下施工单的合同状态
-            $model->where('state','>=',SalesOrder::State_two);
-            $model->where('state','<',SalesOrder::State_five);
+            $model->where('state','>=',SalesOrder::State_four);
+            $model->where('state','<',SalesOrder::State_seven);
         }
         if(! empty($data['add_return'])) {
             //能下退换货单的合同状态
-            $model->where('state','>',SalesOrder::State_two);
-            $model->where('state','<',SalesOrder::State_five);
+            $model->where('state','>=',SalesOrder::State_five);
+            $model->where('state','<',SalesOrder::State_seven);
         }
         if(! empty($data['sales_order_id'])) $model->where('id',$data['sales_order_id']);
         if(! empty($data['order_list'])){
             if($data['order_list'] == 1){
                 //订单合同 安装件合同 状态未指派总社分社的 或者 快递件合同
-                $model->where('state', '<=', 1);
+                $model->where('state', '<=', SalesOrder::State_three);
             }elseif($data['order_list'] == 2){
                 //派单合同 安装件合同 状态已指派总社分社的
-                $model->where('state', '>=', 2);
+                $model->where('state', '>=', SalesOrder::State_four);
             }
         }
 
@@ -741,7 +741,7 @@ class SalesOrderService extends Service
             DB::beginTransaction();
             $time = time();
             SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
-                'state' => SalesOrder::State_one,
+                'state' => SalesOrder::State_three,
                 'dispatch_time_first' => $time,
             ]);
 
@@ -801,7 +801,8 @@ class SalesOrderService extends Service
         if(empty($sale)) return [false,'合同不存在或已被删除'];
         $sale = $sale->toArray();
         if($sale['sales_order_type'] != SalesOrder::Order_type_one) return [false,'非安装件合同,操作失败'];
-        if($sale['state'] > SalesOrder::State_one) return [false,'请确认合同状态,操作失败'];
+        if($sale['state'] != SalesOrder::State_two) return [false,'合同未确认,操作失败'];
+        if($sale['state'] > SalesOrder::State_three) return [false,'请确认合同状态,操作失败'];
         $bool = SalesOrderProductInfo::where('del_time',0)
             ->where('sales_order_id',$data['id'])
             ->exists();
@@ -824,7 +825,7 @@ class SalesOrderService extends Service
             DB::beginTransaction();
             $time = time();
             SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
-                'state' => SalesOrder::State_two,
+                'state' => SalesOrder::State_four,
                 'dispatch_time_second' => $time,
             ]);
 
@@ -879,7 +880,7 @@ class SalesOrderService extends Service
         if(empty($sale)) return [false,'合同不存在或已被删除'];
         $sale = $sale->toArray();
         if($sale['sales_order_type'] != SalesOrder::Order_type_one) return [false,'非安装件合同,操作失败'];
-        if($sale['state'] > SalesOrder::State_two) return [false,'请确认合同状态,操作失败'];
+        if($sale['state'] > SalesOrder::State_four) return [false,'请确认合同状态,操作失败'];
         $product = SalesOrderProductInfo::where('del_time',0)
             ->where('sales_order_id',$data['id'])
             ->select('product_id')