cqp 1 giorno fa
parent
commit
74509f4e65

+ 5 - 5
app/Http/Controllers/Api/DingTalkController.php

@@ -6,7 +6,7 @@ use App\Jobs\ProcessDataJob;
 use App\Model\Record;
 use App\Service\DingCallbackCrypto;
 use App\Service\DingTalkCrypto;
-use App\Service\DrbService;
+use App\Service\DingService;
 use App\Service\U8ServerService;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Http;
@@ -16,7 +16,7 @@ class DingTalkController extends BaseController
 {
     public function getAccessToken(Request $request)
     {
-        $service = new DrbService();
+        $service = new DingService();
         list($status,$data) = $service->getAccessToken();
 
         if($status){
@@ -28,7 +28,7 @@ class DingTalkController extends BaseController
 
     public function getUserByCode(Request $request)
     {
-        $service = new DrbService();
+        $service = new DingService();
         list($status,$data) = $service->getUserByCode($request->all());
 
         if($status){
@@ -40,7 +40,7 @@ class DingTalkController extends BaseController
 
     public function createProcessInstance(Request $request)
     {
-        $service = new DrbService();
+        $service = new DingService();
         $userData = $request->userData;
         list($status,$data) = $service->createProcessInstance($request->all(), $userData);
 
@@ -53,7 +53,7 @@ class DingTalkController extends BaseController
 
     public function getTemplateFields(Request $request)
     {
-        $service = new DrbService();
+        $service = new DingService();
         list($status,$data) = $service->getTemplateFields($request->all());
 
         if($status){

+ 30 - 0
app/Http/Controllers/Api/EnterpriseWechatController.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use EasyWeChat\Factory;
+use Illuminate\Support\Facades\Http;
+
+class EnterpriseWechatController extends BaseController
+{
+    /**
+     * 企业微信回调统一入口 (验证 URL & 接收事件)
+     */
+    public function serve()
+    {
+        $config = [
+            'corp_id'  => 'ww83d8e358fe7f71b7',
+            'agent_id' => 1000007, // 自建应用的 AgentId
+            'secret'   => '5kJcYML2kJ_ojLQ-1KuzXo_rsMs2T74M6RjQmJ5uG6A',
+            'token'    => 'U0GQ5SI5RkOh5DA9wI',
+            'aes_key'  => 'Ces99dugJYEGSgBfCFUg43lI1e1TGWh7HRSmboUiS5N',
+        ];
+
+        $app = Factory::work($config);
+
+        // 核心逻辑:serve() 会自动判断请求类型
+        // 如果是 GET 请求,它会自动处理校验逻辑并返回明文 echostr
+        // 如果是 POST 请求,它会进入消息处理流程
+        return $app->server->serve();
+    }
+}

+ 0 - 95
app/Http/Controllers/Api/WeixinController.php

@@ -1,95 +0,0 @@
-<?php
-
-namespace App\Http\Controllers\Api;
-
-use App\Service\Weixin\WeixinService;
-use App\Service\Weixin\WxEmployeeService;
-use Illuminate\Http\Request;
-
-class WeixinController extends BaseController
-{
-    //开发者密码:
-    /**
-     * 用于微信token验证,全部通用,前提token都为qingyao
-     * @param Request $request
-     * @return void
-     */
-    public function weixin(Request $request)
-    {
-        file_put_contents('1.txt',json_encode($request->all()));
-//        die('adsds');
-//        $data = json_decode('{"signature":"fe04bfbb92a1c073e9f0829d3c4e48e1b40403aa","echostr":"5841396639871246203","timestamp":"1695188315","nonce":"1459788183"}',true);
-        $data = $request->all();
-        $signature = $data["signature"];
-        $timestamp = $data["timestamp"];
-        $nonce = $data["nonce"];
-
-        $token = 'qingyao';
-        $tmpArr = array($token, $timestamp, $nonce);
-        sort($tmpArr, SORT_STRING);
-        $tmpStr = implode( $tmpArr );
-        $tmpStr = sha1( $tmpStr );
-//        var_dump($tmpStr);
-//        var_dump($signature);die;
-        if( $tmpStr == $signature ){
-            echo $data['echostr'];die;
-        }else{
-            die('fail');
-        }
-    }
-
-    public function setWebHook(Request $request){
-        $service = new WeixinService();
-        list($status,$msg) = $service->setWebHook($request->all());
-        return $this->json_return($status,$msg,'');
-    }
-
-    /**
-     * 重定向获取unionid
-     * @param Request $request
-     * @return void
-     */
-    public function getUnionid(Request $request){
-        $service = new WeixinService();
-        $res = $service->getUnionid($request->all());
-    }
-
-    /**
-     * 获取openid
-     * @param Request $request
-     * @return void
-     */
-    public function getOpenid(Request $request){
-        $service = new WeixinService();
-        list($status,$data) = $service->getOpenid($request->all());
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(201, $data);
-        }
-    }
-
-    public function setUser(Request $request)
-    {
-        $service = new WxEmployeeService();
-        list($status, $data) = $service->setUser($request->all());
-
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(201, $data);
-        }
-    }
-
-    public function login(Request $request)
-    {
-        $service = new WxEmployeeService();
-        list($status, $data) = $service->login($request->all(),$request->header('ciphertext'));
-
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(201, $data);
-        }
-    }
-}

+ 0 - 119
app/Http/Controllers/Api/WxController.php

@@ -1,119 +0,0 @@
-<?php
-
-namespace App\Http\Controllers\Api;
-
-use App\Service\PurchaseOrderService;
-use App\Service\SalesOrderService;
-use App\Service\Weixin\WeixinService;
-use App\Service\Wx\WxEmployeeService;
-use App\Service\Wx\WxService;
-use Illuminate\Http\Request;
-
-class WxController extends BaseController
-{
-    public function setUser(Request $request)
-    {
-        $service = new WxEmployeeService();
-        list($status, $data) = $service->setUser($request->all());
-
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(201, $data);
-        }
-    }
-
-    public function setMobile(Request $request)
-    {
-        $service = new WxEmployeeService();
-        list($status, $data) = $service->setMobile($request->all());
-
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(201, $data);
-        }
-    }
-
-    public function login(Request $request)
-    {
-        $service = new WxEmployeeService();
-        list($status, $data) = $service->login($request->all());
-
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(201, $data);
-        }
-    }
-
-    public function saleOrderList(Request $request){
-        $service = new SalesOrderService();
-        $userData = $request->userData->toArray();
-        list($status,$data) = $service->salesOrderListsalesOrderWxList($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function purchaseOrderList(Request $request){
-        $service = new PurchaseOrderService();
-        $userData = $request->userData->toArray();
-        list($status,$data) = $service->getList($request->all(),$userData);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-    public function wxH5(Request $request){
-        file_put_contents('1.txt',json_encode($request->all()));
-//        die('adsds');
-//        $data = json_decode('{"signature":"fe04bfbb92a1c073e9f0829d3c4e48e1b40403aa","echostr":"5841396639871246203","timestamp":"1695188315","nonce":"1459788183"}',true);
-        $data = $request->all();
-        $signature = $data["signature"];
-        $timestamp = $data["timestamp"];
-        $nonce = $data["nonce"];
-
-        $token = 'qingyaokeji';
-        $tmpArr = array($token, $timestamp, $nonce);
-        sort($tmpArr, SORT_STRING);
-        $tmpStr = implode( $tmpArr );
-        $tmpStr = sha1( $tmpStr );
-//        var_dump($tmpStr);
-//        var_dump($signature);die;
-        if( $tmpStr == $signature && isset($data['echostr']) ){
-            echo $data['echostr'];die;
-        }else{
-            die('fail');
-        }
-    }
-
-    public function ttt(){
-        $a = new WxService();
-        //[88,1,0,37,["T9XX.20240502","\u5f85\u5ba1\u6838","\u8d85\u7ea7\u7ba1\u7406\u5458","\u8ba2\u5355\u5408\u540c","2024-05-02 02:50:04"]]
-        $user_id = 88;
-        $type = 1;
-        $state = 0;
-        $menu_id = 37;
-        $order_data = json_decode('["刁法森","\u5201\u6cd5\u68ee","2024-05-02 03:09:36","T9XX.202405020249365948(\u8ba2\u5355\u5408\u540c)"]',true);
-        $a = $a->wx_sendMsg($user_id,$type,$state,$menu_id,$order_data);
-
-        return $a;
-    }
-
-    public function getTopMessage(Request $request){
-        $service = new WxEmployeeService();
-        list($status, $data) = $service->getTopMessage($request->all());
-
-        if ($status) {
-            return $this->json_return(200, '', $data);
-        } else {
-            return $this->json_return(202, $data);
-        }
-    }
-}

+ 10 - 0
app/Providers/RouteServiceProvider.php

@@ -46,6 +46,8 @@ class RouteServiceProvider extends ServiceProvider
 
         $this->mapWebRoutes();
 
+        $this->mapEnterpriseWechatRoutes();
+
 //        $this->mapWxRoutes();
 
 //        $this->mapWeixinRoutes();
@@ -96,4 +98,12 @@ class RouteServiceProvider extends ServiceProvider
             ->namespace($this->namespace)
             ->group(base_path('routes/weixin.php'));
     }
+
+    protected function mapEnterpriseWechatRoutes()
+    {
+        Route::prefix('ewApi')
+            ->middleware('api')
+            ->namespace($this->namespace)
+            ->group(base_path('routes/eWechat.php'));
+    }
 }

+ 0 - 2284
app/Service/CheckService.php

@@ -1,2284 +0,0 @@
-<?php
-
-namespace App\Service;
-
-use App\Model\Construction;
-use App\Model\ConstructionProductInfo;
-use App\Model\Customer;
-use App\Model\Depart;
-use App\Model\Employee;
-use App\Model\InOutRecord;
-use App\Model\Inventory;
-use App\Model\InventorySub;
-use App\Model\InvoiceOrder;
-use App\Model\InvoiceOrderInfo;
-use App\Model\OrderInventoryStock;
-use App\Model\OrderOperation;
-use App\Model\OutBoundOrder;
-use App\Model\OutBoundOrderInfo;
-use App\Model\PaymentReceipt;
-use App\Model\PaymentReceiptInfo;
-use App\Model\ProductAdjustment;
-use App\Model\ProductAdjustmentSub;
-use App\Model\ProductInventory;
-use App\Model\ProductInventorySet;
-use App\Model\PurchaseOrder;
-use App\Model\PurchaseOrderInfo;
-use App\Model\PurchaseOrderInfoForOutBound;
-use App\Model\PurchaseOrderInfoForOutboundInfo;
-use App\Model\PurchaseOrderSpecial;
-use App\Model\PurchaseOrderSpecialInfo;
-use App\Model\ReturnExchangeOrder;
-use App\Model\ReturnExchangeOrderForOutboundInfo;
-use App\Model\ReturnExchangeOrderProductInfo;
-use App\Model\SalesOrder;
-use App\Model\SalesOrderInfo;
-use App\Model\SalesOrderOtherFee;
-use App\Model\SalesOrderProductInfo;
-use App\Model\SeeRange;
-use App\Model\SportsBag;
-use App\Model\Storehouse;
-use App\Model\Supplier;
-use Illuminate\Support\Facades\DB;
-
-class CheckService extends Service
-{
-    //特殊操作数
-    const minus_one = -1;//跳出库存流水
-
-    //审批操作对应的数值
-    const one = 1; //收货
-    const two = 2; //发货
-    const three = 3; //采购单入库
-    const four = 4; //合同公司完结
-    const five = 5; //施工单
-    const six = 6; //退换货单
-    const seven = 7; //采购单确认
-    const eight = 8; //合同确认
-    const nine = 9; //合同客户完结
-    const ten  = 10; //收付款确认
-    const eve  = 11; //接受派单
-    const twl  = 12; //活动包
-    const thi  = 13; //虚拟采购单
-    const fourteen  = 14; //盘点
-    const fifteen  = 15; //放弃门店派单
-    const sixteen  = 16; //出库单审核
-    const seventeen  = 17; //产品金额调整单审核
-
-    //中文对照
-    public $map = [
-        self::one => '收货单',
-        self::two => '发货单',//确认后出库
-        self::three => '采购单入库',//确认后入库
-        self::four => '公司完结', // 安装件 合同完结
-        self::five => '施工单',//确认后出库
-        self::six => '退换货单',//确认后出库或出库入库
-        self::seven => '采购单确认',
-        self::eight => '合同确认',
-        self::nine => '合同客户完结',
-        self::ten => '收付款确认',
-        self::eve => '接受门店派单',
-        self::twl => '活动包',
-        self::thi => '虚拟采购单',
-        self::fourteen => '盘点单',
-        self::fifteen => '放弃门店派单',
-        self::sixteen => '出库单审核',
-        self::seventeen => '产品金额调整单审核',
-    ];
-
-    //入库操作
-    public static $in_opt = [
-        self::three,
-    ];
-
-    //出库操作
-    public static $out_opt = [
-        self::two,
-        self::five,
-        self::sixteen,
-    ];
-
-    const TYPE_ONE = 1;//通过
-    const TYPE_TWO = 2;//不通过
-    const TYPE_THREE = 3;//通过后驳回
-
-    //改为待审核状态 校验
-    public static $opt_1case_check = [
-//        self::five => 'checkConstruction',//施工单
-    ];
-
-    //改为待审核状态
-    public static $opt_1case = [
-        self::two => 'waitInvoice',//发货单
-//        self::three => 'waitPurchase',//采购单 入库
-        self::five => 'waitConstruction',//施工单
-        self::six => 'waitReturnExchange',//退换货单
-        self::seven => 'waitPurchaseConfirm', //采购单确认
-        self::eight => 'waitSales', // 合同安装件 合同确认
-        self::ten => 'waitPaymentReceipt', //收付款确认
-        self::twl => 'waitSportsBag', //活动包确认
-        self::thi => 'waitPurchaseSpecial', //虚拟采购单
-        self::fourteen => 'waitInventory', //盘点单
-        self::sixteen => 'waitOut', //出库单
-        self::seventeen => 'waitProductAdjustment', //产品金额调整单
-    ];
-
-    public static $finished = [
-        self::three => 'confirmPurchaseOrder',//采购单 入库
-        self::four => 'settleSalesOrder', // 合同 安装件 合同公司完结
-        self::nine => 'settleSalesOrderCustomer', // 合同 安装件 合同客户完结
-        self::eve => 'settleSalesOrderConfirm', // 合同 安装件 合同接收
-        self::fifteen => 'settleSalesOrderConfirmBack', // 合同 安装件 合同接收后放弃
-    ];
-
-    //单据操作
-    public static $opt_case = [
-        self::two => 'confirmInvoiceOrder',
-//        self::three => 'confirmPurchaseOrder',
-        self::five => 'confirmConstruction',
-        self::six => 'confirmReturnExchangeOrder',
-        self::seven => 'confirmPurchaseOrderState',
-        self::eight => 'confirmSales', // 合同 安装件 合同确认
-        self::ten => 'confirmPaymentReceipt', // 确认收付款单
-        self::twl => 'confirmSportsBag', // 确认活动包
-        self::thi => 'confirmPurchaseSpecial', //虚拟采购单
-        self::fourteen => 'confirmInventory', //盘点单
-        self::sixteen => 'confirmOut', //出库单
-        self::seventeen => 'confirmProductAdjustment', //产品金额调整单
-    ];
-
-    //单据库存流水
-    public static $record = [
-//        self::two => 'recordInvoiceOrder',
-        self::three => 'recordPurchaseOrder',
-//        self::five => 'recordConstruction',
-        self::six => 'recordReturnExchangeOrder',
-        self::fourteen => 'recordInventory',
-        self::sixteen => 'recordOut',
-        self::seventeen => 'recordProductAdjustment',
-    ];
-
-    //自动生成
-    public static $create = [
-        self::seven => 'createPurchaseOrderSales', //分社合同生成
-        self::four => 'createPurchaseOrder', // 派给分社的合同 公司完结以后生成虚拟采购单
-    ];
-
-    //自动生成的删除
-    public static $create_del = [
-        self::seven => 'delCreatePurchaseOrderSales', //分社合同生成(删除)
-//        self::four => 'delCreatePurchaseOrder', // 派给分社的合同确认以后生成虚拟采购单
-    ];
-
-    //审核通过后 弃审
-    public static $opt_case_reject = [
-        self::four => 'reject_sales', // 合同
-//        self::three => 'reject_purchase', //采购入库
-        self::seven => 'reject_purchase_confirm', //采购确认驳回
-        self::five => 'reject_construction',//施工单
-        self::six => 'reject_return_exchange',//退换货
-        self::ten => 'reject_payment_receipt',//收付款单
-        self::twl => 'reject_sports_bag',//活动包
-        self::thi => 'reject_purchase_special',//虚拟采购单
-    ];
-
-    //审核通过后 驳回 产生流水
-    public static $reject_record = [
-//        self::five => 'reject_record_construction', //施工单驳回
-        self::three => 'reject_record_purchase', //采购
-        self::six => 'reject_record_return_exchange',//退换货
-    ];
-
-    //旅程日志 同意
-    public static $operation_order = [
-        self::eight => OrderOperation::three, //合同确认
-        self::two => OrderOperation::eight, //发货单确认
-        self::six => OrderOperation::nine, //退换货审核
-        self::five => OrderOperation::eve, //施工单
-        self::seven => OrderOperation::thi,//采购单确认
-        self::three => OrderOperation::fourteen,//采购单入库
-        self::ten => OrderOperation::twenty_one,//收付款单
-        self::twl => OrderOperation::twenty_seven,//活动包确认
-        self::thi => OrderOperation::twenty_nine,//虚拟采购单
-        self::sixteen => OrderOperation::thirty_three,//出库单
-    ];
-
-    //旅程日志 驳回
-    public static $operation_order_reject = [
-        self::four => OrderOperation::four, //合同弃审
-        self::six => OrderOperation::ten, //退换货弃审
-        self::five => OrderOperation::twl, //施工单弃审
-        self::three => OrderOperation::fif,//采购单入库弃审
-        self::seven => OrderOperation::twenty,//采购单确认弃审
-        self::ten => OrderOperation::twenty_two,//收付款单
-        self::twl => OrderOperation::twenty_eight,//活动包
-        self::thi => OrderOperation::thirty,//虚拟采购单
-    ];
-
-    //校验 不需要了
-    public function checkConstruction($data, $user){
-        $order = Construction::where('del_time',0)
-            ->where('order_number',$data['order_number'])
-            ->first();
-        if(empty($order)) return [false,'施工单不存在或已被删除'];
-        $order = $order->toArray();
-
-        //总社id
-        $head = $user['head'] ?? [];
-        $head = $head['id'] ?? 0;
-        //分社自己的施工单 直接返回
-        if($order['top_depart_id'] != $head) return [true, ''];
-        //不校验库存
-        if($user['is_check_stock'] == ProductInventorySet::type_two)  return [true,''];
-
-        //施工单产品
-        $sub = ConstructionProductInfo::where('construction_id',$order['id'])
-            ->where('del_time',0)
-            ->get()->toArray();
-        if(empty($sub)) return [false,'施工单产品不存在或已被删除'];
-        $product_submit = $product_id = [];
-        foreach ($sub as $value){
-            $product_id[] = $value['product_id'];
-            $key = $value['product_id'] . ',' . $value['storehouse_id'];
-            if(isset($product_save[$key])){
-                $product_submit[$key] += $value['number'];
-            }else{
-                $product_submit[$key] = $value['number'];
-            }
-        }
-
-        //比较库存
-//        list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit, []);
-//        if(! $status) return [false, $msg];
-
-        //锁定库存
-//        ProductInventoryService::changeLockNumber($user,$product_submit);
-
-        return [true, ''];
-    }
-
-    //改为待审核---------------------------------
-    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, '请确认发货单状态,操作失败'];
-
-        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(! in_array($model->state, [PurchaseOrder::State_minus_one,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 waitPurchaseSpecial($data){
-        $model = PurchaseOrderSpecial::where('id',$data['id'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '虚拟采购订单不存在或已被删除'];
-        if($model->state > PurchaseOrderSpecial::STATE_ZERO) return [false, '请确认虚拟采购订单状态,操作失败'];
-
-        //待入库
-        PurchaseOrderSpecial::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => PurchaseOrder::STATE_ONE]);
-
-        return [true, $model->toArray()];
-    }
-
-    public function waitInventory($data){
-        $model = Inventory::where('id',$data['id'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '盘点单不存在或已被删除'];
-        if($model->state > Inventory::STATE_ZERO) return [false, '请确认盘点单状态,操作失败'];
-
-        //待入库
-        Inventory::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => Inventory::STATE_ONE]);
-
-        return [true, $model->toArray()];
-    }
-
-    public function waitOut($data){
-        $model = OutBoundOrder::where('id',$data['id'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '出库单不存在或已被删除'];
-        if($model->state > OutBoundOrder::STATE_ZERO) return [false, '请确认出库单状态,操作失败'];
-
-        //待入库
-        OutBoundOrder::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => OutBoundOrder::STATE_ONE]);
-
-        return [true, $model->toArray()];
-    }
-
-    public function waitProductAdjustment($data){
-        $model = ProductAdjustment::where('id',$data['id'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '产品金额调整单不存在或已被删除'];
-        if($model->state > ProductAdjustment::STATE_ZERO) return [false, '请确认产品金额调整单状态,操作失败'];
-
-        //待审核
-        ProductAdjustment::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => ProductAdjustment::STATE_ONE]);
-
-        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(! in_array($model->state, [Construction::State_minus_one,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(! in_array($model->state, [ReturnExchangeOrder::State_minus_one,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(! in_array($model->state, [SalesOrder::State_minus_one,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 waitPaymentReceipt($data){
-        $model = PaymentReceipt::where('id', $data['id'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '收付款单不存在或已被删除'];
-        if(! in_array($model->state, [PaymentReceipt::State_minus_one,PaymentReceipt::STATE_ZERO])) return [false, '请确认收付款单状态,操作失败'];
-
-        PaymentReceipt::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => PaymentReceipt::STATE_ONE]);
-
-        return [true, $model->toArray()];
-    }
-
-    public function waitSportsBag($data){
-        $model = SportsBag::where('id', $data['id'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '活动包不存在或已被删除'];
-        if(! in_array($model->state, [SportsBag::State_minus_one,SportsBag::STATE_ZERO])) return [false, '请确认活动包状态,操作失败'];
-
-        SportsBag::where('del_time',0)->where('id',$data['id'])
-            ->update(['state' => SportsBag::STATE_ONE]);
-
-        return [true, $model->toArray()];
-    }
-    //改为待审核---------------------------------
-
-    //自动生成-----------------------------------
-    //总社派给分社的合同 完成生成虚拟采购单
-    public function createPurchaseOrder($order,$user){
-        //快递件
-        if($order['sales_order_type'] == SalesOrder::Order_type_two) return [true,''];
-
-        //不是总公司的合同
-        $head = $user['head'] ?? [];
-        $head = $head['id'] ?? 0; //总社id
-        if($head != $order['top_depart_id']) return [true, ''];
-
-        $see = SeeRange::where('del_time',0)
-            ->where('data_id',$order['id'])
-            ->where('data_type',SeeRange::type_seven)
-            ->where('type',SeeRange::data_three)
-            ->first();
-        if(empty($see)) return [false, '未找到指派分社信息'];
-        $depart_id = $see->param_id;//指派的分社
-
-        //总社指派给自己
-        if($depart_id == $head) return [true, ''];
-
-        //获取指派分社时候的金额
-        $fee = SalesOrderOtherFee::where('del_time',0)
-            ->where('sales_order_id',$order['id'])
-            ->first();
-        if(empty($fee)) return [false, '未找到指派分社时填写的金额'];
-        $fee = $fee->toArray();
-
-        $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrderSpecial::prefix);
-        $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')
-            ->get()->toArray();
-
-        //退货的差异
-        $returnExchange_map = [];
-        $returnExchange = ReturnExchangeOrder::where('del_time',0)
-            ->where('type',ReturnExchangeOrder::Order_type)
-            ->where('data_id',$order['id'])
-            ->select('id')
-            ->get()->toArray();
-        $return_product = ReturnExchangeOrderProductInfo::where('del_time',0)
-            ->where('return_exchange_id',array_column($returnExchange,'id'))
-            ->select('product_id','number')
-            ->get()->toArray();
-        foreach ($return_product as $value){
-            if(isset($returnExchange_map[$value['product_id']])){
-                $returnExchange_map[$value['product_id']] += $value['number'];
-            }else{
-                $returnExchange_map[$value['product_id']] = $value['number'];
-            }
-        }
-
-        $product_map = $rate = [];
-        $total = 0;
-        foreach ($product as $key => $value){
-            $return_number = 0;
-            if(isset($returnExchange_map[$value['product_id']])) $return_number = $returnExchange_map[$value['product_id']];
-            $number = $value['number'];
-            if($return_number >= $value['number']) {
-                unset($product[$key]);
-                continue;
-            }else{
-                $number = bcsub($number,$return_number,2);
-                $product[$key]['number'] = $number;
-            }
-
-            $total += $number * $value['retail_price'];
-            if(isset($product_map[$value['product_id']])){
-                $product_map[$value['product_id']] += $value['retail_price'] * $number;
-            }else{
-                $product_map[$value['product_id']] = $value['retail_price'] * $number;
-            }
-        }
-        foreach ($product_map as $key => $value){
-            $rate[$key] = bcdiv($value, $total, 2);
-        }
-
-        try {
-            DB::beginTransaction();
-            $model = new PurchaseOrderSpecial();
-            $model->order_number = $order_number;
-            $model->sales_order_id = $order['id'];
-            $model->supplier = $depart_id;
-            $model->type = $order['type'];
-            $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();
-            if(empty($model->id)) return [false,'采购单主信息生成失败'];
-            $purchase_order_id = $model->id;
-
-            $insert = [];$product_total = 0;
-            foreach ($product as $value){
-                $rate_tmp = $rate[$value['product_id']] ?? 0;
-                $price = bcdiv(bcmul($rate_tmp, $fee['other_fee_1'],2), $value['number'],2);
-                $product_total += $price * $value['number'];
-                $insert[] = [
-                    'purchase_order_special_id' => $purchase_order_id,
-                    'product_id' => $value['product_id'],
-                    'order_number' => $order_number,
-                    'number' => $value['number'],
-                    'price' => $price,
-                    'storehouse_id' => $storehouse,
-                ];
-            }
-            PurchaseOrderSpecialInfo::insert($insert);
-            PurchaseOrderSpecial::where('id',$purchase_order_id)->update(['total' => $product_total]);
-
-            $insert_see[] = [
-                'data_id' => $purchase_order_id, // 虚拟采购单
-                'data_type' => SeeRange::type_ten,
-                'param_id' => $depart_id, //门店id
-                'type' => SeeRange::data_three,
-                'crt_time' => time(),
-            ];
-            if(! empty($insert_see)) SeeRange::insert($insert_see);
-
-            DB::commit();
-        }catch (\Throwable $exception){
-            DB::rollBack();
-            if (str_contains($exception->getMessage(), '1062') || str_contains($exception->getMessage(), 'Duplicate entry')) {
-                return [false, '网络波动,请重新操作!'];
-            }
-
-            return [false, $exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    //分社向总社采购 生成 分社订货合同
-    public function createPurchaseOrderSales($order,$user){
-        //没有供应商 不创建合同
-        if(empty($order['supplier'])) return [true, ''];
-        //总公司的采购单 不创建合同
-        $head = $user['head'] ?? [];
-        $head = $head['id'] ?? 0; //总社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, ''];
-//        $customer_short_name = Depart::where('id',$order['top_depart_id'])->value('id') ?? "";
-
-        $prefix = SalesOrder::$prefix[SalesOrder::Model_type_two];
-        $order_number = OrderNoService::createSalesOrderNumber($prefix);
-        $product = PurchaseOrderInfo::where('del_time',0)
-            ->where('purchase_order_id',$order['id'])
-            ->get()->toArray();
-        if(empty($product)) return [false, '采购订单产品数据不能为空'];
-
-        try{
-            DB::beginTransaction();
-
-            $time = time();
-            $model = new SalesOrder();
-            $model->model_type = SalesOrder::Model_type_two;
-            $model->sales_order_type = SalesOrder::Order_type_two;
-            $model->customer_id = Customer::special_id;
-            $model->order_number = $order_number;
-            $model->crt_id = $order['crt_id'];
-            $model->depart_id = $head;
-            $model->top_depart_id = $head;
-            $model->other_fee = $order['other_fee'];
-            $model->discount_fee = $order['discount_fee'];
-            $model->contract_fee = $order['purchase_total'];
-            $model->contact_order_no = $order['order_number'];
-            $model->sign_time = $time;
-            $model->save();
-            $sales_order_id = $model->id;
-
-            //产品字典
-            $product_map = (new ProductService())->getProductDetail(array_column($product,'product_id'));
-
-            $insert = [];
-            $product_total = 0;
-            foreach ($product as $value){
-                $tmp = $product_map[$value['product_id']] ?? [];
-                $product_total += $value['price'] * $value['number'];
-                $insert[] = [
-                    'sales_order_id' => $sales_order_id,
-                    'product_id' => $value['product_id'],
-                    'number' => $value['number'],
-                    'basic_type_id' => $value['basic_type_id'],
-                    'price' => $value['price'],
-                    'cost' => $tmp['cost'] ?? 0,
-                    'retail_price' => $tmp['retail_price'] ?? 0,
-                    'final_amount' => $value['price'] * $value['number'],
-                ];
-            }
-            $bool = SalesOrderProductInfo::insert($insert);
-            if(! $bool) return [false,'合同生成失败!'];
-
-            //反写数据
-            $tmp = $product_total + $order['other_fee'];
-            $tmp = $tmp > 0 ? $tmp : 1;
-            $rate = ($product_total + $order['other_fee'] - $order['discount_fee']) / $tmp;
-            SalesOrder::where('id',$sales_order_id)->update([
-                'product_total' => $product_total,
-                'rate' => $rate
-            ]);
-
-            //生成付款单
-            $model = new PaymentReceipt();
-            $model->order_number = (new OrderNoService())->createOrderNumber(PaymentReceipt::prefix);
-            $model->data_type = PaymentReceipt::data_type_one;
-            $model->type = PaymentReceipt::type_one;
-            $model->crt_id = $user['id'];
-            $model->depart_id = $head;
-            $model->top_depart_id = $head;
-            $model->save();
-
-            $insert = [];
-            $insert[] = [
-                'payment_receipt_id' => $model->id,
-                'data_type' => PaymentReceipt::type_one,
-                'data_order_no' => $order_number,
-                'data_order_type' => PaymentReceipt::data_type_one,
-                'amount' => $order['purchase_total'],
-                'type' => PaymentReceiptInfo::type_three,
-                'crt_time' => $time,
-            ];
-            PaymentReceiptInfo::insert($insert);
-
-            DB::commit();
-        }catch (\Throwable $exception){
-            DB::rollBack();
-            if (str_contains($exception->getMessage(), '1062') || str_contains($exception->getMessage(), 'Duplicate entry')) {
-                return [false, '网络波动,请重新操作!'];
-            }
-            return [false ,$exception->getMessage()];
-        }
-
-        return [true,''];
-    }
-    //自动生成-----------------------------------
-
-    //自动生成删除
-
-    //分社订货合同删除
-    public function delCreatePurchaseOrderSales($data, $order){
-        $sale_order = SalesOrder::where('del_time',0)
-            ->where('contact_order_no',$order['order_number'])
-            ->select('id','order_number')
-            ->get()->toArray();
-        if(empty($sale_order)) return [true,''];
-
-        foreach ($sale_order as $value){
-            list($status, $msg) = (new SalesOrderService())->salesOrderDel(['id' => $value['id']]);
-            if(! $status) return [false,$msg];
-
-            $info = PaymentReceiptInfo::where('del_time',0)
-                ->where('type',PaymentReceiptInfo::type_three)
-                ->where('data_order_no', $value['order_number'])
-                ->select('payment_receipt_id')
-                ->first();
-            if(! empty($info)){
-                $payment_id = $info->payment_receipt_id;
-                list($status, $msg) = (new PaymentReceiptService())->customerDel(['id' => $payment_id]);
-                if(! $status) return [false,$msg];
-            }
-
-        }
-
-        return [true, ''];
-    }
-
-    //自动生成删除
-
-    public function confirmSportsBag($data){
-        $model = SportsBag::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '活动包不存在或已被删除'];
-        if($model->state != SportsBag::STATE_ONE) return [false, '请确认活动包状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            //通过
-            $model->state = SportsBag::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = SportsBag::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmPaymentReceipt($data){
-        $model = PaymentReceipt::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '收付款单不存在或已被删除'];
-        if($model->state != PaymentReceipt::STATE_ONE) return [false, '请确认收付款单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            //通过
-            $model->state = PaymentReceipt::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = PaymentReceipt::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmInvoiceOrder($data){
-        $model = InvoiceOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '发货单不存在或已被删除'];
-        if($model->state != InvoiceOrder::STATE_ONE) return [false, '请确认发货单状态,操作失败'];
-
-        $send_data = [];
-        if($data['type'] == self::TYPE_ONE){
-            //通过
-            $model->state = InvoiceOrder::STATE_TWO;
-            $model->save();
-
-            $sale = SalesOrder::where('id',$model->sales_order_id)->first();
-            if($sale['sales_order_type'] == SalesOrder::Order_type_one){
-                //安装件更新发货状态
-                SalesOrder::where('id',$model->sales_order_id)
-                    ->update(['invoice_state' => SalesOrder::invoice_one]);
-            }else{
-                //快递件更新 单据状态 发货状态
-                SalesOrder::where('id',$model->sales_order_id)
-                    ->update([
-                        'state' => SalesOrder::State2_one,
-                        'invoice_state' => SalesOrder::invoice_one
-                    ]);
-            }
-
-            //分社采购单更新发货状态
-            if(! empty($sale->contact_order_no)) {
-                $purchase = PurchaseOrder::where('order_number',$sale->contact_order_no)->where('del_time', 0)->first();
-                if(! empty($purchase)){
-                    $purchase = $purchase->toArray();
-                    if(in_array($purchase['order_type'], [PurchaseOrder::Order_type_three, PurchaseOrder::Order_type_four])) {
-                        //提醒创建人
-                        $emp_tmp = Employee::where('id', $purchase['crt_id'])->value('emp_name');
-                        $send_data[] = [
-                            'employee_id' => $purchase['crt_id'],
-                            'type' => 2,
-                            'state' => 0,
-                            'menu_id' => 45,
-                            'order_number' => $purchase['order_number'],
-                            'tmp_data' => [
-                                $purchase['order_number'],
-                                "分社采购单",
-                                '已发货',
-                                $emp_tmp,
-                                date('Y-m-d H:i:s'),
-                            ],
-                        ];
-                    }
-                }
-                PurchaseOrder::where('order_number',$sale->contact_order_no)->update(['invoice_state' => PurchaseOrder::invoice_state_one]);
-            }
-        }else{
-            //驳回
-            $model->state = InvoiceOrder::STATE_ZERO;
-            $model->save();
-        }
-
-        (new OaService())->sendWxOaCheckMessage($send_data);
-
-        return [true, $model->toArray()];
-    }
-
-    public function recordInvoiceOrder($data, $order){
-        $result = InvoiceOrderInfo::where('del_time',0)
-            ->where('order_number',$order['order_number'])
-            ->get()->toArray();
-        if(empty($result)) return [false,'发货单产品信息不存在或已被删除'];
-        $insert = [];
-        $time = time();
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            if(isset($insert[$key])){
-                $insert[$key]['number'] += -($value['number']);
-            }else{
-                $insert[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => -($value['number']),
-                    'order_type' => InvoiceOrder::prefix,
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['price'],
-                ];
-            }
-        }
-        $insert = array_values($insert);
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false,'流水写入失败'];
-
-        return [true,''];
-    }
-
-    public function confirmPurchaseOrderState($data){
-        $model = PurchaseOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false,'采购单不存在或已被删除'];
-        if($model->state != PurchaseOrder::STATE_ONE) return [false,'请确认采购单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = PurchaseOrder::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = PurchaseOrder::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmPurchaseOrder($data,$user){
-        $model = PurchaseOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '采购订单不存在或已被删除'];
-        if($model->state != PurchaseOrder::STATE_TWO) return [false, '请确认采购订单状态,操作失败'];
-        $model->state = PurchaseOrder::STATE_Four;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function recordPurchaseOrder($data, $order){
-        $result = PurchaseOrderInfo::where('del_time',0)
-            ->where('order_number',$order['order_number'])
-            ->get()->toArray();
-        if(empty($result)) return [false,'采购单产品信息不存在或已被删除'];
-        $insert = [];
-        $time = time();
-
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            if(isset($insert[$key])){
-                $insert[$key]['number'] += $value['number'];
-            }else{
-                $insert[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => $value['number'],
-                    'order_type' => PurchaseOrder::prefix,
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['price'],
-                ];
-            }
-        }
-        $insert = array_values($insert);
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false,'流水写入失败'];
-
-        return [true,''];
-    }
-
-    public function confirmPurchaseSpecial($data){
-        $model = PurchaseOrderSpecial::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false,'虚拟采购订单不存在或已被删除'];
-        if($model->state != PurchaseOrderSpecial::STATE_ONE) return [false,'请确认虚拟采购订单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = PurchaseOrderSpecial::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = PurchaseOrderSpecial::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmConstruction($data){
-        $model = Construction::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '施工单不存在或已被删除'];
-        if($model->state != Construction::STATE_ONE) return [false, '请确认施工单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = Construction::STATE_TWO;
-            $model->save();
-
-            //已下施工
-            SalesOrder::where('id',$model->sales_order_id)->update(['state' => SalesOrder::State_five]);
-        }else{
-            //驳回
-            $model->state = Construction::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function recordConstruction($data, $order){
-        //仅施工不需要库存流水
-        if($order['model_type'] == Construction::Model_type_two) return [true, self::minus_one];
-        $result = ConstructionProductInfo::where('del_time',0)
-            ->where('construction_id',$order['id'])
-            ->get()->toArray();
-        if(empty($result)) return [false,'施工单产品信息不存在或已被删除'];
-        $insert = [];
-        $time = time();
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            if(isset($insert[$key])){
-                $insert[$key]['number'] += -($value['number']);
-            }else{
-                $insert[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => -($value['number']),
-                    'order_type' => Construction::$prefix[$order['model_type']] ?? '',
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['price'],
-                ];
-            }
-        }
-        $insert = array_values($insert);
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false,'流水写入失败'];
-
-        return [true,''];
-    }
-
-    public function confirmReturnExchangeOrder($data){
-        $model = ReturnExchangeOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '退换货单不存在或已被删除'];
-        if($model->state != ReturnExchangeOrder::State_one) return [false, '请确认退换货单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = ReturnExchangeOrder::State_two;
-            $model->save();
-
-//            if($model->data_type == ReturnExchangeOrder::Order_type){
-//                SalesOrder::where('id', $model->data_id)->update([
-//                    'state' => SalesOrder::State_six
-//                ]);
-//            }
-        }else{
-            //驳回
-            $model->state = ReturnExchangeOrder::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function recordReturnExchangeOrder($data, $order){
-        if($order['model_type'] == ReturnExchangeOrder::Model_type_three) return [true, self::minus_one];
-//        if($order['type'] == ReturnExchangeOrder::Order_type){
-//            //快递件不记录流水
-//            $sales_order_type = SalesOrder::where('id',$order['data_id'])->value('sales_order_type');
-//            if($sales_order_type == SalesOrder::Order_type_two) return [true, self::minus_one];
-//        }
-
-        //合同 退货
-        $map = $outbound = [];
-        if($order['type'] == ReturnExchangeOrder::Order_type){
-            //查找 出库数据的产品
-            $product = OutBoundOrderInfo::where('del_time',0)
-                ->where('data_id', $order['data_id'])
-                ->where('type', OutBoundOrder::out_type_one)
-                ->whereColumn('number','>','return_number')
-                ->select('id','product_id','number','return_number','out_bound_id')
-                ->get()->toArray();
-
-            foreach($product as $value){
-                $map[$value['product_id']][] = $value;
-            }
-
-            //采购占用数量
-            $purchase = PurchaseOrderInfoForOutBound::where('del_time',0)
-                ->whereIn('data_id', array_unique(array_column($product,'out_bound_id')))
-                ->where('type',PurchaseOrderInfoForOutBound::type_one)
-                ->where('from_order_type',PurchaseOrderInfoForOutBound::from_type_zero)
-                ->where('is_use',PurchaseOrderInfoForOutBound::is_use)
-                ->whereColumn('number','>','return_number')
-                ->get()->toArray();
-            foreach ($purchase as $value){
-                $key = $value['data_id'] . $value['product_id'];
-                $num = bcsub($value['number'],$value['return_number'],4);
-                if(isset($outbound[$key])){
-                    $tmp = bcadd($num, $outbound[$key]['number'],4);
-                    $outbound[$key]['number'] = $tmp;
-                }else{
-                    $outbound[$key] = [
-                        'id' => $value['id'],
-                        'number' => $num,
-                    ];
-                }
-            }
-        }
-
-        $result = ReturnExchangeOrderProductInfo::where('del_time',0)
-            ->where('return_exchange_id',$order['id'])
-            ->get()->toArray();
-        if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
-        $insert = $update = $insert2 = $update2 = [];
-        $time = time();
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
-            if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
-                //退货
-                if($order['type'] == ReturnExchangeOrder::Order_type){
-                    $number = 0;
-                    //合同出库数量
-                    $out_array = $map[$value['product_id']] ?? [];
-                    if(empty($out_array)){
-                        //未出库 这个退货不需要加回来 不需要流水
-                        continue;
-                    } else{
-                        foreach ($out_array as $out){
-                            if($value['number'] <= 0) continue;
-
-                            //剩余能退数量
-                            $out_number = bcsub($out['number'], $out['return_number'],4);
-                            if($out_number >= $value['number']) {
-                                $number = bcadd($value['number'], $number,4);
-                                $t = $value['number'];
-                                $value['number'] = 0;
-                            }else{
-                                $number = bcadd($out_number, $number,4);
-                                $value['number'] = bcsub($value['number'], $out_number,4);
-                                $t = $out_number;
-                            }
-                            //更新数据
-                            $update[] = [
-                                'id' => $out['id'],
-                                'return_number' => bcadd($out['return_number'], $t,4),
-                            ];
-
-                            $insert2[] = [
-                                'order_number' => $order['order_number'],
-                                'out_bound_order_info_id' => $out['id'],
-                                'number' => $t,
-                                'crt_time' => $time
-                            ];
-
-                            $out_key = $out['out_bound_id'] . $value['product_id'];
-                            if(isset($outbound[$out_key])){
-                                $num = $outbound[$out_key]['number'];
-                                $id = $outbound[$out_key]['id'];
-                                if($t > $num){
-                                    $update2_num = $num;
-                                }else{
-                                    $update2_num = $t;
-                                }
-                                if(isset($update2[$id])){
-                                    $update2[$id] = bcadd($update2_num, $update2[$id],4);
-                                }else{
-                                    $update2[$id] = $update2_num;
-                                }
-                            }
-                        }
-                    }
-                }else{
-                    // 采购
-                    $number = -($value['number']);
-                }
-
-                if(isset($insert[$key])){
-                    $insert[$key]['number'] += $number;
-                }else{
-                    $insert[$key] = [
-                        'product_id' => $value['product_id'],
-                        'number' => $number,
-                        'order_type' => $prefix,
-                        'order_number' => $order['order_number'],
-                        'crt_time' => $time,
-                        'storehouse_id' => $value['storehouse_id'],
-                        'depart_id' => $order['depart_id'],
-                        'top_depart_id' => $order['top_depart_id'],
-                        'price' => $value['return_exchange_price'],
-                    ];
-                }
-            }
-        }
-        $insert = array_values($insert);
-        if(empty($insert)) return [true, self::minus_one];
-
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false,'流水写入失败'];
-
-        if(! empty($insert2)) ReturnExchangeOrderForOutboundInfo::insert($insert2);
-
-        if(! empty($update)){
-            foreach ($update as $value){
-                OutBoundOrderInfo::where('id', $value['id'])
-                    ->update(['return_number' => $value['return_number']]);
-            }
-        }
-        if(! empty($update2)){
-            foreach ($update2 as $key => $value){
-                $insert3[] = [
-                    'order_number' => $order['order_number'],
-                    'purchase_order_info_id' => $key,
-                    'number' => $value,
-                    'crt_time' => $time
-                ];
-
-                PurchaseOrderInfoForOutBound::where('id', $key)
-                    ->lockForUpdate()
-                    ->update([
-                        'return_number' => DB::raw('return_number + ('. $value . ')'),
-                    ]);
-            }
-
-            if(! empty($insert3)) PurchaseOrderInfoForOutboundInfo::insert($insert3);
-        }
-
-        return [true,''];
-    }
-
-    public function confirmInventory($data){
-        $model = Inventory::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false,'盘点单不存在或已被删除'];
-        if($model->state != Inventory::STATE_ONE) return [false,'请确认盘点单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = Inventory::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = Inventory::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmOut($data){
-        $model = OutBoundOrder::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false,'出库单不存在或已被删除'];
-        if($model->state != OutBoundOrder::STATE_ONE) return [false,'请确认出库单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = OutBoundOrder::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = OutBoundOrder::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmProductAdjustment($data){
-        $model = ProductAdjustment::where('order_number',$data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false,'产品金额调整单不存在或已被删除'];
-        if($model->state != ProductAdjustment::STATE_ONE) return [false,'请确认产品金额调整单状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $model->state = ProductAdjustment::STATE_TWO;
-            $model->save();
-        }else{
-            //驳回
-            $model->state = ProductAdjustment::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function recordInventory($data, $order){
-        $result = InventorySub::where('del_time',0)
-            ->where('inventory_id',$order['id'])
-            ->get()->toArray();
-        if(empty($result)) return [false,'盘点单明细信息不存在或已被删除'];
-
-        $prefix = Inventory::prefix;
-        $insert = [];
-        $time = time();
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-
-            $number = $value['final_num'];
-            if(isset($insert[$key])){
-                $tmp = bcadd($insert[$key], $number,4);
-                $insert[$key]['number'] = $tmp;
-            }else{
-                $insert[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => $number,
-                    'order_type' => $prefix,
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['price'],
-                ];
-            }
-        }
-
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false,'流水写入失败'];
-
-        return [true,''];
-    }
-
-    public function recordOut($data, $order){
-        $result = PurchaseOrderInfoForOutBound::where('del_time',0)
-            ->where('data_id',$order['id'])
-            ->where('type',PurchaseOrderInfoForOutBound::type_one)
-            ->where('is_use',PurchaseOrderInfoForOutBound::is_not_use)
-            ->get()->toArray();
-        if(empty($result)) return [false,'出库单明细信息不存在或已被删除'];
-
-        $prefix = OutBoundOrder::prefix;
-        $insert = $tmp = [];
-        $time = time();
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-
-            $number = -($value['number']);
-            if(isset($insert[$key])){
-                $tmp = bcadd($insert[$key]['number'], $number,4);
-                $insert[$key]['number'] = $tmp;
-            }else{
-                $insert[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => $number,
-                    'order_type' => $prefix,
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['price'],
-                ];
-            }
-
-            if(empty($value['purchase_order_id'])){
-                //没采购或盘点入库信息 则加入一条记录平流水
-                $tmp[] = [
-                    'product_id' => $value['product_id'],
-                    'number' => $value['number'],
-                    'order_type' => PurchaseOrderInfoForOutBound::prefix,
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['price'],
-                ];
-            }
-        }
-        $insert_final = array_merge_recursive(array_values($insert),$tmp);
-
-        $bool = InOutRecord::insert($insert_final);
-        if(! $bool) return [false, '流水写入失败'];
-
-        //更新采购出库占用
-        PurchaseOrderInfoForOutBound::where('del_time',0)
-            ->where('data_id',$order['id'])
-            ->where('type',PurchaseOrderInfoForOutBound::type_one)
-            ->where('is_use',PurchaseOrderInfoForOutBound::is_not_use)
-            ->update(['is_use' => PurchaseOrderInfoForOutBound::is_use]);
-
-        return [true, ''];
-    }
-
-    public function recordProductAdjustment($data, $order){
-        $result = ProductAdjustmentSub::where('del_time',0)
-            ->where('product_adjustment_id', $order['id'])
-            ->select('product_id','storehouse_id','final_amount')
-            ->get()->toArray();
-        if(empty($result)) return [false, "产品调整单明细数据不能为空"];
-
-        $time = time();
-        $prefix = ProductAdjustment::prefix;
-        $insert = [];
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-
-            if(isset($insert[$key])){
-                $price = bcadd($insert[$key]['price'], $value['final_amount'],2);
-                $insert[$key]['price'] = $price;
-            }else{
-                $insert[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => 0,
-                    'order_type' => $prefix,
-                    'order_number' => $order['order_number'],
-                    'crt_time' => $time,
-                    'storehouse_id' => $value['storehouse_id'],
-                    'depart_id' => $order['depart_id'],
-                    'top_depart_id' => $order['top_depart_id'],
-                    'price' => $value['final_amount'],
-                ];
-            }
-        }
-
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false, '流水写入失败'];
-
-        return [true, self::minus_one];
-    }
-
-    public function settleSalesOrder($data,$user){
-        $model = SalesOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '合同不存在或已被删除'];
-        //安装件
-        if($model->state < SalesOrder::State_four || $model->state >= SalesOrder::State_seven) return [false, '请确认合同状态,操作失败'];
-
-        SalesOrder::where('del_time',0)->where('order_number',$data['order_number'])
-            ->update(['state' => SalesOrder::State_seven]);
-
-        $time = time();
-        $insert = [];
-        $new = [];
-        if(! empty($data['img'])){
-            foreach ($data['img'] as $value){
-                $insert[] = [
-                    'sales_order_id' => $model->id,
-                    'data_id' => 0,
-                    'type' => SalesOrderInfo::type_seven,
-                    'file' => $value,
-                    'crt_time' => $time,
-                ];
-                $new[] = $value;
-            }
-        }
-        if(! empty($data['mark'])){
-            $insert[] = [
-                'sales_order_id' => $model->id,
-                'data_id' => $user['id'],
-                'type' => SalesOrderInfo::type_eight,
-                'file' => $data['mark'],
-                'crt_time' => $time,
-            ];
-        }
-        if(! empty($insert)) SalesOrderInfo::insert($insert);
-
-        return [true, ['file' => $new, 'order' => $model->toArray()]];
-    }
-
-    public function settleSalesOrderCustomer($data,$user){
-        $model = SalesOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '合同不存在或已被删除'];
-        if(empty($data['img'])) return [false,'图片不能为空'];
-        //安装件
-        if($model->state != SalesOrder::State_seven) return [false, '请确认合同状态,操作失败'];
-
-        SalesOrder::where('del_time',0)->where('order_number',$data['order_number'])
-            ->update(['state' => SalesOrder::State_eight]);
-        SalesOrderInfo::insert([
-            'sales_order_id' => $model->id,
-            'type' => SalesOrderInfo::type_six,
-            'file' => $data['img'],
-            'crt_time' => time(),
-        ]);
-
-        return [true, $model->toArray()];
-    }
-
-    public function settleSalesOrderConfirm($data,$user){
-        $model = SalesOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '合同不存在或已被删除'];
-
-        //安装件
-        if($model->state != SalesOrder::State_four) return [false, '请确认合同状态,操作失败'];
-        $model->is_confirm = 1;
-        $model->save();
-
-        $depart = SeeRange::where('del_time',0)
-            ->where('data_id', $model->id)
-            ->where('data_type',SeeRange::type_seven)
-            ->where('type',SeeRange::data_three)
-            ->first();
-        if(! empty($depart)){
-            $depart = $depart->toArray();
-            $channel_id = Depart::where('id',$depart['param_id'])->value('channel_id');
-            if(! empty($channel_id)){
-                $emp_name = Employee::where('id',$channel_id)->value('emp_name');
-                $send_data[] = [
-                    'employee_id' => $channel_id,
-                    'type' => 2,
-                    'state' => 0,
-                    'menu_id' => 37,
-                    'order_number' => $model->order_number,
-                    'tmp_data' => [
-                        $model->order_number,
-                        "派单合同",
-                        "门店接收派单",
-                        $emp_name,
-                        date('Y-m-d H:i:s'),
-                    ],
-                ];
-
-                (new OaService())->sendWxOaCheckMessage($send_data);
-            }
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function settleSalesOrderConfirmBack($data,$user){
-        $model = SalesOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '合同不存在或已被删除'];
-        //安装件
-        if($model->state != SalesOrder::State_four) return [false, '请确认合同状态,操作失败'];
-
-        //校验施工
-        $bool = Construction::where('del_time',0)
-            ->where('sales_order_id', $model->id)
-            ->exists();
-        if($bool) return [false,'合同已生成施工单,操作失败'];
-
-        if($model->is_confirm != 1) return [false, '合同未接受派单,操作失败'];
-        $model->is_confirm = 0;
-        $model->save();
-
-        //单据状态还原
-        SalesOrder::where('del_time',0)->where('id', $model->id)->update([
-            'state' => SalesOrder::State_three,
-            'dispatch_time_second' => 0,
-            'dispatch_time_second_id' => 0,
-        ]);
-
-        SeeRange::where('del_time',0)
-            ->where('data_id', $model->id)
-            ->where('data_type',SeeRange::type_seven)
-            ->where('type',SeeRange::data_three)
-            ->update(['del_time' => time()]);
-
-        return [true, $model->toArray()];
-    }
-
-    public function confirmSales($data){
-        $model = SalesOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '合同不存在或已被删除'];
-        if($model->state != SalesOrder::State_one) return [false, '请确认合同状态,操作失败'];
-
-        if($data['type'] == self::TYPE_ONE){
-            $state = SalesOrder::State_three;
-            if(in_array($model->model_type,[SalesOrder::Model_type_four,SalesOrder::Model_type_seven])){
-                //线上订单 补贴订单
-                $state = SalesOrder::State_two;
-            }
-            $model->state = $state;
-            $model->save();
-        }else{
-            $model->state = SalesOrder::State_minus_one;
-            $model->save();
-        }
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_sales($data){
-        $model = SalesOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '合同不存在或已被删除'];
-
-        if($model->out_state > SalesOrder::out_zero) return [false, '合同已提交出库,操作失败'];
-
-        //安装件
-        if(in_array($model->model_type,[SalesOrder::Model_type_four,SalesOrder::Model_type_seven])){
-            //线上订单 补贴订单
-            if($model->state != SalesOrder::State_two) return [false, '请确认合同状态,操作失败'];
-        }else{
-            //除线上订单 补贴订单 之外
-            if($model->state != SalesOrder::State_three) return [false, '请确认合同状态,操作失败'];
-        }
-
-        //未确认
-        $model->state = SalesOrder::State_zero;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_purchase($data){
-        $model = PurchaseOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '采购单不存在或已被删除'];
-        //安装件
-        if($model->state != PurchaseOrder::STATE_Four) return [false, '请确认采购单状态,操作失败'];
-
-        $model->state = PurchaseOrder::STATE_TWO;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_purchase_special($data){
-        $model = PurchaseOrderSpecial::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '虚拟采购订单不存在或已被删除'];
-        //安装件
-        if($model->state != PurchaseOrderSpecial::STATE_TWO) return [false, '请确认虚拟采购订单状态,操作失败'];
-
-        $model->state = PurchaseOrder::STATE_ZERO;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_purchase_confirm($data){
-        $model = PurchaseOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '采购单不存在或已被删除'];
-        //安装件
-        if($model->state != PurchaseOrder::STATE_TWO) return [false, '请确认采购单状态,操作失败'];
-
-        $model->state = PurchaseOrder::STATE_ZERO;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_construction($data){
-        $model = Construction::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '施工单不存在或已被删除'];
-        //安装件
-        if($model->state != Construction::STATE_TWO) return [false, '请确认施工单状态,操作失败'];
-
-        $model->state = Construction::STATE_ZERO;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_payment_receipt($data){
-        $model = PaymentReceipt::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '收付款单不存在或已被删除'];
-        if($model->state != PaymentReceipt::STATE_TWO) return [false, '请确认收付款单状态,操作失败'];
-
-        $model->state = PaymentReceipt::STATE_ZERO;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_sports_bag($data){
-        $model = SportsBag::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '活动包不存在或已被删除'];
-        if($model->state != SportsBag::STATE_TWO) return [false, '请确认活动包状态,操作失败'];
-
-        $model->state = SportsBag::STATE_ZERO;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_return_exchange($data){
-        $model = ReturnExchangeOrder::where('order_number', $data['order_number'])
-            ->where('del_time',0)
-            ->first();
-        if(empty($model)) return [false, '退换货单不存在或已被删除'];
-        if($model->state != ReturnExchangeOrder::State_two) return [false, '请确认退换货单状态,操作失败'];
-
-        $model->state = ReturnExchangeOrder::State_zero;
-        $model->save();
-
-        return [true, $model->toArray()];
-    }
-
-    public function reject_record_construction($data,$order){
-        //仅施工不需要库存流水
-        if($order['model_type'] == Construction::Model_type_two) return [true, self::minus_one];
-
-        //获取单据最新数据时间 正常施工数据
-        $crt_time = 0;
-        $latest = InOutRecord::where('del_time',0)
-            ->where('order_number',$data['order_number'])
-            ->where('number','<',0)
-            ->select('crt_time')
-            ->orderBy('crt_time', 'desc')
-            ->first();
-        if(! empty($latest)) $crt_time = $latest->crt_time;
-
-        $result = InOutRecord::where('del_time',0)
-            ->where('crt_time',$crt_time)
-            ->where('order_number',$data['order_number'])
-            ->where('number','<',0)
-            ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type','price')
-            ->get()->toArray();
-        if(empty($result)) return [false,'施工出库流水数据未找到'];
-
-        //生成对冲数据
-        $time = time();
-        foreach ($result as $key => $value){
-            $result[$key]['number'] = abs($value['number']);
-            $result[$key]['crt_time'] = $time;
-        }
-
-        $bool = InOutRecord::insert($result);
-        if(! $bool) return [false,'流水写入失败'];
-
-        //写入流水
-        return [true, ''];
-    }
-
-    public function reject_record_purchase($data,$order){
-        //获取单据最新数据时间 正常采购入库数据
-        $crt_time = 0;
-        $latest = InOutRecord::where('del_time',0)
-            ->where('order_number',$data['order_number'])
-            ->where('number','>',0)
-            ->select('crt_time')
-            ->orderBy('crt_time', 'desc')
-            ->first();
-        if(! empty($latest)) $crt_time = $latest->crt_time;
-
-        $result = InOutRecord::where('del_time',0)
-            ->where('crt_time',$crt_time)
-            ->where('order_number',$data['order_number'])
-            ->where('number','>',0)
-            ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type','price')
-            ->get()->toArray();
-        if(empty($result)) return [false,'采购入库流水数据未找到'];
-
-        //生成对冲数据
-        $time = time();
-        foreach ($result as $key => $value){
-            $result[$key]['number'] = - $value['number'];
-            $result[$key]['crt_time'] = $time;
-        }
-
-        $bool = InOutRecord::insert($result);
-        if(! $bool) return [false,'流水写入失败'];
-
-        //写入流水
-        return [true, ''];
-    }
-
-    public function reject_record_return_exchange($data,$order){
-        if($order['model_type'] == ReturnExchangeOrder::Model_type_three) return [true, self::minus_one];
-
-        //获取单据最新数据时间 正常退换货流水数据
-        $crt_time = 0;
-        $latest = InOutRecord::where('del_time',0)
-            ->where('order_number',$data['order_number'])
-            ->select('crt_time')
-            ->orderBy('crt_time', 'desc')
-            ->first();
-        if(! empty($latest)) $crt_time = $latest->crt_time;
-
-        $result = InOutRecord::where('del_time',0)
-            ->where('crt_time',$crt_time)
-            ->where('order_number',$data['order_number'])
-            ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type','price')
-            ->get()->toArray();
-        if(empty($result)) return [true, self::minus_one];
-
-        //生成对冲数据
-        $time = time();
-        foreach ($result as $key => $value){
-            $result[$key]['number'] = - $value['number'];
-            $result[$key]['crt_time'] = $time;
-        }
-
-        $bool = InOutRecord::insert($result);
-        if(! $bool) return [false, '流水写入失败'];
-
-        $info = ReturnExchangeOrderForOutboundInfo::where('del_time',0)
-            ->where('order_number',$data['order_number'])
-            ->get()->toArray();
-        if(! empty($info)){
-            foreach ($info as $value){
-                //出库单占用出库数量解放
-                OutBoundOrderInfo::where('id',$value['out_bound_order_info_id'])
-                    ->lockForUpdate()
-                    ->update([
-                        'return_number' => DB::raw('return_number - ('. $value['number'] . ')'),
-                    ]);
-            }
-            //记录信息标记删除
-            ReturnExchangeOrderForOutboundInfo::where('del_time',0)
-                ->where('order_number',$data['order_number'])
-                ->update(['del_time' => $time]);
-        }
-
-        $info = PurchaseOrderInfoForOutboundInfo::where('del_time',0)
-            ->where('order_number',$data['order_number'])
-            ->get()->toArray();
-        if(! empty($info)){
-            foreach ($info as $value){
-                //退换货退合同 合同占用的采购或盘点占用出库数量解放
-                PurchaseOrderInfoForOutBound::where('id',$value['purchase_order_info_id'])
-                    ->lockForUpdate()
-                    ->update([
-                        'return_number' => DB::raw('return_number - ('. $value['number'] . ')'),
-                    ]);
-            }
-            //记录信息标记删除
-            PurchaseOrderInfoForOutboundInfo::where('del_time',0)
-                ->where('order_number',$data['order_number'])
-                ->update(['del_time' => $time]);
-        }
-
-        //写入流水
-        return [true, ''];
-    }
-
-    public function getOrderDetail($data,$user){
-        if(empty($data['order_number'])) return [false,'必传参数不能为空'];
-        $array = [];
-        foreach (Construction::$prefix as $value){
-            $array[$value] = "\App\Service\\ConstructionService";
-        }
-        foreach (ReturnExchangeOrder::$prefix as $value){
-            $array[$value] = "\App\Service\\ReturnExchangeOrderService";
-        }
-        foreach (SalesOrder::$prefix as $value){
-            $array[$value] = "\App\Service\\SalesOrderService";
-        }
-
-        $status = true;
-        $msg = [];
-        foreach ($array as $key => $value){
-            if(strpos($data['order_number'],$key) !== false) {
-                list($status, $msg) = (new $value)->detail($data,$user);
-                return [$status, $msg];
-            }
-        }
-
-        if(strpos($data['order_number'],PurchaseOrder::prefix) !== false){
-            $service = "\App\Service\\PurchaseOrderService";
-            list($status, $msg) = (new $service)->detail($data,$user);
-            return [$status, $msg];
-        }
-
-        return [$status, $msg];
-    }
-
-    public function checkAll($data,$user){
-        if(empty($data['id']) || empty($data['order_number'])|| empty($data['opt_case'])) return [false,'必传参数不能为空或者参数值错误!'];
-
-        list($status,$msg) = $this->limitingSendRequestBackgExpire($data['order_number'].$data['opt_case']);
-        if(! $status) return [false,$msg];
-
-        //走审批流 单据校验
-        $function_check = self::$opt_1case_check[$data['opt_case']] ?? '';
-        //走审批流 单据状态改为待审批方法
-        $function = self::$opt_1case[$data['opt_case']] ?? '';
-
-        //单据不走审批流
-        $function2 = self::$finished[$data['opt_case']] ?? '';
-        try{
-            DB::beginTransaction();
-
-            //不走审批流,更新完直接返回
-            if($function2) {
-                list($bool,$msg) = $this->$function2($data,$user);
-                if($bool) {
-                    $file = [];
-                    if(isset($msg['order'])){
-                        $order = $msg['order'];
-                        $file = $msg['file'];
-                    } else{
-                        $order = $msg;
-                    }
-
-                    list($bool,$err) = $this->createRecordAndInventoryMy($data,$user,$order);
-                    if($bool){
-                        DB::commit();
-                        if(! empty($file)) return [true, ['file' => ['new' => $file]]];
-                        return [true, ''];
-                    }else{
-                        DB::rollBack();
-                        return [false, $err];
-                    }
-                }else{
-                    DB::rollBack();
-                    return [false, $msg];
-                }
-            }
-
-            //需要审批流,校验
-            if($function_check){
-                list($bool,$msg) = $this->$function_check($data, $user);
-                if(! $bool){
-                    DB::rollBack();
-                    return [false, $msg];
-                }
-            }
-
-            //需要审批流,从未审核变成待审核
-            if($function){
-                list($bool,$msg) = $this->$function($data);
-
-                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,
-                ];
-
-                $oa = new OaService($user);
-                list($bool,$msg) = $oa->createOaOrder($args);
-                if(! $bool) {
-                    DB::rollBack();
-                    if($msg) return [false,$msg];
-                }
-            }
-
-            DB::commit();
-            return [true, ''];
-        }catch (\Throwable $exception){
-            DB::rollBack();
-            return [false, $exception->getMessage() . $exception->getFile(). $exception->getLine()];
-        }
-    }
-
-    //更新库存
-    public function changeInventory($data,$order,$user){
-        $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',$order['order_number'])
-            ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
-                return $query->where('number', $number_symbol,0);
-            })
-            ->select('crt_time')
-            ->orderBy('crt_time', 'desc')
-            ->first();
-
-        $model = InOutRecord::where('del_time',0)
-            ->where('order_number',$order['order_number'])
-            ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
-                return $query->where('number', $number_symbol,0);
-            })
-            ->select('number','crt_time','product_id','storehouse_id','top_depart_id');
-        if(! empty($latest)) {
-            $t = $latest->toArray();
-            $model->where('crt_time',$t['crt_time']);
-        }
-
-        $record = $model->get()->toArray();
-        if (empty($record)) return [false,'流水记录不存在'];
-        $top_depart_id = Storehouse::where('id', $order['storehouse_id'])->value('top_depart_id');
-        $result = $lock_number = [];
-        foreach ($record as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            if(isset($result[$key])){
-                $tmp = bcadd($result[$key]['number'], $value['number'],4);
-                $result[$key]['number'] = $tmp;
-            }else{
-                $result[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => $value['number'],
-                    'crt_time' => $value['crt_time'],
-                    'storehouse_id' => $value['storehouse_id'],
-                    'top_depart_id' => $top_depart_id,
-                ];
-            }
-            if($value['number'] < 0){
-                if(isset($lock_number[$key])){
-                    $tmp1 = bcadd($lock_number[$key], $value['number'],4);
-                    $lock_number[$key] = $tmp1;
-                }else{
-                    $lock_number[$key] = $value['number'];
-                }
-            }
-        }
-
-        //是否校验库存 是的话锁定数量要更新(根据当前操作人所在门店是否校验库存)
-//        $lock = $user['is_check_stock'];
-
-        $lock = ProductInventorySet::type_one;
-        $for_lock = OrderInventoryStock::where('order_number',$order['order_number'])
-            ->where('del_time',0)
-            ->orderBy('id','desc')
-            ->first();
-        if(! empty($for_lock)) {
-            $for_lock = $for_lock->toArray();
-            $lock = $for_lock['is_check_stock'];
-        }
-
-        $result = array_values($result);
-        foreach ($result as $key => $value){
-            $keys = $value['product_id'] . $value['storehouse_id'];
-            $m = ProductInventory::where('product_id',$value['product_id'])
-                ->where('storehouse_id',$value['storehouse_id'])
-                ->select('product_id','number','storehouse_id')
-                ->first();
-
-            if(empty($m)){
-                ProductInventory::insert($result[$key]);
-            }else{
-                //锁定数量
-                $lock_number_tmp = 0;
-                if($lock == ProductInventorySet::type_one && ! empty($lock_number[$keys])) $lock_number_tmp = $lock_number[$keys];
-
-                ProductInventory::where('product_id',$m->product_id)
-                    ->where('storehouse_id',$m->storehouse_id)
-                    ->lockForUpdate()
-                    ->update([
-                        'number' => DB::raw('number + ('. $value['number'] . ')'),
-                        'lock_number' => DB::raw('lock_number + ('. $lock_number_tmp . ')')
-                    ]);
-            }
-        }
-
-        return [true,''];
-    }
-
-    //业务单据审批通过后 驳回 更新库存
-    public function changeInventoryReject($data,$order,$user){
-        $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',$order['order_number'])
-            ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
-                return $query->where('number', $number_symbol,0);
-            })
-            ->select('crt_time')
-            ->orderBy('crt_time', 'desc')
-            ->first();
-
-        $model = InOutRecord::where('del_time',0)
-            ->where('order_number',$order['order_number'])
-            ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
-                return $query->where('number', $number_symbol,0);
-            })
-            ->select('number','crt_time','product_id','storehouse_id','top_depart_id');
-        if(! empty($latest)) {
-            $t = $latest->toArray();
-            $model->where('crt_time',$t['crt_time']);
-        }
-
-        $record = $model->get()->toArray();
-        if (empty($record)) return [false,'流水记录不存在'];
-        $top_depart_id = Storehouse::where('id', $order['storehouse_id'])->value('top_depart_id');
-        $result = $lock_number = [];
-        foreach ($record as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            if(isset($result[$key])){
-                $tmp = bcadd($result[$key]['number'], $value['number'],4);
-                $result[$key]['number'] = $tmp;
-            }else{
-                $result[$key] = [
-                    'product_id' => $value['product_id'],
-                    'number' => $value['number'],
-                    'crt_time' => $value['crt_time'],
-                    'storehouse_id' => $value['storehouse_id'],
-                    'top_depart_id' => $top_depart_id,
-                ];
-            }
-            if($value['number'] > 0){
-                if(isset($lock_number[$key])){
-                    $tmp1 = bcadd($lock_number[$key], $value['number'],4);
-                    $lock_number[$key] = $tmp1;
-                }else{
-                    $lock_number[$key] = $value['number'];
-                }
-            }
-        }
-
-        //是否校验库存 是的话锁定数量要更新(根据当前操作人所在门店是否校验库存)
-//        $lock = $user['is_check_stock'];
-
-        $lock = ProductInventorySet::type_one;
-        $for_lock = OrderInventoryStock::where('order_number',$order['order_number'])
-            ->where('del_time',0)
-            ->orderBy('id','desc')
-            ->first();
-        if(! empty($for_lock)) {
-            $for_lock = $for_lock->toArray();
-            $lock = $for_lock['is_check_stock'];
-        }
-
-        $result = array_values($result);
-        foreach ($result as $key => $value){
-            $keys = $value['product_id'] . $value['storehouse_id'];
-            $m = ProductInventory::where('product_id',$value['product_id'])
-                ->where('storehouse_id',$value['storehouse_id'])
-                ->select('product_id','number','storehouse_id')
-                ->first();
-
-            if(empty($m)){
-                ProductInventory::insert($result[$key]);
-            }else{
-                //锁定数量
-                $lock_number_tmp = 0;
-                if($lock == ProductInventorySet::type_one && ! empty($lock_number[$keys])) $lock_number_tmp = $lock_number[$keys];
-
-                ProductInventory::where('product_id',$m->product_id)
-                    ->where('storehouse_id',$m->storehouse_id)
-                    ->lockForUpdate()
-                    ->update([
-                        'number' => DB::raw('number + ('. $value['number'] . ')'),
-                        'lock_number' => DB::raw('lock_number + ('. $lock_number_tmp . ')')
-                    ]);
-            }
-        }
-
-        return [true,''];
-    }
-
-    public function createRecordAndInventory($data = []){
-        if(empty($data['type']) || empty($data['opt_case']) || empty($data['order_number'])) return [false, '传递参数缺少'];
-        $user = $data['user_data'] ?? [];
-
-        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']] ?? '';
-
-            //自动生成删除
-            $function3 = self::$create_del[$data['opt_case']] ?? '';
-            try{
-                DB::beginTransaction();
-
-                //更新单据的状态
-                list($bool,$msg) = $this->$function($data);
-                if(! $bool){
-                    DB::rollBack();
-                    return [false, $msg];
-                }
-                $order = $msg;
-
-                if($function3){
-                    list($boolean,$msg) = $this->$function3($data,$order);
-                    if(! $boolean) {
-                        DB::rollBack();
-                        return [false, $msg];
-                    }
-                }
-
-                if($function2) {
-                    //流水
-                    list($boolean,$msg) = $this->$function2($data,$order);
-                    if(! $boolean) {
-                        DB::rollBack();
-                        return [false, $msg];
-                    }
-
-                    if($msg != self::minus_one){
-                        //库存
-                        list($bool,$msg) = $this->changeInventoryReject($data,$order,$user);
-                        if(! $bool){
-                            DB::rollBack();
-                            return [false, $msg];
-                        }
-                    }
-                }
-
-                if(! empty(self::$operation_order_reject[$data['opt_case']])){
-                    $type = self::$operation_order_reject[$data['opt_case']];
-                    (new OrderOperationService())->add([
-                        'order_number' => $order['order_number'],
-                        'msg' => OrderOperation::$type[$type],
-                        'type' => $type
-                    ],$user);
-                }
-
-                DB::commit();
-                return [true, ''];
-            }catch (\Throwable $exception){
-                DB::rollBack();
-                return [false, $exception->getMessage() . $exception->getLine() . $exception->getFile()];
-            }
-        }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($data['type'] == self::TYPE_ONE){
-                    if($record) {
-                        //流水
-                        list($bool,$msg) = $this->$record($data, $order);
-                        if(! $bool) {
-                            DB::rollBack();
-                            return [false, $msg];
-                        }
-
-                        if($msg != self::minus_one){
-                            //库存
-                            list($bool,$msg) = $this->changeInventory($data, $order, $user);
-                            if(! $bool) {
-                                DB::rollBack();
-                                return [false, $msg];
-                            }
-                        }
-                    }
-
-                    if($create) {
-                        list($bool,$msg) = $this->$create($order,$user);
-                        if(! $bool) {
-                            DB::rollBack();
-                            return [false, $msg];
-                        }
-                    }
-                }
-
-                if(! empty(self::$operation_order[$data['opt_case']])){
-                    $user = $data['user_data'] ?? [];
-                    $type = self::$operation_order[$data['opt_case']];
-                    (new OrderOperationService())->add([
-                        'order_number' => $order['order_number'],
-                        'msg' => OrderOperation::$type[$type],
-                        'type' => $type
-                    ],$user);
-                }
-
-                DB::commit();
-                return [true, ''];
-            }catch (\Throwable $exception){
-                DB::rollBack();
-                return [false, $exception->getMessage() . $exception->getLine() . $exception->getFile()];
-            }
-        }
-    }
-
-    //不需要走审批流 直接调用
-    public function createRecordAndInventoryMy($data = [],$user = [],$order = []){
-        if(! empty($data['type']) && $data['type'] == self::TYPE_THREE){
-        }else{
-            //具体方法
-            $record = self::$record[$data['opt_case']] ?? "";
-            $create = self::$create[$data['opt_case']] ?? "";
-            try{
-                DB::beginTransaction();
-
-                if($record) {
-                    //流水
-                    list($bool,$msg) = $this->$record($data, $order);
-                    if(! $bool) {
-                        DB::rollBack();
-                        return [false, $msg];
-                    }
-
-                    if($msg != self::minus_one){
-                        //库存
-                        list($bool,$msg) = $this->changeInventory($data, $order, $user);
-                        if(! $bool) {
-                            DB::rollBack();
-                            return [false, $msg];
-                        }
-                    }
-                }
-
-                if($create) {
-                    list($bool,$msg) = $this->$create($order,$user);
-                    if(! $bool) {
-                        DB::rollBack();
-                        return [false, $msg];
-                    }
-                }
-
-                if(! empty(self::$operation_order[$data['opt_case']])){
-                    $type = self::$operation_order[$data['opt_case']];
-                    (new OrderOperationService())->add([
-                        'order_number' => $order['order_number'],
-                        'msg' => OrderOperation::$type[$type],
-                        'type' => $type
-                    ],$user);
-                }
-
-                DB::commit();
-                return [true, ''];
-            }catch (\Throwable $exception){
-                DB::rollBack();
-                return [false, $exception->getMessage() . $exception->getLine() . $exception->getFile()];
-            }
-        }
-    }
-
-    public function orderInventoryInsert($insert){
-        if(empty($insert['order_number'])) return;
-        $model = new OrderInventoryStock();
-        $model->order_number = $insert['order_number'];
-        $model->is_check_stock = $insert['is_check_stock'];
-        $model->save();
-    }
-}

+ 2 - 2
app/Service/DrbService.php → app/Service/DingService.php

@@ -6,9 +6,9 @@ use App\Model\DDEmployee;
 use App\Model\Record;
 use Illuminate\Support\Facades\Redis;
 
-class DrbService extends Service
+class DingService extends Service
 {
-    const RedisKey = 'DRBACCESSTOKENKEY';
+    const RedisKey = 'XKYACCESSTOKENKEY';
 
     public function getAccessToken()
     {

+ 0 - 75
app/Service/Excel/ExcelService.php

@@ -1,75 +0,0 @@
-<?php
-
-namespace App\Service\Excel;
-
-
-use App\Exports\MyExport;
-use App\Model\Header_ext;
-use App\Model\SysMenu;
-use Illuminate\Support\Facades\DB;
-use App\Service\Service;
-
-/**
- * 相关
- * @package App\Models
- */
-class ExcelService extends Service
-{
-
-
-
-    public function excelExport($request){
-        $data = $request->all();
-        $menu_id = $data['menu_id'];
-        $list = $this->excelGetData($menu_id,$request);
-        $list_key = Header_ext::where('menu_id',$menu_id)->select('key','value','type')->orderBy('sort','asc')->get()->toArray();
-
-        $excel_top_list = [];
-        $excel_list = [];
-        foreach ($list_key as $v){
-            $excel_top_list[] = $v['value'];
-        }
-        $excel_list[] = $excel_top_list;
-        foreach ($list as $v){
-            $detail = [];
-            foreach ($list_key as $vv){
-                if($vv['type'] === '2') $value = date('Y-m-d H:i:s',$v[$vv['key']]);
-                else $value = $v[$vv['key']];
-                $detail[] = $value;
-            }
-            $excel_list[] = $detail;
-        }
-        $myExport = new MyExport();
-        $data = $myExport->commonExport(['data'=>$excel_list]);
-
-        return [true,$data];
-    }
-
-
-    public function excelGetData($menu_id,$request){
-        $api = SysMenu::where('id',$menu_id)->value('api');
-        $path = $this->getMenu();
-        $control = '\\'.$path[$api]["controller"];
-        $act = $path[$api]["act"];
-        $new = new $control();
-        $detail = $new->$act($request);
-//        if(!isset($detail['data']['data'][0])) $detail['data']['data'][0] = $detail['data'];
-        return $detail['data']['data'];
-    }
-
-    public function getMenu(){
-        $app = App();
-        $routes = $app->routes->getRoutes();
-        $path = [];
-        foreach ($routes as $k => $value) {
-            if(!isset($value->action['controller'])) continue;
-            $act = explode('@',$value->action['controller']);
-            if(!isset($act[1])) continue;
-            $path[$value->uri]['act'] = $act[1];
-            $path[$value->uri]['controller'] = $act[0];
-        }
-
-        return $path;
-    }
-
-}

+ 0 - 161
app/Service/HeaderWord/HeaderWordHookService.php

@@ -1,161 +0,0 @@
-<?php
-
-namespace App\Service\HeaderWord;
-
-use App\Model\Header_ext;
-use App\Model\Header_ext_sub;
-use App\Service\Service;
-use Illuminate\Support\Facades\DB;
-
-/**
- * 表头相关工厂模式
- * @package App\Models
- */
-class HeaderWordHookService extends Service
-{
-
-    protected static $instance;
-    protected static $header;
-    protected static $header_detail;
-
-    public function __construct(){
-
-    }
-
-    public static function getInstance(): self
-    {
-        if (self::$instance == null) {
-            self::$instance = new HeaderWordHookService();
-        }
-        return self::$instance;
-    }
-
-    public function getHeaderWord($data){
-
-        if(!isset($data['type'])) return [false,'not found type'];
-        $type = $data['type'];
-        $list = Header_ext::where('type',$type)->orderBy('sort','asc')->select('*')->get()->toArray();
-//        self::$header_detail = Header_ext::where('type',$type_detail)->pluck('value','key')->toArray();
-
-        return [true,$list];
-    }
-
-    public function getHeaderSettings($data){
-        if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
-        $type = 1;
-        if(! $this->isEmpty($data,'type')) $type = $data['type'];
-
-        $header = config("header.{$data['menu_id']}")[$type] ?? [];
-
-        return [true,$header];
-    }
-
-    public function edit($data){
-        list($status,$msg) = $this->headerRule($data,false);
-        if(!$status) return [$status,$msg];
-
-        return [true,'保存成功!'];
-    }
-
-    public function add($data){
-        list($status,$msg) = $this->headerRule($data);
-        if(!$status) return [$status,$msg];
-
-        DB::beginTransaction();
-        try{
-            Header_ext::where('menu_id',$data['menu_id'])
-                ->where('type',$data['type'])
-                ->where('del_time',0)
-                ->update(['del_time'=>time()]);
-            Header_ext_sub::where('menu_id',$data['menu_id'])
-                ->where('type',$data['type'])
-                ->where('del_time',0)
-                ->update(['del_time'=>time()]);
-
-            $insert = [];
-            foreach ($data['data'] as $value){
-                $insert[] = [
-                    'key' => $value['key'] ?? '',
-                    'value' => $value['value'],
-                    'type' => $value['type'],
-                    'menu_id' => $value['menu_id'],
-                    'position' => $value['position'],
-                    'x_axis' => $value['x'],
-                    'y_axis' => $value['y'],
-                ];
-            }Header_ext::insert($insert);
-
-            Header_ext_sub::insert([
-                'type' => $data['type'],
-                'menu_id' => $data['menu_id'],
-                'merge_cells' => json_encode($data['mergeCells']),
-                'max_length' => $data['maxLength'],
-            ]);
-
-            DB::commit();
-        }catch (\Exception $e){
-            DB::rollBack();
-            return [false,$e->getMessage()];
-        }
-
-        return [true,'保存成功!'];
-    }
-
-    public function del($data){
-        if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
-
-        return [true,'删除成功'];
-    }
-
-    public function detail($data){
-        if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
-        if($this->isEmpty($data,'type')) return [false,'TYPE不能为空!'];
-
-        $result = Header_ext::where('del_time',0)
-            ->select('key','value','position','x_axis as x','y_axis as y')
-            ->where('menu_id',$data['menu_id'])
-            ->where('type',$data['type'])
-            ->get()->toArray();
-        $result_sub = Header_ext_sub::where('del_time',0)
-            ->select('merge_cells','max_length')
-            ->where('menu_id',$data['menu_id'])
-            ->where('type',$data['type'])
-            ->get()->toArray();
-
-        $return['data'] = $result;
-        $return['mergeCells'] = ! empty($result_sub[0]['merge_cells']) ? json_decode($result_sub[0]['merge_cells'],true) : [];
-        $return['maxLength'] = $result_sub[0]['max_length'] ?? 1;
-
-        return [true,$return];
-    }
-
-    public function headerRule(&$data,$is_add = true){
-        if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
-        if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
-
-        foreach ($data['data'] as $key => $value){
-            if (strpos($value['position'], ',') !== false) {
-                $tmp = explode(',',$value['position']);
-                $str_col = $str_ros =  '';
-                foreach ($tmp as $v){
-                    $tmp_v = explode(':',$v);
-                    if($tmp_v[0] != $tmp_v[1]) {
-                        // 截取头部
-                        $head = explode(':', $tmp[0])[0];
-                        // 截取尾部
-                        $tail = explode(':', end($tmp))[1];
-                        $str_ros = $head . ":" . $tail;
-                        continue;
-                    }else{
-                        $str_col .= $tmp_v[0] . ':';
-                    }
-                }
-                $str_col = rtrim($str_col,':');
-                if($str_col) $data['data'][$key]['position'] = $str_col;
-                if($str_ros) $data['data'][$key]['position'] = $str_ros;
-            }
-        }
-
-        return [true,''];
-    }
-}

+ 0 - 439
app/Service/Oa/OaService.php

@@ -1,439 +0,0 @@
-<?php
-
-namespace App\Service\Oa;
-
-
-use App\Model\Employee;
-use App\Model\Oa;
-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;
-use Illuminate\Support\Facades\Log;
-
-/**
- * Oa相关
- * @package App\Models
- */
-class OaService extends Service
-{
-
-    public function oaList($data)
-    {
-
-        $list = Oa::from('oa as o')
-            ->leftjoin('sys_menu as s', 's.id', 'o.menu_id')
-            ->select('o.id', 'o.menu_id', 'o.crt_time', 's.title')
-            ->where('o.del_time', 0);
-
-        $list = $this->limit($list, '', $data);
-
-
-        return [true, $list];
-
-    }
-
-
-    public function oaDetail($data)
-    {
-
-        $id = $data['id'];
-
-//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
-        $detail = OaSub::from('oa_sub as os')
-            ->leftJoin('employee as e', 'e.id', 'os.employee_id')
-            ->where('oa_id', $id)
-            ->where('os.del_time', 0)
-            ->select('os.sort', 'os.type', 'os.employee_id', 'os.remark', 'e.emp_name','os.type')
-            ->orderBy('os.sort', 'asc')->get()->toArray();
-        $first = Oa::from('oa as o')
-            ->leftjoin('sys_menu as s', 's.id', 'o.menu_id')
-            ->select('o.id', 'o.menu_id', 'o.crt_time', 's.title','o.type')
-            ->where('o.del_time', 0)->where('o.id', $id)->first()->toArray();
-
-        $first['detail'] = $detail;
-
-        return [true, $first];
-
-    }
-
-    public function oaAdd($data)
-    {
-
-        $first = Oa::where('del_time', 0)->where('menu_id', $data['menu_id']);
-        if(isset($data['type'])) $first = $first->where('type',$data['type']);
-        $first = $first->first();
-
-        if ($first) return [false, '该菜单oa已存在!'];
-        $oa = new Oa();
-
-
-        try {
-            DB::beginTransaction();
-            $oa->menu_id = $data['menu_id'];
-            $oa->type = $data['type'];
-            $oa->save();
-            $id = $oa->id;
-            $insert = [];
-            foreach ($data['detail'] as $v) {
-                foreach ($v['employee_id'] as $e_id) {
-                    $insert[] = [
-                        'oa_id' => $id,
-                        'remark' => $v['remark'],
-                        'employee_id' => $e_id,
-                        'sort' => $v['sort'],
-                        'type' => $v['type'],
-                        'crt_time' => time(),
-                        'upd_time' => time(),
-                    ];
-                }
-
-            }
-            OaSub::insert($insert);
-            DB::commit();
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return [false, $e->getLine() . ':' . $e->getMessage()];
-        }
-
-        return [true, '保存成功!'];
-
-    }
-
-
-    public function oaEdit($data)
-    {
-        $first = Oa::where('del_time', 0)->where('id', '<>', $data['id'])->where('menu_id', $data['menu_id']);
-        if(isset($data['type'])) $first = $first->where('type',$data['type']);
-        $first = $first->first();
-
-        if ($first) return [false, '该菜单oa已存在!'];
-
-
-        try {
-            DB::beginTransaction();
-            $oa = Oa::where('id', $data['id'])->first();
-            $oa->menu_id = $data['menu_id'];
-            $oa->type = $data['type'];
-            $oa->save();
-            $id = $oa->id;
-            $insert = [];
-            OaSub::where('oa_id', $id)->update([
-                'del_time' => time()
-            ]);
-            foreach ($data['detail'] as $v) {
-                foreach ($v['employee_id'] as $e_id) {
-                    $insert[] = [
-                        'oa_id' => $id,
-                        'remark' => $v['remark'],
-                        'employee_id' => $e_id,
-                        'sort' => $v['sort'],
-                        'type' => $v['type'],
-                        'crt_time' => time(),
-                        'upd_time' => time(),
-                    ];
-                }
-            }
-            OaSub::insert($insert);
-            DB::commit();
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return [false, $e->getMessage()];
-        }
-
-        return [true, '更新成功'];
-    }
-
-    public function oaDel($data)
-    {
-        $id = $data['id'];
-        Oa::where('id', $id)->update([
-            'del_time' => time(),
-        ]);
-
-        OaSub::where('oa_id', $id)->update([
-            'del_time' => time(),
-        ]);
-
-        return [true,'删除成功'];
-    }
-
-    public function oaSubType($data){
-        $service = new CheckService();
-        $list = $service->map;
-
-        $return = [];
-        foreach ($list as $k=>$v){
-            $return[] = [
-                'id' => $k,
-                'title' => $v,
-            ];
-        }
-
-        return [true,$return];
-    }
-
-
-    public function createOaOrder($data)
-    {
-        Log::channel('request')->info('request', ['param' => $data]);
-        if(!isset($data['order_number'])) $data['order_number'] = $data['order_no'];
-        $menu_id = $data['menu_id'];
-        $order_no = $data['order_number'];
-        $type = isset($data['opt_case']) ? $data['opt_case'] : 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();
-        if (empty($list)) {
-            $service =  new CheckService();
-            $service->createRecordAndInventory([
-                'order_number' => $order_no,
-                'type' => 1,
-                'opt_case' => $type,
-            ]);
-            return [200, ''];
-        } //pending
-        $time = time();
-        try {
-            DB::beginTransaction();
-            $order = new OaOrder();
-            $order->menu_id = $menu_id;
-            $order->order_no = $order_no;
-            $order->type = $type;
-            $order->save();
-            $id = $order->id;
-            $insert = [];
-            $sub_insert = [];
-            $is_sort = [];
-            foreach ($list as $v) {
-                if(!in_array($v['sort'],$is_sort)){
-                    $is_sort[] = $v['sort'];
-                    $sub_insert[] = [
-                        'oa_order_id' => $id,
-                        'crt_time' => $time,
-                        'upd_time' => $time,
-                        'sort' => $v['sort'],
-                        'type' => $v['type'],
-                    ];
-                }
-                $insert[] = [
-                    'oa_order_id' => $id,
-                    'crt_time' => $time,
-                    'upd_time' => $time,
-                    'sort' => $v['sort'],
-                    'type' => $v['type'],
-                    'employee_id' => $v['employee_id'],
-                    'remark' => '',
-                ];
-            }
-
-            OaOrderSubEmployee::insert($insert);
-            OaOrderSub::insert($sub_insert);
-
-
-            DB::commit();
-            return [201, '']; //success
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return [false, $e->getMessage()];
-        }
-
-
-    }
-
-    public function oaOrderList($data){
-        $list = OaOrder::from('oa_order as o')
-            ->leftJoin('sys_menu as s','s.id','o.menu_id')
-            ->select('o.order_no','o.id','o.crt_time','o.upd_time','o.state','s.title','s.uri');
-
-        $list = $this->limit($list,'',$data);
-
-        return [true,$list];
-    }
-
-    public function oaOrderDetail($data,$user){
-
-        $id = $data['id'];
-        $first = OaOrder::from('oa_order as o')
-            ->leftJoin('sys_menu as s','s.id','o.menu_id')
-            ->select('o.menu_id','o.param','o.crt_time','o.upd_time','o.state','o.order_no','s.title as menu_title','s.uri')->first()->toArray();
-        $employee_list = OaOrderSub::from('oa_order_sub_employee as s')
-            ->leftJoin('employee as e','e.id','s.employee_id')
-            ->where('s.oa_order_id',$id)->select('s.sort','s.type','s.employee_id','s.remark','e.emp_name','s.state','s.crt_time','s.upd_time')->orderBy('s.sort','asc')->get()->toArray();
-        $employee_key_list = [];
-        foreach ($employee_list as $v){
-            $employee_key_list[$v['sort']][] = $v;
-        }
-        $detail = OaOrderSub::where('oa_order_id',$id)->select('*')->orderBy('sort','asc')->get()->toArray();
-        foreach ($detail as &$v){
-            $v['list'] = $employee_key_list[$v['sort']];
-        }
-        $first['detail'] = $detail;
-
-        return [true,$first];
-    }
-
-    public function oaCheck($data,$user){
-
-
-        $service =  new CheckService();
-        $id = $data['id'];
-        $user_id = $user['id'];
-//        $user_id = '230';
-        $state = $data['state'];
-        $remark = $data['remark'];
-
-        $detail = OaOrder::where('id',$id)->first()->toArray();
-
-        $oa_type = $detail['type'];
-        $order_no = $detail['order_no'];
-        $time = time();
-        if($oa_type == 2) return [false,'订单无法重复审核'];
-        $list = OaOrderSub::where('oa_order_id',$id)->orderBy('sort','asc')->select('*')->get()->toArray();
-        $sub_list = OaOrderSubEmployee::where('oa_order_id',$id)->orderBy('sort','asc')->select('*')->get()->toArray();
-        $employee_name = Employee::where('id',$user_id)->value('emp_name');
-        list($unoa_sort_list,$complete_sort,$employee_list,$max_sort) = $this->dealBeforeOaUser($list,$sub_list);
-        if(!isset($employee_list[$user_id])) return [false,'该用户无法审核'];
-
-        $sort = $employee_list[$user_id];
-
-        if($state == 1) {
-
-            if($sort <= $complete_sort) return [false,'用户无法审核'];
-
-            $update_employee = [];
-            $completing_sort = [];
-            foreach ($unoa_sort_list as $v){
-                if($v['sort'] < $sort){
-                    $update_employee[] = $v['employee_id'];
-                    $completing_sort[] = $v['sort'];
-                }
-            }
-            OaOrderSubEmployee::wherein('employee_id',$update_employee)->where('oa_order_id',$id)->update([
-                'state' => 1,
-                'remark' => $employee_name.'审核通过,自动成功',
-                'upd_time' => $time,
-            ]);
-
-            OaOrderSub::wherein('sort',$completing_sort)->where('oa_order_id',$id)->update([
-                'state' => 1,
-                'upd_time' => $time,
-            ]);
-
-            OaOrderSubEmployee::where('employee_id',$user_id)->where('oa_order_id',$id)->update([
-                'state' => 1,
-                'remark' => $remark,
-                'upd_time' => $time,
-            ]);
-
-            OaOrderSub::where('sort',$sort)->where('oa_order_id',$id)->update([
-                'state' => 1,
-                'upd_time' => $time,
-            ]);
-
-            if($sort == $max_sort){
-                OaOrder::where('id',$id)->update([
-                    'state' => 2,
-                    'upd_time' => $time,
-                ]);
-                $service->createRecordAndInventory([
-                    'order_number' => $detail['order_no'],
-                    'type' => 1,
-                    'opt_case' => $oa_type,
-                ]);
-            }else{
-                OaOrder::where('id',$id)->update([
-                    'state' => 1,
-                    'upd_time' => $time,
-                ]);
-            }
-
-        }else{
-            if($sort == 1){
-                OaOrder::where('id',$id)->update([
-                    'del_time' => $time,
-                    'upd_time' => $time,
-                ]);
-
-                OaOrderSubEmployee::where('oa_order_id',$id)->update([
-                    'del_time' => $time,
-                    'upd_time' => $time,
-                ]);
-                OaOrderSub::where('oa_order_id',$id)->update([
-                    'del_time' => $time,
-                    'upd_time' => $time,
-                ]);
-                $service->createRecordAndInventory([
-                    'order_number' => $detail['order_no'],
-                    'type' => 2,
-                    'opt_case' => $oa_type,
-                ]);
-
-            }
-            $before_sort = $sort-1;
-            OaOrderSubEmployee::where('oa_order_id',$id)->where('sort',$before_sort)->update([
-                'state' => 2,
-                'remark' => $remark,
-            ]);
-            OaOrderSub::where('oa_order_id',$id)->where('sort',$before_sort)->update([
-                'state' => 2,
-                'upd_time' => $time,
-            ]);
-            if($before_sort == 1){
-                OaOrder::where('id',$id)->update([
-                    'state' => 0,
-                    'upd_time' => $time,
-                ]);
-            }
-        }
-
-        return [true,'审核成功!'];
-    }
-
-    public function dealBeforeOaUser($list,$sub_list){
-
-        $sub_key_list = [];
-        $employee_list  = [];
-        foreach ($sub_list as $v){
-            $sub_key_list[$v['sort']][] = $v;
-
-            if(!isset( $employee_list[$v['employee_id']])) $employee_list[$v['employee_id']] = $v['sort'];
-            else {
-                if($v['sort']> $employee_list[$v['employee_id']]) $employee_list[$v['employee_id']] = $v['sort'];
-            }
-        }
-
-        $unoa_sort_list = [];
-
-        $complete_sort = 0;
-        foreach ($list as $v){
-            if($v['state'] == 0||$v['state'] == 2){
-                foreach ($sub_key_list[$v['sort']] as $vv){
-                    $unoa_sort_list[] = [
-                        'employee_id' => $vv['employee_id'],
-                        'sort' => $v['sort'],
-                    ];
-                }
-
-            }
-            if($v['state'] == 1){
-
-                    $complete_sort = $v['sort'];
-
-            }
-
-            $max_sort = $v['sort'];
-        }
-
-        return [$unoa_sort_list,$complete_sort,$employee_list,$max_sort];
-    }
-
-}

+ 0 - 168
app/Service/Weixin/WeixinService.php

@@ -1,168 +0,0 @@
-<?php
-
-namespace App\Service\Weixin;
-
-use App\Service\Service;
-use Illuminate\Support\Facades\Redis;
-
-class WeixinService extends Service
-{
-    const APPID = 'wxe048bcdcc21aae6e';
-    const APPSECRET = '191789c5b4ef2b3d5b9e79bb62428092';
-    const ACCESS_URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s';
-    const OPENID = '';
-    const TOKEN = '';
-    const KEY = 'weixintnine';
-
-    const STABLE_TOKEN_URL = 'https://api.weixin.qq.com/cgi-bin/stable_token'; // 稳定版接口
-    const KEY_STABLE = 'weixinMessage';
-
-    public function getToken(){
-        $token_key = self::KEY.'_'.'token';
-        $token = Redis::get($token_key);
-        if(! $token){
-            $url = sprintf(self::ACCESS_URL,self::APPID,self::APPSECRET);
-            $res = $this->curlOpen($url);
-            $res = json_decode($res,true);
-            if(isset($res['errmsg'])) return [false,$res['errmsg']];
-            if(!isset($res['access_token'])) return [false,'request error'];
-            $token = $res['access_token'];
-            $expire_time = $res['expires_in']-300;
-            Redis::set($token_key,$token);
-            Redis::expire($token_key, $expire_time);
-            return [true,$token];
-        }
-        return [true,$token];
-    }
-
-    public function getTokenSTABLE() {
-        $token_key = self::KEY_STABLE . '_token';
-        $token = Redis::get($token_key);
-
-        // 缓存存在且有效
-        if ($token) return [true, $token];
-
-        // 构建 POST 请求体
-        $postData = json_encode([
-            'grant_type' => 'client_credential',
-            'appid' => self::APPID,
-            'secret' => self::APPSECRET,
-            // 可选:'force_refresh' => true 强制刷新
-        ]);
-
-        list($status, $res) = $this->post_helper(self::STABLE_TOKEN_URL, $postData);
-        if(! $status) return [false, $res];
-
-        // 错误处理
-        if (isset($res['errcode']) && $res['errcode'] != 0) return [false, "{$res['errcode']}: {$res['errmsg']}"];
-        if (empty($res['access_token']))  return [false, 'access_token missing'];
-
-        // 缓存 Token(有效期7200秒,提前300秒刷新)
-        $token = $res['access_token'];
-        $expire = $res['expires_in'] - 300; // 实际6900秒(1小时55分)
-        Redis::setex($token_key, $expire, $token);
-
-        return [true, $token];
-    }
-
-    public function getOpenid($data){
-        if(empty($data['code'])) return [false, 'code不能为空'];
-        $code = $data['code'];
-        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code';
-        $url = sprintf($url,self::APPID,self::APPSECRET,$code);
-        $res = $this->curlOpen($url);
-        $res = json_decode($res,true);
-        if(!isset($res['openid'])) return [false,$res['errmsg']??'request error'];
-        $openid = $res['openid'];
-        return [true,['openid' => $openid]];
-    }
-
-    public function setWebHook($data){
-//        file_put_contents('22.txt',json_encode($data));
-        $uri = isset($data['uri']) ? $data['uri'] : '';
-        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
-        $param = isset($data['param']) ? $data['param'] : '';
-        $redirect_uri = urlencode('https://t9api.qingyaokeji.com/wxapi/getUnionid?uri='.$uri.'&param='.$param);
-        $url = sprintf($url,self::APPID,$redirect_uri);
-        header("Location:".$url);exit;
-        echo 'ok';die;
-    }
-
-    public function getUnionid($data){
-        file_put_contents('22.txt',date('YmdHis').json_encode($data));
-//        echo $data['code'];
-
-        if(isset($data['code'])) {
-            list($status,$openid) = $this->getOpenid($data);
-            file_put_contents('222.txt',date('YmdHis').json_encode($openid));
-            if(!$status) return [false,$openid];
-            $uri = $data['uri'];
-            $openid = $openid['openid'];
-            $param = isset($data['param']) ? $data['param'] : '';
-            $url = 'https://t9.qingyaokeji.com/#/wxGet?uri='.$uri.'&openid='.$openid.'&param='.$param;
-            header('Location:'.$url);exit();
-        }
-    }
-
-//    public function sendTmpMsg($data){
-//        //        $openid = 'okXNa69ggEX61KvHUhCq9PcGrPKI';
-//        $data = [
-//            'openid' => 'o7B4f68DuDlBSevGdctFyP8MD-nw',
-//            'tempid' => '5azHlaoAu6MgRzkxn_HL6ygFt_wIkXEz9CklPWEdP70',
-//            'reload_url' => '',
-//            'first' => '工资发放',
-//            'remark' => '请查收',
-//            'detail' => [
-//                'thing2' => '姓名',
-//                'thing6' => '10',
-//                'time4' => '2023-09-01',
-//                'character_string3' => 'st.1231',
-//                'thing1' => '类型',
-//            ]
-//        ];
-//        if(!isset($data['detail'])) return [false,'invalid detail'];
-//        if(!isset($data['openid'])) return [false,'invalid openid'];
-//        if(!isset($data['tempid'])) return [false,'invalid tempid'];
-//        if(!isset($data['reload_url'])) return [false,'invalid reload_url'];
-//        $templateID = $data['tempid'];
-//        $reload_url = $data['reload_url'];
-//        list($status,$token) = $this->getToken();
-//        if(!$status) return [false,$token];
-//        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$token;
-//        $post = '{
-//           "touser":"'.$data['openid'].'",
-//           "template_id":"'.$templateID.'",
-//           "url":"'.$reload_url.'",
-//           "data":{
-//                   "first": {
-//                       "value":"'.$data['first'].'",
-//                       "color":"#173177"
-//                   },
-//                   %s
-//                   "remark":{
-//                       "value":"'.$data['remark'].'",
-//                       "color":"#173177"
-//                   }
-//           }
-//       }';
-//        $content = "";
-//        foreach ($data['detail'] as $k=>$v){
-//
-//            $content .= '"'.$k.'": {
-//                       "value":"'.$v.'",
-//                       "color":"#173177"
-//                   },';
-//        }
-//        $post = sprintf($post,$content);
-////        var_dump($post);
-////        var_dump(json_decode($post));die;
-////        var_dump($url);
-////        var_dump(json_encode(json_decode($post)));
-//        $res = $this->curlOpen($url,['post'=>$post]);
-//        $res = json_decode($res,true);
-//        if(isset($res['errcode'])&&$res['errcode'] != 0) return [false,$res['errmsg']];
-//        if(isset($res['errcode'])&&$res['errcode'] === 0) return [true,''];
-//        return [false,json_encode($res)];
-//
-//    }
-}

+ 0 - 99
app/Service/Weixin/WxEmployeeService.php

@@ -1,99 +0,0 @@
-<?php
-
-namespace App\Service\Weixin;
-
-use App\Model\Employee;
-use App\Model\WxEmployeeOfficial;
-use App\Service\Service;
-use App\Model\WxEmployee;
-use Illuminate\Support\Facades\Hash;
-
-class WxEmployeeService extends Service
-{
-    public function setUser($data){
-        if(empty($data['openid'])) return [false, 'openId不能为空!'];
-        $openid = $data['openid'];
-        $user = WxEmployeeOfficial::where('openid',$openid)->first();
-        if(empty($user)) {
-            $user = new WxEmployeeOfficial();
-            $user->openid = $openid;
-            $user->appid = WeixinService::APPID;
-            $user->save();
-            $state = 0;
-        }else{
-            $state = 1;
-            if(empty($user->employee_id)) $state = 0;
-        }
-
-        return [true,['openid'=>$openid, 'state'=>$state ]];
-    }
-
-    public function login($data,$openid){
-        if(empty($data['account'])) return [false, '账号不能为空'];
-        if(empty($data['password'])) return [false, '密码不能为空'];
-        if(empty($openid) || $openid == null) return [false, 'ciphertext不能为空'];
-
-        $account = $data['account'];
-        $password = $data['password'];
-        list($status,$data) = $this->loginRule([
-            'account' => $account,
-            'password' => $password,
-        ]);
-        if(! $status) return [false, $data];
-
-        $user_id = $data['id'];
-        $user = WxEmployeeOfficial::where('openid',$openid)->first();
-
-        if(empty($user)) {
-            $bool = WxEmployeeOfficial::where('employee_id',$user_id)->exists();
-            if($bool) return [false,'该账号已经与其他微信用户绑定!'];
-
-            $user = new WxEmployeeOfficial();
-            $user->openid = $openid;
-            $user->appid = WeixinService::APPID;
-            $user->employee_id = $user_id;
-            $user->save();
-        }else{
-            if(empty($user->employee_id)){
-                $bool = WxEmployeeOfficial::where('employee_id',$user_id)->exists();
-                if($bool) return [false,'该账号已经与其他微信用户绑定!'];
-                $user->employee_id = $user_id;
-                $user->save();
-            }
-            if(! empty($user->employee_id) && $user->employee_id != $user_id) return [false,'该账号已经与其他微信用户绑定!'];
-        }
-
-        return [true, $data];
-    }
-
-    public function loginRule($data){
-        if($this->isEmpty($data,'account')) return [false,'账号不能为空!'];
-        if($this->isEmpty($data,'password')) return [false,'密码不存在!'];
-
-        $account = $data['account'];
-        $res = Employee::where('del_time',0)
-            ->where(function ($query)use($account) {
-                $query->where('account', $account)
-                    ->orWhere('mobile', $account);
-            })
-            ->get()->toArray();
-
-        if(empty($res)) return [false,'账号不存在或已被删除!'];
-        if(count($res) > 1) return [false,'手机号绑定多个账户!'];
-
-        $res = reset($res);
-        if($res['state'] == Employee::NOT_USE) return [false,'账号停用!'];
-        if(empty($res['password'])){
-            if(empty($res['mobile'])) return [false, '用户手机号码信息不能为空'];
-            $lastFour = substr($res['mobile'], -4);
-            if($lastFour != $data['password']) return [false,'密码错误!'];
-
-            Employee::where('id', $res['id'])
-                ->update(['password' => Hash::make($data['password'])]);
-        }else{
-            if(! Hash::check($data['password'], $res['password'])) return [false,'密码错误!'];
-        }
-
-        return [true, ['id'=>$res['id'], 'name'=>$res['emp_name'], 'account' => $res['account']]];
-    }
-}

+ 0 - 92
app/Service/Weixin/WxSendMessageService.php

@@ -1,92 +0,0 @@
-<?php
-
-namespace App\Service\Weixin;
-
-use App\Model\WxEmployeeOfficial;
-use App\Service\Service;
-use Illuminate\Support\Facades\Log;
-
-class WxSendMessageService extends WeixinService
-{
-
-
-    /**
-     * @param $user_id
-     * @param $type 1审核申请 2抄送 3 审核结果
-     * @param $state 0申请审核1审核通过2审核拒绝
-     * @param $menu_id
-     * @param $order_data
-     * @return array
-     */
-    public function wx_sendMsg($user_id,$type,$state,$menu_id,$order_data,$pagepath = "",$openid = ""){
-        //如果没提供openid 则查询
-        if(empty($openid)) $openid = WxEmployeeOfficial::where('employee_id',$user_id)->value('openid');
-        if(empty($openid)) return [false,'not invaild openid'];
-        $config = config('wx.msg');
-        switch ($type){
-            case '1':
-            case '2':
-                $menu_type = $menu_id.'_'.$type;
-                break;
-            case '3':
-                $menu_type = $menu_id.'_'.$type.'_'.$state;
-                break;
-            default :
-                $menu_type = '';
-        }
-        if(!isset($config['wx_menu'][$menu_type])) return [false,'not invaild menu_type'];
-        $tmp_data = $config['wx_tmp_id'][$config['wx_menu'][$menu_type]];
-        $detail = $tmp_data['param'];
-        $tmp_id = $tmp_data['tmp_id'];
-        $data = [];
-        foreach ($detail as $k=>$v){
-            $data[$v] = $order_data[$k];
-        }
-        list($status,$msg) = $this->sendTmpMsg($openid,$tmp_id,['detail'=>$data],$pagepath);
-        if(! $status) return [false, $msg];
-
-
-        return [true,''];
-    }
-
-    public function sendTmpMsg($openid,$tempid,$data,$pagepath="")
-    {
-        $reload_url = $data['reload_url'] ?? '';
-        list($status, $token) = $this->getTokenSTABLE();
-        if (!$status) return [false, $token];
-        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $token;
-        $post = '{
-           "touser":"' . $openid . '",
-           "template_id":"' . $tempid . '",
-           "url":"' . $reload_url . '",
-           "miniprogram":{
-             "appid":"wxc0bc3dfc58b4e00e",
-             "pagepath":"' . $pagepath . '"
-           },
-           "data":{
-                   "first": {
-                       "value":"1",
-                       "color":"#173177"
-                   },
-                   %s
-                   "remark":{
-                       "value":"1",
-                       "color":"#173177"
-                   }
-           }
-       }';
-        $content = "";
-        foreach ($data['detail'] as $k => $v) {
-            $content .= '"' . $k . '": {
-                       "value":"' . $v . '",
-                       "color":"#173177"
-                   },';
-        }
-        $post = sprintf($post, $content);
-        $res = $this->curlOpen($url, ['post' => $post]);
-        $res = json_decode($res, true);
-        if (isset($res['errcode']) && $res['errcode'] != 0) return [false, $res['errmsg']];
-        if (isset($res['errcode']) && $res['errcode'] === 0) return [true, ''];
-        return [false, json_encode($res)];
-    }
-}

+ 0 - 149
app/Service/Wx/Service.php

@@ -1,149 +0,0 @@
-<?php
-
-namespace App\Service\Wx;
-
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Redis;
-use Illuminate\Support\Facades\Storage;
-
-
-/**
- * 公用的公共服务
- * @package App\Models
- */
-class Service
-{
-
-    public $log;
-    public $total = 0;
-
-    public function __construct()
-    {
-
-    }
-
-
-
-
-
-    function curlOpen($url, $config = array())
-    {
-        $arr = array('post' => false,'referer' => $url,'cookie' => '', 'useragent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; customie8)', 'timeout' => 100, 'return' => true, 'proxy' => '', 'userpwd' => '', 'nobody' => false,'header'=>array(),'gzip'=>true,'ssl'=>true,'isupfile'=>false,'returnheader'=>false,'request'=>'post');
-        $arr = array_merge($arr, $config);
-        $ch = curl_init();
-
-        curl_setopt($ch, CURLOPT_URL, $url);
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);
-        curl_setopt($ch, CURLOPT_NOBODY, $arr['nobody']);
-        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-        curl_setopt($ch, CURLOPT_USERAGENT, $arr['useragent']);
-        curl_setopt($ch, CURLOPT_REFERER, $arr['referer']);
-        curl_setopt($ch, CURLOPT_TIMEOUT, $arr['timeout']);
-
-
-        curl_setopt($ch, CURLOPT_HEADER, $arr['returnheader']);//��ȡheader
-        if($arr['gzip']) curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
-        if($arr['ssl'])
-        {
-            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
-        }
-        if(!empty($arr['cookie']))
-        {
-            curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);
-            curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);
-        }
-
-        if(!empty($arr['proxy']))
-        {
-            //curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
-            curl_setopt ($ch, CURLOPT_PROXY, $arr['proxy']);
-            if(!empty($arr['userpwd']))
-            {
-                curl_setopt($ch,CURLOPT_PROXYUSERPWD,$arr['userpwd']);
-            }
-        }
-
-        //ip�Ƚ����⣬�ü�ֵ��ʾ
-        if(!empty($arr['header']['ip']))
-        {
-            array_push($arr['header'],'X-FORWARDED-FOR:'.$arr['header']['ip'],'CLIENT-IP:'.$arr['header']['ip']);
-            unset($arr['header']['ip']);
-        }
-        $arr['header'] = array_filter($arr['header']);
-
-        if(!empty($arr['header']))
-        {
-            curl_setopt($ch, CURLOPT_HTTPHEADER, $arr['header']);
-        }
-
-        if($arr['request'] === 'put'){
-            curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
-            curl_setopt($ch, CURLOPT_POSTFIELDS,$arr['post']);
-        }elseif($arr['post'] != false)
-        {
-            curl_setopt($ch, CURLOPT_POST, true);
-            if(is_array($arr['post']) && $arr['isupfile'] === false)
-            {
-                $post = http_build_query($arr['post']);
-            }
-            else
-            {
-                $post = $arr['post'];
-            }
-            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
-        }
-
-        $result = curl_exec($ch);
-        curl_close($ch);
-
-        return $result;
-    }
-
-    //分页共用
-    public function limit($db, $columns, $request)
-    {
-        $per_page = $request['page_size'] ?? 9999;
-        $page = $request['page_index'] ?? 1;
-        $return = $db->paginate($per_page, $columns, 'page', $page)->toArray();
-
-        $data['total'] = $return['total'];
-        $data['data'] = $return['data'];
-        return $data;
-    }
-
-    //判断是否为空
-    protected function isEmpty($data, $word)
-    {
-        if (isset($data[$word]) && (!empty($data[$word]) || $data[$word] === '0'|| $data[$word] === 0)) return false;
-        return true;
-    }
-
-    //后台端 某些需要限制请求频率的接口
-    public function limitingSendRequestBackg($key,$ttl = 5){
-        if($ttl < 5) $ttl = 5;
-
-        // 使用Redis Facade设置,当键名不存在时才设置成功
-        if (Redis::setnx($key, 1)) {
-            Redis::expire($key, $ttl); //多少秒后过期
-
-            return [true, ''];
-        }
-
-        return [false,'操作频繁, 请在 ' . $ttl . '秒后重试'];
-    }
-
-    public function delStorageFile($old, $new = [], $dir = "upload_files/"){
-        foreach ($old as $value){
-            if(! in_array($value, $new)){
-                $filename_rep = "/api/uploadFiles/";
-                $filename = str_replace($filename_rep, "", $value);
-                $filePath = $dir . $filename;
-                if (Storage::disk('public')->exists($filePath)) {
-                    // 文件存在 进行删除操作
-                    Storage::disk('public')->delete($filePath);
-                }
-            }
-        }
-    }
-}

+ 0 - 152
app/Service/Wx/WxEmployeeService.php

@@ -1,152 +0,0 @@
-<?php
-
-namespace App\Service\Wx;
-
-use App\Model\Employee;
-use App\Model\EmployeeDepartPermission;
-use App\Model\EmployeeFoursShop;
-use App\Model\EmployeeTeamPermission;
-use App\Model\FoursShop;
-use App\Model\StorehouseEmployee;
-use App\Model\TemporaryJs;
-use App\Model\WxEmployee;
-use App\Service\EmployeeService;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Hash;
-
-/**
- * 区域相关
- * @package App\Models
- */
-class WxEmployeeService extends Service
-{
-
-    public function setUser($data){
-        if(empty($data['code'])) return [false, '用户登录凭证(code)不能为空'];
-        $code = $data['code'];
-        $service = new WxService();
-        list($status,$openid) = $service->getOpenid($code);
-        if(!$status) return [false,$openid];
-
-        $user = WxEmployee::where('openid',$openid)->first();
-        if(empty($user)) {
-            $user = new WxEmployee();
-            $user->mobile = '';
-            $user->openid = $openid;
-            $user->appid = $service->appid;
-            $user->save();
-
-            $state = 0;
-        }else{
-            $state = 1;
-            if(empty($user->mobile)){
-                $state = 0;
-            }else{
-                $bool = Employee::where('del_time',0)
-                    ->where('mobile',$user->mobile)
-                    ->where('state',Employee::USE)
-                    ->exists();
-                if(! $bool) $state = 0;
-            }
-        }
-
-        return [true,['openid'=>$openid, 'state'=> $state]];
-    }
-
-
-    public function setMobile($data){
-        if(empty($data['code'])) return [false, '用户登录凭证(code)不能为空'];
-        if(empty($data['openid'])) return [false, 'openID不能为空'];
-        $code = $data['code'];
-        $openid = $data['openid'];
-        $service = new WxService();
-        list($status,$mobile) = $service->getMobile($code);
-        if(!$status) return [false,$mobile];
-
-        $user = WxEmployee::where('openid',$openid)->first();
-        if(empty($user))  return [false,'openID在系统中暂无记录'];
-
-        $user->mobile = $mobile;
-        $user->save();
-
-        return [true, ['mobile' => $mobile]];
-    }
-
-    public function login($data){
-        if(empty($data['account'])) return [false, '账号不能为空'];
-        if(empty($data['password'])) return [false, '密码不能为空'];
-        if(empty($data['openid'])) return [false, 'openID不能为空'];
-        $account = $data['account'];
-        $password = $data['password'];
-        $openid = $data['openid'];
-
-        list($status,$data) = $this->loginRule([
-            'account' => $account,
-            'password' => $password,
-        ]);
-
-        if(!$status) return [false,$data];
-        $user_id = $data['id'];
-        $user = WxEmployee::where('openid',$openid)->first();
-        if(empty($user)||empty($user->mobile)) return [false,'请先登陆'];
-
-        $user->employee_id = $user_id;
-        $user->save();
-
-        return [true,$data];
-    }
-
-    public function loginRule($data){
-        if($this->isEmpty($data,'account')) return [false,'账号不能为空!'];
-        if($this->isEmpty($data,'password')) return [false,'密码不存在!'];
-
-        $account = $data['account'];
-        $res = Employee::where('del_time',0)
-            ->where(function ($query)use($account) {
-                $query->where('account', $account)
-                    ->orWhere('mobile', $account);
-            })
-            ->get()->toArray();
-
-        if(empty($res)) return [false,'账号不存在或已被删除!'];
-        if(count($res) > 1) return [false,'手机号绑定多个账户!'];
-
-        $res = reset($res);
-        if(! Hash::check($data['password'], $res['password'])) return [false,'密码错误!'];
-        if($res['state'] == Employee::NOT_USE) return [false,'账号停用!'];
-
-        return [true, ['id'=>$res['id'], 'name'=>$res['emp_name'], 'account' => $res['account']]];
-    }
-
-    public function checkWxUser($userId){
-        $res = Employee::where('id', $userId)
-//            ->where('del_time',0)
-            ->where('state',Employee::USE)->get()->first();
-        if(empty($res)) return [false, '该账号无法登录,请联系管理员!'];
-
-        return [true, $res];
-    }
-
-    public function getTopMessage($data){
-        if($this->isEmpty($data,'openid')) return [false,'openid不能为空!'];
-
-        $employee = WxEmployee::where('openid',$data['openid'])->first();
-        if(empty($employee)) return [false,'未找到用户信息!'];
-        $employee = $employee->toArray();
-        if(empty($employee['employee_id'])) {
-            //找到对应的账号
-            $emp = Employee::where('del_time',0)
-                ->where('mobile',$employee['mobile'])
-                ->where('state',Employee::USE)
-                ->select('id')
-                ->first();
-            if(empty($emp)) return [0,'用户手机信息未匹配到系统账号,请录入手机号!'];
-            $emp = $emp->toArray();
-            WxEmployee::where('id',$employee['id'])->update(['employee_id' => $emp['id']]);
-            $employee['employee_id'] = $emp['id'];
-        }
-        $return = EmployeeService::getLoginMessage($employee['employee_id']);
-
-        return [true, $return];
-    }
-}

+ 0 - 157
app/Service/Wx/WxService.php

@@ -1,157 +0,0 @@
-<?php
-
-namespace App\Service\Wx;
-
-use App\Model\WxEmployeeOfficial;
-use Illuminate\Support\Facades\Redis;
-
-class WxService extends Service
-{
-//    public $appid = 'wx4e1324c600df37a6';
-//    public $secret = '72f8c912d462b0f4ff46cbedac0c80bf';
-
-    //测试
-//    public $appid = 'wx4e1324c600df37a6';
-//    public $secret = 'cec65770bf168a57dc8e5a012d4c9537';
-
-    //正式
-    public $appid = 'wxc0bc3dfc58b4e00e';
-    public $secret = 'ad37474f1a646281052438206b8aaed2';
-
-    public function getOpenid($code){
-
-
-        $appid = $this->appid;
-        $secret = $this->secret;
-//        $code = '0b1tFv100Sm91Q1kko0004vZGu0tFv12';
-        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
-
-        list($status,$res) = $this->wx_return($url);
-        if($status) return [true,$res['openid']];
-        else return [false,$res];
-
-
-
-    }
-
-    public function getToken(){
-
-        $token_key = $this->appid.'_wx_token';
-
-        $token = Redis::get($token_key);
-        if(!empty($token)){
-            return [true,$token];
-        }
-        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->secret;
-        list($status,$res) = $this->wx_return($url);
-        if($status) {
-            Redis::setex($token_key,7100,$res['access_token']);
-            return [true,$res['access_token']];
-        }
-        else return [false,$res];
-
-    }
-
-    public function getMobile($code){
-        list($status,$token) = $this->getToken();
-        $url = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token='.$token;
-        $post = [
-            'post'=>json_encode([
-                'code' => $code,
-            ]),
-        ];
-        $post['header'][] = "Content-Type:application/json";
-        list($status,$res) = $this->wx_return($url,$post);
-        if($status) return [true,$res['phone_info']['phoneNumber']];
-        else return [false,$res];
-    }
-
-
-
-    private function wx_return($url,$data=[]){
-        $res = $this->curlOpen($url,$data);
-        $res = json_decode($res,true);
-        if(isset($res['errcode'])&&$res['errcode'] !== 0) return [false,$res['errmsg']];
-
-        return [true,$res];
-    }
-
-    //写一个单独的微信推送
-
-    /**
-     * @param $user_id
-     * @param $type 1审核申请 2抄送 3 审核结果
-     * @param $state 0申请审核1审核通过2审核拒绝
-     * @param $menu_id
-     * @param $order_data
-     * @return array
-     */
-    public function wx_sendMsg($user_id,$type,$state,$menu_id,$order_data){
-        file_put_contents('tt.txt',json_encode([$user_id,$type,$state,$menu_id,$order_data]));
-        $openid = WxEmployeeOfficial::where('employee_id',$user_id)->value('openid');
-        if(empty($openid)) return [false,'not invaild openid'];
-        $config = config('wx.msg');
-        switch ($type){
-            case '1':
-            case '2':
-                $menu_type = $menu_id.'_'.$type;
-                break;
-            case '3':
-                $menu_type = $menu_id.'_'.$type.'_'.$state;
-                break;
-            default :
-                $menu_type = '';
-        }
-        if(!isset($config['wx_menu'][$menu_type])) return [false,'not invaild menu_type'];
-        $tmp_data = $config['wx_tmp_id'][$config['wx_menu'][$menu_type]];
-        $detail = $tmp_data['param'];
-        $tmp_id = $tmp_data['tmp_id'];
-        $data = [];
-        foreach ($detail as $k=>$v){
-            $data[$v] = $order_data[$k];
-        }
-        $this->sendTmpMsg($openid,$tmp_id,['detail'=>$data]);
-
-        return [true,''];
-    }
-
-
-    public function sendTmpMsg($openid,$tempid,$data){
-        $reload_url = $data['reload_url']??'';
-        list($status,$token) = $this->getToken();
-        if(!$status) return [false,$token];
-        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$token;
-        $post = '{
-           "touser":"'.$openid.'",
-           "template_id":"'.$tempid.'",
-           "url":"'.$reload_url.'",
-           "data":{
-                   "first": {
-                       "value":"1",
-                       "color":"#173177"
-                   },
-                   %s
-                   "remark":{
-                       "value":"1",
-                       "color":"#173177"
-                   }
-           }
-       }';
-        $content = "";
-        foreach ($data['detail'] as $k=>$v){
-
-            $content .= '"'.$k.'": {
-                       "value":"'.$v.'",
-                       "color":"#173177"
-                   },';
-        }
-        $post = sprintf($post,$content);
-        $res = $this->curlOpen($url,['post'=>$post]);
-        $res = json_decode($res,true);
-        if(isset($res['errcode'])&&$res['errcode'] != 0) return [false,$res['errmsg']];
-        if(isset($res['errcode'])&&$res['errcode'] === 0) return [true,''];
-        return [false,json_encode($res)];
-
-    }
-
-}

+ 6 - 2
composer.json

@@ -16,7 +16,8 @@
         "fruitcake/laravel-cors": "^2.2",
         "laravel/framework": "^6.20.26",
         "laravel/tinker": "^2.5",
-        "maatwebsite/excel": "^3.1"
+        "maatwebsite/excel": "^3.1",
+        "overtrue/wechat": "5.31"
     },
     "require-dev": {
         "facade/ignition": "^1.16.15",
@@ -28,7 +29,10 @@
     "config": {
         "optimize-autoloader": true,
         "preferred-install": "dist",
-        "sort-packages": true
+        "sort-packages": true,
+        "allow-plugins": {
+            "easywechat-composer/easywechat-composer": true
+        }
     },
     "extra": {
         "laravel": {

+ 3 - 2
routes/api.php

@@ -17,8 +17,7 @@ Route::middleware('auth:api')->get('/user', function (Request $request) {
     return $request->user();
 });
 
-Route::any('login', 'Api\LoginController@login');
-Route::any('test', 'Api\TestController@aa');
+//Route::any('login', 'Api\LoginController@login');
 //文件获取
 Route::any('uploadFiles/{file_name}', 'Api\FileUploadController@getFile');
 //获取导出规则
@@ -30,6 +29,8 @@ Route::any('getTemplateFields','Api\DingTalkController@getTemplateFields');
 
 Route::any('dinCallback','Api\DingTalkController@dinCallback');
 
+Route::any('eWxCheck', 'Api\EnterpriseWechatController@serve');
+
 Route::group(['middleware'=> ['checkLogin']],function ($route){
     //文件上传统一方法
     $route->any('uploadFile', 'Api\FileUploadController@uploadFile');

+ 17 - 0
routes/eWechat.php

@@ -0,0 +1,17 @@
+<?php
+
+use Illuminate\Http\Request;
+/*
+|--------------------------------------------------------------------------
+| API Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register API routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| is assigned the "api" middleware group. Enjoy building your API!
+|
+*/
+
+Route::group(['middleware'=> ['checkEWechat']],function ($route){
+
+});