Эх сурвалжийг харах

Merge branch 'master' into zengjun

ajun 5 жил өмнө
parent
commit
dfde377511
43 өөрчлөгдсөн 941 нэмэгдсэн , 320 устгасан
  1. 1 0
      app/Http/Controllers/InventoryAccountController.php
  2. 0 1
      app/Http/Controllers/InventoryCompareController.php
  3. 24 30
      app/Http/Controllers/LaborReportController.php
  4. 2 0
      app/Http/Controllers/OrderIssueController.php
  5. 11 1
      app/Http/Controllers/StoreController.php
  6. 1 1
      app/Http/Controllers/StoreItemsController.php
  7. 111 56
      app/Http/Controllers/TestController.php
  8. 1 2
      app/Http/Controllers/api/thirdPart/weight/PackageController.php
  9. 1 1
      app/OracleDOCASNHeader.php
  10. 2 1
      app/Services/OracleDocAsnHerderService.php
  11. 4 1
      app/Services/OrderIssueService.php
  12. 20 16
      app/Services/OrderService.php
  13. 3 2
      app/Services/RejectedBillService.php
  14. 97 141
      app/Services/StoreItemService.php
  15. 28 7
      app/Services/StoreService.php
  16. 12 12
      app/Store.php
  17. 4 7
      app/UserWorkgroup.php
  18. 32 0
      database/migrations/2020_11_13_100252_add_authorities.php
  19. 34 0
      database/migrations/2020_11_13_155436_change_inventory_accounts_status_column.php
  20. BIN
      public/images/QRCodeIMG/10.png
  21. BIN
      public/images/QRCodeIMG/5.png
  22. 1 1
      resources/views/inventory/stockInventory/inventoryMission.blade.php
  23. 5 4
      resources/views/inventory/stockInventory/mission.blade.php
  24. 15 12
      resources/views/personnel/laborReport/index.blade.php
  25. 2 2
      resources/views/store/fast/index.blade.php
  26. 223 0
      resources/views/store/inStorage/index.blade.php
  27. 12 0
      resources/views/store/inStorage/menu.blade.php
  28. 111 0
      resources/views/store/inStorage/storeItem.blade.php
  29. 5 1
      resources/views/store/menu.blade.php
  30. 3 0
      routes/web.php
  31. 0 6
      serves/excelExportGo/api/controller/controller.go
  32. 19 0
      serves/excelExportGo/logs/2020-11-16.log
  33. 5 4
      tests/Services/OracleDocAsnHeaderService/getWmsAsnOnStartDateCreateOrEditTest.php
  34. 62 0
      tests/Services/RejectedBillService/GetLogisticNumberTest.php
  35. 64 0
      tests/Services/RejectedBillService/GetUpdateCollectTest.php
  36. 4 2
      tests/Services/RejectedBillService/SyncLoadedStatusByAsnHeaderTest.php
  37. 5 2
      tests/Services/StoreItemService/GetAsnDetailsByAsnHerderTest.php
  38. 3 1
      tests/Services/StoreItemService/GetByWmsTest.php
  39. 3 1
      tests/Services/StoreItemService/GetParamsByAsnDetailsTest.php
  40. 3 2
      tests/Services/StoreService/AsnSyncTest.php
  41. 3 1
      tests/Services/StoreService/CreateStoreTest.php
  42. 3 1
      tests/Services/StoreService/GetParamsByAsnHeaderTest.php
  43. 2 1
      tests/Services/StoreService/UpdateStoreTest.php

+ 1 - 0
app/Http/Controllers/InventoryAccountController.php

@@ -51,6 +51,7 @@ class InventoryAccountController extends Controller
         if(is_null($id)){return ['success'=>false,'msg'=>'传入id为空'];}
         $inventoryAccount=InventoryAccount::query()->where('id',$id)->update([
             'auditor'=>Auth::user()['id'],
+            'status'=>'已审核',
         ]);
         if ($inventoryAccount==1) {
             $inventoryAccount=InventoryAccount::query()->with('userAuditor')->find($id);

+ 0 - 1
app/Http/Controllers/InventoryCompareController.php

@@ -135,7 +135,6 @@ class InventoryCompareController extends Controller
             $params = $request->input();
             unset($params['checkAllSign']);
             $sql=app('InventoryCompareService')->getSql($params);
-//            dd($sql);
         }else{
             $sql=app('InventoryCompareService')->getSql(['id'=>$request->data]);
         }

+ 24 - 30
app/Http/Controllers/LaborReportController.php

@@ -9,6 +9,7 @@ use App\Exports\Export;
 use App\LaborCompany;
 use App\LaborReport;
 use App\LaborReportStatus;
+use App\Services\common\ExportService;
 use App\Services\LaborReportService;
 use App\UserDutyCheck;
 use App\UserWorkgroup;
@@ -84,38 +85,31 @@ class LaborReportController extends Controller
         }else{
             $laborReports=app('laborReportService')->get(["id"=>$request->data]);
         }
-        $data = [];
+        $row = ['本次工作时长','小组','临时工','电话','身份证号','劳务所','进场时间','进组时间','退组时间','进组取整时间','退组取整时间','退场时间','审核时间','审核人','晚饭时间(分)','在线时长','进场编号','备注'];
+        $list = [];
         foreach ($laborReports as $laborReport){
-            $row = [
-                "enter_number" => $laborReport->enter_number,
-                "user_workgroup_name" => $laborReport->userWorkgroup ? $laborReport->userWorkgroup->name : null,
-                "name" => $laborReport->name,
-                "mobile_phone" => $laborReport->mobile_phone,
-                "identity_number" => $laborReport->identity_number,
-                "labor_company" => $laborReport->laborCompany ? $laborReport->laborCompany->name : null,
-                "enter_at" => $laborReport->enter_at,
-                "check_in_at" => $laborReport->check_in_at,
-                "check_out_at" => $laborReport->check_out_at,
-                "round_check_in_at" => $laborReport->round_check_in_at,
-                "round_check_out_at" => $laborReport->round_check_out_at,
-                "exit_at" => $laborReport->exit_at,
-                "verify_at" => $laborReport->verify_at,
-                "group_user_id" => $laborReport->user ? $laborReport->user->name : null,
-                "relax_time" => (string)$laborReport->relax_time,
-                "online_duration" => $laborReport->online_duration,
-                "working_duration" => $laborReport->working_duration,
-                "remark" => $laborReport->remark,
+            $list[] = [
+                $laborReport->working_duration,
+                $laborReport->userWorkgroup ? $laborReport->userWorkgroup->name : null,
+                $laborReport->name,
+                $laborReport->mobile_phone,
+                $laborReport->identity_number,
+                $laborReport->laborCompany ? $laborReport->laborCompany->name : null,
+                $laborReport->enter_at,
+                $laborReport->check_in_at,
+                $laborReport->check_out_at,
+                $laborReport->round_check_in_at,
+                $laborReport->round_check_out_at,
+                $laborReport->exit_at,
+                $laborReport->verify_at,
+                $laborReport->user ? $laborReport->user->name : null,
+                (string)$laborReport->relax_time,
+                $laborReport->online_duration,
+                $laborReport->enter_number,
+                $laborReport->remark,
             ];
-            $data[] = $row;
         }
-        $post = Http::post(config('go.export.url'),['type'=>'laborReport','data'=>json_encode($data,JSON_UNESCAPED_UNICODE)]);
-        if ($post->status() == 500){
-            throw new Exception($post->header("Msg"));
-        }
-        return response($post,200, [
-            "Content-type"=>"application/octet-stream",
-            "Content-Disposition"=>"attachment; filename=临时工报表记录-".date('ymdHis').'.xlsx',
-        ]);
+        return app(ExportService::class)->json($row,$list,"临时工报表记录");
     }
 
     //门卫打卡审核
@@ -170,7 +164,7 @@ class LaborReportController extends Controller
     public function groupExport(Request $request){
         if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $id=$request->input('id');
-        $laborReport=LaborReport::find($id);
+        $laborReport=LaborReport::query()->find($id);
         $laborReportStatus=new LaborReportStatus([
             'labor_report_id'=>$id,
             'status'=>'已退组',

+ 2 - 0
app/Http/Controllers/OrderIssueController.php

@@ -69,6 +69,7 @@ class OrderIssueController extends Controller
         if (!Gate::allows('订单管理-订单问题件生成')) {
             return redirect(url('/'));
         }
+        /** @var OrderIssueService $orderIssueService */
         $orderIssueService = app('OrderIssueService');
         $orderIssueService->validatorCreate($request)->validate();
         $orderIssue = null;
@@ -275,6 +276,7 @@ class OrderIssueController extends Controller
         if (!$request->filled('clientCode')) {
             return ['success' => false, 'fail_info' => '缺少对应的参数或条件'];
         }
+        /** @var $orderService OrderService*/
         $orderService = app('OrderService');
         $clientCode = $request->input('clientCode');
         $order = Order::query()->where('client_code', $clientCode)->first();

+ 11 - 1
app/Http/Controllers/StoreController.php

@@ -27,6 +27,16 @@ use App\Http\Controllers\Api\thirdPart\flux\StoreController as FStoreController;
 
 class StoreController extends Controller
 {
+    public function storage(Request $request)
+    {
+        if(!Gate::allows('入库管理-入库-查询')){ return redirect(url('/'));  }
+        /** @var StoreService $storeService */
+        $storeService=app(StoreService::class);
+        $stores=$storeService->paginate($request->input());
+        $warehouses=Warehouse::query()->get();
+        $owners=Owner::query()->select('id','name')->get();
+        return view('store.inStorage.index',compact('stores','warehouses','owners'));
+    }
     /**
      * Display a listing of the resource.
      *
@@ -35,7 +45,7 @@ class StoreController extends Controller
     public function index()
     {
         if(!Gate::allows('入库管理-快速入库-查询')){ return redirect(url('/'));  }
-        $stores=Store::orderBy('id','DESC')->paginate(50);
+        $stores=Store::query()->with(['warehouse','owner'])->orderBy('id','DESC')->paginate(50);
         return view('store.fast.index',['stores'=>$stores]);
     }
 

+ 1 - 1
app/Http/Controllers/StoreItemsController.php

@@ -17,7 +17,7 @@ class StoreItemsController extends Controller
      */
     public function index()
     {
-        $storeItems=StoreItems::query()->orderBy('id','DESC')->paginate(50);
+        $storeItems=StoreItems::query()->with('store')->orderBy('id','DESC')->paginate(50);
         return view('store.fast.storeItem',['storeItems'=>$storeItems]);
     }
 }

+ 111 - 56
app/Http/Controllers/TestController.php

@@ -26,6 +26,8 @@ use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
 use App\OracleDOCWaveDetails;
 use App\Order;
+use App\OrderBin;
+use App\OrderCommodity;
 use App\OrderIssue;
 use App\OrderPackage;
 use App\OrderPackageCommodities;
@@ -50,6 +52,7 @@ use App\Services\InventoryCompareService;
 use App\Services\LogService;
 use App\Services\OracleActAllocationDetailService;
 use App\Services\OracleBasCustomerService;
+use App\Services\OracleDocAsnHerderService;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderIssuePerformanceService;
 use App\Services\OrderIssueService;
@@ -58,7 +61,10 @@ use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
+use App\Services\OwnerService;
+use App\Services\StoreService;
 use App\Services\WarehouseService;
+use App\Store;
 use App\StoreCheckingReceive;
 use App\StoreCheckingReceiveItem;
 use App\Unit;
@@ -914,13 +920,53 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     }
     public function testCollectMethod()
     {
-        $collection = collect(str_split('AABBCCCD'));
-
-        $chunks = $collection->chunkWhile(function($current, $key, $chunk) {
-            return $current === $chunk->last();
-        });
-        $chunks->toArray();
-        dd( $chunks->toArray());
+        $startDate=Carbon::parse('2020-11-11 23:59:59')->subSeconds(65)->format('Y-m-d H:i:s');
+        $asnHerders=app(OracleDocAsnHerderService::class)->getWmsAsnOnStartDateCreate($startDate);
+        if ($asnHerders->isEmpty())return null;
+        /**
+         * @var OwnerService $ownerService
+         * @var WarehouseService $wareHouseService
+         */
+        $ownerService = app(OwnerService::class);
+        $owners=$ownerService->getByWmsOrders($asnHerders);
+        $wareHouseService=app(WarehouseService::class);
+        $warehouses=$wareHouseService->getByWms($asnHerders);
+        foreach ($owners as $owner) {
+            $owners_code_map[$owner->code] = $owner;
+        }
+        foreach ($warehouses as $warehouse) {
+            $warehouses_code_map[$warehouse->code] = $warehouse;
+        }
+        var_dump('createStoreParam_start',Carbon::now());
+        $params=app(StoreService::class)->getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map);
+        var_dump('createStoreParam_end',Carbon::now());
+
+        var_dump('insertStore_start',Carbon::now());
+        if(count($params)> 0){
+            //app(StoreService::class)->insertStore($params);
+            DB::table('stores')->insert($params);
+        }
+        var_dump('insertStore_end',Carbon::now());
+    }
+    public function testMethodSecond(){
+        $param=[
+            "asn_code" => "ASN2011120516",
+            "warehouse_id" => 2,
+            "owner_id" => 35,
+            "stored_method" => "退货入库",
+            "status" => "订单创建",
+            "remark" => null,
+            "created_at" => "2020-11-12 14:12:42",
+            "updated_at" => "2020-11-12 14:12:42",
+            ];
+        var_dump('start',Carbon::now());
+        //Store::query()->insert($param);
+        app(StoreService::class)->insertStore($param);
+        var_dump('end',Carbon::now());
+    }
+    public  function  testSyncAsn(){
+        $startDate=Carbon::parse('2020-11-12 17:48:00')->subSeconds(65)->format('Y-m-d H:i:s');
+        app(StoreService::class)->syncWmsAsnData($startDate);
     }
 
     public function chageOrder()
@@ -957,56 +1003,65 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         return view('test');
     }
     public function cleanOrderRepeat(){
-        $orders_repeating=Order::query()
-            ->selectRaw('count(*) as count, code')
-            ->whereNotNull('code')
-            ->groupBy('code')
-            ->having('count', '>', 1)
-            ->limit(10)
-            ->get();
-        $orderCodes=$orders_repeating->each(function ($order){
-            $code_repeating=$order['code'];
-            $orders_toCombine=Order::query()
-                ->where('code',$code_repeating)
-                ->orderByDesc('updated_at')
-                ->get();
-            $orderId_unique=(function()use($orders_toCombine){
-                $order_toLive=$orders_toCombine->first();
-                foreach($orders_toCombine as $key=>$order_toEliminate){
-                    if($key==0)continue;
-                    if(!$order_toLive['batch_id'])$order_toLive['batch_id']=$order_toEliminate['batch_id'];
-                    if(!$order_toLive['owner_id'])$order_toLive['owner_id']=$order_toEliminate['owner_id'];
-                    if(!$order_toLive['status'])$order_toLive['status']=$order_toEliminate['status'];
-                    if(!$order_toLive['created_at'])$order_toLive['created_at']=$order_toEliminate['created_at'];
-                    if(!$order_toLive['code'])$order_toLive['code']=$order_toEliminate['code'];
-                    if(!$order_toLive['shop_id'])$order_toLive['shop_id']=$order_toEliminate['shop_id'];
-                    if(!$order_toLive['owner_id'])$order_toLive['owner_id']=$order_toEliminate['owner_id'];
-                    if(!$order_toLive['client_code'])$order_toLive['client_code']=$order_toEliminate['client_code'];
-                    if(!$order_toLive['logistic_id'])$order_toLive['logistic_id']=$order_toEliminate['logistic_id'];
-                    if(!$order_toLive['consignee_name'])$order_toLive['consignee_name']=$order_toEliminate['consignee_name'];
-                    if(!$order_toLive['consignee_phone'])$order_toLive['consignee_phone']=$order_toEliminate['consignee_phone'];
-                    if(!$order_toLive['province'])$order_toLive['province']=$order_toEliminate['province'];
-                    if(!$order_toLive['city'])$order_toLive['city']=$order_toEliminate['city'];
-                    if(!$order_toLive['district'])$order_toLive['district']=$order_toEliminate['district'];
-                    if(!$order_toLive['address'])$order_toLive['address']=$order_toEliminate['address'];
-                    if(!$order_toLive['wms_status'])$order_toLive['wms_status']=$order_toEliminate['wms_status'];
-                    if(!$order_toLive['status'])$order_toLive['status']=$order_toEliminate['status'];
-                    if(!$order_toLive['warehouse_id'])$order_toLive['warehouse_id']=$order_toEliminate['warehouse_id'];
-                    if(!$order_toLive['wms_edittime'])$order_toLive['wms_edittime']=$order_toEliminate['wms_edittime'];
-                }
-                $order_toLive->save();
-                return $order_toLive['id'];
-            })();
-            $orderIds_toRemove=(function()use($orders_toCombine){
-                $orders_toCombine->shift();
-                return $orders_toCombine->map(function($order){return $order['id'];})->toArray();
-            })();
-//            $orderPackages_toChange=OrderPackage::query()->orWhere
-
-            Order::destroy($orderIds_toRemove);
-        });
 
-        dd(11);
+        ini_set('max_execution_time',2500);
+        ini_set('memory_limit','1526M');
+        for($i=0;true;$i++){
+            $orders_repeating=Order::query()
+                ->selectRaw('count(*) as count, code, id')
+                ->whereNotNull('code')
+                ->groupBy('code')
+                ->having('count', '>', 1)
+                ->limit(100)
+                ->get();
+            if($orders_repeating->count()==0)break;
+            $orders_repeating->each(function ($order){
+                $code_repeating=$order['code'];
+                $orders_toCombine=Order::query()
+                    ->where('code',$code_repeating)
+                    ->orderByDesc('updated_at')
+                    ->get();
+                $orderId_unique=(function()use($orders_toCombine){
+                    $order_toLive=$orders_toCombine->first();
+                    foreach($orders_toCombine as $key=>$order_toEliminate){
+                        if($key==0)continue;
+                        if(!$order_toLive['batch_id'])$order_toLive['batch_id']=$order_toEliminate['batch_id'];
+                        if(!$order_toLive['owner_id'])$order_toLive['owner_id']=$order_toEliminate['owner_id'];
+                        if(!$order_toLive['status'])$order_toLive['status']=$order_toEliminate['status'];
+                        if(!$order_toLive['created_at'])$order_toLive['created_at']=$order_toEliminate['created_at'];
+                        if(!$order_toLive['code'])$order_toLive['code']=$order_toEliminate['code'];
+                        if(!$order_toLive['shop_id'])$order_toLive['shop_id']=$order_toEliminate['shop_id'];
+                        if(!$order_toLive['owner_id'])$order_toLive['owner_id']=$order_toEliminate['owner_id'];
+                        if(!$order_toLive['client_code'])$order_toLive['client_code']=$order_toEliminate['client_code'];
+                        if(!$order_toLive['logistic_id'])$order_toLive['logistic_id']=$order_toEliminate['logistic_id'];
+                        if(!$order_toLive['consignee_name'])$order_toLive['consignee_name']=$order_toEliminate['consignee_name'];
+                        if(!$order_toLive['consignee_phone'])$order_toLive['consignee_phone']=$order_toEliminate['consignee_phone'];
+                        if(!$order_toLive['province'])$order_toLive['province']=$order_toEliminate['province'];
+                        if(!$order_toLive['city'])$order_toLive['city']=$order_toEliminate['city'];
+                        if(!$order_toLive['district'])$order_toLive['district']=$order_toEliminate['district'];
+                        if(!$order_toLive['address'])$order_toLive['address']=$order_toEliminate['address'];
+                        if(!$order_toLive['wms_status'])$order_toLive['wms_status']=$order_toEliminate['wms_status'];
+                        if(!$order_toLive['status'])$order_toLive['status']=$order_toEliminate['status'];
+                        if(!$order_toLive['warehouse_id'])$order_toLive['warehouse_id']=$order_toEliminate['warehouse_id'];
+                        if(!$order_toLive['wms_edittime'])$order_toLive['wms_edittime']=$order_toEliminate['wms_edittime'];
+                    }
+                    $order_toLive->save();
+                    return $order_toLive['id'];
+                })();
+                $orderIds_toRemove=(function()use($orders_toCombine){
+                    $orders_toCombine->shift();
+                    return $orders_toCombine->map(function($order){return $order['id'];});
+                })();
+                OrderPackage::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
+                OrderIssue::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
+                OrderCommodity::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
+                OrderBin::query()->whereIn('order_id',$orderIds_toRemove)->update(['order_id'=>$orderId_unique]);
+                Order::destroy($orderIds_toRemove);
+                app('LogService')->log(__METHOD__,__FUNCTION__,'orders_toCombine:'.json_encode($orderIds_toRemove).'|toBe OrderId: '.json_encode($orderId_unique));
+            });
+            app('LogService')->log(__METHOD__,__FUNCTION__,'orders_repeating:'.$orders_repeating->toJson());
+        }
+        echo $i;
     }
 
 }

+ 1 - 2
app/Http/Controllers/api/thirdPart/weight/PackageController.php

@@ -165,7 +165,6 @@ class PackageController extends Controller
 
     public function new_(Request $requestInitial){
         $request=[];
-        app('LogService')->log(__METHOD__,'cczdelme'.__FUNCTION__,json_encode($requestInitial->all()),null);
         foreach ($requestInitial->all() as $k=>$v){
             $request[strtolower($k)]=$v;
         }
@@ -177,7 +176,7 @@ class PackageController extends Controller
             return json_encode(["msg"=>$errors,"code"=>500,"data"=>null]);
         }
 
-        $id = $request['id']??'00C66186389';
+        $id = $request['id']??'无ID设备';
         $measuringMachine=MeasuringMachine::query()->firstOrCreate(['code'=> $id]);
         $measuringMachine->turnOn();
         $measuringMachine->turnOffInMinutes(30);

+ 1 - 1
app/OracleDOCASNHeader.php

@@ -26,7 +26,7 @@ class OracleDOCASNHeader extends Model
     public function asnDetails()
     {
         return $this->hasMany(OracleDOCASNDetail::class,'asnno','asnno')
-            ->select('asnno','asnlineno','customerid','sku','skudescrc','linestatus','lotatt08','lotatt05','expectedqty','addtime','edittime');
+            ->select('asnno','asnlineno','customerid','sku','skudescrc','linestatus','lotatt08','lotatt05','receivedqty','expectedqty','addtime','edittime');
     }
 
 

+ 2 - 1
app/Services/OracleDocAsnHerderService.php

@@ -21,7 +21,7 @@ Class OracleDocAsnHerderService
     public function getWmsAsnOnStartDateEdit($startDate)
     {
         if (!$startDate) return null;
-        return OracleDOCASNHeader::query()
+        $oracleDocAsnHerder= OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
@@ -29,6 +29,7 @@ Class OracleDocAsnHerderService
             ->where('EditTime', '>=', $startDate)
             ->whereColumn('EditTime', '<>', 'addTime')
             ->get();
+        return $oracleDocAsnHerder;
     }
 
 }

+ 4 - 1
app/Services/OrderIssueService.php

@@ -15,6 +15,7 @@ use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Validator;
+use Ramsey\Uuid\Uuid;
 
 class OrderIssueService
 {
@@ -435,7 +436,9 @@ class OrderIssueService
 
     public function createByLogisticNumber(array $arr)
     {
-        $order = Order::query()->create($arr);
+        $order = new Order($arr);
+        $order['code']='null_'.Uuid::uuid4();
+        $order->save();
         app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
         $orderIssue = OrderIssue::query()->create($arr);
         $orderIssue['order_id'] = $order['id'];

+ 20 - 16
app/Services/OrderService.php

@@ -470,22 +470,26 @@ class OrderService
         $wareHouse = Warehouse::query()->firstOrCreate(['code'=>$orderHeader->warehouseid],
             ['name'=>$orderHeader->warehouseid,'code'=>$orderHeader->warehouseid]);
 
-         $order =  Order::query()->create([
-            'warehouse_id'=> $wareHouse->id ?? '',
-            'code' => $orderHeader->orderno,
-            'owner_id' => $owner ? $owner->id : null,
-            'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
-            'created_at' => $orderHeader->addtime,
-            'logistic_id' => $logistics ? $logistics->id : null,
-            'shop_id' => $shop ? $shop->id : null,
-            'consignee_name' => $orderHeader->c_contact,
-            'consignee_phone' => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
-            'province' => $orderHeader->c_province,
-            'city' => $orderHeader->c_city,
-            'district' => $orderHeader->c_district,
-            'address' => $orderHeader->c_address1,
-            'client_code' => $orderHeader->soreference1,
-        ]);
+        try{
+            $order =  Order::query()->create([
+                'warehouse_id'=> $wareHouse->id ?? '',
+                'code' => $orderHeader->orderno,
+                'owner_id' => $owner ? $owner->id : null,
+                'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
+                'created_at' => $orderHeader->addtime,
+                'logistic_id' => $logistics ? $logistics->id : null,
+                'shop_id' => $shop ? $shop->id : null,
+                'consignee_name' => $orderHeader->c_contact,
+                'consignee_phone' => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
+                'province' => $orderHeader->c_province,
+                'city' => $orderHeader->c_city,
+                'district' => $orderHeader->c_district,
+                'address' => $orderHeader->c_address1,
+                'client_code' => $orderHeader->soreference1,
+            ]);
+        }catch (\Exception $e){
+            return $this->first(['code'=>$orderHeader->orderno]);
+        }
         app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order '.json_encode($order));
         return $order;
     }

+ 3 - 2
app/Services/RejectedBillService.php

@@ -70,6 +70,7 @@ Class RejectedBillService
         if ($updateCollect->isEmpty())return null;
         $logisticNumberReturn=$this->getLogisticNumberReturn($updateCollect);
         $rejectedBills=$this->getRejectedBills($logisticNumberReturn);
+        if ($rejectedBills->isEmpty())return null;
         $updateParams = [[
             'logistic_number_return','is_loaded','updated_at'
         ]];
@@ -95,7 +96,7 @@ Class RejectedBillService
                     'is_loaded' => 1,
                     'updated_at' =>$updated_at,
                 ];
-                unset($result);
+                $result=[];
             }
         }
         if(count($updateParams) > 1){
@@ -122,7 +123,7 @@ Class RejectedBillService
                 array_push($logisticNumberReturn,$data->asnreference3);
             }else{
                 preg_match("/[a-zA-Z]{0,5}\d{6,20}/",$data->notes, $result);
-                array_push($logisticNumberReturn,$result[0]);
+                if (count($result)>0)array_push($logisticNumberReturn,$result[0]);
                 $result=[];
             }
         }

+ 97 - 141
app/Services/StoreItemService.php

@@ -11,210 +11,166 @@ use Illuminate\Support\Facades\DB;
 
 Class StoreItemService
 {
-    public function insert(array $params){
-        return DB::table('store_items')->insert($params);
+    public function insert(array $params)
+    {
+        return StoreItems::query()->insert($params);
     }
 
     public function storeItemCreateByWms($asnHerders)
     {
-        if ($asnHerders->isEmpty())return null;
-        $asnDetails=$this->getAsnDetailsByAsnHerder($asnHerders);
+        if ($asnHerders->isEmpty()) return null;
+        $asnDetails = $this->getAsnDetailsByAsnHerder($asnHerders);
         $this->createStoreItem($asnDetails);
     }
 
     public function storeItemUpdateByWms($asnHerders)
     {
-        if ($asnHerders->isEmpty())return null;
-        $asnDetails=$this->getAsnDetailsByAsnHerder($asnHerders);
+        if ($asnHerders->isEmpty()) return null;
+        $asnDetails = $this->getAsnDetailsByAsnHerder($asnHerders);
         $this->updateStoreItem($asnDetails);
     }
-    public function getAsnDetailsByAsnHerder($asnHerders){
-        $asnDetails=collect();
-        $asnHerders->each(function ($asnHeader)use($asnDetails){
-            $asnHeader->asnDetails->each(function ($asnDetail)use($asnDetails){
+
+    public function getAsnDetailsByAsnHerder($asnHerders)
+    {
+        $asnDetails = collect();
+        $asnHerders->each(function ($asnHeader) use ($asnDetails) {
+            $asnHeader->asnDetails->each(function ($asnDetail) use ($asnDetails) {
                 $asnDetails->add($asnDetail);
             });
         });
         return $asnDetails;
     }
+
     public function createStoreItem($asnDetails)
     {
-        if ($asnDetails->isEmpty())return null;
-        $stores = Store::query()->whereIn('asn_code',array_unique(data_get($asnDetails,'*.asnno')))->get();
+        if ($asnDetails->isEmpty()) return null;
+        ini_set('memory_limit','512M');
+        $stores = Store::query()->whereIn('asn_code', array_unique(data_get($asnDetails, '*.asnno')))->get();
         $store_asn_code_map = [];
         foreach ($stores as $store) {
-            $store_asn_code_map[$store->asn_code]= $store;
+            $store_asn_code_map[$store->asn_code] = $store;
         }
-        $params=$this->getParamsByAsnDetails($asnDetails,$store_asn_code_map);
-        if(count($params)> 0){
-            $this->insertStore($params);
+        $params = $this->getParamsByAsnDetails($asnDetails, $store_asn_code_map);
+        if (count($params) > 0) {
+                $this->insertStoreItem($params);
         }
-
     }
-    public function getParamsByAsnDetails($asnDetails,$store_asn_code_map)
+
+    public function getParamsByAsnDetails($asnDetails, $store_asn_code_map)
     {
         /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService =  app(DataHandlerService::class);
-        $storeItems=$this->getByWms($asnDetails);
-        $storeItem_map =  $dataHandlerService->dataHeader(['store_asn_code','asn_line_code','sku'],$storeItems);
+        $dataHandlerService = app(DataHandlerService::class);
+        $storeItems = $this->getByWms($asnDetails);
+        $storeItem_map = $dataHandlerService->dataHeader(['store_asn_code', 'asn_line_code', 'sku'], $storeItems);
         $params = [];
         foreach ($asnDetails as $asnDetail) {
-            $storeItem =$dataHandlerService
-                ->getKeyValue(['store_asn_code'=>$asnDetail->asnno,'asn_line_code'=>$asnDetail->asnlineno,'sku'=>$asnDetail->sku],$storeItem_map);
-            if($storeItem ?? false)continue;
+            $storeItem = $dataHandlerService
+                ->getKeyValue(['store_asn_code' => $asnDetail->asnno, 'asn_line_code' => $asnDetail->asnlineno, 'sku' => $asnDetail->sku], $storeItem_map);
+            if ($storeItem ?? false) continue;
             $params[] = [
-                'store_id'=>$store_asn_code_map[$asnDetail->asnno]['id'],
+                'store_id' => $store_asn_code_map[$asnDetail->asnno]['id'],
                 'asn_line_code' => $asnDetail->asnlineno,
-                'name' =>$asnDetail->skudescrc,
-                'sku' =>$asnDetail->sku,
-                'barcode' =>$asnDetail->basSku?$asnDetail->basSku->alternate_sku1:'',
-                'amount' =>$asnDetail->expectedqty??0,
-                'quality' =>$asnDetail->qualityStatus?$asnDetail->qualityStatus->codename_c:'',
-                'status' => $asnDetail->lineStatus?$asnDetail->lineStatus->codename_c:'',
-                'created_at'=>$asnDetail->addtime??null,
-                'updated_at'=>$asnDetail->edittime??null,
+                'name' => $asnDetail->skudescrc,
+                'sku' => $asnDetail->sku,
+                'barcode' => $asnDetail->basSku ? $asnDetail->basSku->alternate_sku1 : '',
+                'amount' => $asnDetail->receivedqty ?? 0,
+                'quality' => $asnDetail->qualityStatus ? $asnDetail->qualityStatus->codename_c : '',
+                'status' => $asnDetail->lineStatus ? $asnDetail->lineStatus->codename_c : '',
+                'created_at' => $asnDetail->addtime ?? null,
+                'updated_at' => $asnDetail->edittime ?? null,
             ];
         }
         return $params;
     }
-    public function insertStore(array $params){
-        if(count($params) === 0) return [];
+
+    public function insertStoreItem(array $params)
+    {
+        if (count($params) === 0) return [];
         try {
             $this->insert($params);
-            LogService::log(__METHOD__,__FUNCTION__,'批量创建 store_item success'.count($params).json_encode($params));
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store_item success' . count($params) . json_encode($params));
         } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'批量创建 store_item error'.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
-        } finally{
-            return StoreItems::query()->whereIn('id',data_get($params,'*.id'))->get();
+            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store_item error' . json_encode($params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
         }
     }
-//    public function updateStoreItem($asnDetails)
-//    {
-//        if(!$asnDetails || $asnDetails->count() == 0){return null;}
-//        /** @var DataHandlerService $dataHandlerService */
-//        $dataHandlerService =  app(DataHandlerService::class);
-//        $storeItems=$this->getByWms($asnDetails);
-//        $storeItems_map =  $dataHandlerService->dataHeader(['store_asn_code','asn_line_code','sku'],$storeItems);
-//        /** @var StoreService $storeService */
-//        $storeService=app(StoreService::class);
-//        $stores=$storeService->getByWms($asnDetails);
-//        $stores_map =  $dataHandlerService->dataHeader(['asn_code'],$stores);
-//        $updateParams = [[
-//            'id','store_id','asn_line_code','name','sku','barcode','amount','quality','status','created_at','updated_at'
-//        ]];
-//        $updated_at=Carbon::now()->toDateTimeString();
-//        $delete_storeItems=[];
-//        foreach ($asnDetails as $asnDetail) {
-//            $store =$dataHandlerService->getKeyValue(['asn_code'=>$asnDetail->asnno],$stores_map);
-//            $storeItem =$dataHandlerService
-//                ->getKeyValue(['store_asn_code'=>$asnDetail->asnno,'asn_line_code'=>$asnDetail->asnlineno,'sku'=>$asnDetail->sku],$storeItems_map);
-//            if(!$storeItem){
-//                array_push($delete_storeItems,$asnDetail);
-//                continue;
-//            }
-//            if( $storeItem->store_id != $store->id ||
-//                $storeItem->asn_line_code!=$asnDetail->asnlineno ||
-//                $storeItem->name != $asnDetail->skudescrc ||
-//                $storeItem->sku != $asnDetail->sku||
-//                $storeItem->barcode !=$asnDetail->basSku->alternate_sku1||
-//                $storeItem->amount !=$asnDetail->expectedqty||
-//                $storeItem->quality !=$asnDetail->qualityStatus??$asnDetail->qualityStatus->codename_c||
-//                $storeItem->status !=$asnDetail->lineStatus??$asnDetail->lineStatus->codename_c||
-//                $storeItem->created_at !=$asnDetail->addtime||
-//                $storeItem->updated_at != $asnDetail->edittime){
-//                $updateParams[] = [
-//                    'id'=>$storeItem->id,
-//                    'store_id'=>$store->id,
-//                    'asn_line_code' => $asnDetail->asnlineno,
-//                    'name' =>$asnDetail->skudescrc,
-//                    'sku' =>$asnDetail->sku,
-//                    'barcode' =>$asnDetail->basSku?$asnDetail->basSku->alternate_sku1:'',
-//                    'amount' =>$asnDetail->expectedqty??0,
-//                    'quality' =>$asnDetail->qualityStatus?$asnDetail->qualityStatus->codename_c:'',
-//                    'status' => $asnDetail->lineStatus?$asnDetail->lineStatus->codename_c:'',
-//                    'created_at'=>$asnDetail->addtime??null,
-//                    'updated_at'=>$updated_at,
-//                ];
-//            }
-//        }
-//        if(count($updateParams) > 1){
-//            $this->batchUpdate($updateParams);
-//        }
-//
-//        if (count($asnDetails)<count($storeItems)){
-//                dd($delete_storeItems);
-//        }
-//        unset($updateParams,$asnDetails);
-//    }
+
     public function updateStoreItem($asnDetails)
     {
-        if(!$asnDetails || $asnDetails->count() == 0){return null;}
+        if (!$asnDetails || $asnDetails->count() == 0) {
+            return null;
+        }
         /** @var DataHandlerService $dataHandlerService */
-        $dataHandlerService =  app(DataHandlerService::class);
-        $storeItems=$this->getByWms($asnDetails);
-        $asnDetails_map =  $dataHandlerService->dataHeader(['asnno','asnlineno','sku'],$asnDetails);
+        $dataHandlerService = app(DataHandlerService::class);
+        $storeItems = $this->getByWms($asnDetails);
+        $asnDetails_map = $dataHandlerService->dataHeader(['asnno', 'asnlineno', 'sku'], $asnDetails);
         $updateParams = [[
-            'id','store_id','asn_line_code','name','sku','barcode','amount','quality','status','created_at','updated_at'
+            'id', 'store_id', 'asn_line_code', 'name', 'sku', 'barcode', 'amount', 'quality', 'status', 'created_at', 'updated_at'
         ]];
-        $updated_at=Carbon::now()->toDateTimeString();
-        $delete_storeItems=[];
+        $delete_storeItems = [];
         foreach ($storeItems as $storeItem) {
-            $asnDetail =$dataHandlerService
-                ->getKeyValue(['asnno'=>$storeItem->store_asn_code,'asnlineno'=>$storeItem->asn_line_code,'sku'=>$storeItem->sku],$asnDetails_map);
-            if(!$asnDetail){
-                array_push($delete_storeItems,$storeItem);
+            $asnDetail = $dataHandlerService
+                ->getKeyValue(['asnno' => $storeItem->store_asn_code, 'asnlineno' => $storeItem->asn_line_code, 'sku' => $storeItem->sku], $asnDetails_map);
+            if (!$asnDetail) {
+                array_push($delete_storeItems, $storeItem);
                 continue;
             }
-            if($storeItem->asn_line_code!=$asnDetail['asnlineno'] ||
+            if ($storeItem->asn_line_code != $asnDetail['asnlineno'] ||
                 $storeItem->name != $asnDetail['skudescrc'] ||
-                $storeItem->sku != $asnDetail['sku']||
-                $storeItem->barcode !=$asnDetail['basSku']['alternate_sku1']||
-                $storeItem->amount !=$asnDetail['expectedqty']||
-                $storeItem->quality !=$asnDetail['qualityStatus']??$asnDetail['qualityStatus']['codename_c']||
-                $storeItem->status !=$asnDetail['lineStatus']??$asnDetail['lineStatus']['codename_c']||
-                $storeItem->created_at !=$asnDetail['addtime']||
-                $storeItem->updated_at != $asnDetail['edittime']){
+                $storeItem->sku != $asnDetail['sku'] ||
+                $storeItem->barcode != $asnDetail['basSku']['alternate_sku1'] ||
+                $storeItem->amount != $asnDetail['receivedqty'] ||
+                $storeItem->quality != $asnDetail['qualityStatus'] ?? $asnDetail['qualityStatus']['codename_c'] ||
+                $storeItem->status != $asnDetail['lineStatus'] ?? $asnDetail['lineStatus']['codename_c'] ||
+                $storeItem->created_at != $asnDetail['addtime'] ||
+                $storeItem->updated_at != $asnDetail['edittime']) {
                 $updateParams[] = [
-                    'id'=>$storeItem->id,
-                    'store_id'=>$storeItem->store->id,
+                    'id' => $storeItem->id,
+                    'store_id' => $storeItem->store->id,
                     'asn_line_code' => $asnDetail['asnlineno'],
-                    'name' =>$asnDetail['skudescrc'],
-                    'sku' =>$asnDetail['sku'],
-                    'barcode' =>$asnDetail['basSku']?$asnDetail['basSku']['alternate_sku1']:'',
-                    'amount' =>$asnDetail['expectedqty']??0,
-                    'quality' =>$asnDetail['qualityStatus']?$asnDetail['qualityStatus']['codename_c']:'',
-                    'status' => $asnDetail['lineStatus']?$asnDetail['lineStatus']['codename_c']:'',
-                    'created_at'=>$asnDetail['addtime']??null,
-                    'updated_at'=>$updated_at,
+                    'name' => $asnDetail['skudescrc'],
+                    'sku' => $asnDetail['sku'],
+                    'barcode' => $asnDetail['basSku'] ? $asnDetail['basSku']['alternate_sku1'] : '',
+                    'amount' => $asnDetail['receivedqty'] ?? 0,
+                    'quality' => $asnDetail['qualityStatus'] ? $asnDetail['qualityStatus']['codename_c'] : '',
+                    'status' => $asnDetail['lineStatus'] ? $asnDetail['lineStatus']['codename_c'] : '',
+                    'created_at' => $asnDetail['addtime'] ?? null,
+                    'updated_at' => $asnDetail['edittime'],
                 ];
             }
         }
-        if(count($updateParams) > 1){
+        if (count($updateParams) > 1) {
             $this->batchUpdate($updateParams);
         }
-        if (count($delete_storeItems)>0) $this->deleteStoreItem($delete_storeItems);
-        unset($updateParams,$asnDetails,$delete_storeItems);
+        if (count($delete_storeItems) > 0) $this->deleteStoreItem($delete_storeItems);
+        unset($updateParams, $asnDetails, $delete_storeItems);
     }
-    public function batchUpdate($params){
-        return app(BatchUpdateService::class)->batchUpdate('store_items',$params);
+
+    public function batchUpdate($params)
+    {
+        return app(BatchUpdateService::class)->batchUpdate('store_items', $params);
     }
 
-    public function getByWms($asnDetails){
-        if(!$asnDetails){return null;}
-        return StoreItems::query()->whereHas('store',function($query)use($asnDetails){
-            $query->whereIn('asn_code',array_unique(data_get($asnDetails,'*.asnno')));
+    public function getByWms($asnDetails)
+    {
+        if (!$asnDetails) {
+            return null;
+        }
+        return StoreItems::query()->with('store')->whereHas('store', function ($query) use ($asnDetails) {
+            $query->whereIn('asn_code', array_unique(data_get($asnDetails, '*.asnno')));
         })->get();
     }
-    public function deleteStoreItem(array $delete_storeItems){
-        $storeItemIds=[];
-        foreach ($delete_storeItems as $delete_storeItem){
-            array_push($storeItemIds,$delete_storeItem->id);
+
+    public function deleteStoreItem(array $delete_storeItems)
+    {
+        $storeItemIds = [];
+        foreach ($delete_storeItems as $delete_storeItem) {
+            array_push($storeItemIds, $delete_storeItem->id);
         }
         try {
             StoreItems::query()->whereIn('id', $storeItemIds)->delete();
-            LogService::log(__METHOD__,__FUNCTION__,'删除多余StoreItems '.count($delete_storeItems).json_encode($delete_storeItems),null);
+            LogService::log(__METHOD__, __FUNCTION__, '删除多余StoreItems ' . count($delete_storeItems) . json_encode($delete_storeItems), null);
         } catch (\Exception $e) {
-            LogService::log(__METHOD__,__FUNCTION__,'删除多余StoreItems error'.count($delete_storeItems).json_encode($delete_storeItems).$e->getMessage().$e->getTraceAsString(),null);
+            LogService::log(__METHOD__, __FUNCTION__, '删除多余StoreItems error' . count($delete_storeItems) . json_encode($delete_storeItems) . $e->getMessage() . $e->getTraceAsString(), null);
         }
     }
 }

+ 28 - 7
app/Services/StoreService.php

@@ -4,12 +4,32 @@ namespace App\Services;
 
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
+use App\Services\common\QueryService;
 use App\Store;
 use Carbon\Carbon;
-use Doctrine\DBAL\Query\QueryBuilder;
+
 
 Class StoreService
 {
+    private function conditionQuery(array $params){
+        $stores=Store::query()->with(['storeItems.store','warehouse','owner'])->whereNotIn('stored_method',['快速入库','正常'])->orderBy('id','DESC');
+        $columnQueryRules=[
+            'asn_code' => ['like' => ''],
+            'created_at_start' => ['alias' => 'created_at' , 'startDate' => ' 00:00:00'],
+            'created_at_end' => ['alias' => 'created_at' , 'endDate' => ' 23:59:59'],
+            'owner_id' => ['multi' => ','],
+            'warehouse_id' => ['multi' => ','],
+            'status' => ['multi' => ','],
+            'stored_method' => ['multi' => ','],
+            'id' => ['multi' => ',']
+        ];
+        $stores = app(QueryService::class)->query($params,$stores,$columnQueryRules,'stores');
+        return $stores;
+    }
+    public function paginate(array $params){
+        return $this->conditionQuery($params)->paginate($params['paginate'] ?? 50);
+    }
+
     public function create(array $params)
     {
         return Store::query()->create($params);
@@ -25,8 +45,12 @@ Class StoreService
     {
         /** @var OracleDocAsnHerderService $oracleDocAsnHerderService */
         $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
+        var_dump('getWmsAsnOnStartDateCreate_start',Carbon::now());
         $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate($startDate);
+        var_dump('getWmsAsnOnStartDateCreate_end',Carbon::now());
+        var_dump('createStore_start',Carbon::now());
         $this->createStore($asnHerders);
+        var_dump('createStore_end',Carbon::now());
     }
 
     public function storeUpdateByWms($startDate)
@@ -54,6 +78,7 @@ Class StoreService
         foreach ($warehouses as $warehouse) {
             $warehouses_code_map[$warehouse->code] = $warehouse;
         }
+
         $params=$this->getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map);
         if(count($params)> 0){
             $this->insertStore($params);
@@ -64,9 +89,7 @@ Class StoreService
         /** @var RejectedBillService $rejectedBillService */
         $rejectedBillService=app(RejectedBillService::class);
         $rejectedBillService->syncLoadedStatusByAsnHerder($asnHerders);
-        $asn_nos = data_get($asnHerders,'*.asnno');
         unset($asnHerders,$owners_code_map,$warehouses_code_map);
-        return Store::query()->whereIn('asn_code',$asn_nos)->get();
     }
     public function getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map)
     {
@@ -100,8 +123,6 @@ Class StoreService
             LogService::log(__METHOD__,__FUNCTION__,'批量创建 store success'.count($params).json_encode($params));
         } catch (\Exception $e) {
             LogService::log(__METHOD__,__FUNCTION__,'批量创建 store error'.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
-        } finally{
-            return Store::query()->whereIn('asn_code',data_get($params,'*.asn_code'))->get();
         }
     }
 
@@ -119,7 +140,6 @@ Class StoreService
         $updateParams = [[
             'id','asn_code','warehouse_id','owner_id','stored_method','status','remark','updated_at'
         ]];
-        $updated_at=Carbon::now()->toDateTimeString();
         foreach ($asnHerders as $asnHerder) {
             $store =$dataHandlerService->getKeyValue(['asn_code'=>$asnHerder->asnno],$store_asn_code_map);
             if(!$store){continue;}
@@ -142,11 +162,12 @@ Class StoreService
                     'stored_method' =>$asnHerder->asnType?$asnHerder->asnType->codename_c:'',
                     'status' =>$asnHerder->asnStatus?$asnHerder->asnStatus->codename_c:'',
                     'remark' => $asnHerder->notes,
-                    'updated_at' =>$updated_at,
+                    'updated_at' =>$asnHerder->edittime,
                     ];
             }
         }
         if(count($updateParams) > 1) $this->batchUpdate($updateParams);
+        $this->createStore($asnHerders);
         /** @var StoreItemService $storeItemService */
         $storeItemService = app(StoreItemService::class);
         $storeItemService->storeItemUpdateByWms($asnHerders);

+ 12 - 12
app/Store.php

@@ -15,9 +15,9 @@ class Store extends Model
         'asn_code','warehouse_id','owner_id','stored_method','status','remark','deleted_at'
     ];
 
-    protected $appends=[
-        'owner_name','warehouse_name'
-    ];
+//    protected $appends=[
+//        'owner_name','warehouse_name'
+//    ];
 
     public function owner(){
         return $this->belongsTo('App\Owner','owner_id','id');
@@ -30,13 +30,13 @@ class Store extends Model
         return $this->hasMany('App\StoreItems','store_id','id');
 }
 
-    public function getOwnerNameAttribute()
-    {
-        return $this['owner']? $this['owner']['name']:null;
-    }
-
-    public function getWarehouseNameAttribute()
-    {
-        return $this['warehouse']?$this['warehouse']['name']:null;
-    }
+//    public function getOwnerNameAttribute()
+//    {
+//        return $this['owner']? $this['owner']['name']:null;
+//    }
+//
+//    public function getWarehouseNameAttribute()
+//    {
+//        return $this['warehouse']?$this['warehouse']['name']:null;
+//    }
 }

+ 4 - 7
app/UserWorkgroup.php

@@ -25,13 +25,10 @@ class UserWorkgroup extends Model
     public  function getTokenAttribute(){
         return md5($this['name'].Carbon::now()->format('Y-m-d'));
     }
-    public  function getIsNeedRemarkAttribute(){
-        if($this['signs']['mark'] ?? false){
-            return $this['signs']['mark'] == '是';
-        }else{
-            return false;
+    public  function getIsNeedRemarkAttribute()
+    {
+        if ($this['signs']['mark'] ?? false) {
+            return $this['signs']['mark'] == '是' ? true : false;
         }
-//        return $this['signs']['mark']=='是'? true:false;
     }
-
 }

+ 32 - 0
database/migrations/2020_11_13_100252_add_authorities.php

@@ -0,0 +1,32 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthorities extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Authority::query()->firstOrCreate(['name'=>'入库管理-入库','alias_name'=>'入库管理-入库']);
+        Authority::query()->firstOrCreate(['name'=>'入库管理-入库-查询','alias_name'=>'入库管理-入库-查询']);
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Authority::query()->where('name','入库管理-入库')->delete();
+        Authority::query()->where('name','入库管理-入库-查询')->delete();
+    }
+}

+ 34 - 0
database/migrations/2020_11_13_155436_change_inventory_accounts_status_column.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeInventoryAccountsStatusColumn extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        DB::statement("ALTER TABLE inventory_accounts MODIFY COLUMN status enum ('待盘点','盘点中','复盘中','已完成','已审核') default null");
+        Schema::table('inventory_accounts', function (Blueprint $table) {
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        DB::statement("ALTER TABLE inventory_accounts MODIFY COLUMN status enum ('待盘点','盘点中','复盘中','已完成') default null");
+        Schema::table('inventory_accounts', function (Blueprint $table) {
+        });
+    }
+}

BIN
public/images/QRCodeIMG/10.png


BIN
public/images/QRCodeIMG/5.png


+ 1 - 1
resources/views/inventory/stockInventory/inventoryMission.blade.php

@@ -1746,7 +1746,7 @@
                             delete inventoryMission.commodity;
                         });
                         let data = JSON.stringify(this.checkData);
-                        //excelExport(checkAllSign,data,url,this.sum,token);
+                        excelExport(checkAllSign,data,url,this.sum,token);
                     }
                 },
                 //盲收

+ 5 - 4
resources/views/inventory/stockInventory/mission.blade.php

@@ -48,7 +48,7 @@
                     </td>
                     <td>
                         @can('库存管理-盘点')
-                            <span class="btn  btn-sm btn-outline-info" @click="enterStockInventory(inventory.id)" v-if="inventory.status!='已完成'">盘点</span>
+                            <span class="btn  btn-sm btn-outline-info" @click="enterStockInventory(inventory.id)" v-if="inventory.status!='已完成'&&inventory.status!='已审核'">盘点</span>
                         @endcan
                         @can('库存管理-盘点-查看')
                             <a :href="'{{url('inventory/stockInventory/enterStockInventory')}}/'+inventory.id+'?listMode=true'"><button class="btn btn-sm btn-outline-dark">查看</button></a>
@@ -56,10 +56,10 @@
                     </td>
                     <td>
                         @can('库存管理-盘点-项目审核')
-                            <span v-if="inventory.auditor">已审核</span>
+                            <span v-if="inventory.auditor" class="text-success">已审核</span>
                             <span v-else class="btn  btn-sm btn-outline-dark" @click="inventoryChecked(inventory.id)">审核</span>
                         @else
-                            <span v-if="inventory.auditor">已审核</span>
+                            <span v-if="inventory.auditor" class="text-success">已审核</span>
                             <span v-else>未审核</span>
                         @endcan
                     </td>
@@ -84,7 +84,7 @@
                     <td>@{{ inventory.auditor }}</td>
                     <td class="text-muted">@{{ inventory.creator }}</td>
                     <td>
-                        <span v-if="inventory.status!='已完成'" class="btn  btn-sm btn-outline-danger" @click="deleteStockInventoryMission(inventory.id)">删</span>
+                        <span v-if="inventory.status!='已完成'&&inventory.status!='已审核'" class="btn  btn-sm btn-outline-danger" @click="deleteStockInventoryMission(inventory.id)">删</span>
                     </td>
                 </tr>
             </table>
@@ -316,6 +316,7 @@
                                 _this.inventoryAccounts.every(function (inventoryAccount,i) {
                                     if (inventoryAccount.id===id){
                                         inventoryAccount.auditor=response.data.data.user_auditor.name;
+                                        inventoryAccount.status=response.data.data.status;
                                         return false;
                                     }else {
                                         return true

+ 15 - 12
resources/views/personnel/laborReport/index.blade.php

@@ -5,7 +5,7 @@
 @section('content')
     @component('personnel.laborReport.menu')@endcomponent
 
-    <div class="d-none container-fluid" id="list">
+    <div class="d-none container-fluid modal-open" id="list">
         <div id="form_div"></div>
         <span class="dropdown">
                 <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget mt-1 mb-1" :class="[checkData.length>0?'btn-dark text-light':'']"
@@ -58,7 +58,7 @@
                         <span v-else-if="laborReport.user_workgroup_id" class="text-center"><b class="text-danger">组长未审核</b></span>
                     @endcan
                 </td>
-                <td class="text-muted">@{{laborReport.enter_number}}</td>
+                <td><span v-if="laborReport.thisRoundRecordWorkingTime">@{{laborReport.thisRoundRecordWorkingTime}}</span></td>
                 <td>@{{laborReport.userWorkGroupName}}</td>
                 <td >@{{laborReport.name}}</td>
                 <td class="text-muted">@{{laborReport.mobile_phone}}</td>
@@ -83,7 +83,7 @@
                 <td class="text-muted"><span v-if="laborReport.relax_time">@{{laborReport.relax_time}}</span></td>
                 {{--                        <td class="text-muted"><span v-if="laborReport.onlineDuration">@{{laborReport.onlineDuration}}</span></td>--}}
                 <td class="text-muted"><span v-if="laborReport.thisRecordOnlineTime">@{{laborReport.thisRecordOnlineTime}}</span></td>
-                <td><span v-if="laborReport.thisRoundRecordWorkingTime">@{{laborReport.thisRoundRecordWorkingTime}}</span></td>
+                <td class="text-muted">@{{laborReport.enter_number}}</td>
                 {{--                        <td><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>--}}
                 <td>
                     @can('人事管理-临时工报表-编辑备注')
@@ -127,7 +127,7 @@
                                      <span  v-else-if="laborReport.groupUserId&&!laborReport.is_exportGroup&&!laborReport.is_export&&!laborReport.has_group_verify_right"><b class="text-success">在组</b></span>
                                      <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</b>
                                     <b v-else-if="laborReport.is_export" class="text-black">已退场</b>
-                                <button v-else-if="laborReport.user_workgroup_id&&laborReport.has_group_verify_right" @click="groupClockAudit(laborReport.id,laborReport.userWorkgroupNeedRemark)" class="btn btn-lg btn-outline-primary" style="transform:scale(1.1)" >组长审核</button>
+                                <button v-else-if="laborReport.user_workgroup_id&&laborReport.has_group_verify_right" @click="groupClockAudit(laborReport.id,laborReport.userWorkgroupNeedRemark)" class="btn btn-lg btn-outline-primary"  style="transform:scale(1.1)" >组长审核</button>
 
                                                     </span>
                                                 @else
@@ -319,7 +319,7 @@
                         {name:'{{$laborCompany->id}}',value:'{{$laborCompany->name}}'},
                         @endforeach
                     ],
-                    relax_time:'',dateTime:'',selectedStyle:'',
+                    relax_time:'',dateTime:'',selectedStyle:'',laborReportId:null,
                     sum:{!! $laborReports->total() !!},
                 },
                 mounted:function(){
@@ -433,7 +433,7 @@
                             dom:$('#cloneCheckAll').removeClass('d-none'), neglect: true},
                         {name:'index',value: '序号', neglect: true},
                         {name:'operation',value: '操作', neglect: true},
-                        {name:'enter_number',value: '进厂编号', style:'background-color: rgb(241, 234, 190)'},
+                        {name:'thisRoundRecordWorkingTime',value:'本次工作时长', neglect: true},
                         {name:'userWorkGroupName',value: '小组', style:'background-color: rgb(241, 234, 190)'},
                         {name:'name',value: '临时工', style:'background-color: rgb(241, 234, 190)'},
                         {name:'mobile_phone',value: '电话', style:'background-color: rgb(241, 234, 190)'},
@@ -449,7 +449,7 @@
                         {name:'verifyPerson',value: '审核人'},
                         {name:'relax_time',value: '晚饭打卡(分)', neglect: true},
                         {name:'thisRecordOnlineTime',value:'在线时长', neglect: true},
-                        {name:'thisRecordWorkingTime',value:'本次工作时长', neglect: true},
+                        {name:'enter_number',value: '进厂编号', style:'background-color: rgb(241, 234, 190)'},
                         {name:'remark',value: '备注'},
                             @can('人事管理-临时工报表-删除')
                         {name:'remove',value: '操作'},
@@ -608,7 +608,7 @@
                             tempTip.show('审核失败!网络错误:'+err);
                         });
                     },
-                    ////组长打卡审核(特定组添加备注)
+                    //组长打卡审核(特定组添加备注)
                     addRemarkAndGroupClock(){
                         let _this=this;
                         let id = getSelectId();
@@ -649,8 +649,8 @@
                         let url='{{url("laborReport/groupClockAudit")}}';
                         let _this=this;
                         if (userWorkgroupNeedRemark){
-                            $('#remarkModal').modal('show');
                             selectId(id);
+                            $('#remarkModal').modal('show');
                             return;
                         }
                         axios.post(url,{id:id})
@@ -682,7 +682,8 @@
                     },
                     noDinner(){
                         let _this=this;
-                        let id = getSelectId();
+                        // let id = getSelectId();
+                        let id = _this.laborReportId;
                         let url='{{url("laborReport/groupExport")}}';
                         axios.post(url,{id:id})
                             .then(function (response) {
@@ -712,7 +713,8 @@
                     makeSureRelax_time(){
                         let url='{{url("laborReport/groupExportEnsure")}}';
                         let _this=this;
-                        let id = getSelectId();
+                        //let id = getSelectId();
+                        let id = _this.laborReportId;
                         axios.post(url,{id:id,relax_time:_this.relax_time})
                             .then(function (response) {
                                 if (!response.data.success){
@@ -752,8 +754,9 @@
                         const start = new Date(new Date(new Date().toLocaleDateString()).getTime()+19*60*60*1000);
                         if(!confirm("确定要临时工“"+name+"“退组吗?")){return}
                         if (new Date()>=start || new Date()>dateTime){
+                            _this.laborReportId=id;
                             $('#dinnerModal').modal('show');
-                            selectId(id);
+                            //selectId(id);
                             return;
                         }
                         let url='{{url("laborReport/groupExport")}}';

+ 2 - 2
resources/views/store/fast/index.blade.php

@@ -20,8 +20,8 @@
                     </td>
                     <td>@{{ i+1  }}</td>
                     <td class="text-muted">@{{store.asn_code}}</td>
-                    <td>@{{store.warehouse_name}}</td>
-                    <td class="text-muted">@{{store.owner_name}}</td>
+                    <td>@{{store.warehouse.name}}</td>
+                    <td class="text-muted">@{{store.owner.name}}</td>
                     <td class="text-muted">@{{store.stored_method}}</td>
                     <td class="text-muted">@{{store.status}}</td>
                     <td>@{{store.remark}}</td>

+ 223 - 0
resources/views/store/inStorage/index.blade.php

@@ -0,0 +1,223 @@
+@extends('layouts.app')
+@section('title')入库管理@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('store.menu')@endcomponent
+        @component('store.inStorage.menu')@endcomponent
+    </span>
+    <div class="d-none container-fluid" id="list">
+        <div id="form_div"></div>
+        <label for="all" class="d-none" id="cloneCheckAll">
+            <input id="all" type="checkbox" @click="checkAll($event)">全选
+        </label>
+        <table class="table table-sm text-nowrap table-bordered d-none" id="headerRoll"></table>
+        <table class="table table-striped table-sm text-nowrap table-hover" id="headerParent">
+            <tr id="header"></tr>
+            <tr v-for="(store,i) in stores" :id="'data-'+store.id">
+                <td>
+                    <input class="checkItem" type="checkbox" :value="store.id" v-model="checkData">
+                </td>
+{{--                <td v-if="store.store_items" class="text-muted"--}}
+{{--                    :rowspan="store.is_multi_row?2:''">--}}
+{{--                    <span>--}}
+{{--                                        <a href="#" v-if="store.store_items.length>0"--}}
+{{--                                           class="dropdown-toggle btn btn-sm btn-outline-info"--}}
+{{--                                           data-toggle="dropdown">--}}
+{{--                                            查看明细--}}
+{{--                                        </a>--}}
+{{--                                        <div--}}
+{{--                                            style="position: absolute;width:1050px;margin-left:-50px;background-color: white;max-height:175px ;overflow-y:auto"--}}
+{{--                                            class="small mt-0 dropdown-menu">--}}
+{{--                                            <table class="table table-sm table-striped table-bordered">--}}
+{{--                                                <tr class="text-center">--}}
+{{--                                                    <th>ASN单号</th>--}}
+{{--                                                    <th>行号</th>--}}
+{{--                                                    <th>商品名称</th>--}}
+{{--                                                    <th>商品编码</th>--}}
+{{--                                                    <th>商品条码</th>--}}
+{{--                                                     <th>数量</th>--}}
+{{--                                                     <th>质量</th>--}}
+{{--                                                     <th>状态</th>--}}
+{{--                                                     <th>创建时间</th>--}}
+{{--                                                </tr>--}}
+{{--                                                <tr v-for="storeItem in store.store_items" class="text-center">--}}
+{{--                                                    <td>@{{store.asn_code}}</td>--}}
+{{--                                                    <td>@{{ storeItem.asn_line_code }}</td>--}}
+{{--                                                    <td>@{{ storeItem.name }}</td>--}}
+{{--                                                    <td>@{{ storeItem.sku }}</td>--}}
+{{--                                                    <td>@{{ storeItem.barcode }}</td>--}}
+{{--                                                    <td>@{{ storeItem.amount }}</td>--}}
+{{--                                                    <td>@{{ storeItem.quality }}</td>--}}
+{{--                                                    <td>@{{ storeItem.status }}</td>--}}
+{{--                                                    <td>@{{ storeItem.created_at }}</td>--}}
+{{--                                                </tr>--}}
+{{--                                            </table>--}}
+{{--                                        </div>--}}
+{{--                                        </span>--}}
+{{--                </td>--}}
+                                <td>
+                                    <button class="btn btn-sm btn-outline-info" v-if="!store.isOpenStoreItem" @click="openStoreItems(store,i,$event);store.isOpenStoreItem=true">查看明细</button>
+                                    <button v-if="store.isOpenStoreItem"  @click="closeStoreItems();store.isOpenStoreItem=false" class="btn btn-sm btn-dark">收起明细</button>
+                                </td>
+                <td>@{{ i+1  }}</td>
+                <td >@{{store.asn_code}}</td>
+                <td class="text-muted">@{{store.warehouse.name}}</td>
+                <td >@{{store.owner.name}}</td>
+                <td >@{{store.stored_method}}</td>
+                <td >@{{store.status}}</td>
+                <td>@{{store.remark}}</td>
+                <td class="text-muted">@{{store.created_at}}</td>
+            </tr>
+                        <tr id="showStoreItem" v-show="store.store_items">
+                            <td colspan="2"></td>
+                            <td colspan="16">
+                                <table class="table-sm table-bordered table-condensed">
+                                    <tr>
+                                        <th>行号</th>
+                                        <th>商品名称</th>
+                                        <th>商品编码</th>
+                                        <th>商品条码</th>
+                                        <th>数量</th>
+                                        <th>质量</th>
+                                        <th>状态</th>
+                                        <th>创建时间</th>
+                                    </tr>
+                                    <tr v-for="storeItem in store.store_items">
+                                        <td>@{{ storeItem.asn_line_code }}</td>
+                                        <td>@{{ storeItem.name }}</td>
+                                        <td>@{{ storeItem.sku }}</td>
+                                        <td>@{{ storeItem.barcode }}</td>
+                                        <td>@{{ storeItem.amount }}</td>
+                                        <td>@{{ storeItem.quality }}</td>
+                                        <td>@{{ storeItem.status }}</td>
+                                        <td class="text-muted">@{{ storeItem.created_at }}</td>
+                                    </tr>
+                                </table>
+                            </td>
+                        </tr>
+        </table>
+        <div class="text-info h5 btn btn">{{$stores->count()}}/{{$stores->total()}}</div>
+        {{$stores->links()}}
+    </div>
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script>
+        let vue = new Vue({
+            el:'#list',
+            data:{
+                stores:[
+                    @foreach($stores as $store)
+                    {!! $store !!},
+                    @endforeach
+                ],
+                owners:[
+                        @foreach($owners as $owner)
+                    {name:'{{$owner->id}}',value:'{{$owner->name}}'},
+                    @endforeach
+                ],
+                warehouses:[
+                        @foreach($warehouses as $warehouse)
+                    {name:'{{$warehouse->id}}',value:'{{$warehouse->name}}'},
+                    @endforeach
+                ],
+                store:{},
+                checkData:[]
+            },
+            mounted:function(){
+                $(".tooltipTarget").tooltip({'trigger':'hover'});
+                $('#list').removeClass('d-none');
+                let _this = this;
+                let data=[
+                    [
+                        {name:'created_at_start',type:'dateTime',tip:'选择显示指定日期的起始时间'},
+                        {name:'owner_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的货主'],
+                            placeholder:['货主','定位或多选货主'],data:this.owners},
+                        {name:'warehouse_id',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的仓库'],
+                            placeholder:['仓库','定位或多选仓库'],data:this.warehouses},
+                    ],
+                    [
+                        {name:'created_at_end',type:'dateTime',tip:'选择显示指定日期的结束时间'},
+                        {name:'asn_code',type:'input',tip:'进场编号:支持15天内模糊搜索,15天外精确搜索',placeholder: 'ASN单号'},
+                        {name:'status',type:'select',placeholder: '订单状态',data:[{name:'完全收货',value:'完全收货'},{name:'部分收货',value:'部分收货'},
+                                {name:'已码盘',value:'已码盘'},{name:'订单创建',value:'订单创建'},{name:'ASN关闭',value:'ASN关闭'},{name:'等待释放',value:'等待释放'},{name:'收货取消',value:'收货取消'}]},
+                        {name:'stored_method',type:'select',placeholder: '入库类型',data:[{name:'采购入库',value:'采购入库'},{name:'笕尚退货入库单',value:'笕尚退货入库单'},
+                                {name:'笕尚进仓入库单',value:'笕尚进仓入库单'},{name:'笕尚移仓入库单',value:'笕尚移仓入库单'},{name:'笕尚调整入库单',value:'笕尚调整入库单'},
+                                {name:'B2B入库',value:'B2B入库'},{name:'换货入库',value:'换货入库'}, {name:'初始化库存',value:'初始化库存'},{name:'调拨入库',value:'调拨入库'},
+                                {name:'虚拟入库',value:'虚拟入库'}, {name:'退货入库',value:'退货入库'}, {name:'其他入库',value:'其他入库'},
+                            ]},
+                    ],
+                ];
+                this.form = new query({
+                    el:"#form_div",
+                    condition:data,
+                });
+                this.form.init();
+                let column = [
+                    {name:'cloneCheckAll',customization:true,type:'checkAll',column:'id',
+                        dom:$('#cloneCheckAll').removeClass('d-none'), neglect: true},
+                    {name:'',value: '操作', neglect: true},
+                    {name:'index',value: '序号', neglect: true},
+                    {name:'asn_code',value: 'ASN编号'},
+                    {name:'warehouse_name',value: '仓库'},
+                    {name:'owner_name',value: '货主'},
+                    {name:'stored_method',value: '入库类型'},
+                    {name:'status',value: '状态'},
+                    {name:'remark',value: '备注'},
+                    {name:'created_at',value: '生成时间'},
+                ];
+                setTimeout(function () {
+                    let header = new Header({
+                        el: "#header",
+                        column: column,
+                        data: _this.stores,
+                        restorationColumn: 'id',
+                        vue:vue,
+                    });
+                    header.init();
+                },0);
+            },
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.stores.length){
+                            document.querySelector('#all').checked = true;
+                            document.querySelector('#all_temp').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
+                            document.querySelector('#all_temp').checked = false;
+                        }
+                    },
+                    deep:true
+                }
+            },
+            methods:{
+                openStoreItems(store,i,e){
+                    let _this=this;
+                    let id=store.id;
+                    _this.store=store;
+                    let showStoreItem=$('#showStoreItem');
+                    $("#data-" + id).after(showStoreItem);
+                },
+                closeStoreItems(){
+                    let _this=this;
+                    _this.store={};
+                },
+                checkAll(e){
+                    if (e.target.checked){
+                        this.stores.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el.id) == '-1'){
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+            }
+        });
+    </script>
+@endsection

+ 12 - 0
resources/views/store/inStorage/menu.blade.php

@@ -0,0 +1,12 @@
+<div id="nav2">
+    <div class="container-fluid nav3">
+        <div class="card menu-third" >
+            <ul class="nav nav-pills">
+                @can('入库管理-入库-查询')
+                    <li class="nav-item">
+                        <a class="nav-link" href="{{url('store/inStorage/index')}}" :class="{active:isActive('index',3)}">查询</a>
+                    </li> @endcan
+            </ul>
+        </div>
+    </div>
+</div>

+ 111 - 0
resources/views/store/inStorage/storeItem.blade.php

@@ -0,0 +1,111 @@
+@extends('layouts.app')
+@section('title')入库管理@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('store.menu')@endcomponent
+        @component('store.fast.menu')@endcomponent
+    </span>
+    <div class="d-none" id="item">
+        <div class="container-fluid">
+            <label for="all" class="d-none" id="cloneCheckAll">
+                <input id="all" type="checkbox" @click="checkAll($event)">全选
+            </label>
+            <table class="table table-sm text-nowrap table-bordered d-none" id="headerRoll"></table>
+            <table class="table table-striped table-sm text-nowrap table-hover" id="headerParent">
+                <tr id="header"></tr>
+                <tr v-for="(storeItem,i) in storeItems">
+                    <td>
+                        <input class="checkItem" type="checkbox" :value="storeItem.id" v-model="checkData">
+                    </td>
+                    <td>@{{ i+1  }}</td>
+                    <td>@{{storeItem.store_asn_code}}</td>
+                    <td>@{{storeItem.asn_line_code}}</td>
+                    <td class="text-muted">@{{storeItem.name}}</td>
+                    <td class="text-muted">@{{storeItem.sku}}</td>
+                    <td class="text-muted">@{{storeItem.barcode}}</td>
+                    <td>@{{storeItem.depository_name}}</td>
+                    <td class="text-muted">@{{storeItem.amount}}</td>
+                    <td class="text-muted">@{{storeItem.quality}}</td>
+                    <td class="text-muted">@{{storeItem.status}}</td>
+                    <td class="text-muted">@{{storeItem.created_at}}</td>
+                </tr>
+            </table>
+            <div class="text-info h5 btn btn">{{$storeItems->count()}}/{{$storeItems->total()}}</div>
+            {{$storeItems->links()}}
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script>
+        let vue = new Vue({
+            el:'#item',
+            data:{
+                storeItems:[
+                @foreach($storeItems as $storeItem)
+                {!! $storeItem !!},
+                @endforeach
+                ],
+                checkData:[]
+            },
+            mounted:function(){
+                $('#item').removeClass('d-none');
+                let _this=this;
+                let column = [
+                    {name:'cloneCheckAll',customization:true,type:'checkAll',column:'id',
+                        dom:$('#cloneCheckAll').removeClass('d-none'), neglect: true},
+                    {name:'index',value: '序号', neglect: true},
+                    {name:'store_asn_code',value: 'ASN编号'},
+                    {name:'asn_line_code',value: 'ASN行号'},
+                    {name:'name',value: '产品名', class:'text-muted'},
+                    {name:'sku',value: 'SKU', class:'text-muted'},
+                    {name:'barcode',value: '条码', class:'text-muted'},
+                    {name:'depository_name',value: '属性仓'},
+                    {name:'amount',value: '总计', class:'text-muted'},
+                    {name:'quality',value: '质量', class:'text-muted'},
+                    {name:'status',value: '状态', class:'text-muted'},
+                    {name:'created_at',value: '创建时间', class:'text-muted'},
+                ];
+                setTimeout(function () {
+                    let header = new Header({
+                        el: "#header",
+                        column: column,
+                        data: _this.storeItems,
+                        restorationColumn: 'id',
+                        vue:vue,
+                    });
+                    header.init();
+                },0);
+            },
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.storeItems.length){
+                            document.querySelector('#all').checked = true;
+                            document.querySelector('#all_temp').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
+                            document.querySelector('#all_temp').checked = false;
+                        }
+                    },
+                    deep:true
+                }
+            },
+            methods:{
+                checkAll(e){
+                    if (e.target.checked){
+                        this.storeItems.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el.id) == '-1'){
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+            }
+        });
+    </script>
+@endsection

+ 5 - 1
resources/views/store/menu.blade.php

@@ -2,7 +2,11 @@
 <div class="container-fluid nav2" id="nav2">
     <div class="card">
         <ul class="nav nav-pills">
-            @can('入库管理-盘收一体')
+            @can('入库管理-入库')
+                <li class="nav-item">
+                    <a class="nav-link"  href="{{url('store/inStorage/index')}}" :class="{active:isActive('inStorage',2)}">入库</a>
+                </li> @endcan
+                @can('入库管理-盘收一体')
                 <li class="nav-item">
                     <a class="nav-link"  href="{{url('store/checkingReceive/mission')}}" :class="{active:isActive('checkingReceive',2)}">盘收一体</a>
                 </li> @endcan

+ 3 - 0
routes/web.php

@@ -248,6 +248,9 @@ Route::resource('package','PackageController');
 
 /** 入库 */
 Route::group(['prefix'=>'store'],function(){
+    Route::group(['prefix'=>'inStorage'],function() {
+        Route::get('index','StoreController@storage');
+    });
     Route::group(['prefix'=>'fast'],function() {
         Route::resource('storeItem','StoreItemsController');
     });

+ 0 - 6
serves/excelExportGo/api/controller/controller.go

@@ -5,10 +5,8 @@ import (
     "bswas/orm"
     "bswas/utilities"
     "encoding/json"
-    "fmt"
     "net/http"
     "strconv"
-    "time"
 )
 
 func Export(w http.ResponseWriter,req *http.Request)  {
@@ -130,8 +128,6 @@ func selectModule(params map[string]string) (row []interface{}, list [][]interfa
 		}
 		row, list = LaborReportFormat(data)
 	case "orderIssue":
-        t := time.Now()
-        fmt.Println(t.Format("2006-01-02 15:04:05"))
 		sqlList := make(map[string]string)
 		err := json.Unmarshal([]byte(params["sqlList"]), &sqlList)
 		if err != nil {
@@ -183,8 +179,6 @@ func selectModule(params map[string]string) (row []interface{}, list [][]interfa
 			"A","B","C","D","E","F","G","H","I","J","K","L",
 			"U","Y","Z","AA","AF","AG","AH","AI","AJ","AK",
 		}
-        t = time.Now()
-        fmt.Println(t.Format("2006-01-02 15:04:05"))
 	case "inventoryAccountMission":
 		err := json.Unmarshal([]byte(params["data"]), &data)
 		if err != nil {

+ 19 - 0
serves/excelExportGo/logs/2020-11-16.log

@@ -0,0 +1,19 @@
+
+[ERROR]   14:11:42
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:12:02
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:13:02
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:13:25
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:14:43
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:21:56
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:23:00
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:29:17
+   /api/controller/controller.go:56  JSON解析失败!
+[ERROR]   14:42:54
+   /api/controller/controller.go:56  JSON解析失败!

+ 5 - 4
tests/Services/OracleDocAsnHeaderService/getWmsAsnOnStartDateCreateOrEditTest.php

@@ -15,21 +15,22 @@ class getWmsAsnOnStartDateCreateOrEditTest extends TestCase
     public $startDate;
     public  function setUp(): void
     {
-        $this->service  = app(OracleDocAsnHerderService::class);
-        $this->startDate=Carbon::parse('2020-10-22 00:00:00')->subDays(1)->format('Y-m-d H:i:s');
         parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service  = app(OracleDocAsnHerderService::class);
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $this->startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
     }
 
     public function testGetWmsAsnOnStartDateCreate(){
         $asnHerders=$this->service->getWmsAsnOnStartDateCreate($this->startDate);
-        $this->assertNotEmpty($asnHerders);
+        if ($asnHerders) $this->assertNotEmpty($asnHerders);
         $this->startDate=null;
         $asnHerders=$this->service->getWmsAsnOnStartDateCreate($this->startDate);
         $this->assertNull($asnHerders);
     }
     public function testGetWmsAsnOnStartDateEdit(){
         $asnHerders=$this->service->getWmsAsnOnStartDateEdit($this->startDate);
-        $this->assertNotEmpty($asnHerders);
+        if ($asnHerders) $this->assertNotEmpty($asnHerders);
         $this->startDate=null;
         $asnHerders=$this->service->getWmsAsnOnStartDateEdit($this->startDate);
         $this->assertNull($asnHerders);

+ 62 - 0
tests/Services/RejectedBillService/GetLogisticNumberTest.php

@@ -0,0 +1,62 @@
+<?php
+
+
+namespace Tests\Services\RejectedBillService;
+
+
+use App\OracleDOCASNHeader;
+use App\Services\OwnerService;
+use App\Services\RejectedBillService;
+use App\Services\StoreItemService;
+use App\Services\StoreService;
+use App\Services\WarehouseService;
+use App\Store;
+use Carbon\Carbon;
+use Tests\TestCase;
+
+class GetLogisticNumberTest extends TestCase
+{
+    /**
+     * @var StoreService $service
+     * @var OwnerService $ownerService
+     * @var WarehouseService $warehouseService
+     *
+     */
+    public $service;
+    public $asnHeaders;
+    public $asnHeadersEdit;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
+        $this->service=app(RejectedBillService::class);
+        $this->asnHeaders=OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus','basSku']);
+            }])
+            ->where('addTime', '>=', $startDate)
+            ->get();
+        $this->asnHeadersEdit=OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus','basSku']);
+            }])
+            ->where('EditTime', '>=', $startDate)
+            ->whereColumn('EditTime', '<>', 'addTime')
+            ->get();
+    }
+    public function testGetLogisticNumber(){
+        if (empty($this->asnHeaders))return null;
+        $addUpdateCollect=$this->service->getUpdateCollect($this->asnHeaders);
+        if ($addUpdateCollect){
+            $addLogisticNumber=$this->service->getLogisticNumberReturn($addUpdateCollect);
+            $this->assertNotEmpty($addLogisticNumber);
+        }
+        if (empty($this->asnHeadersEdit))return null;
+        $editUpdateCollect=$this->service->getUpdateCollect($this->asnHeadersEdit);
+        if ($editUpdateCollect){
+            $editLogisticNumber=$this->service->getLogisticNumberReturn($editUpdateCollect);
+            $this->assertNotEmpty($editLogisticNumber);
+        }
+    }
+}

+ 64 - 0
tests/Services/RejectedBillService/GetUpdateCollectTest.php

@@ -0,0 +1,64 @@
+<?php
+
+
+namespace Tests\Services\RejectedBillService;
+
+
+use App\OracleDOCASNHeader;
+use App\Services\OwnerService;
+use App\Services\RejectedBillService;
+use App\Services\StoreItemService;
+use App\Services\StoreService;
+use App\Services\WarehouseService;
+use App\Store;
+use Carbon\Carbon;
+use Tests\TestCase;
+
+class GetUpdateCollectTest extends TestCase
+{
+    /**
+     * @var StoreService $service
+     * @var OwnerService $ownerService
+     * @var WarehouseService $warehouseService
+     *
+     */
+    public $service;
+    public $asnHeaders;
+    public $asnHeadersEdit;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
+        $this->service=app(RejectedBillService::class);
+        $this->asnHeaders=OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus','basSku']);
+            }])
+            ->where('addTime', '>=', $startDate)
+            ->get();
+        $this->asnHeadersEdit=OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus','basSku']);
+            }])
+            ->where('EditTime', '>=', $startDate)
+            ->whereColumn('EditTime', '<>', 'addTime')
+            ->get();
+    }
+    public function testGetUpdateCollect(){
+        if (empty($this->asnHeaders))return null;
+        $addUpdateCollect=$this->service->getUpdateCollect($this->asnHeaders);
+        if ($addUpdateCollect){
+            $this->assertNotEmpty($addUpdateCollect);
+        }else{
+            $this->assertEmpty($addUpdateCollect);
+        }
+        if (empty($this->asnHeadersEdit))return null;
+        $editUpdateCollect=$this->service->getUpdateCollect($this->asnHeadersEdit);
+        if ($editUpdateCollect){
+            $this->assertNotEmpty($editUpdateCollect);
+        }else{
+            $this->assertEmpty($editUpdateCollect);
+        }
+    }
+}

+ 4 - 2
tests/Services/RejectedBillService/SyncLoadedStatusByAsnHeaderTest.php

@@ -27,18 +27,20 @@ class SyncLoadedStatusByAsnHeaderTest extends TestCase
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->service=app(StoreItemService::class);
         $this->asnHeaders=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('addTime', '>=', Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('addTime', '>=', $startDate)
             ->get();
         $this->asnHeadersEdit=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('EditTime', '>=',  Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('EditTime', '>=', $startDate)
             ->whereColumn('EditTime', '<>', 'addTime')
             ->get();
     }

+ 5 - 2
tests/Services/StoreItemService/GetAsnDetailsByAsnHerderTest.php

@@ -27,18 +27,20 @@ class GetAsnDetailsByAsnHerderTest extends TestCase
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->service=app(StoreItemService::class);
         $this->asnHeaders=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('addTime', '>=', Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('addTime', '>=', $startDate)
             ->get();
         $this->asnHeadersEdit=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('EditTime', '>=',  Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('EditTime', '>=',  $startDate)
             ->whereColumn('EditTime', '<>', 'addTime')
             ->get();
     }
@@ -46,6 +48,7 @@ class GetAsnDetailsByAsnHerderTest extends TestCase
         if (empty($this->asnHeaders))return null;
         $asnDetails=$this->service->getAsnDetailsByAsnHerder($this->asnHeaders);
         $this->assertNotEmpty($asnDetails);
+        if (empty($this->asnDetailsEdit))return null;
         $asnDetailsEdit=$this->service->getAsnDetailsByAsnHerder($this->asnHeadersEdit);
         $this->assertNotEmpty($asnDetailsEdit);
     }

+ 3 - 1
tests/Services/StoreItemService/GetByWmsTest.php

@@ -26,12 +26,14 @@ class GetByWmsTest extends TestCase
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->service=app(StoreItemService::class);
         $this->asnHeaders=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('addTime', '>=', Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('addTime', '>=',$startDate)
             ->get();
     }
     public function testGetParamsByAsnHeader()

+ 3 - 1
tests/Services/StoreItemService/GetParamsByAsnDetailsTest.php

@@ -27,11 +27,13 @@ class GetParamsByAsnDetailsTest extends TestCase
     {
         parent::setUp(); // TODO: Change the autogenerated stub
         $this->service=app(StoreItemService::class);
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->asnHeaders=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('addTime', '>=', Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('addTime', '>=', $startDate)
             ->get();
     }
     public function testGetParamsByAsnHeader()

+ 3 - 2
tests/Services/StoreService/AsnSyncTest.php

@@ -35,9 +35,10 @@ class AsnSyncTest extends TestCase
 //                $startDate = $syncStartDate;
 //            }
 //        }
-        //$startDate=Carbon::parse('2020-10-22 00:00:00')->subDays(1)->format('Y-m-d H:i:s');
+        $startDate=Carbon::parse('2020-11-11 23:59:59')->subSeconds(65)->format('Y-m-d H:i:s');
+//        $startDate=Carbon::parse('2020-10-22 00:00:00')->subDays(1)->format('Y-m-d H:i:s');
 //        app('LogService')->log(__METHOD__,"start".__FUNCTION__,Carbon::now());
-        //app(StoreService::class)->syncWmsAsnData($startDate);
+        app(StoreService::class)->syncWmsAsnData($startDate);
 //        app('LogService')->log(__METHOD__,"end".__FUNCTION__,Carbon::now());
         //$asnHeaders=app(OracleDocAsnHerderService::class)->getWmsAsnOnStartDateCreate($startDate);
         //dd($asnHeaders);

+ 3 - 1
tests/Services/StoreService/CreateStoreTest.php

@@ -19,12 +19,14 @@ class CreateStoreTest extends TestCase
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->service=app(StoreService::class);
         $this->asnHeaders=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('addTime', '>=', Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('addTime', '>=', $startDate)
             ->get();
     }
     public function testCreateStore(){

+ 3 - 1
tests/Services/StoreService/GetParamsByAsnHeaderTest.php

@@ -27,6 +27,8 @@ class GetParamsByAsnHeaderTest extends TestCase
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->service=app(StoreService::class);
         $this->ownerService=app(OwnerService::class);
         $this->warehouseService=app(WarehouseService::class);
@@ -34,7 +36,7 @@ class GetParamsByAsnHeaderTest extends TestCase
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
                 $query->with(['lineStatus', 'qualityStatus','basSku']);
             }])
-            ->where('addTime', '>=', Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s'))
+            ->where('addTime', '>=', $startDate)
             ->get();
     }
     public function testGetParamsByAsnHeader(){

+ 2 - 1
tests/Services/StoreService/UpdateStoreTest.php

@@ -19,7 +19,8 @@ class UpdateStoreTest extends TestCase
     public function setUp(): void
     {
         parent::setUp(); // TODO: Change the autogenerated stub
-        $startDate=Carbon::parse('2020-10-21 00:00:00')->format('Y-m-d H:i:s');
+        $dataInterval = intval(data_get(config('sync'), 'asn_sync.interval')) * 60 + 5;
+        $startDate = \Illuminate\Support\Carbon::now()->subSeconds($dataInterval);
         $this->service=app(StoreService::class);
         $this->asnHeaders=OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {