|
|
@@ -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('修改失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|