Min 1 年間 前
コミット
01ed9be27f

+ 42 - 39
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -1707,21 +1707,28 @@ public class TimingTask {
             List<Integer> projectIds = mapList.stream().map(r -> Integer.valueOf(String.valueOf(r.get("ProjectId")))).distinct().collect(Collectors.toList());
             projectIds.add(-1);
             List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,projectIds,null,null);
-            List<SapSyncLog> projectPlanSapSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, companyId, "");
-            if(projectPlanSapSyncLogs.size()>0){
-                sapSyncLogService.saveBatch(projectPlanSapSyncLogs);
-            }
+//            List<SapSyncLog> projectPlanSapSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, companyId, "");
+//            if(projectPlanSapSyncLogs.size()>0){
+//                sapSyncLogService.saveBatch(projectPlanSapSyncLogs);
+//            }
             List<Map<String, Object>> finalResultList = mapList;
             //创建多个个线程来处理 每个线程处理10条数据
             int size = finalResultList.size();
-            //需要创建的线程数量 防止有小数 获取整数+1
+            //需要创建的线程数量 防止有小数 获取整数+1 多加一个作为预算工时推送
             BigDecimal divide = new BigDecimal(size).divide(new BigDecimal(10));
-            int thredNum = divide.intValue() + 1;
-            ExecutorService executor = Executors.newFixedThreadPool(10);
-            //创建锁对象
-            Object o = new Object();
+            int threadNum= divide.intValue() + 2;
+            ExecutorService executor = Executors.newFixedThreadPool(threadNum);
             /*execute()让线程池中的线程来执行业务,每次调用都会将一个线程加入到就绪队列*/
-            for (int i = 0; i <thredNum ; i++) {
+            executor.execute(new Runnable() {
+                @Override
+                public void run() {
+                    List<SapSyncLog> projectPlanSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, companyId, "");
+                    if(projectPlanSyncLogs.size()>0){
+                        sapSyncLogService.saveBatch(projectPlanSyncLogs);
+                    }
+                }
+            });
+            for (int i = 0; i <threadNum ; i++) {
                 //目标数据进行分组
                 int start=i*10;
                 int end=(i+1)*10;
@@ -1732,36 +1739,32 @@ public class TimingTask {
                 executor.execute(new Runnable() {
                     @Override
                     public void run() {
-                        synchronized (o) {//同步代码块解决的是重卖的问题
-                            /*本方法的参数就是你要执行的业务,也就是目标业务类对象*/
-                            //3.定义成员变量,保存票数
-                            for (Map<String, Object> map : targetList) {
-                                ReportPushLog one = reportPushLogService.getOne(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getCompanyId, companyId).eq(ReportPushLog::getReportId, map.get("ReportId")).eq(ReportPushLog::getTargetSystem,"SAP"));
-                                if(one!=null){
-                                    continue;
-                                }
-                                XmlResponseData xmlResponseData = SyncSapUtils.pushReportToSap(map);
-                                SapSyncLog sapSyncLog=new SapSyncLog();
-                                sapSyncLog.setCompanyId(companyId);
-                                sapSyncLog.setRemark("日报数据推送");
-                                sapSyncLog.setSyncType("定时任务推送");
-                                sapSyncLog.setSyncTime(localDateTime);
-                                if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
-                                    log.error("推送失败===》工号:"+map.get("EmployeeID"));
-                                    sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送失败");
-                                    sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
-                                }else {
-                                    sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送成功");
-                                    //推送成功 日报数据打上标记
-                                    ReportPushLog reportPushLog=new ReportPushLog();
-                                    reportPushLog.setCompanyId(companyId);
-                                    reportPushLog.setReportId(Integer.valueOf(String.valueOf(map.get("ReportId"))));
-                                    reportPushLog.setTargetSystem("SAP");
-                                    reportPushLog.setUuid(xmlResponseData.getEmployeeTime().getUUID());
-                                    reportPushLogService.save(reportPushLog);
-                                }
-                                sapSyncLogService.save(sapSyncLog);
+                        for (Map<String, Object> map : targetList) {
+                            ReportPushLog one = reportPushLogService.getOne(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getCompanyId, companyId).eq(ReportPushLog::getReportId, map.get("ReportId")).eq(ReportPushLog::getTargetSystem,"SAP"));
+                            if(one!=null){
+                                continue;
+                            }
+                            XmlResponseData xmlResponseData = SyncSapUtils.pushReportToSap(map);
+                            SapSyncLog sapSyncLog=new SapSyncLog();
+                            sapSyncLog.setCompanyId(companyId);
+                            sapSyncLog.setRemark("日报数据推送");
+                            sapSyncLog.setSyncType("定时任务推送");
+                            sapSyncLog.setSyncTime(localDateTime);
+                            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
+                                log.error("推送失败===》工号:"+map.get("EmployeeID"));
+                                sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送失败");
+                                sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
+                            }else {
+                                sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送成功");
+                                //推送成功 日报数据打上标记
+                                ReportPushLog reportPushLog=new ReportPushLog();
+                                reportPushLog.setCompanyId(companyId);
+                                reportPushLog.setReportId(Integer.valueOf(String.valueOf(map.get("ReportId"))));
+                                reportPushLog.setTargetSystem("SAP");
+                                reportPushLog.setUuid(xmlResponseData.getEmployeeTime().getUUID());
+                                reportPushLogService.save(reportPushLog);
                             }
+                            sapSyncLogService.save(sapSyncLog);
                         }
                     }
                 });