Min há 11 meses atrás
pai
commit
42ab1f7a1a

+ 13 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanController.java

@@ -171,5 +171,18 @@ public class PlanController {
     public HttpRespMsg deletePlan(Integer id){
         return planService.deletePlan(id);
     }
+
+
+    /**
+    * @Description:拒收导致的数据丢失修复
+    * @Param: []
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/6/20
+    */
+    @RequestMapping("/updateHasDeleteTeamData")
+    public HttpRespMsg updateHasDeleteTeamData(){
+        return reportService.updateHasDeleteTeamData();
+    }
 }
 

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ReportService.java

@@ -164,4 +164,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg getPersonWorkHoursWagesDetailForMob(String date, String userId, String startDate, String endDate,Integer checkStatus,Integer detailStatus);
 
     HttpRespMsg getPersonWorkHoursWagesDetailForTemp(String date, String userId, String startDate, String endDate);
+
+    HttpRespMsg updateHasDeleteTeamData();
 }

+ 72 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -133,6 +133,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     private ProdProcedureMapper prodProcedureMapper;
     @Resource
     private LeaveSheetService leaveSheetService;
+    @Resource
+    private ProdProcedureTeamService prodProcedureTeamService;
 
     @Value(value = "${upload.path}")
     private String path;
@@ -6169,4 +6171,74 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         msg.setData("修复完成, 共修复"+updateList.size()+"条数据");
         return msg;
     }
+
+    @Override
+    @Transactional
+    public HttpRespMsg updateHasDeleteTeamData() {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<Report> reportList = reportService.list(new LambdaQueryWrapper<Report>().inSql(Report::getId, "SELECT r.id FROM report r\n" +
+                "LEFT JOIN prod_procedure_team ppt ON r.user_procedure_team_id=ppt.id\n" +
+                "WHERE ppt.id IS NULL AND r.user_procedure_team_id IS NOT NULL"));
+        List<ProdProcedureTeam> list=new ArrayList<>();
+        for (Report report : reportList) {
+            PlanProcedureTotal planProcedureTotal = planProcedureTotalMapper.selectOne(new LambdaQueryWrapper<PlanProcedureTotal>().eq(PlanProcedureTotal::getPlanId, report.getPlanId()).eq(PlanProcedureTotal::getProdProcedureId, report.getProdProcedureId()));
+            if(planProcedureTotal!=null){
+                //未删除的数据
+                List<ProdProcedureTeam> procedureTeams = prodProcedureTeamMapper.selectList(new LambdaQueryWrapper<ProdProcedureTeam>().eq(ProdProcedureTeam::getPlanProcedureId, planProcedureTotal.getId()));
+                List<String> ptlist = procedureTeams.stream().map(u -> u.getUserId()).collect(Collectors.toList());
+                ptlist.add(report.getCreatorId());
+                List<Report> reports = reportList.stream().filter(f -> f.getProdProcedureId().equals(planProcedureTotal.getProdProcedureId()) && f.getPlanId().equals(planProcedureTotal.getPlanId())).collect(Collectors.toList());
+                List<String> integers = reports.stream().map(Report::getCreatorId).distinct().collect(Collectors.toList());
+                ptlist.addAll(integers);
+                String teamIds=integers.stream().distinct().collect(Collectors.joining(","));
+                String[] team = teamIds.split(",");
+                Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+                BigDecimal totalWages=new BigDecimal((planProcedureTotal.getTotalWages()==null||StringUtils.isEmpty(planProcedureTotal.getTotalWages()))?0:planProcedureTotal.getTotalWages());
+                BigDecimal totalWorkingHours=new BigDecimal((planProcedureTotal.getTotalWorkingHours()==null||StringUtils.isEmpty(planProcedureTotal.getTotalWorkingHours())?0:planProcedureTotal.getTotalWorkingHours()));
+                BigDecimal overCountWages = new BigDecimal(0);
+                BigDecimal overWorkingHours = new BigDecimal(0);
+                Plan plan = planMapper.selectById(planProcedureTotal.getPlanId());
+                totalWages=totalWages.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
+                totalWorkingHours=totalWorkingHours.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
+                overCountWages=totalWages.multiply(new BigDecimal(team.length));
+                overWorkingHours=totalWorkingHours.multiply(new BigDecimal(team.length));
+                List<ProdProcedureTeam> procedureTeamList = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().eq("plan_procedure_id",planProcedureTotal.getId()));
+                List<User> userList = userMapper.selectBatchIds(Arrays.asList(team));
+                for (int i = 0; i < team.length; i++) {
+                    ProdProcedureTeam prodProcedureTeam=new ProdProcedureTeam();
+                    int finalI1 = i;
+                    Optional<ProdProcedureTeam> first1 = procedureTeams.stream().filter(p -> p.getUserId().equals(team[finalI1])).findFirst();
+                    if(first1.isPresent()){
+                        prodProcedureTeam.setId(first1.get().getId());
+                        prodProcedureTeam.setDistributeDate(first1.get().getDistributeDate());
+                    }else {
+                        prodProcedureTeam.setDistributeDate(report.getCreateDate());
+                    }
+                    prodProcedureTeam.setCompanyId(companyId);
+                    prodProcedureTeam.setPlanProcedureId(planProcedureTotal.getId());
+                    prodProcedureTeam.setUserId(team[i]);
+                    prodProcedureTeam.setStatus(2);
+                    int finalI = i;
+                    //已存在的人员更新处理
+                    Optional<ProdProcedureTeam> first = procedureTeamList.stream().filter(pl -> pl.getUserId().equals(team[finalI])).findFirst();
+                    if(first.isPresent()){
+                        prodProcedureTeam.setId(first.get().getId());
+                    }
+                    if(i==team.length-1){
+                        double wagesAbs =new BigDecimal(planProcedureTotal.getTotalWages()).subtract(overCountWages).doubleValue();
+                        double workTimesAbs =new BigDecimal(planProcedureTotal.getTotalWorkingHours()).subtract(overWorkingHours).doubleValue();
+                        prodProcedureTeam.setWorkTime(totalWorkingHours.add(new BigDecimal(workTimesAbs)).doubleValue());
+                        prodProcedureTeam.setJobOfMoney(totalWages.add(new BigDecimal(wagesAbs)));
+                    }else {
+                        prodProcedureTeam.setWorkTime(totalWorkingHours.doubleValue());
+                        prodProcedureTeam.setJobOfMoney(totalWages);
+                    }
+                    prodProcedureTeamService.saveOrUpdate(prodProcedureTeam);
+                    report.setUserProcedureTeamId(prodProcedureTeam.getId());
+                }
+            }
+        }
+        reportService.updateBatchById(reportList);
+        return msg;
+    }
 }