diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/BaseDataController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/BaseDataController.java index ddd471b0f..5bc1bff9f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/BaseDataController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/BaseDataController.java @@ -169,8 +169,7 @@ public class BaseDataController { organizationJob.setJobName(dept.getString("jobtitlename")); jobList.add(organizationJob); } - organizationJobService.remove(null); - organizationJobService.saveBatch(jobList); + organizationJobService.saveOrUpdateBatch(jobList); } return Result.success(null); } @@ -213,9 +212,7 @@ public class BaseDataController { userList.add(systemUser); } } - systemUserService.remove(Wrappers.lambdaQuery() - .eq(SystemUser::getAccountType, 7)); - systemUserService.saveBatch(userList); + systemUserService.saveOrUpdateBatch(userList); } } return Result.success(null); diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java index 80b52e3c7..c61618432 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java @@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.basicdata.controller; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.mybatis.EntityMap; @@ -65,6 +66,15 @@ public class CompanyController { return Result.success(list); } + @ApiOperation(value = "企业列表查询", notes = "企业列表查询") + @ApiImplicitParam(name = "companySn", value = "企业SN", paramType = "body", dataType = "String") + @PostMapping("/getChildrenBySn") + public Result> getChildrenBySn(@RequestBody Company company) { + Company company1 = companyService.getOne(Wrappers.lambdaQuery().eq(Company::getCompanySn, company.getCompanySn())); + List list = companyService.list(Wrappers.lambdaQuery().eq(Company::getParentId, company1.getCompanyId())); + return Result.success(list); + } + /** * 添加 * diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostBudgetController.java b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostBudgetController.java index a4e4b320a..5d1ab0a36 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostBudgetController.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostBudgetController.java @@ -10,6 +10,7 @@ import com.zhgd.file.FileUtil; import com.zhgd.xmgl.modules.basicdata.entity.Company; import com.zhgd.xmgl.modules.basicdata.service.ICompanyService; import com.zhgd.xmgl.modules.cost.dto.CostBudgetDto; +import com.zhgd.xmgl.modules.cost.dto.CostBulletinDto; import com.zhgd.xmgl.modules.cost.entity.CostSubject; import com.zhgd.xmgl.modules.cost.service.ICostSubjectService; import com.zhgd.xmgl.modules.exam.entity.ExamQuestionBank; @@ -263,6 +264,16 @@ public class CostBudgetController { return result; } + + @OperLog(operModul = "成本科目预算管理", operType = "查询", operDesc = "查询成本科目预算信息") + @ApiOperation(value = "查询成本科目预算信息", notes = "查询成本科目预算信息", httpMethod = "POST") + @PostMapping(value = "/queryByProjectSnAndSubjectId") + public Result queryById(@ApiIgnore @RequestBody CostBudget costBudget) { + return Result.success(costBudgetService.getOne(Wrappers.lambdaQuery() + .eq(CostBudget::getProjectSn, costBudget.getProjectSn()) + .eq(CostBudget::getSubjectId, costBudget.getSubjectId()))); + } + /** * 导出excel * @@ -470,4 +481,19 @@ public class CostBudgetController { } } } + + /** + * 成本简报 + * @return + */ + @OperLog(operModul = "成本科目预算管理", operType = "列表查询", operDesc = "成本简报信息") + @ApiOperation(value = " 成本简报信息", notes = "成本简报信息", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", dataType = "String"), + @ApiImplicitParam(name = "month", value = "月份时间", paramType = "body", dataType = "String") + }) + @PostMapping(value = "costBulletin") + public Result> costBulletin(@RequestBody Map map) { + return Result.success(costSubjectService.getCostBulletin(map)); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractController.java b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractController.java index 1e86e00aa..f2b075764 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractController.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractController.java @@ -73,7 +73,7 @@ public class CostContractController { public Result> queryPageList(@ApiIgnore @RequestBody Map map) { QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(CostContract.class, map); Page page = PageUtil.getPage(map); - IPage pageList = costContractService.page(page, queryWrapper); + IPage pageList = costContractService.pageList(page, queryWrapper); return Result.success(pageList); } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractSettlementController.java b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractSettlementController.java index b77242b1b..b63bc6d3a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractSettlementController.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostContractSettlementController.java @@ -123,7 +123,7 @@ public class CostContractSettlementController { log.info("开始添加合同结算信息===" + object); String [] type = {"分部结算", "中止结算", "最终结算"}; CostContractSettlement costContractSettlement = new CostContractSettlement(); - costContractSettlement.setContractId(Long.valueOf(object.getJSONArray("contractId").getString(0))); + costContractSettlement.setContractId(Integer.valueOf(object.getJSONArray("contractId").getString(0))); costContractSettlement.setName(object.getString("name")); String typeName = object.getString("type"); for (int i = 0; i < type.length; i++) { diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostQuantityController.java b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostQuantityController.java index 0b7efde4f..de2c01ab1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostQuantityController.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostQuantityController.java @@ -1,6 +1,8 @@ package com.zhgd.xmgl.modules.cost.controller; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.annotation.OperLog; import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; import com.zhgd.xmgl.util.PageUtil; @@ -93,9 +95,26 @@ public class CostQuantityController { @PostMapping(value = "/list") public Result> queryList(@RequestBody CostQuantity costQuantity) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(costQuantity); + List list = costQuantityService.list(queryWrapper); + return Result.success(list); + } + + /** + * 列表查询 + * + * @param costQuantity + * @return + */ + @OperLog(operModul = "合同产值管理", operType = "列表查询", operDesc = "列表查询合同产值信息") + @ApiOperation(value = " 列表查询合同产值信息", notes = "列表查询合同产值信息", httpMethod = "POST") + @PostMapping(value = "/filterList") + public Result> filterList(@RequestBody CostQuantity costQuantity) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); if (costQuantity.getPayPlanId() == null) { - queryWrapper.lambda().isNull(CostQuantity::getPayPlanId); + queryWrapper.isNull(CostQuantity::getPayPlanId); } + queryWrapper.eq(CostQuantity::getContractId, costQuantity.getContractId()); + queryWrapper.eq(CostQuantity::getProjectSn, costQuantity.getProjectSn()); List list = costQuantityService.list(queryWrapper); return Result.success(list); } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostSubjectController.java b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostSubjectController.java index 141096e33..89bc504e4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostSubjectController.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/controller/CostSubjectController.java @@ -109,15 +109,23 @@ public class CostSubjectController { /** * 获取最下级节点 * - * @param costSubject + * @param map * @return */ @OperLog(operModul = "成本科目管理", operType = "列表查询", operDesc = "获取最下级节点") @ApiOperation(value = " 获取最下级节点", notes = "获取最下级节点", httpMethod = "POST") @PostMapping(value = "/lastNodeList") - public Result> lastNodeList(@RequestBody CostSubject costSubject) { - List list = costSubjectService.list(); + public Result> lastNodeList(@RequestBody Map map) { List lastNodeList = new ArrayList<>(); + String projectSn = MapUtils.getString(map, "projectSn"); + if (StringUtils.isBlank(projectSn)) { + return Result.success(lastNodeList); + } + ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(projectSn); + Company company = companyService.getOne(Wrappers.lambdaQuery().eq(Company::getCompanySn, projectInfoBySn.getCompanySn())); + List list = costSubjectService.list(Wrappers.lambdaQuery() + .eq(CostSubject::getCompanySn, company.getHeadquartersSn()) + .eq(CostSubject::getType, projectInfoBySn.getProjectLx())); for (CostSubject subject : list) { long count = list.stream().filter(l -> l.getParentId().toString().equals(subject.getId().toString())).count(); if (count == 0 && StringUtils.isNotBlank(subject.getName())) { diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/controller/IndexController.java b/src/main/java/com/zhgd/xmgl/modules/cost/controller/IndexController.java index 665b98dc7..8cd24304b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/controller/IndexController.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/controller/IndexController.java @@ -1,27 +1,36 @@ package com.zhgd.xmgl.modules.cost.controller; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.cost.dto.CostBulletinDto; import com.zhgd.xmgl.modules.cost.entity.CostBudget; import com.zhgd.xmgl.modules.cost.entity.CostContract; import com.zhgd.xmgl.modules.cost.entity.CostSubject; import com.zhgd.xmgl.modules.cost.service.ICostBudgetService; import com.zhgd.xmgl.modules.cost.service.ICostContractService; import com.zhgd.xmgl.modules.cost.service.ICostSubjectService; +import com.zhgd.xmgl.modules.project.entity.ProgressPanoramaNodePlan; import com.zhgd.xmgl.modules.project.entity.Project; +import com.zhgd.xmgl.modules.project.service.IProgressPanoramaNodePlanService; import com.zhgd.xmgl.modules.project.service.IProjectService; import com.zhgd.xmgl.modules.quality.mapper.QualityInspectionRecordMapper; import com.zhgd.xmgl.modules.xz.security.entity.vo.XzSecurityQualityInspectionRecordTotalVo; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -55,6 +64,9 @@ public class IndexController { @Autowired private QualityInspectionRecordMapper qualityInspectionRecordMapper; + @Autowired + private IProgressPanoramaNodePlanService progressPanoramaNodePlanService; + /** * 成本统计信息 * @return @@ -91,4 +103,35 @@ public class IndexController { public Result quality() { return Result.success(qualityInspectionRecordMapper.selectQualityInspectionRecordPageTotal(new HashMap<>())); } + + /** + * 月度计划完成情况 + * @return + */ + @OperLog(operModul = "门户信息管理", operType = "列表查询", operDesc = "月度计划完成情况") + @ApiOperation(value = " 月度计划完成情况", notes = "月度计划完成情况", httpMethod = "POST") + @ApiImplicitParams({ +// @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", dataType = "String"), + @ApiImplicitParam(name = "month", value = "月份时间", paramType = "body", dataType = "String") + }) + @PostMapping(value = "planComplete") + public Result> planComplete(@RequestBody Map map) { + String month = MapUtils.getString(map, "month"); + DateTime time = DateUtil.parse(month + "-01", "yyyy-MM-dd"); + List list = progressPanoramaNodePlanService.list(Wrappers.lambdaQuery() + .eq(ProgressPanoramaNodePlan::getApprovalStatue, 2) + .ge(ProgressPanoramaNodePlan::getPlanFinishDate, DateUtil.beginOfMonth(time)) + .le(ProgressPanoramaNodePlan::getPlanFinishDate, DateUtil.endOfMonth(time)) + .orderByAsc(ProgressPanoramaNodePlan::getPlanFinishDate)); + Map resultMap = new HashMap(); + Map stateMap = new HashMap(); + stateMap.put("total", list.size()); + stateMap.put("unStart", list.stream().filter(l -> l.getStatus() == 1).count()); + stateMap.put("inProgress", list.stream().filter(l -> l.getStatus() == 2 && DateUtil.parseDate(l.getFinishDate()).compareTo(new Date()) >= 0).count()); + stateMap.put("delay", list.stream().filter(l -> l.getStatus() == 2 && DateUtil.parseDate(l.getFinishDate()).compareTo(new Date()) < 0).count()); + stateMap.put("delayCompletion", list.stream().filter(l -> l.getStatus() == 4).count()); + stateMap.put("completion", list.stream().filter(l -> l.getStatus() == 3).count()); + resultMap.put("stateMap", stateMap); + return Result.success(resultMap); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/dto/CompanyProjectDto.java b/src/main/java/com/zhgd/xmgl/modules/cost/dto/CompanyProjectDto.java index f186906b1..61e24f926 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/dto/CompanyProjectDto.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/dto/CompanyProjectDto.java @@ -35,6 +35,9 @@ public class CompanyProjectDto { @ApiModelProperty(value = "项目计划状态") private Integer progressState; + @ApiModelProperty(value = "企业SN") + private String companySn; + @Excel(name = "父级ID", width = 15) @ApiModelProperty(value = "父级ID") private List childrenList; diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostBulletinDto.java b/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostBulletinDto.java index 9785c0d06..4bee89d27 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostBulletinDto.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostBulletinDto.java @@ -12,24 +12,27 @@ import java.util.List; @ApiModel(value = "成本简报信息(DTO)", description = "CostBulletinDto") public class CostBulletinDto { - @Excel(name = "科目名称", width = 15) - @ApiModelProperty(value = "科目名称") - private String name; + @ApiModelProperty(value = "项目名称") + private String projectName; - @Excel(name = "科目编码", width = 15) - @ApiModelProperty(value = "科目编码") - private String code; + @ApiModelProperty(value = "项目SN") + private String projectNSn; - @ApiModelProperty(value = "父级科目ID") - private Long parentId; + @ApiModelProperty(value = "竣工日期") + private String completeWorkDate; - @ApiModelProperty(value = "祖级关系") - private String ancestors; + @ApiModelProperty(value = "项目面积") + private String projectAcreage; - @ApiModelProperty(value = "级别层次") - private Integer level; + @ApiModelProperty(value = "可售面积") + private String saleAcreage; - @TableField(exist = false) - @ApiModelProperty(value = "子级预算信息") - private List children; + @ApiModelProperty(value = "总价") + private String totalCost; + + @ApiModelProperty(value = "建筑单方造价") + private String projectCostAvg; + + @ApiModelProperty(value = "可售单方造价") + private String saleCostAvg; } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostCalculateDto.java b/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostCalculateDto.java index c8bc83434..957b47ec1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostCalculateDto.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/dto/CostCalculateDto.java @@ -31,6 +31,9 @@ public class CostCalculateDto extends CostCalculate { @ApiModelProperty(value = "级别层次") private Integer level; + @ApiModelProperty(value = "是否为最下级") + private Boolean lastLevel; + @TableField(exist = false) @ApiModelProperty(value = "子级预算信息") private List children; diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContract.java b/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContract.java index 3fdd3dd5c..d4b84e824 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContract.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContract.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -415,4 +416,9 @@ public class CostContract implements Serializable { @Excel(name = "项目SN", width = 15) @ApiModelProperty(value = "项目SN") private String projectSn; + + + @TableField(exist = false) + @ApiModelProperty(value = "是否已结算(0:未结算;1:已结算;)") + private Integer settlementState; } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContractSettlement.java b/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContractSettlement.java index f61cbb21f..b5bb50b69 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContractSettlement.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/entity/CostContractSettlement.java @@ -36,7 +36,7 @@ public class CostContractSettlement implements Serializable { */ @Excel(name = "合同ID", width = 15) @ApiModelProperty(value = "合同ID") - private Long contractId; + private Integer contractId; /** * 结算名称 */ diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostContractService.java b/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostContractService.java index b519b79c6..db2e5008a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostContractService.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostContractService.java @@ -1,5 +1,7 @@ package com.zhgd.xmgl.modules.cost.service; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.modules.cost.entity.CostContract; import com.baomidou.mybatisplus.extension.service.IService; @@ -11,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ICostContractService extends IService { + Page pageList(Page page, Wrapper wrapper); } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostSubjectService.java b/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostSubjectService.java index 3c3af8d5c..4434c5d25 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostSubjectService.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/service/ICostSubjectService.java @@ -3,10 +3,12 @@ package com.zhgd.xmgl.modules.cost.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhgd.xmgl.modules.cost.dto.CostBulletinDto; import com.zhgd.xmgl.modules.cost.entity.CostSubject; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * @Description: 成本科目 @@ -23,4 +25,6 @@ public interface ICostSubjectService extends IService { boolean updateInfo(CostSubject costSubject); boolean delInfo(CostSubject costSubject); + + List getCostBulletin(Map map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostCalculateServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostCalculateServiceImpl.java index bbcbf541a..6ecea7f65 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostCalculateServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostCalculateServiceImpl.java @@ -99,6 +99,11 @@ public class CostCalculateServiceImpl extends ServiceImpl childrenList = allList.stream().filter(a -> a.getParentId().toString().equals(costCalculateDto.getSubjectId().toString())).collect(Collectors.toList()); + if (childrenList.size() > 0) { + costCalculateDto.setLastLevel(false); + } else { + costCalculateDto.setLastLevel(true); + } getChildren(childrenList, allList, budgetList, flag); costCalculateDto.setChildren(childrenList); } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostContractServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostContractServiceImpl.java index dd49eb516..79edd88e2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostContractServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostContractServiceImpl.java @@ -1,12 +1,21 @@ package com.zhgd.xmgl.modules.cost.service.impl; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.modules.cost.entity.CostContract; +import com.zhgd.xmgl.modules.cost.entity.CostContractSettlement; import com.zhgd.xmgl.modules.cost.mapper.CostContractMapper; import com.zhgd.xmgl.modules.cost.service.ICostContractService; +import com.zhgd.xmgl.modules.cost.service.ICostContractSettlementService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.util.List; +import java.util.stream.Collectors; + /** * @Description: 合同信息 * @author: pengj @@ -16,4 +25,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @Service public class CostContractServiceImpl extends ServiceImpl implements ICostContractService { + @Autowired + private ICostContractSettlementService costContractSettlementService; + + @Override + public Page pageList(Page page, Wrapper wrapper) { + Page result = this.page(page, wrapper); + List list = result.getRecords().stream().map(r -> r.getId()).collect(Collectors.toList()); + List settlements = costContractSettlementService.list(Wrappers.lambdaQuery() + .in(CostContractSettlement::getContractId, list)); + for (CostContract record : result.getRecords()) { + List typeList = settlements.stream().filter(s -> s.getContractId() == record.getId()).map(s -> s.getType()).collect(Collectors.toList()); + record.setSettlementState(typeList.contains(3) ? 1 : 0); + } + return result; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostSubjectServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostSubjectServiceImpl.java index 0e61c11db..5572391ab 100644 --- a/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostSubjectServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/cost/service/impl/CostSubjectServiceImpl.java @@ -4,17 +4,27 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhgd.xmgl.modules.cost.dto.CostBulletinDto; +import com.zhgd.xmgl.modules.cost.entity.CostContract; import com.zhgd.xmgl.modules.cost.entity.CostSubject; import com.zhgd.xmgl.modules.cost.mapper.CostSubjectMapper; +import com.zhgd.xmgl.modules.cost.service.ICostContractService; import com.zhgd.xmgl.modules.cost.service.ICostSubjectService; +import com.zhgd.xmgl.modules.project.entity.Project; +import com.zhgd.xmgl.modules.project.service.IProjectService; import com.zhgd.xmgl.security.entity.UserInfo; import com.zhgd.xmgl.security.util.SecurityUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -26,6 +36,12 @@ import java.util.stream.Collectors; @Service public class CostSubjectServiceImpl extends ServiceImpl implements ICostSubjectService { + @Autowired + private IProjectService projectService; + + @Autowired + private ICostContractService costContractService; + @Override public Page tree(Page page, QueryWrapper wrapper) { wrapper.lambda().eq(CostSubject::getParentId, 0); @@ -65,6 +81,25 @@ public class CostSubjectServiceImpl extends ServiceImpl getCostBulletin(Map map) { + List contractList = costContractService.list(Wrappers.lambdaQuery()); + List projects = projectService.list(Wrappers.lambdaQuery() + .eq(Project::getNature, 1)); + List costBulletinDtoList = new ArrayList<>(); + for (Project project : projects) { + List projectContract = contractList.stream().filter(c -> c.getProjectSn().equals(project.getProjectSn())).collect(Collectors.toList()); + BigDecimal total = projectContract.stream().map(p -> p.getHthszj()).reduce(BigDecimal.ZERO, BigDecimal::add); + CostBulletinDto costBulletinDto = new CostBulletinDto(); + BeanUtils.copyProperties(project, costBulletinDto); + costBulletinDto.setTotalCost(total.toString()); + costBulletinDto.setProjectCostAvg(total.divide(new BigDecimal(costBulletinDto.getProjectAcreage()), 2, BigDecimal.ROUND_HALF_UP).toString()); + costBulletinDto.setSaleCostAvg(total.divide(new BigDecimal(costBulletinDto.getSaleAcreage()), 2, BigDecimal.ROUND_HALF_UP).toString()); + costBulletinDtoList.add(costBulletinDto); + } + return costBulletinDtoList; + } + private void getChildren(List list, List allList) { for (CostSubject costSubject : list) { List childrenList = allList.stream().filter(a -> a.getParentId().toString().equals(costSubject.getId().toString())).collect(Collectors.toList()); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanAlarmController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanAlarmController.java index b63449e2f..2a66b1c94 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanAlarmController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanAlarmController.java @@ -72,6 +72,7 @@ public class ProgressPanoramaNodePlanAlarmController { @PostMapping(value = "/page") public Result> queryPageList(@ApiIgnore @RequestBody Map map) { QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(ProgressPanoramaNodePlanAlarm.class, map); + queryWrapper.lambda().orderByDesc(ProgressPanoramaNodePlanAlarm::getCreateDate); Page page = PageUtil.getPage(map); IPage pageList = progressPanoramaNodePlanAlarmService.page(page, queryWrapper); return Result.success(pageList); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanController.java index 666a0940c..6f44c65c5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProgressPanoramaNodePlanController.java @@ -113,18 +113,30 @@ public class ProgressPanoramaNodePlanController { } @ApiOperation(value = "项目关键节点监控", notes = "项目关键节点监控", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", dataType = "String"), + @ApiImplicitParam(name = "type", value = "1:里程碑;2:关键节点", paramType = "body", required = true, dataType = "Integer"), + }) @PostMapping(value = "/keyNodeList") - public Result> keyNodeList(/*@RequestBody Project project*/) { + public Result> keyNodeList(@RequestBody Map map) { + String projectSn = MapUtils.getString(map, "projectSn"); + Integer type = MapUtils.getInteger(map, "type"); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().eq(Project::getNature, 1); - /* if (StringUtil.isNotBlank(project.getCompanySn())) { - wrapper.eq(Project::getCompanySn, project.getCompanySn()); - }*/ + if (StringUtil.isNotBlank(projectSn)) { + wrapper.eq(Project::getProjectSn, projectSn); + } List list = projectService.list(wrapper); List keyNodes = new ArrayList<>(); List planList = progressPanoramaNodePlanService.list(Wrappers.lambdaQuery() + .eq(ProgressPanoramaNodePlan::getApprovalStatue, 2) .orderByAsc(ProgressPanoramaNodePlan::getPlanFinishDate)); for (Project project1 : list) { - List panoramaNodePlans = planList.stream().filter(p -> p.getKeyNode() == true && p.getProjectSn().equals(project1.getProjectSn())).collect(Collectors.toList()); + List panoramaNodePlans = new ArrayList<>(); + if (type == 1) { + panoramaNodePlans = planList.stream().filter(p -> p.getMilepostNode() == true && p.getProjectSn().equals(project1.getProjectSn())).collect(Collectors.toList()); + } else { + panoramaNodePlans = planList.stream().filter(p -> p.getKeyNode() == true && p.getProjectSn().equals(project1.getProjectSn())).collect(Collectors.toList()); + } if (panoramaNodePlans.size() == 0) { continue; } @@ -257,14 +269,22 @@ public class ProgressPanoramaNodePlanController { Result result = new Result(); List list = progressPanoramaNodePlanService.list(Wrappers.lambdaQuery() .eq(ProgressPanoramaNodePlan::getProjectSn, progressPanoramaNodePlan.getProjectSn())); - long count = list.stream().filter(l -> StringUtil.isBlank(l.getPlanFinishDate())).count(); - long count1 = list.stream().filter(l -> StringUtil.isBlank(l.getChargerId())).count(); - if (count > 0) { - result.error500("当前存在计划完成日期为空的工作项,请设置后再进行此操作。"); - } else if (count1 > 0) { - result.error500("当前存在责任人为空的工作项,请设置后再进行此操作。"); + if (list.size() == 0) { + result.error500("当前无任务信息,请先创建任务项!"); } else { - progressPanoramaNodePlanService.check(progressPanoramaNodePlan); + long count = list.stream().filter(l -> StringUtil.isBlank(l.getPlanFinishDate())).count(); + long count1 = list.stream().filter(l -> l.getLevelName().equals("主项名称") && StringUtil.isBlank(l.getChargerDeptName())).count(); + long count2 = list.stream().filter(l -> l.getLevelName().equals("专项名称") && StringUtil.isBlank(l.getChargerId())).count(); + if (count > 0) { + result.error500("当前存在计划完成日期为空的工作项,请设置后再进行此操作。"); + } else if (count1 > 0) { + result.error500("当前存在责任部门为空的主项任务,请设置后再进行此操作。"); + } else if (count2 > 0) { + result.error500("当前存在主责人为空的专项任务,请设置后再进行此操作。"); + } else { + progressPanoramaNodePlanService.check(progressPanoramaNodePlan); + } + result.ok("数据校验通过!"); } return result; } @@ -296,25 +316,27 @@ public class ProgressPanoramaNodePlanController { }) @PostMapping(value = "/statByMonth") public Result> statByMonth(@RequestBody Map map) { + Map resultMap = new HashMap(); String projectSn = MapUtils.getString(map, "projectSn"); String month = MapUtils.getString(map, "month"); - DateTime time = DateUtil.parse(month + "-01", "yyyy-MM-dd"); - List list = progressPanoramaNodePlanService.list(Wrappers.lambdaQuery() - .eq(ProgressPanoramaNodePlan::getProjectSn, projectSn) - .eq(ProgressPanoramaNodePlan::getApprovalStatue, 2) - .ge(ProgressPanoramaNodePlan::getPlanFinishDate, DateUtil.beginOfMonth(time)) - .le(ProgressPanoramaNodePlan::getPlanFinishDate, DateUtil.endOfMonth(time)) - .orderByAsc(ProgressPanoramaNodePlan::getPlanFinishDate)); - Map resultMap = new HashMap(); - Map stateMap = new HashMap(); - stateMap.put("total", list.size()); - stateMap.put("unStart", list.stream().filter(l -> l.getStatus() == 1).count()); - stateMap.put("inProgress", list.stream().filter(l -> l.getStatus() == 2 && DateUtil.parseDate(l.getFinishDate()).compareTo(new Date()) >= 0).count()); - stateMap.put("delay", list.stream().filter(l -> l.getStatus() == 2 && DateUtil.parseDate(l.getFinishDate()).compareTo(new Date()) < 0).count()); - stateMap.put("delayCompletion", list.stream().filter(l -> l.getStatus() == 4).count()); - stateMap.put("completion", list.stream().filter(l -> l.getStatus() == 3).count()); - resultMap.put("stateMap", stateMap); - resultMap.put("planList", list); + if (StringUtils.isNotBlank(projectSn) || StringUtils.isNotBlank(month)) { + DateTime time = DateUtil.parse(month + "-01", "yyyy-MM-dd"); + List list = progressPanoramaNodePlanService.list(Wrappers.lambdaQuery() + .eq(ProgressPanoramaNodePlan::getProjectSn, projectSn) + .eq(ProgressPanoramaNodePlan::getApprovalStatue, 2) + .ge(ProgressPanoramaNodePlan::getPlanFinishDate, DateUtil.beginOfMonth(time)) + .le(ProgressPanoramaNodePlan::getPlanFinishDate, DateUtil.endOfMonth(time)) + .orderByAsc(ProgressPanoramaNodePlan::getPlanFinishDate)); + Map stateMap = new HashMap(); + stateMap.put("total", list.size()); + stateMap.put("unStart", list.stream().filter(l -> l.getStatus() == 1).count()); + stateMap.put("inProgress", list.stream().filter(l -> l.getStatus() == 2 && DateUtil.parseDate(l.getFinishDate()).compareTo(new Date()) >= 0).count()); + stateMap.put("delay", list.stream().filter(l -> l.getStatus() == 2 && DateUtil.parseDate(l.getFinishDate()).compareTo(new Date()) < 0).count()); + stateMap.put("delayCompletion", list.stream().filter(l -> l.getStatus() == 4).count()); + stateMap.put("completion", list.stream().filter(l -> l.getStatus() == 3).count()); + resultMap.put("stateMap", stateMap); + resultMap.put("planList", list); + } return Result.success(resultMap); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/ProgressPanoramaNodePlan.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/ProgressPanoramaNodePlan.java index fe255a59f..b52a90d76 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/entity/ProgressPanoramaNodePlan.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/ProgressPanoramaNodePlan.java @@ -173,4 +173,10 @@ public class ProgressPanoramaNodePlan implements Serializable { */ @ApiModelProperty(value = "是否已审批(0:未审批;1:数据已校验;2:审批通过)") private Integer approvalStatue; + + /** + * 任务业务类型 + */ + @ApiModelProperty(value = "任务业务类型") + private String businessType; } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java index 14ac8648a..bc746e2f1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java @@ -11,6 +11,7 @@ import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; +import java.util.Date; /** * 项目 @@ -133,6 +134,12 @@ public class Project implements Serializable { @Excel(name = "开工日期", width = 15) @ApiModelProperty(value = "开工日期") private java.lang.String startWorkDate; + /** + * 竣工日期 + */ + @Excel(name = "竣工日期", width = 15) + @ApiModelProperty(value = "竣工日期") + private String completeWorkDate; /** * 施工阶段,1施工证获取,2土方开挖,3桩基,4支护开始,5垫层完成,6正负零,7工程达到预售条件,8主体施工,9主体封顶,10装饰装修,11景观园林,12主体交付,13预售证获取,14规划验收,15竣工备案完成 */ diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java index ac35c4385..69358d2c9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java @@ -216,7 +216,7 @@ public class ProjectServiceImpl extends ServiceImpl impl second.setSn(project.getProjectSn()); second.setType(2); second.setName(project.getProjectName()); - second.setProgressState(project.getProgressState()); + second.setCompanySn(project.getCompanySn()); secondList.add(second); } first.setChildrenList(secondList); @@ -251,9 +251,6 @@ public class ProjectServiceImpl extends ServiceImpl impl return null; } ProjectInfoExtVo info = redisRepository.getOrSetEx(PROJECT_PREFIX_KEY + projectSn, (() -> projectMapper.getProjectInfoBySn(map))); - if (info == null) { - throw new NullPointerException(" 当前查询条件结果不存在!"); - } return info; } diff --git a/src/main/java/com/zhgd/xmgl/task/ProgressPanoramaNodePlanAlarmTask.java b/src/main/java/com/zhgd/xmgl/task/ProgressPanoramaNodePlanAlarmTask.java index a6addcb14..49e28287d 100644 --- a/src/main/java/com/zhgd/xmgl/task/ProgressPanoramaNodePlanAlarmTask.java +++ b/src/main/java/com/zhgd/xmgl/task/ProgressPanoramaNodePlanAlarmTask.java @@ -57,6 +57,7 @@ public class ProgressPanoramaNodePlanAlarmTask { String today = DateUtil.today(); // 预计开始时间已过未开始、预计结束时间已过进行中任务 List planList = progressPanoramaNodePlanService.list(Wrappers.lambdaQuery(ProgressPanoramaNodePlan.class) + .eq(ProgressPanoramaNodePlan::getApprovalStatue, 2) .eq(ProgressPanoramaNodePlan::getStatus, 1).lt(ProgressPanoramaNodePlan::getPlanStartDate, today) .or(wrapper -> wrapper.eq(ProgressPanoramaNodePlan::getStatus, 2).lt(ProgressPanoramaNodePlan::getFinishDate, today))); // 判断是否有逾期任务 @@ -67,9 +68,9 @@ public class ProgressPanoramaNodePlanAlarmTask { ProgressPanoramaNodePlanAlarm progressPanoramaNodePlanAlarm = new ProgressPanoramaNodePlanAlarm(); progressPanoramaNodePlanAlarm.setNodeId(p.getId()); if (p.getStatus() == 1) { - progressPanoramaNodePlanAlarm.setAlarmDetails("当前任务预计开始时间为:" + p.getPlanStartDate() + "," + "实际任务开始时间为:" + (p.getStartDate() == null ? "" : p.getStartDate())); + progressPanoramaNodePlanAlarm.setAlarmDetails("当前任务预计开始时间为:" + p.getPlanStartDate() + "," + "目前任务未开始"); } else { - progressPanoramaNodePlanAlarm.setAlarmDetails("当前任务预计完成时间为:" + p.getPlanFinishDate() + "," + "实际任务完成时间为:" + (p.getFinishDate() == null ? "" : p.getFinishDate())); + progressPanoramaNodePlanAlarm.setAlarmDetails("当前任务预计完成时间为:" + p.getPlanFinishDate() + "," + "目前任务未完成"); } progressPanoramaNodePlanAlarm.setCreateDate(new Date()); progressPanoramaNodePlanAlarm.setAlarmType(p.getStatus());