|
@@ -426,6 +426,129 @@ class Decision extends Api
|
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
|
* @throws \think\exception\DbException
|
|
* @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()
|
|
public function ProcessOutputRate()
|
|
|
{
|
|
{
|
|
|
if (!$this->request->isGet()) {
|
|
if (!$this->request->isGet()) {
|
|
@@ -433,113 +556,87 @@ class Decision extends Api
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$param = $this->request->param();
|
|
$param = $this->request->param();
|
|
|
- if (empty($param)) {
|
|
|
|
|
|
|
+ if (empty($param) || empty($param['year'])) {
|
|
|
$this->error('参数错误');
|
|
$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' => ['覆膜']]
|
|
|
|
|
-// ];
|
|
|
|
|
|
|
+ // 1. 获取设备分组,作为工序依据
|
|
|
$sist = ['胶印车间','凹丝印车间','印后车间','检验车间'];
|
|
$sist = ['胶印车间','凹丝印车间','印后车间','检验车间'];
|
|
|
- $processOrder= \db('设备_基本资料')
|
|
|
|
|
|
|
+ $processOrder = \db('设备_基本资料')
|
|
|
->whereNotNull('设备编组')
|
|
->whereNotNull('设备编组')
|
|
|
- ->whereIn('使用部门',$sist)
|
|
|
|
|
|
|
+ ->whereIn('使用部门', $sist)
|
|
|
->group('设备编组')
|
|
->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%'
|
|
|
|
|
- ];
|
|
|
|
|
|
|
+ ->column('RTRIM(设备编组) as 设备编组');
|
|
|
|
|
+ if (empty($processOrder)) {
|
|
|
|
|
+ $this->success('成功', []); // 没有设备直接返回
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 遍历每个月份
|
|
|
|
|
- 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 合格率')
|
|
|
|
|
-// ->where(function ($query) use ($process) {
|
|
|
|
|
-// foreach ($process as $key) {
|
|
|
|
|
-// $query->whereOr('b.Gy0_gxmc', 'like', "%{$key}%");
|
|
|
|
|
-// }
|
|
|
|
|
-// })
|
|
|
|
|
- ->where('e.设备编组',$process)
|
|
|
|
|
- ->where('d.jjcp_smb', 'like', '末%')
|
|
|
|
|
- ->where('a.sys_ny', $month)
|
|
|
|
|
- ->group('a.sys_ny');
|
|
|
|
|
-
|
|
|
|
|
- $records = $query->select();
|
|
|
|
|
-
|
|
|
|
|
- if (!empty($records)) {
|
|
|
|
|
- $monthName = substr($month, 4, 2) . '月';
|
|
|
|
|
- $result[substr($process, 5, 6)][$monthName] = sprintf("%.2f%%", $records[0]['合格率']);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 2. 初始化结果数组(按工序)
|
|
|
|
|
+ $result = [];
|
|
|
|
|
+ foreach ($processOrder as $process) {
|
|
|
|
|
+ $key = substr($process, 5, 6);
|
|
|
|
|
+ $result[$key] = [];
|
|
|
|
|
+ for ($i = 1; $i <= 12; $i++) {
|
|
|
|
|
+ $result[$key][str_pad($i, 2, '0', STR_PAD_LEFT) . '月'] = '';
|
|
|
}
|
|
}
|
|
|
|
|
+ $result[$key]['平均值'] = '0.00%';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 计算年度平均值
|
|
|
|
|
- foreach ($result as $processName => &$processData) {
|
|
|
|
|
- $totalAnnual = 0;
|
|
|
|
|
- $monthCount = 0;
|
|
|
|
|
|
|
+ // 3. 汇总所有年份内数据,一次查出所有“工序-月份”数据,避免嵌套多次SQL
|
|
|
|
|
+ $dataList = \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.设备编号')
|
|
|
|
|
+ ->whereIn('e.设备编组', $processOrder)
|
|
|
|
|
+ ->where('d.jjcp_smb', 'like', '末%')
|
|
|
|
|
+ ->where('a.sys_ny', 'like', $param['year'] . '%')
|
|
|
|
|
+ ->field([
|
|
|
|
|
+ 'e.设备编组',
|
|
|
|
|
+ 'a.sys_ny',
|
|
|
|
|
+ 'SUM(a.班组制程废品) / a.联数 AS 制程废品',
|
|
|
|
|
+ 'SUM(a.班组质检废品) / a.联数 AS 质检废品',
|
|
|
|
|
+ 'SUM(a.班组产量) / a.联数 AS 产量'
|
|
|
|
|
+ ])
|
|
|
|
|
+ ->group('e.设备编组, a.sys_ny')
|
|
|
|
|
+ ->select();
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 处理统计数据,填充到$result
|
|
|
|
|
+ $annual = []; // 年均合格率累加用
|
|
|
|
|
+ foreach ($dataList as $item) {
|
|
|
|
|
+ $processKey = substr($item['设备编组'], 5, 6);
|
|
|
|
|
+ $monthKey = substr($item['sys_ny'], 4, 2) . '月';
|
|
|
|
|
|
|
|
- foreach ($processData as $month => $rate) {
|
|
|
|
|
- if ($month !== '平均值' && $rate !== '') {
|
|
|
|
|
- $totalAnnual += floatval(str_replace('%', '', $rate));
|
|
|
|
|
- $monthCount++;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $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']++;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if ($monthCount > 0) {
|
|
|
|
|
- $processData['平均值'] = sprintf("%.2f%%", $totalAnnual / $monthCount);
|
|
|
|
|
|
|
+ // 5. 补充“平均值”
|
|
|
|
|
+ foreach ($annual as $processKey => $v) {
|
|
|
|
|
+ if ($v['count'] > 0) {
|
|
|
|
|
+ $result[$processKey]['平均值'] = sprintf('%.2f%%', $v['sum']/$v['count']);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- unset($processData); // 关键修复:解除引用
|
|
|
|
|
|
|
|
|
|
- // 转换为目标格式
|
|
|
|
|
|
|
+ // 6. 转换为前端需要的格式
|
|
|
$formattedData = [];
|
|
$formattedData = [];
|
|
|
- foreach ($result as $processName => $processData) {
|
|
|
|
|
- // 现在processData是独立值
|
|
|
|
|
- $formattedRow = array_merge(['工序类型' => $processName], $processData);
|
|
|
|
|
- $formattedData[] = $formattedRow;
|
|
|
|
|
|
|
+ foreach ($result as $process => $data) {
|
|
|
|
|
+ $row = array_merge(['工序类型' => $process], $data);
|
|
|
|
|
+ $formattedData[] = $row;
|
|
|
}
|
|
}
|
|
|
- // 返回JSON响应
|
|
|
|
|
- $this->success('成功',$formattedData);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 返回
|
|
|
|
|
+ $this->success('成功', $formattedData);
|
|
|
}
|
|
}
|
|
|
/**
|
|
/**
|
|
|
* 获取年分数据
|
|
* 获取年分数据
|
|
@@ -644,7 +741,6 @@ class Decision extends Api
|
|
|
continue 2;
|
|
continue 2;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // 未匹配的条目将被丢弃
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 按分类ID排序
|
|
// 按分类ID排序
|