فهرست منبع

活动包更新

chenqp 1 سال پیش
والد
کامیت
a7008636b0
5فایلهای تغییر یافته به همراه109 افزوده شده و 23 حذف شده
  1. 7 0
      app/Model/SportsBag.php
  2. 19 1
      app/Service/PurchaseOrderService.php
  3. 15 14
      app/Service/SalesOrderService.php
  4. 63 7
      app/Service/SportsBagService.php
  5. 5 1
      config/header/30.php

+ 7 - 0
app/Model/SportsBag.php

@@ -22,4 +22,11 @@ class SportsBag extends UseScopeBaseModel
         self::STATE_ONE => '待审核',
         self::STATE_TWO => '已审核'
     ];
+
+    const type_one = 1;
+    const type_two = 2;
+    public static $attribute_name = [
+        self::type_one => '销售属性',
+        self::type_two => '采购属性',
+    ];
 }

+ 19 - 1
app/Service/PurchaseOrderService.php

@@ -422,7 +422,8 @@ class PurchaseOrderService extends Service
      */
     public function getList($data,$user){
         $model = PurchaseOrder::Clear($user,$data);
-        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','order_type','sales_order_id','supplier','purchase_id','purchase_total','discount_fee','other_fee','total','storehouse_id','invoice_state')
+        $model = $model->where('del_time',0)
+            ->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','order_type','sales_order_id','supplier','purchase_id','purchase_total','discount_fee','other_fee','total','storehouse_id','invoice_state')
             ->orderby('id', 'desc');
         
         if(! empty($data['purchase_id'])) $model->where('id', $data['purchase_id']);
@@ -691,10 +692,12 @@ class PurchaseOrderService extends Service
             $res = $this->checkNumber($data['purchase_total']);
             if(! $res) return [false, '采购总价请输入不超过两位小数并且大于0的数值'];
         }
+        $sports_bag_id = [];
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             $res = $this->checkNumber($value['number']);
             if(! $res) return [false,'请输入正确的产品数量'];
+            if(! empty($value['sports_bag_id']) && ! in_array($value['sports_bag_id'], $sports_bag_id)) $sports_bag_id[] = $value['sports_bag_id'];
         }
 
         //所属部门 以及 顶级部门
@@ -705,13 +708,28 @@ class PurchaseOrderService extends Service
             $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrder::prefix);
             if(empty($order_number)) return [false,'采购单号生成失败!'];
             $data['order_number'] = $order_number;
+
+            $check_id = $sports_bag_id;
         }else{
             if($this->isEmpty($data,'order_number')) return [false,'采购单号不能为空!'];
             $purchase = PurchaseOrder::where('del_time',0)->where('order_number',$data['order_number'])->first();
             if(empty($purchase)) return [false, '采购单不存在或已被删除'];
             if($purchase->state > PurchaseOrder::STATE_ZERO) return [false,'请确认采购单单据状态,修改失败'];
+
+            $sports_bag_id_save = PurchaseOrderInfo::where('del_time',0)
+                ->where('purchase_order_id',$data['id'])
+                ->where('sports_bag_id','>',0)
+                ->select('sports_bag_id')
+                ->get()->toArray();
+            $sports_bag_id_save = array_unique(array_column($sports_bag_id_save,'sports_bag_id'));
+            $check_id = array_values(array_diff($sports_bag_id, $sports_bag_id_save));
         }
 
+        //校验活动包有效性
+        $service = new SportsBagService();
+        list($status, $msg) = $service->checkSportsBag($check_id);
+        if(! $status) return [false, $msg];
+
         return [true, ''];
     }
 }

+ 15 - 14
app/Service/SalesOrderService.php

@@ -933,11 +933,13 @@ class SalesOrderService extends Service
         list($status,$msg) = $this->limitingSendRequestBackgExpire("saleOrder" . $data['order_number']);
         if(! $status) return [false, $msg];
 
+        $sports_bag_id = [];
         if(! empty($data['product'])){
             foreach ($data['product'] as $value){
                 if(empty($value['number'])) return [false,'产品数量不能为空'];
                 $res = $this->checkNumber($value['number']);
                 if(! $res) return [false,'请输入正确的产品数量'];
+                if(! empty($value['sports_bag_id']) && ! in_array($value['sports_bag_id'], $sports_bag_id)) $sports_bag_id[] = $value['sports_bag_id'];
             }
         }
 
@@ -1003,12 +1005,7 @@ class SalesOrderService extends Service
             $bool = SalesOrder::where('del_time',0)->where('order_number',$data['order_number'])->exists();
             if($bool) return [false,'合同编号已存在,请重新获取'];
 
-//            if($data['model_type'] == SalesOrder::Model_type_two){
-//                $boolean = SalesOrder::where('del_time',0)
-//                    ->where('title',$data['title'])
-//                    ->where('model_type',$data['model_type'])
-//                    ->exists();
-//            }
+            $check_id = $sports_bag_id;
         }else{
             if(empty($data['id'])) return [false,'ID不能为空'];
             $order = SalesOrder::where('del_time',0)->where('id',$data['id'])->first();
@@ -1016,15 +1013,19 @@ class SalesOrderService extends Service
             $order = $order->toArray();
             if(! in_array($order['state'], [SalesOrder::State_minus_one,SalesOrder::State_zero])) return [false, '请确认合同状态,编辑失败'];
 
-//            if($data['model_type'] == SalesOrder::Model_type_two){
-//                $boolean = SalesOrder::where('del_time',0)
-//                    ->where('id','<>',$data['id'])
-//                    ->where('title',$data['title'])
-//                    ->where('model_type',$data['model_type'])
-//                    ->exists();
-//            }
+            $sports_bag_id_save = SalesOrderProductInfo::where('del_time',0)
+                ->where('sales_order_id',$data['id'])
+                ->where('sports_bag_id','>',0)
+                ->select('sports_bag_id')
+                ->get()->toArray();
+            $sports_bag_id_save = array_unique(array_column($sports_bag_id_save,'sports_bag_id'));
+            $check_id = array_values(array_diff($sports_bag_id, $sports_bag_id_save));
         }
-//        if(isset($boolean) && $boolean) return [false,'合同名称不能重复'];
+
+        //校验活动包有效性
+        $service = new SportsBagService();
+        list($status, $msg) = $service->checkSportsBag($check_id);
+        if(! $status) return [false, $msg];
 
         return [true, $data];
     }

+ 63 - 7
app/Service/SportsBagService.php

@@ -6,6 +6,7 @@ use App\Model\BasicType;
 use App\Model\Construction;
 use App\Model\Employee;
 use App\Model\PurchaseOrder;
+use App\Model\SalesOrder;
 use App\Model\SeeRange;
 use App\Model\SportsBag;
 use App\Model\SportsBagProductInfo;
@@ -25,6 +26,7 @@ class SportsBagService extends Service
             $material_model = SportsBag::where('id',$data['id'])->first();
             $material_model->title = $data['title'];
             $material_model->purchase_attribute = $data['purchase_attribute'];
+            $material_model->is_attribute = $data['is_attribute'];
             $material_model->mark = $data['mark'] ?? "";
             $material_model->number = $data['number'];
             $material_model->start_time = $data['start_time'] ?? 0;
@@ -84,6 +86,7 @@ class SportsBagService extends Service
             $material_model = new SportsBag();
             $material_model->order_number = $data['order_number'];
             $material_model->purchase_attribute = $data['purchase_attribute'];
+            $material_model->is_attribute = $data['is_attribute'];
             $material_model->title = $data['title'];
             $material_model->mark = $data['mark'] ?? "";
             $material_model->number = $data['number'];
@@ -125,7 +128,7 @@ class SportsBagService extends Service
                 ],$user);
                 if(! $status) return [true, '保存成功,活动包确认失败,异常信息:' . $msg];
             }
-            dd(1);
+
             DB::commit();
         }catch (\Throwable $e){
             DB::rollBack();
@@ -159,14 +162,24 @@ class SportsBagService extends Service
         if(empty($order)) return [false, '活动包不存在或已被删除'];
         $order = $order->toArray();
         $purchase_attribute = explode(',',$order['purchase_attribute']);
-        $basic_type = BasicType::whereIn('id',$purchase_attribute)->pluck('title','id')->toArray();
-        $str = "";
-        if(! empty($basic_type)){
+        if($order['is_attribute'] == 1){
+            $purchase_attribute = explode(',',$order['purchase_attribute']);
+            $str2 = "";
             foreach ($purchase_attribute as $value){
-                $str .= $basic_type[$value] . ',';
+                $tmp = SalesOrder::$model_type_title[$value] ?? "";
+                if(! empty($tmp)) $str2 .= $tmp . ',';
             }
+            $order['purchase_attribute_title'] = rtrim($str2,',');
+        }else{
+            $basic_type = BasicType::whereIn('id',$purchase_attribute)->pluck('title','id')->toArray();
+            $str = "";
+            if(! empty($basic_type)){
+                foreach ($purchase_attribute as $value){
+                    $str .= $basic_type[$value] . ',';
+                }
+            }
+            $order['purchase_attribute_title'] = rtrim($str,',');
         }
-        $order['purchase_attribute_title'] = rtrim($str,',');
 
         $start_time = $order['start_time'] ? date("Y-m-d H:i",$order['start_time']) : '';
         $end_time = $order['end_time'] ? date("Y-m-d H:i",$order['end_time']) : '';
@@ -229,10 +242,11 @@ class SportsBagService extends Service
     public function getList($data,$user){
         $model = SportsBag::SportsBagClear($user,$data);
         $model = $model->where('del_time',0)
-            ->select('id','title','number','start_time','end_time','crt_time','crt_id','mark','total_amount','state','order_number','purchase_attribute')
+            ->select('id','title','number','start_time','end_time','crt_time','crt_id','mark','total_amount','state','order_number','purchase_attribute',"is_attribute")
             ->orderby('id', 'desc');
 
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
+        if(! empty($data['is_attribute'])) $model->where('is_attribute',$data['is_attribute']);
         if(! empty($data['purchase_attribute'])) $model->whereRaw("FIND_IN_SET(?, purchase_attribute)", [$data['purchase_attribute']]);
         if(isset($data['state'])) $model->where('state', $data['state']);
         if(isset($data['valid'])) {
@@ -296,12 +310,14 @@ class SportsBagService extends Service
             $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
             $data['data'][$key]['state_title'] = $this->makeState($data['data'][$key], $state_array);
             $data['data'][$key]['product'] = $product[$value['id']] ?? [];
+            $data['data'][$key]['is_attribute_title'] = SportsBag::$attribute_name[$value['is_attribute']] ?? "";
         }
 
         return $data;
     }
 
     public function makeState($value, $state_array){
+        $nowStamp = time();
         if(! empty($state_array[$value['order_number']])){
             $return = $state_array[$value['order_number']];
             if($value['state'] == SportsBag::State_minus_one){
@@ -312,7 +328,18 @@ class SportsBagService extends Service
         }elseif($value['state'] == SportsBag::STATE_ZERO){
             $state = "待" . $value['crt_name'] . "提交";
         }else{
+            $attribute_2 = "";
+            if($value['state'] == SportsBag::STATE_TWO){
+                if($nowStamp < $value['start_time']){
+                    $attribute_2 = "待开始";
+                }elseif ($nowStamp > $value['end_time']){
+                    $attribute_2 = "已结束";
+                }elseif ($nowStamp >= $value['start_time'] && $nowStamp <= $value['end_time']){
+                    $attribute_2 = "正在进行";
+                }
+            }
             $state = SportsBag::$name[$value['state']] ?? '';
+            if(! empty($attribute_2)) $state = $state . "($attribute_2)";
         }
 
         return $state;
@@ -334,6 +361,8 @@ class SportsBagService extends Service
     public function orderRule(&$data, $user, $is_check = true){
         if(empty($data['title'])) return [false,'请填写活动名称'];
         if(empty($data['sports_bag_time'][0]) || empty($data['sports_bag_time'][1])) return [false,'请填写活动时间范围'];
+        if(empty($data['is_attribute'])) return [false, '请选择销售属性|采购属性'];
+        if(empty($data['purchase_attribute'])) return [false, '请选择销售属性|采购属性对应的数据'];
         $data['start_time'] = $this->changeDateToDateMin($data['sports_bag_time'][0]);
         $data['end_time'] = $this->changeDateToDateMin($data['sports_bag_time'][1]);
         if(empty($data['number'])) return [false,'必选产品种数不能为空'];
@@ -361,4 +390,31 @@ class SportsBagService extends Service
 
         return [true, ''];
     }
+
+    public function checkSportsBag($id = []){
+        if(empty($id)) return [true, ''];
+
+        $now = time();
+        $bag = SportsBag::whereIn('id',$id)
+            ->select('id','title','start_time','end_time','state','del_time')
+            ->get()->toArray();
+
+        $return = [];
+        foreach ($bag as $value){
+            if($value['del_time'] > 0){
+                $return[] = "活动包" . $value['title'] ."已删除或不存在";
+            }elseif($value['state'] < SportsBag::STATE_TWO){
+                $return[] = "活动包" . $value['title'] ."审核未通过";
+            }elseif($now >= $value['start_time'] && $now <= $value['end_time']){
+                $return[] = "活动包" . $value['title'] ."未在活动时间内,请稍等";
+            }
+        }
+
+        if(! empty($return)){
+            $msg = implode(' | ', $return);
+            return [false, $msg];
+        }
+
+        return [true, ''];
+    }
 }

+ 5 - 1
config/header/30.php

@@ -22,6 +22,10 @@ return [
         'key' => 'mark',
         'value' => '活动包备注',
     ],
+    [
+        'key' => 'is_attribute_title',
+        'value' => '活动包属性',
+    ],
     [
         'key' => 'crt_time',
         'value' => '创建时间',
@@ -32,6 +36,6 @@ return [
     ],
     [
         'key' => 'state_title',
-        'value' => '订单状态',
+        'value' => '活动包状态',
     ],
 ];