request->isGet()) { $this->error('仅支持GET请求'); } // 2. 使用静态变量避免重复创建数组 static $tabs, $sist; if ($tabs === null) { $tabs = [ '1、月度人工数据', '2、水电气直接费用', '3、水电气分摊费用', '4、其他待摊费用', '5、车间色度数' ]; $sist = ['胶印车间', '凹丝印车间', '印后车间']; } // 3. 数据库查询优化 $months = db('成本_各月水电气') ->field('Sys_ny AS year_month') ->group('Sys_ny') ->order('Sys_ny DESC') ->column('Sys_ny'); // 4. 使用模板构建策略 $data = []; $template = []; // 预构建模板 foreach ($tabs as $tab) { $template[$tab] = ($tab === '2、水电气直接费用') ? $sist : $tab; } // 仅需单次循环赋值 foreach ($months as $month) { $data[$month] = $template; } $this->success('成功', $data); } /** * 月度车间人工维护 * @return void * @throws \think\db\exception\BindParamException * @throws \think\exception\PDOException */ public function ArtificialAdd() { if($this->request->isPost() === false){ $this->error('请求错误'); } $param = Request::instance()->post(); if (empty($param)) { $this->error('参数错误'); } $data = []; foreach ($param as $key => $value) { $data[$key] = [ 'Sys_ny' => $value['sys_ny'], '车间' => $value['sist'], '一线工资总额' => $value['number'], '系数' => 1.2, '应发工资' => $value['number'] * 1.2, 'Sys_id' => $value['sys_id'], 'Sys_rq' => date('Y-m-d H:i:s', time()) ]; } $sql = db('成本v23_各月人工')->fetchSql(true)->insertAll($data); $res = db()->query($sql); if ($res !== false) { $this->success('新增成功'); }else{ $this->error('添加失败'); } } /** * 月度人工维护列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function ArtificialAddList() { if($this->request->isGet() === false){ $this->error('请求错误'); } $param = $this->request->param(); if (empty($param) || empty($param['Sys_ny'])) { $this->error('参数错误'); } $list = db('成本v23_各月人工') ->where('Sys_ny', $param['Sys_ny']) ->field('Sys_ny, 车间, 一线工资总额, Sys_id as 创建用户, Sys_rq as 创建时间,Mod_rq as 修订时间,UniqID') ->select(); $this->success('成功', $list); } /** * 月度人工维护修改 * @return void * @throws \think\Exception * @throws \think\db\exception\BindParamException * @throws \think\exception\PDOException */ public function ArtificialEdit() { if($this->request->isPost() === false){ $this->error('请求错误'); } $param = Request::instance()->post(); if (empty($param)) { $this->error('参数错误'); } $i = 0; foreach ($param as $value) { $sql = db('成本v23_各月人工') ->where('UniqID', $value['UniqID']) ->fetchSql(true) ->update(['一线工资总额'=>$value['number']]); $res = db()->query($sql); if ($res === false) { $i++; } } if ($i === 0) { $this->success('修改成功'); }else{ $this->error('修改失败'); } } /** * 月度人工数据右侧上方列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function ArtificialList() { if (!$this->request->isGet()) { $this->error('仅支持GET请求'); } $month = $this->request->param('month'); if (empty($month)) { $this->error('month参数缺失或为空'); } $list = db('成本v23_各月人工')->alias('a') ->join('设备_基本资料 b', 'a.车间 = b.使用部门') ->join('绩效工资汇总 c', 'a.Sys_ny = c.sys_ny AND c.sczl_jtbh = b.设备编号') ->join('成本_各月其他费用 d', 'a.Sys_ny = d.sys_ny','left') ->field([ 'a.Sys_ny' => '年月', 'a.车间' => '车间', 'SUM(c.个人计件工资) + SUM(c.个人加班工资)' => '人工分摊因子总额', 'a.一线工资总额' => '车间实发工资', 'd.部门人员工资' => '部门人员工资实发', 'd.管理人员工资' => '管理人员工资实发' ]) ->where('a.Sys_ny', $month) ->group('a.Sys_ny, a.车间') ->select(); if (empty($list)) { $this->success('未找到匹配数据', []); } $this->success('获取成功', $list); } /** * 月度人工数据下方工单详情 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function ArtificialDetailList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $month = $param['month']; $sist = $param['sist']; $list = db('工单_质量考核汇总') ->alias('a') ->join('设备_基本资料 b', 'a.sczl_jtbh = b.设备编号') ->join('工单_印件资料 c', 'a.Gy0_gdbh = c.Yj_Gdbh and a.印件及工序 = c.yj_Yjno') ->join('工单_工艺资料 d', 'a.Gy0_gdbh = d.Gy0_gdbh and a.印件及工序 = d.Gy0_yjno and a.工序 = d.Gy0_gxh') ->field([ 'a.sys_ny' => '年月', 'a.Gy0_gdbh' => '工单编号', 'a.印件及工序' => '印件号', 'a.工序' => '工序号', 'c.yj_yjmc' => '印件名称', 'd.Gy0_gxmc' => '工序名称', 'a.印件工序产量' => '班组车头产量', 'd.工价系数' => '工序难度系数', 'SUM(a.CjsJe)' => '计件工资', 'rtrim(b.使用部门)' => '车间名称', ]) ->where('a.Sys_ny', $month) ->where('b.使用部门', $sist) ->group('a.Sys_ny, a.Gy0_gdbh,a.印件及工序,a.印件及工序') ->order('a.Gy0_gdbh') ->select(); if (empty($list)) { $this->success('未找到数据'); }else{ $this->success('成功', $list); } } /** * 水电气直接费用右侧列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function shuidianqiList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $month = $param['month']; $sist = $param['sist']; $list = db('成本_各月水电气') ->field('rtrim(部门名称) as 部门名称,rtrim(设备编号) as 设备编号,rtrim(科目名称) as 设备名称,rtrim(耗电量) as 耗电量, rtrim(单位电价) as 单位电价,rtrim(耗气量) as 耗气量,rtrim(单位气价) as 单位气价,rtrim(Sys_id) as 创建用户,Sys_rq as 创建时间,UniqID,耗电量*单位电价 as 直接费用合计') ->where('Sys_ny', $month) ->where('部门名称', $sist) ->where('费用类型', '直接') ->group('Sys_ny, Sys_rq, UniqID') ->select(); if (empty($list)) { $this->success('未找到数据'); }else{ $this->success('成功', $list); } } /** * 水电气下方工单详情 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function shuidianqiDetailList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $month = substr($param['month'], 0, 4) . '-' . substr($param['month'], 4, 2); $machine = $param['machine']; $list = db('设备_产量计酬') ->alias('a') ->join('工单_印件资料 b', 'a.sczl_gdbh = b.Yj_Gdbh and a.sczl_yjno = b.yj_Yjno') ->field('a.sczl_gdbh as 工单编号,b.yj_yjmc as 印件名称,a.sczl_yjno as 印件号,a.sczl_gxh as 工序号, sum(a.sczl_cl)*a.sczl_ls as 班组车头产量,sum(a.sczl_设备运行工时) as 占用机时') ->where('a.sczl_rq','like', '%'.$month.'%') ->where('a.sczl_jtbh', $machine) ->group('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh') ->select(); if (empty($list)) { $this->success('未找到数据'); } foreach ($list as $k => $v) { $list[$k]['计件产量'] = $v['班组车头产量']; $list[$k]['水电气分摊因子'] = $v['占用机时']; $list[$k]['年月'] = $param['month']; } $this->success('成功', $list); } /** * 水电气分摊费用 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function shuidianqifentanList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $month = $param['month']; $list = db('成本_各月水电气') ->field('rtrim(部门名称) as 部门名称,rtrim(设备编号) as 设备编号,rtrim(科目名称) as 设备名称,rtrim(耗电量) as 耗电量, rtrim(单位电价) as 单位电价,rtrim(耗气量) as 耗气量,rtrim(单位气价) as 单位气价,rtrim(Sys_id) as 创建用户,Sys_rq as 创建时间,UniqID,耗电量*单位电价 as 直接费用合计') ->where('Sys_ny', $month) ->where('费用类型', '分摊') ->group('Sys_ny, Sys_rq, UniqID') ->select(); if (empty($list)) { $this->success('未找到数据'); }else{ $this->success('成功', $list); } } /** * 各月工单人工明细 * @return void * @throws \think\db\exception\BindParamException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function ChromaticityAdd() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $list = db('绩效工资汇总') ->alias('a') ->join('工单_工艺资料 b','a.sczl_gdbh = b.Gy0_gdbh and a.sczl_yjno = b.Gy0_yjno and a.sczl_gxh = b.Gy0_gxh') ->join('设备_基本资料 c','a.sczl_jtbh = c.设备编号','LEFT') ->join('工单_印件资料 d','a.sczl_gdbh = d.Yj_Gdbh and a.sczl_yjno = d.yj_Yjno') ->field('a.sczl_gdbh as 工单编号,a.sczl_yjno as 印件号,a.sczl_gxh as 工序号,sum(a.班组车头产量) as 班组车头产量,b.Gy0_gxmc as 工序名称, a.sczl_ms as 墨色数,c.使用部门,b.印刷方式,b.版距,b.工价系数,a.sczl_jtbh,d.yj_yjmc as 印件名称,sum(a.车头产量占用机时) as 占用机时,a.sys_rq as 年月, a.工序难度系数,sum(a.班组换算产量) as 班组换算产量,a.千件工价') ->where('a.sys_ny', $param['month']) ->group('a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_jtbh') ->select(); $data = []; foreach ($list as $k => $v) { if ($v['版距'] === '0.0'){ $list[$k]['版距'] = 1000; } if ($v['墨色数'] === '0.00'){ $list[$k]['墨色数'] = 1; } if (strpos($v['工序名称'],'切废')){ $list[$k]['墨色数'] = 0.2; } $chanliang = $v['班组车头产量']*$v['工序难度系数'] + $v['班组换算产量']; $data[] = [ '车间名称' => $v['使用部门'], 'sys_ny' => $param['month'], 'sczl_gdbh' => $v['工单编号'], '印件名称' => $v['印件名称'], 'sczl_yjno' => $v['印件号'], 'sczl_gxh' => $v['工序号'], '工序名称' => $v['工序名称'], 'sczl_jtbh' => $v['sczl_jtbh'], '卷张换算系数' => $list[$k]['版距']/1000, '占用机时' => $v['占用机时'], '班组车头产量' => $v['班组车头产量'], 'sczl_ms' => $list[$k]['墨色数'], '工序难度系数' => $v['工序难度系数'], '班组换算产量' => $v['班组换算产量'], '千件工价' => $v['千件工价'], '计件产量' => $chanliang, '水电分摊因子' => $v['占用机时'], '材料分摊因子' => $chanliang, '人工分摊因子' => ($chanliang/1000)*$v['千件工价'], 'Sys_id' => $param['sys_id'], 'Sys_rq' => date('Y-m-d H:i:s', time()) ]; } $sql = db('成本v23_月度成本明细')->fetchSql(true)->insertAll($data); $res = db()->query($sql); if ($res !== false) { $this->success('成功'); }else{ $this->error('失败'); } } /** * 各月工单色度数 * @return void * @throws \think\db\exception\BindParamException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function ChromaticityDetailAdd() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $month = substr($param['month'], 0, 4) . '-' . substr($param['month'], 4, 2); $list = db('设备_产量计酬') ->alias('a') ->join('设备_基本资料 b','a.sczl_jtbh = b.设备编号') ->join('工单_工艺资料 c','a.sczl_gdbh = c.Gy0_gdbh and a.sczl_yjno = c.Gy0_yjno and a.sczl_gxh = c.Gy0_gxh') ->field('a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_jtbh,a.sczl_gxmc,sum(a.sczl_cl) as 产量,a.sczl_jtbh,a.sczl_ms,b.使用部门, sum(a.sczl_设备运行工时) as 通电工时,a.sczl_dedh,c.Gy0_gxmc') ->where('a.sczl_rq','like', $month.'%') ->group('a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_jtbh') ->select(); if (empty($list)) { $this->error('没找到生产数据'); } $data = []; foreach ($list as $k => $v) { if ($v['sczl_ms'] === '0.00'){ $list[$k]['sczl_ms'] = 1; } if (strpos($v['Gy0_gxmc'],'切废') !== false){ $list[$k]['sczl_ms'] = 0.2; } $data[] = [ '年月' => $param['month'], 'sczl_gdbh' => $v['sczl_gdbh'], 'sczl_yjno' => $v['sczl_yjno'], 'sczl_gxh' => $v['sczl_gxh'], 'sczl_jtbh' => $v['sczl_jtbh'], 'sczl_gxmc' => $v['sczl_gxmc'], 'sczl_ms' => $v['sczl_ms'], 'sczl_dedh' => $v['sczl_dedh'], '通电时间' => $v['通电工时'], 'sczl_cl' => $v['产量'], '部门' => $v['使用部门'], 'Sys_ID' => $param['sys_id'], 'Sys_Rq' => date('Y-m-d H:i:s', time()) ]; } if (db('成本_各月色度数')->where('年月',$param['month'])->count() !== 0) { db('成本_各月色度数')->where('年月',$param['month'])->delete(); } $sql = db('成本_各月色度数')->fetchSql(true)->insertAll($data); $res = db()->query($sql); if ($res !== false) { $this->success('成功'); }else{ $this->error('失败'); } } /** * 各月车间色度数列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function ChromaticityDetailList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } // 执行统计查询 $stats = db('成本_各月色度数') ->field([ 'rtrim(部门) AS workshop', 'SUM(sczl_cl * IF(sczl_ms=0, 1, sczl_ms)) AS total' ]) ->where('部门', '<>', '') // 过滤空车间数据 ->where('sczl_cl', '>', 0) // 过滤无效产量 ->where('年月', $param['month']) ->group('部门') ->select(); // 构造中文返回结果 $result = []; foreach ($stats as $item) { $result[] = [ '年月' => $param['month'], '车间' => $item['workshop'], '色度数' => number_format($item['total'], 2) ]; } $this->success('成功', $result); } /** * 车间色度数详情列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function MonochromaticDetailList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $list = db('成本_各月色度数') ->where('年月', $param['month']) ->where('部门', $param['sist']) ->order('sczl_gdbh') ->select(); $this->success('成功', $list); } /** * 车间人工工单详情 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function SummaryCostAccountingList() { if ($this->request->isGet() === false) { $this->error('请求错误'); } $param = $this->request->param(); if (empty($param)) { $this->error('参数错误'); } $list = db('成本v23_月度成本明细') ->where('车间名称', $param['sist']) ->where('sys_ny', $param['month']) ->order('sczl_gdbh') ->select(); if (empty($list)) { $this->error('未找到数据'); }else{ $this->success('成功', $list); } } }