Min 1 tahun lalu
induk
melakukan
266eec8cf8

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -187,4 +187,6 @@ public interface ReportMapper extends BaseMapper<Report> {
     Double getReallWorkingTimeByProjectId(Integer id);
 
     Double getReallWorkingTimeByProjectAndGroup(Integer projectId, Integer taskGroupId);
+
+    List<Map<String, Object>> getProjectPlanData(Integer companyId, String startDate, String endDate);
 }

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

@@ -11450,6 +11450,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 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());
@@ -11464,9 +11465,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     allStages.add(stage);
                                     task.setStagesId(stage.getId());
                                 }
-
                                 task.setServiceId(serviceProduct.getInternalID());
-                                Optional<Task> optional = hasTasks.stream().filter(s -> s.getName().equals(serviceProduct.getDescription().getDescription() + "-" + serviceProduct.getInternalID())).findFirst();
+                                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);
                                 }

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

@@ -1551,44 +1551,7 @@ 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 ? * *")
     public void pushReportToSap(){
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -1596,7 +1559,9 @@ public class TimingTask {
         LocalDate date=LocalDate.now();
         for (TimeType timeType : timeTypeList) {
             Integer companyId = timeType.getCompanyId();
-            List<Map<String, Object>> mapList = reportMapper.getPushProjectReportToSap(companyId, date.minusDays(2).format(df), date.format(df), null);
+            //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为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<ReportPushLog> addList=new ArrayList<>();
             //配置xml请求参数
             XmlRequestData xmlRequestData=new XmlRequestData();
@@ -1678,4 +1643,136 @@ 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);
+                }
+                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<>();
+        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")));
+                    service.setStartDate(String.valueOf(map.get("StartDate")));
+                    service.setEndDate(String.valueOf(map.get("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);
+        }
+    }
 }

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

@@ -3,12 +3,13 @@ package com.management.platform.webservice.po;
 import lombok.Data;
 
 import javax.xml.bind.annotation.XmlElement;
+import java.util.List;
 
 @Data
 public class RequestTask {
 
     private String projectTaskID;
-    private Service service;
+    private List<Service> services;
 
     @XmlElement(name = "ProjectTaskID")
     public String getProjectTaskID(){
@@ -16,7 +17,7 @@ public class RequestTask {
     }
 
     @XmlElement(name = "Service")
-    public Service getService(){
-        return service;
+    public List<Service> getServices(){
+        return services;
     }
 }

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

@@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlElement;
 public class Service {
 
     private String serviceID;
-    private Service employeeID;
+    private String employeeID;
     private String planWork;
     private String remainingWork;
     private String startDate;
@@ -21,7 +21,7 @@ public class Service {
     }
 
     @XmlElement(name = "EmployeeID")
-    public Service getEmployeeID(){
+    public String getEmployeeID(){
         return employeeID;
     }
 

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/XmlRequestData.java

@@ -19,6 +19,7 @@ public class XmlRequestData {
 	private ZManageProjectTaskWork zManageProjectTaskWork;
 	private ServiceProductSelectionByElements serviceProductSelectionByElements;
 	private EmployeeTime employeeTime;
+	private String basicMessageHeader;
 
 	@XmlElement(name = "ProcessingConditions")
 	public ProcessingConditions getProcessingConditions() {
@@ -45,4 +46,9 @@ public class XmlRequestData {
 		return employeeTime;
 	}
 
+	@XmlElement(name = "BasicMessageHeader")
+	public String getBasicMessageHeader() {
+		return basicMessageHeader;
+	}
+
 }

+ 17 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -951,13 +951,12 @@
 
     <select id="getPushProjectReportToSap" resultType="java.util.Map">
         select r.id as ReportId, u.job_number as EmployeeID,r.create_date as StartDate,r.create_date as EndDate,r.start_time as StartTime,r.end_time as EndTime,r.working_time as Duration,tg.task_group_code as ProjectElementID,
-        red.code as ServiceProductInternalID,r.content as WorkDescriptionText
+        t.service_id as ServiceProductInternalID,r.content as WorkDescriptionText
         from report r
         left join user u on u.id=r.creator_id
         left join project p on p.id=r.project_id
         left join task t on t.id=r.task_id
         left join task_group tg on tg.id=t.group_id
-        left join report_extra_degree red on red.id=r.degree_id
         where r.state=1
         and r.company_id=#{companyId}
         <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
@@ -988,4 +987,20 @@
     <select id="getReallWorkingTimeByProjectAndGroup" resultType="java.lang.Double">
         SELECT SUM(working_time) as reallyWorkingTime FROM report WHERE project_id = #{projectId} AND group_id = #{taskGroupId}
     </select>
+
+    <select id="getProjectPlanData" resultType="java.util.Map">
+        select p.project_code as ProjectID,tg.task_group_code ProjectTaskID,t.service_id as  ServiceID,u.job_number as EmployeeID,t.plan_hours as PlanWork ,t.start_date as StartDate ,t.end_date as EndDate
+        from task t
+        left join project p on t.project_id = p.id
+        left join task_group tg on tg.id=t.group_id
+        left join task_executor te on te.task_id = t.id
+        left join user u on te.executor_id=u.id
+        where t.company_id=#{companyId}
+        and t.start_date is not null
+        and t.plan_hours is not null
+        and t.service_id is not null
+        <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
+            and t.create_date between #{startDate} and #{endDate}
+        </if>
+    </select>
 </mapper>

+ 4 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -384,9 +384,10 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.getNum()));
                 p.setTotalWorkingHours(totalWorkingHours.doubleValue());
                 if(oldPlanProcedureTotals.size()>0){
-                    boolean b = oldPlanProcedureTotals.stream().anyMatch(fs -> fs.getPlanId().equals(plan.getId()) && fs.getProdProcedureId().equals(prodProcedure.getId()));
-                    if(b){
-                        continue;
+                    Optional<PlanProcedureTotal> b = oldPlanProcedureTotals.stream().filter(fs -> fs.getPlanId().equals(plan.getId()) && fs.getProdProcedureId().equals(prodProcedure.getId())).findAny();
+                    //存在更新表数据
+                    if(b.isPresent()){
+                        p.setId(b.get().getId());
                     }
                 }
                 planProcedureTotals.add(p);