Min 1 рік тому
батько
коміт
0e940fa0ea

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -2309,11 +2309,17 @@ public class ReportController {
     }
 
 
-    //推送工时管家工时考勤数据到SAP
+    //todo:推送工时管家工时考勤数据到SAP
     @RequestMapping("/pushProjectReportToSap")
     public HttpRespMsg pushProjectReportToSap(String startDate,String endDate,String userId){
         return reportService.pushProjectReportToSap(startDate,endDate,userId);
     }
 
+    //todo: 提供接口(威派格) 获取项目工时数据
+    @RequestMapping("/getProjectTimeCostByThird")
+    public HttpRespMsg getProjectTimeCostByThird(@RequestBody String json){
+        return reportService.geProjectTimeCostByThird(json);
+    }
+
 }
 

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

@@ -191,4 +191,10 @@ public interface ReportMapper extends BaseMapper<Report> {
     List<Map<String, Object>> getProjectPlanData(Integer companyId, String startDate, String endDate);
 
     List<String> getUserIds(ArrayList<Integer> deptIds, String startDate, String endDate);
+
+    List<Map<String, Object>> getProjectTimeCost(Integer companyId,@Param("list") List<Integer> projectMainIds);
+
+    List<Map<String, Object>> getProjectMainTimeCost(Integer companyId,String requestProjectMainCode);
+
+    List<Map<String, Object>> getTaskGroupPlanTime(@Param("list") List<Integer> projectIds);
 }

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

@@ -135,4 +135,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg pushProjectReportToSap(String startDate, String endDate,String userId);
 
     HttpRespMsg getReportById(Integer reportId, HttpServletRequest request);
+
+    HttpRespMsg geProjectTimeCostByThird(String json);
 }

+ 72 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -194,6 +194,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     private DepartmentOtherManagerMapper departmentOtherManagerMapper;
     @Resource
     private ExcelExportService excelExportService;
+    @Resource
+    private ProjectMainMapper projectMainMapper;
     @Autowired
     RestTemplate restTemplate;
 
@@ -7493,4 +7495,74 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
         }
     }
+
+    @Override
+    public HttpRespMsg geProjectTimeCostByThird(String json) {
+        HttpRespMsg msg=new HttpRespMsg();
+        JSONObject requestData = JSONObject.parseObject(json);
+        if(requestData.get("header")==null){
+            msg.setError("Request Parameter Parsing Error,Unable to find 'header'");
+            return msg;
+        }
+        JSONObject requestHeader = JSONObject.parseObject(String.valueOf(requestData.get("header")));
+        if(requestData.get("projectQuery")==null){
+            msg.setError("Request Parameter Parsing Error,Unable to find 'projectQuery'");
+            return msg;
+        }
+        JSONObject requestProjectQuery = JSONObject.parseObject(String.valueOf(requestData.get("projectQuery")));
+        if(requestHeader.get("token")==null){
+            msg.setError("Request Parameter Parsing Error,Unable to find 'token'");
+            return msg;
+        }
+        String requestToken = String.valueOf(requestHeader.get("token"));
+        List<ThirdPartyInterface> thirdPartyInterfaces = thirdPartyInterfaceMapper.selectList(new QueryWrapper<ThirdPartyInterface>().eq("token", requestToken));
+        if(thirdPartyInterfaces.size()<=0){
+            msg.setError("Validation failed,'token' is Error");
+            return msg;
+        }
+        if(LocalDateTime.now().isAfter(thirdPartyInterfaces.get(0).getExpireTime())){
+            msg.setError("'token' is Expire");
+            return msg;
+        }
+        if(requestProjectQuery.get("projectMainCode")==null){
+            msg.setError("Request Parameter Parsing Error,Unable to find 'projectMainCode'");
+            return msg;
+        }
+        String requestProjectMainCode = String.valueOf(requestProjectQuery.get("projectMainCode"));
+        ProjectMain projectMain = projectMainMapper.selectOne(new LambdaQueryWrapper<ProjectMain>().eq(ProjectMain::getCode, requestProjectMainCode));
+        if(projectMain==null){
+            msg.setError("'projectMainCode'["+requestProjectMainCode+"] is Not Exist");
+            return msg;
+        }
+        Map<String,Object> responseData=new HashMap<>();
+        List<Map<String,Object>> projectMainTimeCostList=reportMapper.getProjectMainTimeCost(thirdPartyInterfaces.get(0).getCompanyId(),requestProjectMainCode);
+        List<Integer> projectMainIds = projectMainTimeCostList.stream().map(p -> Integer.valueOf(String.valueOf(p.get("pmId")))).distinct().collect(Collectors.toList());
+        projectMainIds.add(-1);
+        List<Map<String,Object>> projectTimeCostList=reportMapper.getProjectTimeCost(thirdPartyInterfaces.get(0).getCompanyId(),projectMainIds);
+        List<Integer> projectIds = projectTimeCostList.stream().map(p -> Integer.valueOf(String.valueOf(p.get("projectId")))).distinct().collect(Collectors.toList());
+        projectIds.add(-1);
+        List<Map<String,Object>> taskGroupPlanTimeList=reportMapper.getTaskGroupPlanTime(projectIds);
+        List<Integer> groupIds = taskGroupPlanTimeList.stream().map(t -> Integer.valueOf(String.valueOf(t.get("groupId")))).distinct().collect(Collectors.toList());
+        groupIds.add(-1);
+        List<Report> reportList = reportMapper.selectList(new LambdaQueryWrapper<Report>().in(Report::getGroupId, groupIds).and(wrapper -> wrapper.eq(Report::getState, 0).or().eq(Report::getState, 1)));
+        for (Map<String, Object> map : taskGroupPlanTimeList) {
+            BigDecimal workingTime = reportList.stream().filter(r -> r.getGroupId().equals(map.get("groupId"))).map(r -> new BigDecimal(r.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal bigDecimal=new BigDecimal(String.valueOf(map.get("planTime")));
+            bigDecimal=bigDecimal.subtract(workingTime);
+            map.put("realityTime",workingTime.doubleValue());
+            map.put("isOver",bigDecimal.doubleValue()<0?"是":"否");
+            map.put("remaining",bigDecimal.doubleValue()>0?bigDecimal.doubleValue():0);
+        }
+        projectTimeCostList.forEach(pt->{
+            List<Map<String, Object>> mapList = taskGroupPlanTimeList.stream().filter(t -> t.get("projectId").equals(pt.get("projectId"))).collect(Collectors.toList());
+            pt.put("projectGroupData",mapList);
+        });
+        projectMainTimeCostList.forEach(pt->{
+            List<Map<String, Object>> mapList = projectTimeCostList.stream().filter(p -> p.get("pmId").equals(pt.get("pmId"))).collect(Collectors.toList());
+            pt.put("projectArrays",mapList);
+        });
+        responseData.put("projectMainData",projectMainTimeCostList);
+        msg.setData(responseData);
+        return msg;
+    }
 }

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

@@ -1024,4 +1024,55 @@
         AND r.create_date BETWEEN #{startDate} AND #{endDate}
         AND r.creator_id NOT IN(SELECT * from user_exclude)
     </select>
+
+    <select id="getProjectTimeCost" resultType="java.util.Map">
+        select p.project_code as projectCode,p.id as projectId,pm.id as pmId,p.project_name as projectName,p.plan_start_date as planStartDate,p.plan_end_date as planEndDate,p.incharger_id as inchargerId,
+        pm.name as projectMainName,p.status,p.category_name as categoryName,pl.project_level_name as levelString,p.contract_amount as contractAmount,
+        ps.contract_code as contractCode,ps.project_category_sub as projectCategorySub,ps.region,p.create_date as createDate,ps.warranty_start_date as warrantyStartDate,
+        ps.warranty_end_date as warrantyEndDate,p.finish_date as finishDate,ps.bu,
+        CONCAT('[',(select GROUP_CONCAT(CONCAT(u.job_number,'/',u.name)) from participation pa
+        left join user u on pa.user_id=u.id
+        where pa.project_id=p.id ),']') as participations
+        from project p
+        left join project_main pm on p.project_main_id=pm.id
+        left join project_level pl on p.level=pl.id
+        left join project_separate ps on p.id=ps.id
+        where p.company_id=#{companyId}
+        and p.project_main_id in
+        <foreach collection="list" item="item" separator="," close=")" open="(">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="getProjectMainTimeCost" resultType="java.util.Map">
+        select pm.id as pmId, IFNULL(SUM(re.manDay*8),0) as  planTime,IFNULL(SUM(re.workingTime),0) as realityTime,
+        case  when SUM(re.manDay*8)-SUM(re.workingTime) &lt; 0 then '是' else '否' end as isOver ,case when SUM(re.manDay*8)-SUM(re.workingTime) &gt; 0 then (SUM(re.manDay*8)-SUM(re.workingTime)) else '0' end as remaining
+        from
+        project_main pm
+        left join (
+        select SUM(r.working_time) as workingTime,p.project_main_id as projectMainId,p.man_day as manDay from project p
+        left join report r on p.id=r.project_id
+        where p.company_id=#{companyId}
+        and (r.state=0 or r.state=1)
+        group by p.id
+        ) re on re.projectMainId=pm.id
+        where pm.code =#{requestProjectMainCode}
+        group by pm.id
+    </select>
+
+    <select id="getTaskGroupPlanTime" resultType="java.util.Map">
+        select tg.project_id as projectId,tg.task_group_code as taskGroupCode,tg.name,tg.wbs_code as wbsCode,IFNULL(tg.man_day*8,0) as planTime,tg.id as groupId,
+        uu.name as incahrgerName,
+        CONCAT('[',(select GROUP_CONCAT(CONCAT(u.job_number,'/',u.name)) from group_participator gp
+        left join user u on gp.user_id=u.id
+        where gp.group_id=tg.id ),']') as participations
+        from task_group tg
+        left join user uu on uu.id=tg.incharger_id
+        <where>
+            tg.project_id in
+            <foreach collection="list" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        </where>
+    </select>
 </mapper>