|
@@ -2,6 +2,7 @@ package org.jeecg.modules.projectCostHuiji.controller;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
@@ -110,22 +111,41 @@ public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji
|
|
|
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
|
|
HttpServletRequest req) {
|
|
|
|
|
|
- ProjectCostHuijiSumVO chcheResult = (ProjectCostHuijiSumVO) redisUtil.get(CacheKey.PROJECT_COST_HUIJI + ":" + pageNo + "&" + pageSize + ":" + projectCostHuiji.toString());
|
|
|
+
|
|
|
+ String superQueryParams = Arrays.toString(req.getParameterMap().get("superQueryParams"));
|
|
|
+ ProjectCostHuijiSumVO chcheResult = (ProjectCostHuijiSumVO) redisUtil.get(CacheKey.PROJECT_COST_HUIJI + ":" + projectCostHuiji.toString() + ":" + superQueryParams + ":" + pageNo + "&" + pageSize);
|
|
|
if (ObjectUtils.isNotEmpty(chcheResult)) return Result.ok(chcheResult);
|
|
|
|
|
|
ProjectCostHuijiSumVO sumVO = new ProjectCostHuijiSumVO();
|
|
|
|
|
|
+ QueryWrapper<ProjectCostHuiji> queryWrapper = QueryGenerator.initQueryWrapper(projectCostHuiji, req.getParameterMap());
|
|
|
+
|
|
|
+ List<String> taskNos;
|
|
|
+ if (!superQueryParams.isEmpty() && !"[%5B%5D]".equals(superQueryParams) || ObjectUtils.anyNotNull(projectCostHuiji)) {
|
|
|
+ List<ProjectCostHuiji> resultList = projectCostHuijiService.selectList(queryWrapper);
|
|
|
+ taskNos = resultList.stream().map(ProjectCostHuiji::getTaskno).collect(Collectors.toList());
|
|
|
+ } else {
|
|
|
+ taskNos = new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
CompletableFuture<ProjectCostHuiji> huijiFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- return projectCostHuijiService.costHJSum(projectCostHuiji);//汇集总和
|
|
|
+ if (taskNos.isEmpty())
|
|
|
+ return projectCostHuijiService.costHJSum(projectCostHuiji);//汇集总和
|
|
|
+ return projectCostHuijiService.costHJSumByTaskNoList(taskNos);
|
|
|
});
|
|
|
|
|
|
+ if (!taskNos.isEmpty()) {
|
|
|
+ List<String> taskNoListByRefTaskNo = costService.getTaskNoListByRefTaskNo(taskNos);
|
|
|
+ taskNos.addAll(taskNoListByRefTaskNo);
|
|
|
+ }
|
|
|
+
|
|
|
CompletableFuture<KzksProjectCostYs> ysFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- return costYsService.selectSumClys();
|
|
|
+ if (taskNos.isEmpty())
|
|
|
+ return costYsService.selectSumClys();
|
|
|
+ return costYsService.selectSumClysByTaskNos(taskNos);
|
|
|
});
|
|
|
|
|
|
- QueryWrapper<ProjectCostHuiji> queryWrapper = QueryGenerator.initQueryWrapper(projectCostHuiji, req.getParameterMap());
|
|
|
Page<ProjectCostHuiji> page = new Page<>(pageNo, pageSize);
|
|
|
-
|
|
|
CompletableFuture<Page<ProjectCostHuiji>> pageFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
return projectCostHuijiService.costHuijPage(page, queryWrapper);
|
|
|
});
|
|
@@ -135,6 +155,7 @@ public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji
|
|
|
ProjectCostHuiji huiji = huijiFuture.join();
|
|
|
Page<ProjectCostHuiji> pageList = pageFuture.join();
|
|
|
KzksProjectCostYs ys = ysFuture.join();
|
|
|
+ if (ys == null) ys = new KzksProjectCostYs();
|
|
|
if (ObjectUtils.isEmpty(ys.getClys())) ys.setClys(BigDecimal.valueOf(0));
|
|
|
if (ObjectUtils.isEmpty(ys.getWxys())) ys.setWxys(BigDecimal.valueOf(0));
|
|
|
if (pageList != null && !pageList.getRecords().isEmpty()) {//costYsService
|
|
@@ -194,57 +215,116 @@ public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji
|
|
|
sumVO.setProjectCostHuijiSum(resultHuiJiVo);
|
|
|
sumVO.setPageList(pageList1);
|
|
|
|
|
|
- redisUtil.set(CacheKey.PROJECT_COST_HUIJI + ":" + pageNo + "&" + pageSize + ":" + projectCostHuiji.toString(), sumVO, 1000L * 60 * 60 * 10);
|
|
|
+ redisUtil.set(CacheKey.PROJECT_COST_HUIJI + ":" + projectCostHuiji.toString() + ":" + superQueryParams + ":" + pageNo + "&" + pageSize, sumVO, 1000L * 60 * 60 * 10);
|
|
|
|
|
|
return Result.OK(sumVO);
|
|
|
} else {
|
|
|
ProjectCost projectCost = new ProjectCost();
|
|
|
BeanUtils.copyProperties(projectCostHuiji, projectCost);
|
|
|
QueryWrapper<ProjectCost> query = QueryGenerator.initQueryWrapper(projectCost, req.getParameterMap());
|
|
|
- Page<ProjectCost> page1 = new Page<ProjectCost>(pageNo, pageSize);
|
|
|
- Page<ProjectCost> projectCosts = costService.getCostListPage(page1, query);
|
|
|
-
|
|
|
- ProjectCostHuiji projectCostHuiji1 = projectCostHuijiService.costHJSumByProjectCost(projectCost);
|
|
|
- Integer yzsl = projectCostHuijiService.costHJYzslByProjectCost(projectCost);
|
|
|
- if (ObjectUtils.isEmpty(yzsl)) yzsl = 0;
|
|
|
- projectCostHuiji1.setYzsl(yzsl);
|
|
|
- ArrayList<ProjectCostVO> projectCostVOS = new ArrayList<>();
|
|
|
-
|
|
|
- BigDecimal clysSum = BigDecimal.valueOf(0);
|
|
|
- BigDecimal wxysSum = BigDecimal.valueOf(0);
|
|
|
-
|
|
|
- for (ProjectCost record : projectCosts.getRecords()) {
|
|
|
- ProjectCostVO projectCostVO = new ProjectCostVO();
|
|
|
- BeanUtils.copyProperties(record, projectCostVO);
|
|
|
- KzksProjectCostYs kzksProjectCostYs = costYsService.selectYSByTaskno(record.getTaskno());
|
|
|
-
|
|
|
- BigDecimal clys = BigDecimal.valueOf(0);
|
|
|
- BigDecimal wxys = BigDecimal.valueOf(0);
|
|
|
|
|
|
- if (ObjectUtils.isNotEmpty(kzksProjectCostYs)) {
|
|
|
- if (ObjectUtils.isNotEmpty(kzksProjectCostYs.getClys())) clys = kzksProjectCostYs.getClys();
|
|
|
- if (ObjectUtils.isNotEmpty(kzksProjectCostYs.getWxys())) wxys = kzksProjectCostYs.getWxys();
|
|
|
+ //根据条件分页查询任务
|
|
|
+ CompletableFuture<Page<ProjectCost>> pageCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ Page<ProjectCost> page1 = new Page<ProjectCost>(pageNo, pageSize);
|
|
|
+ return costService.getCostListPage(page1, query);
|
|
|
+ });
|
|
|
+
|
|
|
+ //根据条件查询所有满足条件的任务号
|
|
|
+ CompletableFuture<List<String>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ List<ProjectCost> costs = costService.projectCostlist(query);
|
|
|
+ return costs.stream().map(ProjectCost::getTaskno).collect(Collectors.toList());
|
|
|
+ });
|
|
|
+
|
|
|
+ CompletableFuture<Void> future = CompletableFuture.allOf(pageCompletableFuture, listCompletableFuture);
|
|
|
+ future.join();
|
|
|
+ Page<ProjectCost> projectCosts = pageCompletableFuture.join();
|
|
|
+ List<String> taskList = listCompletableFuture.join();
|
|
|
+
|
|
|
+ CompletableFuture<ProjectCostHuiji> projectCostHuijiCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ //如果是普通查询就走这个方法
|
|
|
+ ProjectCostHuiji projectCostHuiji1; //筛选合计
|
|
|
+ if (taskList.isEmpty()) {
|
|
|
+ projectCostHuiji1 = projectCostHuijiService.costHJSumByProjectCost(projectCost);
|
|
|
+ } else {
|
|
|
+ projectCostHuiji1 = projectCostHuijiService.costHJSumByProjectCostByTaskList(taskList);
|
|
|
}
|
|
|
- clysSum.add(clys);
|
|
|
- wxysSum.add(wxys);
|
|
|
- projectCostVO.setClys(clys.setScale(2, RoundingMode.HALF_UP));
|
|
|
- projectCostVO.setWxys(wxys.setScale(2, RoundingMode.HALF_UP));
|
|
|
- projectCostVOS.add(projectCostVO);
|
|
|
+ if (projectCostHuiji1 == null) projectCostHuiji1 = new ProjectCostHuiji();
|
|
|
+ return projectCostHuiji1;
|
|
|
+ });
|
|
|
+
|
|
|
+ CompletableFuture<KzksProjectCostYs> kzksProjectCostYsCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ if (taskList.isEmpty()) return new KzksProjectCostYs();
|
|
|
+ return costYsService.selectSumClysByTaskNos(taskList);
|
|
|
+ });
|
|
|
+
|
|
|
+ CompletableFuture<Integer> yzslCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ if (taskList.isEmpty()) return 0;
|
|
|
+ return costService.getYzslSumByTaskNos(taskList);
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ CompletableFuture<ArrayList<ProjectCostVO>> arrayListCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ ArrayList<ProjectCostVO> projectCostVOS = new ArrayList<>();
|
|
|
+
|
|
|
+ for (ProjectCost record : projectCosts.getRecords()) {
|
|
|
+ ProjectCostVO projectCostVO = new ProjectCostVO();
|
|
|
+ BeanUtils.copyProperties(record, projectCostVO);
|
|
|
+ KzksProjectCostYs kzksProjectCostYs = costYsService.selectYSByTaskno(record.getTaskno());
|
|
|
+
|
|
|
+ BigDecimal clys = BigDecimal.valueOf(0);
|
|
|
+ BigDecimal wxys = BigDecimal.valueOf(0);
|
|
|
+
|
|
|
+ if (ObjectUtils.isNotEmpty(kzksProjectCostYs)) {
|
|
|
+ if (ObjectUtils.isNotEmpty(kzksProjectCostYs.getClys())) clys = kzksProjectCostYs.getClys();
|
|
|
+ if (ObjectUtils.isNotEmpty(kzksProjectCostYs.getWxys())) wxys = kzksProjectCostYs.getWxys();
|
|
|
+ }
|
|
|
+ projectCostVO.setClys(clys.setScale(2, RoundingMode.HALF_UP));
|
|
|
+ projectCostVO.setWxys(wxys.setScale(2, RoundingMode.HALF_UP));
|
|
|
+ projectCostVOS.add(projectCostVO);
|
|
|
+ }
|
|
|
+ return projectCostVOS;
|
|
|
+ });
|
|
|
+
|
|
|
+ CompletableFuture<Void> future2 = CompletableFuture.allOf(projectCostHuijiCompletableFuture, kzksProjectCostYsCompletableFuture, arrayListCompletableFuture, yzslCompletableFuture);
|
|
|
+ Void join = future2.join();
|
|
|
+ ProjectCostHuiji projectCostHuiji1 = projectCostHuijiCompletableFuture.join();
|
|
|
+ KzksProjectCostYs huijiYs = kzksProjectCostYsCompletableFuture.join();
|
|
|
+ ArrayList<ProjectCostVO> projectCostVOS = arrayListCompletableFuture.join();
|
|
|
+ Integer yzslSum = yzslCompletableFuture.join();
|
|
|
+ projectCostHuiji1.setYzsl(yzslSum);
|
|
|
+
|
|
|
+ BigDecimal contractfpe = projectCostHuiji1.getContractfpe();//合同分配额
|
|
|
+ BigDecimal estimationcoat = projectCostHuiji1.getEstimationcoat();//预估价
|
|
|
+ BigDecimal lre = projectCostHuiji1.getLre(); //利润额
|
|
|
+ BigDecimal cpt = BigDecimal.ZERO; //固定比较值
|
|
|
+ BigDecimal lrl = BigDecimal.ZERO; //利润率
|
|
|
+ if (contractfpe.compareTo(cpt)!= 0){
|
|
|
+ lrl = lre.divide(contractfpe, 2, RoundingMode.HALF_UP);
|
|
|
+ }else if (estimationcoat.compareTo(cpt) != 0){
|
|
|
+ lrl = lre.divide(estimationcoat,2,RoundingMode.HALF_UP);
|
|
|
}
|
|
|
+ projectCostHuiji1.setLrl(lrl);
|
|
|
|
|
|
ProjectCostHuijiVo resultHuiJiVo = new ProjectCostHuijiVo();
|
|
|
if (ObjectUtils.isEmpty(projectCostHuiji1)) projectCostHuiji1 = new ProjectCostHuiji();
|
|
|
BeanUtils.copyProperties(projectCostHuiji1, resultHuiJiVo);
|
|
|
- resultHuiJiVo.setClys(clysSum);
|
|
|
- resultHuiJiVo.setWxys(wxysSum);
|
|
|
+ BigDecimal clys = BigDecimal.ZERO;
|
|
|
+ BigDecimal wxys = BigDecimal.ZERO;
|
|
|
+ if (huijiYs != null) {
|
|
|
+ if (huijiYs.getClys() != null) clys = huijiYs.getClys();
|
|
|
+ if (huijiYs.getWxys() != null) wxys = huijiYs.getWxys();
|
|
|
+ }
|
|
|
+ resultHuiJiVo.setClys(clys);
|
|
|
+ resultHuiJiVo.setWxys(wxys);
|
|
|
|
|
|
ProjectCostSumVo projectCostSumVo = new ProjectCostSumVo();
|
|
|
Page<ProjectCostVO> projectCostListVOPage = ProjectCostHuijiConvert.INSTANCE.toProjectCostListVOPage(projectCosts, projectCostVOS);
|
|
|
|
|
|
-
|
|
|
projectCostSumVo.setProjectCostHuijiSum(resultHuiJiVo);
|
|
|
projectCostSumVo.setPageList(projectCostListVOPage);
|
|
|
|
|
|
+ redisUtil.set(CacheKey.PROJECT_COST_HUIJI + ":" + projectCostHuiji.toString() + ":" + superQueryParams + ":" + pageNo + "&" + pageSize, sumVO, 1000L * 60 * 60 * 10);
|
|
|
+
|
|
|
return Result.OK(projectCostSumVo);
|
|
|
}
|
|
|
}
|