Browse Source

成本核算

unknown 7 tháng trước cách đây
mục cha
commit
3efbebd7da
1 tập tin đã thay đổi với 531 bổ sung0 xóa
  1. 531 0
      application/api/controller/CostAccounting.php

+ 531 - 0
application/api/controller/CostAccounting.php

@@ -1 +1,532 @@
 <?php
+
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\Request;
+
+/**
+ * 各月制造费用维护
+ */
+class CostAccounting extends Api
+{
+    protected $noNeedLogin = ['*'];
+    protected $noNeedRight = ['*'];
+
+
+    /**
+     * 各月制造费用维护菜单
+     * @return void
+     */
+    public function getTab()
+    {
+        // 1. 请求方法验证
+        if (!$this->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[] = [
+                '车间' => $item['workshop'],
+                '色度数' => number_format($item['total'], 2)
+            ];
+        }
+        $this->success('成功', $result);
+    }
+}