Procházet zdrojové kódy

超停工单置顶、扣分补扣、精度问题修改

ouyj před 5 dny
rodič
revize
29b0f25771

+ 75 - 15
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtRepairOrderServiceImpl.java

@@ -2522,12 +2522,19 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
         person = personList.get(0);
         // 更新运行得分
         Double currentRunScore = person.getRunScore();
-        Double newRunScore = (currentRunScore != null ? currentRunScore : 0.0) + rewardScore.doubleValue();
+        
+        // 对奖励分数进行精度处理:保留6位小数
+        BigDecimal processedReward = rewardScore;
+        if (rewardScore.scale() > 6) {
+            processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+        }
+        
+        Double newRunScore = (currentRunScore != null ? currentRunScore : 0.0) + processedReward.doubleValue();
 
         GxtRepairOrderPerson updatedPerson = new GxtRepairOrderPerson();
         updatedPerson.setId(person.getId());
         updatedPerson.setRunScore(newRunScore);
-        updatedPerson.setScore(person.getScore() != null ? person.getScore().add(rewardScore) : rewardScore);
+        updatedPerson.setScore(person.getScore() != null ? person.getScore().add(processedReward) : processedReward);
         updatedPerson.setUpdateBy(SecurityUtils.getLoginUser().getUser().getUserName());
         updatedPerson.setUpdateTime(new Date());
 
@@ -2553,12 +2560,19 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
         person = personList.get(0);
         // 更新运行得分
         Double currentRunScore = person.getRunScore();
-        Double newRunScore = (currentRunScore != null ? currentRunScore : 0.0) + rewardScore.doubleValue();
+        
+        // 对奖励分数进行精度处理:保留6位小数
+        BigDecimal processedReward = rewardScore;
+        if (rewardScore.scale() > 6) {
+            processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+        }
+        
+        Double newRunScore = (currentRunScore != null ? currentRunScore : 0.0) + processedReward.doubleValue();
 
         GxtWorkOrderPerson updatedPerson = new GxtWorkOrderPerson();
         updatedPerson.setId(person.getId());
         updatedPerson.setRunScore(newRunScore);
-        updatedPerson.setScore(person.getScore() != null ? person.getScore().add(rewardScore) : rewardScore);
+        updatedPerson.setScore(person.getScore() != null ? person.getScore().add(processedReward) : processedReward);
         updatedPerson.setUpdateBy(SecurityUtils.getLoginUser().getUser().getUserName());
         updatedPerson.setUpdateTime(new Date());
 
@@ -2693,7 +2707,14 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                 // 维修工单:更新repairTotalScore
                 BigDecimal currentRepairTotal = (userScore.getRepairTotalScore() != null) ?
                         userScore.getRepairTotalScore() : BigDecimal.ZERO;
-                BigDecimal newRepairScore = currentRepairTotal.add(rewardScore);
+                
+                // 对奖励分数进行精度处理:保留6位小数
+                BigDecimal processedReward = rewardScore;
+                if (rewardScore.scale() > 6) {
+                    processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                }
+                
+                BigDecimal newRepairScore = currentRepairTotal.add(processedReward);
                 userScore.setRepairTotalScore(newRepairScore);
 
                 // 维保得分保持不变
@@ -2708,7 +2729,14 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                 // 维保工单:更新maintenanceTotalScore
                 BigDecimal currentMaintenanceTotal = (userScore.getMaintenanceTotalScore() != null) ?
                         userScore.getMaintenanceTotalScore() : BigDecimal.ZERO;
-                BigDecimal newMaintenanceScore = currentMaintenanceTotal.add(rewardScore);
+                
+                // 对奖励分数进行精度处理:保留6位小数
+                BigDecimal processedReward = rewardScore;
+                if (rewardScore.scale() > 6) {
+                    processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                }
+                
+                BigDecimal newMaintenanceScore = currentMaintenanceTotal.add(processedReward);
                 userScore.setMaintenanceTotalScore(newMaintenanceScore);
 
                 // 维修得分保持不变
@@ -2736,14 +2764,26 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
             // 根据orderType决定初始化哪个字段
             if (detail.getOrderType() != null && detail.getOrderType() == 1) {
                 // 维修工单
-                newUserScore.setRepairTotalScore(rewardScore);
+                // 对奖励分数进行精度处理:保留6位小数
+                BigDecimal processedReward = rewardScore;
+                if (rewardScore.scale() > 6) {
+                    processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                }
+                
+                newUserScore.setRepairTotalScore(processedReward);
                 newUserScore.setMaintenanceTotalScore(BigDecimal.ZERO);
-                newUserScore.setFinalScore(rewardScore);
+                newUserScore.setFinalScore(processedReward);
             } else if (detail.getOrderType() != null && detail.getOrderType() == 2) {
                 // 维保工单
-                newUserScore.setMaintenanceTotalScore(rewardScore);
+                // 对奖励分数进行精度处理:保留6位小数
+                BigDecimal processedReward = rewardScore;
+                if (rewardScore.scale() > 6) {
+                    processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                }
+                
+                newUserScore.setMaintenanceTotalScore(processedReward);
                 newUserScore.setRepairTotalScore(BigDecimal.ZERO);
-                newUserScore.setFinalScore(rewardScore);
+                newUserScore.setFinalScore(processedReward);
             }
 
             newUserScore.setStatus(0);
@@ -2842,6 +2882,14 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                 addOrderScoreDetailsForStopScoreRepair(repairOrder, allPersons, detailPerPersonDeduction, 3, detail.getCreateTime());
             }
         }
+
+        // 将所有挂起状态的扣分记录状态更新为2(已处理)
+        for (GxtOrderScoreDetail detail : scoreDetails) {
+            GxtOrderScoreDetail updateDetail = new GxtOrderScoreDetail();
+            updateDetail.setId(detail.getId());
+            updateDetail.setStatus(2);
+            gxtOrderScoreDetailService.updateGxtOrderScoreDetail(updateDetail);
+        }
     }
 
     @Override
@@ -2891,7 +2939,8 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                 }
             }
         }
-
+        //处理扣分数据
+        completePendingOrderDeductionData(gxtRepairOrder);
         return result;
     }
 
@@ -3020,7 +3069,13 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                     BigDecimal currentRepairTotal = (userScore.getRepairTotalScore() != null) ?
                             userScore.getRepairTotalScore() : BigDecimal.ZERO;
 
-                    BigDecimal newRepairScore = currentRepairTotal.add(deductionScore);
+                    // 对扣分进行精度处理:保留6位小数
+                    BigDecimal processedDeduction = deductionScore;
+                    if (deductionScore.scale() > 6) {
+                        processedDeduction = deductionScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                    }
+
+                    BigDecimal newRepairScore = currentRepairTotal.add(processedDeduction);
                     userScore.setRepairTotalScore(newRepairScore);
 
                     // 更新最终评分
@@ -3041,13 +3096,18 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                     newUserScore.setNickName(person.getNickName());
                     newUserScore.setMonthPeriod(monthScore.getMonthPeriod());
 
+                    // 对扣分进行精度处理:保留6位小数
+                    BigDecimal processedDeduction = deductionScore;
+                    if (deductionScore.scale() > 6) {
+                        processedDeduction = deductionScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                    }
+
                     // 设置维修工单得分
-                    BigDecimal repairScore = deductionScore;
-                    newUserScore.setRepairTotalScore(repairScore);
+                    newUserScore.setRepairTotalScore(processedDeduction);
 
                     // 维保得分默认为0
                     newUserScore.setMaintenanceTotalScore(BigDecimal.ZERO);
-                    newUserScore.setFinalScore(deductionScore);
+                    newUserScore.setFinalScore(processedDeduction);
                     newUserScore.setStatus(0);
                     newUserScore.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
                     newUserScore.setCreateTime(new Date());

+ 78 - 34
ygtx-gxt/src/main/java/com/ygtx/gxt/task/EquipmentSafeOperationRewardTask.java

@@ -335,7 +335,13 @@ public class EquipmentSafeOperationRewardTask {
                         BigDecimal currentRepairTotal = (userScore.getRepairTotalScore() != null) ?
                                 userScore.getRepairTotalScore() : BigDecimal.ZERO;
 
-                        BigDecimal newRepairScore = currentRepairTotal.add(rewardScore);
+                        // 对奖励分数进行精度处理:保留6位小数
+                        BigDecimal processedReward = rewardScore;
+                        if (rewardScore.scale() > 6) {
+                            processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+
+                        BigDecimal newRepairScore = currentRepairTotal.add(processedReward);
                         userScore.setRepairTotalScore(newRepairScore);
 
                         // 更新最终评分
@@ -358,20 +364,25 @@ public class EquipmentSafeOperationRewardTask {
                         newUserScore.setNickName(person.getNickName());
                         newUserScore.setMonthPeriod(monthScore.getMonthPeriod());
                         
+                        // 对奖励分数进行精度处理:保留6位小数
+                        BigDecimal processedReward = rewardScore;
+                        if (rewardScore.scale() > 6) {
+                            processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+                        
                         // 设置维修工单得分
-                        BigDecimal repairScore = rewardScore;
-                        newUserScore.setRepairTotalScore(rewardScore);
+                        newUserScore.setRepairTotalScore(processedReward);
                         
                         // 维保得分默认为0
                         newUserScore.setMaintenanceTotalScore(BigDecimal.ZERO);
-                        newUserScore.setFinalScore(rewardScore);
+                        newUserScore.setFinalScore(processedReward);
                         newUserScore.setStatus(0);
                         newUserScore.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
                         newUserScore.setCreateTime(new Date());
                         // 插入新记录
                         userScoreService.insertGxtUserScore(newUserScore);
                         
-                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), repairScore);
+                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), processedReward);
                     }
                 }
             }
@@ -413,7 +424,13 @@ public class EquipmentSafeOperationRewardTask {
                         BigDecimal currentMaintenanceTotal = (userScore.getMaintenanceTotalScore() != null) ?
                                 userScore.getMaintenanceTotalScore() : BigDecimal.ZERO;
 
-                        BigDecimal newMaintenanceScore = currentMaintenanceTotal.add(rewardScore);
+                        // 对奖励分数进行精度处理:保留6位小数
+                        BigDecimal processedReward = rewardScore;
+                        if (rewardScore.scale() > 6) {
+                            processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+
+                        BigDecimal newMaintenanceScore = currentMaintenanceTotal.add(processedReward);
                         userScore.setMaintenanceTotalScore(newMaintenanceScore);
 
                         // 更新最终评分
@@ -436,20 +453,25 @@ public class EquipmentSafeOperationRewardTask {
                         newUserScore.setNickName(person.getNickName());
                         newUserScore.setMonthPeriod(monthScore.getMonthPeriod());
                         
+                        // 对奖励分数进行精度处理:保留6位小数
+                        BigDecimal processedReward = rewardScore;
+                        if (rewardScore.scale() > 6) {
+                            processedReward = rewardScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+                        
                         // 设置维保工单得分
-                        BigDecimal maintenanceScore = rewardScore;
-                        newUserScore.setMaintenanceTotalScore(maintenanceScore);
+                        newUserScore.setMaintenanceTotalScore(processedReward);
                         
                         // 维修得分默认为0
                         newUserScore.setRepairTotalScore(BigDecimal.ZERO);
-                        newUserScore.setFinalScore(maintenanceScore);
+                        newUserScore.setFinalScore(processedReward);
                         newUserScore.setStatus(0);
                         newUserScore.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
                         newUserScore.setCreateTime(new Date());
                         // 插入新记录
                         userScoreService.insertGxtUserScore(newUserScore);
                         
-                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), maintenanceScore);
+                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), processedReward);
                     }
                 }
             }
@@ -874,7 +896,13 @@ public class EquipmentSafeOperationRewardTask {
                         BigDecimal currentRepairTotal = (userScore.getRepairTotalScore() != null) ?
                                 userScore.getRepairTotalScore() : BigDecimal.ZERO;
 
-                        BigDecimal newRepairScore = currentRepairTotal.add(deductionScore);
+                        // 对扣分进行精度处理:保留6位小数
+                        BigDecimal processedDeduction = deductionScore;
+                        if (deductionScore.scale() > 6) {
+                            processedDeduction = deductionScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+
+                        BigDecimal newRepairScore = currentRepairTotal.add(processedDeduction);
                         userScore.setRepairTotalScore(newRepairScore);
 
                         // 更新最终评分
@@ -897,20 +925,25 @@ public class EquipmentSafeOperationRewardTask {
                         newUserScore.setNickName(person.getNickName());
                         newUserScore.setMonthPeriod(monthScore.getMonthPeriod());
                         
+                        // 对扣分进行精度处理:保留6位小数
+                        BigDecimal processedDeduction = deductionScore;
+                        if (deductionScore.scale() > 6) {
+                            processedDeduction = deductionScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+                        
                         // 设置维修工单得分
-                        BigDecimal repairScore = deductionScore;
-                        newUserScore.setRepairTotalScore(repairScore);
+                        newUserScore.setRepairTotalScore(processedDeduction);
                         
                         // 维保得分默认为0
                         newUserScore.setMaintenanceTotalScore(BigDecimal.ZERO);
-                        newUserScore.setFinalScore(deductionScore);
+                        newUserScore.setFinalScore(processedDeduction);
                         newUserScore.setStatus(0);
                         newUserScore.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
                         newUserScore.setCreateTime(new Date());
                         // 插入新记录
                         userScoreService.insertGxtUserScore(newUserScore);
                         
-                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), repairScore);
+                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), processedDeduction);
                     }
                 }
             }
@@ -952,7 +985,13 @@ public class EquipmentSafeOperationRewardTask {
                         BigDecimal currentMaintenanceTotal = (userScore.getMaintenanceTotalScore() != null) ?
                                 userScore.getMaintenanceTotalScore() : BigDecimal.ZERO;
 
-                        BigDecimal newMaintenanceScore = currentMaintenanceTotal.add(deductionScore);
+                        // 对扣分进行精度处理:保留6位小数
+                        BigDecimal processedDeduction = deductionScore;
+                        if (deductionScore.scale() > 6) {
+                            processedDeduction = deductionScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+
+                        BigDecimal newMaintenanceScore = currentMaintenanceTotal.add(processedDeduction);
                         userScore.setMaintenanceTotalScore(newMaintenanceScore);
 
                         // 更新最终评分
@@ -975,20 +1014,25 @@ public class EquipmentSafeOperationRewardTask {
                         newUserScore.setNickName(person.getNickName());
                         newUserScore.setMonthPeriod(monthScore.getMonthPeriod());
                         
+                        // 对扣分进行精度处理:保留6位小数
+                        BigDecimal processedDeduction = deductionScore;
+                        if (deductionScore.scale() > 6) {
+                            processedDeduction = deductionScore.setScale(6, BigDecimal.ROUND_HALF_UP);
+                        }
+                        
                         // 设置维保工单得分
-                        BigDecimal maintenanceScore = deductionScore;
-                        newUserScore.setMaintenanceTotalScore(maintenanceScore);
+                        newUserScore.setMaintenanceTotalScore(processedDeduction);
                         
                         // 维修得分默认为0
                         newUserScore.setRepairTotalScore(BigDecimal.ZERO);
-                        newUserScore.setFinalScore(deductionScore);
+                        newUserScore.setFinalScore(processedDeduction);
                         newUserScore.setStatus(0);
                         newUserScore.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
                         newUserScore.setCreateTime(new Date());
                         // 插入新记录
                         userScoreService.insertGxtUserScore(newUserScore);
                         
-                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), maintenanceScore);
+                        log.debug("创建用户 {} 月度统计得分: {}", person.getNickName(), processedDeduction);
                     }
                 }
             }
@@ -1230,15 +1274,25 @@ public class EquipmentSafeOperationRewardTask {
             repairOrder.setOverStopStatus(1);
             repairOrderService.updateGxtRepairOrder(repairOrder);
             log.info("待结单维修工单 {} overStopStatus 从 0 更新为 1", repairOrder.getWorkOrderProjectNo());
-            //overStopStatus = 1;
-            return;
+            overStopStatus = 1;
+            //return;
         }
         // 获取奖励配置和扣分分数(公共逻辑)
         BigDecimal deductionScore = getDeductionScore(repairOrder, stopDays);
         if (deductionScore == null) {
             return; // 没有找到合适的扣分配置或分数无效
         }
-        if (overStopStatus == 2) {
+        if (overStopStatus == 1) {
+            // 当维修工单 overStopStatus 为 1 时,表示已超停但没有真实工作人员,使用虚拟扣分
+            // 虚拟扣分过程实现:只添加明细记录,不实际更新人员得分
+            log.debug("待结单维修工单 {} overStopStatus 为 1,使用虚拟扣分", repairOrder.getWorkOrderProjectNo());
+
+            // 创建虚拟负责人进行扣分记录
+            List<GxtRepairOrderPerson> virtualPersons = createVirtualLeaderPerson(repairOrder);
+
+            // 添加虚拟扣分明细记录(状态为 1,表示挂起)
+            addOrderScoreDetailsForStopScoreRepairNotCompllete(repairOrder, virtualPersons, deductionScore, 3); // 3 代表停机扣分
+        } else if (overStopStatus == 2) {
             // 当维修工单 overStopStatus 为 2 时,代表有真正的工作人员,进行真实扣分
             log.debug("待结单维修工单 {} overStopStatus 为 2,已填写工作人员", repairOrder.getWorkOrderProjectNo());
                 
@@ -1277,17 +1331,7 @@ public class EquipmentSafeOperationRewardTask {
             // 更新月度统计数据
             updateMonthlyScoreDataForStopScore(repairOrder, perPersonDeduction, currentTime);
                 
-        }/* else if (overStopStatus == 1) {
-            // 当维修工单 overStopStatus 为 1 时,表示已超停但没有真实工作人员,使用虚拟扣分
-            // 虚拟扣分过程实现:只添加明细记录,不实际更新人员得分
-            log.debug("待结单维修工单 {} overStopStatus 为 1,使用虚拟扣分", repairOrder.getWorkOrderProjectNo());
-                
-            // 创建虚拟负责人进行扣分记录
-            List<GxtRepairOrderPerson> virtualPersons = createVirtualLeaderPerson(repairOrder);
-                    
-            // 添加虚拟扣分明细记录(状态为 1,表示挂起)
-            addOrderScoreDetailsForStopScoreRepairNotCompllete(repairOrder, virtualPersons, deductionScore, 3); // 3 代表停机扣分
-        }*/
+        }
     }
 
     /**

+ 1 - 1
ygtx-gxt/src/main/resources/mapper/gxt/GxtOrderMineMapper.xml

@@ -241,7 +241,7 @@
                 </if>
             </where>
         ) t
-        ORDER BY COALESCE(update_time, create_time) DESC, create_time DESC
+        ORDER BY CASE WHEN over_stop_status = 1 THEN 0 ELSE 1 END ASC, COALESCE(update_time, create_time) DESC, create_time DESC
     </select>
 
 </mapper>

+ 1 - 1
ygtx-gxt/src/main/resources/mapper/gxt/GxtRepairOrderMapper.xml

@@ -240,7 +240,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                      where t2.dept_id = (select dept_id from sys_user where user_name = #{params.currentUser,jdbcType=VARCHAR} and del_flag='0')))
             </if>
         </where>
-        order by create_time desc
+        order by CASE WHEN over_stop_status = 1 THEN 0 ELSE 1 END ASC, create_time desc
     </select>
 
     <select id="selectGxtRepairOrderListByMonth" parameterType="GxtRepairOrder" resultMap="GxtRepairOrderResult">