Parcourir la source

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

seyason il y a 1 an
Parent
commit
5c96ec386b

+ 4 - 4
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);
 
     }
 

+ 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
      */

+ 2 - 2
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);
 

+ 12 - 6
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;

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

@@ -7515,21 +7515,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() {
@@ -7537,107 +7525,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;
@@ -7671,7 +7659,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

+ 16 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -321,7 +321,15 @@
                 </el-select>
               </el-form-item>
               <!-- 填报日期 -->
-              <div style="display: inline-block;padding-left: 15px">
+              <div style="display: inline-block;">
+                <el-form-item :label="'项目'">
+                  <el-select v-model="selectProject" size="small" style="width: 162px" clearable>
+                    <el-option v-for="item in projectList" :label="item.projectName" :value="item.id">
+                      <span style="float: left">{{ item.projectName }}</span>
+                      <span style="float: right; color: #8492a6;">{{ item.projectCode }}</span>
+                    </el-option>
+                  </el-select>
+                </el-form-item>
                 <el-form-item :label="$t('fillinthedate')">
                   <el-date-picker v-model="date" type="daterange" value-format="yyyy-MM-dd" size="small"
                     :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')"
@@ -1192,6 +1200,8 @@ export default {
       }, // 发放数据
       sendStateList: [], // 发放状态列表
       dialogVisibleRelease: false, // 发放弹出框
+
+      selectProject: null, // 项目选择
     };
   },
   computed: {
@@ -1915,6 +1925,7 @@ export default {
         endDate: end,
         ownerId: this.ownerId,
         type: this.queryExpenseMainType,
+        projectId: this.selectProject ? this.selectProject : null,
       };
       if (this.isAuditList) {
         param.status = 1;
@@ -2033,7 +2044,10 @@ export default {
 
     // 获取查看单据的数据
     getParticulars(id) {
-      this.http.post('/expense-sheet/getDetail', { id: id },
+      this.http.post('/expense-sheet/getDetail', { 
+        id: id,
+        projectId: this.selectProject ? this.selectProject : '',
+      },
         res => {
           if (res.code == "ok") {
             this

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -133,7 +133,7 @@
                                     </span>
                                 </span>
                                 <span style="float:right;">
-                                    <el-link type="primary" v-if="user.timeType.enableNewWeeklyfill != 1" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">{{$t('textLink.fillInTheWork')}}</el-link>
+                                    <el-link type="primary" v-if="user.timeType.enableNewWeeklyfill != 1 && user.companyId != '4374'" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">{{$t('textLink.fillInTheWork')}}</el-link>
                                     <el-link v-if="reportTimeType.type != 0 && user.companyId != yuzhongCompId && user.timeType.enableNewWeeklyfill != 1 && user.companyId != 3092" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">{{$t('textLink.fillInAWeek')}}</el-link>
                                     <el-link v-if="user.timeType.enableNewWeeklyfill == 1" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportCustom()">按周填报</el-link>
                                     <!-- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportCustom()">按周填报</el-link> -->

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/index/index.vue

@@ -186,7 +186,7 @@
                 for (var i in list) {
                     if(list[i].name == '工时报告') {
                         this.routers.push({name: '查看日报',url: '/calendar',icon: 'description'})
-                        if(this.user.timeType.enableNewWeeklyfill != 1) { // 针对新版按周填报去掉填写日报
+                        if(this.user.timeType.enableNewWeeklyfill != 1 && this.user.companyId != 4374) { // 针对新版按周填报去掉填写日报
                             this.routers.push({name: '填写日报',url: '/edit',icon: 'edit'})
                         }
                         if (this.user.companyId != 3092) {