Bladeren bron

first commit

liuhairui 11 maanden geleden
bovenliggende
commit
c829a312cd
2 gewijzigde bestanden met toevoegingen van 234 en 78 verwijderingen
  1. 8 0
      application/api/controller/LargeWasteRewardPunish.php
  2. 226 78
      application/api/controller/WasteStatistics.php

+ 8 - 0
application/api/controller/LargeWasteRewardPunish.php

@@ -79,6 +79,14 @@ class LargeWasteRewardPunish extends Api
         $this->success('成功',$data);
     }
 
+
+    /**
+     * 获取工序大废品惩奖列表
+     * 月份导出
+     */
+//    public function Apigetexcel(){
+//
+//    }
     /**
      * 获取工序大废品惩奖列表
      */

+ 226 - 78
application/api/controller/WasteStatistics.php

@@ -57,48 +57,51 @@ class WasteStatistics extends Api
      * @throws db\exception\DataNotFoundException
      * @throws db\exception\ModelNotFoundException
      */
+
+
     public function ReghtList()
     {
-        if ($this->request->isGet() === false){
+        if ($this->request->isGet() === false) {
             $this->error('请求错误');
         }
         $param = $this->request->param();
-        if (isset($param['mouth']) === false){
+        if (isset($param['mouth']) === false) {
             $this->error('参数错误');
         }
-        //判断查询时间范围
+
+        // 判断查询时间范围
         $dateTime = new DateTime();
         $date = $dateTime->createFromFormat('Ym', $param['mouth']);
         $mouth = $date->format('Y-m');
         $year = $date->format('Y');
         $where = [
-            'a.sczl_rq' => ['like',$mouth.'%']
+            'a.sczl_rq' => ['like', $mouth . '%']
         ];
-        if (isset($param['week']) && !empty($param['week'])){
-            $week = $dateTime->setISODate($year,$param['week']);
+        if (isset($param['week']) && !empty($param['week'])) {
+            $week = $dateTime->setISODate($year, $param['week']);
             $startTime = $week->format('Y-m-d 00:00:00');
             $weekLast = $week->modify('+7 days');
             $endTime = $weekLast->format('Y-m-d 00:00:00');
-            $where['a.sczl_rq'] = ['between',[$startTime,$endTime]];
+            $where['a.sczl_rq'] = ['between', [$startTime, $endTime]];
         }
+
         $query = \db('db_大废品')
             ->alias('a')
-            ->field('a.sczl_cl,a.JL_bh1,a.JL_bh2,a.JL_bh3,a.JL_bh4,a.JL_bh5,a.JL_bh6,a.JL_bh7,a.JL_bh8,
-            a.JL_bh9,a.JL_bh10,a.JL_Je1,JL_Je2,JL_Je3,JL_Je4,JL_Je5,JL_Je6,JL_Je7,JL_Je8,JL_Je9,
-            JL_Je10,a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,a.sczl_bh7,
-            a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,a.sczl_je1,a.sczl_je2,a.sczl_je3,a.sczl_je4,a.sczl_je5,
-            a.sczl_je6,a.sczl_je7,a.sczl_je8,a.sczl_je9,a.sczl_je10,b1.员工姓名 as 奖励人员1,
-            b2.员工姓名 as 奖励人员2,b3.员工姓名 as 奖励人员3,b4.员工姓名 as 奖励人员4,b5.员工姓名 as 奖励人员5,
-            b6.员工姓名 as 奖励人员6,b7.员工姓名 as 奖励人员7,b8.员工姓名 as 奖励人员8,b9.员工姓名 as 奖励人员9,
-            b10.员工姓名 as 奖励人员10,b1.所在部门 as 奖励部门1,b2.所在部门 as 奖励部门2,b3.所在部门 as 奖励部门3,
-            b4.所在部门 as 奖励部门4,b5.所在部门 as 奖励部门5,b6.所在部门 as 奖励部门6,b7.所在部门 as 奖励部门7,
-            b8.所在部门 as 奖励部门8,b9.所在部门 as 奖励部门9,b10.所在部门 as 奖励部门10,c1.员工姓名 as 惩罚人员1,
-            c2.员工姓名 as 惩罚人员2,c3.员工姓名 as 惩罚人员3,c4.员工姓名 as 惩罚人员4,c5.员工姓名 as 惩罚人员5,
-            c6.员工姓名 as 惩罚人员6,c7.员工姓名 as 惩罚人员7,c8.员工姓名 as 惩罚人员8,c9.员工姓名 as 惩罚人员9,
-            c10.员工姓名 as 惩罚人员10,c1.所在部门 as 惩罚部门1,c2.所在部门 as 惩罚部门2,c3.所在部门 as 惩罚部门3,
-            c4.所在部门 as 惩罚部门4,c5.所在部门 as 惩罚部门5,c6.所在部门 as 惩罚部门6,c7.所在部门 as 惩罚部门7,
-            c8.所在部门 as 惩罚部门8,c9.所在部门 as 惩罚部门9,c10.所在部门 as 惩罚部门10,WEEK(a.sys_rq,1) as week');
-        for($i = 1;$i<=10;$i++){
+            ->field('a.sczl_cl,WEEK(a.sys_rq,1) as week,a.sczl_rq,
+            a.JL_bh1,a.JL_bh2,a.JL_bh3,a.JL_bh4,a.JL_bh5,a.JL_bh6,a.JL_bh7,a.JL_bh8,a.JL_bh9,a.JL_bh10,
+            a.JL_Je1,JL_Je2,JL_Je3,JL_Je4,JL_Je5,JL_Je6,JL_Je7,JL_Je8,JL_Je9,JL_Je10,
+            a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,a.sczl_bh7,a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,
+            a.sczl_je1,a.sczl_je2,a.sczl_je3,a.sczl_je4,a.sczl_je5,a.sczl_je6,a.sczl_je7,a.sczl_je8,a.sczl_je9,a.sczl_je10,
+            b1.员工姓名 as 奖励人员1,b2.员工姓名 as 奖励人员2,b3.员工姓名 as 奖励人员3,b4.员工姓名 as 奖励人员4,b5.员工姓名 as 奖励人员5,
+            b6.员工姓名 as 奖励人员6,b7.员工姓名 as 奖励人员7,b8.员工姓名 as 奖励人员8,b9.员工姓名 as 奖励人员9,b10.员工姓名 as 奖励人员10,
+            b1.所在部门 as 奖励部门1,b2.所在部门 as 奖励部门2,b3.所在部门 as 奖励部门3,b4.所在部门 as 奖励部门4,b5.所在部门 as 奖励部门5,
+            b6.所在部门 as 奖励部门6,b7.所在部门 as 奖励部门7,b8.所在部门 as 奖励部门8,b9.所在部门 as 奖励部门9,b10.所在部门 as 奖励部门10,
+            c1.员工姓名 as 惩罚人员1,c2.员工姓名 as 惩罚人员2,c3.员工姓名 as 惩罚人员3,c4.员工姓名 as 惩罚人员4,c5.员工姓名 as 惩罚人员5,
+            c6.员工姓名 as 惩罚人员6,c7.员工姓名 as 惩罚人员7,c8.员工姓名 as 惩罚人员8,c9.员工姓名 as 惩罚人员9,c10.员工姓名 as 惩罚人员10,
+            c1.所在部门 as 惩罚部门1,c2.所在部门 as 惩罚部门2,c3.所在部门 as 惩罚部门3,c4.所在部门 as 惩罚部门4,c5.所在部门 as 惩罚部门5,
+            c6.所在部门 as 惩罚部门6,c7.所在部门 as 惩罚部门7,c8.所在部门 as 惩罚部门8,c9.所在部门 as 惩罚部门9,c10.所在部门 as 惩罚部门10
+        ');
+        for ($i = 1; $i <= 10; $i++) {
             $jl_bh = 'a.JL_bh' . $i;
             $jl_alias = 'b' . $i;
             $query->join("人事_基本资料 $jl_alias", "$jl_bh = {$jl_alias}.员工编号 AND {$jl_bh} IS NOT NULL", 'LEFT');
@@ -107,64 +110,209 @@ class WasteStatistics extends Api
             $query->join("人事_基本资料 $sczl_alias", "$sczl_bh = {$sczl_alias}.员工编号 AND {$sczl_bh} IS NOT NULL", 'LEFT');
         }
         $list = $query->where($where)->select();
-        $data = [];
-        foreach ($list as $key=>$value){
-            for ($i = 1;$i <= 10; $i++){
-                $jl_bh = $value['JL_bh'.$i];
-                $jl_je = $value['JL_Je'.$i];
-                $jl_xm = $value['奖励人员'.$i];
-                $jl_bm = $value['奖励部门'.$i];
-                $sczl_bh = $value['sczl_bh'.$i];
-                $sczl_je = $value['sczl_je'.$i];
-                $sczl_xm = $value['惩罚人员'.$i];
-                $sczl_bm = $value['惩罚部门'.$i];
-                //奖励人员数据
-                if (!empty($jl_bh) && $jl_bh !== ''){
-                    if (isset($data[$jl_bh])){
-                        $data[$jl_bh]['奖励金额'] += $jl_je;
-                        $data[$jl_bh]['发现次数'] += 1;
-                        $data[$jl_bh]['发现张数'] += $value['sczl_cl'];
-                    }else{
-                        $data[$jl_bh] = [
-                            '所在部门' => $jl_bm,
-                            '员工编号' => $jl_bh,
-                            '员工姓名' => $jl_xm,
-                            '发现次数' => 1,
-                            '发现张数' => $value['sczl_cl'],
-                            '奖励金额' => $jl_je,
-                            '遗漏次数' => 0,
-                            '遗漏张数' => 0,
-                            '处罚金额' => 0,
-                            '年月' => $param['mouth'],
-                            '周数' => $value['week']
-                        ];
-                    }
+
+
+        // 初始化惩罚数据存储结构
+        $penaltyData = [];
+        $penaltyMonthlyTotal = [];
+        foreach ($list as $record) {
+            $date = $record['sczl_rq'];
+            $week = $record['week'];
+            $monthKey = date('Y-m', strtotime($date));
+            /*
+              * 惩罚人员数据
+              */
+            for ($i = 1; $i <= 10; $i++) {
+                $employeeId = $record["sczl_bh{$i}"];
+                if (empty($employeeId)) continue;
+                $employeeName = $record["惩罚人员{$i}"];
+                $department = $record["惩罚部门{$i}"];
+                $penaltyAmount = $record["sczl_je{$i}"] * $record['sczl_cl'];
+                // 判断是否是机长(sczl_bh1)
+                $isCaptain = ($i == 1);
+                // 初始化每日数据(不立即应用封顶)
+                if (!isset($penaltyData[$date][$employeeId])) {
+                    $penaltyData[$date][$employeeId] = [
+                        '所在部门' => $department,
+                        '员工编号' => $employeeId,
+                        '员工姓名' => $employeeName,
+                        '发现次数' => 0,
+                        '发现张数' => 0,
+                        '奖励金额' => 0,
+                        '遗漏次数' => 0,
+                        '遗漏张数' => 0,
+                        '处罚金额' => 0,
+                        '年月' => date('Y-m', strtotime($date)),
+                        '周数' => $week,
+                        'isCaptain' => $isCaptain // 标记是否是机长
+                    ];
                 }
-                //惩罚人员数据
-                if (!empty($sczl_bh) && $sczl_bh !== ''){
-                    if (isset($data[$sczl_bh])){
-                        $data[$sczl_bh]['处罚金额'] += $sczl_je;
-                        $data[$sczl_bh]['遗漏次数'] += 1;
-                        $data[$sczl_bh]['遗漏张数'] += $value['sczl_cl'];
-                    }else{
-                        $data[$sczl_bh] = [
-                            '所在部门' => $sczl_bm,
-                            '员工编号' => $sczl_bh,
-                            '员工姓名' => $sczl_xm,
-                            '发现次数' => 0,
-                            '发现张数' => 0,
-                            '奖励金额' => 0,
-                            '遗漏次数' => 1,
-                            '遗漏张数' => $value['sczl_cl'],
-                            '处罚金额' => $sczl_je,
-                            '年月' => $param['mouth'],
-                            '周数' => $value['week']
-                        ];
+                // 累加数据(先不封顶)
+                $penaltyData[$date][$employeeId]['发现次数'] += 1;
+                $penaltyData[$date][$employeeId]['发现张数'] += $record['sczl_cl'];
+                $penaltyData[$date][$employeeId]['处罚金额'] += $penaltyAmount;
+            }
+        }
+
+        // 按天进行封顶处理
+        foreach ($penaltyData as $date => &$employees) {
+            foreach ($employees as &$employee) {
+                // 应用封顶
+                if ($employee['isCaptain']) {
+                    $employee['处罚金额'] = min($employee['处罚金额'], 1000); // 机长封顶1000
+                } else {
+                    $employee['处罚金额'] = min($employee['处罚金额'], 500);  // 其他人封顶500
+                }
+                // 初始化月度数据
+                $monthEmployeeKey = $employee['年月'] . "_" . $employee['员工编号'];
+                if (!isset($penaltyMonthlyTotal[$monthEmployeeKey])) {
+                    $penaltyMonthlyTotal[$monthEmployeeKey] = [
+                        '所在部门' => $employee['所在部门'],
+                        '员工编号' => $employee['员工编号'],
+                        '员工姓名' => $employee['员工姓名'],
+                        '发现次数' => 0,
+                        '发现张数' => 0,
+                        '奖励金额' => 0,
+                        '遗漏次数' => 0,
+                        '遗漏张数' => 0,
+                        '处罚金额' => 0,
+                        '年月' => $employee['年月'],
+                        '周数' => $employee['周数']
+                    ];
+                }
+                // 累加月度数据
+                $penaltyMonthlyTotal[$monthEmployeeKey]['发现次数'] += $employee['发现次数'];
+                $penaltyMonthlyTotal[$monthEmployeeKey]['发现张数'] += $employee['发现张数'];
+                $penaltyMonthlyTotal[$monthEmployeeKey]['处罚金额'] += $employee['处罚金额'];
+            }
+        }
+        // 处理惩罚数据的最终格式
+        $finalPenaltyData = [];
+        foreach ($penaltyMonthlyTotal as $monthKey => $details) {
+            $finalPenaltyData[] = $details;
+        }
+
+        /*
+         * 处理奖励数据
+         */
+        $rewardData = [];
+        $rewardMonthlyTotal = [];
+        foreach ($list as $key => $value) {
+            for ($i = 1; $i <= 10; $i++) {
+                if (empty($value["JL_bh{$i}"])) {
+                    continue;
+                }
+                $employeeId = $value["JL_bh{$i}"];
+                $employeeName = $value["奖励人员{$i}"];
+                $department = $value["奖励部门{$i}"];
+                $totalJLAmt = 0;
+                for ($j = 1; $j <= 10; $j++) {
+                    $jlKey = "JL_Je{$j}";
+                    if (!empty($value[$jlKey]) && $value[$jlKey] > 0) {
+                        $totalJLAmt += $value[$jlKey] * $value['sczl_cl'];
                     }
                 }
+                $totalJLAmt = min($totalJLAmt, 100);
+                $date = $value['sczl_rq'];
+                $week = $value['week'];
+                $foundSheets = $value['sczl_cl'];
+                $monthKey = date('Y-m', strtotime($date)) . "_{$employeeId}";
+                if (!isset($rewardData[$date][$employeeId])) {
+                    $rewardData[$date][$employeeId] = [
+                        '所在部门' => $department,
+                        '员工编号' => $employeeId,
+                        '员工姓名' => $employeeName,
+                        '发现次数' => 0,
+                        '发现张数' => 0,
+                        '奖励金额' => 0,
+                        '遗漏次数' => 0,
+                        '遗漏张数' => 0,
+                        '处罚金额' => 0,
+                        '年月' => date('Y-m', strtotime($date)),
+                        '周数' => $week
+                    ];
+                }
+                $rewardData[$date][$employeeId]['发现次数'] += 1;
+                $rewardData[$date][$employeeId]['发现张数'] += $foundSheets;
+                $rewardData[$date][$employeeId]['奖励金额'] += $totalJLAmt;
+                if (!isset($rewardMonthlyTotal[$monthKey])) {
+                    $rewardMonthlyTotal[$monthKey] = [
+                        '所在部门' => $department,
+                        '员工编号' => $employeeId,
+                        '员工姓名' => $employeeName,
+                        '发现次数' => 0,
+                        '发现张数' => 0,
+                        '奖励金额' => 0,
+                        '遗漏次数' => 0,
+                        '遗漏张数' => 0,
+                        '处罚金额' => 0,
+                        '年月' => date('Y-m', strtotime($date)),
+                        '周数' => $week
+                    ];
+                }
             }
         }
-        $data = array_values($data);
-        $this->success('成功',$data);
+        // 按天封顶,每日不超过200
+        $rewardDailyCapped = [];
+        foreach ($rewardData as $date => $employees) {
+            foreach ($employees as $employeeId => $details) {
+                $cappedAmount = min($details['奖励金额'], 200);
+                $details['奖励金额'] = $cappedAmount;
+                $rewardDailyCapped[$date][$employeeId] = $details;
+
+                $monthKey = date('Y-m', strtotime($date)) . "_{$employeeId}";
+                $rewardMonthlyTotal[$monthKey]['发现次数'] += $details['发现次数'];
+                $rewardMonthlyTotal[$monthKey]['发现张数'] += $details['发现张数'];
+                $rewardMonthlyTotal[$monthKey]['奖励金额'] += $cappedAmount;
+            }
+        }
+        // 按月封顶,每月不超过1500
+        $finalRewardData = [];
+        foreach ($rewardMonthlyTotal as $monthKey => $details) {
+            $details['奖励金额'] = min($details['奖励金额'], 1500);
+            $finalRewardData[] = $details;
+        }
+        // 处理惩罚数据的最终格式
+        $finalPenaltyData = [];
+        foreach ($penaltyMonthlyTotal as $monthKey => $details) {
+            $finalPenaltyData[] = $details;
+        }
+        /*
+         * 合并奖励和惩罚数据
+         */
+        $combinedData = [];
+        // 将奖励数据加入合并数组
+        foreach ($finalRewardData as $reward) {
+            $key = $reward['员工编号'];
+            if (!isset($combinedData[$key])) {
+                $combinedData[$key] = $reward;
+                $combinedData[$key]['遗漏次数'] = 0;
+                $combinedData[$key]['遗漏张数'] = 0;
+                $combinedData[$key]['处罚金额'] = 0;
+            } else {
+                $combinedData[$key]['发现次数'] += $reward['发现次数'];
+                $combinedData[$key]['发现张数'] += $reward['发现张数'];
+                $combinedData[$key]['奖励金额'] += $reward['奖励金额'];
+            }
+        }
+
+        // 将惩罚数据加入合并数组
+        foreach ($finalPenaltyData as $penalty) {
+            $key = $penalty['员工编号'];
+            if (!isset($combinedData[$key])) {
+                $combinedData[$key] = $penalty;
+                $combinedData[$key]['发现次数'] = 0;
+                $combinedData[$key]['发现张数'] = 0;
+                $combinedData[$key]['奖励金额'] = 0;
+            } else {
+                $combinedData[$key]['遗漏次数'] += $penalty['遗漏次数'];
+                $combinedData[$key]['遗漏张数'] += $penalty['遗漏张数'];
+                $combinedData[$key]['处罚金额'] += $penalty['处罚金额'];
+            }
+        }
+        // 重新索引合并后的数组
+        $result = array_values($combinedData);
+        $this->success('成功', $result);
     }
-}
+
+}