Min 1 year ago
parent
commit
461e626be0

+ 100 - 98
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -7480,10 +7480,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
         //只推送需要推送日报参与的部分就可以了
         List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,projectIds,null,null);
-        List<SapSyncLog> projectPlanSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, user.getCompanyId(), user.getJobNumber());
-        if(projectPlanSyncLogs.size()>0){
-            sapSyncLogService.saveBatch(projectPlanSyncLogs);
-        }
         //配置xml请求参数
         XmlRequestData xmlRequestData=new XmlRequestData();
         xmlRequestData.setBasicMessageHeader("");
@@ -7495,114 +7491,120 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Map<String, Object>> finalResultList = resultList;
         //创建多个个线程来处理 每个线程处理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, user.getCompanyId(), user.getJobNumber());
+                if(projectPlanSyncLogs.size()>0){
+                    sapSyncLogService.saveBatch(projectPlanSyncLogs);
+                }
+            }
+        });
+        for (int i = 0; i <threadNum ; i++) {
             //目标数据进行分组
             int start=i*10;
             int end=(i+1)*10;
             if(end>finalResultList.size()){
                 end=finalResultList.size();
             }
+            if(start>finalResultList.size()){
+                start=finalResultList.size();
+            }
             List<Map<String, Object>> mapList = finalResultList.subList(start, end);
             executor.execute(new Runnable() {
                 @Override
                 public void run() {
-                    synchronized (o) {//同步代码块解决的是重卖的问题
-                        /*本方法的参数就是你要执行的业务,也就是目标业务类对象*/
-                        //3.定义成员变量,保存票数
-                        for (Map<String, Object> map : mapList) {
-                            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;
-                            }
-                            employeeTime.setEmployeeID(String.valueOf(map.get("EmployeeID")));
-                            employeeTime.setActionCode("01");
-                            if(map.get("StartDate")!=null){
-                                datePeriod.setStartDate(String.valueOf(map.get("StartDate")));
-                            }
-                            if(map.get("EndDate")!=null){
-                                datePeriod.setEndDate(String.valueOf(map.get("EndDate")));
-                            }
-                            if(map.get("StartTime")!=null){
-                                timePeriod.setStartTime(String.valueOf(map.get("StartTime"))+":00");
-                            }
-                            if(map.get("EndTime")!=null){
-                                timePeriod.setEndTime(String.valueOf(map.get("EndTime"))+":00");
-                            }
-                            employeeTime.setDatePeriod(datePeriod);
+                    for (Map<String, Object> map : mapList) {
+                        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;
+                        }
+                        employeeTime.setEmployeeID(String.valueOf(map.get("EmployeeID")));
+                        employeeTime.setActionCode("01");
+                        if(map.get("StartDate")!=null){
+                            datePeriod.setStartDate(String.valueOf(map.get("StartDate")));
+                        }
+                        if(map.get("EndDate")!=null){
+                            datePeriod.setEndDate(String.valueOf(map.get("EndDate")));
+                        }
+                        if(map.get("StartTime")!=null){
+                            timePeriod.setStartTime(String.valueOf(map.get("StartTime"))+":00");
+                        }
+                        if(map.get("EndTime")!=null){
+                            timePeriod.setEndTime(String.valueOf(map.get("EndTime"))+":00");
+                        }
+                        employeeTime.setDatePeriod(datePeriod);
+                        if(map.get("StartTime")!=null&&map.get("EndTime")!=null){
                             employeeTime.setTimePeriod(timePeriod);
-                            employeeTime.setItemTypeCode("CN0001");
-                            String duration=map.get("Duration")==null?"0":String.valueOf(map.get("Duration"))+"";
-                            String hour = duration.substring(0, duration.indexOf("."));
-                            String min = "0"+duration.substring(duration.indexOf("."));
-                            BigDecimal minBigDecimal = new BigDecimal(min);
-                            minBigDecimal=minBigDecimal.multiply(new BigDecimal(60)).setScale(0,BigDecimal.ROUND_HALF_UP);
-                            employeeTime.setDuration("PT"+hour+"H"+minBigDecimal.intValue()+"M");
-                            if(map.get("ProjectElementID")==null||map.get("ServiceProductInternalID")==null){
-                                continue;
-                            }
-                            employeeTime.setProjectElementID(String.valueOf(map.get("ProjectElementID")));
-                            employeeTime.setServiceProductInternalID(String.valueOf(map.get("ServiceProductInternalID")));
-                            if(map.get("WorkDescriptionText")!=null){
-                                workDescriptionText.setWorkDescriptionText(String.valueOf(map.get("WorkDescriptionText")));
-                                employeeTime.setWorkDescriptionText(workDescriptionText);
-                            }
-                            xmlRequestData.setEmployeeTime(employeeTime);
-                            String xml = CommonUtils.convertToXml(xmlRequestData);
-                            System.out.println(xml);
-                            xml=xml.substring(xml.indexOf("<XMLDATA>")+9,xml.lastIndexOf("</XMLDATA>"));
-                            StringBuffer sb = new StringBuffer();
-                            sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:glob=\"http://sap.com/xi/SAPGlobal20/Global\">\n" +
-                                    "   <soapenv:Header/>\n" +
-                                    "   <soapenv:Body>\n" +
-                                    "      <glob:EmployeeTimeAsBundleMaintainRequest_sync>\n");
-                            sb.append(xml);
-                            sb.append("      </glob:EmployeeTimeAsBundleMaintainRequest_sync>\n" +
-                                    "   </soapenv:Body>\n" +
-                                    "</soapenv:Envelope>");
-                            System.out.println(sb.toString());
-                            String result = "";
-                            try {
-                                result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                            if(!StringUtils.isEmpty(result)) {
-                                result = result.substring(result.indexOf("<soap-env:Body>")+15, result.lastIndexOf("</soap-env:Body>"));
-                                result = result.substring(result.indexOf(">")+1, result.lastIndexOf("</n0:EmployeeTimeAsBundleMaintainConfirmation_sync>"));
-                                result="<XMLDATA>"+result+"</XMLDATA>";
-                            }
-                            System.out.println(result);
-                            XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
-                            SapSyncLog sapSyncLog=new SapSyncLog();
-                            sapSyncLog.setOperator(user.getJobNumber());
-                            sapSyncLog.setCompanyId(companyId);
-                            sapSyncLog.setRemark("日报数据推送");
-                            sapSyncLog.setSyncType("手动推送");
-                            sapSyncLog.setSyncTime(localDateTime);
-                            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
-                                log.error("推送失败===》员工工号:"+employeeTime.getEmployeeID());
-                                sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送失败");
-                                sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
-                            }else {
-                                sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送成功");
-                                //推送成功 日报数据打上标记
-                                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);
-                            System.out.println("线程:"+Thread.currentThread().getName()+"正在操作"+map.get("ReportId"));
                         }
+                        employeeTime.setItemTypeCode("CN0001");
+                        String duration=map.get("Duration")==null?"0":String.valueOf(map.get("Duration"))+"";
+                        String hour = duration.substring(0, duration.indexOf("."));
+                        String min = "0"+duration.substring(duration.indexOf("."));
+                        BigDecimal minBigDecimal = new BigDecimal(min);
+                        minBigDecimal=minBigDecimal.multiply(new BigDecimal(60)).setScale(0,BigDecimal.ROUND_HALF_UP);
+                        employeeTime.setDuration("PT"+hour+"H"+minBigDecimal.intValue()+"M");
+                        if(map.get("ProjectElementID")==null||map.get("ServiceProductInternalID")==null){
+                            continue;
+                        }
+                        employeeTime.setProjectElementID(String.valueOf(map.get("ProjectElementID")));
+                        employeeTime.setServiceProductInternalID(String.valueOf(map.get("ServiceProductInternalID")));
+                        if(map.get("WorkDescriptionText")!=null){
+                            workDescriptionText.setWorkDescriptionText(String.valueOf(map.get("WorkDescriptionText")));
+                            employeeTime.setWorkDescriptionText(workDescriptionText);
+                        }
+                        xmlRequestData.setEmployeeTime(employeeTime);
+                        String xml = CommonUtils.convertToXml(xmlRequestData);
+                        xml=xml.substring(xml.indexOf("<XMLDATA>")+9,xml.lastIndexOf("</XMLDATA>"));
+                        StringBuffer sb = new StringBuffer();
+                        sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:glob=\"http://sap.com/xi/SAPGlobal20/Global\">\n" +
+                                "   <soapenv:Header/>\n" +
+                                "   <soapenv:Body>\n" +
+                                "      <glob:EmployeeTimeAsBundleMaintainRequest_sync>\n");
+                        sb.append(xml);
+                        sb.append("      </glob:EmployeeTimeAsBundleMaintainRequest_sync>\n" +
+                                "   </soapenv:Body>\n" +
+                                "</soapenv:Envelope>");
+                        String result = "";
+                        try {
+                            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        if(!StringUtils.isEmpty(result)) {
+                            result = result.substring(result.indexOf("<soap-env:Body>")+15, result.lastIndexOf("</soap-env:Body>"));
+                            result = result.substring(result.indexOf(">")+1, result.lastIndexOf("</n0:EmployeeTimeAsBundleMaintainConfirmation_sync>"));
+                            result="<XMLDATA>"+result+"</XMLDATA>";
+                        }
+                        System.out.println(result);
+                        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+                        SapSyncLog sapSyncLog=new SapSyncLog();
+                        sapSyncLog.setOperator(user.getJobNumber());
+                        sapSyncLog.setCompanyId(companyId);
+                        sapSyncLog.setRemark("日报数据推送");
+                        sapSyncLog.setSyncType("手动推送");
+                        sapSyncLog.setSyncTime(localDateTime);
+                        if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
+                            log.error("推送失败===》员工工号:"+employeeTime.getEmployeeID());
+                            sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送失败");
+                            sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
+                        }else {
+                            sapSyncLog.setResult("员工工号["+employeeTime.getEmployeeID()+"]"+datePeriod.getStartDate()+"日报推送成功");
+                            //推送成功 日报数据打上标记
+                            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);
+                        System.out.println("线程:"+Thread.currentThread().getName()+"正在操作"+map.get("ReportId"));
                     }
                 }
             });

+ 13 - 15
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/SyncSapUtils.java

@@ -73,7 +73,6 @@ public class SyncSapUtils {
             zManageProjectTaskWork.setTasks(tasks);
             xmlRequestData.setZManageProjectTaskWork(zManageProjectTaskWork);
             String xml = CommonUtils.convertToXml(xmlRequestData);
-            System.out.println(xml);
             xml=xml.substring(xml.indexOf("<XMLDATA>")+9,xml.lastIndexOf("</XMLDATA>"));
             StringBuffer sb = new StringBuffer();
             sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:glob=\"http://sap.com/xi/SAPGlobal20/Global\">\n" +
@@ -84,10 +83,9 @@ public class SyncSapUtils {
             sb.append("      </glob:ZManageProjectTaskWorkCreateRequest_sync>\n" +
                     "   </soapenv:Body>\n" +
                     "</soapenv:Envelope>");
-            System.out.println(sb.toString());
             String result = "";
             try {
-                result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_manageprojecttaskwo?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+                result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_manageprojecttaskwo?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -140,7 +138,9 @@ public class SyncSapUtils {
             timePeriod.setEndTime(String.valueOf(map.get("EndTime")));
         }
         employeeTime.setDatePeriod(datePeriod);
-        employeeTime.setTimePeriod(timePeriod);
+        if(map.get("StartTime")!=null&&map.get("EndTime")!=null){
+            employeeTime.setTimePeriod(timePeriod);
+        }
         employeeTime.setItemTypeCode("CN0001");
         employeeTime.setDuration("PT"+(map.get("Duration")==null?"0":String.valueOf(map.get("Duration")))+"H");
         if(map.get("ProjectElementID")==null||map.get("ServiceProductInternalID")==null){
@@ -154,7 +154,6 @@ public class SyncSapUtils {
         }
         xmlRequestData.setEmployeeTime(employeeTime);
         String xml = CommonUtils.convertToXml(xmlRequestData);
-        System.out.println(xml);
         xml=xml.substring(xml.indexOf("<XMLDATA>")+9,xml.lastIndexOf("</XMLDATA>"));
         StringBuffer sb = new StringBuffer();
         sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:glob=\"http://sap.com/xi/SAPGlobal20/Global\">\n" +
@@ -165,20 +164,21 @@ public class SyncSapUtils {
         sb.append("      </glob:EmployeeTimeAsBundleMaintainRequest_sync>\n" +
                 "   </soapenv:Body>\n" +
                 "</soapenv:Envelope>");
-        System.out.println(sb.toString());
         String result = "";
+        XmlResponseData xmlResponseData = new XmlResponseData();
         try {
             result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+            if(!StringUtils.isEmpty(result)) {
+                result = result.substring(result.indexOf("<soap-env:Body>")+15, result.lastIndexOf("</soap-env:Body>"));
+                result = result.substring(result.indexOf(">")+1, result.lastIndexOf("</n0:EmployeeTimeAsBundleMaintainConfirmation_sync>"));
+                result="<XMLDATA>"+result+"</XMLDATA>";
+            }
+            System.out.println(result);
+            xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
         } catch (Exception e) {
             e.printStackTrace();
         }
-        if(!StringUtils.isEmpty(result)) {
-            result = result.substring(result.indexOf("<soap-env:Body>")+15, result.lastIndexOf("</soap-env:Body>"));
-            result = result.substring(result.indexOf(">")+1, result.lastIndexOf("</n0:EmployeeTimeAsBundleMaintainConfirmation_sync>"));
-            result="<XMLDATA>"+result+"</XMLDATA>";
-        }
-        System.out.println(result);
-        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+
         return xmlResponseData;
     }
 
@@ -232,7 +232,6 @@ public class SyncSapUtils {
         sb.append("      </glob:ProjectByElementsQuery>\n" +
                 "   </soapenv:Body>\n" +
                 "</soapenv:Envelope>");
-        System.out.println(sb.toString());
         String result = "";
         try {
             result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/queryprojectin?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
@@ -271,7 +270,6 @@ public class SyncSapUtils {
         sb.append("      </glob:ServiceProductByElementsQuery_sync>\n" +
                 "   </soapenv:Body>\n" +
                 "</soapenv:Envelope>");
-        System.out.println(sb.toString());
         String result = "";
         try {
             result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/queryserviceproductin?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");