Kaynağa Gözat

Merge branch 'yang-customer-project' into yang

# Conflicts:
#	app/Http/Controllers/TestController.php
ANG YU 4 yıl önce
ebeveyn
işleme
387d55685d

+ 4 - 2
app/Http/Controllers/CustomerController.php

@@ -18,6 +18,7 @@ use App\Services\OwnerBillReportService;
 use App\Services\OwnerReportService;
 use App\Services\OwnerService;
 use App\Store;
+use App\UserWorkgroup;
 use Exception;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
@@ -100,7 +101,8 @@ class CustomerController extends Controller
         $customers = app('CustomerService')->getSelection();
         $ownerGroups = app('UserOwnerGroupService')->getSelection();
         $params = request()->input();
-        return response()->view('customer.project.index',compact("owners","models","customers","ownerGroups","params"));
+        $userWorkGroups = UserWorkgroup::all();
+        return response()->view('customer.project.index',compact("owners","models","customers","ownerGroups","params",'userWorkGroups'));
     }
 
     public function projectIndexExport(Request $request)
@@ -551,7 +553,7 @@ class CustomerController extends Controller
         $month = request("month");
         $owner = request("owner");
         $sql = <<<sql
-SELECT owner_id,SUM(IFNULL(work_fee,0)) AS work_fee,SUM(IFNULL(logistic_fee,0)) AS logistic_fee 
+SELECT owner_id,SUM(IFNULL(work_fee,0)) AS work_fee,SUM(IFNULL(logistic_fee,0)) AS logistic_fee
 FROM owner_fee_details WHERE worked_at LIKE ? AND ((type = '发货' AND logistic_fee IS NOT NULL AND work_fee IS NOT NULL) OR (type <> '发货' AND work_fee IS NOT NULL))
 sql;
         if ($owner && count($owner)>0){

+ 1 - 3
app/Http/Controllers/DischargeTaskController.php

@@ -148,13 +148,11 @@ class DischargeTaskController extends Controller
     {
         $this->gate('人事管理-卸货-结算报表-查询');
 
-        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->orderByDesc('id')->get();
-
+        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner', 'warehouse'])->filter($filters)->orderByDesc('income_at')->get();
         $row = ['日期', '客户名称', '仓库', '作业名称', '入库单号', '数量', '单位', '收入单价', '收入合计', '装卸队', '数量', '单位', '支出单价', '支出合计', '状态', '收入备注', '支出备注'];
         $json = app('DischargeTaskService')->getStatementsJson($dischargeTasks);
 
         return Export::make($row, $json, "卸货结算报表");
-        //return app(ExportService::class)->json($row, $json, "卸货结算报表");
     }
 
     public function receipt(Request $request)

+ 8 - 5
app/Http/Controllers/HandInStorageController.php

@@ -146,13 +146,14 @@ class HandInStorageController extends Controller
         if (!$info['location']||!$info['amount']||!$info['trackNumber']||!$info['barCode']) $this->error('参数错误');
         if (count($request->input('checkData'))==0) $this->error('请勾选要上架任务');
         $checkData=$request->input('checkData')[0];
-        $location=OracleBasLocation::query()
-                ->where('locationid',$info['location'])
-                ->where('status','OK')
-                ->first();
-        if (!$location)$this->error('目标库位不存在');
         /** @var HandInStorageService $handInStorageService  */
         $handInStorageService=app('HandInStorageService');
+        //判断当前库位是否能放该商品
+        $res=$handInStorageService->checkLocation($info,$checkData);
+        if ($res===1)$this->error('库位不存在');
+        if ($res===2)$this->error('库位:产品和批次不可混放');
+        if ($res===3)$this->error('库位:不能混放批次');
+        if ($res===4)$this->error('库位:产品不能混放');
         try {
             $result = $handInStorageService->fluxHandPa($info, $checkData);
             if ($result)$this->success("上架成功");
@@ -163,4 +164,6 @@ class HandInStorageController extends Controller
     }
 
 
+
+
 }

+ 4 - 1
app/Http/Controllers/StorageController.php

@@ -21,6 +21,7 @@ use Illuminate\Foundation\Auth\AuthenticatesUsers;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Cookie;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
@@ -233,7 +234,7 @@ sql;
                     "track_num" => request("track"),
                 ]);
                 //亮灯
-                app("CacheShelfService")->lightUp($station->code,'3','2');
+                app("CacheShelfService")->lightUp($station->code,'3','0');
                 app("StationService")->locationOccupy($station->code);//占用库位
                 Cache::forever("CACHE_SHELF_OCCUPANCY_{$station->id}",true);
                 DB::commit();
@@ -356,6 +357,8 @@ sql;
         request()->offsetSet("remember",true);
         if (!$this->attemptLogin(request()))return ['success'=>false,'errors'=>['name'=>['登录信息验证失败']]];
         if (!Gate::allows("入库管理-入库-缓存架入库") && !Gate::allows("入库管理-入库-半箱补货入库"))return ['success'=>false,'errors'=>['name'=>['用户无权操作入库']]];
+        $rememberTokenName = Auth::getRecallerName();
+        Cookie::queue($rememberTokenName, Cookie::get($rememberTokenName), 720);
         return ['success'=>true,'url'=>url("store/inStorage/android.index")];
     }
     public function username(): string

+ 18 - 363
app/Http/Controllers/TestController.php

@@ -5,17 +5,23 @@ namespace App\Http\Controllers;
 use App\Components\AsyncResponse;
 use App\Components\ErrorPush;
 use App\ErrorTemp;
-use App\Events\SettlementBillCreateEvent;
 use App\Feature;
+use App\MaterialBox;
 use App\MaterialBoxModel;
 use App\Owner;
 use App\OwnerFeeDetail;
-use App\OwnerLogisticFeeDetail;
-use App\OwnerMaterial;
 use App\OwnerPriceOperation;
 use App\RejectedBill;
+use App\Services\ForeignHaiRoboticsService;
+use App\Station;
+use App\StationTask;
+use App\StationTaskMaterialBox;
+use App\TaskTransaction;
 use App\Unit;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Cookie;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 
@@ -36,7 +42,7 @@ class TestController extends Controller
     }
     public function lightUp()
     {
-        app("CacheShelfService")->lightUp('HAIB1-02-02','3','2');
+        app("CacheShelfService")->lightUp('HAIB1-02-02','3','0');
     }
     public function lightOff()
     {
@@ -48,367 +54,16 @@ class TestController extends Controller
         $response = Http::post(config('api.haiq.storage.light'), $params);
         return json_decode($response->body());
     }
+    private $key = "CACHE_SHELF_AVAILABLE";
     public function test()
     {
-        dd(!!Unit::query()->first());
+        $modelId = 1;
+        $blacklist = [];
+        $query = MaterialBox::query()->where("material_box_model_id",$modelId)
+            ->where("status",4);
+        $boxes = $query->whereNotIn("id",$query->select("id")->whereHas("performTask"));
+        if ($blacklist)$boxes = $boxes->whereNotIn("id",$blacklist);
+        dd($boxes->get());
     }
 
-    public function deleteRepetitionSku()
-    {
-        $Commodities = Commodity::query()->selectRaw('owner_id,sku,count(1) as counts ')->whereNotNull(['owner_id', 'sku'])->groupBy('owner_id', 'sku')->having('counts', '>', '1')->get();
-        $CommodityItems = $Commodities->chunk(200);
-        foreach ($CommodityItems as $items) {
-            $Commodities = Commodity::query()->whereIn('owner_id', data_get($items, '*.owner_id'))->whereIn('sku', data_get($items, '*.sku'))->get();
-            $arr = collect($Commodities->toArray());
-            $arr = $arr->groupBy(['owner_id', 'sku']);
-            foreach ($arr as $item) {
-                foreach ($item as $value) {
-                    if (count($value) <= 1) continue;
-                    dispatch(new DeleteRepetitionSkuItem($value));
-                }
-            }
-        }
-    }
-    public function order_packages_exception_type_sync()
-    {
-        $count = OrderPackage::query()->where('status', '派送异常')->update(['exception_type' => '派件异常', 'exception' => '是']);
-        dump('更新了: ' . $count);
-    }
-
-    public function order_packages_exception_type_and_exception_update()
-    {
-        $count_1 = OrderPackage::query()
-            ->whereIn('exception_type', ['疑似库内丢件', '揽件异常'])
-            ->whereNotNull('transfer_status')
-            ->update(['exception_type' => '无', 'exception' => '否']);
-        $count_2 = OrderPackage::query()
-            ->where('status', '已收件')
-            ->update(['exception_type' => '无', 'exception' => '否']);
-        dump('更新了: ' . ($count_1 + $count_2));
-    }
-
-
-
-
-
-    public function pushToWmsWeight()
-    {
-        $orderPackages = OrderPackage::query()->where('measuring_machine_id', 12)->where('uploaded_to_wms', '!=', '是')->whereNotNull('weight')->get();
-        $packageController = new WeightBaseController();
-        foreach ($orderPackages as $orderPackage) {
-            $packageController->activityWaveNoProcessing($orderPackage);
-        }
-    }
-
-
-    public function syncOrderTracking()
-    {
-        $orderNos = ['OSSO21040013', 'OSSO21040012'];
-        $service = new OrderTrackingService();
-        $orderHeaderService = new OracleDOCOrderHeaderService();
-        $orderHeaders = $orderHeaderService->getQuery()->whereIn('DOC_Order_Header.SoReference1', $orderNos)->get();
-        $service->createByWmsOrderHeader($orderHeaders);
-        $service->updateByWmsOrderHeaders($orderHeaders);
-    }
-
-    public function addHaiBox(Request $request)
-    {
-        echo <<<TEXT
-    <form>
-    <textarea name="boxes">
-
-</textarea>
-<input type="submit"/>
-</form>
-TEXT;
-        $input = $request->input('boxes');
-        if ($input) {
-            $input = preg_replace('/[\n\r]/', ',', trim($input));
-            $boxes = explode(',', $input);
-            dd($boxes);
-        }
-    }
-
-
-    public function testProcurement()
-    {
-        $procurementTotals = ProcurementTotalBill::query()
-            ->where('status', 1)
-            ->where('counting_month', '2021-04-01')
-            ->get();
-        foreach ($procurementTotals as $procurementTotalBill) {
-            /** @var  ProcurementTotalBill $procurementTotalBill */
-            $procurementTotalBill->setCurrentMothProcurements();
-            if (isset($procurementTotalBill->procurementCheckSheets)) {
-                $procurementCheckSheets = $procurementTotalBill->procurementCheckSheets;
-                foreach ($procurementCheckSheets as $procurementCheckSheet) {
-                    $procurementCheckSheet->update(['status' => 2]);//2 已出账
-                }
-            }
-        }
-    }
-
-    public function testHttp()
-    {
-        return view('httpTest');
-    }
-
-    public function orderPackageUnique()
-    {
-        /** @var OrderService $orderService */
-        /** @var OracleDOCOrderHeaderService $orderHeaderService */
-        $orderService = app(OrderService::class);
-        $orderHeaderService = app(OracleDOCOrderHeaderService::class);
-
-        $orderPackages = OrderPackage::query()->selectRaw('count(1) counts,logistic_number')->where('created_at', '>=', '2020-01-01')->groupBy('logistic_number')->having('counts', '>', '1')->get();
-
-        $updateParams = [];
-        $deleteParams = [];
-        foreach ($orderPackages as $orderPackage) {
-            $items = OrderPackage::query()->with('order')->where('logistic_number', $orderPackage['logistic_number'])->with('order')->get();
-            $actAllocationDetails = OracleActAllocationDetails::query()->selectRaw('orderno')->where('PICKTOTRACEID', $orderPackage['logistic_number'])->get();
-
-            $oracleOrderNos = array_unique(data_get($actAllocationDetails, '*.orderno'));
-            $diffOrderNos = array_diff($oracleOrderNos, data_get($items, '*.order.code'));
-            if (count($diffOrderNos) != 0) {
-                $orderHeaders = $orderHeaderService->getQuery()->whereIn('DOC_Order_Header.OrderNo', $diffOrderNos)->get();
-                $orderService->syncOrderInfo($orderHeaders);
-            }
-
-            $items = OrderPackage::query()->with('order')->where('logistic_number', $orderPackage['logistic_number'])->with('order')->get();
-            if ($order = Order::query()->whereIn('id', data_get($items, '*.id'))->where('wms_status', '!=', '订单取消')->first()) {
-                $saveOrderPackage = OrderPackage::query()->where('order_id', $order['id'])->where('logistic_number', $orderPackage['logistic_number'])->first();
-            } else {
-                $saveOrderPackage = $items->first();
-            }
-
-            foreach ($items as $item) {
-                $saveOrderPackage['batch_number'] = $item['batch_number'] ?? $saveOrderPackage['batch_number'];
-                $saveOrderPackage['batch_rule'] = $item['batch_rule'] ?? $saveOrderPackage['batch_rule'];
-                $saveOrderPackage['bulk'] = $item['bulk'] ?? $saveOrderPackage['bulk'];
-                $saveOrderPackage['weight'] = $item['weight'] ?? $saveOrderPackage['weight'];
-                $saveOrderPackage['weighed_at'] = $item['weighed_at'] ?? $saveOrderPackage['weighed_at'];
-                $saveOrderPackage['length'] = $item['length'] ?? $saveOrderPackage['length'];
-                $saveOrderPackage['width'] = $item['width'] ?? $saveOrderPackage['width'];
-                $saveOrderPackage['height'] = $item['height'] ?? $saveOrderPackage['height'];
-                $saveOrderPackage['measuring_machine_id'] = $item['measuring_machine_id'] ?? $saveOrderPackage['measuring_machine_id'];
-                $saveOrderPackage['owner_id'] = $item['owner_id'] ?? $saveOrderPackage['owner_id'];
-                $saveOrderPackage['received_at'] = $item['received_at'] ?? $saveOrderPackage['received_at'];
-                $saveOrderPackage['transfer_status'] = $item['transfer_status'] ?? $saveOrderPackage['transfer_status'];
-                $saveOrderPackage['status'] = $item['status'] != '无' ? $item['status'] : $saveOrderPackage['transfer_status'];
-                $saveOrderPackage['uploaded_to_wms'] = $item['uploaded_to_wms'] != '否' ? $item['uploaded_to_wms'] : $saveOrderPackage['uploaded_to_wms'];
-            }
-            $orderPackages_filter = $items->filter(function ($item) use ($saveOrderPackage) {
-                if ($saveOrderPackage['id'] === $item['id']) return false;
-                return true;
-            });
-            $ids = $orderPackages_filter->map(function ($item) {
-                return $item['id'];
-            });
-            LogService::log('order_packages', 'order_packages_logistic_number_unique_delete', json_encode($orderPackages_filter));
-            OrderPackage::query()->whereIn('id', $ids)->delete();
-            $updateParams[] = $saveOrderPackage;
-            $deleteParams[] = $orderPackages_filter;
-            $saveOrderPackage->save();
-        }
-        dd('任务完成');
-        dd($updateParams, $deleteParams);
-    }
-
-    public function endStationTask()
-    {
-        $stationTask = StationTask::query()->where('id', 711)->first();
-        $stationTask->update(['status' => '完成']);
-    }
-
-    public function order_package_exception_type_counting_record_init()
-    {
-        /**
-         * @var $service OrderPackageExceptionTypeCountingRecordService
-         */
-        $service = app('OrderPackageExceptionTypeCountingRecordService');
-        $service->updateOrCreate(30);
-    }
-
-    public function testForeignZhenCang($batches)
-    {
-
-        $batches = Batch::query()
-            ->with(['orders.orderCommodities.commodity.barcodes'])
-            ->find(111953);
-        $body = [];
-        $body['id'] = $batches->code;
-        $body['orders'] = [];
-        foreach ($batches->orders as $order) {
-            $orderArr = [];
-            $orderArr['id'] = $order->code ?? '';
-            $orderArr['createdAt'] = Carbon::parse($order->created_at)->toDateTimeString() ?? '';
-            $orderArr['barcodes'] = [];
-            foreach ($order->orderCommodities as $orderCommodity) {
-                $barcode = [];
-                $barcode['id'] = $orderCommodity->id;
-                $barcode['barcode'] = $orderCommodity->commodity ? ($orderCommodity->commodity->barcodes ? $orderCommodity->commodity->barcodes->first()['code'] : '') : '';
-                $barcode['name'] = $orderCommodity->commodity->name ?? '';
-                $barcode['sku'] = $orderCommodity->commodity->sku ?? '';
-                $barcode['amount'] = $orderCommodity->amount ?? '';
-                $barcode['location'] = $orderCommodity->location ?? '';
-                $orderArr['barcodes'][] = $barcode;
-            }
-            $body['orders'][] = $orderArr;
-        }
-        $response = Http::withHeaders([
-            'Host' => 'zc-it.com',
-        ])->post('http://1.116.164.201:8080/api/createBatch', $body);
-        dd(json_decode($response->body()));
-    }
-
-    public function updateBulk()
-    {
-        $orderPackages = OrderPackage::query()->where('measuring_machine_id', 16)->get();
-        foreach ($orderPackages as $orderPackage) {
-            $orderPackage->update([
-                'bulk' => $orderPackage['length'] * $orderPackage['width'] * $orderPackage['height']
-            ]);
-        }
-    }
-
-    public function testPrint(Request $request)
-    {
-        return (new PrintPartController())->print($request);
-    }
-
-    public function testSendCon(Request $request)
-    {
-        $content = [
-            "type" => "getClients",
-            "aliasName" => "test",
-            "printerName" => "打印机5",
-        ];
-        $post = Http::post("http://127.0.0.1:3000", $content);
-        $body = json_decode($post->body(), true);
-        $body['msg'] = json_decode($body['msg'], true);
-        dd(json_decode($post->body()), $post->body(), $body);
-    }
-
-
-    public function zop_test(Request $request)
-    {
-        $logistic_number = $request->logistic_number;
-        \App\Jobs\LogisticZopSync::dispatchNow($logistic_number);
-    }
-
-    public function laborReportsCountingRecordsCacheClear()
-    {
-        $dayClears = now()->subYear()->daysUntil(now());
-        $monthClears = now()->subYear()->monthsUntil(now());
-        foreach ($dayClears as $day) {
-            $key = 'laborReportsCountingRecords_' . $day->toDateString() . '_日';
-            Cache::forget($key);
-        }
-        foreach ($monthClears as $month) {
-            $key = 'laborReportsCountingRecords_' . $month->format('Y-m') . '_月';
-            Cache::forget($key);
-        }
-        Cache::forget('laborReportsCountingRecords_2020_年');
-        Cache::forget('laborReportsCountingRecords_2021_年');
-    }
-    public function testApi()
-    {
-        $headers = array();
-        array_push($headers, "Authorization:APPCODE " . 20202020);
-        //根据API的要求,定义相对应的Content-Type
-        array_push($headers, "Content-Type".":"."application/json; charset=UTF-8");
-        dd($headers);
-    }
-
-
-    public function ownerLogisticFeeDetailService_getDetails()
-    {
-        /**
-         * @var $services OwnerLogisticFeeDetailService
-         */
-        $services = app('OwnerLogisticFeeDetailService');
-        $result = $services->getDetails('12', '2021-05-30', '2021-05-31', 50);
-        dd($result);
-    }
-
-    public function order_counting_records_cache_clear()
-    {
-        $owner_ids = Owner::query()->select('id')->pluck('id');
-        $dayClears = now()->subYear()->daysUntil(now());
-        foreach ($dayClears as $day) {
-            foreach ($owner_ids as $owner_id) {
-                $key = "order_counting_records_{$day->toDateString()}_{$owner_id}_日";
-                Cache::forget($key);
-            }
-        }
-    }
-
-    public function order_counting_records_init()
-    {
-        \App\OrderCountingRecord::query()->truncate();
-        $start = now()->subMonths(1)->toDateString();
-        $end = now()->subDay()->toDateString();
-        $service = app('NewOrderCountingRecordService');
-        $service->recordByDay($start, $end, '日');
-    }
-
-    public function OwnerLogisticFeeReportService_test()
-    {
-        /* @var $service OwnerLogisticFeeReportService */
-        $service = app('OwnerLogisticFeeReportService');
-        $result=  $service->get(['owner_id' =>3,'date'=>'2021-05-01']);
-        dd($result);
-    }
-
-    public function createProcurementTotalBill()
-    {
-        $date='2021-05';
-        $procurementCheckSheets=ProcurementCheckSheet::query()
-            ->selectRaw('procurements.supplier_id supplier_id,procurement_check_sheets.created_at created_at,procurement_check_sheets.status status,SUM(procurement_check_sheets.account_payable) account_payable')
-            ->leftJoin('procurement_deliveries','procurement_check_sheets.procurement_delivery_id','procurement_deliveries.id')
-            ->leftJoin('procurements','procurement_deliveries.procurement_id','procurements.id')
-            ->where('procurement_check_sheets.created_at','like',$date."%")
-            ->groupBy('supplier_id')->where('procurements.supplier_id',84)
-            ->get();
-        $totalBill=[];
-        foreach ($procurementCheckSheets as $procurementCheckSheet){
-            if ($procurementCheckSheet->account_payable<1) continue;
-            $totalBill[]=[
-                'counting_month'=>$date.'-01',
-                'supplier_id'=>$procurementCheckSheet->supplier_id,
-                'total_payable'=>$procurementCheckSheet->account_payable,
-                'status'=>$procurementCheckSheet->status,
-                'created_at'=>date('2021-06-01 00:00:00'),
-                'updated_at'=>date('2021-06-01 00:00:00'),
-            ];
-        }
-        if (count($totalBill)>0){
-            DB::table("procurement_total_bills")->insert($totalBill);
-            app('LogService')->log(__METHOD__,"采购管理-生成月账单报表",json_encode($totalBill));
-        }
-    }
-
-    public function uuid()
-    {
-        dd(md5( date("Y-m-d H:i:s")));
-    }
-
-    public function settlement_bill_create_event_test()
-    {
-        $arr = [
-            'owner_fee_detail_id'=>2313213, //
-            'logistic_bill'=>'14546465',//快递单号
-            'initial_weight'=>'1',//首重
-            'initial_weight_price'=>'2',//首重价格
-            'additional_weight'=>'3',//续重
-            'additional_price'=>'5',//续重价格
-            'logistic_id'=>'7',//承运商
-            'owner_id'=>'1',//货主
-            'additional_weigh_weight'=>'11',//续重重量
-            'tax_fee'=>'11',//税费
-            'fee'=>'11111'//费用
-        ];
-        event(new SettlementBillCreateEvent($arr,OwnerLogisticFeeDetail::class));
-    }
 }

+ 7 - 4
app/Jobs/CacheShelfTaskJob.php

@@ -48,7 +48,7 @@ class CacheShelfTaskJob implements ShouldQueue
                 try {
                     $available = Cache::get($this->key,function (){return [];});
                     if ($this->count!==count($available))return;
-                    $tasks = TaskTransaction::query()->with("task")
+                    $tasks = TaskTransaction::query()->selectRaw("task_id,GROUP_CONCAT(id) AS ids,id")->with("task")
                         ->where("type","出库")->whereHas("task",function ($query){
                             $query->where("status","待处理");
                         })->where("status",3)->lockForUpdate()
@@ -70,7 +70,10 @@ class CacheShelfTaskJob implements ShouldQueue
                         $task->push($obj->task);
                         unset($available[$loc]);
                         $updateTask[] = ["id"=>$obj->task->id,"station_id"=>$map[$loc],"updated_at"=>$time];
-                        $updateTransaction[] = ["id"=>$obj->id,"to_station_id"=>$map[$loc],"status"=>0,"updated_at"=>$time];
+                        if ($obj->ids!=$obj->id){
+                            $ids = explode(",",$obj->ids);
+                            foreach ($ids as $id)$updateTransaction[] = ["id"=>$id,"to_station_id"=>$map[$loc],"status"=>0,"updated_at"=>$time];
+                        }else $updateTransaction[] = ["id"=>$obj->id,"to_station_id"=>$map[$loc],"status"=>0,"updated_at"=>$time];
                     }
                     app("BatchUpdateService")->batchUpdate("station_task_material_boxes",$updateTask);
                     app("BatchUpdateService")->batchUpdate("task_transactions",$updateTransaction);
@@ -78,7 +81,7 @@ class CacheShelfTaskJob implements ShouldQueue
                     if ($result){
                         Cache::forever($this->key,$available);
                         foreach ($toLocation as $value){
-                            app("CacheShelfService")->lightUp($value,'3','2');
+                            app("CacheShelfService")->lightUp($value,'3','0');
                             Cache::forever("CACHE_SHELF_OCCUPANCY_{$map[$value]}",true);
                         }
                         app("StationService")->locationOccupyMulti($toLocation->toArray());
@@ -89,7 +92,7 @@ class CacheShelfTaskJob implements ShouldQueue
                     }
                 }catch (\Exception $e){
                     DB::rollBack();
-                    $this->push(__METHOD__."->".__LINE__,"出库队列执行错误",$e->getMessage());
+                    $this->push(__METHOD__."->".__LINE__,"出库队列执行错误",$e->getMessage()." | 当前任务数:".$this->count." | 缓存信息:".(isset($available) ? json_encode($available) : ''));
                 }
                 break;
             default://入库呼叫

+ 1 - 1
app/Services/CacheShelfService.php

@@ -52,7 +52,7 @@ class   CacheShelfService
         $station = Station::query()->with('materialBox')->where('code', $locCode)->first();
         if (Cache::has("CACHE_SHELF_OCCUPANCY_{$station->id}")){
             //缓存存在 不允许灭灯 灭了再点开
-            app("CacheShelfService")->lightUp($station->code,'3','2',["title"=>"库位预定,禁止操作"]);
+            app("CacheShelfService")->lightUp($station->code,'3','0',["title"=>"库位预定,禁止操作"]);
             return ['success' => true];
         }
         //站存在 站为缓存架

+ 1 - 5
app/Services/DischargeTaskService.php

@@ -123,13 +123,9 @@ class DischargeTaskService
     {
         $json = [];
         foreach ($dischargeTasks as $dischargeTask) {
-
             /** @var DischargeTask $dischargeTask */
-            /** @var Carbon $date */
-            $date = $dischargeTask['created_at'];
-
             $json[] = [
-                $date->toDateTimeString() ,                          // 日期
+                $dischargeTask['income_at'],                        // 日期
                 $dischargeTask->owner->name ?? '',                  // 客户名称
                 $dischargeTask->warehouse->name ?? '',              // 仓库
                 DischargeTask::types[$dischargeTask['type']] ?? '',   // 作业名称

+ 240 - 180
app/Services/HandInStorageService.php

@@ -4,10 +4,13 @@ namespace App\Services;
 
 use App\CommodityBarcode;
 use App\OracleBasCode;
+use App\OracleBasLocation;
+use App\OracleBasLotId;
 use App\OracleBasSKU;
 use App\OracleDOCASNDetail;
 use App\OracleDOCASNHeader;
 use App\OracleInvLotAtt;
+use App\OracleInvLotLocId;
 use App\Traits\ServiceAppAop;
 use App\ValueStore;
 use Carbon\Carbon;
@@ -23,16 +26,68 @@ class HandInStorageService
 {
     use ServiceAppAop;
 
+    public function checkLocation(array $info, array $param)
+    {
+        $location = OracleBasLocation::query()
+            ->where('locationid', $info['location'])
+            ->where('status', 'OK')
+            ->first();
+
+        if (!$location) return 1;//库位不存在
+
+        if ($location['mix_flag'] == 'N' && $location['mix_lotflag'] == 'N') { // 库位:产品和批次都不可混放
+            $inv = OracleInvLotLocId::query()->where('locationid', $info['location'])->first();
+
+            if (!$inv) return true; //当前库位无库存余量 可直接入库
+
+            if ($inv['customerid'] == $param['customerid'] && $inv['sku'] == $param['sku']
+                && $inv['lotnum'] == $param['plantolotnum'])
+                return true;
+            else return 2; //库位:产品和批次不可混放
+        }
+
+
+        if ($location['mix_flag'] == 'Y' && $location['mix_lotflag'] == 'N') {//库位:产品可混放,批次不可
+            $invs = OracleInvLotLocId::query()->where('locationid', $info['location'])->get();
+
+            if ($invs->count() == 0) return true; //当前库位无库存余量 可直接入库
+
+            $skuInvs = [];    // 库位没有该商品
+            foreach ($invs as $inv) {
+                if ($inv['customerid'] != $param['customerid'] || $inv['sku'] != $param['sku']) {  // 库位没有该商品
+                    $skuInvs[] = $inv;
+                    continue;
+                }
+                if ($inv['lotnum'] == $param['plantolotnum']) return true; // 批次相同
+                return 3;   //库位:产品相同,不能混放批次
+            }
+            if (count($skuInvs) == count($invs)) return true;
+        }
+        if ($location['mix_flag'] == 'N' && $location['mix_lotflag'] == 'Y') {  //库位:产品不可混放,批次可混放
+            $inv = OracleInvLotLocId::query()->where('locationid', $info['location'])->first();
+            if (!$inv) return true; //当前库位无库存余量 可直接入库
+
+            if ($inv['customerid'] == $param['customerid'] || $inv['sku'] == $param['sku']) return true;
+            else return 4; //库位:产品不能混放
+        }
+        // 库位
+        return true;
+    }
 
+    /**
+     * @param array $info
+     * @return int|mixed
+     * 校验asn单号是否能收货
+     */
     public function checkAsnOperation(array $info)
     {
-        if (!$info['customerid']||!$info['asntype']){
-            $asn=OracleDOCASNHeader::query()
-            ->select(['asnno','asnreference1','asnstatus','addtime','customerid','asntype'])
-            ->where('asnno',$info['asnno'])
-            ->whereIn('asnstatus',['00','30'])
-            ->first();
-            if (!$asn)return 1; //无效asn单号
+        if (!$info['customerid'] || !$info['asntype']) {
+            $asn = OracleDOCASNHeader::query()
+                ->select(['asnno', 'asnreference1', 'asnstatus', 'addtime', 'customerid', 'asntype'])
+                ->where('asnno', $info['asnno'])
+                ->whereIn('asnstatus', ['00', '30'])
+                ->first();
+            if (!$asn) return 1; //无效asn单号
             return $this->whetherDeliver($asn);
         }
         return $this->whetherDeliver($info);
@@ -40,8 +95,8 @@ class HandInStorageService
 
     private function whetherDeliver($asn)
     {
-        if ($asn['asntype']!='XNRK' && $asn['asntype']!='THRK' && $asn['asntype']!='F31'){
-            $res=app(DeliveryAppointmentService::class)->checkOperableAsn($asn['asnno'],$asn['customerid']);
+        if ($asn['asntype'] != 'XNRK' && $asn['asntype'] != 'THRK' && $asn['asntype'] != 'F31') {
+            $res = app(DeliveryAppointmentService::class)->checkOperableAsn($asn['asnno'], $asn['customerid']);
             if ($res) return $asn;
             else return 2; //当前asn单号无预约记录
         }
@@ -57,27 +112,27 @@ class HandInStorageService
     public function selectAsn($asn)
     {
         if (!$asn) return OracleDOCASNHeader::query()
-            ->select(['asnno','asnreference1','asnstatus','addtime','customerid','asntype'])
-            ->where('asnstatus','00')
+            ->select(['asnno', 'asnreference1', 'asnstatus', 'addtime', 'customerid', 'asntype'])
+            ->where('asnstatus', '00')
             ->orderByDesc('addtime')
             ->limit(50)
             ->get();
 
-        if (strpos(strtoupper($asn),'ASN')!==false){
+        if (strpos(strtoupper($asn), 'ASN') !== false) {
             return OracleDOCASNHeader::query()
-                ->select(['asnno','asnreference1','asnstatus','addtime','customerid','asntype'])
-                ->where('asnno',$asn)
-                ->whereIn('asnstatus',['00','30'])
+                ->select(['asnno', 'asnreference1', 'asnstatus', 'addtime', 'customerid', 'asntype'])
+                ->where('asnno', $asn)
+                ->whereIn('asnstatus', ['00', '30'])
                 ->get();
-        }else {
-            $asns=OracleDOCASNHeader::query()
-                ->select(['asnno','asnreference1','asnstatus','addtime','customerid','asntype'])
-                ->where('customerid',strtoupper($asn))
-                ->whereIn('asnstatus',['00','30'])
+        } else {
+            $asns = OracleDOCASNHeader::query()
+                ->select(['asnno', 'asnreference1', 'asnstatus', 'addtime', 'customerid', 'asntype'])
+                ->where('customerid', strtoupper($asn))
+                ->whereIn('asnstatus', ['00', '30'])
                 ->get();
-            if ($asns->count()>0){
+            if ($asns->count() > 0) {
                 return $asns;
-            }else{
+            } else {
                 $sql = <<<SQL
  SELECT DOC_ASN_HEADER.ASNNO,DOC_ASN_HEADER.addtime,DOC_ASN_HEADER.asnreference1,DOC_ASN_HEADER.customerid,DOC_ASN_HEADER.asnstatus,DOC_ASN_HEADER.asntype FROM DOC_ASN_HEADER
                   LEFT JOIN DOC_ASN_DETAILS ON DOC_ASN_HEADER.ASNNO = DOC_ASN_DETAILS.ASNNO
@@ -85,7 +140,7 @@ class HandInStorageService
 WHERE DOC_ASN_HEADER.ASNSTATUS in ('00','30') and (BAS_SKU.ALTERNATE_SKU1 = ? OR BAS_SKU.ALTERNATE_SKU2 = ?  OR BAS_SKU.ALTERNATE_SKU3 = ?)
 group by DOC_ASN_HEADER.ASNNO,DOC_ASN_HEADER.addtime,DOC_ASN_HEADER.asnreference1,DOC_ASN_HEADER.customerid,DOC_ASN_HEADER.asnstatus,DOC_ASN_HEADER.asntype
 SQL;
-                return DB::connection("oracle")->select(DB::raw($sql),[$asn,$asn,$asn]);
+                return DB::connection("oracle")->select(DB::raw($sql), [$asn, $asn, $asn]);
             }
         }
 
@@ -104,8 +159,8 @@ SQL;
 FROM DOC_ASN_DETAILS LEFT JOIN BAS_SKU ON DOC_ASN_DETAILS.CUSTOMERID = BAS_SKU.CUSTOMERID AND DOC_ASN_DETAILS.SKU = BAS_SKU.SKU
 WHERE asnno = ? AND linestatus IN ('00','30')
 sql;
-        $asn_details = DB::connection("oracle")->select(DB::raw($sql),[$asnno]);
-        if (count($asn_details)>0)return $asn_details;
+        $asn_details = DB::connection("oracle")->select(DB::raw($sql), [$asnno]);
+        if (count($asn_details) > 0) return $asn_details;
         else return array();
     }
 
@@ -115,7 +170,7 @@ sql;
      * @return Builder|Model|object|null
      *根据sku 或者条码获取asn_detail
      */
-    public function getAsnDetail($asnno,$skuOrBarcode)
+    public function getAsnDetail($asnno, $skuOrBarcode)
     {
         $sql = <<<sql
 SELECT DOC_ASN_DETAILS.sku,DOC_ASN_DETAILS.expectedqty,DOC_ASN_DETAILS.skudescrc,
@@ -123,13 +178,13 @@ SELECT DOC_ASN_DETAILS.sku,DOC_ASN_DETAILS.expectedqty,DOC_ASN_DETAILS.skudescrc
          LEFT JOIN BAS_SKU ON DOC_ASN_DETAILS.CUSTOMERID = BAS_SKU.CUSTOMERID AND DOC_ASN_DETAILS.SKU = BAS_SKU.SKU
 WHERE ASNNO = ? AND LINESTATUS IN ('00','30') AND (ALTERNATE_SKU1 = ? OR ALTERNATE_SKU2 = ?  OR ALTERNATE_SKU3 = ?)
 sql;
-        $asn_detail = DB::connection("oracle")->selectOne(DB::raw($sql),[$asnno,$skuOrBarcode,$skuOrBarcode,$skuOrBarcode]);
-        if ($asn_detail)return $asn_detail;
+        $asn_detail = DB::connection("oracle")->selectOne(DB::raw($sql), [$asnno, $skuOrBarcode, $skuOrBarcode, $skuOrBarcode]);
+        if ($asn_detail) return $asn_detail;
         else return OracleDOCASNDetail::query()
-            ->select(['sku','expectedqty','skudescrc','asnlineno','asnno','receivedqty'])
-            ->where('asnno',$asnno)
-            ->where('sku',$skuOrBarcode)
-            ->whereIn('linestatus',['00','30'])
+            ->select(['sku', 'expectedqty', 'skudescrc', 'asnlineno', 'asnno', 'receivedqty'])
+            ->where('asnno', $asnno)
+            ->where('sku', $skuOrBarcode)
+            ->whereIn('linestatus', ['00', '30'])
             ->first();
     }
 
@@ -140,8 +195,8 @@ sql;
     public function getQualityStatus()
     {
         return Cache::remember('BAS_CODE_QLT_STS', 600, function () {
-            return OracleBasCode::query()->select(['codeid','code','codename_c'])
-                ->where('codeid','QLT_STS')
+            return OracleBasCode::query()->select(['codeid', 'code', 'codename_c'])
+                ->where('codeid', 'QLT_STS')
                 ->get();
         });
     }
@@ -153,8 +208,8 @@ sql;
     public function getAttributeLocation()
     {
         return Cache::remember('BAS_CODE_CUS_UDFPC', 600, function () {
-            return OracleBasCode::query()->select(['codeid','code','codename_c'])
-                ->where('codeid','CUS_UDFPC')
+            return OracleBasCode::query()->select(['codeid', 'code', 'codename_c'])
+                ->where('codeid', 'CUS_UDFPC')
                 ->get();
         });
     }
@@ -165,12 +220,12 @@ sql;
      * @return mixed
      * 根据customerid和sku 查询商品关联的批次属性规则
      */
-    public function getBasSkuLotId($customerid,$sku)
+    public function getBasSkuLotId($customerid, $sku)
     {
-        return Cache::remember('bas_sku_lot_'.$customerid.'_'.$sku, 600, function ()use($customerid,$sku) {
-            return OracleBasSKU::query()->select(['customerid','sku','lotid'])
-                ->where('customerid',$customerid)
-                ->where('sku',$sku)
+        return Cache::remember('bas_sku_lot_' . $customerid . '_' . $sku, 600, function () use ($customerid, $sku) {
+            return OracleBasSKU::query()->select(['customerid', 'sku', 'lotid'])
+                ->where('customerid', $customerid)
+                ->where('sku', $sku)
                 ->with('lotId')
                 ->first();
         });
@@ -181,7 +236,7 @@ sql;
      * @return array
      * 根据商品条码  获取完全收货状态  部分收货状态的 PA任务
      */
-    public function getTsk(string $trackNumber,string $barCode): array
+    public function getTsk(string $trackNumber, string $barCode): array
     {
         $sql = <<<sql
 SELECT TSK_TASKLISTS.CustomerID,TSK_TASKLISTS.Sku,TSK_TASKLISTS.PlanToLotNum,TSK_TASKLISTS.PlanToID,DOC_ASN_DETAILS.SKUDESCRC,sum(TSK_TASKLISTS.PlanToQty) AS QTY
@@ -197,8 +252,8 @@ WHERE
   AND TSK_TASKLISTS.PlanToID= ?
   group by TSK_TASKLISTS.CustomerID,TSK_TASKLISTS.Sku,TSK_TASKLISTS.PlanToLotNum,TSK_TASKLISTS.PlanToID,DOC_ASN_DETAILS.SKUDESCRC
 sql;
-        $tasks = DB::connection("oracle")->select(DB::raw($sql),[$barCode,$barCode,$barCode,$trackNumber]);
-        if (!$tasks)return [];
+        $tasks = DB::connection("oracle")->select(DB::raw($sql), [$barCode, $barCode, $barCode, $trackNumber]);
+        if (!$tasks) return [];
         else return $tasks;
     }
 
@@ -208,11 +263,11 @@ sql;
      */
     public function fluxHandPa(array $info, array $taskParam): bool
     {
-        $tasks=$this->selectFluxTask($taskParam,$info['amount']);
-        if (!$tasks)return false; //获取任务失败
-        return DB::connection("oracle")->transaction(function ()use($tasks,$info){ //单体嵌套事务 回滚FLUX失败任务
-            foreach ($tasks as $task){
-                if (!app("StorageService")->fluxPA($task,$info['location'])){
+        $tasks = $this->selectFluxTask($taskParam, $info['amount']);
+        if (!$tasks) return false; //获取任务失败
+        return DB::connection("oracle")->transaction(function () use ($tasks, $info) { //单体嵌套事务 回滚FLUX失败任务
+            foreach ($tasks as $task) {
+                if (!app("StorageService")->fluxPA($task, $info['location'])) {
                     DB::connection("oracle")->rollBack();
                     return false; //上架失败
                 }
@@ -227,29 +282,29 @@ sql;
      * @return array
      * 根据跟踪号,货主,sku,批次 获取任务列表   再通过数量 进行任务的重组(拆分或选定)
      */
-    public function selectFluxTask($taskParam,$amount): array
+    public function selectFluxTask($taskParam, $amount): array
     {
-        /** @var StorageService $storageService  */
-        $storageService=app('StorageService');
+        /** @var StorageService $storageService */
+        $storageService = app('StorageService');
         $sql = <<<sql
 select * from TSK_TASKLISTS where customerid = ? AND sku = ? AND plantoid = ? AND plantolotnum = ? AND TASKPROCESS = '00' AND TASKTYPE = 'PA'
 sql;
-        $tasks = DB::connection("oracle")->select(DB::raw($sql),[$taskParam['customerid'],$taskParam['sku'],$taskParam['plantoid'],$taskParam['plantolotnum']]);
-        if (!$tasks)return [];
+        $tasks = DB::connection("oracle")->select(DB::raw($sql), [$taskParam['customerid'], $taskParam['sku'], $taskParam['plantoid'], $taskParam['plantolotnum']]);
+        if (!$tasks) return [];
         $nums = [];
         $sum = 0;
         $maxIndex = null;
-        foreach ($tasks as $i => $task){
-            if ((int)$task->fmqty == $amount)return [$task];
+        foreach ($tasks as $i => $task) {
+            if ((int)$task->fmqty == $amount) return [$task];
             $nums[] = (int)$task->fmqty;
             $sum += (int)$task->fmqty;
-            if ((int)$task->fmqty>$amount)$maxIndex = $i;
+            if ((int)$task->fmqty > $amount) $maxIndex = $i;
         }
-        if ($sum<$amount)return []; //上架数大于入库数
-        $result = $storageService->getMatch($nums,$amount);
-        if (!$result)return $storageService->splitTask($tasks,$maxIndex,$amount);
+        if ($sum < $amount) return []; //上架数大于入库数
+        $result = $storageService->getMatch($nums, $amount);
+        if (!$result) return $storageService->splitTask($tasks, $maxIndex, $amount);
         $arr = [];
-        foreach ($result as $index)$arr[] = $tasks[$index];
+        foreach ($result as $index) $arr[] = $tasks[$index];
         return $arr;
     }
 
@@ -260,37 +315,39 @@ sql;
      */
     public function fluxHandIn(array $info)
     {
-        $lotatt=array_filter($info,function ($key){
-            return strpos($key,'lotatt')===0;
-        },ARRAY_FILTER_USE_KEY);
-        $invlotatt=[];
-        for ($i=1;$i<=8;$i++){$invlotatt["lotatt0{$i}"]=null;}
-        foreach ($invlotatt as $key=>&$item){
-            foreach ($lotatt as $key1=>$item1){
-                if ($key===$key1) $item=$item1;
+        $lotatt = array_filter($info, function ($key) {
+            return strpos($key, 'lotatt') === 0;
+        }, ARRAY_FILTER_USE_KEY);
+        $invlotatt = [];
+        for ($i = 1; $i <= 8; $i++) {
+            $invlotatt["lotatt0{$i}"] = null;
+        }
+        foreach ($invlotatt as $key => &$item) {
+            foreach ($lotatt as $key1 => $item1) {
+                if ($key === $key1) $item = $item1;
             }
         }
-        $who= 'WAS'.(Auth::user() ? '-'.Auth::user()["name"] : '');
-        $time=Carbon::now()->toDateTimeString();
-        return DB::connection("oracle")->transaction(function ()use ($info,$invlotatt,$who,$time){
+        $who = 'WAS' . (Auth::user() ? '-' . Auth::user()["name"] : '');
+        $time = Carbon::now()->toDateTimeString();
+        return DB::connection("oracle")->transaction(function () use ($info, $invlotatt, $who, $time) {
             //flux 批次号
-            $lotNum=$this->getOrCreateLotNum($info,$invlotatt,$who,$time);
-            if (!$lotNum){
+            $lotNum = $this->getOrCreateLotNum($info, $invlotatt, $who, $time);
+            if (!$lotNum) {
                 DB::connection("oracle")->rollBack();
                 return false;
             }
             //flux 创建入库事务
-            $actTransactionLog=$this->setFluxActTransactionLog($info,$lotNum,$who,$time);
-            if (!$actTransactionLog){
+            $actTransactionLog = $this->setFluxActTransactionLog($info, $lotNum, $who, $time);
+            if (!$actTransactionLog) {
                 DB::connection("oracle")->rollBack();
                 return false;
             }
             //flux 创建上架任务
-            $this->setFluxTskTaskListPA($info,$invlotatt, $actTransactionLog, $who, $time);
+            $this->setFluxTskTaskListPA($info, $invlotatt, $actTransactionLog, $who, $time);
             //flux 完善库存余量
-            $this->updateFluxInv($info,$lotNum,$who,$time,$actTransactionLog);
+            $this->updateFluxInv($info, $lotNum, $who, $time, $actTransactionLog);
             //flux 更新asn_detail 和 asn_header 状态
-            return $this->updateFluxAsn($info,$invlotatt,$time,$who);
+            return $this->updateFluxAsn($info, $invlotatt, $time, $who);
         });
 
     }
@@ -300,100 +357,101 @@ sql;
      */
     public function updateFluxAsn(array $info, array $invlotatt, $time, $who): bool
     {
-        $db=DB::connection("oracle");
-        $asn=OracleDOCASNHeader::query()
+        $db = DB::connection("oracle");
+        $asn = OracleDOCASNHeader::query()
             ->withCount('asnDetails')
             ->with('asnDetails')
-            ->where('asnno',$info['asnno'])
+            ->where('asnno', $info['asnno'])
             ->first();
-        if (!$asn||!$asn->asnDetails||!$asn->asn_details_count) return false;
-        $asnDetails=$asn->asnDetails;
-        $receiveAsn=null;
-        foreach ($asnDetails as $asnDetail){
-            if ($asnDetail['asnno']==$info['asnno'] &&
-                $asnDetail['asnlineno']==$info['asnlineno'] &&
-                $asnDetail['customerid']==$info['customerid'] &&
-                $asnDetail['sku']==$info['sku']) $receiveAsn=$asnDetail;
+        if (!$asn || !$asn->asnDetails || !$asn->asn_details_count) return false;
+        $asnDetails = $asn->asnDetails;
+        $receiveAsn = null;
+        foreach ($asnDetails as $asnDetail) {
+            if ($asnDetail['asnno'] == $info['asnno'] &&
+                $asnDetail['asnlineno'] == $info['asnlineno'] &&
+                $asnDetail['customerid'] == $info['customerid'] &&
+                $asnDetail['sku'] == $info['sku']) $receiveAsn = $asnDetail;
         }
-        return $db->transaction(function ()use($db,$info,$receiveAsn,$invlotatt,$time,$who,$asn){
-            if ($receiveAsn && (int)$receiveAsn['receivedqty']+(int)$info['amount']<(int)$receiveAsn['expectedqty']){
+        return $db->transaction(function () use ($db, $info, $receiveAsn, $invlotatt, $time, $who, $asn) {
+            if ($receiveAsn && (int)$receiveAsn['receivedqty'] + (int)$info['amount'] < (int)$receiveAsn['expectedqty']) {
                 //asn_detail 收货数量+已收数量<预期数量
                 $db->update(DB::raw("UPDATE DOC_ASN_DETAILS SET receivedqty = receivedqty + ?,receivedqty_each = receivedqty_each + ?,linestatus = '30',holdrejectcode ='OK',
                 reserve_flag ='Y',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),receivedtime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ?,
              lotatt01 =?,lotatt02 =?,lotatt03 =?,lotatt04 =?,lotatt05 =?,lotatt06 =?,lotatt07 =?,lotatt08=? WHERE asnno = ? and asnlineno = ?"),
-                    [(int)$info['amount'],(int)$info['amount'],$time,$time,$who,$invlotatt['lotatt01'],$invlotatt['lotatt02'],$invlotatt['lotatt03'],$invlotatt['lotatt04'],
-                        $invlotatt['lotatt05'],$invlotatt['lotatt06'],$invlotatt['lotatt07'],$invlotatt['lotatt08'],$info['asnno'],$info['asnlineno']]);
+                    [(int)$info['amount'], (int)$info['amount'], $time, $time, $who, $invlotatt['lotatt01'], $invlotatt['lotatt02'], $invlotatt['lotatt03'], $invlotatt['lotatt04'],
+                        $invlotatt['lotatt05'], $invlotatt['lotatt06'], $invlotatt['lotatt07'], $invlotatt['lotatt08'], $info['asnno'], $info['asnlineno']]);
                 //asn_header 部分收货状态
                 $db->update(DB::raw("UPDATE DOC_ASN_HEADER SET asnstatus = '30',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
-                    [$time,$who,$info['asnno']]);
-            }elseif ($receiveAsn && (int)$receiveAsn['receivedqty']+(int)$info['amount']==(int)$receiveAsn['expectedqty']){
+                    [$time, $who, $info['asnno']]);
+            } elseif ($receiveAsn && (int)$receiveAsn['receivedqty'] + (int)$info['amount'] == (int)$receiveAsn['expectedqty']) {
                 //asn_detail 收货数量+已收数量=预期数量
                 $db->update(DB::raw("UPDATE DOC_ASN_DETAILS SET receivedqty=receivedqty+?,receivedqty_each=receivedqty_each+?,linestatus = '40',
                 edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),receivedtime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ?,holdrejectcode='OK',
                 reserve_flag='Y',lotatt01=?,lotatt02=?,lotatt03=?,lotatt04=?,lotatt05=?,lotatt06=?,lotatt07=?,lotatt08=? WHERE asnno = ? and asnlineno = ?"),
-                    [(int)$info['amount'],(int)$info['amount'],$time,$time,$who,$invlotatt['lotatt01'],$invlotatt['lotatt02'],$invlotatt['lotatt03'],$invlotatt['lotatt04'],
-                        $invlotatt['lotatt05'],$invlotatt['lotatt06'],$invlotatt['lotatt07'],$invlotatt['lotatt08'],$info['asnno'],$info['asnlineno']]);
+                    [(int)$info['amount'], (int)$info['amount'], $time, $time, $who, $invlotatt['lotatt01'], $invlotatt['lotatt02'], $invlotatt['lotatt03'], $invlotatt['lotatt04'],
+                        $invlotatt['lotatt05'], $invlotatt['lotatt06'], $invlotatt['lotatt07'], $invlotatt['lotatt08'], $info['asnno'], $info['asnlineno']]);
                 //当asn_detail 所有状态都为完全收货是  asn_header 状态修改为 完全收货(asnstatus=40)
-                if (OracleDOCASNDetail::query()->where('asnno',$info['asnno'])->where('linestatus',40)->count()==$asn->asn_details_count){
+                if (OracleDOCASNDetail::query()->where('asnno', $info['asnno'])->where('linestatus', 40)->count() == $asn->asn_details_count) {
                     $db->update(DB::raw("UPDATE DOC_ASN_HEADER SET asnstatus = '40',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
-                        [$time,$who,$info['asnno']]);
-                }else {
+                        [$time, $who, $info['asnno']]);
+                } else {
                     //asn_header 部分收货状态
                     $db->update(DB::raw("UPDATE DOC_ASN_HEADER SET asnstatus = '30',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
-                        [$time,$who,$info['asnno']]);
+                        [$time, $who, $info['asnno']]);
                 }
             }
             return true;
         });
     }
+
     /**
      * @throws \Throwable
      */
     public function updateFluxInv(array $info, $lotNum, $who, $time, array $actTransactionLog)
     {
         $db = DB::connection("oracle");
-        $db->transaction(function ()use ($db,$info,$lotNum,$actTransactionLog,$who,$time){
+        $db->transaction(function () use ($db, $info, $lotNum, $actTransactionLog, $who, $time) {
             //更新 inv_lot 批次 库存表
-            $invLot=$db->selectOne(DB::raw("SELECT * FROM INV_LOT WHERE lotnum = ? AND customerid = ? AND sku = ? "),[
-                $lotNum,$info['customerid'],$info['sku']
+            $invLot = $db->selectOne(DB::raw("SELECT * FROM INV_LOT WHERE lotnum = ? AND customerid = ? AND sku = ? "), [
+                $lotNum, $info['customerid'], $info['sku']
             ]);
-            if ($invLot)$db->update(DB::raw("UPDATE INV_LOT SET qty = qty+?,edittime=?,editwho=? WHERE lotnum = ? AND customerid = ? AND sku = ?"),[
-                (int)$info['amount'],$time,$who,$lotNum,$info['customerid'],$info['sku'],
+            if ($invLot) $db->update(DB::raw("UPDATE INV_LOT SET qty = qty+?,edittime=?,editwho=? WHERE lotnum = ? AND customerid = ? AND sku = ?"), [
+                (int)$info['amount'], $time, $who, $lotNum, $info['customerid'], $info['sku'],
             ]);
-            else $db->insert(DB::raw("INSERT INTO INV_LOT VALUES(?,?,?,?,0,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?)"),[
-                $lotNum,$info['customerid'],$info['sku'],$info['amount'],$time,$who, $time,$who
+            else $db->insert(DB::raw("INSERT INTO INV_LOT VALUES(?,?,?,?,0,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?)"), [
+                $lotNum, $info['customerid'], $info['sku'], $info['amount'], $time, $who, $time, $who
             ]);
             //更新 inv_lot_loc_id 批次/库位/跟踪号 库存表
-            $invLotId = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = ? FOR UPDATE"),[
-                $lotNum,$actTransactionLog['location'],$actTransactionLog['customerid'],$actTransactionLog['sku'],$actTransactionLog['trackid']
+            $invLotId = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = ? FOR UPDATE"), [
+                $lotNum, $actTransactionLog['location'], $actTransactionLog['customerid'], $actTransactionLog['sku'], $actTransactionLog['trackid']
             ]);
 
-            if ($info['location']){ //存在目标库位
-                $invLotIdHasPreLocation = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = ? FOR UPDATE"),[
-                    $lotNum,$info['location'],$actTransactionLog['customerid'],$actTransactionLog['sku'],$actTransactionLog['trackid']
+            if ($info['location']) { //存在目标库位
+                $invLotIdHasPreLocation = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = ? FOR UPDATE"), [
+                    $lotNum, $info['location'], $actTransactionLog['customerid'], $actTransactionLog['sku'], $actTransactionLog['trackid']
                 ]);
 
-                if ($invLotIdHasPreLocation)$db->update(DB::raw("UPDATE inv_lot_loc_id SET qtypa = qtypa+?,edittime=?,editwho=? WHERE lotnum = ? AND locationid = ? AND traceid = ?"),[
-                    (int)$info['amount'],$time,$who,$lotNum,$info['location'],$actTransactionLog['trackid']
+                if ($invLotIdHasPreLocation) $db->update(DB::raw("UPDATE inv_lot_loc_id SET qtypa = qtypa+?,edittime=?,editwho=? WHERE lotnum = ? AND locationid = ? AND traceid = ?"), [
+                    (int)$info['amount'], $time, $who, $lotNum, $info['location'], $actTransactionLog['trackid']
                 ]);
-                else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,?,?,?,?,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',?,null)"),[
-                    $lotNum,$info['location'],$actTransactionLog['trackid'],$actTransactionLog['customerid'],$actTransactionLog['sku'],0,$time,$who,$time,$who,(int)$info['amount']
+                else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,?,?,?,?,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',?,null)"), [
+                    $lotNum, $info['location'], $actTransactionLog['trackid'], $actTransactionLog['customerid'], $actTransactionLog['sku'], 0, $time, $who, $time, $who, (int)$info['amount']
                 ]);
 
-                if ($invLotId)$db->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty+?,qtymvout = qtymvout+?,edittime=?,editwho=? WHERE lotnum = ? AND locationid = ? AND traceid = ?"),[
-                    (int)$info['amount'],(int)$info['amount'],$time,$who,$lotNum,$actTransactionLog['location'],$actTransactionLog['trackid']
+                if ($invLotId) $db->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty+?,qtymvout = qtymvout+?,edittime=?,editwho=? WHERE lotnum = ? AND locationid = ? AND traceid = ?"), [
+                    (int)$info['amount'], (int)$info['amount'], $time, $who, $lotNum, $actTransactionLog['location'], $actTransactionLog['trackid']
                 ]);
-                else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,?,?,?,?,0,0,0,0,?,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',0,null)"),[
-                    $lotNum,$actTransactionLog['location'],$actTransactionLog['trackid'],$actTransactionLog['customerid'],$actTransactionLog['sku'],(int)$info['amount'],(int)$info['amount'],
-                    $time,$who,$time,$who,
+                else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,?,?,?,?,0,0,0,0,?,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',0,null)"), [
+                    $lotNum, $actTransactionLog['location'], $actTransactionLog['trackid'], $actTransactionLog['customerid'], $actTransactionLog['sku'], (int)$info['amount'], (int)$info['amount'],
+                    $time, $who, $time, $who,
                 ]);
 
-            }else{
-                if ($invLotId)$db->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty+?,edittime=?,editwho=? WHERE lotnum = ? AND locationid = ? AND traceid = ?"),[
-                    (int)$info['amount'],$time,$who,$lotNum,$actTransactionLog['location'],$actTransactionLog['trackid']
+            } else {
+                if ($invLotId) $db->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty+?,edittime=?,editwho=? WHERE lotnum = ? AND locationid = ? AND traceid = ?"), [
+                    (int)$info['amount'], $time, $who, $lotNum, $actTransactionLog['location'], $actTransactionLog['trackid']
                 ]);
-                else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,?,?,?,?,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',0,null)"),[
-                    $lotNum,$actTransactionLog['location'],$actTransactionLog['trackid'],$actTransactionLog['customerid'],$actTransactionLog['sku'],(int)$info['amount'],$time,$who,$time,$who,
+                else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,?,?,?,?,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',0,null)"), [
+                    $lotNum, $actTransactionLog['location'], $actTransactionLog['trackid'], $actTransactionLog['customerid'], $actTransactionLog['sku'], (int)$info['amount'], $time, $who, $time, $who,
                 ]);
             }
         });
@@ -405,19 +463,19 @@ sql;
     public function setFluxTskTaskListPA(array $info, array $invlotatt, $actTransactionLog, $who, $time)
     {
         $db = DB::connection("oracle");
-        $db->transaction(function ()use ($db,$info,$invlotatt,$actTransactionLog,$who,$time){
+        $db->transaction(function () use ($db, $info, $invlotatt, $actTransactionLog, $who, $time) {
             $sql = <<<sql
 INSERT INTO TSK_TASKLISTS VALUES(?,'1','PA',?,?,'ASN',?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,null,null,?,?,?,?,?,?,?,?,null,null,null,null,
     0,0,0,0,null,?,null,null,null,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),null,null,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),'N',null,null,
     ?,?,?,'N',null,?,'*',null,null,null,'N',null,null)
 sql;
-            $db->insert(DB::raw($sql),[
-                $actTransactionLog['tsid'],$actTransactionLog['customerid'],$actTransactionLog['sku'],$actTransactionLog['docno'],$actTransactionLog['doclineno'],
-                $actTransactionLog['lotNum'],$actTransactionLog['packid'],'EA',$info['amount'],$info['amount'],$actTransactionLog['location'],$actTransactionLog['location'],
-                $actTransactionLog['trackid'],$actTransactionLog['lotNum'],$actTransactionLog['packid'],'EA',$info['amount'],$info['amount'],
-                $info['location'],$info['location'],$actTransactionLog['trackid'],'00','Putaway Task','3',$invlotatt['lotatt01'],$invlotatt['lotatt02'],$invlotatt['lotatt03'],$invlotatt['lotatt04'],
-                $invlotatt['lotatt05'],$invlotatt['lotatt06'],$invlotatt['lotatt07'],$invlotatt['lotatt08'],$actTransactionLog['trid'],$who,$time,null,null,null,null,
-                $actTransactionLog['userdefine1'],$actTransactionLog['userdefine2'],$actTransactionLog['userdefine3'],$actTransactionLog['warehouseid']
+            $db->insert(DB::raw($sql), [
+                $actTransactionLog['tsid'], $actTransactionLog['customerid'], $actTransactionLog['sku'], $actTransactionLog['docno'], $actTransactionLog['doclineno'],
+                $actTransactionLog['lotNum'], $actTransactionLog['packid'], 'EA', $info['amount'], $info['amount'], $actTransactionLog['location'], $actTransactionLog['location'],
+                $actTransactionLog['trackid'], $actTransactionLog['lotNum'], $actTransactionLog['packid'], 'EA', $info['amount'], $info['amount'],
+                $info['location'], $info['location'], $actTransactionLog['trackid'], '00', 'Putaway Task', '3', $invlotatt['lotatt01'], $invlotatt['lotatt02'], $invlotatt['lotatt03'], $invlotatt['lotatt04'],
+                $invlotatt['lotatt05'], $invlotatt['lotatt06'], $invlotatt['lotatt07'], $invlotatt['lotatt08'], $actTransactionLog['trid'], $who, $time, null, null, null, null,
+                $actTransactionLog['userdefine1'], $actTransactionLog['userdefine2'], $actTransactionLog['userdefine3'], $actTransactionLog['warehouseid']
             ]);
         });
     }
@@ -431,66 +489,67 @@ sql;
      * @throws \Throwable
      * 创建入库事务
      */
-    public function setFluxActTransactionLog(array $info,$lotNum,$who,$time)
+    public function setFluxActTransactionLog(array $info, $lotNum, $who, $time)
     {
         $db = DB::connection("oracle");
-        return $db->transaction(function ()use ($db,$info,$lotNum,$time,$who){
-            if ($info['trackNumber'])$trackNumber=$info['trackNumber'];
-            else $trackNumber=substr(md5($time),0,30);
-            $asnHeader=OracleDOCASNHeader::query()->where('asnno',$info['asnno'])->first();
-            $asnDetail=OracleDOCASNDetail::query()->where('asnno',$info['asnno'])->where('sku',$info['sku'])->first();
+        return $db->transaction(function () use ($db, $info, $lotNum, $time, $who) {
+            if ($info['trackNumber']) $trackNumber = $info['trackNumber'];
+            else $trackNumber = substr(md5($time), 0, 30);
+            $asnHeader = OracleDOCASNHeader::query()->where('asnno', $info['asnno'])->first();
+            $asnDetail = OracleDOCASNDetail::query()->where('asnno', $info['asnno'])->where('sku', $info['sku'])->first();
             $sql = <<<sql
 INSERT INTO ACT_TRANSACTION_LOG VALUES(?,'IN',?,?,?,?,'ASN',?,?,?,?,?,?,?,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,
 TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,?,null,null,null,?,?,?,?,?,?,?,?,
 ?,?,?,?,'1','Y',null,?,?,?,?,null,null,?,null,null)
 sql;
-            list($trid,$max) = app('StorageService')->getTrNumber();
-            list($tsid,$max) = $this->getTsNum();
-            $db->insert(DB::raw($sql),[
-                $trid,$asnDetail->customerid,$asnDetail->sku,
-                $asnDetail->asnno,$asnDetail->asnlineno,$lotNum,$asnDetail->receivinglocation,'*',$asnDetail->packid,'EA',$info['amount'],$info['amount'],'99',$time,$who,
-                $time,$who,$time,$asnDetail->customerid,$asnDetail->sku,$trackNumber,$asnDetail->receivinglocation,$who,$asnDetail->packid,'EA',$info['amount'],$info['amount'],$lotNum,
-                '*','0','N',$tsid,substr($asnDetail->receivinglocation,-4),$asnHeader->userdefine1,$asnHeader->userdefine2,
-                $asnHeader->userdefine3,'O'
+            list($trid, $max) = app('StorageService')->getTrNumber();
+            list($tsid, $max) = $this->getTsNum();
+            $db->insert(DB::raw($sql), [
+                $trid, $asnDetail->customerid, $asnDetail->sku,
+                $asnDetail->asnno, $asnDetail->asnlineno, $lotNum, $asnDetail->receivinglocation, '*', $asnDetail->packid, 'EA', $info['amount'], $info['amount'], '99', $time, $who,
+                $time, $who, $time, $asnDetail->customerid, $asnDetail->sku, $trackNumber, $asnDetail->receivinglocation, $who, $asnDetail->packid, 'EA', $info['amount'], $info['amount'], $lotNum,
+                '*', '0', 'N', $tsid, substr($asnDetail->receivinglocation, -4), $asnHeader->userdefine1, $asnHeader->userdefine2,
+                $asnHeader->userdefine3, 'O'
             ]);
             app('StorageService')->setTrNumber();
             $this->setTsNum();
-            $actTransactionLog=[
-                'trid'=>$trid,'docno'=>$asnDetail->asnno,'customerid'=>$asnDetail->customerid,'sku'=>$asnDetail->sku,'doclineno'=>$asnDetail->asnlineno,'lotNum'=>$lotNum,'location'=>$asnDetail->receivinglocation,
-                'packid'=>$asnDetail->packid,'tsid'=>$tsid,'warehouseid'=>substr($asnDetail->receivinglocation,-4),'userdefine1'=>$asnHeader->userdefine1,'userdefine2'=>$asnHeader->userdefine2,
-                'userdefine3'=>$asnHeader->userdefine3,'trackid'=>$trackNumber
+            $actTransactionLog = [
+                'trid' => $trid, 'docno' => $asnDetail->asnno, 'customerid' => $asnDetail->customerid, 'sku' => $asnDetail->sku, 'doclineno' => $asnDetail->asnlineno, 'lotNum' => $lotNum, 'location' => $asnDetail->receivinglocation,
+                'packid' => $asnDetail->packid, 'tsid' => $tsid, 'warehouseid' => substr($asnDetail->receivinglocation, -4), 'userdefine1' => $asnHeader->userdefine1, 'userdefine2' => $asnHeader->userdefine2,
+                'userdefine3' => $asnHeader->userdefine3, 'trackid' => $trackNumber
             ];
             return $actTransactionLog;
         });
     }
+
     /**
      * @param array $info
      * @return mixed
      * @throws \Throwable
      * 或去flux 批次号
      */
-    public function getOrCreateLotNum(array $info,array $invlotatt,$who,$time)
+    public function getOrCreateLotNum(array $info, array $invlotatt, $who, $time)
     {
-        $invlotatt['customerid']=$info['customerid'];
-        $invlotatt['sku']=$info['sku'];
+        $invlotatt['customerid'] = $info['customerid'];
+        $invlotatt['sku'] = $info['sku'];
         //根据批次规则查询或新建批次
-        $lotnum=OracleInvLotAtt::query()->where($invlotatt)->value('lotnum');
+        $lotnum = OracleInvLotAtt::query()->where($invlotatt)->value('lotnum');
         if ($lotnum) return $lotnum;
 
         $db = DB::connection("oracle");
-        list($num,$max)=$this->getLtNum();
-        return $db->transaction(function ()use($db,$info,$invlotatt,$num,$who,$time){
-           $sql = <<<sql
+        list($num, $max) = $this->getLtNum();
+        return $db->transaction(function () use ($db, $info, $invlotatt, $num, $who, $time) {
+            $sql = <<<sql
 INSERT INTO INV_LOT_ATT VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,
 TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?)
 sql;
-           $db->insert(DB::raw($sql),[
-               $num,$info['customerid'],$info['sku'],$invlotatt['lotatt01'],$invlotatt['lotatt02'],$invlotatt['lotatt03'],$invlotatt['lotatt04'],
-               $invlotatt['lotatt05'],$invlotatt['lotatt06'],$invlotatt['lotatt07'],$invlotatt['lotatt08'],null,null,null,null,$time,$who,$time,$who,$time,null
-           ]);
-           $this->setLtNum();
-           return $num;
-       });
+            $db->insert(DB::raw($sql), [
+                $num, $info['customerid'], $info['sku'], $invlotatt['lotatt01'], $invlotatt['lotatt02'], $invlotatt['lotatt03'], $invlotatt['lotatt04'],
+                $invlotatt['lotatt05'], $invlotatt['lotatt06'], $invlotatt['lotatt07'], $invlotatt['lotatt08'], null, null, null, null, $time, $who, $time, $who, $time, null
+            ]);
+            $this->setLtNum();
+            return $num;
+        });
 
     }
 
@@ -500,11 +559,11 @@ sql;
      */
     private function getLtNum(): array
     {
-        $val = ValueStore::query()->select("value")->where("name","flux_lt_number")->lockForUpdate()->first();
-        if (!$val)$val = ValueStore::query()->create(["name"=>"flux_lt_number","value"=>'0']);
-        $max = $val->value+1;
+        $val = ValueStore::query()->select("value")->where("name", "flux_lt_number")->lockForUpdate()->first();
+        if (!$val) $val = ValueStore::query()->create(["name" => "flux_lt_number", "value" => '0']);
+        $max = $val->value + 1;
         $number = sprintf("%07d", $max);
-        return array ('WLT'.$number,$max);
+        return array('WLT' . $number, $max);
     }
 
     /**
@@ -514,20 +573,21 @@ sql;
     {
         ValueStore::query()
             ->select("value")
-            ->where("name","flux_lt_number")
-            ->update(["value"=>DB::raw("value+1")]);
+            ->where("name", "flux_lt_number")
+            ->update(["value" => DB::raw("value+1")]);
     }
+
     /**
      * 获取批次号
      * @return array
      */
     private function getTsNum(): array
     {
-        $val = ValueStore::query()->select("value")->where("name","flux_ts_number")->lockForUpdate()->first();
-        if (!$val)$val = ValueStore::query()->create(["name"=>"flux_ts_number","value"=>'0']);
-        $max = $val->value+1;
+        $val = ValueStore::query()->select("value")->where("name", "flux_ts_number")->lockForUpdate()->first();
+        if (!$val) $val = ValueStore::query()->create(["name" => "flux_ts_number", "value" => '0']);
+        $max = $val->value + 1;
         $number = sprintf("%07d", $max);
-        return array ('WTS'.$number,$max);
+        return array('WTS' . $number, $max);
     }
 
     /**
@@ -537,7 +597,7 @@ sql;
     {
         ValueStore::query()
             ->select("value")
-            ->where("name","flux_ts_number")
-            ->update(["value"=>DB::raw("value+1")]);
+            ->where("name", "flux_ts_number")
+            ->update(["value" => DB::raw("value+1")]);
     }
 }

+ 3 - 2
app/Services/MaterialBoxService.php

@@ -115,8 +115,9 @@ sql;
     public function getModelAvailableBox(int $modelId, bool $sqlQuery = false, array $blacklist = [])
     {
         $query = MaterialBox::query()->where("material_box_model_id",$modelId)->where("status",4);
-        $boxes = $query->whereNotIn("id",$query->whereHas("performTask"))
-            ->whereNotIn("id",$blacklist)->get();
+        $boxes = $query->whereNotIn("id",$query->select("id")->whereHas("performTask"));
+        if ($blacklist)$boxes = $boxes->whereNotIn("id",$blacklist);
+        $boxes = $boxes->get();
         if (!$sqlQuery)return $boxes;
         if ($boxes->count()==0)return null;
         $boxCodes = "";

+ 4 - 1
app/Services/OwnerService.php

@@ -267,7 +267,10 @@ class OwnerService
                 else $builder->where('owner_id',$param);
                 continue;
             }
-
+            if ($column == 'user_work_group'){
+                $builder->where("user_workgroup_id",$param);
+                continue;
+            }
             if (is_array($param))$builder->whereIn($column,$param);
             else $builder->where($column,$param);
         }

+ 1 - 1
app/Services/StationService.php

@@ -155,7 +155,7 @@ class StationService
     {
         $mapping = [];
         foreach (Station::query()->whereIn("code",$codes)->get() as $station){
-            $station[$station->code] = $station->id;
+            $mapping[$station->code] = $station->id;
         }
         return $mapping;
     }

+ 1 - 1
app/Services/StationTaskBatchService.php

@@ -197,7 +197,7 @@ class StationTaskBatchService
                         $isFetchedFromRobotics = $this->foreignHaiRoboticsService->
                         fetchGroup_multiLocation($toLocation, $taskMaterialBoxes, $groupPrefix, '立架出至缓存架',20);
                         foreach ($toLocation as $value){
-                            app("CacheShelfService")->lightUp($value,'3','2');
+                            app("CacheShelfService")->lightUp($value,'3','0');
                             Cache::forever("CACHE_SHELF_OCCUPANCY_{$map[$value]}",true);
                         }
                         app("StationService")->locationOccupyMulti($toLocation->toArray());

+ 1 - 1
app/Services/StorageService.php

@@ -123,7 +123,7 @@ class StorageService
             ->where("status",0)->first();
         if (!$task)return;
         //黄灯闪烁
-        if ($task->type == '入库' && $task->mark == 1)app("CacheShelfService")->lightUp($stationTaskMaterialBox->station->code,'3','2',["title"=>'机器人取箱中,禁止操作',]);
+        if ($task->type == '入库' && $task->mark == 1)app("CacheShelfService")->lightUp($stationTaskMaterialBox->station->code,'3','0',["title"=>'机器人取箱中,禁止操作',]);
     }
 
     /**

+ 4 - 1
resources/views/customer/project/index.blade.php

@@ -133,20 +133,23 @@
                 ownerSubjection:{!! json_encode(\App\Owner::subjection,JSON_UNESCAPED_UNICODE) !!},
                 selectTr:'',
                 id:"",
+                user_work_groups:  [@foreach($userWorkGroups as $userWorkGroup){name:"{{$userWorkGroup->id}}",value:"{{$userWorkGroup->name}}"},@endforeach]
             },
             mounted(){
                 $('#container').removeClass('d-none');
                 let data=[
                     [
                         {name:'user_owner_group_id',type:'select',tip:'项目小组',placeholder: '项目小组',data:this.ownerGroups},
+                        {name:'user_work_group',type:'select',tip: '仓库小组搜索',placeholder: '仓库小组',data:this.user_work_groups},
+
                         {name:'created_at_start',type:'time',tip:['选择显示创建日期的起始时间','']},
                         {name:'ids',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的项目'],
                             placeholder:['项目','定位或多选项目'],data:this.models},
                         {name:'contract_number',type:'input',tip: '合同号:可在左侧增加百分号(%)进行模糊搜索',placeholder: '合同号'},
                     ],[
                         {name:'customers',type:'select_multiple_select',tip:['客户','定位或多选项目'],placeholder: ['客户','定位或多选项目'],data:this.customers},
-                        {name:'created_at_end',type:'time',tip:['选择显示创建日期的结束时间','']},
                         {name:'using_type',type:'select',placeholder: '用仓类型',data:[{name:"常温",value:"常温"},{name:"恒温",value:"恒温"}]},
+                        {name:'created_at_end',type:'time',tip:['选择显示创建日期的结束时间','']},
                     ],
                 ];
                 this.form = new query({

+ 0 - 1
resources/views/order/issue/index.blade.php

@@ -970,7 +970,6 @@
                     {name: '部分退回', value: '部分退回'},
                     {name: '差异退回', value: '差异退回'},
                     {name: '超量退回', value: '超量退回'},
-                    {name: '全部退回', value: '全部退回'},
                 ],
                 logistics: [
                         @foreach($logistics as $logistic)

+ 2 - 2
resources/views/personnel/discharge/statement/index.blade.php

@@ -65,8 +65,8 @@
                         placeholder: ['货主', '定位或多选货主'],
                         data: _this.owners
                     },
-                    {name: 'created_at_start', type: 'dateTime', tip: '创建开始日期'},
-                    {name: 'created_at_end', type: 'dateTime', tip: '创建结束日期'},
+                    {name: 'income_at_start', type: 'dateTime', tip: '创建开始日期'},
+                    {name: 'income_at_end', type: 'dateTime', tip: '创建结束日期'},
                     {name: 'numbers', type: 'input', tip: '可支持多入库单号,模糊搜索可在两侧增加百分号(%)进行', placeholder: '入库单号'},
                     {name: 'status', type: 'select', tip: '状态', data: status, placeholder: '状态'},
                 ], [

+ 5 - 2
resources/views/store/handInStorage/receiveDetailPage.blade.php

@@ -270,9 +270,11 @@
                                 this.asnDetails=res.data.data;
                                 this.$forceUpdate()
                                 return;
+                            }else {
+                                window.tempTip.setDuration(2000);
+                                window.tempTip.show(res.data.data);
+                                this.isInit=true;
                             }
-                            window.tempTip.setDuration(2000);
-                            window.tempTip.show(res.data.data);
                         }).catch(err=>{
                         window.tempTip.setDuration(2000);
                         window.tempTip.show("网络错误:"+err);
@@ -295,6 +297,7 @@
                                 window.tempTip.setDuration(2000);
                                 window.tempTip.showSuccess(res.data.data);
                                 this.info={};
+                                this.asnDetails=[];
                                 this.$forceUpdate();
                                 document.getElementById("sku").focus();
                                 return;