|
@@ -14140,6 +14140,166 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getWorkOrderNumStatistics(Integer pageIndex, Integer pageSize, String startDate, String endDate, HttpServletRequest request) {
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
|
|
|
+ CompanyDingding dingding = companyDingdingMapper.selectOne(new QueryWrapper<CompanyDingding>().eq("company_id", user.getCompanyId()));
|
|
|
+ List<ProjectMain> projectMainList= projectMainMapper.selectList(new QueryWrapper<ProjectMain>().eq("company_id",4215).isNotNull("work_order_num_type").orderByAsc("work_order_num_type"));
|
|
|
+ //包令号类型 0主飞控,1自动飞行,2高升力
|
|
|
+ List<ProjectMain> typeCollect0 = projectMainList.stream().filter(m -> m.getWorkOrderNumType() == 0).collect(Collectors.toList());
|
|
|
+ List<ProjectMain> typeCollect1 = projectMainList.stream().filter(m -> m.getWorkOrderNumType() == 1).collect(Collectors.toList());
|
|
|
+ List<ProjectMain> typeCollect2 = projectMainList.stream().filter(m -> m.getWorkOrderNumType() == 2).collect(Collectors.toList());
|
|
|
+ List<String> typeNum0= typeCollect0.stream().map(ProjectMain::getWorkOrderNum).collect(Collectors.toList());
|
|
|
+ List<String> typeNum1= typeCollect1.stream().map(ProjectMain::getWorkOrderNum).collect(Collectors.toList());
|
|
|
+ List<String> typeNum2= typeCollect2.stream().map(ProjectMain::getWorkOrderNum).collect(Collectors.toList());
|
|
|
+ LinkedHashMap<String, Object> totalMap = new LinkedHashMap<>();
|
|
|
+ totalMap.put("totalRow",projectMainList.size());//总列数
|
|
|
+ totalMap.put("mainFly",typeCollect0.size());
|
|
|
+ totalMap.put("mainFlyNumStrs",typeNum0);//主飞控包令号列表
|
|
|
+ totalMap.put("auto",typeCollect1.size());
|
|
|
+ totalMap.put("autoNumStrs",typeNum1);//自动
|
|
|
+ totalMap.put("high",typeCollect2.size());
|
|
|
+ totalMap.put("highNumStrs",typeNum2);//高升力包令号列表
|
|
|
+
|
|
|
+ List<WorkOrderNumVo> list= projectMapper.getWorkOrderNumStatistics(null,null,startDate,endDate);
|
|
|
+ Map<String, List<WorkOrderNumVo>> userCollect = list.stream().collect(Collectors.groupingBy(WorkOrderNumVo::getUserId));
|
|
|
+ Set<Map.Entry<String, List<WorkOrderNumVo>>> entries = userCollect.entrySet();
|
|
|
+
|
|
|
+ ArrayList<ArrayList<String>> dataList = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, List<WorkOrderNumVo>> entry : entries) {
|
|
|
+ List<WorkOrderNumVo> voList = entry.getValue();
|
|
|
+ double total = voList.stream()
|
|
|
+ .mapToDouble(v -> v.getSumWorkTime()) // 转为 DoubleStream
|
|
|
+ .reduce(0.0, Double::sum);
|
|
|
+ ArrayList<String> numString = new ArrayList<>();
|
|
|
+ numString.add(voList.get(0).getRoleName());
|
|
|
+ numString.add(voList.get(0).getUserName());
|
|
|
+ for (String s : typeNum0) {
|
|
|
+ Optional<WorkOrderNumVo> first = voList.stream().filter(v -> v.getWorkOrderNum().equals(s)).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ numString.add(first.get().getSumWorkTime().toString());
|
|
|
+ }else {
|
|
|
+ numString.add("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String s : typeNum1) {
|
|
|
+ Optional<WorkOrderNumVo> first = voList.stream().filter(v -> v.getWorkOrderNum().equals(s)).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ numString.add(first.get().getSumWorkTime().toString());
|
|
|
+ }else {
|
|
|
+ numString.add("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String s : typeNum2) {
|
|
|
+ Optional<WorkOrderNumVo> first = voList.stream().filter(v -> v.getWorkOrderNum().equals(s)).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ numString.add(first.get().getSumWorkTime().toString());
|
|
|
+ }else {
|
|
|
+ numString.add("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ numString.add(total+"");//合计
|
|
|
+ dataList.add(numString);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 内存分页处理
|
|
|
+ int totalCount = dataList.size();
|
|
|
+ if (pageIndex != null && pageSize != null) {
|
|
|
+ // 确保 pageIndex ≥ 1
|
|
|
+ int safePageIndex = Math.max(1, pageIndex);
|
|
|
+ int fromIndex = (safePageIndex - 1) * pageSize;
|
|
|
+ int toIndex = Math.min(fromIndex + pageSize, totalCount);
|
|
|
+
|
|
|
+ if (fromIndex < totalCount) {
|
|
|
+ dataList = new ArrayList<>(dataList.subList(fromIndex, toIndex));
|
|
|
+ } else {
|
|
|
+ dataList = new ArrayList<>(); // 超出范围,返回空列表
|
|
|
+ }
|
|
|
+ }
|
|
|
+ totalMap.put("dataList",dataList);
|
|
|
+ totalMap.put("totalCount", totalCount);
|
|
|
+ httpRespMsg.setData(totalMap);
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg exportWorkOrderNumStatistics(String startDate, String endDate, HttpServletRequest request) throws Exception {
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
|
|
|
+ CompanyDingding dingding = companyDingdingMapper.selectOne(new QueryWrapper<CompanyDingding>().eq("company_id", user.getCompanyId()));
|
|
|
+ List<ProjectMain> projectMainList= projectMainMapper.selectList(new QueryWrapper<ProjectMain>().eq("company_id",4215).isNotNull("work_order_num_type").orderByAsc("work_order_num_type"));
|
|
|
+ List<WorkOrderNumVo> list= projectMapper.getWorkOrderNumStatistics(null,null,startDate,endDate);
|
|
|
+ Map<String, List<WorkOrderNumVo>> userCollect = list.stream().collect(Collectors.groupingBy(WorkOrderNumVo::getUserId));
|
|
|
+ Set<Map.Entry<String, List<WorkOrderNumVo>>> entries = userCollect.entrySet();
|
|
|
+
|
|
|
+ //包令号类型 0主飞控,1自动飞行,2高升力
|
|
|
+ List<ProjectMain> typeCollect0 = projectMainList.stream().filter(m -> m.getWorkOrderNumType() == 0).collect(Collectors.toList());
|
|
|
+ List<ProjectMain> typeCollect1 = projectMainList.stream().filter(m -> m.getWorkOrderNumType() == 1).collect(Collectors.toList());
|
|
|
+ List<ProjectMain> typeCollect2 = projectMainList.stream().filter(m -> m.getWorkOrderNumType() == 2).collect(Collectors.toList());
|
|
|
+ List<String> typeNum0= typeCollect0.stream().map(ProjectMain::getWorkOrderNum).collect(Collectors.toList());
|
|
|
+ List<String> typeNum1= typeCollect1.stream().map(ProjectMain::getWorkOrderNum).collect(Collectors.toList());
|
|
|
+ List<String> typeNum2= typeCollect2.stream().map(ProjectMain::getWorkOrderNum).collect(Collectors.toList());
|
|
|
+
|
|
|
+ LinkedHashMap<String, Object> totalMap = new LinkedHashMap<>();
|
|
|
+ totalMap.put("totalRow",projectMainList.size());//总列数
|
|
|
+ totalMap.put("mainFly",typeCollect0.size());
|
|
|
+ totalMap.put("mainFlyNumStrs",typeNum0);//主飞控包令号列表
|
|
|
+ totalMap.put("auto",typeCollect1.size());
|
|
|
+ totalMap.put("autoNumStrs",typeNum1);//自动
|
|
|
+ totalMap.put("high",typeCollect2.size());
|
|
|
+ totalMap.put("highNumStrs",typeNum2);//高升力包令号列表
|
|
|
+
|
|
|
+ ArrayList<ArrayList<String>> dataList = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, List<WorkOrderNumVo>> entry : entries) {
|
|
|
+ List<WorkOrderNumVo> voList = entry.getValue();
|
|
|
+ double total = voList.stream()
|
|
|
+ .mapToDouble(v -> v.getSumWorkTime()) // 转为 DoubleStream
|
|
|
+ .reduce(0.0, Double::sum);
|
|
|
+ ArrayList<String> numString = new ArrayList<>();
|
|
|
+ numString.add(voList.get(0).getRoleName());
|
|
|
+
|
|
|
+ //转义
|
|
|
+ if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
+ numString.add("$userName="+(voList.get(0).getCorpwxUserid()==null?" ":voList.get(0).getCorpwxUserid())+"$");
|
|
|
+ }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
|
|
|
+ numString.add("$userName="+(voList.get(0).getDingdingUserid()==null?" ":voList.get(0).getDingdingUserid())+"$");
|
|
|
+ }else {
|
|
|
+ numString.add(voList.get(0).getUserName());
|
|
|
+ }
|
|
|
+
|
|
|
+ for (String s : typeNum0) {
|
|
|
+ Optional<WorkOrderNumVo> first = voList.stream().filter(v -> v.getWorkOrderNum().equals(s)).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ numString.add(first.get().getSumWorkTime().toString());
|
|
|
+ }else {
|
|
|
+ numString.add("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String s : typeNum1) {
|
|
|
+ Optional<WorkOrderNumVo> first = voList.stream().filter(v -> v.getWorkOrderNum().equals(s)).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ numString.add(first.get().getSumWorkTime().toString());
|
|
|
+ }else {
|
|
|
+ numString.add("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String s : typeNum2) {
|
|
|
+ Optional<WorkOrderNumVo> first = voList.stream().filter(v -> v.getWorkOrderNum().equals(s)).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ numString.add(first.get().getSumWorkTime().toString());
|
|
|
+ }else {
|
|
|
+ numString.add("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ numString.add(total+"");//合计
|
|
|
+ dataList.add(numString);
|
|
|
+ }
|
|
|
+ totalMap.put("dataList", dataList);
|
|
|
+ return excelExportService.exportShanghaiHangKongList(wxCorpInfo,dingding,"工作包令号_主项目个人工时统计表",totalMap,path);
|
|
|
+ }
|
|
|
+
|
|
|
//导出FTE报表数据
|
|
|
@Override
|
|
|
public HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area,Integer departmentId,HttpServletRequest request) {
|