瀏覽代碼

预约增加禁止预约时间功能

Zhouzhendong 4 年之前
父節點
當前提交
4a84c362d4

+ 3 - 0
app/DeliveryAppointment.php

@@ -55,6 +55,9 @@ class DeliveryAppointment extends Model
     const TYPE = [
         0 => "质检",
     ];
+    //禁止送货日期列表 REDIS key
+    const BAN = "DELIVERY_BAN_ON_DATE";
+
     protected $appends=[
         "period"
     ];

+ 19 - 2
app/Http/Controllers/DeliveryAppointmentController.php

@@ -98,8 +98,15 @@ class DeliveryAppointmentController extends Controller
                         $available = $total-$used; //可用产能
                         if ($available > $need)$periodArr["isAvailable"] = true;
                     }
+
+                    if (app("DeliveryAppointmentService")->isBanOnDeliveryDate($date)){
+                        $periodArr["isAvailable"] = false;
+                    }
+
                     $periods[] = $periodArr;
                 }
+
+
             }else{
                 foreach (DeliveryAppointment::PERIOD as $key=>$period){
                     $period = explode("-",$period);
@@ -109,6 +116,11 @@ class DeliveryAppointmentController extends Controller
                     $used = $map[$date."-".$key] ?? 0; //已使用产能
                     $available = $total-$used; //可用产能
                     if ($available > $need)$periodArr["isAvailable"] = true;
+
+                    if (app("DeliveryAppointmentService")->isBanOnDeliveryDate($date)){
+                        $periodArr["isAvailable"] = false;
+                    }
+
                     $periods[] = $periodArr;
                 }
             }
@@ -165,7 +177,9 @@ class DeliveryAppointmentController extends Controller
             if ($result){
                 $total = $warehouse->production_capacity*DeliveryAppointment::HOUR[$selectDate["time"]];
                 $available = $total-$result->capacity;
-                if ($available < $need)$this->success(["isFail"=>true]);
+                if ($available < $need || app("DeliveryAppointmentService")->isBanOnDeliveryDate($selectDate["date"])){
+                    $this->success(["isFail"=>true]);
+                }
             }
             /** @var \stdClass $appointment */
             $appointment = DeliveryAppointment::query()->create([
@@ -248,7 +262,10 @@ class DeliveryAppointmentController extends Controller
             if ($result){
                 $total = $warehouse->production_capacity*DeliveryAppointment::HOUR[$selectDate["time"]];
                 $available = $total-$result->capacity;
-                if ($available < $appointment->capacity)$this->success(["isFail"=>true]);
+                if ($available < $appointment->capacity ||
+                    app("DeliveryAppointmentService")->isBanOnDeliveryDate($selectDate["date"])){
+                    $this->success(["isFail"=>true]);
+                }
             }
             $update = [
                 "appointment_date"      => $selectDate["date"],

+ 13 - 68
app/Http/Controllers/TestController.php

@@ -13,6 +13,7 @@ use App\OrderIssue;
 use App\OrderIssueRejectedBill;
 use App\RejectedBill;
 use App\Services\common\BatchUpdateService;
+use App\Services\DeliveryAppointmentService;
 use App\Services\OracleDocAsnHerderService;
 use App\Services\OrderRejectedBillRelationService;
 use App\Services\OrderRejectingStatusService;
@@ -52,74 +53,18 @@ class TestController extends Controller
         }
     }
     public function test(Request $request){
-        dd(array_filter(array_unique(preg_split('/[,, ]+/u', "125,456,888, 6 ,  ,"))));
-    }
-
-    public function testOrder()
-    {
-        /** @var OrderRejectedBillRelationService $service */
-        $service = app('OrderRejectedBillRelationService');
-        $service->orderSyncRejectedBill(Order::query()->find(12));
-    }
-
-    public function testRejectedBill()
-    {
-        /** @var OrderRejectedBillRelationService $service */
-        $service = app(OrderRejectedBillRelationService::class);
-        /** @var RejectedBill $item */
-        $item = RejectedBill::query()->find(2);
-        $service->rejectedBillSyncOrder($item);
-    }
-
-    public function getOrder()
-    {
-
-        $query = Order::query()->select('id')->where('client_code','22011700000161');
-        dd(OrderDetail::query()->whereIn('order_id',$query)->get());
-    }
-
-    public function sync_order_issue()
-    {
-        $items = OrderIssueRejectedBill::query()->with('orderIssue')->get();
-        $item_array = $items->chunk(500);
-        foreach ($item_array as $items){
-            $insert_params = [];
-            $update_params = [['logistic_number_return','order_id']];
-            foreach ($items as $item){
-                if (!$item->orderIssue) continue;
-                $insert_params[$item->orderIssue->order_id] = [
-                    'order_id' => $item->orderIssue->order_id,
-                    'is_new_rejecting' => $item->orderIssue->is_new_rejecting,
-                    'rejecting_status' => $item->orderIssue->rejecting_status
-                ];
-                $update_params[] = ['logistic_number_return' => $item->logistic_number_return,'order_id' => $item->orderIssue->order_id];
-            }
-            $this->batchOrderIssueRejectedBIll($update_params);
-            $items = OrderDetail::query()->whereIn('order_id',array_keys($insert_params))->get()->map(function($item){
-                return  $item->order_id;
-            })->toArray();
-            $insert_params = array_filter($insert_params,function($item)use($items){
-                return !in_array($item['order_id'],$items) && !is_null($item['order_id']);
-            });
-            if (count($insert_params) == 0) continue;
-            OrderDetail::query()->insert(array_values($insert_params));
-        }
-    }
-
-
-    public function batchOrderIssueRejectedBIll($array)
-    {
-        /** @var BatchUpdateService $service */
-        $service = app(BatchUpdateService::class);
-        $service->batchUpdate('order_issue_rejected_bill',$array);
-    }
-
-    public function testQuery()
-    {
-        /** @var OracleDocAsnHerderService $oracleDocAsnHerderService */
-        $oracleDocAsnHerderService = app(OracleDocAsnHerderService::class);
-        $asnHerders = $oracleDocAsnHerderService->getWmsAsnOnStartDateCreate('2022-01-20 16:38:00');
-        dd($asnHerders);
+        $s = new DeliveryAppointmentService();
+        $s->addBanOnDeliveryDate("2022-01-27");
+        $s->addBanOnDeliveryDate("2022-01-28");
+        $s->addBanOnDeliveryDate("2022-01-29");
+        $s->addBanOnDeliveryDate("2022-01-30");
+        $s->addBanOnDeliveryDate("2022-01-31");
+        $s->addBanOnDeliveryDate("2022-02-01");
+        $s->addBanOnDeliveryDate("2022-02-02");
+        $s->addBanOnDeliveryDate("2022-02-03");
+        $s->addBanOnDeliveryDate("2022-02-04");
+        $s->addBanOnDeliveryDate("2022-02-05");
+        $s->addBanOnDeliveryDate("2022-02-06");
     }
 }
 

+ 36 - 0
app/Services/DeliveryAppointmentService.php

@@ -12,6 +12,7 @@ use App\Warehouse;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
 use phpDocumentor\Reflection\Types\Integer;
 
 class DeliveryAppointmentService
@@ -229,4 +230,39 @@ class DeliveryAppointmentService
             ->where("appointment_date",date("Y-m-d"))
             ->where("asn_number",'like',"%{$asn}%")->first();
     }
+
+    /**
+     * 是否为送货禁止日期
+     */
+    public function isBanOnDeliveryDate($date):bool
+    {
+        if (!$date || strlen($date)<10){
+            return false;
+        }
+        $date = substr($date,0,10);
+        $list = Cache::get(DeliveryAppointment::BAN,[]);
+        foreach ($list as $index=>$val){
+            if ($date==$val){
+                return true;
+            }
+            if (strtotime($date." 00:00:00") > strtotime($val." 00:00:00")){
+                unset($list[$index]);
+            }
+        }
+        Cache::forever(DeliveryAppointment::BAN,array_values($list));
+        return false;
+    }
+
+    /**
+     * 添加送货禁止日期
+     *
+     * @param $date
+     * @return bool
+     */
+    public function addBanOnDeliveryDate($date):bool
+    {
+        $list = Cache::get(DeliveryAppointment::BAN,[]);
+        array_push($list,$date);
+        return Cache::forever(DeliveryAppointment::BAN,$list);
+    }
 }

+ 14 - 4
resources/views/equipment/index.blade.php

@@ -59,10 +59,18 @@
         #loading p{position:absolute;top:55%;left:48%;width:33px;height:33px;margin-top:-15px;margin-left:-15px;}
 
         .equipment{
+            cursor: pointer
+        }
+        .equipment-exist{
+            border-width:2px;
+            border-style: groove;
+            border-color: #0000FF;
+        }
+        .equipment-not-exist{
+            opacity: 0.5;
             border-width:1px;
-            border-color: #0070C0;
             border-style: dashed;
-            cursor: pointer
+            border-color: #0070C0;
         }
     </style>
 </head>
@@ -231,14 +239,15 @@
                     </vue-drag-resize>
                     <vue-drag-resize class="equipment"
                                      v-for="(element,index) in equipmentElements" @clicked="showDetail(element)"
-                                     :id="'eq-'+index"
+                                     :id="'eq-'+index" :class="element.exist ? 'equipment-exist' : 'equipment-not-exist'"
                                      v-if="!element.removeSign"
                                      :is-resizable="false" :snap-to-grid="grid" :grid-x="40" :grid-y="30"
                                      :style="[{backgroundColor:element.color}]"
                                      @activated="onActivated(element)"
                                      @dragging="equipmentDrag"
                                      :key="'eq-'+index+element.turn" :prevent-active-behavior="isNotEdit"
-                                     :parent-limitation="true" :w="(element.turn ? element.w : element.h)*ratio" :h="(element.turn ? element.h : element.w)*ratio"
+                                     :parent-limitation="true" :w="(element.turn ? element.w : element.h)*ratio"
+                                     :h="(element.turn ? element.h : element.w)*ratio"
                                      :x="element.x" :y="element.y" :z="90">
                         <div class="h-100 txt-sty w-100 el-center" :class="element.turn ? 're' : ''">@{{ element.code }}</div>
                     </vue-drag-resize>
@@ -841,6 +850,7 @@
                                     let selfInfo = this.equipments[coords.id-1];
                                     equipmentElements.push(Object.assign({
                                         eqId:eq.id,
+                                        exist:eq.exist,
                                         code:eq.code,
                                         width:eq.width,
                                         depth:eq.depth,