Quellcode durchsuchen

称重播报 拦截订单

ajun vor 4 Jahren
Ursprung
Commit
31bf250592

+ 10 - 17
app/Http/Controllers/MeasureMonitorController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\MeasuringMachine;
 use App\OrderPackage;
+use App\Services\MeasureMonitorService;
 use Illuminate\Http\Request;
 require_once '../app/library/baidu-api-speech/AipSpeech.php';
 class MeasureMonitorController extends Controller
@@ -36,24 +37,16 @@ class MeasureMonitorController extends Controller
         return '';
     }
 
+    /** 获取快递面单的语音播报 */
+    public function speech(Request $request,MeasureMonitorService $service): array
+    {
 
-    public function speech(Request $request){
-        $logistic=$request->input('logistic');
-        if (!$logistic)$logistic='空';
-        if (file_exists("storage/".$logistic.'.mp3')){
-            return "/storage/".$logistic.'.mp3';
-        }
-        $client=new \AipSpeech(config('api.baidu.speech.APP_ID'),config('api.baidu.speech.API_KEY'),config('api.baidu.speech.SECRET_KEY'));
-        $client->setConnectionTimeoutInMillis('180000');
-        $client->setSocketTimeoutInMillis('180000');
-
-        $result = $client->synthesis($logistic, 'zh', 1, array(
-            'vol' => 15,
-        ));
-        // 识别正确返回语音二进制 错误则返回json 参照下面错误码
-        if(!is_array($result)){
-            file_put_contents('storage/'.$logistic.'.mp3', $result);
+        if ( app('OrderIssueService')->isExists($request['logistic_number'])){
+            return $service->getMp3Audio('拦截订单');
         }
-        return "/storage/".$logistic.'.mp3';
+        return $service->getMp3Audio($request->input('logistic'));
+
     }
+
+
 }

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -168,6 +168,7 @@ use App\Services\RequirementUserService;
 use App\Services\WorkOrderService;
 use App\Services\WorkOrderTypeService;
 use App\Services\OrderPackageRemarkService;
+use App\Services\MeasureMonitorService;
 
 class AppServiceProvider extends ServiceProvider
 {
@@ -284,6 +285,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('LogisticZopService', LogisticZopService::class);
         app()->singleton('MaterialBoxModelService',MaterialBoxModelService::class);
         app()->singleton('MaterialBoxService', MaterialBoxService::class);
+        app()->singleton('MeasureMonitorService',MeasureMonitorService::class);
         app()->singleton('MenuService',MenuService::class);
         app()->singleton('NewOrderCountingRecordService',NewOrderCountingRecordService::class);
         app()->singleton('OracleActAllocationDetailService', OracleActAllocationDetailService::class);

+ 35 - 0
app/Services/MeasureMonitorService.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+
+require_once '../app/library/baidu-api-speech/AipSpeech.php';
+
+class MeasureMonitorService
+{
+    use ServiceAppAop;
+
+    public function getMp3Audio($content): array
+    {
+        if (!$content)$content='空';
+        if (file_exists("storage/".$content.'.mp3')){
+            return ['success' => true,'data' =>['name'=>$content,'path' =>"/storage/".$content.'.mp3'] ];
+        }
+
+        $client=new \AipSpeech(config('api.baidu.speech.APP_ID'),config('api.baidu.speech.API_KEY'),config('api.baidu.speech.SECRET_KEY'));
+        $client->setConnectionTimeoutInMillis('180000');
+        $client->setSocketTimeoutInMillis('180000');
+
+        $result = $client->synthesis($content, 'zh', 1, array(
+            'vol' => 15,
+        ));
+
+        if(!is_array($result)){
+            file_put_contents('storage/'.$content.'.mp3', $result);
+        }
+
+        return  ['success' => true,'data' =>['name'=>$content,'path' =>"/storage/".$content.'.mp3'] ];
+    }
+
+}

+ 13 - 0
app/Services/OrderIssueService.php

@@ -428,4 +428,17 @@ class OrderIssueService
             $orderIssue->update($updateParams);
         });
     }
+
+    /**
+     * 快递单对应的问题件是否存在
+     * @param $logistic_number
+     * @return bool
+     */
+    public function isExists($logistic_number): bool
+    {
+        $order_package_query = OrderPackage::query()->select('order_id')->whereIn('logistic_number',[$logistic_number]);
+        $order_issue_type_query = OrderIssueType::query()->select('id')->where('name' ,'拦截');
+        return OrderIssue::query()->whereIn('order_id',$order_package_query)->whereIn('order_issue_type_id',$order_issue_type_query)->count() ;
+    }
 }
+

+ 1 - 1
app/library/baidu-api-speech/lib/2a7552bdd1b678c303ad53645baeafce

@@ -1 +1 @@
-{"refresh_token":"25.7e4748217e997c84c2402b9b24adb134.315360000.1936752238.282335-18688250","expires_in":2592000,"session_key":"9mzdCPblW0XXeNGCMqTv\/JHlyb1R+CCFsPtDR+I+pkvO3Wt6R95mYM6B\/czx+j6XbwA+xuH79EnEt1k9LyvlecbmLoyo3A==","access_token":"24.32855024de5bed138fec0c12a1dd166d.2592000.1623984238.282335-18688250","scope":"brain_asr_async brain_speech_realtime audio_voice_assistant_get brain_enhanced_asr audio_tts_post public brain_all_scope picchain_test_picchain_api_scope wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-classify_flower lpq_\u5f00\u653e cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base smartapp_mapp_dev_manage iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_recapi fake_face_detect_\u5f00\u653eScope vis-ocr_\u865a\u62df\u4eba\u7269\u52a9\u7406 idl-video_\u865a\u62df\u4eba\u7269\u52a9\u7406 smartapp_component smartapp_search_plugin avatar_video_test","session_secret":"a8e2a31ba3a17b7c3f30efa29600b809","time":1621392238,"is_cloud_user":false}
+{"refresh_token":"25.795dad640f8af76864554c1c5afb8926.315360000.1945136504.282335-18688250","expires_in":2592000,"session_key":"9mzdX+3tcFZOpclBI6LTZrgxalCMs8nwU+QbwhRD2ex+wA6nIpZQQG7UR3cJNloHVeLBAU+JTC6Chj0iLy1LTU25Zb\/BBA==","access_token":"24.d799fe5d40a04d715a4abe85bf739e5e.2592000.1632368504.282335-18688250","scope":"brain_asr_async brain_speech_realtime audio_voice_assistant_get brain_enhanced_asr audio_tts_post public brain_all_scope picchain_test_picchain_api_scope wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-classify_flower lpq_\u5f00\u653e cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base smartapp_mapp_dev_manage iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_recapi fake_face_detect_\u5f00\u653eScope vis-ocr_\u865a\u62df\u4eba\u7269\u52a9\u7406 idl-video_\u865a\u62df\u4eba\u7269\u52a9\u7406 smartapp_component smartapp_search_plugin avatar_video_test","session_secret":"71dcb07b69c06e01063930662a5fc2a6","time":1629776504,"is_cloud_user":false}

+ 76 - 60
resources/views/package/measureMonitor/index.blade.php

@@ -62,6 +62,7 @@
                     </div>
                 </div>
             </section>
+
         </div>
     </div>
 @endsection
@@ -102,50 +103,38 @@
                     let audioTag=$('<audio id="audio'+i+'" src="" autoplay></audio>');
                     body.append(audioTag);
                 }
-                let _this=this;
-                _this.measuringMachines.forEach(function(machine){
-                    _this.measuringMachinesIndex[machine.name]=machine;
-                });
 
+
+                this.measuringMachines.forEach((machine)=>{
+                    this.measuringMachinesIndex[machine.name] = machine;
+                })
                 initEcho();
-                Echo.channel('{{$laravelEchoPrefix}}package').listen('WeighedEvent',(e)=>{
-                    let package=e.package;
-                    let _this=this;
-                    let audio=document.getElementById("audio"+_this.currentAudioIndex);
-                    if (_this.currentAudioIndex==_this.amount){
-                        _this.currentAudioIndex=1;
-                    }else{
-                        _this.currentAudioIndex=_this.currentAudioIndex+1;
+                Echo.channel('{{$laravelEchoPrefix}}package').listen('WeighedEvent',e=>{
+                    let item = e.package;
+                    let audio = document.getElementById('audio'+this.currentAudioIndex);
+                    if (this.currentAudioIndex === this.amount){
+                        this.currentAudioIndex = 1;
+                    } else {
+                        this.currentAudioIndex = this.currentAudioIndex +1;
                     }
-                    if (package && package.measuring_machine && package.measuring_machine.name ===_this.package.measuringMachine){
-                        if (package.id ===_this.package.id){
-                            _this.package.measuringMachine_status=package.measuring_machine.status;
-                            _this.measuringMachinesIndex[package.measuring_machine.name].status=package.measuring_machine.status;
-                            tempTip.setDuration(2000);
-                            tempTip.showSuccess('暂无新数据');
-                            return;
+                    if (item && item.measuring_machine && item.measuring_machine.name === this.package.measuringMachine){
+                        if (item.id === this.package.id){
+                            this.package.measuringMachine_status = item.measuring_machine.status;
+                            this.measuringMachinesIndex[item.measuring_machine.name].status = item.measuring_machine.status;
+                            window.tempTip.setDuration(2000);
+                            window.tempTip.showSuccess('暂无新数据');
+                            return ;
                         }
-                        _this.updateData(_this,package);
-                        let logistic_name = package.order ? (package.order.logistic ? package.order.logistic.name : '') : '';
-                        if (_this.logisticAudioURL[logistic_name]){
-                            audio.src=_this.logisticAudioURL[logistic_name];
+                        this.updateData(item);
+                        let logistic_name = item.order ? (item.order.logistic ? item.order.logistic.name : '') : '';
+                        let logistic_number = item.logistic_number;
+                        if (this.logisticAudioURL[logistic_name]){
+                            audio.src=this.logisticAudioURL[logistic_name];
                             setTimeout(()=>{
                                 audio.play();
                             },0);
-                        }else {
-                            window.tempTip.setDuration(3000);
-                            window.axios.post("{{url('package/weigh/measureMonitor/speech')}}",{logistic:logistic_name})
-                                .then(function (response) {
-                                    if (response.data){
-                                        _this.logisticAudioURL[logistic_name]=response.data;
-                                        audio.src=response.data;
-                                        setTimeout(()=>{
-                                            audio.play();
-                                        },0);
-                                    }else window.tempTip.show('没有对应快递名称!');
-                                }).catch(function (err) {
-                                    window.tempTip.show('语音合成发生错误:'+err);
-                                });
+                        } else {
+                            this.speech(logistic_name,logistic_number);
                         }
                         window.tempTip.setDuration(1000);
                         window.tempTip.showSuccess('刷新成功!');
@@ -154,36 +143,63 @@
             },
             methods:{
                 clickMeasuringMachine(e){
-                    let _this=this;
-                    window.axios.post('{{url('package/weigh/measureMonitor/data')}}',{id:e})
-                        .then(function (response) {
-                            if (response.data.id){
-                                let orderPackage=response.data;
-                                _this.updateData(_this,orderPackage);
-                                _this.package.measuringMachine=orderPackage.measuring_machine ? orderPackage.measuring_machine.name : '';                            }else {
+                    let url  = '{{route('measureMonitor.dataApi')}}';
+                    let data = {id:e};
+                    window.axios.post(url,data).then(res =>{
+                            if (res.data.id){
+                                let orderPackage=res.data;
+                                this.updateData(orderPackage);
+                                this.package.measuringMachine= orderPackage.measuring_machine ? orderPackage.measuring_machine.name : '';
+                            }else {
                                 tempTip.setDuration(3000);
                                 tempTip.showSuccess('暂无数据!');
                             }
-                        })
-                        .catch(function (err) {
+                        }).catch(err=>{
                             tempTip.setDuration(4000);
                             tempTip.show('切换设备错误:'+err);
                         });
                 },
-                updateData(_this,package){
-                    _this.package.id=package.id;
-                    _this.package.logistic_number=package.logistic_number;
-                    _this.package.orderno = package.order ?  package.order.code : '';
-                    _this.package.weight=package.weight;
-                    _this.package.owner=package.order ? (package.order.owner ? package.order.owner.name : '') : '';
-                    _this.package.paperBox=package.paper_box ? package.paper_box.name : '';
-                    _this.package.recipient=package.order ? package.order.recipient : '';
-                    _this.package.status=package.status;
-                    _this.package.weighed_at=package.weighed_at;_this.package.bulk=package.bulk;
-                    _this.package.logistic_name=package.order ? (package.order.logistic ? package.order.logistic.name : '') : '';
-                    _this.package.measuringMachine_status=package.measuring_machine ? package.measuring_machine.status : '';
-                    _this.measuringMachinesIndex[package.measuring_machine ? package.measuring_machine.name : ''].status=package.measuring_machine ? package.measuring_machine.status : '离线';
-                }
+                updateData(item){
+                    this.package.id=item.id;
+                    this.package.logistic_number=item.logistic_number;
+                    this.package.orderno = item.order ?  item.order.code : '';
+                    this.package.weight=item.weight;
+                    this.package.owner=item.order ? (item.order.owner ? item.order.owner.name : '') : '';
+                    this.package.paperBox=item.paper_box ? item.paper_box.name : '';
+                    this.package.recipient=item.order ? item.order.recipient : '';
+                    this.package.status=item.status;
+                    this.package.weighed_at=item.weighed_at;
+                    this.package.bulk=item.bulk;
+                    this.package.logistic_name=item.order ? (item.order.logistic ? item.order.logistic.name : '') : '';
+                    this.package.measuringMachine_status=item.measuring_machine ? item.measuring_machine.status : '';
+                    this.measuringMachinesIndex[item.measuring_machine ? item.measuring_machine.name : ''].status = item.measuring_machine ? item.measuring_machine.status : '离线';
+                },
+                speech(logistic_name,logistic_number){
+                    let audio = document.getElementById('audio'+this.currentAudioIndex);
+                    window.tempTip.setDuration(3000);
+                    let url = '{{route('measureMonitor.speechApi')}}';
+                    let data = {logistic:logistic_name,logistic_number:logistic_number};
+                    window.axios.post(url,data).then(res=>{
+                        if(res.data.success){
+                            let name =res.data.data.name;
+                            let path = res.data.data.path;
+                            this.logisticAudioURL[name] = path;
+                            audio.src = path;
+                            setTimeout(()=>{
+                                audio.play();
+                            },0);
+                        }else {
+                            if (res.data.data){
+                                audio.src = res.data.data.path;
+                                setTimeout(()=>{
+                                    audio.play();
+                                },0);
+                            }
+                        }
+                    }).catch(err=>{
+                        window.tempTip.show('语音合成发生错误:'+err);
+                    });
+                },
             },
         });
     </script>

+ 2 - 2
routes/web.php

@@ -23,10 +23,10 @@ Auth::routes();
 Route::get('/', function () {return redirect('login');});
 Route::any('test/{method}', 'TestController@method');
 //称重广播
-Route::post('package/weigh/measureMonitor/speech','MeasureMonitorController@speech');
+Route::post('package/weigh/measureMonitor/speech','MeasureMonitorController@speech')->name('measureMonitor.speechApi');
 //设备切换
 Route::post('package/measureMonitor/data','MeasureMonitorController@data');
-Route::post('package/weigh/measureMonitor/data','MeasureMonitorController@data');
+Route::post('package/weigh/measureMonitor/data','MeasureMonitorController@data')->name('measureMonitor.dataApi');
 //称重显示
 Route::get('package/measureMonitor','MeasureMonitorController@index');
 Route::get('package/weigh/measureMonitor','MeasureMonitorController@index');