Ver Fonte

大废品 批次查询制程检验记录优化

zck há 8 meses atrás
pai
commit
22ffde428e

+ 33 - 1
application/api/controller/ProductionLot.php

@@ -155,6 +155,37 @@ class ProductionLot extends Api
         }
     }
 
+        /**
+     * 制程异常记录
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public function ProcessInspection()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (!isset($param['gdbh']) || !isset($param['yjno'])|| !isset($param['num'])){
+            $this->error('参数错误');
+        }
+        $list = db('制程检验_记录')
+            ->field('工单编号,流程单号,工序名称,班组编号,类别,检验项目,检验结果,检验备注 as 项目备注,相关标准 as 修改标准')
+            ->where('工单编号',$param['gdbh'])
+            ->where('印件号',$param['yjno'])
+            ->where('流程单号',$param['num'])
+            ->where('类别', 'neq', '现场巡查记录')
+            ->order('流程单号')
+            ->select();
+        if (empty($list)){
+            $this->success('未找到记录');
+        }
+        $this->success('成功',$list);
+
+    }
+
     /**
      * 制程异常记录
      * @return void
@@ -168,13 +199,14 @@ class ProductionLot extends Api
             $this->error('请求错误');
         }
         $param = $this->request->param();
-        if (!isset($param['gdbh']) || !isset($param['yjno'])){
+        if (!isset($param['gdbh']) || !isset($param['yjno'])|| !isset($param['num'])){
             $this->error('参数错误');
         }
         $list = db('制程检验_记录附加')
             ->field('流程单号,缺陷备注')
             ->where('工单编号',$param['gdbh'])
             ->where('印件号',$param['yjno'])
+            ->where('流程单号',$param['num'])
             ->order('流程单号')
             ->select();
         if (empty($list)){

+ 91 - 58
application/api/controller/WasteStatistics.php

@@ -192,70 +192,98 @@ class WasteStatistics extends Api
             $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
-                    ];
-                }
-            }
+ * 处理奖励数据
+ */
+$rewardData = [];
+$rewardMonthlyTotal = [];
+
+foreach ($list as $key => $value) {
+    // 1. 先收集当天所有有奖励的员工及其原始应得金额
+    $dailyEmployees = [];
+    $dailyTotal = 0;
+    
+    for ($i = 1; $i <= 10; $i++) {
+        if (empty($value["JL_bh{$i}"])) {
+            continue;
+        }
+        
+        // 计算该员工原始应得金额
+        $amount = 0;
+        if (!empty($value["JL_Je{$i}"]) && $value["JL_Je{$i}"] > 0) {
+            $amount = $value["JL_Je{$i}"] * $value['sczl_cl'];
         }
+        
+        $dailyEmployees[] = [
+            'id' => $value["JL_bh{$i}"],
+            'name' => $value["奖励人员{$i}"],
+            'dept' => $value["奖励部门{$i}"],
+            'original_amount' => $amount
+        ];
+        
+        $dailyTotal += $amount;
+    }
+    
+    // 2. 判断是否需要重新分配(总额超过200)
+    $needsRedistribution = ($dailyTotal > 200);
+    $dailyCap = 200;
+    
+    // 3. 处理每个员工的实际奖励金额
+    foreach ($dailyEmployees as $emp) {
+        $finalAmount = $needsRedistribution 
+            ? ($dailyCap / count($dailyEmployees))
+            : $emp['original_amount'];
+        
+        $date = $value['sczl_rq'];
+        $monthKey = date('Y-m', strtotime($date)) . "_" . $emp['id'];
+        $foundSheets = $value['sczl_cl'];
+        if (!isset($rewardData[$date][$emp['id']])) {
+            $rewardData[$date][$emp['id']] = [
+                '所在部门' => $emp['dept'],
+                '员工编号' => $emp['id'],
+                '员工姓名' => $emp['name'],
+                '发现次数' => 0,
+                '发现张数' => 0,
+                '奖励金额' => 0,
+                '遗漏次数' => 0,
+                '遗漏张数' => 0,
+                '处罚金额' => 0,
+                '年月' => date('Y-m', strtotime($date)),
+                '周数' => $value['week']
+            ];
+        }
+        
+        $rewardData[$date][$emp['id']]['发现次数'] += 1;
+        $rewardData[$date][$emp['id']]['发现张数'] += $foundSheets;
+        $rewardData[$date][$emp['id']]['奖励金额'] += $finalAmount;
+        
+        // 初始化月汇总数据
+        if (!isset($rewardMonthlyTotal[$monthKey])) {
+            $rewardMonthlyTotal[$monthKey] = [
+                '所在部门' => $emp['dept'],
+                '员工编号' => $emp['id'],
+                '员工姓名' => $emp['name'],
+                '发现次数' => 0,
+                '发现张数' => 0,
+                '奖励金额' => 0,
+                '遗漏次数' => 0,
+                '遗漏张数' => 0,
+                '处罚金额' => 0,
+                '年月' => date('Y-m', strtotime($date)),
+                '周数' => $value['week']
+            ];
+        }
+    }
+}
+
+
+
         // 按天封顶,每日不超过200
         $rewardDailyCapped = [];
         foreach ($rewardData as $date => $employees) {
             foreach ($employees as $employeeId => $details) {
+
                 $cappedAmount = min($details['奖励金额'], 200);
                 $details['奖励金额'] = $cappedAmount;
                 $rewardDailyCapped[$date][$employeeId] = $details;
@@ -280,6 +308,7 @@ class WasteStatistics extends Api
         /*
          * 合并奖励和惩罚数据
          */
+
         $combinedData = [];
         // 将奖励数据加入合并数组
         foreach ($finalRewardData as $reward) {
@@ -312,6 +341,10 @@ class WasteStatistics extends Api
         }
         // 重新索引合并后的数组
         $result = array_values($combinedData);
+foreach ($result as &$item) {
+    $item['奖励金额'] = round($item['奖励金额'], 2);
+    $item['处罚金额'] = round($item['处罚金额'], 2);
+}
         $this->success('成功', $result);
     }