|
|
@@ -1 +1,762 @@
|
|
|
<?php
|
|
|
+
|
|
|
+namespace app\api\controller;
|
|
|
+
|
|
|
+
|
|
|
+use app\common\controller\Api;
|
|
|
+use think\Db;
|
|
|
+use think\Request;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 设备运行跟踪
|
|
|
+ */
|
|
|
+
|
|
|
+class YxDecsion extends Api
|
|
|
+{
|
|
|
+ protected $noNeedLogin = ['*'];
|
|
|
+ protected $noNeedRight = ['*'];
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 月度产量统计菜单
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+
|
|
|
+ public function OutputSstatisticsMenu()
|
|
|
+ {
|
|
|
+ if ($this->request->isGet() === false){
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+ $mouth = \db('设备_产量计酬')
|
|
|
+ ->distinct(true)
|
|
|
+ ->field('DATE_FORMAT(sczl_rq, "%Y-%m") AS month')
|
|
|
+ ->order('month desc')
|
|
|
+ ->select();
|
|
|
+ $machine = db('设备映射表')->column('MNmachine');
|
|
|
+ $sist = \db('设备_基本资料')
|
|
|
+ ->whereNotNull('设备编组')
|
|
|
+ ->whereIn('设备编号',$machine)
|
|
|
+ ->group('设备编组')
|
|
|
+ ->column('rtrim(设备编组) as 设备编组');
|
|
|
+ $data = [];
|
|
|
+ foreach ($mouth as $key=>$value) {
|
|
|
+ $arr = [
|
|
|
+ 'date'=>date('Ym',strtotime($value['month'])),
|
|
|
+ 'sbbh'=>$sist,
|
|
|
+ ];
|
|
|
+ array_push($data,$arr);
|
|
|
+ }
|
|
|
+ $this->success('成功',$data);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 月度产量统计上方机台生产数据
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function MachineProduction()
|
|
|
+ {
|
|
|
+ // 验证请求方式
|
|
|
+ if ($this->request->isGet() === false) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取请求参数
|
|
|
+ $param = $this->request->param();
|
|
|
+ if (empty($param['mouth'])) {
|
|
|
+ $this->error('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 初始化查询条件
|
|
|
+ $where = [];
|
|
|
+ if (!empty($param['sist'])) {
|
|
|
+ $where['b.设备编组'] = $param['sist'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 转换日期格式
|
|
|
+ $mouth = date_create_from_format('Ym', $param['mouth'])->format('Y-m');
|
|
|
+
|
|
|
+ // 使用单个查询获取所有需要的数据
|
|
|
+ $results = \db('设备_产量计酬')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('设备_基本资料 b', 'a.sczl_jtbh = b.设备编号')
|
|
|
+ ->join('工单_印件资料 c', 'a.sczl_gdbh = c.Yj_Gdbh AND a.sczl_yjno = c.yj_Yjno', 'LEFT')
|
|
|
+ ->join('工单_工艺资料 d', 'a.sczl_gdbh = d.Gy0_gdbh AND a.sczl_yjno = d.Gy0_yjno AND a.sczl_gxh = d.Gy0_gxh', 'LEFT')
|
|
|
+ ->join('设备映射表 e', 'a.sczl_jtbh = e.MNmachine')
|
|
|
+ ->field([
|
|
|
+ 'a.sczl_jtbh',
|
|
|
+ 'a.sczl_bzdh',
|
|
|
+ 'DATE_FORMAT(a.sczl_rq, "%Y-%m-%d") as day',
|
|
|
+ 'SUM(a.sczl_cl) AS total_cl',
|
|
|
+ 'c.yj_yjmc AS 印件名称',
|
|
|
+ 'CONCAT(d.Gy0_gxmc,"(",d.Add_gxmc,")") AS 工序名称',
|
|
|
+ 'RTRIM(d.印刷方式) AS 印刷方式',
|
|
|
+ 'RTRIM(d.版距) AS 版距'
|
|
|
+ ])
|
|
|
+ ->where('a.sczl_rq', 'like', $mouth . '%')
|
|
|
+ ->where('b.sys_sbID', '<>', '')
|
|
|
+ ->where($where)
|
|
|
+ ->group('a.sczl_jtbh, a.sczl_bzdh, day, c.yj_yjmc, d.Gy0_gxmc')
|
|
|
+ ->order('a.sczl_jtbh, a.sczl_bzdh, day')
|
|
|
+ ->select();
|
|
|
+halt($results);
|
|
|
+ // 数据处理
|
|
|
+ $data = [];
|
|
|
+ // 获取唯一日期并排序
|
|
|
+ $data['head'] = array_unique(array_column($results, 'day'));
|
|
|
+
|
|
|
+ // 将日期转为时间戳以排序
|
|
|
+ usort($data['head'], function($a, $b) {
|
|
|
+ return strtotime($a) - strtotime($b);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 准备按设备和班组整理的数据
|
|
|
+ $total_by_machine = [];
|
|
|
+
|
|
|
+ foreach ($results as $item) {
|
|
|
+ $machine_id = $item['sczl_jtbh'];
|
|
|
+ $group_id = $item['sczl_bzdh'];
|
|
|
+ $day = $item['day'];
|
|
|
+ $printed_type = $item['印刷方式'];
|
|
|
+
|
|
|
+ // 初始化设备和班组
|
|
|
+ if (!isset($total_by_machine[$machine_id])) {
|
|
|
+ $total_by_machine[$machine_id] = [];
|
|
|
+ }
|
|
|
+ if (!isset($total_by_machine[$machine_id][$group_id])) {
|
|
|
+ $total_by_machine[$machine_id][$group_id] = [
|
|
|
+ '机台编号' => $machine_id,
|
|
|
+ '班组编号' => $group_id,
|
|
|
+ '印件名称' => $item['印件名称'],
|
|
|
+ '工序名称' => $item['工序名称'],
|
|
|
+ 'total_cl' => 0,
|
|
|
+ 'day_total' => []
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新累计数量
|
|
|
+ if ($printed_type === '卷对卷') {
|
|
|
+ $total_by_machine[$machine_id][$group_id]['total_cl'] += round($item['total_cl'] / $item['版距'] * 1000);
|
|
|
+ } else {
|
|
|
+ $total_by_machine[$machine_id][$group_id]['total_cl'] += $item['total_cl'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新每日总计
|
|
|
+ if (!isset($total_by_machine[$machine_id][$group_id]['day_total'][$day])) {
|
|
|
+ $total_by_machine[$machine_id][$group_id]['day_total'][$day] = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($printed_type === '卷对卷') {
|
|
|
+ $total_by_machine[$machine_id][$group_id]['day_total'][$day] += round($item['total_cl'] / $item['版距'] * 1000);
|
|
|
+ } else {
|
|
|
+ $total_by_machine[$machine_id][$group_id]['day_total'][$day] += $item['total_cl'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 格式化输出数据
|
|
|
+ $data['total'] = [];
|
|
|
+
|
|
|
+ foreach ($total_by_machine as $machine_group) {
|
|
|
+ foreach ($machine_group as $group_data) {
|
|
|
+ $data['total'][] = $group_data;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->success('成功', $data);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 机台班次生产工单明细
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function MachineProductDetail()
|
|
|
+ {
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ $param = $this->request->param();
|
|
|
+
|
|
|
+ // 检查必需的参数
|
|
|
+ if (empty($param['mouth'])) {
|
|
|
+ $this->error('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // Initializing where conditions
|
|
|
+ $where = [];
|
|
|
+
|
|
|
+ // 添加可选的查询条件
|
|
|
+ if (!empty($param['machine'])) {
|
|
|
+ $where['a.sczl_jtbh'] = $param['machine'];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($param['team'])) {
|
|
|
+ $where['a.sczl_bzdh'] = ['like', substr($param['team'], 0, 1) . '%'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将参数转换成标准日期格式
|
|
|
+ $mouth = date_create_from_format('Ym', $param['mouth'])->format('Y-m');
|
|
|
+ $where['a.sczl_rq'] = ['like', $mouth . '%'];
|
|
|
+
|
|
|
+ // 分页配置
|
|
|
+ $page = !empty($param['page']) ? (int)$param['page'] : 1;
|
|
|
+ $limit = !empty($param['limit']) ? (int)$param['limit'] : 9999; // 默认查询所有
|
|
|
+
|
|
|
+ // 查询数据
|
|
|
+ $list = \db('设备_产量计酬')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('工单_印件资料 c', 'a.sczl_gdbh = c.Yj_Gdbh AND a.sczl_yjno = c.yj_Yjno')
|
|
|
+ ->join('工单_工艺资料 d', 'a.sczl_gdbh = d.Gy0_gdbh AND a.sczl_yjno = d.Gy0_yjno AND a.sczl_gxh = d.Gy0_gxh')
|
|
|
+ ->field([
|
|
|
+ 'a.sczl_gdbh' => '工单编号',
|
|
|
+ 'a.sczl_yjno' => '印件号',
|
|
|
+ 'a.sczl_gxh' => '工序号',
|
|
|
+ 'c.yj_yjmc' => '印件名称',
|
|
|
+ 'CONCAT(d.Gy0_gxmc,"(",d.Add_gxmc,")")' => '工序名称',
|
|
|
+ 'DATE(a.sczl_rq)' => '工作日期',
|
|
|
+ 'a.sczl_jtbh' => '机台编号',
|
|
|
+ 'a.sczl_bzdh' => '班组编号',
|
|
|
+ 'SUM(a.sczl_cl)' => '产量',
|
|
|
+ 'a.sczl_ms' => '墨色数',
|
|
|
+ 'rtrim(d.印刷方式)' => '印刷方式',
|
|
|
+ 'rtrim(d.版距)' => '版距'
|
|
|
+ ])
|
|
|
+ ->where($where)
|
|
|
+ ->group('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_rq, a.sczl_jtbh, a.sczl_bzdh')
|
|
|
+ ->order('工作日期')
|
|
|
+ ->page($page, $limit) // 使用 page 和 limit 实现分页
|
|
|
+ ->select();
|
|
|
+ // 数据处理
|
|
|
+ if (!empty($list)) {
|
|
|
+ foreach ($list as $key => $value) {
|
|
|
+ $list[$key]['印件名称'] = $value['印件号'] . '-' . $value['印件名称'];
|
|
|
+ $list[$key]['工序名称'] = $value['工序号'] . '-' . $value['工序名称'];
|
|
|
+ unset($list[$key]['印件号'], $list[$key]['工序号']);
|
|
|
+
|
|
|
+ // 产量计算
|
|
|
+ if ($value['印刷方式'] === '卷对卷') {
|
|
|
+ $list[$key]['产量'] = round($value['产量'] / $value['版距'] * 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 墨色数修正
|
|
|
+ if ($value['墨色数'] === '0.00') {
|
|
|
+ $list[$key]['墨色数'] = '1.00';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->success('成功', $list);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 月度机台运行工时汇总
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function MachineOperation()
|
|
|
+ {
|
|
|
+ // 确保请求是GET
|
|
|
+ if ($this->request->isGet() === false) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取请求参数
|
|
|
+ $param = $this->request->param();
|
|
|
+ if (empty($param['mouth'])) {
|
|
|
+ $this->error('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建查询条件
|
|
|
+ $where = [];
|
|
|
+ if (!empty($param['sist'])) {
|
|
|
+ $where['a.设备编组'] = $param['sist'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将参数转换成标准日期格式
|
|
|
+ $mouth = date_create_from_format('Ym', $param['mouth'])->format('Y-m');
|
|
|
+
|
|
|
+ // 单次查询,计算产量和各项工时
|
|
|
+ $list = \db('设备_基本资料')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('设备_产量计酬 b', 'a.设备编号 = b.sczl_jtbh')
|
|
|
+ ->join('工单_印件资料 c', 'b.sczl_gdbh = c.Yj_Gdbh AND b.sczl_yjno = c.yj_Yjno')
|
|
|
+ ->join('工单_工艺资料 d', 'b.sczl_gdbh = d.Gy0_gdbh AND b.sczl_yjno = d.Gy0_yjno AND b.sczl_gxh = d.Gy0_gxh')
|
|
|
+ ->field([
|
|
|
+ 'a.设备编号' => '设备编号',
|
|
|
+ 'rtrim(a.设备名称)' => '设备名称',
|
|
|
+ 'SUM(CASE WHEN rtrim(d.版距) = "卷对卷" THEN b.sczl_cl / NULLIF(d.版距, 0) * 1000 ELSE b.sczl_cl END) AS 产量',
|
|
|
+ 'SUM(b.sczl_设备运行工时)' => '设备运行工时',
|
|
|
+ 'SUM(b.sczl_保养工时)' => '保养工时',
|
|
|
+ 'SUM(b.sczl_打样总工时)' => '打样总工时',
|
|
|
+ 'SUM(b.sczl_打样工时)' => '打样补产工时',
|
|
|
+ 'SUM(b.sczl_装版总工时)' => '装版总工时',
|
|
|
+ 'SUM(b.sczl_装版工时)' => '装版补产工时',
|
|
|
+ 'SUM(b.sczl_异常停机工时)' => '异常停机工时',
|
|
|
+ 'rtrim(d.印刷方式)' => '印刷方式',
|
|
|
+ 'rtrim(d.版距)' => '版距'
|
|
|
+ ])
|
|
|
+ ->where($where)
|
|
|
+ ->where('b.sczl_rq', 'like', $mouth . '%')
|
|
|
+ ->group('a.设备编号')
|
|
|
+ ->order('a.设备编号')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ // 处理总工时的计算
|
|
|
+ $total = [
|
|
|
+ '设备运行工时' => 0,
|
|
|
+ '保养工时' => 0,
|
|
|
+ '打样总工时' => 0,
|
|
|
+ '打样补产工时' => 0,
|
|
|
+ '装版总工时' => 0,
|
|
|
+ '装版补产工时' => 0,
|
|
|
+ '异常停机工时' => 0
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 计算各项总工时
|
|
|
+ foreach ($list as $item) {
|
|
|
+ $total['设备运行工时'] += $item['设备运行工时'];
|
|
|
+ $total['保养工时'] += $item['保养工时'];
|
|
|
+ $total['打样总工时'] += $item['打样总工时'];
|
|
|
+ $total['打样补产工时'] += $item['打样补产工时'];
|
|
|
+ $total['装版总工时'] += $item['装版总工时'];
|
|
|
+ $total['装版补产工时'] += $item['装版补产工时'];
|
|
|
+ $total['异常停机工时'] += $item['异常停机工时'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将总工时添加到列表中
|
|
|
+ $list['total'] = $total;
|
|
|
+
|
|
|
+ // 返回成功响应
|
|
|
+ $this->success('成功', $list);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 设备运行工时机台生产工单数据详情
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function MachineOperationProductDetail()
|
|
|
+ {
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ $param = $this->request->param();
|
|
|
+
|
|
|
+ if (empty($param['mouth'])) {
|
|
|
+ $this->error('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // Initialize where conditions
|
|
|
+ $where = [];
|
|
|
+
|
|
|
+ if (!empty($param['machine'])) {
|
|
|
+ $where['a.sczl_jtbh'] = $param['machine'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将参数转换成标准日期格式
|
|
|
+ $mouth = date_create_from_format('Ym', $param['mouth'])->format('Y-m');
|
|
|
+ $where['a.sczl_rq'] = ['like', $mouth . '%'];
|
|
|
+
|
|
|
+ // 分页配置
|
|
|
+ $page = !empty($param['page']) ? (int)$param['page'] : 1;
|
|
|
+ $limit = !empty($param['limit']) ? (int)$param['limit'] : 9999; // 默认查询所有
|
|
|
+
|
|
|
+ // 查询数据
|
|
|
+ $list = \db('设备_产量计酬')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('设备_基本资料 b', 'a.sczl_jtbh = b.设备编号')
|
|
|
+ ->join('工单_印件资料 c', 'a.sczl_gdbh = c.Yj_Gdbh AND a.sczl_yjno = c.yj_Yjno')
|
|
|
+ ->join('工单_工艺资料 d', 'a.sczl_gdbh = d.Gy0_gdbh AND a.sczl_yjno = d.Gy0_yjno AND a.sczl_gxh = d.Gy0_gxh')
|
|
|
+ ->field([
|
|
|
+ 'a.sczl_jtbh' => '设备编号',
|
|
|
+ 'rtrim(b.设备名称)' => '设备名称',
|
|
|
+ 'DATE(a.sczl_rq)' => '日期',
|
|
|
+ 'a.sczl_gdbh' => '工单编号',
|
|
|
+ 'a.sczl_yjno' => '印件号',
|
|
|
+ 'a.sczl_gxh' => '工序号',
|
|
|
+ 'c.yj_yjmc' => '印件名称',
|
|
|
+ 'CONCAT(d.Gy0_gxmc, "(", d.Add_gxmc, ")")' => '工序名称',
|
|
|
+ 'SUM(a.sczl_cl)' => '产量',
|
|
|
+ 'SUM(a.sczl_设备运行工时)' => '设备运行工时',
|
|
|
+ 'SUM(a.sczl_保养工时)' => '保养工时',
|
|
|
+ 'SUM(a.sczl_打样总工时)' => '打样总工时',
|
|
|
+ 'SUM(a.sczl_打样工时)' => '打样补产工时',
|
|
|
+ 'SUM(a.sczl_装版总工时)' => '装板总工时',
|
|
|
+ 'SUM(a.sczl_装版工时)' => '装板补产工时',
|
|
|
+ 'SUM(a.sczl_异常停机工时)' => '异常停机工时',
|
|
|
+ 'a.sczl_ms' => '墨色数',
|
|
|
+ 'rtrim(d.印刷方式)' => '印刷方式',
|
|
|
+ 'rtrim(d.版距)' => '版距'
|
|
|
+ ])
|
|
|
+ ->where($where)
|
|
|
+ ->group('a.sczl_rq, a.sczl_gdbh, a.sczl_gxh, a.sczl_jtbh')
|
|
|
+ ->order('a.sczl_rq')
|
|
|
+ ->page($page, $limit) // 使用 page 和 limit 技术实现分页
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ // 数据处理
|
|
|
+ if (!empty($list)) {
|
|
|
+ foreach ($list as $key => $value) {
|
|
|
+ $list[$key]['工序名称'] = $value['印件号'] . '-' . $value['工序号'] . '-' . $value['工序名称'];
|
|
|
+
|
|
|
+ // 移除不需要的字段
|
|
|
+ unset($list[$key]['印件号'], $list[$key]['工序号']);
|
|
|
+
|
|
|
+ // 产量计算
|
|
|
+ if ($value['印刷方式'] === '卷对卷') {
|
|
|
+ $list[$key]['产量'] = round($value['产量'] / $value['版距'] * 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 墨色数修正
|
|
|
+ if ($value['墨色数'] === '0.00') {
|
|
|
+ $list[$key]['墨色数'] = '1.00';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->success('成功', $list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 工序产出率月度统计报表
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @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' => ['覆膜']]
|
|
|
+// ];
|
|
|
+ $processOrder= \db('设备_基本资料')
|
|
|
+ ->whereNotNull('设备编组')
|
|
|
+ ->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 合格率')
|
|
|
+// ->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]['合格率']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算年度平均值
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 获取年分数据
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function GetYear()
|
|
|
+ {
|
|
|
+ if ($this->request->isGet() === false){
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+ $data = \db('工单_质量考核汇总')
|
|
|
+ ->group('year')
|
|
|
+ ->column('YEAR(STR_TO_DATE(sys_ny, "%Y%m")) as year');
|
|
|
+ $this->success('成功',$data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 数据透视表
|
|
|
+ * @return null
|
|
|
+ * @throws \think\Exception
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function PoductData()
|
|
|
+ {
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ $param = $this->request->param();
|
|
|
+ if (empty($param['year'])) {
|
|
|
+ $this->error('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取设备编组列表(已按编号排序)
|
|
|
+ $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 完工年月,
|
|
|
+ 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();
|
|
|
+
|
|
|
+ // 执行查询
|
|
|
+ $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) {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 未匹配的条目将被丢弃
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按分类ID排序
|
|
|
+ usort($processedList, function($a, $b) {
|
|
|
+ return $a['type_id'] <=> $b['type_id'];
|
|
|
+ });
|
|
|
+
|
|
|
+ // 返回结构
|
|
|
+ $data['data'] = $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()) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+ $param = $this->request->param();
|
|
|
+ if (empty($param['month'])) {
|
|
|
+ $this->error('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ $month = date_create_from_format('Ym', $param['month'])->format('Y-m');
|
|
|
+ $where = ['a.sczl_rq' => ['like', $month . '%']];
|
|
|
+
|
|
|
+ $list = \db('设备_产量计酬')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('工单_印件资料 c', 'a.sczl_gdbh = c.Yj_Gdbh AND a.sczl_yjno = c.yj_Yjno')
|
|
|
+ ->join('工单_工艺资料 d', 'a.sczl_gdbh = d.Gy0_gdbh AND a.sczl_yjno = d.Gy0_yjno AND a.sczl_gxh = d.Gy0_gxh')
|
|
|
+ ->join('设备_基本资料 e', 'a.sczl_jtbh = e.设备编号')
|
|
|
+ ->field([
|
|
|
+ 'a.sczl_gdbh' => '工单编号',
|
|
|
+ 'a.sczl_yjno' => '印件号',
|
|
|
+ 'a.sczl_gxh' => '工序号',
|
|
|
+ 'd.Gy0_gxmc' => '工序名称',
|
|
|
+ 'SUM(a.sczl_cl)' => '产量',
|
|
|
+ 'a.sczl_ms' => '墨色数',
|
|
|
+ 'rtrim(d.印刷方式)' => '印刷方式',
|
|
|
+ 'rtrim(d.版距)' => '版距',
|
|
|
+ 'rtrim(d.Gy0_SITE)' => '车间名称',
|
|
|
+ 'rtrim(e.设备编组)' => '设备编组',
|
|
|
+ 'a.sczl_jtbh'
|
|
|
+ ])
|
|
|
+ ->where($where)
|
|
|
+ ->group('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_rq, a.sczl_jtbh, a.sczl_bzdh')
|
|
|
+ ->select();
|
|
|
+ $data = [];
|
|
|
+ if (!empty($list)) {
|
|
|
+ foreach ($list as $key => $value) {
|
|
|
+ // Convert ALL outputs to integers
|
|
|
+ $value['产量'] = (int)round($value['产量']);
|
|
|
+
|
|
|
+ if ($value['印刷方式'] === '卷对卷' && $value['版距'] != 0) {
|
|
|
+ $value['产量'] = (int)round($value['产量'] / $value['版距'] * 1000);
|
|
|
+ }
|
|
|
+ if($value['墨色数'] == 0 && $value['设备编组'] !== '11、检品机组'){
|
|
|
+ $value['墨色数'] = 1;
|
|
|
+ }
|
|
|
+ if($value['设备编组'] === '11、检品机组'){
|
|
|
+ $value['墨色数'] = 0;
|
|
|
+ }
|
|
|
+ $data[$key] = [
|
|
|
+ 'gdbh' => $value['工单编号'],
|
|
|
+ 'ms' => $value['墨色数'],
|
|
|
+ '产量' => $value['产量'],
|
|
|
+ '墨色' => $value['产量'] * $value['墨色数'],
|
|
|
+ '设备编组' => $value['设备编组']
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $grouped = [];
|
|
|
+ foreach ($data as $item) {
|
|
|
+ $key = substr($item['设备编组'], 5, 6);
|
|
|
+ if (!isset($grouped[$key])) {
|
|
|
+ $grouped[$key] = [
|
|
|
+ '产量合计' => 0,
|
|
|
+ '工序名称' => $key,
|
|
|
+ '色度数' => 0
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $grouped[$key]['产量合计'] += (int)$item['产量'];
|
|
|
+ $grouped[$key]['色度数'] += (int)$item['墨色'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ foreach ($grouped as &$group) {
|
|
|
+ $group['产量合计'] = (int)$group['产量合计'];
|
|
|
+ $group['色度数'] = (int)$group['色度数'];
|
|
|
+ }
|
|
|
+ $this->success('成功', array_values($grouped));
|
|
|
+ }
|
|
|
+}
|