|
@@ -29,6 +29,7 @@ import org.springframework.http.client.ClientHttpResponse;
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.StringUtils;
|
|
import org.springframework.util.StringUtils;
|
|
import org.springframework.web.client.DefaultResponseErrorHandler;
|
|
import org.springframework.web.client.DefaultResponseErrorHandler;
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.client.RestTemplate;
|
|
@@ -157,6 +158,20 @@ public class TimingTask {
|
|
private UserService userService;
|
|
private UserService userService;
|
|
@Resource
|
|
@Resource
|
|
private ParticipationService participationService;
|
|
private ParticipationService participationService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ProjectCategoryMapper projectCategoryMapper;
|
|
|
|
+ @Resource
|
|
|
|
+ private TaskService taskService;
|
|
|
|
+ @Resource
|
|
|
|
+ private StagesMapper stagesMapper;
|
|
|
|
+ @Resource
|
|
|
|
+ private TaskGroupService taskGroupService;
|
|
|
|
+ @Resource
|
|
|
|
+ private TaskGroupMapper taskGroupMapper;
|
|
|
|
+ @Resource
|
|
|
|
+ private StagesService stagesService;
|
|
|
|
+ @Resource
|
|
|
|
+ private SapProjectServiceService sapProjectServiceService;
|
|
|
|
|
|
|
|
|
|
private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
|
|
private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
|
|
@@ -1551,118 +1566,30 @@ public class TimingTask {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- public static void main(String[] args) throws Exception {
|
|
|
|
- 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("2023-09-01T00:00:00Z");
|
|
|
|
- selectionByLastChangeDateTime.setUpperBoundaryLastChangeDateTime("2023-10-01T00: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 = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryprojectin?sap-vhost=my602728.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:ProjectByElementsResponse_sync>"));
|
|
|
|
- result="<XMLDATA>"+result+"</XMLDATA>";
|
|
|
|
- }
|
|
|
|
- System.out.println(result);
|
|
|
|
- XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //每天凌晨 2:00 推送前2天审核通过的日报 工时管家---->SAP
|
|
|
|
|
|
+ //每天凌晨 2:00 推送前1天审核通过的日报 工时管家---->SAP
|
|
@Scheduled(cron = "0 0 2 ? * *")
|
|
@Scheduled(cron = "0 0 2 ? * *")
|
|
public void pushReportToSap(){
|
|
public void pushReportToSap(){
|
|
|
|
+ if(isDev){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_sap",1));
|
|
List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_sap",1));
|
|
LocalDate date=LocalDate.now();
|
|
LocalDate date=LocalDate.now();
|
|
for (TimeType timeType : timeTypeList) {
|
|
for (TimeType timeType : timeTypeList) {
|
|
Integer companyId = timeType.getCompanyId();
|
|
Integer companyId = timeType.getCompanyId();
|
|
- List<Map<String, Object>> mapList = reportMapper.getPushProjectReportToSap(companyId, date.minusDays(2).format(df), date.format(df), null);
|
|
|
|
|
|
+ //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
|
|
|
|
+ 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<>();
|
|
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) {
|
|
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"));
|
|
ReportPushLog one = reportPushLogService.getOne(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getCompanyId, companyId).eq(ReportPushLog::getReportId, map.get("ReportId")).eq(ReportPushLog::getTargetSystem,"SAP"));
|
|
if(one!=null){
|
|
if(one!=null){
|
|
continue;
|
|
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;
|
|
continue;
|
|
}else {
|
|
}else {
|
|
//推送成功 日报数据打上标记
|
|
//推送成功 日报数据打上标记
|
|
@@ -1678,4 +1605,221 @@ public class TimingTask {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //每天凌晨 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<Stages> stagesList=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);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ 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<Stages> allStages = stagesMapper.selectList(new LambdaQueryWrapper<Stages>().in(Stages::getProjectId, projectIds).in(Stages::getGroupId, groupIds));
|
|
|
|
+ for (Map<String, Object> map : idsMapList) {
|
|
|
|
+ Optional<Stages> first = allStages.stream().filter(a -> a.getGroupId().equals(String.valueOf(map.get("groupId"))) && a.getProjectId().equals(String.valueOf(map.get("projectId")))).findFirst();
|
|
|
|
+ if(!first.isPresent()){
|
|
|
|
+ //创建默认列表
|
|
|
|
+ Stages stage = new Stages();
|
|
|
|
+ stage.setGroupId(Integer.valueOf(String.valueOf(map.get("groupId"))));
|
|
|
|
+ stage.setSequence(1);
|
|
|
|
+ stage.setProjectId(Integer.valueOf(String.valueOf(map.get("projectId"))));
|
|
|
|
+ stage.setStagesName(MessageUtils.message("excel.WorkUnfolds"));
|
|
|
|
+ allStages.add(stage);
|
|
|
|
+ stagesList.add(stage);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(stagesList.size()>0){
|
|
|
|
+ stagesService.saveBatch(stagesList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //处理项目下服务数据 ------->工时管家相关项目下任务分组下创建任务数据
|
|
|
|
+ List<SapProjectService> serviceList = sapProjectServiceService.list(new LambdaQueryWrapper<SapProjectService>().eq(SapProjectService::getCompanyId, companyId));
|
|
|
|
+ List<SapProjectService> sapProjectServiceList=new ArrayList<>();
|
|
|
|
+ if(projectServiceData!=null){
|
|
|
|
+ List<ServiceProduct> serviceProducts = projectServiceData.getServiceProducts();
|
|
|
|
+ if(serviceProducts!=null&&serviceProducts.size()>0){
|
|
|
|
+ for (ServiceProduct serviceProduct : serviceProducts) {
|
|
|
|
+ SapProjectService sapProjectService=new SapProjectService();
|
|
|
|
+ sapProjectService.setServiceCode(serviceProduct.getInternalID());
|
|
|
|
+ sapProjectService.setServiceName(serviceProduct.getDescription().getDescription());
|
|
|
|
+ sapProjectService.setCompanyId(companyId);
|
|
|
|
+ boolean match = serviceList.stream().anyMatch(s -> s.getServiceCode().equals(serviceProduct.getInternalID()));
|
|
|
|
+ if(!match){
|
|
|
|
+ sapProjectServiceList.add(sapProjectService);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(sapProjectServiceList.size()>0){
|
|
|
|
+ sapProjectServiceService.saveBatch(sapProjectServiceList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
|
+ Map<String,Object> map2=new HashMap<>();
|
|
|
|
+ map2.put("ProjectID","1");
|
|
|
|
+ map2.put("ProjectTaskID","2");
|
|
|
|
+ map2.put("ServiceID","3");
|
|
|
|
+ map2.put("EmployeeID","4");
|
|
|
|
+ map2.put("PlanWork","5");
|
|
|
|
+ map2.put("StartDate","6");
|
|
|
|
+ map2.put("EndDate","7");
|
|
|
|
+ mapList.add(map2);
|
|
|
|
+ Map<String,Object> map1=new HashMap<>();
|
|
|
|
+ map1.put("ProjectID","1");
|
|
|
|
+ map1.put("ProjectTaskID","2");
|
|
|
|
+ map1.put("ServiceID","3");
|
|
|
|
+ map1.put("EmployeeID","5");
|
|
|
|
+ map1.put("PlanWork","3");
|
|
|
|
+ map1.put("StartDate","2");
|
|
|
|
+ map1.put("EndDate","1");
|
|
|
|
+ mapList.add(map1);
|
|
|
|
+ //根据项目分组 按照项目推送
|
|
|
|
+ //获取当前数据中的所有项目编号
|
|
|
|
+ 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")));
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+ requestTask.setServices(services);
|
|
|
|
+ tasks.add(requestTask);
|
|
|
|
+ }
|
|
|
|
+ zManageProjectTaskWork.setTasks(tasks);
|
|
|
|
+ xmlRequestData.setZManageProjectTaskWork(zManageProjectTaskWork);
|
|
|
|
+ String xml = CommonUtils.convertToXml(xmlRequestData);
|
|
|
|
+ System.out.println(xml);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|