unknown 5 месяцев назад
Родитель
Сommit
d56e677f38
1 измененных файлов с 54 добавлено и 695 удалено
  1. 54 695
      application/api/controller/OrderSuperLoss.php

+ 54 - 695
application/api/controller/OrderSuperLoss.php

@@ -1776,7 +1776,8 @@ class OrderSuperLoss extends Api
         b.`外发废`,  
         SUM(b.`班组制程废品`) AS zcfp,  
         `工单质检废` AS 工单质检废,
-        c.质量考核  
+        c.质量考核,
+        c.工单类型
     ';
 
         // 子查询:计算所有记录的 jjcp_sl 总和(入仓数量)
@@ -2188,6 +2189,7 @@ class OrderSuperLoss extends Api
             })
             ->field('a.jjcp_gdbh,a.jjcp_yjno')
             ->group('a.jjcp_gdbh,a.jjcp_yjno')
+            ->fetchSql(true)
             ->select();
         $i = 0;
         foreach ($list as $item){
@@ -2212,700 +2214,6 @@ class OrderSuperLoss extends Api
     }
 
 
-//    public function OneOrderSuperLoss($gdbh, $yjno)
-//    {
-//        $param = ['gdbh' => $gdbh, 'yjno' => $yjno];
-//
-//        try {
-//            // 获取基础数据
-//            $baseData = $this->getBaseData($param);
-//            if (!$baseData) return false;
-//
-//            // 处理基础数据
-//            $processedData = $this->processBaseData($baseData);
-//            if (!$processedData) return false;
-//
-//            // 处理废品数据
-//            $wasteData = $this->processWasteData($baseData['workOrderData'], $processedData['ls'], $processedData['ks']);
-//
-//            // 计算无形损
-//            $processedData['intangible_loss'] = (int)($processedData['实际投料'] * 10000 - $baseData['total_number'] - $wasteData['waste_total']);
-//
-//            // 获取工序数据
-//            $processData = $this->calculateProcessData($baseData, $processedData, $wasteData);
-//
-//            // 格式化最终结果
-//            return $this->formatFinalResult($processedData, $processData, $wasteData, $baseData);
-//
-//        } catch (\Exception $e) {
-//            Log::error("工单损耗计算失败: {$gdbh}-{$yjno} - " . $e->getMessage());
-//            return false;
-//        }
-//    }
-//
-//    /**
-//     * 获取基础数据 - 减少数据库查询次数
-//     */
-//    private function getBaseData($param)
-//    {
-//        return Db::transaction(function() use ($param) {
-//            // 查询工单入仓数据
-//            $workOrderData = Db::name('成品入仓')
-//                ->where('jjcp_gdbh', $param['gdbh'])
-//                ->where('jjcp_yjno', $param['yjno'])
-//                ->where('jjcp_smb', '末 板')
-//                ->find();
-//
-//            if (!$workOrderData) return false;
-//
-//            // 入仓数量
-//            $total_number = Db::name('成品入仓')
-//                ->where('jjcp_gdbh', $param['gdbh'])
-//                ->where('jjcp_yjno', $param['yjno'])
-//                ->sum('jjcp_sl');
-//
-//            // 查询工单资料、投料数据
-//            $field = 'a.Gd_gdbh, rtrim(a.成品代号) as 成品代号, rtrim(a.成品名称) as 成品名称,
-//                  rtrim(a.销售订单号) as 销售订单号, a.订单数量, c.yj_ls as ls, c.yj_ks as ks,
-//                  SUM(b.st_sl) as 投料, b.st_dw, c.yj_zzmc, c.yj_tlgg, SUM(b.mod_number) as mod_num';
-//
-//            $material_data = Db::name('工单_基本资料')
-//                ->alias('a')
-//                ->join('物料_收发记录 b', 'a.Gd_gdbh = b.st_gdbh AND a.Gd_cpdh = b.cpdh')
-//                ->join('工单_印件资料 c', 'c.Yj_Gdbh = a.Gd_gdbh AND c.yj_Yjdh = a.Gd_cpdh')
-//                ->where('a.Gd_Gdbh', $param['gdbh'])
-//                ->where('c.yj_Yjno', $param['yjno'])
-//                ->whereIn('b.仓库编号', ['101', 'Y101'])
-//                ->field($field)
-//                ->find();
-//
-//            if (empty($material_data['投料'])) {
-//                return false;
-//            }
-//
-//            // 获取工序数据
-//            $gxh_data = $this->getProcessData($workOrderData);
-//
-//            return [
-//                'workOrderData' => $workOrderData,
-//                'total_number' => $total_number,
-//                'material_data' => $material_data,
-//                'gxh_data' => $gxh_data,
-//                'param' => $param
-//            ];
-//        });
-//    }
-//
-//    /**
-//     * 获取工序数据 - 使用IN查询优化
-//     */
-//    private function getProcessData($workOrderData)
-//    {
-//        $gxh_sql = "SELECT DISTINCT sczl_gxh FROM (
-//        SELECT sczl_gxh FROM 设备_产量计酬
-//        WHERE sczl_gdbh = ? AND sczl_yjno = ?
-//        UNION
-//        SELECT sczl_gxh FROM db_sczl
-//        WHERE sczl_gdbh = ? AND sczl_yjno = ?
-//    ) AS combined_result";
-//
-//        $gxh_arr = Db::query($gxh_sql, [
-//            $workOrderData['jjcp_gdbh'], $workOrderData['jjcp_yjno'],
-//            $workOrderData['jjcp_gdbh'], $workOrderData['jjcp_yjno']
-//        ]);
-//
-//        return array_map(function($v) {
-//            $v = (int)$v['sczl_gxh'];
-//            return $v < 10 ? '0' . $v : $v;
-//        }, $gxh_arr);
-//    }
-//
-//    /**
-//     * 处理基础数据 - 批量处理减少循环
-//     */
-//    private function processBaseData($baseData)
-//    {
-//        $data = $baseData['material_data'];
-//
-//        // 处理单位转换
-//        if (!empty($data['yj_tlgg'])) {
-//            $number1 = (int)substr($data['yj_tlgg'], 0, 3);
-//            $number2 = (int)substr($data['yj_tlgg'], 4, 3);
-//            preg_match('/(\d+)g/', $data['yj_zzmc'], $matches);
-//
-//            if ($data['st_dw'] === '吨' && !empty($matches[1])) {
-//                $data['投料'] = round(($data['投料'] * 1000 * 1000) / $matches[1] / ($number1 * $number2) * 1000000);
-//                $data['st_dw'] = '张';
-//            }
-//        }
-//
-//        // 设置默认值
-//        $data['ls'] = $data['ls'] == 0 ? 1 : $data['ls'];
-//        $data['ks'] = $data['ks'] == 0 ? 1 : $data['ks'];
-//
-//        // 计算实际投料
-//        $data['实际投料'] = str_replace(',', '', number_format(
-//            $data['投料'] * $data['ls'] * $data['ks'] / 10000, 4
-//        ));
-//
-//        // 调用计划处理
-//        (new WorkOrder())->PlannedProcessYield(
-//            $baseData['param']['gdbh'],
-//            $baseData['param']['yjno'],
-//            0,
-//            $data['实际投料'] * 10000 / $data['ls']
-//        );
-//
-//        return array_merge($data, [
-//            'warehousing_num' => $baseData['total_number'],
-//            'warehousing_date' => substr($baseData['workOrderData']['jjcp_sj'], 0, 10),
-//            'gxh_values' => $baseData['gxh_data']
-//        ]);
-//    }
-//
-//    /**
-//     * 处理废品数据 - 优化循环和查询
-//     */
-//    private function processWasteData($workOrderData, $ls, $ks)
-//    {
-//        $result = [
-//            'material' => [], 'change' => [], 'list' => [],
-//            'quality' => [], 'machine' => [], 'zcfp' => 0
-//        ];
-//
-//        // 获取制程废品
-//        $zzfp_data = Db::name('设备_产量计酬')
-//            ->where('sczl_gdbh', $workOrderData['jjcp_gdbh'])
-//            ->where('sczl_yjno', $workOrderData['jjcp_yjno'])
-//            ->sum('sczl_zcfp');
-//
-//        $result['zcfp'] = $zzfp_data * $ls * $ks;
-//
-//        // 获取废品数据
-//        $waste_out = $this->getWasteOutData($workOrderData);
-//
-//        // 批量处理废品分类
-//        foreach ($waste_out as $entry) {
-//            for ($i = 1; $i <= 13; $i++) {
-//                $this->classifyWaste($entry, $i, $result);
-//            }
-//        }
-//
-//        // 计算废品合计
-//        $wasteTotal = Db::name('db_qczl')
-//            ->where('qczl_gdbh', $workOrderData['jjcp_gdbh'])
-//            ->where('qczl_yjno', $workOrderData['jjcp_yjno'])
-//            ->sum('qczl_fp') ?: 0;
-//
-//        $result['waste_total'] = $result['zcfp'] + $wasteTotal;
-//
-//        // 计算汇总数据
-//        $result['材料废'] = array_sum($result['material']);
-//        $result['零头处理'] = array_sum($result['change']);
-//        $result['外发废'] = array_sum($result['list']);
-//        $result['工单质检废'] = array_sum($result['quality']);
-//        $result['机检废'] = array_sum($result['machine']);
-//
-//        return $result;
-//    }
-//
-//    /**
-//     * 获取废品输出数据
-//     */
-//    private function getWasteOutData($workOrderData)
-//    {
-//        $fields = [];
-//        for ($i = 1; $i <= 13; $i++) {
-//            $fields = array_merge($fields, [
-//                "fp_sl{$i}", "fp_lb{$i}", "fp_bh{$i}",
-//                "fp_gxmc{$i}", "fp_bz{$i}"
-//            ]);
-//        }
-//
-//        return Db::name('db_qczl')
-//            ->where('qczl_gdbh', $workOrderData['jjcp_gdbh'])
-//            ->where('qczl_yjno', $workOrderData['jjcp_yjno'])
-//            ->field(array_merge($fields, ['UniqId', 'qczl_num']))
-//            ->select();
-//    }
-//
-//    /**
-//     * 分类废品数据
-//     */
-//    private function classifyWaste($entry, $i, &$result)
-//    {
-//        $labelKey = "fp_lb{$i}";
-//        $slKey = "fp_sl{$i}";
-//        $gxmcKey = "fp_gxmc{$i}";
-//
-//        if (!empty($entry[$labelKey])) {
-//            $label = $entry[$labelKey];
-//            $value = $entry[$slKey];
-//
-//            if (strpos($label, 'M04') === 0) {
-//                $result['list'][] = $value;
-//            } elseif (strpos($label, 'L') === 0) {
-//                $result['material'][] = $value;
-//            } elseif (strpos($label, 'M01') === 0) {
-//                $result['change'][] = $value;
-//            } elseif (strpos($entry[$gxmcKey] ?? '', '01') === 0) {
-//                $result['machine'][] = $value;
-//            }
-//        }
-//
-//        if (!empty($entry[$slKey])) {
-//            $result['quality'][] = $entry[$slKey];
-//        }
-//    }
-//
-//    /**
-//     * 计算工序数据
-//     */
-//    private function calculateProcessData($baseData, $processedData, $wasteData)
-//    {
-//        // 修复:不能直接在sum中使用表达式,改为先查询再计算
-//        $plan_list = Db::name('工单_工艺资料')
-//            ->where([
-//                'Gy0_gdbh' => $baseData['workOrderData']['jjcp_gdbh'],
-//                'Gy0_yjno' => $baseData['workOrderData']['jjcp_yjno'],
-//                'Gy0_gxh' => ['in', $processedData['gxh_values']]
-//            ])
-//            ->field('Gy0_计划损耗, Gy0_ls, Gy0_ks')
-//            ->select();
-//
-//        $plan_total = 0;
-//        foreach ($plan_list as $item) {
-//            $plan_total += $item['Gy0_计划损耗'] * $item['Gy0_ls'] * $item['Gy0_ks'];
-//        }
-//
-//        // 工单产量数据详情查询
-//        $total_cl_data = Db::name('工单_工艺资料')->alias('a')
-//            ->field([
-//                'a.Gy0_yjno', 'a.Gy0_gxh', 'rtrim(a.Gy0_gxmc) as gxmc', 'a.Gy0_ls',
-//                'SUM(b.sczl_cl) as total_cl', 'SUM(c.sczl_cl) as cl', 'rtrim(a.印刷方式) as 印刷方式',
-//                'rtrim(a.版距) as 版距'
-//            ])
-//            ->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh', 'left')
-//            ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
-//            ->where([
-//                'a.Gy0_gdbh' => $baseData['workOrderData']['jjcp_gdbh'],
-//                'a.Gy0_yjno' => $baseData['workOrderData']['jjcp_yjno'],
-//                'a.Gy0_gxh' => ['IN', $processedData['gxh_values']],
-//                'b.sczl_cl|c.sczl_cl' => ['>', 0],
-//            ])
-//            ->group('a.Gy0_gxh')
-//            ->order('a.Gy0_gxh')
-//            ->select();
-//
-//        // 按班组分的产量数据 - 修复字段表达式问题
-//        $gy_data = Db::name('工单_工艺资料')
-//            ->alias('a')
-//            ->field([
-//                'a.Gy0_gdbh', 'a.Gy0_yjno', 'a.Gy0_gxh', 'a.Gy0_ls', 'a.Gy0_ks', 'a.Gy0_计划损耗', 'a.超节损承担比例',
-//                'CONCAT(`a`.`Gy0_gxmc`, "【", a.Add_gxmc,"】") AS sczl_gxmc', 'SUM(b.sczl_zcfp) as sczl_zcfp', 'SUM(b.sczl_cl) as total_cl',
-//                'b.sczl_bh1', 'b.sczl_bh2', 'b.sczl_bh3', 'b.sczl_bh4', 'b.sczl_bh5', 'b.sczl_bh6',
-//                'b.sczl_bh7', 'b.sczl_bh8', 'b.sczl_bh9', 'b.sczl_bh10', 'GROUP_CONCAT(DISTINCT b.sczl_num SEPARATOR ",") AS 流程单',
-//                'b.sczl_bzdh', 'b.sczl_rate1', 'b.sczl_rate2', 'b.sczl_rate3', 'b.sczl_rate4', 'b.sczl_rate5',
-//                'b.sczl_rate6', 'b.sczl_rate7', 'b.sczl_rate8', 'b.sczl_rate9', 'b.sczl_rate10',
-//                'rtrim(c.sczl_gxmc) as gxmc', 'SUM(c.sczl_cl) as cl', 'SUM(c.sczl_fp) as fp', 'c.sczl_bh1 as sczl_bh',
-//                'd.使用部门 as 使用部门', 'c.sczl_bzdh as bzdh', 'b.sczl_jtbh', 'a.损耗系数', 'a.Gy0_ms', 'a.Gy0_Rate0',
-//                'a.Gy0_Rate1', 'a.无形损承担比例', 'a.Gy0_计划接货数', 'e.Gd_客户代号', 'e.Gd_客户名称', // 移除了字段表达式
-//                'e.Gd_cpdh', 'e.Gd_cpmc', 'e.销售订单号', 'e.投料大箱', 'e.订单数量', 'e.计量单位', 'rtrim(a.Gy0_SITE) as Gy0_SITE',
-//                'rtrim(a.印刷方式) as 印刷方式','rtrim(a.版距) as 版距'
-//            ])
-//            ->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh', 'left')
-//            ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh', 'left')
-//            ->join('设备_基本资料 d', 'd.设备编号 = b.sczl_jtbh', 'left')
-//            ->join('工单_基本资料 e', 'a.Gy0_gdbh = e.Gd_gdbh AND a.Gy0_yjno = e.行号')
-//            ->where([
-//                'a.Gy0_gdbh' => $baseData['workOrderData']['jjcp_gdbh'],
-//                'a.Gy0_yjno' => $baseData['workOrderData']['jjcp_yjno'],
-//                'a.Gy0_gxh' => ['in', $processedData['gxh_values']],
-//                'b.sczl_cl|c.sczl_cl' => ['>', 0],
-//            ])
-//            ->group('a.Gy0_gxh,b.sczl_jtbh,b.sczl_bh1, CASE WHEN b.sczl_bh2 = "000000" THEN "" ELSE b.sczl_bh2 END, b.sczl_bh3,
-//                 b.sczl_bh4, b.sczl_bh5, b.sczl_bh6, b.sczl_bh7, b.sczl_bh8, b.sczl_bh9, c.sczl_bh1')
-//            ->order('a.Gy0_gxh asc, b.开工时间 asc, c.sczl_rq desc')
-//            ->select();
-//
-//        // 预计算班组产量总和
-//        $sumBz = [];
-//        foreach ($gy_data as $kk => $vv) {
-//            $banju = $vv['版距'] / 1000;
-//            if ($vv['印刷方式'] === '卷对卷') {
-//                $vv['total_cl'] = $vv['total_cl'] / $banju;
-//            }
-//
-//            $vv['total_cl'] = (int)$vv['total_cl'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//            if (empty($vv['total_cl'])) {
-//                $vv['total_cl'] = (int)$vv['cl'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//            }
-//
-//            $key = $vv['sczl_bh1'] . '-' . $vv['Gy0_gxh'];
-//            $sumBz[$key] = isset($sumBz[$key]) ? $sumBz[$key] + $vv['total_cl'] : $vv['total_cl'];
-//
-//            // 修复:在PHP中计算计划产量,而不是在SQL中使用表达式
-//            $gy_data[$kk]['计划产量'] = $vv['Gy0_计划接货数'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//        }
-//
-//        // 处理工序数据
-//        $total = [
-//            'plan_loss' => 0, 'total_fp' => 0, 'waste_quality' => 0,
-//            'waste_intangible' => 0, 'reward' => 0
-//        ];
-//
-//        foreach ($gy_data as $kk => $vv) {
-//            $banju = $vv['版距'] / 1000;
-//            if ($vv['印刷方式'] === '卷对卷') {
-//                $vv['total_cl'] = $vv['total_cl'] / $banju;
-//            }
-//
-//            // 每道工序的产量(按班组分)
-//            $gy_data[$kk]['total_cl'] = (int)$vv['total_cl'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//            if (empty($vv['total_cl'])) {
-//                $gy_data[$kk]['total_cl'] = (int)$vv['cl'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//            }
-//
-//            $gy_data[$kk]['Gy0_计划损耗'] = $vv['Gy0_计划损耗'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//
-//            // 计算每道工序的计划损耗
-//            foreach ($total_cl_data as $k => $v) {
-//                $banju1 = $v['版距'] / 1000;
-//                if ($v['印刷方式'] === '卷对卷') {
-//                    $v['total_cl'] = $v['total_cl'] * $banju1;
-//                }
-//
-//                if ($vv['Gy0_yjno'] == $v['Gy0_yjno'] && $vv['Gy0_gxh'] == $v['Gy0_gxh']) {
-//                    $cl = $v['total_cl'] * $v['Gy0_ls'];
-//                    if (empty($cl)) {
-//                        $cl = $v['cl'] * $v['Gy0_ls'];
-//                    }
-//
-//                    if ($cl > 0) {
-//                        $gy_data[$kk]['计划损耗'] = round($gy_data[$kk]['total_cl'] / $cl * $vv['Gy0_计划损耗']);
-//                    }
-//                }
-//            }
-//
-//            // 每道工序的制程废品(按班组分)
-//            $gy_data[$kk]['sczl_zcfp'] = $vv['sczl_zcfp'] * $vv['Gy0_ls'];
-//            if (empty($vv['sczl_zcfp'])) {
-//                $gy_data[$kk]['sczl_zcfp'] = $vv['fp'] * $vv['Gy0_ls'];
-//            }
-//
-//            // 计算每道工序的质检废(按班组)
-//            $gy_data[$kk]['sczl_gxmc'] = $vv['sczl_gxmc'];
-//            if (empty($vv['sczl_gxmc'])) {
-//                $gy_data[$kk]['sczl_gxmc'] = $vv['gxmc'];
-//            }
-//
-//            if (empty($vv['sczl_bh1']) || is_null($vv['sczl_bh1'])) {
-//                $vv['sczl_bh1'] = $vv['sczl_bh'];
-//            }
-//
-//            $gy_data[$kk]['sczl_bh1'] = $vv['sczl_bh1'];
-//            $gy_data[$kk]['质检废'] = 0;
-//            $gy_data[$kk]['zjfp'] = 0;
-//
-//            $key = $vv['sczl_bh1'] . '-' . $vv['Gy0_gxh'];
-//            $total_cl_ratio = isset($sumBz[$key]) && $sumBz[$key] > 0 ?
-//                $gy_data[$kk]['total_cl'] / $sumBz[$key] : 0;
-//
-//            // 计算质检废
-//            $waste_out = $this->getWasteOutData($baseData['workOrderData']);
-//            foreach ($waste_out as $entry) {
-//                for ($i = 1; $i <= 13; $i++) {
-//                    $gxmcKey = "fp_gxmc" . $i;
-//                    $bhKey = "fp_bh" . $i;
-//                    $slKey = "fp_sl" . $i;
-//
-//                    if ((int)substr($entry[$gxmcKey], 0, 2) == $vv['Gy0_gxh'] &&
-//                        $entry[$bhKey] == $vv['sczl_bh1']) {
-//                        $gy_data[$kk]['zjfp'] += $entry[$slKey];
-//                    }
-//                }
-//            }
-//
-//            $gy_data[$kk]['质检废'] = round($gy_data[$kk]['zjfp'] * $total_cl_ratio);
-//
-//            // 无形损分摊
-//            if ($plan_total > 0) {
-//                $gy_data[$kk]['无形损分摊'] = round($gy_data[$kk]['计划损耗'] / $plan_total * $processedData['intangible_loss']);
-//            } else {
-//                $gy_data[$kk]['无形损分摊'] = 0;
-//            }
-//
-//            // 班组成员
-//            for ($j = 1; $j <= 10; $j++) {
-//                $bhKey = "sczl_bh" . $j;
-//                if (!empty($vv[$bhKey])) {
-//                    $name = Db::name('人事_基本资料')
-//                        ->where('员工编号', $vv[$bhKey])
-//                        ->value('rtrim(员工姓名)');
-//                    $gy_data[$kk]['sczl_name' . $j] = $name;
-//                } else {
-//                    $gy_data[$kk]['sczl_name' . $j] = '';
-//                }
-//            }
-//
-//            // 工序产量
-//            foreach ($total_cl_data as $k => $v) {
-//                $banju1 = $v['版距'] / 1000;
-//                if ($v['印刷方式'] === '卷对卷') {
-//                    $v['total_cl'] = $v['total_cl'] * $banju1;
-//                }
-//
-//                if ($v['Gy0_yjno'] === $vv['Gy0_yjno'] && $v['Gy0_gxh'] === $vv['Gy0_gxh']) {
-//                    if (strpos($v['gxmc'], '拆片') !== false) {
-//                        $gy_data[$kk]['工序产量'] = $v['cl'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//                    } else {
-//                        $gy_data[$kk]['工序产量'] = $v['total_cl'] * $vv['Gy0_ls'] * $vv['Gy0_ks'];
-//                    }
-//                }
-//            }
-//
-//            unset($gy_data[$kk]['gxmc'], $gy_data[$kk]['cl'], $gy_data[$kk]['fp'],
-//                $gy_data[$kk]['sczl_bh'], $gy_data[$kk]['bzdh']);
-//
-//            // 计算超节损金额
-//            if ($gy_data[$kk]['无形损分摊'] > 0) {
-//                $total_waste = $gy_data[$kk]['质检废'] + $gy_data[$kk]['sczl_zcfp'] + $gy_data[$kk]['无形损分摊'];
-//            } else {
-//                $total_waste = $gy_data[$kk]['质检废'] + $gy_data[$kk]['sczl_zcfp'];
-//            }
-//
-//            $gy_data[$kk]['节损数量'] = $gy_data[$kk]['计划损耗'] - $total_waste;
-//
-//            // 获取规格
-//            $guige = Db::name('物料_存货编码')
-//                ->where('物料代码', $processedData['成品代号'])
-//                ->value('rtrim(规格)');
-//
-//            // 工序超节损金额
-//            $moneyRate = strpos($guige, '小盒') !== false ? 0.02 : 0.09;
-//
-//            if (strpos($gy_data[$kk]['sczl_gxmc'], '机检') !== false) {
-//                $gy_data[$kk]['节损奖'] = 0;
-//            } else {
-//                $gy_data[$kk]['节损奖'] = number_format(
-//                    $gy_data[$kk]['节损数量'] * $gy_data[$kk]['超节损承担比例'] * $moneyRate, 4
-//                );
-//            }
-//
-//            $gy_data[$kk]['sys_ny'] = date('Ym', strtotime($baseData['workOrderData']['jjcp_sj']));
-//            $gy_data[$kk]['超节损核算单价'] = $moneyRate;
-//
-//            // 汇总数据
-//            $total['plan_loss'] += $gy_data[$kk]['计划损耗'];
-//            $total['total_fp'] += $gy_data[$kk]['sczl_zcfp'];
-//            $total['waste_quality'] += $gy_data[$kk]['质检废'];
-//            $total['waste_intangible'] += $gy_data[$kk]['无形损分摊'];
-//            $total['reward'] += floatval(str_replace(',', '', $gy_data[$kk]['节损奖']));
-//        }
-//
-//        return [
-//            'gy_data' => $gy_data,
-//            'total' => $total,
-//            'plan_total' => $plan_total
-//        ];
-//    }
-//
-//    /**
-//     * 格式化最终结果
-//     */
-//    private function formatFinalResult($processedData, $processData, $wasteData, $baseData)
-//    {
-//        $result = [];
-//        $gy_data = $processData['gy_data'];
-//
-//        foreach ($gy_data as $key => $value) {
-//            $result[$key] = [
-//                'sys_ny' => $value['sys_ny'],
-//                'Gy0_gdbh' => $value['Gy0_gdbh'],
-//                '印件及工序' => $value['Gy0_yjno'],
-//                '工序' => $value['Gy0_gxh'],
-//                '工序名称' => $value['sczl_gxmc'],
-//                '联数' => $value['Gy0_ls'],
-//                '基础损耗' => $value['Gy0_Rate0'],
-//                '损耗率' => $value['Gy0_Rate1'],
-//                '损耗系数' => $value['损耗系数'],
-//                '计损色数' => $value['Gy0_ms'],
-//                '计划产量' => $value['计划产量'],
-//                '计划损耗' => $value['Gy0_计划损耗'],
-//                '班组分摊计划损耗' => $value['计划损耗'],
-//                '印件工序产量' => $value['工序产量'],
-//                '班组产量' => $value['total_cl'],
-//                '班组制程废品' => $value['sczl_zcfp'],
-//                '工单质检废' => $wasteData['工单质检废'],
-//                '班组质检废品' => $value['zjfp'],
-//                '班组分摊质检废品' => $value['质检废'],
-//                '无班组废品' => 0,
-//                '外发废' => $wasteData['外发废'],
-//                '材料废' => $wasteData['材料废'],
-//                '零头处理' => $wasteData['零头处理'],
-//                '分摊废' => 0,
-//                '分摊废明细' => 0,
-//                '印件无形损' => $processedData['intangible_loss'],
-//                '班组分摊无形损' => $value['无形损分摊'],
-//                'CjsSl' => $value['节损数量'],
-//                'CjsJe' => str_replace(",", "", $value['节损奖']),
-//                '无形损承担比例' => $value['无形损承担比例'],
-//                '超节损承担比例' => $value['超节损承担比例'],
-//                '超节损核算单价' => $value['超节损核算单价'],
-//                'sczl_jtbh' => $value['sczl_jtbh'],
-//                'sczl_bzdh' => $value['sczl_bzdh'],
-//                'sczl_bh1' => $value['sczl_bh1'],
-//                'sczl_bh2' => $value['sczl_bh2'],
-//                'sczl_bh3' => $value['sczl_bh3'],
-//                'sczl_bh4' => $value['sczl_bh4'],
-//                'sczl_bh5' => $value['sczl_bh5'],
-//                'sczl_bh6' => $value['sczl_bh6'],
-//                'sczl_bh7' => $value['sczl_bh7'],
-//                'sczl_bh8' => $value['sczl_bh8'],
-//                'Xm1' => $value['sczl_name1'],
-//                'Xm2' => $value['sczl_name2'],
-//                'Xm3' => $value['sczl_name3'],
-//                'Xm4' => $value['sczl_name4'],
-//                'Xm5' => $value['sczl_name5'],
-//                'Xm6' => $value['sczl_name6'],
-//                'Xm7' => $value['sczl_name7'],
-//                'Xm8' => $value['sczl_name8'],
-//                'sczl_rate1' => $value['sczl_rate1'],
-//                'sczl_rate2' => $value['sczl_rate2'],
-//                'sczl_rate3' => $value['sczl_rate3'],
-//                'sczl_rate4' => $value['sczl_rate4'],
-//                'sczl_rate5' => $value['sczl_rate5'],
-//                'sczl_rate6' => $value['sczl_rate6'],
-//                'sczl_rate7' => $value['sczl_rate7'],
-//                'sczl_rate8' => $value['sczl_rate8'],
-//                '类型' => '',
-//                '客户代号' => $value['Gd_客户代号'],
-//                '客户名称' => $value['Gd_客户名称'],
-//                '产品代号' => $value['Gd_cpdh'],
-//                '产品名称' => $value['Gd_cpmc'],
-//                '销售订单号' => $value['销售订单号'],
-//                '订单数量' => $value['订单数量'],
-//                '计量单位' => $value['计量单位'],
-//                '实际投料' => $processedData['实际投料'],
-//                '入仓数量' => $baseData['total_number'],
-//                '入仓日期' => $baseData['workOrderData']['jjcp_sj'],
-//                '大箱数' => $value['投料大箱'],
-//                '废品合计' => $wasteData['工单质检废'] + $wasteData['zcfp'],
-//                'sys_id' => '',
-//                'sys_rq' => date('Y-m-d H:i:s', time()),
-//                '车间名称' => $value['Gy0_SITE']
-//            ];
-//        }
-//
-//        return $result;
-//    }
-//
-//    /**
-//     * 优化的orderLossData方法
-//     */
-//    public function orderLossData()
-//    {
-//        $param = $this->request->param();
-//        $where = $this->buildWhereCondition($param);
-//
-//        $list = Db::name('成品入仓')
-//            ->alias('a')
-//            ->join('设备_产量计酬 b', 'a.jjcp_gdbh = b.sczl_gdbh AND a.jjcp_yjno = b.sczl_yjno')
-//            ->join('物料_收发记录 c', 'a.jjcp_gdbh = c.st_gdbh AND a.jjcp_cpdh = c.cpdh')
-//            ->where($where)
-//            ->whereIn('c.仓库编号', ['101', 'Y101'])
-//            ->field('a.jjcp_gdbh, a.jjcp_yjno')
-//            ->group('a.jjcp_gdbh, a.jjcp_yjno')
-//            ->select();
-//
-//        $successCount = 0;
-//        $failCount = 0;
-//        $errors = [];
-//
-//        // 使用批量处理减少数据库操作
-//        foreach ($list as $item) {
-//            if ($this->processSingleOrder($item)) {
-//                $successCount++;
-//            } else {
-//                $failCount++;
-//                $errors[] = "{$item['jjcp_gdbh']}-{$item['jjcp_yjno']}";
-//            }
-//        }
-//
-//        if ($failCount === 0) {
-//            $this->success("成功处理 {$successCount} 个工单");
-//        } else {
-//            $errorMsg = "失败 {$failCount} 个工单,成功 {$successCount} 个";
-//            if (!empty($errors)) {
-//                $errorMsg .= ",失败的工单: " . implode(', ', array_slice($errors, 0, 10));
-//                if (count($errors) > 10) {
-//                    $errorMsg .= '...';
-//                }
-//            }
-//            $this->error($errorMsg);
-//        }
-//    }
-//
-//    /**
-//     * 构建查询条件
-//     */
-//    private function buildWhereCondition($param)
-//    {
-//        $where = [];
-//
-//        if (isset($param['gdbh']) && isset($param['yjno']) && !empty($param['gdbh']) && !empty($param['yjno'])) {
-//            $where['a.jjcp_gdbh'] = $param['gdbh'];
-//            $where['a.jjcp_yjno'] = $param['yjno'];
-//        }
-//
-//        $month = substr($param['mouth'], 0, 4) . '-' . substr($param['mouth'], 4, 2);
-//
-//        if (isset($param['mouth'])) {
-//            $where['a.jjcp_sj'] = ['like', $month . '%'];
-//        }
-//
-//        $where['a.jjcp_smb'] = ['like', '末%'];
-//`
-//        return $where;
-//    }
-//
-//    /**
-//     * 处理单个工单
-//     */
-//    private function processSingleOrder($item)
-//    {
-//        try {
-//            $result = $this->OneOrderSuperLoss($item['jjcp_gdbh'], $item['jjcp_yjno']);
-//
-//            if (!$result) return false;
-//
-//            // 使用事务确保数据一致性
-//            Db::transaction(function() use ($item, $result) {
-//                // 先删除旧数据
-//                Db::name('工单_质量考核汇总')
-//                    ->where('Gy0_gdbh', $item['jjcp_gdbh'])
-//                    ->where('印件及工序', $item['jjcp_yjno'])
-//                    ->delete();
-//
-//                // 批量插入新数据
-//                if (!empty($result)) {
-//                    Db::name('工单_质量考核汇总')->insertAll($result);
-//                }
-//            });
-//
-//            return true;
-//
-//        } catch (\Exception $e) {
-//            Log::error("处理工单失败: {$item['jjcp_gdbh']}-{$item['jjcp_yjno']} - " . $e->getMessage());
-//            return false;
-//        }
-//    }
-//    public function ()
-//    {
-//
-//    }
-
-
     /**
      * 创建投料数
      * @return void
@@ -3117,5 +2425,56 @@ class OrderSuperLoss extends Api
         }
         $this->success('请求成功',$data);
     }
+
+
+    /**
+     * 获取工单类型
+     * @return void
+     */
+    public function getWorkorderStatus()
+    {
+        if ($this->request->isGet() == false) {
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (empty($param['workorder']) || empty($param['yjno'])) {
+            $this->error('参数错误');
+        }
+        $data = \db('工单_印件资料')
+            ->where('Yj_Gdbh',$param['workorder'])
+            ->where('yj_Yjno',$param['yjno'])
+            ->value('工单类型');
+        $this->success('成功',$data);
+    }
+
+    /**
+     * 修改工单类型
+     * @return void
+     * @throws Exception
+     * @throws \think\db\exception\BindParamException
+     * @throws \think\exception\PDOException
+     */
+    public function updateWorkorderStatus()
+    {
+        if ($this->request->isGet() == false) {
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (empty($param['workorder']) || empty($param['yjno']) || empty($param['status'])) {
+            $this->error('参数错误');
+        }
+        $sql = \db('工单_印件资料')
+            ->where('Yj_Gdbh',$param['workorder'])
+            ->where('yj_Yjno',$param['yjno'])
+            ->fetchSql(true)
+            ->update(['工单类型'=>$param['status']]);
+        $result = db()->query($sql);
+        if ($result !== false) {
+            $this->success('修改成功');
+        }else{
+            $this->error('修改失败');
+        }
+
+    }
 }