Kaynağa Gözat

员工工资查询

unknown 3 ay önce
ebeveyn
işleme
b8e0069619
1 değiştirilmiş dosya ile 207 ekleme ve 0 silme
  1. 207 0
      application/api/controller/GluingSalary.php

+ 207 - 0
application/api/controller/GluingSalary.php

@@ -0,0 +1,207 @@
+<?php
+
+namespace app\api\controller;
+
+
+use app\common\controller\Api;
+use think\Db;
+use think\Request;
+
+/**
+ * 糊盒工资查询
+ */
+class GluingSalary extends Api
+{
+    protected $noNeedLogin = ['*'];
+    protected $noNeedRight = ['*'];
+
+
+    /**
+     * 左侧菜单
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public function getTab()
+    {
+        if(!$this->request->isGet()){
+            $this->error('请求方式错误');
+        }
+        $res=db('糊盒工资汇总')
+            ->field('DATE_FORMAT(`sczl_rq`, "%Y%m") as sys_ny,bh')
+            ->group('DATE_FORMAT(`sczl_rq`, "%Y%m"),bh')
+            ->whereTime('sczl_rq', '>=', strtotime('-14 months'))
+            ->where('bh','<>','000000')
+            ->order('sczl_rq desc')
+            ->select();
+        foreach($res as $v){
+            $arr[$v['sys_ny'].'('][]=$v['bh'];
+        }
+        $rs = db('人事_基本资料')->column('员工编号,所在部门');
+        foreach($arr as $k=>$v){
+            foreach($v as $value){
+                if(array_key_exists($value,$rs)){
+                    $data[$k.count($v).'人)'][rtrim($rs[$value])][]=rtrim($rs[$value]);
+                }            }
+            $j=0;
+            foreach($data[$k.count($v).'人)'] as $keys=>$values){
+                $data[$k.count($v).'人)']['bm'][$j]=$keys;
+                $data[$k.count($v).'人)'][$keys]=count($values);
+                $j++;
+            }
+            usort($data[$k.count($v).'人)']['bm'], function($a, $b) {
+                $order = array(
+                    '胶印车间',
+                    '凹印车间',
+                    '丝印车间',
+                    '模切车间',
+                    '检验车间',
+                    '精品试验车间',
+                    '品保部',
+                    '人力资源部',
+                    '生产部',
+                    '营销部',
+                    '数字化车间',
+                    '精品车间'
+                );
+                $a_index = array_search($a, $order);
+                $b_index = array_search($b, $order);
+                return $a_index - $b_index;
+            });
+            foreach($data[$k.count($v).'人)']['bm'] as &$va){
+                $va=$va.'('.$data[$k.count($v).'人)'][$va].'人)';
+            }
+            $data[$k.count($v).'人)']=$data[$k.count($v).'人)']['bm'];
+        }
+        $i=0;
+        foreach($data as $k=>$v){
+            $datas[$i]['label']=$k;
+            $gdbh=substr($k,0,strpos($k,'('));
+            foreach($v as $key=>$value){
+                $datas[$i]['children'][$key]['label']=$value;
+                $datas[$i]['children'][$key]['gdbh']=$gdbh;
+            }
+            $i++;
+        }
+        $this->success('成功',$datas);
+
+    }
+
+
+    /**
+     * 上方列表
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public function getList()
+    {
+
+        if(!$this->request->isGet()){
+            $this->error('请求方式错误');
+        }
+        $req = $this->request->param();
+        if (isset($req['search'])){
+            $where = [
+                'sczl_rq' => ['like',$req['date'].'%'],
+                'bh|name' => ['like',$req['search'].'%'],
+            ];
+            $res = db('糊盒工资汇总')
+                ->where($where)
+                ->group('bh, sczl_rq')
+                ->field('bh as 员工编号, DATE_FORMAT(sczl_rq, "%Y.%m.%d") as 日期, name as 姓名, sum(salary) as 计件工资')
+                ->select();
+        }else{
+            $where = [
+                'a.sczl_rq' => ['like',$req['date'].'%'],
+                'b.所在部门' => ['like', $req['department'] . '%']
+            ];
+            $res = db('糊盒工资汇总')
+                ->alias('a')
+                ->join('人事_基本资料 b', 'b.员工编号 = a.bh')
+                ->where($where)
+                ->group('a.bh, a.sczl_rq')
+                ->field('a.bh as 员工编号, DATE_FORMAT(a.sczl_rq, "%Y.%m.%d") as 日期, a.name as 姓名, sum(a.salary) as 计件工资')
+                ->select();
+        }
+
+        $processedData = [];
+
+        foreach ($res as $item) {
+            // 用「员工编号」作为唯一分组键(编号唯一,比编号+姓名更简洁)
+            $empNo = $item['员工编号'];
+
+            // 转换工资为浮点型(避免字符串拼接导致计算错误)
+            $salary = (float)$item['计件工资'];
+
+            if (!isset($processedData[$empNo])) {
+                // 初始化该员工的分组数据
+                $processedData[$empNo] = [
+                    '员工编号' => $empNo,
+                    '姓名' => $item['姓名'],
+                    '月工资总和' => 0.00, // 初始化为浮点型,保证精度
+                    '每日明细' => []     // 存储按时间排序的每日工资
+                ];
+            }
+
+            // 累加月工资总和
+            $processedData[$empNo]['月工资总和'] += $salary;
+
+            // 将当前日期的工资存入明细(保留原始字段)
+            $processedData[$empNo]['每日明细'][] = [
+                '日期' => $item['日期'],
+                '计件工资' => $item['计件工资'] // 保留原始字符串格式,避免精度丢失
+            ];
+        }
+
+        // 对每个员工的「每日明细」按日期升序排序
+        foreach ($processedData as &$empData) {
+            usort($empData['每日明细'], function($a, $b) {
+                // 将日期字符串转换为时间戳进行比较
+                $timeA = strtotime(str_replace('.', '-', $a['日期']));
+                $timeB = strtotime(str_replace('.', '-', $b['日期']));
+                return $timeA - $timeB; // 升序排序(从小到大)
+            });
+        }
+        unset($empData); // 释放引用,避免后续误操作
+
+        // 转换为索引数组(可选,便于前端遍历)
+        $finalData = array_values($processedData);
+
+        $this->success('成功',$finalData);
+    }
+
+
+    /**
+     *下方详情
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public function getDetail()
+    {
+        if($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $req = $this->request->param();
+        if (!isset($req['date'])){
+            $this->error('参数错误');
+        }
+        $list = \db('糊盒工资汇总')
+            ->field('sczl_gdbh,sczl_gxmc,DATE_FORMAT(sczl_rq, "%Y.%m.%d") as 日期,sczl_jtbh,cpdh,cpmc,保养工时,装版工时,异常工时,设备运行工时,rate as 分配比例')
+            ->where([
+                'sczl_rq' => ['like',$req['date'].'%'],
+                'bh' => $req['code']
+            ])
+            ->order('sczl_rq')
+            ->select();
+        if(empty($list)){
+            $this->error('失败');
+        }else{
+            $this->success('成功',$list);
+        }
+    }
+}