Min 1 рік тому
батько
коміт
1e884bd18c

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -1297,6 +1297,7 @@ public class ProjectController {
                 Optional<Project> project = workTimeProjectList.stream().filter(wl -> wl.getProjectCode() != null && wl.getProjectCode().equals(map.get("xmdm"))).findFirst();
                 if(project.isPresent()){
                     Project item = project.get();
+                    item.setFromOutside(1);
                     item.setProjectName(String.valueOf(map.get("xmmc")));
                     if(first.isPresent()){
                         item.setInchargerId(first.get().getId())
@@ -1346,7 +1347,8 @@ public class ProjectController {
                 project.setProjectName(String.valueOf(map.get("xmmc")))
                         .setProjectCode(String.valueOf(map.get("xmdm")))
                         .setCompanyId(876)
-                        .setCreateDate(LocalDate.now());
+                        .setCreateDate(LocalDate.now())
+                        .setFromOutside(1);
                 if(first.isPresent()){
                     project.setInchargerId(first.get().getId())
                             .setInchargerName(first.get().getName());

+ 2 - 79
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -11304,50 +11304,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         //获取SAP项目服务数据 ----> 工时管家任务分组下阶段作为项目服务数据
-        XmlResponseData projectServiceData= syncServiceData("2020-01-01", endDate, companyId);
+        XmlResponseData projectServiceData= SyncSapUtils.syncServiceData("2020-01-01", endDate, companyId);
         //已有的项目分类
         List<ProjectCategory> allProjectCategoryList = projectCategoryMapper.selectList(new QueryWrapper<ProjectCategory>().eq("company_id", companyId));
         List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
-        //配置请求xml
-        XmlRequestData xmlRequestData=new XmlRequestData();
-        ProcessingConditions processingConditions=new ProcessingConditions();
-        processingConditions.setQueryHitsUnlimitedIndicator("true");
-        xmlRequestData.setProcessingConditions(processingConditions);
-        ProjectSelectionByElement projectSelectionByElement=new ProjectSelectionByElement();
-        SelectionByLastChangeDateTime selectionByLastChangeDateTime=new SelectionByLastChangeDateTime();
-        selectionByLastChangeDateTime.setInclusionExclusionCode("I");
-        selectionByLastChangeDateTime.setIntervalBoundaryTypeCode("3");
-        selectionByLastChangeDateTime.setLowerBoundaryLastChangeDateTime(startDate+"T00:00:00Z");
-        selectionByLastChangeDateTime.setUpperBoundaryLastChangeDateTime(endDate+"T00:00:00Z");
-        projectSelectionByElement.setSelectionByLastChangeDateTime(selectionByLastChangeDateTime);
-        List<ProjectSelectionByElement> list=new ArrayList<>();
-        list.add(projectSelectionByElement);
-        xmlRequestData.setProjectSelectionByElements(list);
-        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:ProjectByElementsQuery>\n");
-        sb.append(xml);
-        sb.append("      </glob:ProjectByElementsQuery>\n" +
-                "   </soapenv:Body>\n" +
-                "</soapenv:Envelope>");
-        System.out.println(sb.toString());
-        String result = "";
-        try {
-            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryprojectin?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:ProjectByElementsResponse_sync>"));
-            result="<XMLDATA>"+result+"</XMLDATA>";
-        }
-        System.out.println(result);
-        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+        XmlResponseData xmlResponseData = SyncSapUtils.syncProjectFromSap(startDate, endDate);
         List<ProjectQueryResponse> projectQueryResponses = xmlResponseData.getProjectQueryResponses();
         List<Map<String,Object>> idsMapList=new ArrayList<>();
         if(projectQueryResponses!=null&&projectQueryResponses.size()>0){
@@ -11620,42 +11581,4 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             }
         }
     }
-
-    //同步SAP项目服务数据到工时管家
-    private XmlResponseData syncServiceData(String startDate, String endDate, Integer companyId) {
-        //配置请求xml
-        XmlRequestData xmlRequestData=new XmlRequestData();
-        ProcessingConditions processingConditions=new ProcessingConditions();
-        processingConditions.setQueryHitsUnlimitedIndicator("true");
-        xmlRequestData.setProcessingConditions(processingConditions);
-        ServiceProductSelectionByElements serviceProductSelectionByElements=new ServiceProductSelectionByElements();
-        serviceProductSelectionByElements.setSelectionByLastChangeSinceDateTime(startDate+"T00:00:00Z");
-        xmlRequestData.setServiceProductSelectionByElements(serviceProductSelectionByElements);
-        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:ServiceProductByElementsQuery_sync>\n");
-        sb.append(xml);
-        sb.append("      </glob:ServiceProductByElementsQuery_sync>\n" +
-                "   </soapenv:Body>\n" +
-                "</soapenv:Envelope>");
-        System.out.println(sb.toString());
-        String result = "";
-        try {
-            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryserviceproductin?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:ServiceProductByElementsResponse_sync>"));
-            result="<XMLDATA>"+result+"</XMLDATA>";
-        }
-        System.out.println(result);
-        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
-        return xmlResponseData;
-    }
 }

+ 8 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -7059,8 +7059,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         HttpRespMsg httpRespMsg =new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         List<Map<String,Object>> resultList=reportMapper.getPushProjectReportToSap(companyId,startDate,endDate,userId);
+        //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
+        List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,null,null);
+        SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour);
         //配置xml请求参数
         XmlRequestData xmlRequestData=new XmlRequestData();
+        xmlRequestData.setBasicMessageHeader("");
         EmployeeTime employeeTime=new EmployeeTime();
         WorkDescriptionText workDescriptionText=new WorkDescriptionText();
         workDescriptionText.setLanguageCode("ZH");
@@ -7081,10 +7085,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 datePeriod.setEndDate(String.valueOf(map.get("EndDate")));
             }
             if(map.get("StartTime")!=null){
-                timePeriod.setStartTime(String.valueOf(map.get("StartTime")));
+                timePeriod.setStartTime(String.valueOf(map.get("StartTime"))+":00");
             }
             if(map.get("EndTime")!=null){
-                timePeriod.setEndTime(String.valueOf(map.get("EndTime")));
+                timePeriod.setEndTime(String.valueOf(map.get("EndTime"))+":00");
             }
             employeeTime.setDatePeriod(datePeriod);
             employeeTime.setTimePeriod(timePeriod);
@@ -7112,7 +7116,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             System.out.println(sb.toString());
             String result = "";
             try {
-                result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryprojectin?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+                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();
             }
@@ -7123,7 +7127,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             System.out.println(result);
             XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
-            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime().getUUID())){
+            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
                 log.error("推送失败===》工号:"+employeeTime.getEmployeeID());
                 continue;
             }else {

+ 177 - 130
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -29,6 +29,7 @@ import org.springframework.http.client.ClientHttpResponse;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.DefaultResponseErrorHandler;
 import org.springframework.web.client.RestTemplate;
@@ -157,6 +158,16 @@ public class TimingTask {
     private UserService userService;
     @Resource
     private ParticipationService participationService;
+    @Resource
+    private ProjectCategoryMapper projectCategoryMapper;
+    @Resource
+    private TaskService taskService;
+    @Resource
+    private StagesMapper stagesMapper;
+    @Resource
+    private TaskGroupService taskGroupService;
+    @Resource
+    private TaskGroupMapper taskGroupMapper;
 
 
     private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
@@ -1554,80 +1565,27 @@ public class TimingTask {
     //每天凌晨 2:00 推送前1天审核通过的日报  工时管家---->SAP
     @Scheduled(cron = "0 0 2 ? * *")
     public void pushReportToSap(){
+        if(isDev){
+            return;
+        }
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_sap",1));
         LocalDate date=LocalDate.now();
         for (TimeType timeType : timeTypeList) {
             Integer companyId = timeType.getCompanyId();
             //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
-            pushProjectPlanToSap(companyId, date.minusDays(1).format(df),date.format(df));
-            List<Map<String, Object>> mapList = reportMapper.getPushProjectReportToSap(companyId, date.minusDays(1).format(df), date.format(df), null);
+            List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,null,null);
+            SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour);
+            List<Map<String, Object>> mapList = reportMapper.getPushProjectReportToSap(companyId,df.format(date.minusDays(1)),df.format(date.minusDays(1)), null);
             List<ReportPushLog> addList=new ArrayList<>();
-            //配置xml请求参数
-            XmlRequestData xmlRequestData=new XmlRequestData();
-            EmployeeTime employeeTime=new EmployeeTime();
-            WorkDescriptionText workDescriptionText=new WorkDescriptionText();
-            workDescriptionText.setLanguageCode("ZH");
-            SapPeriod datePeriod=new SapPeriod();
-            SapPeriod timePeriod=new SapPeriod();
             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")));
-                }
-                if(map.get("EndTime")!=null){
-                    timePeriod.setEndTime(String.valueOf(map.get("EndTime")));
-                }
-                employeeTime.setDatePeriod(datePeriod);
-                employeeTime.setTimePeriod(timePeriod);
-                employeeTime.setItemTypeCode("CN0001");
-                employeeTime.setDuration(map.get("Duration")==null?"0":String.valueOf(map.get("Duration")));
-                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://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryprojectin?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);
-                if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime().getUUID())){
-                    log.error("推送失败===》工号:"+employeeTime.getEmployeeID());
+                XmlResponseData xmlResponseData = SyncSapUtils.pushReportToSap(map);
+                if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
+                    log.error("推送失败===》工号:"+map.get("EmployeeID"));
                     continue;
                 }else {
                     //推送成功 日报数据打上标记
@@ -1644,77 +1602,160 @@ public class TimingTask {
         }
     }
 
-    private   void pushProjectPlanToSap(Integer companyId,String startDate, String endDate) {
-        List<Map<String, Object>> mapList = reportMapper.getProjectPlanData(companyId,startDate,endDate);
-        //根据项目分组 按照项目推送
-        //获取当前数据中的所有项目编号
-        List<String> projectIds = mapList.stream().map(m -> String.valueOf(m.get("ProjectID"))).distinct().collect(Collectors.toList());
-        Map<Object, List<Map<String, Object>>> mapListGroupPro = mapList.stream().collect(Collectors.groupingBy(m -> m.get("ProjectID")));
-        //循环推送
-        for (String projectId : projectIds) {
-            //配置xml请求参数
-            XmlRequestData xmlRequestData=new XmlRequestData();
-            xmlRequestData.setBasicMessageHeader("");
-            ZManageProjectTaskWork zManageProjectTaskWork=new ZManageProjectTaskWork();
-            zManageProjectTaskWork.setProjectID(projectId);
-            List<Map<String, Object>> resultList = mapListGroupPro.get(projectId);
-            //获取当前数据下的任务分组的分组数据
-            List<String> taskGroupIds = resultList.stream().map(m -> String.valueOf(m.get("ProjectTaskID"))).distinct().collect(Collectors.toList());
-            Map<Object, List<Map<String, Object>>> resultGroupByTaskGroup = resultList.stream().collect(Collectors.groupingBy(m -> m.get("ProjectTaskID")));
-            List<RequestTask> tasks=new ArrayList<>();
-            for (String taskGroupId : taskGroupIds) {
-                RequestTask requestTask=new RequestTask();
-                requestTask.setProjectTaskID(taskGroupId);
-                List<Map<String, Object>> list = resultGroupByTaskGroup.get(taskGroupId);
-                List<Service> services=new ArrayList<>();
-                for (Map<String, Object> map : list) {
-                    Service service=new Service();
-                    service.setServiceID(String.valueOf(map.get("ServiceID")));
-                    service.setEmployeeID(String.valueOf(map.get("EmployeeID")));
-                    service.setPlanWork(String.valueOf(map.get("PlanWork")));
-                    service.setStartDate(String.valueOf(map.get("StartDate")));
-                    service.setEndDate(String.valueOf(map.get("EndDate")));
-                    service.setOverDeliveryAllowedIndicator("true");
-                    services.add(service);
+    //每天凌晨 3:00 获取创建的项目服务和项目数据  SAP---->工时管家
+    @Scheduled(cron = "0 0 2 ? * *")
+    public void syncProjectFromSap(){
+        if(isDev){
+            return;
+        }
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_sap",1));
+        LocalDate date=LocalDate.now();
+        for (TimeType timeType : timeTypeList) {
+            Integer companyId = timeType.getCompanyId();
+            //获取SAP项目服务数据 ----> 工时管家任务分组下阶段作为项目服务数据
+            XmlResponseData projectServiceData= SyncSapUtils.syncServiceData(df.format(date.minusDays(1)), null, companyId);
+            //已有的项目分类
+            List<ProjectCategory> allProjectCategoryList = projectCategoryMapper.selectList(new QueryWrapper<ProjectCategory>().eq("company_id", companyId));
+            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
+//            XmlResponseData xmlResponseData = SyncSapUtils.syncProjectFromSap(df.format(date.minusDays(1)), df.format(date.minusDays(1)));
+            XmlResponseData xmlResponseData = SyncSapUtils.syncProjectFromSap(df.format(date.minusDays(1)), df.format(date.minusDays(1)));
+            List<ProjectQueryResponse> projectQueryResponses = xmlResponseData.getProjectQueryResponses();
+            List<Map<String,Object>> idsMapList=new ArrayList<>();
+            if(projectQueryResponses!=null&&projectQueryResponses.size()>0){
+                List<Task> taskList=new ArrayList<>();
+                for (ProjectQueryResponse item : projectQueryResponses) {
+                    Project project=new Project();
+                    //处理项目分类
+                    String categoryName;
+                    switch (item.getTypeCode()){
+                        case "10":categoryName="成本收集项目";
+                            break;
+                        case "20":categoryName="直接成本项目";
+                            break;
+                        case "21":categoryName="市场营销项目";
+                            break;
+                        case "22":categoryName="战略采购项目";
+                            break;
+                        case "23":categoryName="研发项目";
+                            break;
+                        case "25":categoryName="设备销售项目";
+                            break;
+                        case "Z01":categoryName="报价项目";
+                            break;
+                        case "Z02":categoryName="售后报价项目";
+                            break;
+                        case "Z03":categoryName="产品设备报价项目";
+                            break;
+                        case "Z04":categoryName="半成品项目(无销售)";
+                            break;
+                        case "Z05":categoryName="产成品项目(含销售)";
+                            break;
+                        case "Z06":categoryName="机器生产项目";
+                            break;
+                        case "Z07":categoryName="电气柜生产项目";
+                            break;
+                        case "Z08":categoryName="工程项目";
+                            break;
+                        case "Z09":categoryName="售后工程项目";
+                            break;
+                        default:categoryName="未知";
+                    }
+                    String finalCategoryName = categoryName;
+                    Optional<ProjectCategory> first = allProjectCategoryList.stream().filter(at -> at.getName().equals(finalCategoryName)).findFirst();
+                    if(!first.isPresent()&&!finalCategoryName.equals("未知")){
+                        ProjectCategory projectCategory=new ProjectCategory();
+                        projectCategory.setName(categoryName);
+                        projectCategory.setCompanyId(companyId);
+                        projectCategoryMapper.insert(projectCategory);
+                        allProjectCategoryList.add(projectCategory);
+                        project.setCategory(projectCategory.getId());
+                        project.setCategoryName(projectCategory.getName());
+                    }else {
+                        project.setCategory(first.get().getId());
+                        project.setCategoryName(first.get().getName());
+                    }
+                    project.setProjectName(item.getProjectSummaryTask().getProjectName().getName());
+                    project.setProjectCode(item.getProjectSummaryTask().getProjectElementID());
+                    project.setCompanyId(companyId);
+                    //处理项目数据 --->工时管家生成对应项目数据
+                    Optional<Project> any = projectList.stream().filter(pt -> pt.getProjectCode().equals(project.getProjectCode())).findAny();
+                    if(any.isPresent()){
+                        project.setId(any.get().getId());
+                    }
+                    projectService.saveOrUpdate(project);
+                    //处理项目下任务 ----> 工时管家生成任务分组
+                    List<ProjectTask> projectTasks = item.getProjectTasks();
+                    if(projectTasks!=null&&projectTasks.size()>0){
+                        projectTasks.forEach(ps->{
+                            TaskGroup taskGroup=new TaskGroup();
+                            taskGroup.setProjectId(project.getId());
+                            taskGroup.setTaskGroupCode(ps.getProjectElementID());
+                            taskGroup.setName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
+                            TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", ps.getProjectElementID()));
+                            if(one!=null){
+                                taskGroup.setId(one.getId());
+                            }
+                            taskGroupService.saveOrUpdate(taskGroup);
+                            Map<String,Object> map=new HashMap<>();
+                            map.put("groupId",taskGroup.getId());
+                            map.put("projectId",project.getId());
+                            idsMapList.add(map);
+                        });
+                    }
+                }
+                LocalDate localDate=LocalDate.now();
+                if(idsMapList.size()>0){
+                    List<Integer> projectIds = idsMapList.stream().map(i -> Integer.valueOf(String.valueOf(i.get("projectId")))).collect(Collectors.toList());
+                    List<Integer> groupIds = idsMapList.stream().map(i -> Integer.valueOf(String.valueOf(i.get("groupId")))).collect(Collectors.toList());
+                    List<Task> allTasks = taskMapper.selectList(new LambdaQueryWrapper<Task>().in(Task::getProjectId, projectIds).in(Task::getGroupId, groupIds));
+                    List<Stages> allStages = stagesMapper.selectList(new LambdaQueryWrapper<Stages>().in(Stages::getProjectId, projectIds).in(Stages::getGroupId, groupIds));
+                    for (Map<String, Object> map : idsMapList) {
+                        //处理项目下服务数据 ------->工时管家相关项目下任务分组下创建任务数据
+                        if(projectServiceData!=null){
+                            List<ServiceProduct> serviceProducts = projectServiceData.getServiceProducts();
+                            if(serviceProducts!=null&&serviceProducts.size()>0){
+                                List<Task> hasTasks =allTasks.stream().filter(al->al.getProjectId().equals(map.get("projectId"))&&al.getGroupId().equals(map.get("groupId"))).collect(Collectors.toList());
+                                for (ServiceProduct serviceProduct : serviceProducts) {
+                                    Task task=new Task();
+                                    task.setName(serviceProduct.getDescription().getDescription()+"-"+serviceProduct.getInternalID());
+                                    task.setGroupId(Integer.valueOf(String.valueOf(map.get("groupId"))));
+                                    task.setProjectId(Integer.valueOf(String.valueOf(map.get("projectId"))));
+                                    task.setCreateDate(localDate);
+                                    task.setCompanyId(companyId);
+                                    Optional<Stages> first = allStages.stream().filter(a -> a.getGroupId().equals(task.getGroupId()) && a.getProjectId().equals(task.getProjectId())).findFirst();
+                                    if(first.isPresent()){
+                                        task.setStagesId(first.get().getId());
+                                    }else {
+                                        //创建默认列表
+                                        Stages stage = new Stages();
+                                        stage.setGroupId(task.getGroupId());
+                                        stage.setSequence(1);
+                                        stage.setProjectId(task.getProjectId());
+                                        stage.setStagesName(MessageUtils.message("excel.WorkUnfolds"));
+                                        stagesMapper.insert(stage);
+                                        allStages.add(stage);
+                                        task.setStagesId(stage.getId());
+                                    }
+                                    task.setServiceId(serviceProduct.getInternalID());
+                                    Optional<Task> optional = hasTasks.stream().filter(s -> s.getServiceId().equals(task.getServiceId())&&s.getProjectId().equals(task.getProjectId())&&s.getGroupId().equals(task.getGroupId())).findFirst();
+                                    if(!optional.isPresent()){
+                                        taskList.add(task);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                if(taskList.size()>0){
+                    taskService.saveBatch(taskList);
                 }
-                requestTask.setServices(services);
-                tasks.add(requestTask);
-            }
-            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" +
-                    "   <soapenv:Header/>\n" +
-                    "   <soapenv:Body>\n" +
-                    "      <glob:ZManageProjectTaskWorkCreateRequest_sync>\n");
-            sb.append(xml);
-            sb.append("      </glob:ZManageProjectTaskWorkCreateRequest_sync>\n" +
-                    "   </soapenv:Body>\n" +
-                    "</soapenv:Envelope>");
-            System.out.println(sb.toString());
-            String result = "";
-            try {
-                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();
-            }
-            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:ZManageProjectTaskWorkCreateConfirmation_sync>"));
-                result="<XMLDATA>"+result+"</XMLDATA>";
-            }
-            System.out.println(result);
-            XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
-            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime().getUUID())){
-                log.error("推送失败===》项目编号:"+zManageProjectTaskWork.getProjectID());
-                continue;
             }
         }
     }
 
+
+
     public static void main(String[] args) {
         List<Map<String, Object>> mapList = new ArrayList<>();
         Map<String,Object> map2=new HashMap<>();
@@ -1761,8 +1802,14 @@ public class TimingTask {
                     service.setServiceID(String.valueOf(map.get("ServiceID")));
                     service.setEmployeeID(String.valueOf(map.get("EmployeeID")));
                     service.setPlanWork(String.valueOf(map.get("PlanWork")));
-                    service.setStartDate(String.valueOf(map.get("StartDate")));
-                    service.setEndDate(String.valueOf(map.get("EndDate")));
+                    StartDate startDate=new StartDate();
+                    startDate.setTimeZoneCode("UTC+8");
+                    startDate.setStartDate(String.valueOf(map.get("StartDate")));
+                    service.setStartDate(startDate);
+                    EndDate endDate=new EndDate();
+                    endDate.setTimeZoneCode("UTC+8");
+                    endDate.setEndDate(String.valueOf(map.get("EndDate")));
+                    service.setEndDate(endDate);
                     service.setOverDeliveryAllowedIndicator("true");
                     services.add(service);
                 }

+ 246 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/SyncSapUtils.java

@@ -0,0 +1,246 @@
+package com.management.platform.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.ReportPushLog;
+import com.management.platform.service.ReportPushLogService;
+import com.management.platform.service.ReportService;
+import com.management.platform.webservice.po.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class SyncSapUtils {
+
+
+    //工时管家推送项目任务计划工时数据到SAP
+    public static void pushProjectPlanToSap(List<Map<String, Object>> mapList) {
+        //根据项目分组 按照项目推送
+        //获取当前数据中的所有项目编号
+        List<String> projectIds = mapList.stream().map(m -> String.valueOf(m.get("ProjectID"))).distinct().collect(Collectors.toList());
+        Map<Object, List<Map<String, Object>>> mapListGroupPro = mapList.stream().collect(Collectors.groupingBy(m -> m.get("ProjectID")));
+        //循环推送
+        for (String projectId : projectIds) {
+            //配置xml请求参数
+            XmlRequestData xmlRequestData=new XmlRequestData();
+            xmlRequestData.setBasicMessageHeader("");
+            ZManageProjectTaskWork zManageProjectTaskWork=new ZManageProjectTaskWork();
+            zManageProjectTaskWork.setProjectID(projectId);
+            List<Map<String, Object>> resultList = mapListGroupPro.get(projectId);
+            //获取当前数据下的任务分组的分组数据
+            List<String> taskGroupIds = resultList.stream().map(m -> String.valueOf(m.get("ProjectTaskID"))).distinct().collect(Collectors.toList());
+            Map<Object, List<Map<String, Object>>> resultGroupByTaskGroup = resultList.stream().collect(Collectors.groupingBy(m -> m.get("ProjectTaskID")));
+            List<RequestTask> tasks=new ArrayList<>();
+            for (String taskGroupId : taskGroupIds) {
+                RequestTask requestTask=new RequestTask();
+                requestTask.setProjectTaskID(taskGroupId);
+                List<Map<String, Object>> list = resultGroupByTaskGroup.get(taskGroupId);
+                List<Service> services=new ArrayList<>();
+                for (Map<String, Object> map : list) {
+                    Service service=new Service();
+                    service.setServiceID(String.valueOf(map.get("ServiceID")));
+                    service.setEmployeeID(String.valueOf(map.get("EmployeeID")));
+                    service.setPlanWork(String.valueOf(map.get("PlanWork")));
+                    StartDate startDate=new StartDate();
+                    startDate.setTimeZoneCode("UTC+8");
+                    startDate.setStartDate(String.valueOf(map.get("StartDate"))+"T00:00:00Z");
+                    service.setStartDate(startDate);
+                    EndDate endDate=new EndDate();
+                    endDate.setTimeZoneCode("UTC+8");
+                    endDate.setEndDate(String.valueOf(map.get("EndDate"))+"T00:00:00Z");
+                    service.setEndDate(endDate);
+                    service.setRemainingWork(String.valueOf(map.get("PlanWork")));
+                    service.setOverDeliveryAllowedIndicator("true");
+                    services.add(service);
+                }
+                requestTask.setServices(services);
+                tasks.add(requestTask);
+            }
+            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" +
+                    "   <soapenv:Header/>\n" +
+                    "   <soapenv:Body>\n" +
+                    "      <glob:ZManageProjectTaskWorkCreateRequest_sync>\n");
+            sb.append(xml);
+            sb.append("      </glob:ZManageProjectTaskWorkCreateRequest_sync>\n" +
+                    "   </soapenv:Body>\n" +
+                    "</soapenv:Envelope>");
+            System.out.println(sb.toString());
+            String result = "";
+            try {
+                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();
+            }
+            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:ZManageProjectTaskWorkCreateConfirmation_sync>"));
+                result="<XMLDATA>"+result+"</XMLDATA>";
+            }
+            System.out.println(result);
+            XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
+                log.error("推送失败===》项目编号:"+zManageProjectTaskWork.getProjectID());
+                continue;
+            }
+        }
+    }
+
+    //推送工时管家填报考勤数据到SAP
+    public static XmlResponseData pushReportToSap(Map<String,Object> map){
+        //配置xml请求参数
+        XmlRequestData xmlRequestData=new XmlRequestData();
+        EmployeeTime employeeTime=new EmployeeTime();
+        WorkDescriptionText workDescriptionText=new WorkDescriptionText();
+        workDescriptionText.setLanguageCode("ZH");
+        SapPeriod datePeriod=new SapPeriod();
+        SapPeriod timePeriod=new SapPeriod();
+        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")));
+        }
+        if(map.get("EndTime")!=null){
+            timePeriod.setEndTime(String.valueOf(map.get("EndTime")));
+        }
+        employeeTime.setDatePeriod(datePeriod);
+        employeeTime.setTimePeriod(timePeriod);
+        employeeTime.setItemTypeCode("CN0001");
+        employeeTime.setDuration(map.get("Duration")==null?"0":String.valueOf(map.get("Duration")));
+        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://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);
+        return xmlResponseData;
+    }
+
+
+    //同步SAP项目数据到工时管家
+    public static XmlResponseData syncProjectFromSap(String startDate, String endDate) {
+        //配置请求xml
+        XmlRequestData xmlRequestData=new XmlRequestData();
+        ProcessingConditions processingConditions=new ProcessingConditions();
+        processingConditions.setQueryHitsUnlimitedIndicator("true");
+        xmlRequestData.setProcessingConditions(processingConditions);
+        ProjectSelectionByElement projectSelectionByElement=new ProjectSelectionByElement();
+        SelectionByLastChangeDateTime selectionByLastChangeDateTime=new SelectionByLastChangeDateTime();
+        selectionByLastChangeDateTime.setInclusionExclusionCode("I");
+        selectionByLastChangeDateTime.setIntervalBoundaryTypeCode("3");
+        selectionByLastChangeDateTime.setLowerBoundaryLastChangeDateTime(startDate+"T00:00:00Z");
+        selectionByLastChangeDateTime.setUpperBoundaryLastChangeDateTime(endDate+"T00:00:00Z");
+        projectSelectionByElement.setSelectionByLastChangeDateTime(selectionByLastChangeDateTime);
+        List<ProjectSelectionByElement> list=new ArrayList<>();
+        list.add(projectSelectionByElement);
+        xmlRequestData.setProjectSelectionByElements(list);
+        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:ProjectByElementsQuery>\n");
+        sb.append(xml);
+        sb.append("      </glob:ProjectByElementsQuery>\n" +
+                "   </soapenv:Body>\n" +
+                "</soapenv:Envelope>");
+        System.out.println(sb.toString());
+        String result = "";
+        try {
+            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryprojectin?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:ProjectByElementsResponse_sync>"));
+            result="<XMLDATA>"+result+"</XMLDATA>";
+        }
+        System.out.println(result);
+        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+        return xmlResponseData;
+    }
+
+
+    //同步SAP项目服务数据到工时管家
+    public static XmlResponseData syncServiceData(String startDate, String endDate, Integer companyId) {
+        //配置请求xml
+        XmlRequestData xmlRequestData=new XmlRequestData();
+        ProcessingConditions processingConditions=new ProcessingConditions();
+        processingConditions.setQueryHitsUnlimitedIndicator("true");
+        xmlRequestData.setProcessingConditions(processingConditions);
+        ServiceProductSelectionByElements serviceProductSelectionByElements=new ServiceProductSelectionByElements();
+        serviceProductSelectionByElements.setSelectionByLastChangeSinceDateTime(startDate+"T00:00:00Z");
+        xmlRequestData.setServiceProductSelectionByElements(serviceProductSelectionByElements);
+        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:ServiceProductByElementsQuery_sync>\n");
+        sb.append(xml);
+        sb.append("      </glob:ServiceProductByElementsQuery_sync>\n" +
+                "   </soapenv:Body>\n" +
+                "</soapenv:Envelope>");
+        System.out.println(sb.toString());
+        String result = "";
+        try {
+            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryserviceproductin?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:ServiceProductByElementsResponse_sync>"));
+            result="<XMLDATA>"+result+"</XMLDATA>";
+        }
+        System.out.println(result);
+        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+        return xmlResponseData;
+    }
+}

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/EndDate.java

@@ -0,0 +1,21 @@
+package com.management.platform.webservice.po;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.*;
+
+@Data
+@XmlRootElement(name = "EndDate")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class EndDate {
+
+    @XmlAttribute(name = "timeZoneCode")
+    private String timeZoneCode;
+
+    @XmlValue
+    private String EndDate;
+
+    public String gettimeZoneCode() {
+        return timeZoneCode;
+    }
+}

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/Service.java

@@ -11,8 +11,8 @@ public class Service {
     private String employeeID;
     private String planWork;
     private String remainingWork;
-    private String startDate;
-    private String endDate;
+    private StartDate startDate;
+    private EndDate endDate;
     private String overDeliveryAllowedIndicator;
 
     @XmlElement(name = "ServiceID")
@@ -36,12 +36,12 @@ public class Service {
     }
 
     @XmlElement(name = "StartDate")
-    public String getStartDate(){
+    public StartDate getStartDate(){
         return startDate;
     }
 
     @XmlElement(name = "EndDate")
-    public String getEndDate(){
+    public EndDate getEndDate(){
         return endDate;
     }
 

+ 22 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/StartDate.java

@@ -0,0 +1,22 @@
+package com.management.platform.webservice.po;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.*;
+
+@Data
+@XmlRootElement(name = "EndDate")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class StartDate {
+
+    @XmlAttribute(name = "timeZoneCode")
+    private String timeZoneCode;
+
+    @XmlValue
+    private String StartDate;
+
+    public String gettimeZoneCode() {
+        return timeZoneCode;
+    }
+
+}

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -999,6 +999,7 @@
         and t.start_date is not null
         and t.plan_hours is not null
         and t.service_id is not null
+        and u.job_number is not null
         <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
             and t.create_date between #{startDate} and #{endDate}
         </if>