Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

root 1 vuosi sitten
vanhempi
commit
3719d815c2

+ 33 - 4
.idea/workspace.xml

@@ -3,7 +3,9 @@
   <component name="ChangeListManager">
     <list default="true" id="b5852db3-28ab-419d-82cf-b6c0f6b99397" name="变更" comment="">
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/Service/MaterialService.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Service/MaterialService.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/Http/Controllers/Api/TechnologyController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/TechnologyController.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/Service/TechnologyService.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Service/TechnologyService.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/routes/api.php" beforeDir="false" afterPath="$PROJECT_DIR$/routes/api.php" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -122,7 +124,7 @@
     <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
     <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/app/Service" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/app/Model" />
     <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
     <property name="nodejs_npm_path_reset_for_default_project" value="true" />
     <property name="nodejs_package_manager_path" value="npm" />
@@ -130,8 +132,9 @@
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
-      <recent name="D:\phpstudy_pro\WWW\jf_admin2.0\app\Service" />
       <recent name="D:\phpstudy_pro\WWW\jf_admin2.0\app\Model" />
+      <recent name="D:\phpstudy_pro\WWW\jf_admin2.0\app\Service" />
+      <recent name="D:\phpstudy_pro\WWW\jf_admin2.0\app\Http\Controllers\Api" />
     </key>
   </component>
   <component name="RunManager">
@@ -152,11 +155,37 @@
       <workItem from="1685595177391" duration="2533000" />
       <workItem from="1685669123669" duration="2439000" />
       <workItem from="1685952381761" duration="726000" />
-      <workItem from="1686021203384" duration="13363000" />
+      <workItem from="1686021203384" duration="14595000" />
+      <workItem from="1686099374239" duration="19779000" />
+      <workItem from="1686185795830" duration="871000" />
     </task>
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="3" />
   </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="php-line-method">
+          <url>file://$PROJECT_DIR$/app/Service/TechnologyService.php</url>
+          <line>14</line>
+          <properties>
+            <option name="className" value="\App\Service\TechnologyService" />
+            <option name="methodName" value="basicProcessList" />
+          </properties>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="php-line-method">
+          <url>file://$PROJECT_DIR$/app/Service/ProcessService.php</url>
+          <line>108</line>
+          <properties>
+            <option name="className" value="\App\Service\ProcessService" />
+            <option name="methodName" value="processAdd" />
+          </properties>
+          <option name="timeStamp" value="3" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
+  </component>
 </project>

+ 11 - 52
app/Http/Controllers/Api/ProcessController.php

@@ -9,11 +9,6 @@ use Illuminate\Http\Request;
 
 class ProcessController extends BaseController
 {
-
-
-
-
-
     public function basicProcessList(Request $request)
     {
 
@@ -30,11 +25,6 @@ class ProcessController extends BaseController
 
     }
 
-
-
-
-
-
     public function basicProcessEdit(Request $request)
     {
 
@@ -51,11 +41,6 @@ class ProcessController extends BaseController
 
     }
 
-
-
-
-
-
     public function basicProcessAdd(Request $request)
     {
 
@@ -72,11 +57,6 @@ class ProcessController extends BaseController
 
     }
 
-
-
-
-
-
     public function basicProcessDel(Request $request)
     {
 
@@ -93,11 +73,8 @@ class ProcessController extends BaseController
 
     }
 
-
     public function processList(Request $request)
     {
-
-
         $service = new ProcessService();
         $user = $request->get('auth');
         list($status,$data) = $service->processList($request->all(),$request->all());
@@ -107,18 +84,10 @@ class ProcessController extends BaseController
         }else{
             return $this->json_return(201,$data);
         }
-
     }
 
-
-
-
-
-
     public function processEdit(Request $request)
     {
-
-
         $service = new ProcessService();
         $user = $request->get('auth');
         list($status,$data) = $service->processEdit($request->all(),$request->all());
@@ -128,18 +97,10 @@ class ProcessController extends BaseController
         }else{
             return $this->json_return(201,$data);
         }
-
     }
 
-
-
-
-
-
     public function processAdd(Request $request)
     {
-
-
         $service = new ProcessService();
         $user = $request->get('auth');
         list($status,$data) = $service->processAdd($request->all(),$request->all());
@@ -149,18 +110,10 @@ class ProcessController extends BaseController
         }else{
             return $this->json_return(201,$data);
         }
-
     }
 
-
-
-
-
-
     public function processDel(Request $request)
     {
-
-
         $service = new ProcessService();
         $user = $request->get('auth');
         list($status,$data) = $service->processDel($request->all(),$request->all());
@@ -170,12 +123,18 @@ class ProcessController extends BaseController
         }else{
             return $this->json_return(201,$data);
         }
-
     }
 
+    public function processDetail(Request $request)
+    {
+        $service = new ProcessService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->processDetail($request->all(),$request->all());
 
-
-
-
-
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }

+ 74 - 0
app/Http/Controllers/Api/TechnologyController.php

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\TechnologyService;
+use Illuminate\Http\Request;
+
+class TechnologyController extends BaseController
+{
+    public function technologyList(Request $request)
+    {
+        $service = new TechnologyService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->technologyList($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function technologyEdit(Request $request)
+    {
+        $service = new TechnologyService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->technologyEdit($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function technologyAdd(Request $request)
+    {
+        $service = new TechnologyService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->technologyAdd($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function technologyDel(Request $request)
+    {
+        $service = new TechnologyService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->technologyDel($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function technologyCopy(Request $request)
+    {
+        $service = new TechnologyService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->technologyCopy($request->all(),$request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 1 - 2
app/Model/BasicProcess.php

@@ -1,9 +1,8 @@
 <?php
 
-namespace App\Models;
+namespace App\Model;
 
 use Illuminate\Database\Eloquent\Model;
-use PhpParser\Builder;
 
 /**
  * 工艺属性

+ 2 - 3
app/Model/Process.php

@@ -1,12 +1,11 @@
 <?php
 
-namespace App\Models;
+namespace App\Model;
 
 use Illuminate\Database\Eloquent\Model;
-use PhpParser\Builder;
 
 /**
- * 工属性
+ * 工属性
  * Class Unit
  * @package App\Models
  */

+ 19 - 0
app/Model/Technology.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 工艺
+ * Class Unit
+ * @package App\Models
+ */
+class Technology extends Model
+{
+    protected $table = "technology"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+}
+

+ 27 - 44
app/Service/CheckService.php

@@ -81,46 +81,34 @@ class CheckService extends Service
 
     //单子审批通过后产生流水
     public static $record = [
-        self::four => 'record_material_order_In', //领料单入库区域审批 审批通过后有入库流水
-        self::five => 'record_construction', //施工单审核  审批通过后有出库流水
-        self::six => 'record_material_return', //退料单审核  审批通过后有出库流水
-        self::eight => 'record_transfer_in_sub', //调拨单入库审核  审批通过后有入库流水
-        self::nine => 'record_transfer_out_sub', //调拨单出库审核  审批通过后有出库流水
-        self::eleven => 'record_inventory_in_sub', //盘点单入库审核   审批通过后有入库流水
-        self::twl => 'record_inventory_out_sub', //盘点单出库审核  审批通过后有出库流水
+        self::four => 'record_material_order_In',
+        self::five => 'record_construction',
+        self::six => 'record_material_return',
+        self::eight => 'record_transfer_in_sub',
+        self::nine => 'record_transfer_out_sub',
+        self::eleven => 'record_inventory_in_sub',
+        self::twl => 'record_inventory_out_sub',
     ];
 
     //将状态改为待审核
     public static $opt_case2 = [
-        self::one => 'set_check_material_order_apply', //领料单申领区域审批
-        self::two => 'set_check_material_order_send', //领料单发货区域审批
-        self::three => 'set_check_material_order_take', //领料单收货区域审批
-        self::four => 'set_check_material_order_In', //领料单入库区域审批 审批通过后有入库流水
-        self::five => 'set_check_construction', //施工单审核  审批通过后有出库流水
-        self::six => 'set_check_material_return', //退料单审核  审批通过后有出库流水
-        self::seven => 'set_check_transfer_sub', //调拨单详情审核
-        self::eight => 'set_check_transfer_in_sub', //调拨单入库审核  审批通过后有入库流水
-        self::nine => 'set_check_transfer_out_sub', //调拨单出库审核  审批通过后有出库流水
-        self::ten => 'set_check_inventory_sub', //盘点单详情审核
-        self::eleven => 'set_check_inventory_in_sub', //盘点单入库审核   审批通过后有入库流水
-        self::twl => 'set_check_inventory_out_sub', //盘点单出库审核  审批通过后有出库流水
-        self::thirteen => 'set_check_material_charge', //计费领料单审核
-    ];
-
-    public static $opt_case3 = [
-        self::five => 'create_warranty', //施工单审核 审批产生质保单
+        self::one => 'set_status_to_one',
+        self::two => '',
+        self::three => '',
+        self::four => '',
+        self::five => '',
+        self::six => '',
+        self::seven => '',
+        self::eight => '',
+        self::nine => '',
+        self::ten => '',
+        self::eleven => '',
+        self::twl => '',
+        self::thirteen => '',
     ];
 
     //将状态改为待审核
     public function set_status_to_one($data){
-        $modelOne = MaterialOrder::where('order_number',$data['order_number'])->where('del_time',0)->first();
-
-        //待审
-        if($modelOne->apply_status >= MaterialOrder::STATE_ONE) return [false,'已待审或审核通过,操作失败!'];
-
-        $modelOne->apply_status = MaterialOrder::STATE_ONE;
-        $modelOne->save();
-
         return [true,''];
     }
 
@@ -134,7 +122,6 @@ class CheckService extends Service
         //具体方法
         $function = self::$opt_case2[$data['opt_case']];
 
-        $function2 = self::$opt_case3[$data['opt_case']] ?? '';
         try{
             DB::beginTransaction();
 
@@ -146,10 +133,6 @@ class CheckService extends Service
                 return [false, $msg];
             }
 
-            if($function2){
-                $this->$function2($data,$user);
-            }
-
             //创建审批流
             $args = [
                 'order_no' => $data['order_number'],
@@ -191,7 +174,7 @@ class CheckService extends Service
      * opt_case 具体审核类型 已定义同名静态变量
      */
     public function createRecordAndInventory($data = []){
-        if(empty($data['order_number']) || empty($data['type']) || empty($data['opt_case']) || ! isset(self::$opt_case[$data['opt_case']])) return [false,config('response.FAILED')];
+        if(empty($data['order_number']) || empty($data['type']) || empty($data['opt_case']) || ! isset(self::$opt_case[$data['opt_case']])) return [false,300];
 
         //具体方法
         $function = self::$opt_case[$data['opt_case']];
@@ -210,23 +193,23 @@ class CheckService extends Service
 
                 if(! $boolean) { //创建流水失败 数据库回滚
                     DB::rollBack();
-                    return [false, config('response.FAILED')];
+                    return [false, 300];
                 }
 
                 //更新库存
-                $inventy = new InventoryService();
-                $boole = $inventy->changeInventory($data);
+                $inventory = new InventoryService();
+                $boole = $inventory->changeInventory($data);
                 if(! $boole){
                     DB::rollBack();
-                    return [false, config('response.FAILED')];
+                    return [false, 300];
                 }
             }
 
             DB::commit();
-            return [true, config('response.SUCCESS')];
+            return [true, 200];
         }catch (\Throwable $exception){
             DB::rollBack();
-            return [false, config('response.FAILED')];
+            return [false, 201];
         }
     }
 }

+ 67 - 31
app/Service/EmployeeService.php

@@ -12,6 +12,7 @@ use App\Model\EmployeeTeamPermission;
 use App\Model\Role;
 use App\Model\SysMenu;
 use App\Model\Team;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 
 /**
@@ -229,36 +230,28 @@ class EmployeeService extends Service
 
 
     public function teamEdit($data){
-        list($status,$msg) = $this->teamRule($data);
+        list($status,$msg) = $this->teamRule($data,false);
         if(!$status) return [$status,$msg];
-        $first = Team::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
-        if(!empty($first))return [false,'名称已存在!'];
 
         $model = new Team();
         $model = $model->where('id',$data['id'])->first();
-
         $model->title = $data['title'];
-        $model->code = $data['code'] ?? '';
+        $model->code = $data['code'];
         $model->save();
-        return [true,'保存成功!'];
 
+        return [true,'保存成功!'];
     }
 
     public function teamAdd($data,$user){
         list($status,$msg) = $this->teamRule($data);
         if(!$status) return [$status,$msg];
-        $first = Team::where('title',$data['title'])->where('del_time',0)->first();
-        if(!empty($first))return [false,'名称已存在!'];
 
         $model = new Team();
-
         $model->title = $data['title'] ;
-        $model->code = $data['code'] ?? '' ;
-
+        $model->code = $data['code'];
         $model->save();
 
         return [true,'保存成功!'];
-
     }
 
     public function teamDel($data){
@@ -279,8 +272,19 @@ class EmployeeService extends Service
         return [200,$list];
     }
 
-    public function teamRule($data){
+    public function teamRule($data,$is_add = true){
         if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
+        if($this->isEmpty($data,'code')) return [false,'编码不存在'];
+
+        $model = Team::where('title',$data['title'])
+            ->where('code',$data['code'])
+            ->where('del_time',0);
+        if(! $is_add){
+            if($this->isEmpty($data,'id')) return [false,'ID不能为空'];
+            $model->where('id','<>',$data['id']);
+        }
+        $bool = $model->exists();
+        if($bool) return [false,'名称和编码已存在!'];
 
         return [true,''];
     }
@@ -313,35 +317,67 @@ class EmployeeService extends Service
     }
 
     public function employeeDepart($data){
-        $type = $data['type'];
+        if($this->isEmpty($data,'insert')) return [false,'数据不能为空!'];
+
+        DB::beginTransaction();
+        try {
+            if($data['type'] == 1){
+                EmployeeDepartPermission::whereIn('depart_id',$data['insert']['depart_id'])->delete();
+            }else{
+                EmployeeDepartPermission::whereIn('employee_id',$data['insert']['employee_id'])->delete();
+            }
 
-        if($type == 1){
-            EmployeeDepartPermission::where('depart_id',$data['id'])->delete();
-        }else{
-            EmployeeDepartPermission::where('employee_id',$data['id'])->delete();
-        }
+            $insert = [];
+            foreach ($data['insert']['depart_id'] as $t){
+                foreach ($data['insert']['employee_id'] as $e){
+                    $insert[] = [
+                        'depart_id' => $t,
+                        'employee_id' => $e
+                    ];
+                }
+            }
+            EmployeeDepartPermission::insert($insert);
 
-        EmployeeDepartPermission::insert($data['insert']);
+            DB::commit();
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
-        return [200,'保存成功!'];
+        return [true,'保存成功!'];
     }
 
     public function employeeTeam($data){
-        $type = $data['type'];
+        if($this->isEmpty($data,'insert')) return [false,'数据不能为空!'];
+
+        DB::beginTransaction();
+        try {
+            if($data['type'] == 1){
+                EmployeeTeamPermission::whereIn('team_id',$data['insert']['team_id'])->delete();
+            }else{
+                EmployeeTeamPermission::whereIn('employee_id',$data['insert']['employee_id'])->delete();
+            }
 
-        if($type == 1){
-            EmployeeTeamPermission::where('team_id',$data['id'])->delete();
-        }else{
-            EmployeeTeamPermission::where('employee_id',$data['id'])->delete();
-        }
+            $insert = [];
+            foreach ($data['insert']['team_id'] as $t){
+                foreach ($data['insert']['employee_id'] as $e){
+                    $insert[] = [
+                        'team_id' => $t,
+                        'employee_id' => $e
+                    ];
+                }
+            }
+            EmployeeTeamPermission::insert($insert);
 
-        EmployeeTeamPermission::insert($data['insert']);
+            DB::commit();
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
-        return [200,'保存成功!'];
+        return [true,'保存成功!'];
     }
 
-
-
     public function loginRule($data){
         if($this->isEmpty($data,'account')) return [false,'账号不能为空!'];
         if($this->isEmpty($data,'password')) return [false,'密码不存在!'];

+ 38 - 20
app/Service/InventoryService.php

@@ -38,36 +38,54 @@ class InventoryService extends Service
     /**
      * 业务单据审核后 更新库存
      * order_number 订单编号
-     * opt_case 有些订单一次创建会同时有出入库单据
      */
     public function changeInventory($data){
-        $model = InOutRecord::where('del_time',0)
+        $result = InOutRecord::where('del_time',0)
             ->where('from_order_number',$data['order_number'])
             ->select('storehouse_id',DB::raw("sum(number) as number"),'goods_id')
-            ->groupby('goods_id','storehouse_id');
+            ->groupby('goods_id','storehouse_id')
+            ->get()->toArray();
 
-        $result = $model->get()->toArray();
         if (empty($result)) return false;
 
-        foreach ($result as $key => $value){
-            $m = Inventory::where('goods_id',$value['goods_id'])
-                ->where('storehouse_id',$value['storehouse_id'])
-                ->select('goods_id','number','storehouse_id')
-                ->first();
+        //查询参数拼接
+        $search_args = '';
+        foreach ($result as $value){
+            $search_args .= "(goods_id = '{$value["goods_id"]} and storehouse_id = '{$value["storehouse_id"]}') OR ";
+        }
+        $search_args = rtrim($search_args,'OR ');
 
-            if(empty($m)){
-                Inventory::insert($result[$key]);
-            }else{
-                $array['number'] = $value['number'] + $m->number;
-                $array['lock_number'] = $value['lock_number'] - $m->number;
+        DB::beginTransaction();
+        try {
+            $inventory = Inventory::whereRaw($search_args)
+                ->select('id','goods_id','number','storehouse_id')
+                ->sharedLock()
+                ->get()
+                ->toArray();
+            $inventory_map = [];
+            if(! empty($inventory)){
+                foreach ($inventory as $value){
+                    $inventory_map[$value['goods_id'] . $value['storehouse_id']]['id'] = $value['id'];
+                    $inventory_map[$value['goods_id'] . $value['storehouse_id']]['number'] = $value['number'];
+                }
+            }
 
-                Inventory::where('goods_id',$m->roll_film_id)
-                    ->where('storehouse_id',$m->storehouse_id)
-                    ->lockForUpdate()
-                    ->update($array);
+            foreach ($result as $key => $value){
+                $keys = $value['goods_id'] . $value['storehouse_id'];
+                if(! isset($inventory_map[$keys])){
+                    Inventory::insert($result[$key]);
+                }else{
+                    $array['number'] = $value['number'] + $inventory_map[$keys]['number'];
+                    $array['lock_number'] = $value['lock_number'] - $inventory_map[$keys]['number'];
+                    Inventory::where('id', $inventory_map[$keys]['id'])->update($array);
+                }
             }
-        }
 
-        return true;
+            DB::commit();
+            return true;
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            return false;
+        }
     }
 }

+ 8 - 13
app/Service/MaterialService.php

@@ -73,17 +73,17 @@ class MaterialService extends Service
                 $data['data'][$key]['crt_time'] = time();
             }else{
                 if($this->isEmpty($data,'id')) return [false,'id不能为空!'];
-                $bool = BasicMaterial::where('del_time',0)
-                    ->where('parent_id',$data['id'])
-                    ->exists();
-                if($bool) return [false,'物料分类下存在子集!'];
-
                 $bool = BasicMaterial::where('title',$value['title'])
                     ->where('id','<>',$data['id'])
                     ->where('del_time',0)
                     ->exists();
             }
             if($bool) return [false,'名称不能重复'];
+
+            $bool = Material::where('del_time',0)
+                ->where('b_m_id',$value['parent_id'])
+                ->exists();
+            if($bool) return [false,'分类下存在物料!'];
         }
 
         return [true,$data];
@@ -193,13 +193,8 @@ class MaterialService extends Service
             $type = BasicMaterial::where('del_time',0)
                 ->select('id','parent_id')
                 ->get()->toArray();
-            $this->getAllIdsArr($type,0,'',$ids);
-            $string = $this->getLongestStr($ids, $data['b_m_id']);
-            $pos = strpos($string, (string)$data['b_m_id']);
-            if ($pos !== false) $id = substr($string, $pos);
-            $res_id = [];
-            if(! empty($id)) $res_id = explode(',',$id);
-            $model->whereIn("b_m_id", $res_id);
+            $result = array_merge($this->getAllDescendants($type,$data['b_m_id']),[$data['b_m_id']]);
+            $model->whereIn("b_m_id", $result);
         }
 
         $list = $this->limit($model,'',$data);
@@ -208,7 +203,7 @@ class MaterialService extends Service
     }
 
     public function MaterialDetail($data){
-        if($this->isEmpty($data,'id')) return [false,'ID必传'];
+        if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
         $id = $data['id'];
         $detail = Material::where('del_time',0)->where('id',$id)->select('title','b_m_id','abbreviation_title','unit','crt_time','upd_time','id')->first();
         if(empty($detail)) return [false,'数据不存在!'];

+ 0 - 1
app/Service/MeasureService.php

@@ -65,7 +65,6 @@ class MeasureService extends Service
 
     public function rule($data){
         if($this->isEmpty($data,'title')) return [false,'中文名称不存在!'];
-//        if($this->isEmpty($data,'icon')) return [201,'d不存在!'];
         if($this->isEmpty($data,'e_title')) return [false,'英文名称不存在!'];
 
         return [true,''];

+ 74 - 51
app/Service/ProcessService.php

@@ -2,80 +2,87 @@
 
 namespace App\Service;
 
-
-use App\Model\SysMenu;
-use App\Models\BasicProcess;
-use App\Models\Process;
+use App\Model\BasicProcess;
+use App\Model\Process;
 
 /**
- * 工相关
+ * 工相关
  * @package App\Models
  */
 class ProcessService extends Service
 {
-
     public function basicProcessEdit($data){
-        list($status,$msg) = $this->basicProcessRule($data);
+        list($status,$msg) = $this->basicProcessRule($data,false);
         if(!$status) return [$status,$msg];
-        if($this->isEmpty($data,'id')) return [false,'ID不存在'];
-        $first = BasicProcess::where('title',$data['title'])->where('del_time',0)->first();
-        if(!empty($first))return [false,'名称已存在!'];
-
-
-        $model = new BasicProcess();
-        $model = $model->where('id',$data['id'])->first();
-        $model->title = $data['title'];
-        $model->parent_id = $data['parent_id'] ;
-        $model->save();
 
+        $update = $msg['data'][0];
+        BasicProcess::where('id',$data['id'])->update($update);
 
         return [true,'保存成功!'];
-
     }
 
     public function basicProcessAdd($data,$user){
-
-
-//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
         list($status,$msg) = $this->basicProcessRule($data);
         if(!$status) return [$status,$msg];
-        $first = BasicProcess::where('title',$data['title'])->where('del_time',0)->first();
-        if(!empty($first))return [false,'名称已存在!'];
 
-        $model = new BasicProcess();
-
-        $model->title = $data['title'];
-        $model->parent_id = $data['parent_id'] ;
-        $model->save();
+        BasicProcess::insert($msg['data']);
 
         return [true,'保存成功!'];
-
     }
 
     public function basicProcessDel($data){
         if($this->isEmpty($data,'id')) return [false,'ID必须!'];
 
         BasicProcess::where('id',$data['id'])->update([
-            'del_time',time()
+            'del_time' => time()
         ]);
 
         return [true,'删除成功'];
     }
 
     public function basicProcessList($data){
-        $list = BasicProcess::where('del_time',0)->select('title','parent_id','crt_time','upd_time')->get()->toArray();
+        $list = BasicProcess::where('del_time',0)->select('title','parent_id','crt_time','upd_time','id')->get()->toArray();
         $return = $this->makeTree(0,$list);
         $return = $this->set_sort_circle($return);
 
-
         return [200,$return];
     }
 
-    public function basicProcessRule($data){
-        if($this->isEmpty($data,'title')) return [false,'名称不存在!'];
-        if($this->isEmpty($data,'parent_id')) return [false,'父级不存在!'];
-
-        return [true,''];
+    public function basicProcessRule($data,$is_add = true){
+        if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
+        $title = array_column($data['data'],'title');
+        $title = array_map(function($val) {
+            return $val !== null ? $val : 0;
+        }, $title);
+        $title_count = array_count_values($title);
+        foreach ($title as $value){
+            if(empty($value)) return [false,'名称不能为空!'];
+            if($title_count[$value] > 1) return [false,'名称不能重复'];
+        }
+
+        foreach ($data['data'] as $key => $value){
+            $data['data'][$key]['upd_time'] = time();
+            if($is_add){
+                $bool = BasicProcess::where('title',$value['title'])
+                    ->where('del_time',0)
+                    ->exists();
+                $data['data'][$key]['crt_time'] = time();
+            }else{
+                if($this->isEmpty($data,'id')) return [false,'id不能为空!'];
+                $bool = BasicProcess::where('title',$value['title'])
+                    ->where('id','<>',$data['id'])
+                    ->where('del_time',0)
+                    ->exists();
+            }
+            if($bool) return [false,'名称不能重复'];
+
+            $bool = Process::where('del_time',0)
+                ->where('p_id',$value['parent_id'])
+                ->exists();
+            if($bool) return [false,'分类下存在工序!'];
+        }
+
+        return [true,$data];
     }
 
     public function processEdit($data){
@@ -85,22 +92,21 @@ class ProcessService extends Service
         $first = Process::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
         if(!empty($first))return [false,'名称已存在!'];
 
-
         $model = new Process();
         $model = $model->where('id',$data['id'])->first();
         $model->title = $data['title'];
-        $model->p_id = $data['p_id'] ;
+        $model->p_id = $data['p_id'];
+        $model->time = $data['time'];
+        $model->capacity = $data['capacity'];
+        $model->wages_unit = $data['wages_unit'];
+        $model->wages = $data['wages'];
+        $model->team_id = $data['team_id'];
         $model->save();
 
-
         return [true,'保存成功!'];
-
     }
 
     public function processAdd($data,$user){
-
-
-//        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
         list($status,$msg) = $this->processRule($data);
         if(!$status) return [$status,$msg];
         $first = Process::where('title',$data['title'])->where('del_time',0)->first();
@@ -109,28 +115,39 @@ class ProcessService extends Service
         $model = new Process();
 
         $model->title = $data['title'];
-        $model->p_id = $data['p_id'] ;
+        $model->p_id = $data['p_id'];
+        $model->time = $data['time'];
+        $model->capacity = $data['capacity'];
+        $model->wages_unit = $data['wages_unit'];
+        $model->wages = $data['wages'];
+        $model->team_id = $data['team_id'];
         $model->save();
 
         return [true,'保存成功!'];
-
     }
 
     public function processDel($data){
         if($this->isEmpty($data,'id')) return [false,'ID必须!'];
 
         Process::where('id',$data['id'])->update([
-            'del_time',time()
+            'del_time' => time()
         ]);
 
         return [true,'删除成功'];
     }
 
     public function processList($data){
-        $list = Process::where('del_time',0)->select('title','p_id','crt_time','upd_time');
-//        $return = $this->makeTree(0,$list);
-//        $return = $this->set_sort_circle($return);
-        $list = $this->limit($list,'',$list);
+        $model = Process::where('del_time',0)->select('*');
+        if(! empty($data['p_id'])) {
+            $type = BasicProcess::where('del_time',0)
+                ->select('id','parent_id')
+                ->get()->toArray();
+            $result = array_merge($this->getAllDescendants($type,$data['p_id']),[$data['p_id']]);
+            $model->whereIn("p_id", $result);
+        }
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+
+        $list = $this->limit($model,'',$data);
 
         return [200,$list];
     }
@@ -142,5 +159,11 @@ class ProcessService extends Service
         return [true,''];
     }
 
+    public function processDetail($data){
+        if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
+        $first = Process::where('id',$data['id'])->select("*")->first();
+        if(empty($first)) return [true,[]];
 
+        return [true,$first->toArray()];
+    }
 }

+ 14 - 0
app/Service/Service.php

@@ -218,4 +218,18 @@ class Service
         }
         return $longest;
     }
+
+    function getAllDescendants($data, $id) {
+        $result = array(); // 存储结果的数组
+
+        foreach ($data as $node) {
+            if ($node['parent_id'] == $id) { // 如果当前节点的父 ID 等于指定 ID,则将该节点添加到结果中
+                $result[] = $node['id'];
+                // 递归查询该节点的所有子孙节点,并将结果合并到结果数组中
+                $result = array_merge($result, $this->getAllDescendants($data, $node['id']));
+            }
+        }
+
+        return $result;
+    }
 }

+ 96 - 0
app/Service/TechnologyService.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\BasicProcess;
+use App\Model\Process;
+use App\Model\Technology;
+
+/**
+ * 工艺相关
+ * @package App\Models
+ */
+class TechnologyService extends Service
+{
+    public function technologyEdit($data){
+        list($status,$msg) = $this->technologyRule($data);
+        if(!$status) return [$status,$msg];
+        if($this->isEmpty($data,'id')) return [false,'ID不存在'];
+        $first = Technology::where('title',$data['title'])->where('id','<>',$data['id'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Technology();
+        $model = $model->where('id',$data['id'])->first();
+        $model->title = $data['title'];
+        $model->process_id = $data['process_id'];
+        $model->save();
+
+        return [true,'保存成功!'];
+    }
+
+    public function technologyAdd($data,$user){
+        list($status,$msg) = $this->technologyRule($data);
+        if(!$status) return [$status,$msg];
+        $first = Technology::where('title',$data['title'])->where('del_time',0)->first();
+        if(!empty($first))return [false,'名称已存在!'];
+
+        $model = new Technology();
+
+        $model->title = $data['title'];
+        $model->process_id = $data['process_id'];
+        $model->save();
+
+        return [true,'保存成功!'];
+    }
+
+    public function technologyDel($data){
+        if($this->isEmpty($data,'id')) return [false,'ID必须!'];
+
+        Technology::where('id',$data['id'])->update([
+            'del_time' => time()
+        ]);
+
+        return [true,'删除成功'];
+    }
+
+    public function technologyList($data){
+        $model = Technology::where('del_time',0)->select('*');
+
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+
+        $list = $this->limit($model,'',$data);
+
+        return [200,$list];
+    }
+
+    public function technologyRule($data){
+        if($this->isEmpty($data,'title')) return [false,'名称不能为空!'];
+        if($this->isEmpty($data,'process_id')) return [false,'工序不能为空!'];
+
+        return [true,''];
+    }
+
+    public function technologyCopy($data,$user){
+        list($status,$msg) = $this->technologyCopyRule($data);
+        if(! $status) return [$status,$msg];
+
+        $first = Technology::where('id',$data['id'])->where('del_time',0)->first();
+
+        $model = new Technology();
+        $model->title = $data['title'];
+        $model->process_id = $first->process_id;
+        $model->save();
+
+        return [true,'保存成功!'];
+    }
+
+    public function technologyCopyRule($data){
+        if($this->isEmpty($data,'id')) return [false,'复制的工序ID不能为空!'];
+        if($this->isEmpty($data,'title')) return [false,'名称不能为空!'];
+
+        $bool = Technology::where('title',$data['title'])->where('del_time',0)->exists();
+        if($bool) return [false,'名称已存在!'];
+
+        return [true,''];
+    }
+}

+ 0 - 21
public/.htaccess

@@ -1,21 +0,0 @@
-<IfModule mod_rewrite.c>
-    <IfModule mod_negotiation.c>
-        Options -MultiViews -Indexes
-    </IfModule>
-
-    RewriteEngine On
-
-    # Handle Authorization Header
-    RewriteCond %{HTTP:Authorization} .
-    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
-    # Redirect Trailing Slashes If Not A Folder...
-    RewriteCond %{REQUEST_FILENAME} !-d
-    RewriteCond %{REQUEST_URI} (.+)/$
-    RewriteRule ^ %1 [L,R=301]
-
-    # Handle Front Controller...
-    RewriteCond %{REQUEST_FILENAME} !-d
-    RewriteCond %{REQUEST_FILENAME} !-f
-    RewriteRule ^ index.php [L]
-</IfModule>

+ 18 - 3
routes/api.php

@@ -29,7 +29,6 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('employeeDel', 'Api\EmployeeController@employeeDel');
     $route->any('employeeList', 'Api\EmployeeController@employeeList');
 
-
     $route->any('departAdd', 'Api\EmployeeController@departAdd');
     $route->any('departEdit', 'Api\EmployeeController@departEdit');
     $route->any('departDel', 'Api\EmployeeController@departDel');
@@ -41,8 +40,6 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('roleDel', 'Api\EmployeeController@roleDel');
     $route->any('roleList', 'Api\EmployeeController@roleList');
 
-
-
     $route->any('teamAdd', 'Api\EmployeeController@teamAdd');
     $route->any('teamEdit', 'Api\EmployeeController@teamEdit');
     $route->any('teamDel', 'Api\EmployeeController@teamDel');
@@ -68,6 +65,24 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('materialAdd', 'Api\MaterialController@materialAdd');
     $route->any('materialDel', 'Api\MaterialController@materialDel');
 
+    //工序
+    $route->any('basicProcessList', 'Api\ProcessController@basicProcessList');
+    $route->any('basicProcessEdit', 'Api\ProcessController@basicProcessEdit');
+    $route->any('basicProcessAdd', 'Api\ProcessController@basicProcessAdd');
+    $route->any('basicProcessDel', 'Api\ProcessController@basicProcessDel');
+
+    $route->any('processList', 'Api\ProcessController@processList');
+    $route->any('processDetail', 'Api\ProcessController@processDetail');
+    $route->any('processEdit', 'Api\ProcessController@processEdit');
+    $route->any('processAdd', 'Api\ProcessController@processAdd');
+    $route->any('processDel', 'Api\ProcessController@processDel');
+
+    //工艺
+    $route->any('technologyList', 'Api\TechnologyController@technologyList');
+    $route->any('technologyEdit', 'Api\TechnologyController@technologyEdit');
+    $route->any('technologyAdd', 'Api\TechnologyController@technologyAdd');
+    $route->any('technologyDel', 'Api\TechnologyController@technologyDel');
+    $route->any('technologyCopy', 'Api\TechnologyController@technologyCopy');
 
     $route->any('productList', 'Api\MaterialController@productList');
     $route->any('productEdit', 'Api\MaterialController@edit');