|
@@ -1,650 +0,0 @@
|
|
|
-/*
|
|
|
-package org.jeecg.modules.projectCostHuiji.controller;
|
|
|
-
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import io.swagger.annotations.Api;
|
|
|
-import io.swagger.annotations.ApiOperation;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.lang3.ObjectUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.apache.shiro.SecurityUtils;
|
|
|
-import org.jeecg.common.api.vo.Result;
|
|
|
-import org.jeecg.common.aspect.annotation.AutoLog;
|
|
|
-import org.jeecg.common.system.base.controller.JeecgController;
|
|
|
-import org.jeecg.common.system.query.QueryGenerator;
|
|
|
-import org.jeecg.common.system.vo.LoginUser;
|
|
|
-import org.jeecg.common.util.Md5Util;
|
|
|
-import org.jeecg.common.util.RedisUtil;
|
|
|
-import org.jeecg.modules.Index.util.AuthMark;
|
|
|
-import org.jeecg.modules.Index.util.CacheKey;
|
|
|
-import org.jeecg.modules.Index.util.CommonMethod;
|
|
|
-import org.jeecg.modules.costModelProductPrice.service.IKzksCostModelProductPriceService;
|
|
|
-import org.jeecg.modules.mesInfoInstallationcost.service.IMesInfoInstallationcostService;
|
|
|
-import org.jeecg.modules.projectCost.entity.ProjectCost;
|
|
|
-import org.jeecg.modules.projectCost.entity.ProjectCostSumVo;
|
|
|
-import org.jeecg.modules.projectCost.service.IProjectCostService;
|
|
|
-import org.jeecg.modules.projectCost.vo.ProjectCostVO;
|
|
|
-import org.jeecg.modules.projectCostHuiji.convert.impl.ProjectCostHuijiConverCustomImpl;
|
|
|
-import org.jeecg.modules.projectCostHuiji.convert.ProjectCostHuijiConvert;
|
|
|
-import org.jeecg.modules.projectCostHuiji.entity.ProjectCostHuiji;
|
|
|
-import org.jeecg.modules.projectCostHuiji.entity.ProjectCostHuijiCompare;
|
|
|
-import org.jeecg.modules.projectCostHuiji.entity.ProjectCostHuijiVo;
|
|
|
-import org.jeecg.modules.projectCostHuiji.service.IProjectCostHuijiService;
|
|
|
-import org.jeecg.modules.projectCostHuiji.vo.ProjectCostHuijiListVO;
|
|
|
-import org.jeecg.modules.projectCostHuiji.vo.ProjectCostHuijiSumVO;
|
|
|
-import org.jeecg.modules.projectCostYs.entity.KzksProjectCostYs;
|
|
|
-import org.jeecg.modules.projectCostYs.service.IKzksProjectCostYsService;
|
|
|
-import org.jeecg.modules.system.mapper.SysDepartMapper;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.web.bind.annotation.*;
|
|
|
-import org.springframework.web.servlet.ModelAndView;
|
|
|
-
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.math.RoundingMode;
|
|
|
-import java.util.*;
|
|
|
-import java.util.concurrent.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-*/
|
|
|
-/**
|
|
|
- * @Description: 项目成本汇集表
|
|
|
- * @Author: jeecg-boot
|
|
|
- * @Date: 2023-08-15
|
|
|
- * @Version: V1.0
|
|
|
- *//*
|
|
|
-
|
|
|
-@Api(tags = "项目成本汇集表")
|
|
|
-@RestController
|
|
|
-@RequestMapping("/projectCostHuiji/projectCostHuiji")
|
|
|
-@Slf4j
|
|
|
-public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji, IProjectCostHuijiService> {
|
|
|
- @Autowired
|
|
|
- @SuppressWarnings("all")
|
|
|
- private IProjectCostHuijiService projectCostHuijiService;
|
|
|
- @Autowired
|
|
|
- @SuppressWarnings("all")
|
|
|
- private IProjectCostService costService;
|
|
|
- @Autowired
|
|
|
- @SuppressWarnings("all")
|
|
|
- private IMesInfoInstallationcostService mesInfoInstallationcostService;
|
|
|
- @Autowired
|
|
|
- @SuppressWarnings("all")
|
|
|
- private IKzksProjectCostYsService costYsService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private RedisUtil redisUtil;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private ProjectCostHuijiConverCustomImpl projectCostHuijiConverCustom;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private CommonMethod commonMethod;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SysDepartMapper sysDepartMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private IKzksCostModelProductPriceService costModelProductPriceService;
|
|
|
-
|
|
|
- @ApiOperation(value = "111111111111")
|
|
|
- @GetMapping(value = "/children1")
|
|
|
- public List<ProjectCostVO> children1(String taskno) {
|
|
|
- return costService.costListByTaskNoMain(taskno); //主任务及批产的主任务
|
|
|
- }
|
|
|
-
|
|
|
- @ApiOperation(value = "22222222222222")
|
|
|
- @GetMapping(value = "/children2")
|
|
|
- public List<ProjectCostVO> children2(String taskno) {
|
|
|
- return costService.costListByTaskNoSub(taskno); //主任务及批产的主任务
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 项目成本汇集——对比
|
|
|
- *//*
|
|
|
-
|
|
|
- //sl修改添加每台的对比
|
|
|
- @ApiOperation(value = "项目成本汇集——对比", notes = "项目成本汇集——对比")
|
|
|
- @GetMapping(value = "/compareList")
|
|
|
-// public List<ProjectCostHuiji> compareList(String ids) {
|
|
|
-// List<ProjectCostHuiji> list = projectCostHuijiService.compareListByIds(Arrays.asList(ids.split(",")));
|
|
|
-// return list;
|
|
|
-// }
|
|
|
- public ProjectCostHuijiCompare compareList(String ids) {
|
|
|
- return projectCostHuijiService.compareListByIds(Arrays.asList(ids.split(",")));
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 分页列表查询
|
|
|
- *
|
|
|
- * @param projectCostHuiji
|
|
|
- * @param pageNo
|
|
|
- * @param pageSize
|
|
|
- * @param req
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- //@AutoLog(value = "项目成本汇集表-分页列表查询")
|
|
|
- @ApiOperation(value = "项目成本汇集——分页查询——汇总+两级(一级汇集、二级主任务及主批产任务及子任务及子批产任务)", notes = "项目成本汇集——分页查询——两级(一级汇集、二级主任务及子任务)")
|
|
|
- @GetMapping(value = "/list")
|
|
|
- public Result<Object> queryPageList(ProjectCostHuiji projectCostHuiji,
|
|
|
- @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
|
|
- @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
|
|
- HttpServletRequest req) {
|
|
|
- LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
|
- String role = commonMethod.getRole(sysUser.getUsername());
|
|
|
- //if (AuthMark.BOSS.equals(role)) role = AuthMark.DEPT_LEADER;
|
|
|
- ProjectCostHuijiSumVO sumVO = new ProjectCostHuijiSumVO();
|
|
|
- ProjectCostHuiji huiji1 = new ProjectCostHuiji();
|
|
|
-
|
|
|
- QueryWrapper<ProjectCostHuiji> queryWrapper = QueryGenerator.initQueryWrapper(huiji1, req.getParameterMap());
|
|
|
- List<String> departNames = new ArrayList<>();
|
|
|
-
|
|
|
- //高级查询参数不等于"null"并且有查询条件("[%5B%5D]" 高级查询无查询条件) 则返回true,获取满足查询条件的任务号
|
|
|
- //普通查询有查询条件则returnFlag()返回true,判断条件是ProjectCostHuiji对象有任意属性不为null
|
|
|
- String superQueryParams = Arrays.toString(req.getParameterMap().get("superQueryParams"));
|
|
|
- String superQueryParamsMd5 = Md5Util.md5Encode(superQueryParams, "utf-8");
|
|
|
- if (projectCostHuiji == null) projectCostHuiji = new ProjectCostHuiji();
|
|
|
- boolean hasTaskno = projectCostHuiji.getTaskno() != null && !projectCostHuiji.getTaskno().isEmpty() ;
|
|
|
-
|
|
|
- boolean isStaff;
|
|
|
- if (AuthMark.STAFF.equals(role)) {
|
|
|
- LoginUser finalSysUser = sysUser;
|
|
|
- queryWrapper.lambda().and(i -> {
|
|
|
- i.eq(StringUtils.isNotBlank(finalSysUser.getRealname()),ProjectCostHuiji::getBusinessManName, finalSysUser.getRealname()).or()
|
|
|
- .eq(StringUtils.isNotBlank(finalSysUser.getRealname()),ProjectCostHuiji::getYwfzrname, finalSysUser.getRealname());
|
|
|
- });
|
|
|
- isStaff = true;
|
|
|
- } else {
|
|
|
- isStaff = false;
|
|
|
- }
|
|
|
-
|
|
|
- boolean tips;
|
|
|
- if (AuthMark.DEPT_LEADER.equals(role)) {
|
|
|
- tips = true;
|
|
|
- String[] deptIds = sysUser.getDepartIds().split(",");
|
|
|
- departNames = sysDepartMapper.getDepNameByIds(deptIds);
|
|
|
- if (departNames.isEmpty()) return Result.ok();
|
|
|
- List<String> finalDepartNames = departNames;
|
|
|
- if (!hasTaskno) {
|
|
|
- queryWrapper.lambda().and(i -> {
|
|
|
- for (String departName : finalDepartNames) {
|
|
|
- i.or().like(StringUtils.isNotBlank(departName), ProjectCostHuiji::getJycs, departName)
|
|
|
- .or().like(StringUtils.isNotBlank(departName), ProjectCostHuiji::getZrbm, departName);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- projectCostHuiji.setDeptNames(departNames);
|
|
|
- sysUser = new LoginUser();
|
|
|
- } else {
|
|
|
- tips = false;
|
|
|
- }
|
|
|
-
|
|
|
- if (AuthMark.BOSS.equals(role)) {
|
|
|
- queryWrapper.lambda().like(StringUtils.isNotBlank(projectCostHuiji.getJycs()), ProjectCostHuiji::getJycs, projectCostHuiji.getJycs())
|
|
|
- .or().like(StringUtils.isNotBlank(projectCostHuiji.getZrbm()), ProjectCostHuiji::getZrbm, projectCostHuiji.getZrbm());
|
|
|
- sysUser = new LoginUser();
|
|
|
- }
|
|
|
-
|
|
|
- queryWrapper.lambda().like(StringUtils.isNotBlank(projectCostHuiji.getTaskno()), ProjectCostHuiji::getTaskno, projectCostHuiji.getTaskno());
|
|
|
- queryWrapper.lambda().like(StringUtils.isNotBlank(projectCostHuiji.getTaskname()), ProjectCostHuiji::getTaskname, projectCostHuiji.getTaskname());
|
|
|
-
|
|
|
- boolean flag = !superQueryParams.equals("null") && !"[%5B%5D]".equals(superQueryParams) || returnFlag(projectCostHuiji);
|
|
|
- String ObjectMd5 = Md5Util.md5Encode(projectCostHuiji.toString(), "utf-8");
|
|
|
- ProjectCostHuijiSumVO cacheResultOne = (ProjectCostHuijiSumVO) redisUtil.get(CacheKey.PROJECT_COST_HUIJI + ":" + role + ":" + departNames + ":" + sysUser.getRealname() + ":" + ObjectMd5 + ":" + superQueryParamsMd5 + ":" + pageNo + "&" + pageSize);
|
|
|
- ProjectCostSumVo cacheResultTwo = (ProjectCostSumVo) redisUtil.get(CacheKey.PROJECT_COST + ":" + role + ":" + departNames + ":" + sysUser.getRealname() + ":" + ObjectMd5 + ":" + superQueryParamsMd5 + ":" + pageNo + "&" + pageSize);
|
|
|
- if (cacheResultOne != null) return Result.ok(cacheResultOne);
|
|
|
- if (cacheResultTwo != null) return Result.ok(cacheResultTwo);
|
|
|
-
|
|
|
-
|
|
|
- List<String> taskNos;
|
|
|
- if (flag) {
|
|
|
- List<ProjectCostHuiji> resultList = projectCostHuijiService.selectList(queryWrapper);
|
|
|
- taskNos = resultList.stream().map(ProjectCostHuiji::getTaskno).collect(Collectors.toList());
|
|
|
- } else {
|
|
|
- taskNos = new ArrayList<>();
|
|
|
- }
|
|
|
-
|
|
|
- ProjectCostHuiji finalProjectCostHuiji = projectCostHuiji;
|
|
|
- LoginUser finalSysUser = sysUser;
|
|
|
- CompletableFuture<ProjectCostHuiji> huijiFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- if (tips && !flag) {
|
|
|
- ProjectCostHuiji huiji = new ProjectCostHuiji();
|
|
|
- huiji.setDeptNames(finalProjectCostHuiji.getDeptNames());
|
|
|
- return projectCostHuijiService.costHJSum(huiji);
|
|
|
- }
|
|
|
- if (!flag && isStaff){
|
|
|
- return projectCostHuijiService.costHJSumIsStaff(finalProjectCostHuiji,finalSysUser.getRealname());
|
|
|
- }
|
|
|
- if (!flag)
|
|
|
- return projectCostHuijiService.costHJSum(finalProjectCostHuiji);//汇集总和
|
|
|
- if (taskNos.isEmpty())
|
|
|
- return initProjectCostHuiji();
|
|
|
- return projectCostHuijiService.costHJSumByTaskNoList(taskNos);
|
|
|
- });
|
|
|
-
|
|
|
- //当前任务号集合是查询的汇集表,一定是主任务的任务号集合,所以根据主任务号,查询子级任务号
|
|
|
- if (!taskNos.isEmpty()) {
|
|
|
- List<String> taskNoListByRefTaskNo = costService.getTaskNoListByRefTaskNo(taskNos);
|
|
|
- taskNos.addAll(taskNoListByRefTaskNo);
|
|
|
- }
|
|
|
-
|
|
|
- CompletableFuture<KzksProjectCostYs> ysFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- if (!flag)
|
|
|
- return costYsService.selectSumClys();
|
|
|
- if (taskNos.isEmpty())
|
|
|
- return new KzksProjectCostYs();
|
|
|
- return costYsService.selectSumClysByTaskNos(taskNos);
|
|
|
- });
|
|
|
-
|
|
|
- Page<ProjectCostHuiji> page = new Page<>(pageNo, pageSize);
|
|
|
- CompletableFuture<Page<ProjectCostHuiji>> pageFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- return projectCostHuijiService.costHuijPage(page, queryWrapper);
|
|
|
- });
|
|
|
-
|
|
|
- CompletableFuture<Void> future1 = CompletableFuture.allOf(huijiFuture, pageFuture, ysFuture);
|
|
|
- future1.join();
|
|
|
- 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
|
|
|
-
|
|
|
- List<ProjectCostHuijiListVO> collect = pageList.getRecords().stream().map(i -> {
|
|
|
- List<ProjectCostVO> children1 = costService.costListByTaskNoMain(i.getTaskno()); //主任务及批产的主任务
|
|
|
- List<ProjectCostVO> children2 = costService.costListByTaskNoSub(i.getTaskno()); //子任务及批产的子任务
|
|
|
- List<ProjectCostVO> children = new ArrayList<>();
|
|
|
-
|
|
|
- CompletableFuture<List<ProjectCostVO>> children3Future = CompletableFuture.supplyAsync(() -> {
|
|
|
- return children1.stream().map(this::apply).collect(Collectors.toList());
|
|
|
- });
|
|
|
-
|
|
|
- CompletableFuture<List<ProjectCostVO>> children4Future = CompletableFuture.supplyAsync(() -> {
|
|
|
- return children2.stream().map(this::apply).collect(Collectors.toList());
|
|
|
- });
|
|
|
-
|
|
|
- CompletableFuture<Void> future = CompletableFuture.allOf(children3Future, children4Future);
|
|
|
- future.join();
|
|
|
-
|
|
|
- List<ProjectCostVO> children3 = children3Future.join();
|
|
|
- List<ProjectCostVO> children4 = children4Future.join();
|
|
|
- children.addAll(children3);
|
|
|
- children.addAll(children4);
|
|
|
- BigDecimal wxysSum = BigDecimal.valueOf(0);
|
|
|
- BigDecimal clysSum = BigDecimal.valueOf(0);
|
|
|
-
|
|
|
- CompletableFuture<BigDecimal> wxysFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- return children.stream().filter(o -> {
|
|
|
- return ObjectUtils.isEmpty(o.getStatus()) || (!"1".equals(o.getStatus()));
|
|
|
- }).map(ProjectCostVO::getWxys).filter(ObjectUtils::isNotEmpty).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- });
|
|
|
-
|
|
|
- CompletableFuture<BigDecimal> clysFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- return children.stream().filter(o -> {
|
|
|
- return ObjectUtils.isEmpty(o.getStatus()) || (!"1".equals(o.getStatus()));
|
|
|
- }).map(ProjectCostVO::getClys).filter(ObjectUtils::isNotEmpty).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- });
|
|
|
-
|
|
|
- CompletableFuture<Void> future2 = CompletableFuture.allOf(wxysFuture, clysFuture);
|
|
|
- future2.join();
|
|
|
- wxysSum = wxysFuture.join();
|
|
|
- clysSum = clysFuture.join();
|
|
|
-
|
|
|
- return projectCostHuijiConverCustom.toHuijiListVOAndYs(i, children, 1, wxysSum, clysSum);
|
|
|
- }).collect(Collectors.toList());
|
|
|
-
|
|
|
- IPage<ProjectCostHuijiListVO> pageList1 = ProjectCostHuijiConvert.INSTANCE.toHuijiListVOPage(pageList, collect);
|
|
|
-
|
|
|
- ProjectCostHuijiVo resultHuiJiVo = new ProjectCostHuijiVo();
|
|
|
- if (ObjectUtils.isEmpty(huiji)) huiji = new ProjectCostHuiji();
|
|
|
- BeanUtils.copyProperties(huiji, resultHuiJiVo);
|
|
|
- resultHuiJiVo.setClys(ys.getClys());
|
|
|
- resultHuiJiVo.setWxys(ys.getWxys());
|
|
|
-
|
|
|
- if (pageList1.getRecords().isEmpty()) resultHuiJiVo = new ProjectCostHuijiVo();
|
|
|
- sumVO.setProjectCostHuijiSum(resultHuiJiVo);
|
|
|
- sumVO.setPageList(pageList1);
|
|
|
-
|
|
|
- redisUtil.set(CacheKey.PROJECT_COST_HUIJI + ":" + role + ":" + departNames + ":" + sysUser.getRealname() + ":" + ObjectMd5 + ":" + superQueryParamsMd5 + ":" + pageNo + "&" + pageSize, sumVO, 1000L * 60 * 60 * 10);
|
|
|
- return Result.OK(sumVO);
|
|
|
- } else {
|
|
|
- ProjectCost projectCost = new ProjectCost();
|
|
|
- BeanUtils.copyProperties(projectCostHuiji, projectCost);
|
|
|
-
|
|
|
- ProjectCost projectCost1 = new ProjectCost();
|
|
|
-
|
|
|
- QueryWrapper<ProjectCost> query = QueryGenerator.initQueryWrapper(projectCost1, req.getParameterMap());
|
|
|
- query.lambda().like(StringUtils.isNotBlank(projectCost.getTaskno()), ProjectCost::getTaskno, projectCost.getTaskno());
|
|
|
- query.lambda().like(StringUtils.isNotBlank(projectCost.getTaskname()), ProjectCost::getTaskname, projectCost.getTaskname());
|
|
|
-
|
|
|
- if (AuthMark.STAFF.equals(role)) {
|
|
|
- LoginUser finalSysUser1 = sysUser;
|
|
|
- query.lambda().and(i -> {
|
|
|
- i.eq(ProjectCost::getBusinessManName, finalSysUser1.getRealname()).or()
|
|
|
- .eq(ProjectCost::getYwfzrname, finalSysUser1.getRealname());
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- if (AuthMark.DEPT_LEADER.equals(role)) {
|
|
|
- List<String> finalDepartNames1 = departNames;
|
|
|
- if (!hasTaskno) {
|
|
|
- query.lambda().and(i -> {
|
|
|
- for (String departName : finalDepartNames1) {
|
|
|
- i.or().like(StringUtils.isNotBlank(departName), ProjectCost::getClys, departName)
|
|
|
- .or().like(StringUtils.isNotBlank(departName), ProjectCost::getZrbm, departName);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- projectCost.setDeptNames(departNames);
|
|
|
- sysUser = new LoginUser();
|
|
|
- }
|
|
|
-
|
|
|
- if (AuthMark.BOSS.equals(role)) {
|
|
|
- query.lambda().like(StringUtils.isNotBlank(projectCost.getJycs()), ProjectCost::getJycs, projectCost.getJycs())
|
|
|
- .or().like(StringUtils.isNotBlank(projectCost.getZrbm()), ProjectCost::getZrbm, projectCost.getZrbm());
|
|
|
- sysUser = new LoginUser();
|
|
|
- }
|
|
|
-
|
|
|
- QueryWrapper<ProjectCost> clone = query.clone();
|
|
|
- //根据条件分页查询任务
|
|
|
- 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(clone);
|
|
|
- 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 = initProjectCostHuiji();
|
|
|
- } else {
|
|
|
- projectCostHuiji1 = projectCostHuijiService.costHJSumByProjectCostByTaskList(taskList);
|
|
|
- }
|
|
|
- if (projectCostHuiji1 == null) projectCostHuiji1 = initProjectCostHuiji();
|
|
|
- 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);
|
|
|
- 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 (lre.compareTo(cpt) != 0) {
|
|
|
- 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);
|
|
|
- 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);
|
|
|
- if (projectCostListVOPage.getRecords().isEmpty()) resultHuiJiVo = new ProjectCostHuijiVo();
|
|
|
- projectCostSumVo.setProjectCostHuijiSum(resultHuiJiVo);
|
|
|
- projectCostSumVo.setPageList(projectCostListVOPage);
|
|
|
-
|
|
|
- redisUtil.set(CacheKey.PROJECT_COST + ":" + role + ":" + departNames + ":" + sysUser.getRealname() + ":" + ObjectMd5 + ":" + superQueryParamsMd5 + ":" + pageNo + "&" + pageSize, projectCostSumVo, 1000L * 60 * 60 * 10);
|
|
|
- return Result.OK(projectCostSumVo);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private ProjectCostVO apply(ProjectCostVO x) {
|
|
|
- KzksProjectCostYs ys = costYsService.selectYSByTaskno(x.getTaskno());
|
|
|
- if (ys != null) {
|
|
|
- if (ys.getClys() != null) {
|
|
|
- x.setClys(ys.getClys());
|
|
|
- } else {
|
|
|
- x.setClys(BigDecimal.valueOf(0));
|
|
|
- }
|
|
|
- if (ys.getWxys() != null) {
|
|
|
- x.setWxys(ys.getWxys());
|
|
|
- } else {
|
|
|
- x.setWxys(BigDecimal.valueOf(0));
|
|
|
- }
|
|
|
- }
|
|
|
- return x;
|
|
|
- }
|
|
|
-
|
|
|
- private ProjectCostHuiji initProjectCostHuiji() {
|
|
|
- ProjectCostHuiji huiji = new ProjectCostHuiji();
|
|
|
- huiji.setContractfpe(BigDecimal.ZERO);
|
|
|
- huiji.setEstimationcoat(BigDecimal.ZERO);
|
|
|
- huiji.setZcb(BigDecimal.ZERO);
|
|
|
- huiji.setYzsl(0);
|
|
|
- huiji.setLre(BigDecimal.ZERO);
|
|
|
- huiji.setLrl(BigDecimal.ZERO);
|
|
|
- huiji.setClf(BigDecimal.ZERO);
|
|
|
- huiji.setZyf(BigDecimal.ZERO);
|
|
|
- huiji.setSwf(BigDecimal.ZERO);
|
|
|
- huiji.setWxf(BigDecimal.ZERO);
|
|
|
- huiji.setGdzczj(BigDecimal.ZERO);
|
|
|
- huiji.setGlf(BigDecimal.ZERO);
|
|
|
- huiji.setRldlf(BigDecimal.ZERO);
|
|
|
- huiji.setWorkhour(BigDecimal.ZERO);
|
|
|
- huiji.setScgs(BigDecimal.ZERO);
|
|
|
- huiji.setSjgs(BigDecimal.ZERO);
|
|
|
- return huiji;
|
|
|
- }
|
|
|
-
|
|
|
- private boolean returnFlag(ProjectCostHuiji projectCostHuiji) {
|
|
|
- JSONObject json = (JSONObject) JSONObject.toJSON(projectCostHuiji);
|
|
|
- for (Map.Entry<String, Object> entry : json.entrySet()) {
|
|
|
- if (entry.getValue() != null) return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 添加
|
|
|
- *
|
|
|
- * @param projectCostHuiji
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- @AutoLog(value = "项目成本汇集表-添加")
|
|
|
- @ApiOperation(value = "项目成本汇集表-添加", notes = "项目成本汇集表-添加")
|
|
|
- //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:add")
|
|
|
- @PostMapping(value = "/add")
|
|
|
- public Result<String> add(@RequestBody ProjectCostHuiji projectCostHuiji) {
|
|
|
- projectCostHuijiService.save(projectCostHuiji);
|
|
|
- return Result.OK("添加成功!");
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 编辑
|
|
|
- *
|
|
|
- * @param projectCostHuiji
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- @AutoLog(value = "项目成本汇集表-编辑")
|
|
|
- @ApiOperation(value = "项目成本汇集表-编辑", notes = "项目成本汇集表-编辑")
|
|
|
- //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:edit")
|
|
|
- @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
|
|
|
- public Result<String> edit(@RequestBody ProjectCostHuiji projectCostHuiji) {
|
|
|
- projectCostHuijiService.updateById(projectCostHuiji);
|
|
|
- return Result.OK("编辑成功!");
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 通过id删除
|
|
|
- *
|
|
|
- * @param id
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- @AutoLog(value = "项目成本汇集表-通过id删除")
|
|
|
- @ApiOperation(value = "项目成本汇集表-通过id删除", notes = "项目成本汇集表-通过id删除")
|
|
|
- //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:delete")
|
|
|
- @DeleteMapping(value = "/delete")
|
|
|
- public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
|
|
|
- projectCostHuijiService.removeById(id);
|
|
|
- return Result.OK("删除成功!");
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 批量删除
|
|
|
- *
|
|
|
- * @param ids
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- @AutoLog(value = "项目成本汇集表-批量删除")
|
|
|
- @ApiOperation(value = "项目成本汇集表-批量删除", notes = "项目成本汇集表-批量删除")
|
|
|
- //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:deleteBatch")
|
|
|
- @DeleteMapping(value = "/deleteBatch")
|
|
|
- public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
|
|
|
- this.projectCostHuijiService.removeByIds(Arrays.asList(ids.split(",")));
|
|
|
- return Result.OK("批量删除成功!");
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 通过id查询
|
|
|
- *
|
|
|
- * @param id
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- //@AutoLog(value = "项目成本汇集表-通过id查询")
|
|
|
- @ApiOperation(value = "项目成本汇集表-通过id查询", notes = "项目成本汇集表-通过id查询")
|
|
|
- @GetMapping(value = "/queryById")
|
|
|
- public Result<ProjectCostHuiji> queryById(@RequestParam(name = "id", required = true) String id) {
|
|
|
- ProjectCostHuiji projectCostHuiji = projectCostHuijiService.getById(id);
|
|
|
- if (projectCostHuiji == null) {
|
|
|
- return Result.error("未找到对应数据");
|
|
|
- }
|
|
|
- return Result.OK(projectCostHuiji);
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 导出excel
|
|
|
- *
|
|
|
- * @param request
|
|
|
- * @param projectCostHuiji
|
|
|
- *//*
|
|
|
-
|
|
|
- //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:exportXls")
|
|
|
- @RequestMapping(value = "/exportXls")
|
|
|
- public ModelAndView exportXls(HttpServletRequest request, ProjectCostHuiji projectCostHuiji) {
|
|
|
- return super.exportXls(request, projectCostHuiji, ProjectCostHuiji.class, "项目成本汇集表");
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * 通过excel导入数据
|
|
|
- *
|
|
|
- * @param request
|
|
|
- * @param response
|
|
|
- * @return
|
|
|
- *//*
|
|
|
-
|
|
|
- //@RequiresPermissions("kzks_project_cost_huiji:importExcel")
|
|
|
- @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
|
|
- public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
|
|
- return super.importExcel(request, response, ProjectCostHuiji.class);
|
|
|
- }
|
|
|
-
|
|
|
- */
|
|
|
-/**
|
|
|
- * author: dzc
|
|
|
- * version: 1.0
|
|
|
- * des: 将选中的任务号加入到成本模型中 (将汇集表中的status改为4)
|
|
|
- * date: 2023/10/24
|
|
|
- *//*
|
|
|
-
|
|
|
- @AutoLog(value = "项目成本汇集表-添加到成本模型中")
|
|
|
- @ApiOperation(value = "项目成本汇集表-添加到成本模型中", notes = "项目成本汇集表-添加到成本模型中")
|
|
|
- @PostMapping(value = "/insertIntoCostModel")
|
|
|
- public Result<String> insertIntoCostModel(@RequestBody List<ProjectCostHuiji> projectCostHuijis) {
|
|
|
- redisUtil.removeAll(CacheKey.PROJECT_COST_HUIJI);
|
|
|
- redisUtil.removeAll(CacheKey.PROJECT_COST);
|
|
|
- Boolean b = costModelProductPriceService.insertIntoCostModel(projectCostHuijis);
|
|
|
- if (b) {
|
|
|
- return Result.OK("加入成功!");
|
|
|
- }
|
|
|
- return Result.OK("加入失败!");
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-*/
|