|
|
@@ -439,17 +439,22 @@ class Decision extends Api
|
|
|
}
|
|
|
|
|
|
// 工序分类
|
|
|
- $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' => ['覆膜']]
|
|
|
- ];
|
|
|
+// $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' => ['覆膜']]
|
|
|
+// ];
|
|
|
+ $processOrder= \db('设备_基本资料')
|
|
|
+ ->whereNotNull('设备编组')
|
|
|
+ ->group('设备编组')
|
|
|
+ ->column('rtrim(设备编组) as 设备编组');
|
|
|
+
|
|
|
|
|
|
// 获取存在数据的月份
|
|
|
$monthsWithData = \db('工单_质量考核汇总')
|
|
|
@@ -459,7 +464,7 @@ class Decision extends Api
|
|
|
// 初始化结果数组,按工序名称归类
|
|
|
$result = [];
|
|
|
foreach ($processOrder as $processId => $process) {
|
|
|
- $result[$process['name']] = [
|
|
|
+ $result[substr($process, 5, 6)] = [
|
|
|
'01月' => '',
|
|
|
'02月' => '',
|
|
|
'03月' => '',
|
|
|
@@ -485,13 +490,15 @@ class Decision extends Api
|
|
|
->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['keys'] as $key) {
|
|
|
- $query->whereOr('b.Gy0_gxmc', 'like', "%{$key}%");
|
|
|
- }
|
|
|
- })
|
|
|
+// ->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');
|
|
|
@@ -500,10 +507,11 @@ class Decision extends Api
|
|
|
|
|
|
if (!empty($records)) {
|
|
|
$monthName = substr($month, 4, 2) . '月';
|
|
|
- $result[$process['name']][$monthName] = sprintf("%.2f%%", $records[0]['合格率']);
|
|
|
+ $result[substr($process, 5, 6)][$monthName] = sprintf("%.2f%%", $records[0]['合格率']);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
// 计算年度平均值
|
|
|
foreach ($result as $processName => &$processData) {
|
|
|
$totalAnnual = 0;
|
|
|
@@ -566,45 +574,41 @@ class Decision extends Api
|
|
|
$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' => ['覆膜']]
|
|
|
- ];
|
|
|
+ // 获取设备编组列表(已按编号排序)
|
|
|
+ $processGroups = \db('设备_基本资料')
|
|
|
+ ->whereNotNull('设备编组')
|
|
|
+ ->group('设备编组')
|
|
|
+ ->column('rtrim(设备编组) as 设备编组');
|
|
|
|
|
|
// 构建基础查询
|
|
|
$query = \db('工单_质量考核汇总')
|
|
|
- ->alias('a')
|
|
|
- ->field('
|
|
|
- a.sczl_jtbh AS 机台编号,
|
|
|
- a.Gy0_gdbh AS 工单编号,
|
|
|
- a.印件及工序 AS 工序号,
|
|
|
- a.产品名称 AS 印件名称,
|
|
|
- a.工序 AS 工序,
|
|
|
- a.工序名称,
|
|
|
- b.Gy0_gxmc,
|
|
|
- a.联数,
|
|
|
- a.班组产量,
|
|
|
- a.班组制程废品,
|
|
|
- a.班组质检废品,
|
|
|
- a.sczl_bzdh AS 班组编号,
|
|
|
- b.印刷方式,
|
|
|
- b.版距,
|
|
|
- DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月
|
|
|
- ')
|
|
|
- ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
|
|
|
- ->join('成品入仓 c','a.Gy0_gdbh = c.jjcp_gdbh AND a.印件及工序 = c.jjcp_yjno')
|
|
|
- ->where('a.sys_ny', 'like', $param['year'] . '%')
|
|
|
- ->where('a.工序名称','not like','%机检%')
|
|
|
- ->where('c.jjcp_smb','like','末%')
|
|
|
- ->where('a.工序名称','not like','%拆片%');
|
|
|
+ ->alias('a')
|
|
|
+ ->field('
|
|
|
+ a.sczl_jtbh AS 机台编号,
|
|
|
+ a.Gy0_gdbh AS 工单编号,
|
|
|
+ a.印件及工序 AS 工序号,
|
|
|
+ a.产品名称 AS 印件名称,
|
|
|
+ a.工序 AS 工序,
|
|
|
+ a.工序名称,
|
|
|
+ b.Gy0_gxmc,
|
|
|
+ a.联数,
|
|
|
+ a.班组产量,
|
|
|
+ a.班组制程废品,
|
|
|
+ a.班组质检废品,
|
|
|
+ a.sczl_bzdh AS 班组编号,
|
|
|
+ b.印刷方式,
|
|
|
+ b.版距,
|
|
|
+ DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月,
|
|
|
+ d.设备编组
|
|
|
+ ')
|
|
|
+ ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
|
|
|
+ ->join('成品入仓 c', 'a.Gy0_gdbh = c.jjcp_gdbh AND a.印件及工序 = c.jjcp_yjno')
|
|
|
+ ->join('设备_基本资料 d', 'a.sczl_jtbh = d.设备编号')
|
|
|
+ ->where('a.sys_ny', 'like', $param['year'] . '%')
|
|
|
+ ->where('a.工序名称', 'not like', '%机检%')
|
|
|
+ ->where('c.jjcp_smb', 'like', '末%')
|
|
|
+ ->where('a.工序名称', 'not like', '%拆片%');
|
|
|
+
|
|
|
// 获取总数
|
|
|
$total = clone $query;
|
|
|
$total = $total->count();
|
|
|
@@ -613,44 +617,58 @@ class Decision extends Api
|
|
|
$rawList = isset($param['page'], $param['limit'])
|
|
|
? $query->page($param['page'])->limit($param['limit'])->select()
|
|
|
: $query->select();
|
|
|
+
|
|
|
+ // 构建分类映射表
|
|
|
+ $groupMap = [];
|
|
|
+ foreach ($processGroups as $index => $group) {
|
|
|
+ // 提取机组名称核心词(去除编号和"机组"字样)
|
|
|
+ $groupName = preg_replace('/^\d+、/', '', $group); // 移除开头编号
|
|
|
+ $coreName = str_replace('机组', '', $groupName); // 移除尾部的"机组"
|
|
|
+ $groupMap[] = [
|
|
|
+ 'id' => $index + 1,
|
|
|
+ 'name' => $groupName,
|
|
|
+ 'core' => $coreName
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
// 处理分类标记
|
|
|
$processedList = [];
|
|
|
foreach ($rawList as $item) {
|
|
|
- $matched = false;
|
|
|
-
|
|
|
- // 顺序匹配分类规则
|
|
|
- foreach ($processOrder as $typeId => $rule) {
|
|
|
- foreach ($rule['keys'] as $keyword) {
|
|
|
- if (strpos($item['Gy0_gxmc'], $keyword) !== false) {
|
|
|
- // 添加分类标记
|
|
|
- $item['type_id'] = $typeId;
|
|
|
- $item['type_name'] = $rule['name'];
|
|
|
- $processedList[] = $item;
|
|
|
- $matched = true;
|
|
|
- break 2; // 跳出两层循环
|
|
|
- }
|
|
|
+ foreach ($groupMap as $group) {
|
|
|
+ // 使用核心词进行模糊匹配
|
|
|
+ if (strpos($item['Gy0_gxmc'], $group['core']) !== false) {
|
|
|
+ $item['type_id'] = $group['id'];
|
|
|
+ $item['type_name'] = $group['name'];
|
|
|
+ $processedList[] = $item;
|
|
|
+ continue 2; // 匹配成功则跳出两层循环
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // 未匹配到分类的数据丢弃
|
|
|
+ // 未匹配的条目将被丢弃
|
|
|
}
|
|
|
|
|
|
- // 按分类顺序排序(保持1-8的顺序)
|
|
|
+ // 按分类ID排序
|
|
|
usort($processedList, function($a, $b) {
|
|
|
return $a['type_id'] <=> $b['type_id'];
|
|
|
});
|
|
|
|
|
|
// 返回结构
|
|
|
$data['data'] = $processedList;
|
|
|
- $data['total'] = $total; // 原始总数
|
|
|
- $data['filtered_total'] = count($processedList); // 实际有效数
|
|
|
+ $data['total'] = $total;
|
|
|
+ $data['filtered_total'] = count($processedList);
|
|
|
|
|
|
return count($processedList) > 0
|
|
|
? $this->success('成功', $data)
|
|
|
: $this->error('未找到数据');
|
|
|
}
|
|
|
|
|
|
- //月度色度数导出
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 月度色度数导出
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
public function ChromaticityNumber()
|
|
|
{
|
|
|
if (!$this->request->isGet()) {
|