Преглед на файлове

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Lijy преди 1 година
родител
ревизия
ac84ef3eb7

+ 6 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseSheetController.java

@@ -64,7 +64,7 @@ public class ExpenseSheetController {
     }
 
     @RequestMapping("/list")
-    public HttpRespMsg list(ExpenseSheet sheet,Integer sendState,String startDate, String endDate, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
+    public HttpRespMsg list(ExpenseSheet sheet,Integer sendState,Integer projectId,String startDate, String endDate, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部报销单");
@@ -75,13 +75,13 @@ public class ExpenseSheetController {
             }
         }
         sheet.setCompanyId(user.getCompanyId());
-        return expenseSheetService.queryList(sheet, startDate, endDate, pageIndex, pageSize);
+        return expenseSheetService.queryList(sheet,projectId, startDate, endDate, pageIndex, pageSize);
     }
 
     @RequestMapping("/getDetail")
-    public HttpRespMsg getDetail(Integer id) {
+    public HttpRespMsg getDetail(Integer id,Integer projectId) {
 
-        return expenseSheetService.getDetail(id);
+        return expenseSheetService.getDetail(id,projectId);
 
     }
 
@@ -118,7 +118,7 @@ public class ExpenseSheetController {
     }
 
     @RequestMapping("/exportList")
-    public HttpRespMsg exportList(ExpenseSheet sheet,String startDate, String endDate) {
+    public HttpRespMsg exportList(ExpenseSheet sheet,Integer projectId ,String startDate, String endDate) {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部报销单");
@@ -127,7 +127,7 @@ public class ExpenseSheetController {
             sheet.setOwnerId(user.getId());
         }
         sheet.setCompanyId(user.getCompanyId());
-        return expenseSheetService.exportList(sheet, startDate, endDate);
+        return expenseSheetService.exportList(sheet,projectId, startDate, endDate);
     }
 
     @RequestMapping("/editSendExpense")

+ 0 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ExpenseSheet.java

@@ -142,9 +142,6 @@ public class ExpenseSheet extends Model<ExpenseSheet> {
     @TableField(exist = false)
     private String secondCheckerName;
 
-    @TableField(exist = false)
-    private Integer projectId;
-
     /**
      * 支付方式id
      */

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ExpenseSheetService.java

@@ -21,11 +21,11 @@ public interface ExpenseSheetService extends IService<ExpenseSheet> {
 
     HttpRespMsg delete(Integer id);
 
-    HttpRespMsg queryList(ExpenseSheet sheet, String startDate, String endDate, Integer pageIndex,  Integer pageSize);
+    HttpRespMsg queryList(ExpenseSheet sheet,Integer projectId, String startDate, String endDate, Integer pageIndex,  Integer pageSize);
 
     HttpRespMsg getNextCode(String userId);
 
-    HttpRespMsg getDetail(Integer id);
+    HttpRespMsg getDetail(Integer id ,Integer projectId);
 
     HttpRespMsg approve(Integer id);
 
@@ -33,7 +33,7 @@ public interface ExpenseSheetService extends IService<ExpenseSheet> {
 
     HttpRespMsg importData(HttpServletRequest request, MultipartFile[] files);
 
-    HttpRespMsg exportList(ExpenseSheet sheet, String startDate, String endDate);
+    HttpRespMsg exportList(ExpenseSheet sheet,Integer projectId, String startDate, String endDate);
 
     HttpRespMsg approveSingleProject(Integer id);
 

+ 29 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -413,7 +413,7 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
     }
 
     @Override
-    public HttpRespMsg queryList(ExpenseSheet sheet, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
+    public HttpRespMsg queryList(ExpenseSheet sheet,Integer projectId, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
         QueryWrapper<ExpenseSheet> queryWrapper = new QueryWrapper<ExpenseSheet>();
         //当前用户
         String token = request.getHeader("TOKEN");
@@ -492,9 +492,8 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
         if (!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) {
             queryWrapper.between("create_date", startDate, endDate);
         }
-        if (sheet.getProjectId()!=null){
+        if (projectId!=null){
             QueryWrapper<ExpenseItem> q = new QueryWrapper<ExpenseItem>();
-            Integer projectId = sheet.getProjectId();
             q.eq("project_id",projectId);
             List<ExpenseItem> expenseItems = expenseItemMapper.selectList(q);
             if (expenseItems.size()==0){
@@ -521,7 +520,7 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                     records.forEach(r->{
                         List<ExpenseItem> items = expenseItems.stream()
                                 .filter(e -> e.getExpenseId().equals(r.getId())&&e.getProjectId().equals(projectId)).collect(Collectors.toList());
-                        double amount = items.stream().mapToDouble(ExpenseItem::getAmount).sum();
+                        double amount = items.stream().mapToDouble(item -> Optional.ofNullable(item.getAmount()).orElse(0.0)).sum();
                         r.setTotalAmount(amount);
                     });
                 }
@@ -575,7 +574,7 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
     }
 
     @Override
-    public HttpRespMsg getDetail(Integer id) {
+    public HttpRespMsg getDetail(Integer id,Integer projectId) {
         String token = request.getHeader("TOKEN");
         ExpenseSheet expenseSheet = expenseSheetMapper.selectById(id);
         if(!StringUtils.isEmpty(expenseSheet.getFirstCheckerId())){
@@ -586,7 +585,12 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
             User user = userMapper.selectById(expenseSheet.getSecondCheckerId());
             expenseSheet.setSecondCheckerName(user.getName());
         }
-        List<ExpenseItem> list = expenseItemMapper.selectList(new QueryWrapper<ExpenseItem>().eq("expense_id", id));
+        QueryWrapper<ExpenseItem> q = new QueryWrapper<ExpenseItem>();
+        q.eq("expense_id", id);
+        if (projectId!=null){
+            q.eq("project_id",projectId);
+        }
+        List<ExpenseItem> list = expenseItemMapper.selectList(q);
         List<Project> Project = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", expenseSheet.getCompanyId()));
         ExpenseAuditSetting expenseAuditSetting = expenseAuditSettingMapper.selectById(expenseSheet.getCompanyId());
         for (ExpenseItem expenseItem : list) {
@@ -613,6 +617,8 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
             }
         }
         expenseSheet.setInvoiceList(list);
+        double amount = list.stream().mapToDouble(item -> Optional.ofNullable(item.getAmount()).orElse(0.0)).sum();
+        expenseSheet.setTotalAmount(amount);
         HttpRespMsg msg = new HttpRespMsg();
         msg.data = expenseSheet;
         return msg;
@@ -1091,7 +1097,7 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
      * @return
      */
     @Override
-    public HttpRespMsg exportList(ExpenseSheet sheet, String startDate, String endDate) {
+    public HttpRespMsg exportList(ExpenseSheet sheet,Integer projectId, String startDate, String endDate) {
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", sheet.getCompanyId()));
         QueryWrapper<ExpenseSheet> queryWrapper = new QueryWrapper<ExpenseSheet>();
         queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
@@ -1140,7 +1146,19 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
         List<Map> mapList=new ArrayList<>();
         for (ExpenseSheet record : records) {
             Map map=new HashMap();
-            List<ExpenseItem> expenseItems = expenseItemList.stream().filter(el -> el.getExpenseId().equals(record.getId())).collect(Collectors.toList());
+            List<ExpenseItem> expenseItems =new ArrayList<>();
+            if (projectId!=null){
+                expenseItems=expenseItemList.stream()
+                        .filter(el -> Optional.ofNullable(el.getExpenseId()).equals(Optional.ofNullable(record.getId())))
+                        .filter(el -> Optional.ofNullable(el.getProjectId()).map(p -> p.equals(projectId)).orElse(false))
+                        .collect(Collectors.toList());
+            }else {
+                expenseItems=expenseItemList.stream().filter(el -> el.getExpenseId().equals(record.getId())).collect(Collectors.toList());
+            }
+            double amount = 0.0;
+            if (expenseItems.size()>0){
+                amount=expenseItems.stream().mapToDouble(item -> Optional.ofNullable(item.getAmount()).orElse(0.0)).sum();
+            }
             map.put("size",expenseItems.size());
             mapList.add(map);
             for (ExpenseItem expenseItem : expenseItems) {
@@ -1151,10 +1169,12 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                     item.add(record.getOwnerName());
                 }
                 item.add(record.getCreateDate()==null?"":record.getCreateDate()+"");
+
                 item.add(record.getTicketNum()==null?"0":record.getTicketNum()+"");
                 Optional<ExpenseMainType> first = mainTypes.stream().filter(ms -> ms.getId().equals(record.getType())).findFirst();
                 item.add(first.isPresent()?first.get().getName():"");
-                item.add(record.getTotalAmount()==null?"0":record.getTotalAmount()+"");
+//                item.add(record.getTotalAmount()==null?"0":record.getTotalAmount()+"");
+                item.add(amount+"");
                 item.add(record.getRemark()==null?"":record.getRemark());
                 switch (expenseItem.getStatus()){
                     case 0:

+ 104 - 112
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -7487,21 +7487,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
         //只推送需要推送日报参与的部分就可以了
         List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,projectIds,null,null);
-        //配置xml请求参数
-        XmlRequestData xmlRequestData=new XmlRequestData();
-        xmlRequestData.setBasicMessageHeader("");
-        EmployeeTime employeeTime=new EmployeeTime();
-        WorkDescriptionText workDescriptionText=new WorkDescriptionText();
-        workDescriptionText.setLanguageCode("ZH");
-        SapPeriod datePeriod=new SapPeriod();
-        SapPeriod timePeriod=new SapPeriod();
-        Map<String, List<Map<String, Object>>> listGroupEmployeeID = resultList.stream().collect(Collectors.groupingBy(r -> String.valueOf(r.get("EmployeeID"))));
-        List<String> employeeIDList = resultList.stream().map(r -> String.valueOf(r.get("EmployeeID"))).distinct().collect(Collectors.toList());
-        //按照人员集合长度来创建多个个线程来处理
-        int threadNum = employeeIDList.size();
-        //多加一个作为预算工时推送
-        ExecutorService executor = Executors.newFixedThreadPool(threadNum+1);
+        ExecutorService executor = Executors.newFixedThreadPool(1);
         /*execute()让线程池中的线程来执行业务,每次调用都会将一个线程加入到就绪队列*/
+        List<Map<String, Object>> finalResultList = resultList;
         executor.execute(new Runnable() {
             @Override
             public void run() {
@@ -7509,107 +7497,107 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if(projectPlanSyncLogs.size()>0){
                     sapSyncLogService.saveBatch(projectPlanSyncLogs);
                 }
-            }
-        });
-        for (int i = 0; i <employeeIDList.size() ; i++) {
-            List<Map<String, Object>> mapList = listGroupEmployeeID.get(employeeIDList.get(i));
-            executor.execute(new Runnable() {
-                @Override
-                public void run() {
-                    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);
-                        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 {
-                            if(isDev){
-                                result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
-                            }else {
-                                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():"":"");
+                //配置xml请求参数
+                XmlRequestData xmlRequestData=new XmlRequestData();
+                xmlRequestData.setBasicMessageHeader("");
+                EmployeeTime employeeTime=new EmployeeTime();
+                WorkDescriptionText workDescriptionText=new WorkDescriptionText();
+                workDescriptionText.setLanguageCode("ZH");
+                SapPeriod datePeriod=new SapPeriod();
+                SapPeriod timePeriod=new SapPeriod();
+                for (Map<String, Object> map : finalResultList) {
+                    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);
+                    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 {
+                        if(isDev){
+                            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
                         }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);
+                            result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/manageemployeetimein?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
                         }
-                        sapSyncLogService.save(sapSyncLog);
-                        System.out.println("线程:"+Thread.currentThread().getName()+"正在操作"+map.get("ReportId"));
+                    } 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"));
                 }
-            });
-        }
+            }
+        });
         httpRespMsg.setData("推送正在进行...待推送完成可查看工时日志");
         executor.shutdown();
         return httpRespMsg;
@@ -7643,7 +7631,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     System.out.println(sb.toString());
                     String result = "";
                     try {
-                        result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_deleteemployeetime?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+                        if(isDev){
+                            result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_deleteemployeetime?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+                        }else{
+                            result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/yyatr5vf6y_deleteemployeetime?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+                        }
                     } catch (Exception e) {
                         e.printStackTrace();
                     }

+ 34 - 45
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -1701,22 +1701,15 @@ public class TimingTask {
         for (TimeType timeType : timeTypeList) {
             Integer companyId = timeType.getCompanyId();
             //提前推送项目工时(工时管家相关项目任务分组阶段下任务作为SAP服务 预算工时数据推送到SAP)
-            List<Map<String, Object>> mapList = reportMapper.getPushProjectReportToSap(companyId,df.format(date.minusDays(1)),df.format(date.minusDays(1)), null);
+            List<Map<String, Object>> mapList = reportMapper.getPushProjectReportToSap(companyId,df.format(date.minusDays(8)),df.format(date.minusDays(8)), null);
             //过滤服务code为空的数据
             mapList=mapList.stream().filter(r->r.get("ProjectElementID")!=null && !StringUtils.isEmpty(String.valueOf(r.get("ProjectElementID")))).collect(Collectors.toList());
             List<Integer> projectIds = mapList.stream().map(r -> Integer.valueOf(String.valueOf(r.get("ProjectId")))).distinct().collect(Collectors.toList());
             projectIds.add(-1);
             List<Map<String, Object>> pushProjectPlanHour = reportMapper.getProjectPlanData(companyId,projectIds,null,null);
-//            List<SapSyncLog> projectPlanSapSyncLogs = SyncSapUtils.pushProjectPlanToSap(pushProjectPlanHour, companyId, "");
-//            if(projectPlanSapSyncLogs.size()>0){
-//                sapSyncLogService.saveBatch(projectPlanSapSyncLogs);
-//            }
-            Map<String, List<Map<String, Object>>> listGroupEmployeeID = mapList.stream().collect(Collectors.groupingBy(r -> String.valueOf(r.get("EmployeeID"))));
-            List<String> employeeIDList = mapList.stream().map(r -> String.valueOf(r.get("EmployeeID"))).distinct().collect(Collectors.toList());
-            //按照人员集合长度来创建多个个线程来处理
-            int threadNum = employeeIDList.size();
             //多加一个作为预算工时推送
-            ExecutorService executor = Executors.newFixedThreadPool(threadNum+1);
+            ExecutorService executor = Executors.newFixedThreadPool(1);
+            List<Map<String, Object>> finalMapList = mapList;
             executor.execute(new Runnable() {
                 @Override
                 public void run() {
@@ -1724,43 +1717,39 @@ public class TimingTask {
                     if(projectPlanSyncLogs.size()>0){
                         sapSyncLogService.saveBatch(projectPlanSyncLogs);
                     }
-                }
-            });
-            for (int i = 0; i <employeeIDList.size() ; i++) {
-                List<Map<String, Object>> targetList = listGroupEmployeeID.get(employeeIDList.get(i));
-                executor.execute(new Runnable() {
-                    @Override
-                    public void run() {
-                        for (Map<String, Object> map : targetList) {
-                            ReportPushLog one = reportPushLogService.getOne(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getCompanyId, companyId).eq(ReportPushLog::getReportId, map.get("ReportId")).eq(ReportPushLog::getTargetSystem,"SAP"));
-                            if(one!=null){
-                                continue;
-                            }
-                            XmlResponseData xmlResponseData = SyncSapUtils.pushReportToSap(map,isDev);
-                            SapSyncLog sapSyncLog=new SapSyncLog();
-                            sapSyncLog.setCompanyId(companyId);
-                            sapSyncLog.setRemark("日报数据推送");
-                            sapSyncLog.setSyncType("定时任务推送");
-                            sapSyncLog.setSyncTime(localDateTime);
-                            if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
-                                log.error("推送失败===》工号:"+map.get("EmployeeID"));
-                                sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送失败");
-                                sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
-                            }else {
-                                sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送成功");
-                                //推送成功 日报数据打上标记
-                                ReportPushLog reportPushLog=new ReportPushLog();
-                                reportPushLog.setCompanyId(companyId);
-                                reportPushLog.setReportId(Integer.valueOf(String.valueOf(map.get("ReportId"))));
-                                reportPushLog.setTargetSystem("SAP");
-                                reportPushLog.setUuid(xmlResponseData.getEmployeeTime().getUUID());
-                                reportPushLogService.save(reportPushLog);
-                            }
-                            sapSyncLogService.save(sapSyncLog);
+                    for (Map<String, Object> map : finalMapList) {
+                        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;
                         }
+                        String result = SyncSapUtils.pushReportToSap(map, isDev);
+                        if(StringUtils.isEmpty(result)){
+                            continue;
+                        }
+                        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+                        SapSyncLog sapSyncLog=new SapSyncLog();
+                        sapSyncLog.setCompanyId(companyId);
+                        sapSyncLog.setRemark("日报数据推送");
+                        sapSyncLog.setSyncType("定时任务推送");
+                        sapSyncLog.setSyncTime(localDateTime);
+                        if(StringUtils.isEmpty(xmlResponseData.getEmployeeTime())){
+                            log.error("推送失败===》工号:"+map.get("EmployeeID"));
+                            sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送失败");
+                            sapSyncLog.setResultRemark(xmlResponseData.getLog()!=null?xmlResponseData.getLog().getItem()!=null?xmlResponseData.getLog().getItem().getNote():"":"");
+                        }else {
+                            sapSyncLog.setResult("员工工号["+map.get("EmployeeID")+"]"+map.get("StartDate")+"日报推送成功");
+                            //推送成功 日报数据打上标记
+                            ReportPushLog reportPushLog=new ReportPushLog();
+                            reportPushLog.setCompanyId(companyId);
+                            reportPushLog.setReportId(Integer.valueOf(String.valueOf(map.get("ReportId"))));
+                            reportPushLog.setTargetSystem("SAP");
+                            reportPushLog.setUuid(xmlResponseData.getEmployeeTime().getUUID());
+                            reportPushLogService.save(reportPushLog);
+                        }
+                        sapSyncLogService.save(sapSyncLog);
                     }
-                });
-            }
+                }
+            });
         }
     }
 

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

@@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
@@ -117,7 +118,7 @@ public class SyncSapUtils {
     }
 
     //推送工时管家填报考勤数据到SAP
-    public static XmlResponseData pushReportToSap(Map<String,Object> map,boolean isDev){
+    public static String pushReportToSap(Map<String,Object> map,boolean isDev){
         //配置xml请求参数
         XmlRequestData xmlRequestData=new XmlRequestData();
         EmployeeTime employeeTime=new EmployeeTime();
@@ -134,19 +135,24 @@ public class SyncSapUtils {
             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);
         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");
+        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){
-            return new XmlResponseData();
+            return "";
         }
         employeeTime.setProjectElementID(String.valueOf(map.get("ProjectElementID")));
         employeeTime.setServiceProductInternalID(String.valueOf(map.get("ServiceProductInternalID")));
@@ -179,13 +185,12 @@ public class SyncSapUtils {
                 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);
+            return result;
         } catch (Exception e) {
             e.printStackTrace();
         }
 
-        return xmlResponseData;
+        return "";
     }
 
 

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

@@ -1012,7 +1012,7 @@
     </select>
 
     <select id="getProjectPlanData" resultType="java.util.Map">
-        select p.project_code as ProjectID,t.sap_task_code ProjectTaskID,sps.service_code as ServiceID,u.job_number as EmployeeID,t.plan_hours as PlanWork ,
+        select p.project_code as ProjectID,t.sap_task_code ProjectTaskID,sps.service_code as ServiceID,u.job_number as EmployeeID,te.plan_hours as PlanWork ,
         t.start_date as StartDate ,t.end_date as EndDate
         from
         task_executor te

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

@@ -1232,7 +1232,9 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             switch (type){
                 case 0:
                     List<PlanProcedureTotal> procedureTotals = planProcedureTotalService.list(new QueryWrapper<PlanProcedureTotal>().eq("plan_id", plan.getId()));
-                    List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new QueryWrapper<ProdProcedure>().eq("product_id", plan.getProductId()).eq("version_number",plan.getVersionNumber()));
+                    List<Integer> procedureIds = procedureTotals.stream().map(PlanProcedureTotal::getProdProcedureId).distinct().collect(Collectors.toList());
+                    procedureIds.add(-1);
+                    List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new QueryWrapper<ProdProcedure>().in("id",procedureIds));
                     List<Integer> ids = procedureTotals.stream().map(PlanProcedureTotal::getId).collect(Collectors.toList());
                     ids.add(-1);
                     List<ProdProcedureTeam> procedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().in("plan_procedure_id", ids));
@@ -1276,20 +1278,6 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                     });
                     msg.setData(procedureTotals);
                     break;
-//                case 1:
-//                    Map map=new HashMap();
-//                    List<ProdMaterial> prodMaterialList = prodMaterialMapper.selectList(new QueryWrapper<ProdMaterial>().eq("product_id", plan.getProductId()));
-//                    List<PlanMaterial> planMaterialList = planMaterialMapper.selectList(new QueryWrapper<PlanMaterial>().eq("plan_id", plan.getId()));
-//                    planMaterialList.forEach(pl->{
-//                        Optional<ProdMaterial> first = prodMaterialList.stream().filter(pt -> pt.getId().equals(pl.getProdMaterialId())).findFirst();
-//                        if(first.isPresent()){
-//                            pl.setProdMaterial(first.get());
-//                        }else pl.setProdMaterial(new ProdMaterial());
-//                    });
-//                    map.put("material",prodMaterialList);
-//                    map.put("lackMaterial",planMaterialList);
-//                    msg.setData(map);
-//                    break;
             }
         }
         return msg;