Browse Source

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

seyason 1 year ago
parent
commit
8a156c05d8
20 changed files with 464 additions and 109 deletions
  1. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  2. 40 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SapSyncLogController.java
  3. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  4. 78 59
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  5. 61 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/SyncSapUtils.java
  6. 70 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/ActualEmployeeTime.java
  7. 22 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/ActualEmployeeTimeSelectionByElements.java
  8. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/ProcessingConditions.java
  9. 33 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/SelectionByDate.java
  10. 29 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/SelectionByEmployeeID.java
  11. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/XmlRequestData.java
  12. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/XmlResponseData.java
  13. 1 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  14. 35 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java
  15. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  16. 4 4
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/Home.vue
  17. 4 4
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue
  18. 29 33
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue
  19. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  20. 28 0
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

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

@@ -2352,6 +2352,12 @@ public class ReportController {
         return reportService.pushProjectReportToSap(pushDate);
     }
 
+    //todo:查询已推送到SAP的工时管家工时考勤数据 并撤销推送
+    @RequestMapping("/getHasPushForSap")
+    public HttpRespMsg getHasPushForSap(String startDate,String endDate,String employeeID){
+        return reportService.getHasPushForSap(startDate,endDate,employeeID);
+    }
+
     //todo: 提供接口(威派格) 获取项目工时数据
     @RequestMapping("/getProjectTimeCostByThird")
     public HttpRespMsg getProjectTimeCostByThird(@RequestBody String json){

+ 40 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/SapSyncLogController.java

@@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.management.platform.entity.SapSyncLog;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.SapSyncLogService;
+import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
@@ -16,6 +18,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -36,13 +39,15 @@ public class SapSyncLogController {
     private HttpServletRequest request;
     @Resource
     private UserMapper userMapper;
+    @Value("${upload.path}")
+    private String path;
 
-    @RequestMapping("list")
+    @RequestMapping("/list")
     public HttpRespMsg list(){
         //只返回最近7天的数据
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate endDate=LocalDate.now();
-        LocalDate startDate=endDate.minusDays(7);
+        LocalDate startDate=endDate.minusDays(3);
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         List<SapSyncLog> list = sapSyncLogService.list(new LambdaQueryWrapper<SapSyncLog>().eq(SapSyncLog::getCompanyId, companyId).between(SapSyncLog::getSyncTime,df.format(startDate)+" 00:00:00",df.format(endDate)+" 23:59:59").orderByDesc(SapSyncLog::getSyncTime));
@@ -50,5 +55,38 @@ public class SapSyncLogController {
         return msg;
     }
 
+    @RequestMapping("/export")
+    public HttpRespMsg export(){
+        //只返回最近7天的数据
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter df2=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDate endDate=LocalDate.now();
+        LocalDate startDate=endDate.minusDays(3);
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<SapSyncLog> list = sapSyncLogService.list(new LambdaQueryWrapper<SapSyncLog>().eq(SapSyncLog::getCompanyId, companyId).between(SapSyncLog::getSyncTime,df.format(startDate)+" 00:00:00",df.format(endDate)+" 23:59:59").orderByDesc(SapSyncLog::getSyncTime));
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        titleList.add("推送时间");
+        titleList.add("推送名称");
+        titleList.add("操作人员");
+        titleList.add("推送方式");
+        titleList.add("推送结果");
+        titleList.add("备注");
+        dataList.add(titleList);
+        for (SapSyncLog sapSyncLog : list) {
+            List<String> item=new ArrayList<>();
+            item.add(df2.format(sapSyncLog.getSyncTime()));
+            item.add(sapSyncLog.getRemark());
+            item.add(sapSyncLog.getOperator()==null?"":sapSyncLog.getOperator());
+            item.add(sapSyncLog.getSyncType());
+            item.add(sapSyncLog.getResult());
+            item.add(sapSyncLog.getResultRemark()==null?"":sapSyncLog.getResultRemark());
+            dataList.add(item);
+        }
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList("推送日志", dataList, path);
+        msg.data=resp;
+        return msg;
+    }
 }
 

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -145,4 +145,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg exportUserWorkTimeByCategory(Integer categoryId, Integer deptId, String userId, String startDate, String endDate);
 
     HttpRespMsg cannelAllReport();
+
+    HttpRespMsg getHasPushForSap(String startDate, String endDate, String employeeID);
 }

+ 78 - 59
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -2807,7 +2807,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
 
         if(timeType.getSyncSap()==1){
-            cancelReportPushSap(reportIds,user);
+            List<Integer> reportIdList = ListUtil.convertIntegerIdsArrayToList(reportIds);
+            List<ReportPushLog> reportPushLogs = reportPushLogService.list(new LambdaQueryWrapper<ReportPushLog>().in(ReportPushLog::getReportId, reportIdList));
+            String uuids = reportPushLogs.stream().map(ReportPushLog::getUuid).collect(Collectors.toList()).stream().collect(Collectors.joining(","));
+            cancelReportPushSap(uuids,user);
         }
         return httpRespMsg;
     }
@@ -7685,73 +7688,73 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Override
     public HttpRespMsg cannelAllReport() {
         List<ReportPushLog> list = reportPushLogService.list();
-        List<Integer> collect = list.stream().map(ReportPushLog::getReportId).distinct().collect(Collectors.toList());
-        String s = collect.stream().map(m -> String.valueOf(m)).collect(Collectors.joining(","));
+        List<String> collect = list.stream().map(ReportPushLog::getUuid).distinct().collect(Collectors.toList());
+        String s = collect.stream().map(m -> m).collect(Collectors.joining(","));
         User user = userMapper.selectById(request.getHeader("token"));
         cancelReportPushSap(s,user);
         return null;
     }
 
-    public void  cancelReportPushSap(String reportIds, User user){
-        if(!StringUtils.isEmpty(reportIds)){
+    public void  cancelReportPushSap(String uuids, User user){
+        if(!StringUtils.isEmpty(uuids)){
             LocalDateTime localDateTime=LocalDateTime.now();
             List<SapSyncLog> sapSyncLogs=new ArrayList<>();
-            List<Integer> reportIdList = ListUtil.convertIntegerIdsArrayToList(reportIds);
-            List<ReportPushLog> reportPushLogList = reportPushLogService.list(new LambdaQueryWrapper<ReportPushLog>().in(ReportPushLog::getReportId, reportIdList));
-            for (Integer reportId : reportIdList) {
-                Optional<ReportPushLog> first = reportPushLogList.stream().filter(r -> r.getReportId().equals(reportId)).findFirst();
-                if(first.isPresent()){
-                    XmlRequestData xmlRequestData=new XmlRequestData();
-                    ZDeleteEmployeeTime zDeleteEmployeeTime=new ZDeleteEmployeeTime();
-                    zDeleteEmployeeTime.setEmployeeTimeUUID(first.get().getUuid()==null?"":first.get().getUuid());
-                    xmlRequestData.setZDeleteEmployeeTime(zDeleteEmployeeTime);
-                    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:ZDeleteEmployeeTimeCreateRequest_sync>\n");
-                    sb.append(xml);
-                    sb.append("      </glob:ZDeleteEmployeeTimeCreateRequest_sync>\n" +
-                            "   </soapenv:Body>\n" +
-                            "</soapenv:Envelope>");
-                    System.out.println(sb.toString());
-                    String result = "";
-                    try {
-                        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");
-                        }
+            List<String> uuidList = ListUtil.convertLongIdsArrayToList(uuids);
+            for (String uuid : uuidList) {
+                int count = reportPushLogService.count(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getUuid, uuid));
+                if(count>0){
+                    continue;
+                }
+                XmlRequestData xmlRequestData=new XmlRequestData();
+                ZDeleteEmployeeTime zDeleteEmployeeTime=new ZDeleteEmployeeTime();
+                zDeleteEmployeeTime.setEmployeeTimeUUID(uuid);
+                xmlRequestData.setZDeleteEmployeeTime(zDeleteEmployeeTime);
+                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:ZDeleteEmployeeTimeCreateRequest_sync>\n");
+                sb.append(xml);
+                sb.append("      </glob:ZDeleteEmployeeTimeCreateRequest_sync>\n" +
+                        "   </soapenv:Body>\n" +
+                        "</soapenv:Envelope>");
+                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();
-                    }
-                    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:ZDeleteEmployeeTimeCreateConfirmation_sync>"));
-                        result="<XMLDATA>"+result+"</XMLDATA>";
-                    }
-                    System.out.println(result);
-                    XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
-                    SapSyncLog sapSyncLog=new SapSyncLog();
-                    sapSyncLog.setCompanyId(user.getCompanyId());
-                    sapSyncLog.setRemark("日报数据取消推送");
-                    sapSyncLog.setSyncType("手动推送");
-                    sapSyncLog.setOperator(user.getJobNumber());
-                    sapSyncLog.setSyncTime(localDateTime);
-                    if(StringUtils.isEmpty(xmlResponseData.getZDeleteEmployeeTime())){
-                        log.error("推送取消考勤失败===》UUID:"+xmlRequestData.getZDeleteEmployeeTime().getEmployeeTimeUUID());
-                        sapSyncLog.setResult("推送取消考勤失败");
-                    }else {
-                        //删除推送记录
-                        sapSyncLog.setResult("推送取消考勤成功");
-                        reportPushLogService.remove(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getReportId,reportId));
-                    }
-                    sapSyncLogs.add(sapSyncLog);
+//                    }
+                } 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:ZDeleteEmployeeTimeCreateConfirmation_sync>"));
+                    result="<XMLDATA>"+result+"</XMLDATA>";
+                }
+                System.out.println(result);
+                XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+                SapSyncLog sapSyncLog=new SapSyncLog();
+                sapSyncLog.setCompanyId(user.getCompanyId());
+                sapSyncLog.setRemark("日报数据取消推送");
+                sapSyncLog.setSyncType("手动推送");
+                sapSyncLog.setOperator(user.getJobNumber());
+                sapSyncLog.setSyncTime(localDateTime);
+                if(StringUtils.isEmpty(xmlResponseData.getZDeleteEmployeeTime())){
+                    log.error("推送取消考勤失败===》UUID:"+xmlRequestData.getZDeleteEmployeeTime().getEmployeeTimeUUID());
+                    sapSyncLog.setResult("推送取消考勤失败");
+                }else {
+                    //删除推送记录
+                    sapSyncLog.setResult("推送取消考勤成功");
+                    reportPushLogService.remove(new LambdaQueryWrapper<ReportPushLog>().eq(ReportPushLog::getUuid,uuid));
+                }
+                sapSyncLogs.add(sapSyncLog);
             }
             if(sapSyncLogs.size()>0){
                 sapSyncLogService.saveBatch(sapSyncLogs);
@@ -8394,4 +8397,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         result.add(start);
         return result;
     }
+
+    @Override
+    public HttpRespMsg getHasPushForSap(String startDate, String endDate, String employeeID) {
+        HttpRespMsg msg=new HttpRespMsg();
+        XmlResponseData hasPushForSap = SyncSapUtils.getHasPushForSap(startDate, endDate, employeeID, isDev);
+        User user = userMapper.selectById(request.getHeader("token"));
+        Integer companyId = user.getCompanyId();
+        //是否要撤销相关数据
+        List<ActualEmployeeTime> actualEmployeeTimes = hasPushForSap.getActualEmployeeTimes();
+        List<String> allUuids = actualEmployeeTimes.stream().map(ActualEmployeeTime::getUUID).distinct().collect(Collectors.toList());
+        List<String> needUuidList=new ArrayList<>();
+        String uuids = allUuids.stream().map(n -> n).collect(Collectors.joining(","));
+        cancelReportPushSap(uuids,user);
+        msg.setData(actualEmployeeTimes);
+        return msg;
+    }
 }

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

@@ -267,6 +267,67 @@ public class SyncSapUtils {
     }
 
 
+    //同步SAP项目数据到工时管家
+    public static XmlResponseData getHasPushForSap(String startDate, String endDate,String employeeID,boolean isDev) {
+        //配置请求xml
+        XmlRequestData xmlRequestData=new XmlRequestData();
+        ProcessingConditions processingConditions=new ProcessingConditions();
+        processingConditions.setQueryHitsUnlimitedIndicator("true");
+        xmlRequestData.setProcessingConditions(processingConditions);
+        ActualEmployeeTimeSelectionByElements actualEmployeeTimeSelectionByElements=new ActualEmployeeTimeSelectionByElements();
+        if(!StringUtils.isEmpty(startDate)&&!StringUtils.isEmpty(endDate)){
+            SelectionByDate selectionByDate=new SelectionByDate();
+            selectionByDate.setInclusionExclusionCode("I");
+            selectionByDate.setIntervalBoundaryTypeCode("3");
+            selectionByDate.setLowerBoundaryDate(startDate);
+            selectionByDate.setUpperBoundaryDate(endDate);
+            actualEmployeeTimeSelectionByElements.setSelectionByDate(selectionByDate);
+        }
+        if (!StringUtils.isEmpty(employeeID)){
+            SelectionByEmployeeID selectionByEmployeeID=new SelectionByEmployeeID();
+            selectionByEmployeeID.setInclusionExclusionCode("I");
+            selectionByEmployeeID.setIntervalBoundaryTypeCode("1");
+            selectionByEmployeeID.setLowerBoundaryEmployeeID(employeeID);
+            actualEmployeeTimeSelectionByElements.setSelectionByEmployeeID(selectionByEmployeeID);
+        }
+        if(StringUtils.isEmpty(startDate)&&StringUtils.isEmpty(endDate)&&StringUtils.isEmpty(employeeID)){
+            return new XmlResponseData();
+        }
+        xmlRequestData.setActualEmployeeTimeSelectionByElements(actualEmployeeTimeSelectionByElements);
+        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:ActualEmployeeTimeByElementsQuery_sync>\n");
+        sb.append(xml);
+        sb.append("      </glob:ActualEmployeeTimeByElementsQuery_sync>\n" +
+                "   </soapenv:Body>\n" +
+                "</soapenv:Envelope>");
+        System.out.println(sb.toString());
+        String result = "";
+        try {
+            result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/queryemployeetimein?sap-vhost=my601432.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+//            if(isDev){
+//                result = WebServiceUtils.requestByXml("https://my602728.sapbyd.cn/sap/bc/srt/scs/sap/queryemployeetimein?sap-vhost=my602728.sapbyd.cn", sb.toString(), 0, "_BYDHOST", "Welcome1");
+//            }else {
+//                result = WebServiceUtils.requestByXml("https://my601432.sapbyd.cn/sap/bc/srt/scs/sap/queryemployeetimein?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:ActualEmployeeTimeByElementsResponse_sync>"));
+            result="<XMLDATA>"+result+"</XMLDATA>";
+        }
+        System.out.println(result);
+        XmlResponseData xmlResponseData = (XmlResponseData) CommonUtils.convertXmlStrToObject(XmlResponseData.class, result);
+        return xmlResponseData;
+    }
+
+
     //同步SAP项目服务数据到工时管家
     public static XmlResponseData syncServiceData(String startDate, String endDate, Integer companyId,boolean isDev) {
         //配置请求xml

+ 70 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/ActualEmployeeTime.java

@@ -0,0 +1,70 @@
+package com.management.platform.webservice.po;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlElement;
+
+@Data
+public class ActualEmployeeTime {
+
+    private String changeStateID;
+    private String UUID;
+    private String workAgreementID;
+    private String itemTypeCode;
+    private SapPeriod datePeriod;
+    private String duration;
+    private String lifeCycleStatusCode;
+    private String approvalStatusCode;
+    private String projectElementID;
+    private String serviceProductInternalID;
+
+    @XmlElement(name = "ChangeStateID")
+    public String getChangeStateID(){
+        return changeStateID;
+    }
+
+    @XmlElement(name = "UUID")
+    public String getUUID(){
+        return UUID;
+    }
+
+    @XmlElement(name = "WorkAgreementID")
+    public String getWorkAgreementID(){
+        return workAgreementID;
+    }
+
+    @XmlElement(name = "ItemTypeCode")
+    public String getItemTypeCode(){
+        return itemTypeCode;
+    }
+
+    @XmlElement(name = "DatePeriod")
+    public SapPeriod getDatePeriod(){
+        return datePeriod;
+    }
+
+    @XmlElement(name = "Duration")
+    public String getDuration() {
+        return duration;
+    }
+
+    @XmlElement(name = "LifeCycleStatusCode")
+    public String getLifeCycleStatusCode(){
+        return lifeCycleStatusCode;
+    }
+
+    @XmlElement(name = "ApprovalStatusCode")
+    public String getApprovalStatusCode(){
+        return approvalStatusCode;
+    }
+
+    @XmlElement(name = "ProjectElementID")
+    public String getProjectElementID(){
+        return projectElementID;
+    }
+
+    @XmlElement(name = "ServiceProductInternalID")
+    public String getServiceProductInternalID(){
+        return serviceProductInternalID;
+    }
+}

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

@@ -0,0 +1,22 @@
+package com.management.platform.webservice.po;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlElement;
+
+@Data
+public class ActualEmployeeTimeSelectionByElements {
+    private SelectionByEmployeeID selectionByEmployeeID;
+    private SelectionByDate selectionByDate;
+
+    @XmlElement(name = "SelectionByEmployeeID")
+    public SelectionByEmployeeID getSelectionByEmployeeID() {
+        return selectionByEmployeeID;
+    }
+
+
+    @XmlElement(name = "SelectionByDate")
+    public SelectionByDate getSelectionByDate() {
+        return selectionByDate;
+    }
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/ProcessingConditions.java

@@ -10,6 +10,7 @@ public class ProcessingConditions {
     private String queryHitsUnlimitedIndicator;
     private String returnedQueryHitsNumberValue;
     private String queryHitsMaximumNumberValue;
+    private String moreHitsAvailableIndicator;
 
     @XmlElement(name = "QueryHitsUnlimitedIndicator")
     public String getQueryHitsUnlimitedIndicator() {
@@ -27,4 +28,10 @@ public class ProcessingConditions {
         return returnedQueryHitsNumberValue;
     }
 
+    //返回的项目条数
+    @XmlElement(name = "MoreHitsAvailableIndicator")
+    public String getMoreHitsAvailableIndicator() {
+        return moreHitsAvailableIndicator;
+    }
+
 }

+ 33 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/SelectionByDate.java

@@ -0,0 +1,33 @@
+package com.management.platform.webservice.po;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlElement;
+
+@Data
+public class SelectionByDate {
+    private String inclusionExclusionCode;
+    private String intervalBoundaryTypeCode;
+    private String lowerBoundaryDate;
+    private String upperBoundaryDate;
+
+    @XmlElement(name = "InclusionExclusionCode")
+    public String getInclusionExclusionCode() {
+        return inclusionExclusionCode;
+    }
+
+    @XmlElement(name = "IntervalBoundaryTypeCode")
+    public String getIntervalBoundaryTypeCode() {
+        return intervalBoundaryTypeCode;
+    }
+
+    @XmlElement(name = "LowerBoundaryDate")
+    public String getLowerBoundaryDate() {
+        return lowerBoundaryDate;
+    }
+
+    @XmlElement(name = "UpperBoundaryDate")
+    public String getUpperBoundaryDate() {
+        return upperBoundaryDate;
+    }
+}

+ 29 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/webservice/po/SelectionByEmployeeID.java

@@ -0,0 +1,29 @@
+package com.management.platform.webservice.po;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlElement;
+
+@Data
+public class SelectionByEmployeeID {
+
+    private String inclusionExclusionCode;
+    private String intervalBoundaryTypeCode;
+    private String lowerBoundaryEmployeeID;
+
+    @XmlElement(name = "InclusionExclusionCode")
+    public String getInclusionExclusionCode() {
+        return inclusionExclusionCode;
+    }
+
+    @XmlElement(name = "IntervalBoundaryTypeCode")
+    public String getIntervalBoundaryTypeCode() {
+        return intervalBoundaryTypeCode;
+    }
+
+    @XmlElement(name = "LowerBoundaryEmployeeID")
+    public String getLowerBoundaryEmployeeID() {
+        return lowerBoundaryEmployeeID;
+    }
+
+}

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

@@ -21,6 +21,7 @@ public class XmlRequestData {
 	private EmployeeTime employeeTime;
 	private String basicMessageHeader;
 	private ZDeleteEmployeeTime zDeleteEmployeeTime;
+	private ActualEmployeeTimeSelectionByElements actualEmployeeTimeSelectionByElements;
 
 	@XmlElement(name = "ProcessingConditions")
 	public ProcessingConditions getProcessingConditions() {
@@ -57,4 +58,9 @@ public class XmlRequestData {
 		return zDeleteEmployeeTime;
 	}
 
+	@XmlElement(name = "ActualEmployeeTimeSelectionByElements")
+	public ActualEmployeeTimeSelectionByElements getActualEmployeeTimeSelectionByElements() {
+		return actualEmployeeTimeSelectionByElements;
+	}
+
 }

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

@@ -25,6 +25,7 @@ public class XmlResponseData{
 
 	private EmployeeTime employeeTime;
 	private ZDeleteEmployeeTime zDeleteEmployeeTime;
+	private List<ActualEmployeeTime> actualEmployeeTimes;
 
 	
 	@XmlElement(name = "ServiceProduct")
@@ -62,4 +63,9 @@ public class XmlResponseData{
 		return zDeleteEmployeeTime;
 	}
 
+	@XmlElement(name = "ActualEmployeeTime")
+	public List<ActualEmployeeTime> getActualEmployeeTimes() {
+		return actualEmployeeTimes;
+	}
+
 }

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

@@ -552,8 +552,7 @@
             or (a.is_dept_audit = 1 and a.audit_dept_managerid = #{auditorId}))
         </if>
         <if test="auditUserId != null and auditUserId !=''">
-            AND ((a.is_dept_audit = 0 and a.project_auditor_id = #{auditUserId} and a.project_audit_state = 0)
-            or (a.is_dept_audit = 1 and a.audit_dept_managerid = #{auditUserId}))
+            AND FIND_IN_SET(auditUserId,a.executor_id)
         </if>
         <if test="isEngeering == 1">
             AND a.department_audit_state = 1

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

@@ -292,7 +292,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         }
         if(plan.getProductId()!=null){
             Product product = productMapper.selectById(plan.getProductId());
-            List<Plan> plans = planMapper.selectList(new LambdaQueryWrapper<Plan>().select(Plan::getNum));
+            List<Plan> plans = planMapper.selectList(new LambdaQueryWrapper<Plan>().select(Plan::getNum).eq(Plan::getProductId,product.getId()));
             double sum = plans.stream().mapToDouble(Plan::getNum).sum();
             BigDecimal decimal = new BigDecimal(sum);
             decimal=decimal.add(new BigDecimal(plan.getNum())).setScale(2,BigDecimal.ROUND_HALF_UP);
@@ -307,6 +307,10 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             plan.setTaskTypeName(taskType.getTaskTypeName());
         }
         List<ProdProcedure> procedureList = prodProcedureMapper.selectList(new QueryWrapper<ProdProcedure>().eq("company_id", companyId).eq("product_id",plan.getProductId()).orderByDesc("id"));
+        if(procedureList.size()<=0){
+            msg.setError("当前产品工序配置未完成,请先完成工序配置");
+            return msg;
+        }
         List<PlanProcedureTotal> planProcedureTotals=new ArrayList<>();
         List<PlanProcedureTotal> oldPlanProcedureTotals=new ArrayList<>();
         List<ProdProcedure> list;
@@ -803,7 +807,12 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             }
             planSteelStampNumberService.saveBatch(allPlanSteelStampNumberList);
             if(needInsertList.size()>0){
+                List<Integer> productIds = needInsertList.stream().map(Plan::getProductId).collect(Collectors.toList());
+                List<Product> products = productMapper.selectList(new LambdaQueryWrapper<Product>().in(Product::getId, productIds));
+                List<Plan> planList = planMapper.selectList(new LambdaQueryWrapper<Plan>().in(Plan::getProductId, productIds));
                 List<PlanProcedureTotal> planProcedureTotals=new ArrayList<>();
+                StringBuilder sb=new StringBuilder();
+                List<Plan> lastPlanList=new ArrayList<>();
                 for (Plan plan : needInsertList) {
                     if(plan.getPlanType()==0){
                         //处理工序  获取当前产品最新版本的工序的版本号
@@ -811,6 +820,26 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                         if(procedureList!=null&&procedureList.size()>0){
                             String versionNumber = procedureList.get(0).getVersionNumber();
                             plan.setVersionNumber(versionNumber);
+                        }else {
+                            if(StringUtils.isEmpty(sb.toString())){
+                                sb.append(plan.getProductName());
+                            }else {
+                                sb.append(","+plan.getProductName());
+                            }
+                            continue;
+                        }
+                        Product product = products.stream().filter(p->p.getId().equals(plan.getProductId())).findFirst().get();
+                        List<Plan> plans = planList.stream().filter(p->p.getProductId().equals(plan.getProductId())).collect(Collectors.toList());
+                        List<Plan> importPlan = needInsertList.stream().filter(n -> n.getProductId().equals(plan.getProductId())).collect(Collectors.toList());
+                        plans.addAll(importPlan);
+                        //要减去当前这个计划的数量
+                        double allSum = plans.stream().mapToDouble(Plan::getNum).sum();
+                        BigDecimal decimal = new BigDecimal(allSum);
+                        decimal=decimal.subtract(new BigDecimal(plan.getNum()));
+                        decimal=decimal.add(new BigDecimal(plan.getNum())).setScale(2,BigDecimal.ROUND_HALF_UP);
+                        if(decimal.doubleValue()>product.getOrderNumber()){
+                            msg.setError("创建失败,该产品下的排产计划总数量大于当前产品下的订单数量");
+                            return msg;
                         }
                         List<ProdProcedure> list = procedureList.stream().filter(pl -> pl.getVersionNumber().equals(procedureList.get(0).getVersionNumber())).collect(Collectors.toList());
                         list=list.stream().sorted(Comparator.comparing(ProdProcedure::getId)).collect(Collectors.toList());
@@ -840,9 +869,13 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                         p.setTotalWorkingHours(plan.getPlanWorkHour());
                         planProcedureTotals.add(p);
                     }
+                    lastPlanList.add(plan);
                 }
                 planProcedureTotalService.saveBatch(planProcedureTotals);
-                saveOrUpdateBatch(needInsertList);
+                if(lastPlanList.size()>0){
+                    saveOrUpdateBatch(lastPlanList);
+                };
+                msg.setData("导入成功,其中产品["+sb.toString()+"]产品工序未完成,请完成工序配置");
             }
         } catch (IOException e) {
             e.printStackTrace();

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4132,7 +4132,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Override
     public HttpRespMsg getPersonWorkHoursWagesDetail(String date, String userId,String startDate,String endDate,Integer checkStatus,Integer detailStatus) {
         User user = userMapper.selectById(request.getHeader("token"));
-        if(checkStatus!=null&&StringUtils.isEmpty(userId)){
+        if(checkStatus!=null&&checkStatus==0&&StringUtils.isEmpty(userId)){
             userId=user.getId();
         }
         List<Map<String,Object>> mapList=reportMapper.getPersonWorkHoursWagesDetail(date,userId,user.getCompanyId(),startDate,endDate,checkStatus,detailStatus);

+ 4 - 4
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/Home.vue

@@ -990,7 +990,7 @@
                 }
             }
             .logo-width {
-                width: 200px;
+                width: 160px;
             }
             .logo-collapse-width {
                 width: 60px;
@@ -1036,8 +1036,8 @@
                 width: 60px;
             }
             .menu-expanded {
-                flex: 0 0 200px;
-                width: 200px;
+                flex: 0 0 160px;
+                width: 160px;
             }
             .content-container {
                 flex: 1;
@@ -1047,7 +1047,7 @@
                 // position: relative;
                 .breadcrumb-container {
                     .title {
-                        width: 200px;
+                        width: 160px;
                         float: left;
                         color: #475669;
                     }

+ 4 - 4
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -60,21 +60,21 @@
         </el-table-column>
         <el-table-column prop="projectCode" label="项目代码" width="180">
         </el-table-column>
-        <el-table-column prop="num" label="数量" width="180"> </el-table-column>
+        <el-table-column prop="num" label="数量" width="100"> </el-table-column>
         <el-table-column prop="mainProcess" label="主工序" width="180">
         </el-table-column>
         <el-table-column prop="stationName" label="工位名称" width="180">
         </el-table-column>
-        <el-table-column prop="foremanName" label="工长" width="180">
+        <el-table-column prop="foremanName" label="工长" width="140">
           <template slot-scope="scope">
             <div @click="getFormenDetail(scope.row)" class="colorText">
               {{ scope.row.foremanName }}
             </div>
           </template>
         </el-table-column>
-        <el-table-column prop="startDate" label="开工时间" width="180">
+        <el-table-column prop="startDate" label="开工时间" width="140">
         </el-table-column>
-        <el-table-column prop="endDate" label="完工时间" width="180">
+        <el-table-column prop="endDate" label="完工时间" width="140">
         </el-table-column>
         <el-table-column label="操作" :fixed="'right'">
           <template slot-scope="scope">

+ 29 - 33
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue

@@ -1,8 +1,8 @@
 <template>
   <section>
     <div style=" display: flex;">
-    <div ref="sidebars" style="width: 200px;display: block;background: #fff;border-right: 1px solid #E6E6E6;">
-      <div ref="abbisd" style="width: 200px;overflow: hidden;">
+    <div ref="sidebars" style="width: 180px;display: block;background: #fff;border-right: 1px solid #E6E6E6;">
+      <div ref="abbisd" style="width: 180px;overflow: hidden;">
           <el-col :span="12">
             <el-menu
               :default-active="defaultActive"
@@ -11,7 +11,7 @@
               background-color="#ffffff" 
               text-color="#666666"
               active-text-color="#20A0FF"
-              style="width:200px">
+              style="width:180px">
               <el-submenu index="1">
                 <template slot="title">
                   <i class="iconfont firerock-iconbaobiao"></i>
@@ -28,7 +28,7 @@
               </el-menu>
           </el-col>
       </div>
-      <div class="side" @click="side" ref="sid" style="left: 400px">
+      <div class="side" @click="side" ref="sid" style="left: 340px">
         <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
       </div>
     </div>
@@ -112,13 +112,13 @@
                 </el-table-column>
                 <el-table-column align="center" prop="procedureName" label="工序" min-width="250"></el-table-column>
                 <!-- <el-table-column align="center" prop="userName" label="人员" min-width="150"></el-table-column> -->
-                <el-table-column align="center" prop="planWorkTime" label="计划工时" min-width="250">
+                <el-table-column align="center" prop="planWorkTime" label="计划工时" width="150">
                   <template slot-scope="scope" v-if="scope.row.planWorkTime">{{scope.row.planWorkTime}}分钟</template>
                 </el-table-column>
-                <el-table-column align="center" prop="nowWorkTime" label="当前工时" min-width="250">
+                <el-table-column align="center" prop="nowWorkTime" label="当前工时" width="150">
                   <template slot-scope="scope" v-if="scope.row.nowWorkTime">{{scope.row.nowWorkTime}}分钟</template>
                 </el-table-column>
-                <el-table-column align="center" prop="progress" label="进度" min-width="250">
+                <el-table-column align="center" prop="progress" label="进度" width="150">
                   <template slot-scope="scope" v-if="scope.row.progress">
                     {{scope.row.progress}}%
                   </template>
@@ -132,45 +132,45 @@
                 </el-table-column>
                 <el-table-column align="center" prop="productName" label="产品名称" min-width="250"></el-table-column>
                 <el-table-column align="center" prop="foremanName" label="工长" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="startDate" label="开工时间" min-width="250"></el-table-column>
-                <el-table-column align="center" prop="endDate" label="完工时间" min-width="250"></el-table-column>
+                <el-table-column align="center" prop="startDate" label="开工时间" width="150"></el-table-column>
+                <el-table-column align="center" prop="endDate" label="完工时间" width="150"></el-table-column>
                 <el-table-column align="center" prop="procedureName" label="工序" min-width="250"></el-table-column>
-                <el-table-column align="center" prop="creatorName" label="组员" min-width="250"></el-table-column>
-                <el-table-column align="center" prop="createDate" label="报工时间" min-width="250"></el-table-column>
-                <el-table-column align="center" prop="checkName" label="质检人" min-width="250">
+                <el-table-column align="center" prop="creatorName" label="组员" width="150"></el-table-column>
+                <el-table-column align="center" prop="createDate" label="报工时间" width="150"></el-table-column>
+                <el-table-column align="center" prop="checkName" label="质检人" width="150">
                   <template slot-scope="scope">{{scope.row.checkName}}</template>
                 </el-table-column>
             </el-table>
 
             <!-- 计划实时进度表 -->
             <el-table v-if="ins == 3"  key="4" border :data="planRealTimeProgressList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;">
-                <el-table-column align="center" prop="taskName" label="排产工单号" min-width="150">
+                <el-table-column align="center" prop="taskName" label="排产工单号" min-width="250">
                   <template slot-scope="scope">{{scope.row.taskName}}</template>
                 </el-table-column>
-                <el-table-column align="center" prop="userName" label="工长" min-width="250"></el-table-column>
-                <el-table-column align="center" prop="planNum" label="计划件数" min-width="150">
+                <el-table-column align="center" prop="userName" label="工长" width="150"></el-table-column>
+                <el-table-column align="center" prop="planNum" label="计划件数" width="100">
                   <template slot-scope="scope">{{scope.row.planNum}}</template>
                 </el-table-column>
                 <el-table-column align="center" prop="productName" label="产品名称" min-width="150">
                   <template slot-scope="scope">{{scope.row.productName}}</template>
                 </el-table-column>
-                <el-table-column align="center" prop="startDate" label="开始日期" min-width="150">
+                <el-table-column align="center" prop="startDate" label="开始日期" width="150">
                   <template slot-scope="scope">{{scope.row.startDate}}</template>
                 </el-table-column>
-                <el-table-column align="center" prop="endDate" label="完工日期" min-width="150">
+                <el-table-column align="center" prop="endDate" label="完工日期" width="150">
                   <template slot-scope="scope">{{scope.row.endDate}}</template>
                 </el-table-column>
-                <el-table-column align="center" prop="statinoName" label="工位" min-width="250"></el-table-column>
-                <el-table-column align="center"  label="计划工时" min-width="150">
+                <el-table-column align="center" prop="statinoName" label="工位" width="150"></el-table-column>
+                <el-table-column align="center"  label="计划工时" min-width="190">
                   <template slot-scope="scope" v-if="scope.row.planWorkTime">{{scope.row.planWorkTime}}分钟 {{scope.row.planCost}}元</template>
                 </el-table-column>
-                <el-table-column align="center"  label="当前工时" min-width="250">
+                <el-table-column align="center"  label="当前工时" min-width="190">
                   <template slot-scope="scope" v-if="scope.row.nowWorkTime">{{scope.row.nowWorkTime}}分钟 {{scope.row.nowCost}}元</template>
                 </el-table-column>
                 <el-table-column align="center"  label="实际完工日期" min-width="150">
                   <template slot-scope="scope" v-if="scope.row.realEndDate">{{scope.row.realEndDate}}</template>
                 </el-table-column>
-                <el-table-column align="center"  label="进度" min-width="250">
+                <el-table-column align="center"  label="进度" min-width="150">
                   <template slot-scope="scope" v-if="scope.row.progress">{{scope.row.progress}}</template>
                 </el-table-column>
             </el-table>
@@ -1428,24 +1428,20 @@ export default {
     side() {
       if(this.$refs.side.style.left < '1px') {
         this.$refs.sidebars.style.width = '1px'
-        this.$refs.sid.style.left = '201px'
+        this.$refs.sid.style.left = '161px'
         this.$refs.side.style.left = '1px'
         this.$refs.sideI.className = 'el-icon-arrow-right'
-        // this.$refs.staff.style.margin = '5px 0px 0px 5px'
-        // this.$refs.staff.style.width = '100%'
         this.$refs.headHe.style.paddingLeft = '10px'
-        this.$refs.headine.style.width = (this.windowWidth - 200)+'px'
-        this.$refs.tabless.style.width = (this.windowWidth - 200)+'px'
+        this.$refs.headine.style.width = (this.windowWidth - 180)+'px'
+        this.$refs.tabless.style.width = (this.windowWidth - 180)+'px'
       } else {
-        this.$refs.sidebars.style.width = '200px'
-        this.$refs.sid.style.left = '400px'
+        this.$refs.sidebars.style.width = '180px'
+        this.$refs.sid.style.left = '340px'
         this.$refs.side.style.left = '-19px'
         this.$refs.sideI.className = 'el-icon-arrow-left'
-        // this.$refs.staff.style.margin = '5px 0px 0px 10px'
-        // this.$refs.staff.style.width = '98%'
         this.$refs.headHe.style.paddingLeft = '10px'
-        this.$refs.headine.style.width = (this.windowWidth - 400)+'px'
-        this.$refs.tabless.style.width = (this.windowWidth - 400)+'px'
+        this.$refs.headine.style.width = (this.windowWidth - 340)+'px'
+        this.$refs.tabless.style.width = (this.windowWidth - 340)+'px'
       }
     },
     picks() {
@@ -1669,7 +1665,7 @@ export default {
 /* 侧边栏收索 */
 .side {
   position: absolute;
-  z-index: 2;
+  z-index: 5;
   border-right: 2px solid #DDDDDD;
   height: 100%;
   top: 0;

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

@@ -296,7 +296,7 @@
 
                 <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'small'" :widthStr="'120'" :distinction="'2'"
                   :clearable="true" :subject="users" :disabled="!permissions.costAudit" :subjectId="ownerId"
-                  ref="selectCat" @selectCal="selectCal"></selectCat>
+                  ref="selectCat" @selectCal="selectCal" :filterable="true"></selectCat>
               </el-form-item>
               <!-- 单据编号 -->
               <el-form-item :label="$t('receiptnumber')">
@@ -323,7 +323,7 @@
               <!-- 填报日期 -->
               <div style="display: inline-block;">
                 <el-form-item :label="'项目'">
-                  <el-select v-model="selectProject" size="small" style="width: 162px" clearable>
+                  <el-select v-model="selectProject" size="small" style="width: 162px" clearable filterable>
                     <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>

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

@@ -345,6 +345,9 @@
 
         <!-- 工时推送日志弹窗 -->
         <el-dialog title="工时推送日志" :visible.sync="pushWorkTimeLogDig"  width="70%" :before-close="handleClose">
+              <template>
+                <el-button type="primary" size="small" style="float: right" @click="exportPushLog">导出</el-button>
+              </template>  
               <template>
                 <el-table :data="pushWorkTimeLogData" style="width: 100%" height="500" >
                     <el-table-column prop="syncTime" label="推送时间" width="150"></el-table-column>
@@ -4750,6 +4753,31 @@
                     this.fillList = this.getUserMembListFromDeptList(list, 1)
                 } 
             },
+                  exportPushLog(){
+        this.http.post('/sap-sync-log/export',{},
+            res => {
+                if (res.code == "ok") {
+                    var filePath = res.data;
+                    var fName = '推送日志.xlsx'
+                    const a = document.createElement('a'); // 创建a标签
+                    a.setAttribute('download', fName);// download属性
+                    a.setAttribute('href', filePath);// href链接
+                    a.click(); //自执行点击事件
+                    a.remove();
+                } else {
+                    this.$message({
+                    message: res.msg,
+                    type: "error"
+                    });
+                }
+            },
+            error => {
+                this.$message({
+                    message: error,
+                    type: "error"
+                });
+            });
+      },
             theValues(id, item) {
                 for(var i in item) {
                     if(item[i].id == id) {