Browse Source

first commit

liuhairui 8 months ago
parent
commit
beea763a70

+ 104 - 66
application/api/controller/Index.php

@@ -1,6 +1,7 @@
 <?php
 namespace app\api\controller;
 use app\common\controller\Api;
+use setasign\Fpdi\PdfReader\PdfReader;
 use think\Controller;
 use think\Db;
 use think\Request;
@@ -1518,7 +1519,10 @@ class Index extends Controller{
     //自动生成面料以及调用---》GPT
     public function GtpAiOrder()
     {
-        $order = Request::instance()->get('订单编号');
+        if (!$this->request->isGet()) {
+            $this->error('请求错误');
+        }
+        $order = $this->request->param('订单编号');
         // 判断是否有指定的订单号
         if (!empty($order)) {
             // 查询单个订单的最大编号
@@ -1545,29 +1549,72 @@ class Index extends Controller{
             $newNumericPart = str_pad((int)$numericPart + 1, strlen($numericPart), '0', STR_PAD_LEFT);
             $param['订单编号'] = $order . $newNumericPart;
 
-            // 处理物料信息
+            // 假设massage是从数据库获取的数据
             $massage = empty($list['粘衬']) || $list['粘衬'] == '无' ? $list['面料'] : $list['面料'] . ',粘衬:' . $list['粘衬'];
+
+            $materialCategories = [];
+            $pattern = '/(\S+?):([^,]+)/'; // 匹配 类别:物料 格式
+
+            preg_match_all($pattern, $massage, $matches, PREG_SET_ORDER);
+
+            foreach ($matches as $match) {
+                $category = $match[1]; // 分类名称
+                $materials = explode('+', $match[2]); // 如果物料名称中有‘+’,则分开处理多个物料
+
+                // 将分类和对应的物料添加到数组中
+                foreach ($materials as $material) {
+                    $materialCategories[$category][] = trim($material); // 去除物料两边的空格
+                }
+            }
+
             $mianliao = $this->Gpt($massage);
 
-            // 插入物料数据
             $data = [];
-            foreach ($mianliao as $key => $value) {
+            foreach ($mianliao as $value) {
                 if (!empty($value) && $value !== '粘衬') { // 排除空值和粘衬
+                    $category = '';
+
+                    // 查找物料对应的分类
+                    foreach ($materialCategories as $cat => $materials) {
+                        if (in_array($value, $materials)) {
+                            $category = $cat;
+                            break;
+                        }
+                    }
+
+                    // 如果找到分类,将数据存入BOM
                     $data[] = [
                         'BOM_工单编号' => $list['订单编号'],
                         'BOM_物料名称' => $value,
+                        'BOM_desc' => '',
+                        '物料分类' => $category ? $category : '',
                         'Sys_rq' => date('Y-m-d H:i:s'),
                         'Sys_ID' => '超级管理员'
                     ];
                 }
             }
-
-            // 批量插入BOM资料
-            if (!empty($data)) {
-                \db('工单_bom资料')->insertAll($data);
+            foreach ($data as &$item) {
+                if (empty($item['物料分类'])) {
+                    $item['物料分类'] = '';
+                }
+                // 去除所有非汉字字符
+                $item['物料分类'] = preg_replace('/[^\p{Han}]/u', '', $item['物料分类']);
             }
 
-            $this->success('成功', $order);
+
+//// 批量更新 BOM_desc,如果对应的 BOM_desc 没有填充就更新
+//            foreach ($data as $item) {
+//                if (!empty($item['物料分类'])) {
+//                    \db('工单_bom资料')->insertAll($data);
+//
+////                    \db('工单_面料资料')
+////                        ->where('BOM_工单编号', $item['BOM_工单编号'])
+////                        ->where('BOM_物料名称', $item['BOM_物料名称'])
+////                        ->update(['BOM_desc' => preg_replace('/[^\w\s]/u', '', $item['BOM_desc'])]);
+//
+//                }
+//            }
+//            $this->success('成功',$order);
         } else {
             // 如果没有指定订单号,批量查询订单号并处理
             $has_bom = \db('工单_bom资料')->alias('a')->field('a.BOM_工单编号')->group('a.BOM_工单编号')->select();
@@ -1581,67 +1628,55 @@ class Index extends Controller{
                 return !in_array($order['订单编号'], $has_bom_orders);
             });
 
-            // 统计成功更新的订单编号
-            $successOrders = [];
-
-            // 每次处理五个订单号
-            $batchSize = 5;
-            $totalOrders = count($no_bom_orders);
-            $batches = array_chunk($no_bom_orders, $batchSize); // 将订单分批
-
-            foreach ($batches as $batch) {
-                foreach ($batch as $orderData) {
-                    // 获取该订单号的最大订单编号
-                    $maxOrder = \db('工单_基本资料')
-                        ->where('订单编号', 'like', "{$orderData['订单编号']}%")
-                        ->order('订单编号', 'desc')
-                        ->limit(1)
-                        ->value('订单编号');
-
-                    // 获取该订单号的具体数据
-                    $list = \db('工单_基本资料')
-                        ->where('订单编号', 'like', "{$orderData['订单编号']}%")
-                        ->order('订单编号', 'desc')
-                        ->limit(1)
-                        ->find();
-
-                    if (empty($list['面料'])) {
-                        $this->error("订单 {$orderData['订单编号']} 面料数据为空,无法定义BOM");
-                    }
+            // 遍历没有BOM资料的订单
+            foreach ($no_bom_orders as $orderData) {
+                // 获取该订单号的最大订单编号
+                $maxOrder = \db('工单_基本资料')
+                    ->where('订单编号', 'like', "{$orderData['订单编号']}%")
+                    ->order('订单编号', 'desc')
+                    ->limit(1)
+                    ->value('订单编号');
+
+                // 获取该订单号的具体数据
+                $list = \db('工单_基本资料')
+                    ->where('订单编号', 'like', "{$orderData['订单编号']}%")
+                    ->order('订单编号', 'desc')
+                    ->limit(1)
+                    ->find();
+
+                if (empty($list['面料'])) {
+                    $this->error("订单 {$orderData['订单编号']} 面料数据为空,无法定义BOM");
+                }
 
-                    // 处理订单编号
-                    $numericPart = substr($maxOrder, 2);
-                    $newNumericPart = str_pad((int)$numericPart + 1, strlen($numericPart), '0', STR_PAD_LEFT);
-                    $param['订单编号'] = $order . $newNumericPart;
-
-                    // 处理物料信息
-                    $massage = empty($list['粘衬']) || $list['粘衬'] == '无' ? $list['面料'] : $list['面料'] . ',粘衬:' . $list['粘衬'];
-                    $mianliao = $this->Gpt($massage);
-
-                    // 插入物料数据
-                    $data = [];
-                    foreach ($mianliao as $key => $value) {
-                        if (!empty($value) && $value !== '粘衬') { // 排除空值和粘衬
-                            $data[] = [
-                                'BOM_工单编号' => $list['订单编号'],
-                                'BOM_物料名称' => $value,
-                                'Sys_rq' => date('Y-m-d H:i:s'),
-                                'Sys_ID' => '超级管理员'
-                            ];
-                        }
+                // 处理订单编号
+                $numericPart = substr($maxOrder, 2);
+                $newNumericPart = str_pad((int)$numericPart + 1, strlen($numericPart), '0', STR_PAD_LEFT);
+                $param['订单编号'] = $order . $newNumericPart;
+
+                // 处理物料信息
+                $massage = empty($list['粘衬']) || $list['粘衬'] == '无' ? $list['面料'] : $list['面料'] . ',粘衬:' . $list['粘衬'];
+                $mianliao = $this->Gpt($massage);
+                // 插入物料数据
+                $data = [];
+                foreach ($mianliao as $key => $value) {
+                    if (!empty($value) && $value !== '粘衬') { // 排除空值和粘衬
+                        $data[] = [
+                            'BOM_工单编号' => $list['订单编号'],
+                            'BOM_物料名称' => $value,
+                            'BOM_desc' => '',
+                            '物料分类' => '',
+                            'Sys_rq' => date('Y-m-d H:i:s'),
+                            'Sys_ID' => '超级管理员'
+                        ];
                     }
+                }
 
-                    // 批量插入BOM资料
-                    if (!empty($data)) {
-                        \db('工单_bom资料')->insertAll($data);
-                        // 记录成功的订单编号
-                        $successOrders[] = $orderData['订单编号'];
-                    }
+                // 批量插入BOM资料
+                if (!empty($data)) {
+                    \db('工单_bom资料')->insertAll($data);
                 }
             }
-
-            // 打印成功更新的订单编号
-            $this->success('成功更新的订单编号:' . implode(', ', $successOrders));
+            $this->success('成功');
         }
     }
     //GPT
@@ -1657,7 +1692,6 @@ class Index extends Controller{
                 'content' => '你好,帮我按照:面料1、面料2、面料3……来整理归纳下面的面料信息,我只需要面料信息,不需要其他:'.$massage
             ]
         ];
-
         // 创建请求数据
         $data = [
             'model' => 'gpt-3.5-turbo', // 使用的模型
@@ -1709,5 +1743,9 @@ class Index extends Controller{
         }
     }
 
+
+
+
+
 }
 

+ 10 - 69
application/api/controller/Manufacture.php

@@ -1394,7 +1394,8 @@ class Manufacture extends Api
         // 准备更新数据
         $data = [
             '审核日期' => date('Y-m-d H:i:s'),
-            '审核' => $param['sys_id'], // sys_id(如"超级管理员")是固定的
+            '审核' => $param['sys_id'],
+//            'gd_statu' => '3-已完工',
         ];
         // 遍历所有Uniqid进行更新
         foreach ($uniqids as $uniqid) {
@@ -1423,11 +1424,6 @@ class Manufacture extends Api
 
         $param = $this->request->param();
 
-//        // 参数为空时返回错误
-//        if (empty($param['search'])) {
-//            $this->error('搜索关键词不能为空');
-//        }
-
         // 设置查询条件
         $where = [
             'Mod_rq' => null,
@@ -1440,7 +1436,6 @@ class Manufacture extends Api
         // 获取工单列表
         $list = \db('工单_基本资料')
             ->where($where)
-//            ->orderRaw("FIELD(gd_statu, '1-计划中', '2-生产中')")
             ->order('订单编号 desc')
             ->limit(($page - 1) * $limit, $limit)
             ->select();
@@ -1449,8 +1444,6 @@ class Manufacture extends Api
         $count = \db('工单_基本资料')
             ->where($where)
             ->count();  // 使用 count() 方法优化
-
-        // 提取所有订单编号
         $orderIds = array_column($list, '订单编号');
 
         // 合并查询相关附件
@@ -1514,6 +1507,14 @@ class Manufacture extends Api
                     $value[$fieldName] = $s_num_sum; // 其他工序存储 s_num 总和
                 }
             }
+
+            if ($value['落货日期']) {
+                $value['落货日期'] = date('Y-m-d', strtotime($value['落货日期']));
+            }
+            // 格式化接单日期,去掉时间部分
+            if ($value['接单日期']) {
+                $value['接单日期'] = date('Y-m-d', strtotime($value['接单日期']));
+            }
         }
 
         // 返回数据
@@ -1526,66 +1527,6 @@ class Manufacture extends Api
     }
 
 
-//    public function UnapprovalList()
-//    {
-//        if ($this->request->isGet() === false){
-//            $this->error('请求错误');
-//        }
-//        $param = $this->request->param();
-//        if (isset($param)){
-//            $where['订单编号|生产款号'] = ['like','%'.$param['search'].'%'];
-//        }
-//        $page = $param['page'];
-//        $limit = $param['limit'];
-//        $where['Mod_rq'] = null;
-//        $list = \db('工单_基本资料')
-//            ->where($where)
-//            ->orderRaw("FIELD(gd_statu, '1-计划中', '2-生产中')")
-//            ->order('订单编号 desc')
-//            ->limit(($page-1)*$limit,$limit)
-//            ->select();
-//
-//        $count = \db('工单_基本资料')
-//            ->where($where)
-//            ->orderRaw("FIELD(gd_statu, '1-计划中', '2-生产中')")
-//            ->order('订单编号 desc')
-//            ->select();
-//
-//        // 提取所有订单编号
-//        $orderIds = array_column($list, '订单编号');
-//        // 查询相关附件中是否存在这些订单编号
-//        $relatedOrders = \db('工单_相关附件')
-//            ->whereIn('关联编号', $orderIds)
-//            ->whereIn('附件备注', '技术附件')
-//            ->column('关联编号');
-//        $orderAttachments = \db('工单_相关附件')
-//            ->whereIn('关联编号', $orderIds)
-//            ->whereIn('附件备注', '订单资料附件')
-//            ->column('关联编号');
-//        // 遍历数据,为每个订单设置 status,并替换字段名
-//        foreach ($list as &$value) {
-//            // 设置订单状态
-//            if (in_array($value['订单编号'], $relatedOrders)) {
-//                $value['status'] = '';
-//            } else {
-//                $value['status'] = '*';
-//            }
-//            if (in_array($value['订单编号'], $orderAttachments)) {
-//                $value['orderstatus'] = '';
-//            } else {
-//                $value['orderstatus'] = '*';
-//            }
-//            // 将「工单入仓数量」字段替换为「工单完工数量」
-//            if (isset($value['工单入仓数量'])) {
-//                $value['工单完工数量'] = $value['工单入仓数量'];
-//                unset($value['工单入仓数量']);
-//            }
-//        }
-//        $data['total'] = count($count);
-//        $data['table'] = $list;
-//        $this->success('成功',$data);
-//    }
-
     /**
      * 月度客户订单汇总
      */

+ 1 - 1
application/api/controller/SubWorkorderStatus.php

@@ -169,7 +169,7 @@ class SubWorkorderStatus extends Api
         if (empty($param)){
             $this->error('参数错误');
         }
-        if($param['process'] === ''){
+        if (!isset($param['process']) || $param['process'] === '') {
             $param['process'] = '车缝';
         }
         //车缝码包号

+ 196 - 43
application/api/controller/WorkOrder.php

@@ -131,6 +131,7 @@ class WorkOrder extends Api
         $relatedOrders = \db('工单_相关附件')
             ->whereIn('关联编号', $orderIds)
             ->whereIn('附件备注', '技术附件')
+            ->whereNull('mod_rq')
             ->column('关联编号');
 
         // 遍历数据,判断每个订单编号是否在相关附件表中
@@ -140,8 +141,16 @@ class WorkOrder extends Api
             } else {
                 $value['status'] = '*'; // 没有相关附件,标记为新订单
             }
+            if ($value['落货日期']) {
+                $value['落货日期'] = date('Y-m-d', strtotime($value['落货日期']));
+            }
+            // 格式化接单日期,去掉时间部分
+            if ($value['接单日期']) {
+                $value['接单日期'] = date('Y-m-d', strtotime($value['接单日期']));
+            }
         }
 
+
         $this->success('成功', ['data' => $list, 'total' => count($count)]);
     }
 
@@ -813,8 +822,41 @@ class WorkOrder extends Api
             $this->error('不支持的附件类型');
         }
 
+        // 获取最新的记录,按 sys_rq 降序排列
+        $latestItems = \db('工单_相关附件')
+            ->where('关联编号', $relateId)  // 根据关联编号筛选
+            ->where('附件备注', $req['附件备注'])  // 根据附件备注筛选
+            ->whereNull('mod_rq')
+            ->order('sys_rq desc')  // 按照 sys_rq 降序排列
+            ->group('关联编号')  // 按关联编号分组,获取每个订单的最新记录
+            ->find();
+
+        // 假设获取到的 version 字段是类似 v1.1, v1.2, v1.9 这样的格式
+        $currentVersion = $latestItems['version'];  // 当前记录的 version
+
+        // 解析当前版本号
+        if (preg_match('/v(\d+)\.(\d+)/', $currentVersion, $matches)) {
+            $majorVersion = (int)$matches[1];  // 主版本号
+            $minorVersion = (int)$matches[2];  // 次版本号
+
+            // 递增次版本号,若次版本号为 9,则主版本号加 1,次版本号置为 0
+            if ($minorVersion < 9) {
+                $minorVersion++;
+            } else {
+                $majorVersion++;
+                $minorVersion = 0;
+            }
+
+            // 生成新的版本号
+            $newVersion = 'v' . $majorVersion . '.' . $minorVersion;
+        } else {
+            // 如果没有匹配到版本号(例如没有 `v`),可以默认从 `v1.0` 开始
+            $newVersion = 'v1.0';
+        }
+
         // 组织数据
         $data = [
+            'version' => $newVersion,
             '关联编号' => $relateId,
             'sys_id' => $req['sys_id'],
             '附件备注' => $req['附件备注'],
@@ -1466,54 +1508,123 @@ class WorkOrder extends Api
             $this->error('请求错误');
         }
         $param = $this->request->param();
-        if (empty($param)){
-            $this->error('参数错误');
+        $page = input('page');
+        $limit = input('limit');
+        if($param['order'] == ''){
+            //查询全部附件
+            $list = \db('工单_相关附件')
+                ->field('UniqId, mod_rq, pdf, sys_id, sys_rq, updatetime, url, version,
+                    关联编号, 
+                    关联编号 as 订单编号,  
+                    附件内容, 附件备注, 附件类型')
+                ->where('附件备注', '技术附件')
+                ->where('version', '<>', '')
+                ->whereNull('mod_rq')
+                ->limit(($page - 1) * $limit, $limit)
+                ->order('sys_rq desc')
+                ->select();
+            $count = \db('工单_相关附件')
+                ->field('UniqId, mod_rq, pdf, sys_id, sys_rq, updatetime, url, version,
+                    关联编号, 
+                    关联编号 as 订单编号,  
+                    附件内容, 附件备注, 附件类型')
+                ->where('附件备注', '技术附件')
+                ->where('version', '<>', '')
+                ->whereNull('mod_rq')
+                ->order('sys_rq desc')
+                ->count();
+            $data['total'] = $count;
+            $data['list'] = $list;
+            $this->success('成功',$data);
+        }else{
+            //查询订单对应附件
+            $list = \db('工单_相关附件')
+                ->field('UniqId, mod_rq, pdf, sys_id, sys_rq, updatetime, url, version,
+                    关联编号, 
+                    关联编号 as 订单编号,  
+                    附件内容, 附件备注, 附件类型')
+                ->where('关联编号', $param['order'])
+                ->where('附件备注', $param['desc'])
+                ->where('version', '<>', '')
+                ->whereNull('mod_rq')
+                ->order('sys_rq desc')
+                ->select();
+            $this->success('成功', $list);
+        }
+    }
+
+    /**
+     * 工单附件删除
+     */
+    public function delfujian(){
+        if (!$this->request->isPost()) {
+            $this->error('非法请求');
+        }
+        $params = $this->request->param();
+        $updateData = [
+            'mod_rq' => date('Y-m-d H:i:s'),
+        ];
+        $res = \db('工单_相关附件')->where('UniqId', $params['UniqId'])->update($updateData);
+        if ($res) {
+            $this->success('删除成功');
+        } else {
+            $this->error('删除失败');
         }
-        $list = \db('工单_相关附件')
-            ->where('关联编号',$param['order'])
-            ->where('附件备注',$param['desc'])
-            ->whereNull('Mod_rq')
-            ->order('sys_rq desc')
-            ->limit(1)
-            ->select();
-        $this->success('成功',$list);
     }
 
 
     /**
      * 订单BOM资料显示
-     * @return void
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\ModelNotFoundException
-     * @throws \think\exception\DbException
      */
     public function OrderBomList()
     {
-        if ($this->request->isGet() === false){
+        if ($this->request->isGet() === false) {
             $this->error('请求错误');
         }
         $param = $this->request->param();
-        if (empty($param) || !isset($param['order'])){
+        if (empty($param) || !isset($param['order'])) {
             $this->error('参数错误');
         }
-        $where = ['a.BOM_工单编号'=>$param['order']];
+        $where = ['a.BOM_工单编号' => $param['order']];
+
         $list = \db('工单_bom资料')
             ->alias('a')
-            ->join('工单_基本资料 b','b.订单编号 = a.BOM_工单编号')
+            ->join('工单_基本资料 b', 'b.订单编号 = a.BOM_工单编号')
             ->field('a.BOM_工单编号 as 订单编号,b.生产款号 as 生产款号,b.客户编号 as 客户编号,b.款式 as 款式,
             a.BOM_物料名称 as 物料名称,a.BOM_投料单位 as 投料单位,a.BOM_计划用量 as 计划用料,a.BOM_标准用量 as 定额用料,
-            a.BOM_实际用量 as 裁床实际用料,a.BOM_desc as 备注,a.UNIQID,
+            a.BOM_实际用量 as 裁床实际用料,a.BOM_desc as 备注,a.UNIQID,a.物料分类,
             a.BOM_计划门幅 as 计划门幅, a.BOM_定额门幅 as 定额门幅,a.Sys_ID as ID,a.Sys_rq as 日期')
             ->where($where)
             ->whereNull('a.Mod_rq')
             ->select();
+
         if (!empty($list)) {
+            // 获取去重后的物料名称
+            $materialNames = array_column($list, '物料名称');
+            $materialNames = array_unique($materialNames);
+
+            // 根据去重后的物料名称查询工单_面料资料表,并获取BOM_desc
+            $materialDetails = \db('工单_面料资料')
+                ->field('BOM_物料名称 as 物料名称,BOM_desc')
+                ->whereIn('BOM_物料名称', $materialNames)
+                ->select();
+
+            // 将物料名称与BOM_desc对应起来
+            $materialDescMap = [];
+            foreach ($materialDetails as $detail) {
+                $materialDescMap[$detail['物料名称']] = $detail['BOM_desc'];
+            }
+            // 在list中添加对应的BOM_desc
+            foreach ($list as &$item) {
+                if (isset($materialDescMap[$item['物料名称']])) {
+                    $item['BOM_desc'] = $materialDescMap[$item['物料名称']];
+                } else {
+                    $item['BOM_desc'] = '';
+                }
+            }
             $this->success('成功', $list);
         } else {
-            // 调用其他方法处理逻辑(例如记录日志、执行其他操作等)
             $this->GdGtpAiOrder($param['order']);
-
-            // 返回空数据的统一处理
             return $this->success('没有找到相关数据', []);
         }
     }
@@ -1526,43 +1637,30 @@ class WorkOrder extends Api
         if ($this->request->isGet() === false) {
             $this->error('请求错误');
         }
-
-        // 获取请求参数
         $param = $this->request->param();
-
-        // 检查参数是否为空或者缺少UNIQID
         if (empty($param) || !isset($param['UNIQID'])) {
             $this->error('参数错误');
         }
-
-        // 判断UNIQID是否是逗号分隔的多个ID,如果是则拆分成数组,否则直接处理为单个ID
         $uniqids = strpos($param['UNIQID'], ',') !== false ? explode(',', $param['UNIQID']) : [$param['UNIQID']];
-
         $where = [];
         $where['Mod_rq'] = date('Y-m-d H:i:s', time());
 
-        // 定义一个标志变量来追踪是否所有更新都成功
         $allUpdated = true;
         $failedUniqids = [];
         // 遍历所有UNIQID并更新数据库
         foreach ($uniqids as $uniqid) {
-            // 更新指定UNIQID的记录
             $result = \db('工单_bom资料')
                 ->where('UNIQID', $uniqid)
                 ->update($where);
-
-            // 检查更新结果
             if (!$result) {
                 // 如果某个UNIQID更新失败,记录失败的ID
                 $allUpdated = false;
                 $failedUniqids[] = $uniqid;
             }
         }
-
-        // 如果所有更新都成功,返回成功信息
         if ($allUpdated) {
             $list = \db('工单_bom资料')
-                ->whereIn('UNIQID', $uniqids)  // 查询所有传入的UNIQID
+                ->whereIn('UNIQID', $uniqids)
                 ->select();
             if (!empty($list)) {
                 $this->success('删除成功');
@@ -1571,7 +1669,6 @@ class WorkOrder extends Api
                 return $this->success('没有找到相关数据', []);
             }
         } else {
-            // 如果有更新失败的记录,返回失败的UNIQID
             $this->error('部分更新失败,无法更新以下UNIQID: ' . implode(', ', $failedUniqids));
         }
 
@@ -1621,12 +1718,16 @@ class WorkOrder extends Api
                     $data[] = [
                         'BOM_工单编号' => $list['订单编号'],
                         'BOM_物料名称' => $value,
-                        'BOM_desc' => $massage,
+                        'BOM_desc' => '',
+                        '物料分类' => '',
                         'Sys_rq' => date('Y-m-d H:i:s'),
-                        'Sys_ID' => '超级管理员'
+                        'Sys_ID' => $list['Sys_id']
                     ];
                 }
             }
+            echo "<pre>";
+            print_r($data);
+            echo "<pre>";
             // 批量插入BOM资料
             if (!empty($data)) {
                 \db('工单_bom资料')->insertAll($data);
@@ -1671,22 +1772,74 @@ class WorkOrder extends Api
                 $newNumericPart = str_pad((int)$numericPart + 1, strlen($numericPart), '0', STR_PAD_LEFT);
                 $param['订单编号'] = $order . $newNumericPart;
 
-                // 处理物料信息
+//                // 处理物料信息
+//                $massage = empty($list['粘衬']) || $list['粘衬'] == '无' ? $list['面料'] : $list['面料'] . ',粘衬:' . $list['粘衬'];
+//                $mianliao = $this->Gpt($massage);
+//                // 插入物料数据
+//                $data = [];
+//                foreach ($mianliao as $key => $value) {
+//                    if (!empty($value) && $value !== '粘衬') { // 排除空值和粘衬
+//                        $data[] = [
+//                            'BOM_工单编号' => $list['订单编号'],
+//                            'BOM_物料名称' => $value,
+//                            'BOM_desc' => '',
+//                            '物料分类' => '',
+//                            'Sys_rq' => date('Y-m-d H:i:s'),
+//                            'Sys_ID' => '超级管理员'
+//                        ];
+//                    }
+//                }
+                // 假设massage是从数据库获取的数据
                 $massage = empty($list['粘衬']) || $list['粘衬'] == '无' ? $list['面料'] : $list['面料'] . ',粘衬:' . $list['粘衬'];
+
+                $materialCategories = [];
+                $pattern = '/(\S+?):([^,]+)/'; // 匹配 类别:物料 格式
+
+                preg_match_all($pattern, $massage, $matches, PREG_SET_ORDER);
+
+                foreach ($matches as $match) {
+                    $category = $match[1]; // 分类名称
+                    $materials = explode('+', $match[2]); // 如果物料名称中有‘+’,则分开处理多个物料
+
+                    // 将分类和对应的物料添加到数组中
+                    foreach ($materials as $material) {
+                        $materialCategories[$category][] = trim($material); // 去除物料两边的空格
+                    }
+                }
+
                 $mianliao = $this->Gpt($massage);
-                // 插入物料数据
+
                 $data = [];
-                foreach ($mianliao as $key => $value) {
+                foreach ($mianliao as $value) {
                     if (!empty($value) && $value !== '粘衬') { // 排除空值和粘衬
+                        $category = '';
+
+                        // 查找物料对应的分类
+                        foreach ($materialCategories as $cat => $materials) {
+                            if (in_array($value, $materials)) {
+                                $category = $cat;
+                                break;
+                            }
+                        }
+
+                        // 如果找到分类,将数据存入BOM
                         $data[] = [
                             'BOM_工单编号' => $list['订单编号'],
                             'BOM_物料名称' => $value,
-                            'BOM_desc' => $massage,
+                            'BOM_desc' => '',
+                            '物料分类' => $category ? $category : '',
                             'Sys_rq' => date('Y-m-d H:i:s'),
                             'Sys_ID' => '超级管理员'
                         ];
                     }
                 }
+                foreach ($data as &$item) {
+                    if (empty($item['物料分类'])) {
+                        $item['物料分类'] = '';
+                    }
+                    // 去除所有非汉字字符
+                    $item['物料分类'] = preg_replace('/[^\p{Han}]/u', '', $item['物料分类']);
+                }
 
                 // 批量插入BOM资料
                 if (!empty($data)) {