Jelajahi Sumber

Merge branch 'Haozi'

zhouzhendong 4 tahun lalu
induk
melakukan
6bd45d1fe7

+ 27 - 0
app/Http/Controllers/OrderController.php

@@ -16,6 +16,7 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Oursdreams\Export\Export;
+use PhpParser\Node\Stmt\DeclareDeclare;
 
 class OrderController extends Controller
 {
@@ -352,4 +353,30 @@ sql;
         }
     }
 
+    /**
+     * @param Request $request
+     * @return array
+     * 一键回传功能
+     */
+    public function manualBack(Request $request): array
+    {
+        if(!Gate::allows('订单管理-订单-一键回传'))return["success"=>false,"data"=>"无权操作"];
+        /** @var OrderService $orderService */
+        $orderService=app(OrderService::class);
+        $orderNos=$request->input('ordernos');
+        $failNo=array();
+        $successNo=array();
+        foreach ($orderNos as $no){
+            $res=$orderService->manualBack($no);
+            if (!$res){
+                array_push($failNo,$no);
+                app('LogService')->log(__METHOD__,'人工回传失败'.__FUNCTION__,json_encode($no),Auth::user()['id']);
+            }else{
+                array_push($successNo,$no);
+            }
+        }
+        if (count($orderNos)>=count($failNo))return ["success"=>true,"successNo"=>$orderNos,"failNo"=>$failNo];
+        else return ["success"=>false,"failNo"=>$failNo];
+    }
+
 }

+ 78 - 2
app/Http/Controllers/TestController.php

@@ -60,6 +60,8 @@ use App\Waybill;
 use App\WorkOrder;
 use Carbon\Carbon;
 use Carbon\CarbonPeriod;
+use Decimal\Decimal;
+use Doctrine\DBAL\Exception;
 use Firebase\JWT\JWT;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Foundation\Http\FormRequest;
@@ -74,6 +76,7 @@ use Illuminate\Support\Facades\URL;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Support\Str;
 use Laravel\Horizon\Events\JobFailed;
+use Monolog\Handler\IFTTTHandler;
 use PhpOffice\PhpSpreadsheet\Calculation\Web\Service;
 
 class TestController extends Controller
@@ -237,8 +240,8 @@ sql;
             ->where('class', 'like', 'https://was.baoshi56.com/package/logistic/batchUpdate%')->pluck('description');
         foreach ($descriptions as $description) {
             $description = substr($description, 9);
-            $description = \Illuminate\Support\Str::before($description,"}");
-            $obj= json_decode($description.'}',true);
+            $description = \Illuminate\Support\Str::before($description, "}");
+            $obj = json_decode($description . '}', true);
             OrderPackage::query()
                 ->whereIn('logistic_number', $obj['logistic_numbers'])
                 ->update([
@@ -267,4 +270,77 @@ sql;
     }
 
 
+
+    public function testUpdateInv()
+    {
+        ini_set('max_execution_time', 0);
+        ini_set('memory_limit', '4096M');
+        $sql = <<<sql
+select FMLOTNUM,FMLOCATION,PLANTOLOCATION,CREATE_TRANSACTIONID,SKU,CUSTOMERID from TSK_TASKLISTS
+where CUSTOMERID=?
+  AND FMLOCATION= ?
+  AND OPENWHO = ?
+  AND TASKPROCESS = ?
+  AND DOCTYPE = ?
+  AND TASKTYPE = ?
+  AND LOTATT05=?
+  AND LOTATT08=?
+  AND PLANTOID = ?
+  and OPENTIME>=TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')
+  and OPENTIME<=TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')
+sql;
+        $CUSTOMERID = 'JIANSHANG';
+        $FMLOCATION = 'STAGEWH02';
+        $OPENWHO = 'WCS';
+        $TASKPROCESS = '00';
+        $DOCTYPE = 'ASN';
+        $TASKTYPE = 'PA';
+        $LOTATT05 = 'MJ-CP';
+        $LOTATT08 = 'ZP';
+        $PLANTOID = '*';
+        $traceid = 'JIANSHANG03';
+        $start = '2021-09-02 23:59:59';
+        $end = '2021-09-03 11:10:00';
+        $res = DB::connection("oracle")->select(DB::raw($sql),
+            [$CUSTOMERID, $FMLOCATION, $OPENWHO, $TASKPROCESS, $DOCTYPE, $TASKTYPE, $LOTATT05, $LOTATT08, $PLANTOID, $start, $end]);
+        $resItems = array_chunk($res, 200);
+        foreach ($resItems as $res) {
+            DB::connection("oracle")->beginTransaction();
+            try {
+                foreach ($res as $re) {
+                    DB::connection("oracle")->table('INV_LOT_LOC_ID')
+                        ->where([
+                            'LOTNUM' => $re->fmlotnum,
+                            'LOCATIONID' => $re->fmlocation,
+                            'CUSTOMERID' => $re->customerid,
+                            'sku' => $re->sku,
+                            'TRACEID' => '*',
+                        ])
+                        ->update([
+                            'TRACEID' => $traceid,
+                            'EDITWHO' => 'WCS_',
+                        ]);
+                    if ($re->fmlocation != $re->plantolocation) {
+                        DB::connection("oracle")->table('INV_LOT_LOC_ID')
+                            ->where([
+                                'LOTNUM' => $re->fmlotnum,
+                                'LOCATIONID' => $re->plantolocation,
+                                'CUSTOMERID' => $re->customerid,
+                                'sku' => $re->sku,
+                                'TRACEID' => '*',
+                            ])
+                            ->update([
+                                'TRACEID' => $traceid,
+                                'EDITWHO' => 'WCS_',
+                            ]);
+                    }
+                    DB::connection("oracle")->commit();
+                }
+                dd(true);
+            } catch (\Exception $e) {
+                DB::connection("oracle")->rollBack();
+                dd($e->getMessage());
+            }
+        }
+    }
 }

+ 41 - 3
app/Services/OrderService.php

@@ -30,6 +30,7 @@ use App\Warehouse;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use App\Traits\ServiceAppAop;
@@ -88,6 +89,7 @@ class OrderService
         $ordernos = $params["ordernos"] ?? null;
         $edisendflag2=$params["edisendflag2"] ?? null;
         $edisendflag=$params["edisendflag"] ?? null;
+        $manualflag=$params["manualflag"] ?? null;
         $checkAllSign = $params['checkAllSign'] ?? null;
         if ($ordernos){
             $sql .= " AND orderno IN ".$ordernos;
@@ -219,6 +221,7 @@ class OrderService
         }
         if ($edisendflag2) $sql.=" and edisendflag2 like '".$edisendflag2."%'";
         if ($edisendflag) $sql.=" and edisendflag like '".$edisendflag."%'";
+        if ($manualflag) $sql.=" and manualflag = '".$manualflag."'";
         if ($soreference1){
             $arr=array_values(array_filter(preg_split('/[,, ]+/is', $soreference1)));
             if (count($arr)==1){
@@ -252,7 +255,7 @@ class OrderService
             if ($ordernos)$params['ordernos'] = $ordernos;
             else return null;
         }
-        $sql="SELECT * FROM (select ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID as header_customer_id
+        $sql="SELECT * FROM (select ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.MANUALFLAG,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID as header_customer_id
         ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,DOC_ORDER_HEADER.EDIREMARKS2,
        DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1
         ,NVL(ACT_ALLOCATION_DETAILS.PICKTOTRACEID,DOC_ORDER_HEADER.soreference5) as soreference5,DOC_ORDER_HEADER.EDISENDFLAG2,DOC_ORDER_HEADER.EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
@@ -264,7 +267,7 @@ class OrderService
         $sql=$this->preciseQuery($params,$sql);
         ;$sql.=" ) as counted from (";
         if ($paginate && $page)$sql.=" select * from (";
-        $sql.=" select ROWNUM as rn,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
+        $sql.=" select ROWNUM as rn,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.MANUALFLAG,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
                           ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,
                          DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1
                           ,DOC_ORDER_HEADER.soreference5,DOC_ORDER_HEADER.EDISENDFLAG2,DOC_ORDER_HEADER.EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
@@ -295,7 +298,7 @@ class OrderService
                       left join  BAS_SKU on DOC_Order_Details.CustomerID=BAS_SKU.CustomerID and DOC_Order_Details.SKU=BAS_SKU.SKU
                       left join  ACT_ALLOCATION_DETAILS on DOC_Order_Details.orderno = ACT_ALLOCATION_DETAILS.orderno
                       and DOC_Order_Details.ORDERLINENO = ACT_ALLOCATION_DETAILS.ORDERLINENO
-                      GROUP BY ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,
+                      GROUP BY ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.MANUALFLAG,
                       DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,
                       DOC_ORDER_HEADER.CustomerID,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,
                       DOC_ORDER_HEADER.EDIREMARKS2,DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1, NVL(ACT_ALLOCATION_DETAILS.PICKTOTRACEID,DOC_ORDER_HEADER.soreference5),
@@ -1504,4 +1507,39 @@ sql;
             else $order->is_order_issue = false;
         }
     }
+
+    /**
+     * @param $orderno
+     * @return bool
+     * 一键回传 调用flux的sp
+     */
+    public function manualBack($orderno): bool
+    {
+        $who = 'WAS' . (Auth::user() ? '-' . Auth::user()["name"] : '');
+        $host=config('database.connections.oracle.host');
+        $serviceName=config('database.connections.oracle.service_name');
+        $user=config('database.connections.oracle.username');
+        $password=config('database.connections.oracle.password');
+        $conn=oci_connect($user,$password,$host.'/'.$serviceName,'utf8');
+        $IN_WarehouseID='';
+        $IN_OrderNo=$orderno;
+        $IN_Language='';
+        $IN_UserID=$who;
+        $OUT_Return_Code='';
+        $sql_sp="begin SPSOUDF_BS_ManualCF(:IN_WarehouseID,:IN_OrderNo,:IN_Language,:IN_UserID,:OUT_Return_Code); end;";
+        $stmt = oci_parse($conn, $sql_sp);
+        oci_bind_by_name($stmt,':IN_WarehouseID',$IN_WarehouseID);
+        oci_bind_by_name($stmt,':IN_OrderNo',$IN_OrderNo);
+        oci_bind_by_name($stmt, ':IN_Language', $IN_Language);
+        oci_bind_by_name($stmt, ':IN_UserID', $IN_UserID);
+        oci_bind_by_name($stmt, ':OUT_Return_Code', $OUT_Return_Code,300);
+        oci_execute($stmt);
+
+        if (substr($OUT_Return_Code,0,3) != '000'){
+            app('LogService')->log(__METHOD__,'调用sp一键回传订单失败'.__FUNCTION__,"ORDERNO:".$orderno."ERROR:".$OUT_Return_Code);
+            return false;
+        }
+        oci_close($conn);
+        return true;
+    }
 }

+ 85 - 0
resources/views/order/index/delivering.blade.php

@@ -39,6 +39,10 @@
                     @can('订单管理-订单-生成工单')
                         <button class="btn btn-sm ml-1 btn-outline-success" @click="showInterceptModel()">生成工单</button>
                     @endcan
+                    @can('订单管理-订单-一键回传')
+                        <button class="btn btn-sm ml-1 btn-success tooltipTarget" title="订单一键回传必须满足条件:订单状态为“分配完成,部分拣货,拣货完成,播种完成”;订单未冻结;订单有快递单号"
+                                @click="manualBack()">一键回传</button>
+                    @endcan
                 </div>
                 <div class="modal fade " style="top: 20%" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                     <div class="modal-dialog">
@@ -117,6 +121,7 @@
                             </div>
                         </td>
                         <td><span>@{{ order.notes }}</span></td>
+                        <td><span>@{{ order.manualflag}}</span></td>
                         <td><span>@{{ order.erpcancelflag }}</span></td>
                         <td><span>@{{ order.picking_print_flag }}</span></td>
                         <td><span>@{{ order.edisendflag }}</span></td>
@@ -354,6 +359,7 @@
                     ],
                     [
                         {name:'restrict_time',type:'select',tip:'查询限定时间范围',placeholder:'查询时间范围',data:[{name:'1',value:'一天内'},{name:'7',value:'一周内'},{name:"30",value:"一月内"},{name:"90",value:"本季度"}]},
+                        {name:'manualflag',type:'select',tip:'是否人工回传',placeholder:'是否人工回传',data:[{name:'Y',value:'是'},{name:'N',value:'否'}]},
                     ],
                 ];
                 this.form = new query({
@@ -392,6 +398,7 @@
                             {value:"复核时间",col:"2"}
                         ]},
                     {name:'notes',value: '备注'},
+                    {name:'manualflag',value: '人工回传标记'},
                     {name:'erpcancelflag',value: '接口取消标记'},
                     {name:'picking_print_flag',value: '拣货单打印标记'},
                     {name:'edisendflag',value: '接口回传标记'},
@@ -1007,6 +1014,84 @@
                         window.tempTip.show(err)
                     });
                 },
+                changeReceiveInfo() {
+                    let url = '{{url('apiLocal/workOrder/editOrderReceiveInfo')}}';
+                    let data = {
+                        order_nos:checkData[0],
+                        grad:this.grad,
+                        remake:`${this.remark.name} ${this.remark.phone} ${this.remark.province} ${this.remark.city} ${this.remark.city} ${this.remark.district} ${this.remark.adder}`,
+                    };
+                    console.log(data);
+                    window.tempTip.setIndex('1999');
+                    window.axios.post(url,data).then(res=>{
+                        if (res.data.success){
+                            window.tempTip.showSuccess('生成修改工单成功');
+                            $('#intercept-modal').modal('hide');
+                        } else{
+                            window.tempTip.show(res.data.message);
+                        }
+                    }).catch(err=>{
+                        window.tempTip.show(err);
+                    });
+                },
+                manualBack(){
+                    let _this=this;
+                    let orders=[];
+                    let fail=[];
+                    let isGreater=false;
+                    const start = new Date(new Date(new Date().toLocaleDateString()).getTime()+16*60*60*1000+30*60*1000);
+                    if(checkData.length===0){tempTip.show('没有勾选记录');return;}
+                    _this.orders.forEach(function(order){
+                        if (new Date(new Date(order.addtime).getTime())>start) isGreater=true;
+                        checkData.forEach(function (checkedId) {
+                            if(order.orderno===checkedId){
+                                if (order.soreference5 //存在快递单号
+                                    && order.releasestatus!='H' //订单未冻结
+                                    && order.manualflag=='N' //订单未回传
+                                    && (order.sostatus=='40' ||
+                                        order.sostatus=='50' ||
+                                        order.sostatus=='60' ||
+                                        order.sostatus=='61')) //订单状态为 分配完成,部分拣货,拣货完成,或播种完成
+                                {orders.push(order.orderno);}else {fail.push(order.orderno)}
+                            }
+                        });
+                    });
+                    let failText='';
+                    fail.forEach(function (item){
+                        failText += item + ','
+                    });
+                    if (isGreater){
+                        if (!confirm('订单中包含16:30以后推送的订单,有超时揽收风险,是否确定操作?')) return;
+                    }else {
+                        if (!confirm('提前回传订单将无法取消,是否确定操作?')) return;
+                    }
+                    let url = '{{url('order/manualBack')}}';
+                    window.axios.post(url, {ordernos:orders})
+                        .then(res => {
+                            if (res.data.success) {
+                                _this.orders.forEach(function (order){
+                                    res.data.successNo.forEach(function (success_item){
+                                        if (order.orderno==success_item)order.manualflag='Y';
+                                    })
+                                })
+                                res.data.failNo.forEach(function (item){
+                                    failText += item + ','
+                                });
+                                if (failText.length > 0) {
+                                    failText = failText.substr(0,failText.length - 1);
+                                }
+                                window.tempTip.setDuration(4000);
+                                window.tempTip.showSuccess('回传成功!'+'    单号:'+failText+'不满足回传条件,系统已自动筛除');
+                                this.$forceUpdate();
+                                return;
+                            }
+                            window.tempTip.setDuration(3000);
+                            window.tempTip.show('人工回传失败');
+                        }).catch(err => {
+                        window.tempTip.setDuration(3000);
+                        window.tempTip.show("网络错误:" + err);
+                    })
+                },
             },
         });
     </script>

+ 1 - 0
routes/web.php

@@ -795,6 +795,7 @@ Route::group(['prefix'=>'package'],function(){
         Route::post('thaw','OrderController@thaw');
         Route::post('deAllocation','OrderController@deAllocation');
         Route::post('deAllocationAll','OrderController@deAllocationAll');
+        Route::post('manualBack','OrderController@manualBack');
         Route::post('resetLogisticsGetMark','OrderController@resetLogisticsGetMark');
         Route::post('resetInterfaceReturnMark','OrderController@resetInterfaceReturnMark');
         Route::post('createRejectedBill','OrderController@createRejectedBill');