|
|
@@ -430,6 +430,7 @@ class Decision extends Api
|
|
|
// 实际每小时车头产量 = 产量 / 设备运行工时
|
|
|
// $list[$key]['实际每小时车头产量'] = $runningHours > 0 ? round($output / $runningHours, 2) : 0;
|
|
|
|
|
|
+
|
|
|
//修正后公式
|
|
|
//实际每小时车头产量=产量/(设备运行工时-保养工时-打样总工时-装版总工时-异常停机工时)
|
|
|
$totalHours = $value['设备运行工时']
|
|
|
@@ -456,129 +457,6 @@ class Decision extends Api
|
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
|
* @throws \think\exception\DbException
|
|
|
*/
|
|
|
-// public function ProcessOutputRate()
|
|
|
-// {
|
|
|
-// if (!$this->request->isGet()) {
|
|
|
-// $this->error('请求错误');
|
|
|
-// }
|
|
|
-//
|
|
|
-// $param = $this->request->param();
|
|
|
-// if (empty($param)) {
|
|
|
-// $this->error('参数错误');
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 工序分类
|
|
|
-//// $processOrder = [
|
|
|
-//// 1 => ['name' => '胶印', 'keys' => ['胶印', '上光']],
|
|
|
-//// 2 => ['name' => '卷凹', 'keys' => ['卷凹']],
|
|
|
-//// 3 => ['name' => '圆烫', 'keys' => ['圆烫']],
|
|
|
-//// 4 => ['name' => '圆切', 'keys' => ['圆切']],
|
|
|
-//// 5 => ['name' => '烫模', 'keys' => ['烫金', '模切', '凹凸']],
|
|
|
-//// 6 => ['name' => '丝印', 'keys' => ['丝印']],
|
|
|
-//// 7 => ['name' => '喷码', 'keys' => ['喷码']],
|
|
|
-//// 8 => ['name' => '单凹', 'keys' => ['单凹']],
|
|
|
-//// 9 => ['name' => '覆膜', 'keys' => ['覆膜']]
|
|
|
-//// ];
|
|
|
-// $sist = ['胶印车间','凹丝印车间','印后车间','检验车间'];
|
|
|
-// $processOrder= \db('设备_基本资料')
|
|
|
-// ->whereNotNull('设备编组')
|
|
|
-// ->whereIn('使用部门',$sist)
|
|
|
-// ->group('设备编组')
|
|
|
-// ->column('rtrim(设备编组) as 设备编组');
|
|
|
-//
|
|
|
-//
|
|
|
-// // 获取存在数据的月份
|
|
|
-// $monthsWithData = \db('工单_质量考核汇总')
|
|
|
-// ->where('sys_ny', 'like', $param['year'] . '%')
|
|
|
-// ->column('distinct(sys_ny) as month');
|
|
|
-//
|
|
|
-// // 初始化结果数组,按工序名称归类
|
|
|
-// $result = [];
|
|
|
-// foreach ($processOrder as $processId => $process) {
|
|
|
-// $result[substr($process, 5, 6)] = [
|
|
|
-// '01月' => '',
|
|
|
-// '02月' => '',
|
|
|
-// '03月' => '',
|
|
|
-// '04月' => '',
|
|
|
-// '05月' => '',
|
|
|
-// '06月' => '',
|
|
|
-// '07月' => '',
|
|
|
-// '08月' => '',
|
|
|
-// '09月' => '',
|
|
|
-// '10月' => '',
|
|
|
-// '11月' => '',
|
|
|
-// '12月' => '',
|
|
|
-// '平均值' => '0.00%'
|
|
|
-// ];
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 遍历每个月份
|
|
|
-// foreach ($monthsWithData as $month) {
|
|
|
-// foreach ($processOrder as $processId => $process) {
|
|
|
-// // 查询该月份该工序的合格率数据
|
|
|
-// $query = \db('工单_质量考核汇总')
|
|
|
-// ->alias('a')
|
|
|
-// ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
|
|
|
-// ->join('工单_印件资料 c', 'a.Gy0_gdbh = c.Yj_Gdbh AND a.印件及工序 = c.yj_Yjno')
|
|
|
-// ->join('成品入仓 d', 'a.Gy0_gdbh = d.jjcp_gdbh AND a.印件及工序 = d.jjcp_yjno')
|
|
|
-// ->join('设备_基本资料 e','a.sczl_jtbh = e.设备编号')
|
|
|
-//// ->field('a.sys_ny,(1 - ((SUM(a.班组制程废品) + SUM(a.班组质检废品)) / SUM(a.班组产量))) * 100 as 合格率')
|
|
|
-// ->field('a.sys_ny,SUM(a.班组制程废品)/a.联数 as 制程废品,SUM(a.班组质检废品)/a.联数 as 质检废品,SUM(a.班组产量)/a.联数 as 产量')
|
|
|
-// ->where('e.设备编组',$process)
|
|
|
-// ->where('d.jjcp_smb', 'like', '末%')
|
|
|
-// ->where('a.sys_ny', $month)
|
|
|
-// ->group('a.sys_ny,a.Gy0_gdbh,a.印件及工序,a.工序');
|
|
|
-//// ->group('a.sys_ny');
|
|
|
-//
|
|
|
-// $res = $query->select();
|
|
|
-// $data = ['sys_ny'=>'','制程废品'=>0, '质检废品'=>0, '产量'=>0];
|
|
|
-// foreach ($res as $value) {
|
|
|
-// $data['sys_ny'] = $value['sys_ny'];
|
|
|
-// $data['制程废品'] += $value['制程废品'];
|
|
|
-// $data['质检废品'] += $value['质检废品'];
|
|
|
-// $data['产量'] += $value['产量'];
|
|
|
-// }
|
|
|
-// $records = [
|
|
|
-// 'sys_ny' => $data['sys_ny'],
|
|
|
-// '合格率' => (1-(($data['制程废品']+$data['质检废品'])/$data['产量']))* 100
|
|
|
-// ];
|
|
|
-//// halt($records);
|
|
|
-// if (!empty($records)) {
|
|
|
-// $monthName = substr($month, 4, 2) . '月';
|
|
|
-// $result[substr($process, 5, 6)][$monthName] = sprintf("%.2f%%", $records['合格率']);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 计算年度平均值
|
|
|
-// foreach ($result as $processName => &$processData) {
|
|
|
-// $totalAnnual = 0;
|
|
|
-// $monthCount = 0;
|
|
|
-//
|
|
|
-// foreach ($processData as $month => $rate) {
|
|
|
-// if ($month !== '平均值' && $rate !== '') {
|
|
|
-// $totalAnnual += floatval(str_replace('%', '', $rate));
|
|
|
-// $monthCount++;
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// if ($monthCount > 0) {
|
|
|
-// $processData['平均值'] = sprintf("%.2f%%", $totalAnnual / $monthCount);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// unset($processData); // 关键修复:解除引用
|
|
|
-//
|
|
|
-// // 转换为目标格式
|
|
|
-// $formattedData = [];
|
|
|
-// foreach ($result as $processName => $processData) {
|
|
|
-// // 现在processData是独立值
|
|
|
-// $formattedRow = array_merge(['工序类型' => $processName], $processData);
|
|
|
-// $formattedData[] = $formattedRow;
|
|
|
-// }
|
|
|
-// // 返回JSON响应
|
|
|
-// $this->success('成功',$formattedData);
|
|
|
-// }
|
|
|
-
|
|
|
public function ProcessOutputRate()
|
|
|
{
|
|
|
if (!$this->request->isGet()) {
|
|
|
@@ -598,7 +476,7 @@ class Decision extends Api
|
|
|
->group('设备编组')
|
|
|
->column('RTRIM(设备编组) as 设备编组');
|
|
|
if (empty($processOrder)) {
|
|
|
- $this->success('成功', []); // 没有设备直接返回
|
|
|
+ $this->success('成功', []);
|
|
|
}
|
|
|
|
|
|
// 2. 初始化结果数组(按工序)
|
|
|
@@ -612,7 +490,7 @@ class Decision extends Api
|
|
|
$result[$key]['平均值'] = '0.00%';
|
|
|
}
|
|
|
|
|
|
- // 3. 汇总所有年份内数据,一次查出所有“工序-月份”数据,避免嵌套多次SQL
|
|
|
+ // 3. 汇总所有年份内数据,一次查出所有“工序-月份”数据
|
|
|
$dataList = \db('工单_质量考核汇总')
|
|
|
->alias('a')
|
|
|
->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
|
|
|
@@ -631,8 +509,36 @@ class Decision extends Api
|
|
|
])
|
|
|
->group('e.设备编组, a.sys_ny')
|
|
|
->select();
|
|
|
- // 4. 处理统计数据,填充到$result
|
|
|
- $annual = []; // 年均合格率累加用
|
|
|
+
|
|
|
+ //修正前计算方式
|
|
|
+// // 4. 处理统计数据,填充到$result
|
|
|
+// $annual = []; // 年均合格率累加用
|
|
|
+// foreach ($dataList as $item) {
|
|
|
+// $processKey = substr($item['设备编组'], 5, 6);
|
|
|
+// $monthKey = substr($item['sys_ny'], 4, 2) . '月';
|
|
|
+//
|
|
|
+// $output = floatval($item['产量']);
|
|
|
+// $waste = floatval($item['制程废品']) + floatval($item['质检废品']);
|
|
|
+// $rate = $output > 0 ? (1 - $waste / $output) * 100 : 0;
|
|
|
+// $result[$processKey][$monthKey] = sprintf('%.2f%%', $rate);
|
|
|
+//
|
|
|
+// if (!isset($annual[$processKey])) {
|
|
|
+// $annual[$processKey] = ['sum' => 0, 'count' => 0];
|
|
|
+// }
|
|
|
+// $annual[$processKey]['sum'] += $rate;
|
|
|
+// $annual[$processKey]['count']++;
|
|
|
+// }
|
|
|
+// // 5. 补充“平均值”
|
|
|
+// foreach ($annual as $processKey => $v) {
|
|
|
+// if ($v['count'] > 0) {
|
|
|
+// $result[$processKey]['平均值'] = sprintf('%.2f%%', $v['sum']/$v['count']);
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+ //修正后计算方式
|
|
|
+ // 【用于算平均值】
|
|
|
+ $yearTotal = [];
|
|
|
+ // 4. 处理每月数据
|
|
|
foreach ($dataList as $item) {
|
|
|
$processKey = substr($item['设备编组'], 5, 6);
|
|
|
$monthKey = substr($item['sys_ny'], 4, 2) . '月';
|
|
|
@@ -642,27 +548,40 @@ class Decision extends Api
|
|
|
$rate = $output > 0 ? (1 - $waste / $output) * 100 : 0;
|
|
|
$result[$processKey][$monthKey] = sprintf('%.2f%%', $rate);
|
|
|
|
|
|
- if (!isset($annual[$processKey])) {
|
|
|
- $annual[$processKey] = ['sum' => 0, 'count' => 0];
|
|
|
+ // 【累计:总产量、总废品】
|
|
|
+ if (!isset($yearTotal[$processKey])) {
|
|
|
+ $yearTotal[$processKey] = [
|
|
|
+ 'totalOutput' => 0,
|
|
|
+ 'totalWaste' => 0
|
|
|
+ ];
|
|
|
}
|
|
|
- $annual[$processKey]['sum'] += $rate;
|
|
|
- $annual[$processKey]['count']++;
|
|
|
+ $yearTotal[$processKey]['totalOutput'] += $output;
|
|
|
+ $yearTotal[$processKey]['totalWaste'] += $waste;
|
|
|
}
|
|
|
- // 5. 补充“平均值”
|
|
|
- foreach ($annual as $processKey => $v) {
|
|
|
- if ($v['count'] > 0) {
|
|
|
- $result[$processKey]['平均值'] = sprintf('%.2f%%', $v['sum']/$v['count']);
|
|
|
+
|
|
|
+ //打印总计
|
|
|
+// echo "<pre>";
|
|
|
+// print_r($yearTotal);
|
|
|
+// echo "<pre>";
|
|
|
+
|
|
|
+ // 【平均值:用全年总和计算】
|
|
|
+ foreach ($yearTotal as $processKey => $val) {
|
|
|
+ $totalOutput = $val['totalOutput'];
|
|
|
+ $totalWaste = $val['totalWaste'];
|
|
|
+ if ($totalOutput > 0) {
|
|
|
+ $avgRate = (1 - $totalWaste / $totalOutput) * 100;
|
|
|
+ $result[$processKey]['平均值'] = sprintf('%.2f%%', $avgRate);
|
|
|
+ } else {
|
|
|
+ $result[$processKey]['平均值'] = '0.00%';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 6. 转换为前端需要的格式
|
|
|
+ // 6. 转前端格式
|
|
|
$formattedData = [];
|
|
|
foreach ($result as $process => $data) {
|
|
|
$row = array_merge(['工序类型' => $process], $data);
|
|
|
$formattedData[] = $row;
|
|
|
}
|
|
|
-
|
|
|
- // 7. 返回
|
|
|
$this->success('成功', $formattedData);
|
|
|
}
|
|
|
/**
|