|
|
@@ -13,6 +13,7 @@ import com.ygtx.framework.web.service.SysPermissionService;
|
|
|
import com.ygtx.gxt.domain.*;
|
|
|
import com.ygtx.gxt.mapper.GxtOrderScoreMapper;
|
|
|
import com.ygtx.gxt.mapper.GxtRepairOrderMapper;
|
|
|
+import com.ygtx.gxt.mapper.GxtUserScoreMapper;
|
|
|
import com.ygtx.gxt.mapper.GxtWorkOrderMapper;
|
|
|
import com.ygtx.gxt.service.*;
|
|
|
import com.ygtx.system.mapper.SysDeptMapper;
|
|
|
@@ -88,6 +89,12 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
|
|
|
@Autowired
|
|
|
private GxtWorkOrderMapper gxtWorkOrderMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IGxtOrderScoreDetailService gxtOrderScoreDetailService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private GxtUserScoreMapper gxtUserScoreMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 查询合并的工单列表(维修工单和维保工单)
|
|
|
*
|
|
|
@@ -177,115 +184,44 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Map<String, Object> getOrderScoreStatistics(GxtRepairOrder repairOrder, GxtWorkOrder workOrder, String month) {
|
|
|
- // 添加业务特定的数据权限过滤
|
|
|
- addBusinessDataScopeFilter(repairOrder, workOrder);
|
|
|
-
|
|
|
- // 设置创建人,用于数据权限过滤
|
|
|
- if(!Constants.SUPER_ADMIN.equals(SecurityUtils.getUsername())){
|
|
|
- if (repairOrder.getCreateBy() == null || repairOrder.getCreateBy().isEmpty()) {
|
|
|
- repairOrder.setCreateBy(SecurityUtils.getUsername());
|
|
|
- }
|
|
|
-
|
|
|
- if (workOrder.getCreateBy() == null || workOrder.getCreateBy().isEmpty()) {
|
|
|
- workOrder.setCreateBy(SecurityUtils.getUsername());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
- Long currentUserId = SecurityUtils.getUserId();
|
|
|
- if(currentUserId != null){
|
|
|
- // 添加用户ID参数用于Mapper查询
|
|
|
- repairOrder.getParams().put("currentUserId", currentUserId);
|
|
|
- workOrder.getParams().put("currentUserId", currentUserId);
|
|
|
-
|
|
|
- Map<String, Object> statistics = gxtOrderScoreMapper.selectOrderScoreStatistics(repairOrder, workOrder, month);
|
|
|
-
|
|
|
- // 计算总工分
|
|
|
- Object maintenanceScoreObj = statistics.get("maintenanceScore");
|
|
|
- Object repairScoreObj = statistics.get("repairScore");
|
|
|
-
|
|
|
- double maintenanceScore = maintenanceScoreObj != null ? ((Number) maintenanceScoreObj).doubleValue() : 0.0;
|
|
|
- double repairScore = repairScoreObj != null ? ((Number) repairScoreObj).doubleValue() : 0.0;
|
|
|
- double totalScore = maintenanceScore + repairScore;
|
|
|
+ String userName = SecurityUtils.getUsername();
|
|
|
+ if(StringUtils.isNotEmpty(userName)){
|
|
|
+ // 添加用户ID参数用于Mapper查询 gxtUserScoreMapper
|
|
|
+ GxtUserScore gxtUserScore = new GxtUserScore();
|
|
|
+ gxtUserScore.setUserName(userName);
|
|
|
+ gxtUserScore.setMonthPeriod( month);
|
|
|
+ List<GxtUserScore> gxtUserScores = gxtUserScoreMapper.selectGxtUserScoreList(gxtUserScore);
|
|
|
+
|
|
|
+ // 计算工分并赋值给result中的totalScore、maintenanceScore、repairScore
|
|
|
+ BigDecimal totalScore = BigDecimal.ZERO;
|
|
|
+ BigDecimal maintenanceScore = BigDecimal.ZERO;
|
|
|
+ BigDecimal repairScore = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ for (GxtUserScore userScore : gxtUserScores) {
|
|
|
+ // 累加维护总分
|
|
|
+ if (userScore.getMaintenanceTotalScore() != null) {
|
|
|
+ maintenanceScore = maintenanceScore.add(userScore.getMaintenanceTotalScore());
|
|
|
+ }
|
|
|
+ // 累加维修总分
|
|
|
+ if (userScore.getRepairTotalScore() != null) {
|
|
|
+ repairScore = repairScore.add(userScore.getRepairTotalScore());
|
|
|
+ }
|
|
|
+ // 累加最终得分
|
|
|
+ if (userScore.getFinalScore() != null) {
|
|
|
+ totalScore = totalScore.add(userScore.getFinalScore());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /*result.put("totalScore", totalScore.doubleValue());
|
|
|
+ result.put("maintenanceScore", maintenanceScore.doubleValue());
|
|
|
+ result.put("repairScore", repairScore.doubleValue());*/
|
|
|
|
|
|
result.put("totalScore", totalScore);
|
|
|
result.put("maintenanceScore", maintenanceScore);
|
|
|
result.put("repairScore", repairScore);
|
|
|
- result.put("maintenanceCount", statistics.get("maintenanceCount"));
|
|
|
- result.put("repairCount", statistics.get("repairCount"));
|
|
|
}
|
|
|
return result;
|
|
|
- /*// 如果用户的数据权限是"仅本人数据",则只统计本人的工分
|
|
|
- if (isCurrentUserDataScopeSelf()) {
|
|
|
- Long currentUserId = SecurityUtils.getUserId();
|
|
|
- if (currentUserId != null) {
|
|
|
- // 添加用户ID参数用于Mapper查询
|
|
|
- repairOrder.getParams().put("currentUserId", currentUserId);
|
|
|
- workOrder.getParams().put("currentUserId", currentUserId);
|
|
|
-
|
|
|
- // 直接使用Mapper查询,避免加载大量数据到内存
|
|
|
- Map<String, Object> statistics = gxtOrderScoreMapper.selectOrderScoreStatistics(repairOrder, workOrder, month);
|
|
|
-
|
|
|
- // 计算总工分
|
|
|
- Object maintenanceScoreObj = statistics.get("maintenanceScore");
|
|
|
- Object repairScoreObj = statistics.get("repairScore");
|
|
|
-
|
|
|
- double maintenanceScore = maintenanceScoreObj != null ? ((Number) maintenanceScoreObj).doubleValue() : 0.0;
|
|
|
- double repairScore = repairScoreObj != null ? ((Number) repairScoreObj).doubleValue() : 0.0;
|
|
|
- double totalScore = maintenanceScore + repairScore;
|
|
|
-
|
|
|
- result.put("totalScore", totalScore);
|
|
|
- result.put("maintenanceScore", maintenanceScore);
|
|
|
- result.put("repairScore", repairScore);
|
|
|
- result.put("maintenanceCount", statistics.get("maintenanceCount"));
|
|
|
- result.put("repairCount", statistics.get("repairCount"));
|
|
|
-
|
|
|
- // 计算排名
|
|
|
- int rank = calculateUserRankInStation(repairOrder, workOrder, month);
|
|
|
- result.put("rank", rank);
|
|
|
-
|
|
|
- // 计算场站总人数
|
|
|
- LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
- if (loginUser != null && loginUser.getUser() != null) {
|
|
|
- Long deptId = loginUser.getUser().getDeptId();
|
|
|
- if (deptId != null) {
|
|
|
- List<Long> stationUserIds = getStationUserIds(deptId);
|
|
|
- // 确保至少包含当前用户
|
|
|
- if (stationUserIds.isEmpty() && currentUserId != null) {
|
|
|
- stationUserIds = new ArrayList<>();
|
|
|
- stationUserIds.add(currentUserId);
|
|
|
- }
|
|
|
- result.put("totalRankingUsers", stationUserIds.size());
|
|
|
- } else {
|
|
|
- // 如果没有部门信息,至少当前用户参与排名
|
|
|
- result.put("totalRankingUsers", 1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 如果无法获取用户信息,至少当前用户参与排名
|
|
|
- result.put("totalRankingUsers", 1);
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 获取统计信息(非"仅本人数据"权限用户或其他情况)
|
|
|
- Map<String, Object> statistics = gxtOrderScoreMapper.selectOrderScoreStatistics(repairOrder, workOrder, month);
|
|
|
- result.putAll(statistics);
|
|
|
-
|
|
|
- // 计算总工分
|
|
|
- Object maintenanceScoreObj = statistics.get("maintenanceScore");
|
|
|
- Object repairScoreObj = statistics.get("repairScore");
|
|
|
-
|
|
|
- double maintenanceScore = maintenanceScoreObj != null ? ((Number) maintenanceScoreObj).doubleValue() : 0.0;
|
|
|
- double repairScore = repairScoreObj != null ? ((Number) repairScoreObj).doubleValue() : 0.0;
|
|
|
- double totalScore = maintenanceScore + repairScore;
|
|
|
-
|
|
|
- result.put("totalScore", totalScore);
|
|
|
- result.put("maintenanceScore", maintenanceScore);
|
|
|
- result.put("repairScore", repairScore);
|
|
|
-
|
|
|
- return result;*/
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -766,6 +702,9 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
|
|
|
if ("to_archive".equals(order.getScoringStatus()) || "archived".equals(order.getScoringStatus())) {
|
|
|
// 更新月度统计数据
|
|
|
updateMonthlyScoreData(orderScoreInfo);
|
|
|
+
|
|
|
+ // 添加工单个人分数明细数据
|
|
|
+ addOrderScoreDetails(orderScoreInfo, order);
|
|
|
}
|
|
|
return result;
|
|
|
} else if (orderScoreInfo.getOrderType() == 2) {
|
|
|
@@ -868,6 +807,9 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
|
|
|
if ("to_archive".equals(order.getScoringStatus()) || "archived".equals(order.getScoringStatus())) {
|
|
|
// 更新月度统计数据
|
|
|
updateMonthlyScoreData(orderScoreInfo);
|
|
|
+
|
|
|
+ // 添加工单个人分数明细数据
|
|
|
+ addOrderScoreDetails(orderScoreInfo, order);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
@@ -2538,4 +2480,173 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加工单个人分数明细数据
|
|
|
+ * 将工单个人分数明细保存到GxtOrderScoreDetail表
|
|
|
+ *
|
|
|
+ * @param orderScoreInfo 工单评分信息
|
|
|
+ * @param order 工单对象
|
|
|
+ */
|
|
|
+ private void addOrderScoreDetails(OrderScoreInfo orderScoreInfo, Object order) {
|
|
|
+ try {
|
|
|
+ if (orderScoreInfo.getScorePersonList() != null && !orderScoreInfo.getScorePersonList().isEmpty()) {
|
|
|
+ for (OrderScorePerson person : orderScoreInfo.getScorePersonList()) {
|
|
|
+ GxtOrderScoreDetail detail = new GxtOrderScoreDetail();
|
|
|
+
|
|
|
+ // 设置基础信息
|
|
|
+ detail.setUserId(person.getUserId());
|
|
|
+ detail.setNickName(person.getNickName());
|
|
|
+ detail.setOrderType(orderScoreInfo.getOrderType());
|
|
|
+
|
|
|
+ // 设置工单相关信息
|
|
|
+ /*if (orderScoreInfo.getOrderType() == 1) { // 维修工单
|
|
|
+ GxtRepairOrder repairOrder = (GxtRepairOrder) order;
|
|
|
+ detail.setOrderId(repairOrder.getId());
|
|
|
+ detail.setOrderCode(repairOrder.getWorkOrderProjectNo());
|
|
|
+ } else if (orderScoreInfo.getOrderType() == 2) { // 维保工单
|
|
|
+ GxtWorkOrder workOrder = (GxtWorkOrder) order;
|
|
|
+ detail.setOrderId(workOrder.getId());
|
|
|
+ detail.setOrderCode(workOrder.getWorkOrderProjectNo());
|
|
|
+ }*/
|
|
|
+ detail.setOrderId(orderScoreInfo.getId());
|
|
|
+ detail.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
|
|
|
+ // 设置分数类型和分数(这里可以根据实际需要调整)
|
|
|
+ detail.setScoreType(1); // 工单得分
|
|
|
+
|
|
|
+ // 设置具体分数(工单得分)
|
|
|
+ if (person.getTotalScore() != null) {
|
|
|
+ detail.setScore(BigDecimal.valueOf(person.getTotalScore()));
|
|
|
+ detail.setRateScore(BigDecimal.valueOf(person.getTotalScore()));
|
|
|
+ }
|
|
|
+ detail.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
|
|
|
+ detail.setCreateTime(new Date());
|
|
|
+ // 保存到数据库
|
|
|
+ gxtOrderScoreDetailService.insertGxtOrderScoreDetail(detail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取工单评分统计信息V0
|
|
|
+ *
|
|
|
+ * @param repairOrder 维修工单查询条件
|
|
|
+ * @param workOrder 维保工单查询条件
|
|
|
+ * @param month 月份筛选条件
|
|
|
+ * @return 统计信息
|
|
|
+ */
|
|
|
+ public Map<String, Object> getOrderScoreStatisticsV0(GxtRepairOrder repairOrder, GxtWorkOrder workOrder, String month) {
|
|
|
+ // 添加业务特定的数据权限过滤
|
|
|
+ addBusinessDataScopeFilter(repairOrder, workOrder);
|
|
|
+
|
|
|
+ // 设置创建人,用于数据权限过滤
|
|
|
+ if(!Constants.SUPER_ADMIN.equals(SecurityUtils.getUsername())){
|
|
|
+ if (repairOrder.getCreateBy() == null || repairOrder.getCreateBy().isEmpty()) {
|
|
|
+ repairOrder.setCreateBy(SecurityUtils.getUsername());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (workOrder.getCreateBy() == null || workOrder.getCreateBy().isEmpty()) {
|
|
|
+ workOrder.setCreateBy(SecurityUtils.getUsername());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ Long currentUserId = SecurityUtils.getUserId();
|
|
|
+ if(currentUserId != null){
|
|
|
+ // 添加用户ID参数用于Mapper查询
|
|
|
+ repairOrder.getParams().put("currentUserId", currentUserId);
|
|
|
+ workOrder.getParams().put("currentUserId", currentUserId);
|
|
|
+
|
|
|
+ Map<String, Object> statistics = gxtOrderScoreMapper.selectOrderScoreStatistics(repairOrder, workOrder, month);
|
|
|
+
|
|
|
+ // 计算总工分
|
|
|
+ Object maintenanceScoreObj = statistics.get("maintenanceScore");
|
|
|
+ Object repairScoreObj = statistics.get("repairScore");
|
|
|
+
|
|
|
+ double maintenanceScore = maintenanceScoreObj != null ? ((Number) maintenanceScoreObj).doubleValue() : 0.0;
|
|
|
+ double repairScore = repairScoreObj != null ? ((Number) repairScoreObj).doubleValue() : 0.0;
|
|
|
+ double totalScore = maintenanceScore + repairScore;
|
|
|
+
|
|
|
+ result.put("totalScore", totalScore);
|
|
|
+ result.put("maintenanceScore", maintenanceScore);
|
|
|
+ result.put("repairScore", repairScore);
|
|
|
+ result.put("maintenanceCount", statistics.get("maintenanceCount"));
|
|
|
+ result.put("repairCount", statistics.get("repairCount"));
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ /*// 如果用户的数据权限是"仅本人数据",则只统计本人的工分
|
|
|
+ if (isCurrentUserDataScopeSelf()) {
|
|
|
+ Long currentUserId = SecurityUtils.getUserId();
|
|
|
+ if (currentUserId != null) {
|
|
|
+ // 添加用户ID参数用于Mapper查询
|
|
|
+ repairOrder.getParams().put("currentUserId", currentUserId);
|
|
|
+ workOrder.getParams().put("currentUserId", currentUserId);
|
|
|
+
|
|
|
+ // 直接使用Mapper查询,避免加载大量数据到内存
|
|
|
+ Map<String, Object> statistics = gxtOrderScoreMapper.selectOrderScoreStatistics(repairOrder, workOrder, month);
|
|
|
+
|
|
|
+ // 计算总工分
|
|
|
+ Object maintenanceScoreObj = statistics.get("maintenanceScore");
|
|
|
+ Object repairScoreObj = statistics.get("repairScore");
|
|
|
+
|
|
|
+ double maintenanceScore = maintenanceScoreObj != null ? ((Number) maintenanceScoreObj).doubleValue() : 0.0;
|
|
|
+ double repairScore = repairScoreObj != null ? ((Number) repairScoreObj).doubleValue() : 0.0;
|
|
|
+ double totalScore = maintenanceScore + repairScore;
|
|
|
+
|
|
|
+ result.put("totalScore", totalScore);
|
|
|
+ result.put("maintenanceScore", maintenanceScore);
|
|
|
+ result.put("repairScore", repairScore);
|
|
|
+ result.put("maintenanceCount", statistics.get("maintenanceCount"));
|
|
|
+ result.put("repairCount", statistics.get("repairCount"));
|
|
|
+
|
|
|
+ // 计算排名
|
|
|
+ int rank = calculateUserRankInStation(repairOrder, workOrder, month);
|
|
|
+ result.put("rank", rank);
|
|
|
+
|
|
|
+ // 计算场站总人数
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
+ if (loginUser != null && loginUser.getUser() != null) {
|
|
|
+ Long deptId = loginUser.getUser().getDeptId();
|
|
|
+ if (deptId != null) {
|
|
|
+ List<Long> stationUserIds = getStationUserIds(deptId);
|
|
|
+ // 确保至少包含当前用户
|
|
|
+ if (stationUserIds.isEmpty() && currentUserId != null) {
|
|
|
+ stationUserIds = new ArrayList<>();
|
|
|
+ stationUserIds.add(currentUserId);
|
|
|
+ }
|
|
|
+ result.put("totalRankingUsers", stationUserIds.size());
|
|
|
+ } else {
|
|
|
+ // 如果没有部门信息,至少当前用户参与排名
|
|
|
+ result.put("totalRankingUsers", 1);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果无法获取用户信息,至少当前用户参与排名
|
|
|
+ result.put("totalRankingUsers", 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取统计信息(非"仅本人数据"权限用户或其他情况)
|
|
|
+ Map<String, Object> statistics = gxtOrderScoreMapper.selectOrderScoreStatistics(repairOrder, workOrder, month);
|
|
|
+ result.putAll(statistics);
|
|
|
+
|
|
|
+ // 计算总工分
|
|
|
+ Object maintenanceScoreObj = statistics.get("maintenanceScore");
|
|
|
+ Object repairScoreObj = statistics.get("repairScore");
|
|
|
+
|
|
|
+ double maintenanceScore = maintenanceScoreObj != null ? ((Number) maintenanceScoreObj).doubleValue() : 0.0;
|
|
|
+ double repairScore = repairScoreObj != null ? ((Number) repairScoreObj).doubleValue() : 0.0;
|
|
|
+ double totalScore = maintenanceScore + repairScore;
|
|
|
+
|
|
|
+ result.put("totalScore", totalScore);
|
|
|
+ result.put("maintenanceScore", maintenanceScore);
|
|
|
+ result.put("repairScore", repairScore);
|
|
|
+
|
|
|
+ return result;*/
|
|
|
+ }
|
|
|
}
|