Prechádzať zdrojové kódy

Merge branch 'master' into zengjun

ajun 4 rokov pred
rodič
commit
04e427866b

+ 9 - 3
app/Http/ApiControllers/WaybillController.php

@@ -10,6 +10,7 @@ use App\Http\Requests\Api\WaybillDispatch;
 use App\Services\WaybillService;
 use App\Waybill;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\DB;
 
 class WaybillController
 {
@@ -72,11 +73,16 @@ class WaybillController
         if ($deliverAt)$query->where("deliver_at","like",$deliverAt."%");
         /** @var Collection $waybills */
         $waybills = $query->paginate($paginate,'*', 'page',$page)->append(["carrier_name","amount_unit_name","remove_relation"]);
-        $result = null;
+        $result = [];
         if ($waybills->count()>0){
             $startDate = substr($waybills->first()->deliver_at,0,10);
             $endDate = substr($waybills->last()->deliver_at,0,10);
-            $result = ["2021-10-08"=>2];
+            $sql = <<<sql
+select sum(pick_up_fee) sum,date_format(deliver_at, '%Y-%m-%d') date from waybills where deliver_at between '{$startDate}' and '{$endDate}' group by date
+sql;
+            foreach (DB::select(DB::raw($sql)) as $item){
+                $result[$item->date] = $item->sum!==null ? round((double)$item->sum) : 0.0;
+            }
         }
         $this->response(["waybills"=>$waybills,"mapping"=>$result]);
     }
@@ -143,7 +149,7 @@ class WaybillController
         if (!$deliverAt || !$fee || !is_numeric($fee) || !$fee<0)
             $this->response(false,400,"非法参数或不满足需求");
         $param=array('screenDate'=>$deliverAt,'billing'=>$fee);
-        $waybills=app('waybillService')->dailyBilling($param);
+        $waybills=app('waybillService')->dailyBilling($param,true);
         if ($waybills===0 || $waybills===1 || !isset($waybills)) $this->response(false);
         $this->response(true);
     }

+ 16 - 12
app/Http/Controllers/OrderController.php

@@ -33,26 +33,30 @@ class OrderController extends Controller
         /** @var OrderService $orderService */
         $orderService = app('OrderService');
         $request = $request->input();
-        $owners = app('OwnerService')->getIntersectPermitting(['id', 'code']);
+        if (!app("UserService")->checkAdminIdentity(Auth::id())){
+            $owners = app('OwnerService')->getIntersectPermitting(['id', 'code']);
+            $codes = array_column($owners->toArray(), 'code');
+            if ($request['customerid'] ?? false) {
+                $arr = explode(',', $request['customerid']);
+                $request['customerid'] = [];
+                foreach ($arr as $value) {
+                    if (in_array($value, $codes)) $request['customerid'][] = $value;
+                }
+                if (count($request['customerid']) < 1) $request['customerid'] = [''];
+            } else $request['customerid'] = $codes;
+        }else if (isset($request['customerid'])){
+            $request['customerid'] = explode(',', $request['customerid']);
+            if ($request['customerid']<0)unset($request['customerid']);
+        }
         $service = app(LogisticService::class);
         $logistics = $service->getSelection(['id', 'name']);
-        $codes = array_column($owners->toArray(), 'code');
-        if ($request['customerid'] ?? false) {
-            $arr = explode(',', $request['customerid']);
-            $request['customerid'] = [];
-            foreach ($arr as $value) {
-                if (in_array($value, $codes)) $request['customerid'][] = $value;
-            }
-            if (count($request['customerid']) < 1) $request['customerid'] = [''];
-        } else $request['customerid'] = $codes;
-
         $result = $orderService->paginate($request);
         $picktotraceids = $result['picktotraceids'];
         $orders = $result['orders'];
         $orderService->tagOrderByOrderIssue($orders);
         app('WorkOrderService')->tagWorkOrder($orders);
         $commodities = $result['commodities'];
-        $customers = app('OracleBasCustomerService')->getCustomers($codes);
+        $customers =  app('OracleBasCustomerService')->getCustomers($codes ?? null);
         $page = $request["page"] ?? 1;
         $codes = DB::connection('oracle')->table('BAS_CODES')->select('code', 'codename_c')->where('codeid', 'SO_STS')->orderBy('code', 'asc')->get();
         $orderIssueType = OrderIssueType::all();

+ 15 - 3
app/Http/Controllers/TestController.php

@@ -63,6 +63,7 @@ use App\Services\AuthorityService;
 use App\Services\BatchService;
 use App\Services\CacheShelfService;
 use App\Services\ForeignHaiRoboticsService;
+use App\Services\ForeignZhenCangService;
 use App\Services\LogisticService;
 use App\Services\NotificationService;
 use App\Services\OracleDOCOrderHeaderService;
@@ -288,9 +289,12 @@ class TestController extends Controller
     private static $delayedHour = 48;
     public function test(Request $request)
     {
-        $prefix = "W".date("ymd")."000000";
-        $code = "123";
-        dd(substr($prefix,0,13-strlen($code)).$code);
+        \App\Authority::query()->where("name","波次修复")->update([
+            "name"          => "波次恢复",
+        ]);
+        $s = new AuthorityService();
+        $s->removeAdminAuth();
+        dd("OK");
 
         $s = new LogisticService();
         dd($s->assertExpressCompany("312087577032867"));
@@ -762,4 +766,12 @@ sql;
         $service = app('OwnerStoreOutFeeReportService');
         $service->recordReport(null, [2]);
     }
+
+    public function testZhenCang()
+    {
+        $batches=Batch::query()->with(['orders.orderCommodities.commodity.barcodes'])->find(161071);
+        /** @var ForeignZhenCangService  $foreignZhenCangService */
+       $foreignZhenCangService=app('ForeignZhenCangService');;
+       $foreignZhenCangService->broadcastBatch($batches);
+    }
 }

+ 4 - 0
app/Http/Requests/OrderDelivering.php

@@ -13,6 +13,10 @@ class OrderDelivering extends GateRequest
     public function paramHandle()
     {
         $exist = request("orderdate_start") || request("orderdate_end");
+        if (!$exist && request("delayedDeliver")){
+            request()->offsetSet("orderdate_start",date('Y-m-d H:i', strtotime("-15 day")));
+            request()->offsetSet("orderdate_end",date('Y-m-d H:i'));
+        }
         if ($exist && !request("restrict_time"))return;
         if ($exist && request("restrict_time")){
             request()->offsetUnset("orderdate_start");

+ 16 - 13
app/Services/CommodityService.php

@@ -540,19 +540,21 @@ class CommodityService
             $map = [];
             $BasSKUs->each(function ($basSku) use (&$map, $owner_map) {
                 $key = $basSku['sku'].$owner_map[$basSku['customerid']];
-                $map[$key] = [
-                    'owner_id' => $owner_map[$basSku['customerid']] ?? '',
-                    'sku' => $basSku->sku,
-                    'name' => $basSku->descr_c,
-                    'length' => $basSku->skulength,
-                    'width' => $basSku->skuwidth,
-                    'height' => $basSku->skuhigh,
-                    'volumn' => $basSku->cube,
-                    'created_at' => $basSku->addtime,
-                    'updated_at' => $basSku->edittime,
-                    'pack_spec' => $basSku->packid == 'STANDARD' ? 0 : explode("/", $basSku->packid)[1],
-                    'remark' => $basSku->notes,
-                ];
+                if ($basSku->sku&&$basSku->descr_c&&$basSku->customerid){ //只添加有sku 有name 有货主的商品
+                    $map[$key] = [
+                        'owner_id' => $owner_map[$basSku['customerid']] ?? '',
+                        'sku' => $basSku->sku,
+                        'name' => $basSku->descr_c,
+                        'length' => $basSku->skulength,
+                        'width' => $basSku->skuwidth,
+                        'height' => $basSku->skuhigh,
+                        'volumn' => $basSku->cube,
+                        'created_at' => $basSku->addtime,
+                        'updated_at' => $basSku->edittime,
+                        'pack_spec' => $basSku->packid == 'STANDARD' ? 0 : explode("/", $basSku->packid)[1],
+                        'remark' => $basSku->notes,
+                    ];
+                }
             });
             return $map;
         })();
@@ -606,6 +608,7 @@ class CommodityService
             $commodity = Cache::get("owner_code_{$basSku['customerid']}_sku_{$basSku['sku']}");
             if (!$commodity) $commodity = $dataHandlerService->getKeyValue(['owner_id' => $owner_map[$basSku['customerid']], 'sku' => $basSku['sku']], $commodities_map);
                 if (!$commodity) {
+                    if (!$basSku->sku||! $basSku->descr_c ||!$basSku->customerid)continue;//只添加有sku 有name 有货主的商品
                     $updateBasSkus->add($basSku);
                     $key = $basSku['sku'].$owner_map[$basSku['customerid']];
                     $insert_params[$key] = [

+ 5 - 1
app/Services/ForeignZhenCangService.php

@@ -3,7 +3,6 @@
 namespace App\Services;
 
 use App\Traits\ServiceAppAop;
-use App\ForeignZhenCang;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\Http;
 
@@ -38,4 +37,9 @@ class ForeignZhenCangService
             'Host' => 'zc-it.com',
         ])->post('http://1.116.164.201:8080/api/createBatch',$body);
     }
+
+    public function broadcastBatchByFlux()
+    {
+
+    }
 }

+ 5 - 5
app/Services/OracleBasCustomerService.php

@@ -50,14 +50,14 @@ class OracleBasCustomerService
             ->whereIn('CustomerId',$customerIDs)
             ->get();
     }
-    public function getCustomers($codes)
+    public function getCustomers($codes = null)
     {
         return $this->cacheService->getOrExecute('OracleBasCustomersAll'.md5(json_encode($codes)),function()use($codes){
-            return OracleBasCustomer::query()->select('customerid','descr_c')
+            $query = OracleBasCustomer::query()->select('customerid','descr_c')
                 ->where('customer_type','OW')
-                ->where('active_flag','Y')
-                ->whereIn('customerid',$codes)
-                ->get();
+                ->where('active_flag','Y');
+            if ($codes!==null)$query->whereIn('customerid',$codes);
+            return $query->get();
         },config('cache.expirations.owners'));
     }
 

+ 55 - 2
app/Services/OrderService.php

@@ -70,6 +70,51 @@ class OrderService
     }
 
 
+    private function delayedChangeParam(array &$params, $page, $paginate)
+    {
+        $startRow = $page ? ($page-1)*$paginate : 0;
+        $endRow = $page ? $page*$paginate : null;
+        $sql = <<<SQL
+    SELECT ORDERNO FROM(
+    SELECT ACT_ALLOCATION_DETAILS.ORDERNO,ROWNUM rn FROM ACT_ALLOCATION_DETAILS
+    LEFT JOIN DOC_ORDER_HEADER ON DOC_ORDER_HEADER.ORDERNO = ACT_ALLOCATION_DETAILS.ORDERNO
+    WHERE CHECKTIME > TO_DATE(NVL(H_EDI_20,H_EDI_03),'yyyy-mm-dd,hh24:mi:ss')+({$params["delayedDeliver"]}/24)
+    AND NVL(H_EDI_20,H_EDI_03) IS NOT NULL AND NVL(DOC_ORDER_HEADER.H_EDI_20,DOC_ORDER_HEADER.H_EDI_03) <> 'ERP订单取消'
+    AND CHECKTIME IS NOT NULL
+SQL;
+        if (isset($paginate["customerid"]) && is_array($paginate["customerid"]) && count($paginate["customerid"])>0){
+            $sql .= " AND CUSTOMERID IN (";
+            foreach ($paginate["customerid"] as $index => $customer){
+                $sql .= "'".$customer."'";
+                if ($index!==count($paginate["customerid"])-1)$sql.=",";
+            }
+            $sql.=")";
+        }
+        $ki = (isset($params["orderdate_start"]) ? 1 : 0) + (isset($params["orderdate_end"]) ? 2 : 0);
+        switch ($ki){
+            case 0:
+                $params["orderdate_start"] = date('Y-m-d H:i', strtotime("-15 day"));
+                $params["orderdate_end"] = date('Y-m-d H:i');
+                $sql.=" AND DOC_ORDER_HEADER.ADDTIME BETWEEN TO_DATE('{$params["orderdate_start"]}:00','yyyy-mm-dd,hh24:mi:ss') AND TO_DATE('{$params["orderdate_end"]}:59','yyyy-mm-dd,hh24:mi:ss')";
+                break;
+            case 1:
+                if (strlen($params["orderdate_start"]) < 11) $params["orderdate_start"] .= ' 00:00';
+                $sql.=" AND DOC_ORDER_HEADER.ADDTIME >= TO_DATE('{$params["orderdate_start"]}:00','yyyy-mm-dd,hh24:mi:ss')";
+                break;
+            case 2:
+                if (strlen($params["orderdate_end"]) < 11) $params["orderdate_end"] .= ' 23:59';
+                $sql.=" AND DOC_ORDER_HEADER.ADDTIME <= TO_DATE('{$params["orderdate_end"]}:59','yyyy-mm-dd,hh24:mi:ss')";
+                break;
+            default:
+                if (strlen($params["orderdate_start"]) < 11) $params["orderdate_start"] .= ' 00:00';
+                if (strlen($params["orderdate_end"]) < 11) $params["orderdate_end"] .= ' 23:59';
+                $sql.=" AND DOC_ORDER_HEADER.ADDTIME BETWEEN TO_DATE('{$params["orderdate_start"]}:00','yyyy-mm-dd,hh24:mi:ss') AND TO_DATE('{$params["orderdate_end"]}:59','yyyy-mm-dd,hh24:mi:ss')";
+        }
+        if ($endRow)$sql .= " AND ROWNUM<=50";
+        $sql .= " ORDER BY ORDERNO) WHERE rn>{$startRow}";
+        $params = ["query" => " AND ORDERNO IN ({$sql})"];
+    }
+
     private function preciseQuery(array $params, $sql)
     {
         $orderdate_start = $params["orderdate_start"] ?? null;
@@ -97,6 +142,9 @@ class OrderService
         $edisendflag = $params["edisendflag"] ?? null;
         $manualflag = $params["manualflag"] ?? null;
         $checkAllSign = $params['checkAllSign'] ?? null;
+        if ($params["query"] ?? false){
+            $sql .= $params["query"];
+        }
         if ($ordernos) {
             $sql .= " AND orderno IN " . $ordernos;
         }
@@ -252,6 +300,11 @@ class OrderService
 
     public function getSql($params, $page = null, $paginate = null)
     {
+        if (isset($params["delayedDeliver"]) && is_numeric($params["delayedDeliver"]) && is_int((int)$params["delayedDeliver"])){
+            if ($page)$page = 1;
+            $this->delayedChangeParam($params, $page, $paginate);
+        }
+
         $checktime_start = $params['checktime_start'] ?? null;
         $checktime_end = $params['checktime_end'] ?? null;
         $checkData = $params['data'] ?? null;
@@ -280,7 +333,7 @@ class OrderService
                          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,
                          DOC_ORDER_HEADER.Picking_Print_Flag,DOC_ORDER_HEADER.EDISENDFLAG
-                          ,DOC_ORDER_HEADER.ReleaseStatus,DOC_ORDER_HEADER.C_Address1,DOC_ORDER_HEADER.OrderTime,DOC_ORDER_HEADER.EDIREMARKS2 from (select * from DOC_ORDER_HEADER  order by ADDTIME desc )DOC_ORDER_HEADER where 1=1 ";
+                          ,DOC_ORDER_HEADER.ReleaseStatus,DOC_ORDER_HEADER.C_Address1,DOC_ORDER_HEADER.OrderTime,DOC_ORDER_HEADER.EDIREMARKS2 from DOC_ORDER_HEADER where 1=1 ";
         $sql = $this->preciseQuery($params, $sql);
         if ($checkData) {
             if (!is_array($checkData)) $checkData = explode(',', $checkData);
@@ -298,7 +351,7 @@ class OrderService
         }
         if (isset($params["alternate_sku1"])) $page = 1;
         if ($paginate && $page) $sql .= " and ROWNUM<='" . $page * $paginate . "')";
-        if ($paginate && $page) $sql .= " header where header.rn>'" . ($page - 1) * $paginate . "' ";
+        if ($paginate && $page) $sql .= " header where header.rn>'" . ($page - 1) * $paginate . "' order by ADDTIME desc";
         $sql .= ")DOC_ORDER_HEADER left join DOC_ORDER_DETAILS on DOC_ORDER_DETAILS.ORDERNO=DOC_ORDER_HEADER.ORDERNO
                       left join BAS_CODES  order_code on order_code.CODE=DOC_ORDER_HEADER.sostatus and order_code.codeid='SO_STS'
                       left join BAS_CODES  order_detail_code on order_detail_code.CODE=DOC_ORDER_DETAILS.linestatus and order_detail_code.codeid='SO_STS'

+ 4 - 3
app/Services/WaybillService.php

@@ -149,7 +149,7 @@ class WaybillService
         $waybills = $this->conditionQuery($param);
         return $waybills->get();
     }
-    public function dailyBilling(array $param){
+    public function dailyBilling(array $param, bool $isOnlyLogistic = false){
         if (($param['screenDate']??false)==false || ($param['billing']??false)==false) return 0; //入参错误
         $waybills = Waybill::query()->with(['owner','logistic','originationCity','destinationCity.parent',
             'uploadFiles','amountUnit','warehouseWeightUnit','carrierWeightUnit','district','order',
@@ -161,8 +161,9 @@ class WaybillService
             ->orderBy('waybills.id','desc')
             ->where('waybills.type','专线')
             ->where('waybills.amount','>',0)
-            ->where('waybills.deliver_at','like',$param['screenDate'].'%')
-            ->get();
+            ->where('waybills.deliver_at','like',$param['screenDate'].'%');
+        if ($isOnlyLogistic)$waybills->whereIn("logistic_id",app("LogisticService")->getQuery());
+        $waybills = $waybills->get();
         if ($waybills->isEmpty()) return 1;//无数据
         foreach ($waybills as $waybill){
             if (!$waybill['carrier_weight_other'] && !$waybill['carrier_weight']) return null;

+ 17 - 0
database/migrations/2021_09_30_164937_change_authority_add_method_index.php

@@ -65,6 +65,23 @@ class ChangeAuthorityAddMethodIndex extends Migration
                 "method"        => 1,
             ]
         ]);
+
+        $authWaybill1 = \App\Authority::query()->create([
+            "name"          => "订单管理",
+            "parent_id"     => $auth->id,
+            'alias_name'    => \Faker\Provider\Uuid::uuid(),
+            "permission"    => "允许",
+            "route"         => null,
+            "method"        => 4,
+        ]);
+        \App\Authority::query()->create([
+            "name"          => "波次恢复",
+            "parent_id"     => $authWaybill1->id,
+            'alias_name'    => \Faker\Provider\Uuid::uuid(),
+            "permission"    => "允许",
+            "route"         => "order/batchRecover",
+            "method"        => 0,
+        ]);
     }
 
     /**

+ 4 - 5
resources/views/order/index/delivering.blade.php

@@ -558,6 +558,7 @@
                             placeholder: '是否人工回传',
                             data: [{name: 'Y', value: '是'}, {name: 'N', value: '否'}]
                         },
+                        {name: 'delayedDeliver', type: 'input', tip: 'M:延时发货,填写整数,单位/时', placeholder: '延时发货'},
                     ],
                 ];
                 this.form = new query({
@@ -635,11 +636,9 @@
                     let start = "{{$request["orderdate_start"] ?? ''}}";
                     let end = "{{$request["orderdate_end"] ?? ''}}";
                     let time = "{{$request["restrict_time"] ?? ''}}";
-                    if (start && end && time) {
-                        this.changeURLParam("orderdate_start", start);
-                        this.changeURLParam("orderdate_end", end);
-                        this.changeURLParam("restrict_time", time);
-                    }
+                    if (time)this.changeURLParam("restrict_time", time);
+                    if (start)this.changeURLParam("orderdate_start", start);
+                    if (end)this.changeURLParam("orderdate_end", end);
                 },
                 changeURLParam(name, value) {
                     let url = document.URL, resultUrl = ''