cqp пре 10 часа
родитељ
комит
e3de390c35
2 измењених фајлова са 93 додато и 8 уклоњено
  1. 50 8
      app/Service/TestService.php
  2. 43 0
      app/Service/U8ThirtyPartyDatabaseServerService.php

+ 50 - 8
app/Service/TestService.php

@@ -713,10 +713,24 @@ class TestService extends Service
                 'cdefine33' => $data['craft_type_code_b'] ?? null,
             ];
         } elseif ($common_array['site'] == "HCLT") {
+            //根据存货获取自由项的配置
+            $service = new U8ThirtyPartyDatabaseServerService($common_array);
+            list($status, $msg) = $service->getStockFreeItemsByInvCode([$product_code]);
+            if(! $status) return [false, $msg];
+            $p_control = $msg;
+            $cFree1 = $cFree2 = $cFree3 = null;
+            $cFree1_n = $p_control[$product_code]['free1'] ?? 0;
+            $cFree2_n = $p_control[$product_code]['free2'] ?? 0;
+            $cFree3_n = $p_control[$product_code]['free3'] ?? 0;
+            if($cFree1_n) $cFree1 = $data['customer_brand'] ?? '无';
+            if($cFree2_n) $cFree2 = $data['color'] ?? '无';
+            if($cFree3_n) $cFree3 = $data['bar_code'] ?? '无';
+
             // 恒昌结构 (cfree + cdefine22/23 + cdefine28-31)
             $extData = [
-                'cfree1'    => $data['customer_brand'] ?? null,
-                'cfree2'    => $data['color'] ?? null,
+                'cfree1'    => $cFree1,
+                'cfree2'    => $cFree2,
+                'cfree3'    => $cFree3,
                 'cdefine22' => $data['plan_no'] ?? null,
                 'cdefine23' => $data['contract_no'] ?? null,
                 'cdefine28' => $data['technical_require'] ?? null,
@@ -809,11 +823,25 @@ class TestService extends Service
                 'cDefine33' => $data['craft_type_code_b'] ?? null,
             ];
         } elseif ($common_array['site'] == "HCLT") {
+            $product_code = $data['material_code'];
+            //根据存货获取自由项的配置
+            $service = new U8ThirtyPartyDatabaseServerService($common_array);
+            list($status, $msg) = $service->getStockFreeItemsByInvCode([$product_code]);
+            if(! $status) return [false, $msg];
+            $p_control = $msg;
+            $cFree1 = $cFree2 = $cFree3 = null;
+            $cFree1_n = $p_control[$product_code]['free1'] ?? 0;
+            $cFree2_n = $p_control[$product_code]['free2'] ?? 0;
+            $cFree3_n = $p_control[$product_code]['free3'] ?? 0;
+            if($cFree1_n) $cFree1 = $data['customer_brand'] ?? '无';
+            if($cFree2_n) $cFree2 = $data['color'] ?? '无';
+            if($cFree3_n) $cFree3 = $data['bar_code'] ?? '无';
+
             // 恒昌结构 (cfree + cdefine22/23 + cdefine28-31)
             $extData = [
-                'cFree1'    => $data['customer_brand'] ?? '无',
-                'cFree2'    => $data['color'] ?? '无',
-                'cFree3'    => $data['bar_code'] ?? '无',
+                'cFree1'    => $cFree1,
+                'cFree2'    => $cFree2,
+                'cFree3'    => $cFree3,
                 'cDefine22' => $data['plan_no'] ?? null,
                 'cDefine23' => $data['contract_no'] ?? null,
                 'cDefine28' => $data['technical_require'] ?? null,
@@ -899,11 +927,25 @@ class TestService extends Service
                 'cDefine33' => $data['craft_type_code_b'] ?? null,
             ];
         } elseif ($common_array['site'] == "HCLT") {
+            $product_code = $data['material_code'];
+            //根据存货获取自由项的配置
+            $service = new U8ThirtyPartyDatabaseServerService($common_array);
+            list($status, $msg) = $service->getStockFreeItemsByInvCode([$product_code]);
+            if(! $status) return [false, $msg];
+            $p_control = $msg;
+            $cFree1 = $cFree2 = $cFree3 = null;
+            $cFree1_n = $p_control[$product_code]['free1'] ?? 0;
+            $cFree2_n = $p_control[$product_code]['free2'] ?? 0;
+            $cFree3_n = $p_control[$product_code]['free3'] ?? 0;
+            if($cFree1_n) $cFree1 = $data['customer_brand'] ?? '无';
+            if($cFree2_n) $cFree2 = $data['color'] ?? '无';
+            if($cFree3_n) $cFree3 = $data['bar_code'] ?? '无';
+
             // 恒昌结构 (cfree + cdefine22/23 + cdefine28-31)
             $extData = [
-                'cFree1'    => $data['customer_brand'] ?? '无',
-                'cFree2'    => $data['color'] ?? '无',
-                'cFree3'    => $data['bar_code'] ?? '无',
+                'cFree1'    => $cFree1,
+                'cFree2'    => $cFree2,
+                'cFree3'    => $cFree3,
                 'cDefine22' => $data['plan_no'] ?? null,
                 'cDefine23' => $data['contract_no'] ?? null,
                 'cDefine28' => $data['technical_require'] ?? null,

+ 43 - 0
app/Service/U8ThirtyPartyDatabaseServerService.php

@@ -127,6 +127,49 @@ class U8ThirtyPartyDatabaseServerService extends Service
         }
     }
 
+    public function getStockFreeItemsByInvCode(array $invCode = [])
+    {
+        if (empty($invCode)) return [false, '存货编码不能为空'];
+
+        try {
+            // 1. 获取存货定义中的自由项控制开关
+            $details = DB::connection($this->connectionName)
+                ->table('Inventory')
+                ->lock('WITH(NOLOCK)')
+                ->whereIn('cInvCode', $invCode)
+                ->select([
+                    'cInvCode as inv_code',
+                    'cInvName as inv_name',
+                    //  1 表示该存货启用了自由项控制
+                    'bFree1', 'bFree2', 'bFree3', 'bFree4', 'bFree5',
+                    'bFree6', 'bFree7', 'bFree8', 'bFree9', 'bFree10'
+                ])
+                ->get();
+
+            // 2. 转换为 Map 结构:[ 'SKU001' => [ 'bFree1' => 1, ... ], ... ]
+            // 使用 keyBy 指定键名,通过 map 格式化内部值
+            $result = $details->keyBy('inv_code')->map(function ($item) {
+                return [
+                    'free1'  => (int)$item->bFree1,
+                    'free2'  => (int)$item->bFree2,
+                    'free3'  => (int)$item->bFree3,
+                    'free4'  => (int)$item->bFree4,
+                    'free5'  => (int)$item->bFree5,
+                    'free6'  => (int)$item->bFree6,
+                    'free7'  => (int)$item->bFree7,
+                    'free8'  => (int)$item->bFree8,
+                    'free9'  => (int)$item->bFree9,
+                    'free10' => (int)$item->bFree10,
+                ];
+            })->toArray();
+
+            return [true, $result];
+
+        } catch (\Throwable $e) {
+            return [false, "查询自由项配置Map失败: " . $e->getMessage()];
+        }
+    }
+
     /**
      * 更新销售订单明细表 (SO_SODetails) 的 FPurQuan 字段
      * * @param array $data 包含 sale_order_details 的数组