diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java index 6746331d7..808a7205d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java @@ -304,7 +304,7 @@ public class WorkerAdmissionController { throw new OpenAlertException("【" + StrUtil.join(",", existNums) + "】编号已存在"); } } - Map allCeNameMap = dictionariesRecordService.list().stream().collect(Collectors.toMap(DictionariesRecord::getId, Function.identity(), (o1, o2) -> o1)); + Map allCeNameMap = dictionariesRecordService.list().stream().collect(Collectors.toMap(DictionariesRecord::getDictionaryValue, Function.identity(), (o1, o2) -> o1)); if (CollUtil.isNotEmpty(tableList)) { List errs = new ArrayList<>(); Map typeMap = postWorkTypeService.list(new LambdaQueryWrapper() @@ -315,7 +315,7 @@ public class WorkerAdmissionController { Long type = jo.getJSONArray("field3008722075250").getLong(0); List hasCeList = new ArrayList(); Map hasCeMap = new HashMap<>(); - Long ce = jo.getJSONArray("field9312043914427").getLong(0); + String ce = jo.getJSONArray("field9312043914427").getString(0); hasCeList.add(allCeNameMap.get(ce).getDictionaryName()); if (typeMap.containsKey(type)) { String typeName = typeMap.get(type).getPostWorkTypeName(); diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/ProjectGroupMapper.java b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/ProjectGroupMapper.java index 481a57c6f..897d1860e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/ProjectGroupMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/ProjectGroupMapper.java @@ -7,8 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.annotation.DataScope; import com.zhgd.xmgl.modules.baotou.entity.ProjectGroup; -import com.zhgd.xmgl.modules.baotou.entity.vo.CountEnterpriseVo; -import com.zhgd.xmgl.modules.baotou.entity.vo.EnterpriseListVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -25,8 +23,8 @@ import java.util.List; @DataScope public interface ProjectGroupMapper extends BaseMapper { - IPage queryList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + IPage queryList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("param") HashMap param); - List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("param") HashMap param); } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java index 8dd6e287f..a15bfe7a6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java @@ -1,7 +1,6 @@ package com.zhgd.xmgl.modules.baotou.plan.controller; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; @@ -10,12 +9,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; -import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.xmgl.modules.baotou.plan.entity.*; +import com.zhgd.xmgl.modules.baotou.plan.entity.vo.PlanRecordCurve; import com.zhgd.xmgl.modules.baotou.plan.mapper.PlanRecordMapper; import com.zhgd.xmgl.modules.baotou.plan.service.*; -import com.zhgd.xmgl.util.ExcelUtils; -import com.zhgd.xmgl.util.MessageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -25,14 +22,11 @@ import org.apache.commons.collections.MapUtils; import org.simpleframework.xml.core.Validate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import java.math.BigDecimal; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; @@ -197,8 +191,8 @@ public class PlanRecordController { @OperLog(operModul = "进度计划编制管理", operType = "", operDesc = "查询进度曲线") @ApiOperation(value = "查询进度曲线", notes = "查询进度曲线", httpMethod = "GET") @ApiImplicitParams({ - @ApiImplicitParam(name = "recordId", value = "计划编制id", paramType = "query", required = true, dataType = "String"), @ApiImplicitParam(name = "pbsId", value = "进度PBSID(计划编制id和进度PBSID必传其中之一,都传以计划编制id为准)", paramType = "query", required = true, dataType = "String"), + @ApiImplicitParam(name = "recordId", value = "计划编制id", paramType = "query", required = false, dataType = "String"), @ApiImplicitParam(name = "beginDate", value = "开始日期", paramType = "query", required = false, dataType = "String"), @ApiImplicitParam(name = "endDate", value = "结束日期", paramType = "query", required = false, dataType = "String"), @ApiImplicitParam(name = "year", value = "年份", paramType = "query", required = false, dataType = "String") @@ -214,29 +208,30 @@ public class PlanRecordController { String recordId = MapUtils.getString(param, "recordId"); String projectSn = MapUtils.getString(param, "projectSn"); if (StrUtil.isNotBlank(recordId)) { - PlanRecord record = planRecordService.getById(recordId); - PlanPeriod planPeriod = planPeriodService.getOne(new LambdaQueryWrapper().eq(PlanPeriod::getProjectSn, projectSn)); + //查询某个计划编制的曲线 return Result.success(planRecordService.getPlanCurve(param)); } else { + //查询某个pbs的曲线 Long pbsId = MapUtils.getLong(param, "pbsId"); + PlanPbs topPbs = planPbsService.getById(pbsId); List planPbs = planPbsService.getChildren(pbsId); +// planPbs.add(topPbs); +// calByRecursionPbs(topPbs, planPbs); + PlanPeriod planPeriod = planPeriodService.getOne(new LambdaQueryWrapper().eq(PlanPeriod::getProjectSn, projectSn)); List pbsIds = planPbs.stream().map(PlanPbs::getId).collect(Collectors.toList()); pbsIds.add(pbsId); List> rtList = new ArrayList<>(); - List records = planRecordService.list(new LambdaQueryWrapper() + List topRecords = planRecordService.list(new LambdaQueryWrapper() .in(PlanRecord::getPbsId, pbsIds) .eq(PlanRecord::getParentId, 0) ); Map> dateMap = new HashMap<>(); List milestones = planMilestoneService.list(new LambdaQueryWrapper().eq(PlanMilestone::getProjectSn, projectSn)); List allPlanRecords = planRecordMapper.selectList(new LambdaQueryWrapper().eq(PlanRecord::getProjectSn, projectSn)); - Map> childrenMap = new HashMap<>(); - for (PlanRecord record : records) { - childrenMap.put(record.getId(), this.getChildren(record, allPlanRecords)); - } - for (PlanRecord record : records) { - List periods = planRecordService.getPlanSharesForCurve(param, record, milestones, planPeriod, allPlanRecords, childrenMap.get(record.getId()), planPeriod); + for (PlanRecord topRecord : topRecords) { + topRecord.setChildren(planRecordService.getPlanRecordChildren(topRecord, allPlanRecords)); + List periods = planRecordService.getPlanSharesForCurve(param, topRecord, milestones, planPeriod, allPlanRecords, planPeriod); for (PlanFeedbackPeriod period : periods) { List periodList = dateMap.get(period.getPeriodStart()); if (periodList == null) { @@ -283,11 +278,23 @@ public class PlanRecordController { } } - private List getChildren(PlanRecord st, List allList) { - return allList.stream() - .filter(m -> Objects.equals(m.getParentId(), st.getId())) - .peek(m -> m.setChildren(getChildren(m, allList))) + /** + * 递归pbs计算曲线 + * + * @param topPbs + * @param planPbs + */ + private Map calByRecursionPbs(PlanPbs topPbs, List planPbs) { + List children = planPbs.stream() + .filter(m -> Objects.equals(m.getParentId(), topPbs.getId())) .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(children)) { + for (PlanPbs child : children) { + calByRecursionPbs(child, planPbs); + } + } else { + + } } @OperLog(operModul = "进度计划编制管理", operType = "", operDesc = "查询项目里程碑") diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanFeedback.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanFeedback.java index 4a7ef9a7b..fc86787ac 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanFeedback.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanFeedback.java @@ -154,7 +154,7 @@ public class PlanFeedback implements Serializable { private java.lang.Integer status; @TableField(exist = false) - private java.lang.String key; + private java.lang.String k; } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/vo/PlanRecordCurve.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/vo/PlanRecordCurve.java new file mode 100644 index 000000000..3f79249be --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/vo/PlanRecordCurve.java @@ -0,0 +1,15 @@ +package com.zhgd.xmgl.modules.baotou.plan.entity.vo; + +import lombok.Data; + +/** + * 计划编制的曲线 + */ +@Data +public class PlanRecordCurve { + private String time; + private String plan; + private String actual; + private String planTotal; + private String actualTotal; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanFeedbackApprovalService.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanFeedbackApprovalService.java index 657be5a2f..773bf1940 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanFeedbackApprovalService.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanFeedbackApprovalService.java @@ -75,9 +75,10 @@ public interface IPlanFeedbackApprovalService extends IService map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanRecordService.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanRecordService.java index 63208e991..118d79916 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanRecordService.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/IPlanRecordService.java @@ -7,7 +7,6 @@ import com.zhgd.xmgl.modules.baotou.plan.entity.PlanMilestone; import com.zhgd.xmgl.modules.baotou.plan.entity.PlanPeriod; import com.zhgd.xmgl.modules.baotou.plan.entity.PlanRecord; -import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -75,9 +74,19 @@ public interface IPlanRecordService extends IService { List getPlanShares(Map param); - List getPlanSharesForCurve(Map param, PlanRecord record, List milestones, PlanPeriod planPeriod, List planRecords, List children, PlanPeriod period); + List getPlanSharesForCurve(Map param, PlanRecord record, List milestones, PlanPeriod planPeriod, List planRecords, PlanPeriod period); List> getPlanCurve(Map param); HashMap getProjectMilestone(HashMap param); + + /** + * 获取children的计划编制 + * + * @param topRecord + * @param allPlanRecords + * @return + */ + List getPlanRecordChildren(PlanRecord topRecord, List allPlanRecords); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackApprovalServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackApprovalServiceImpl.java index da11bc400..21bdfbfc6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackApprovalServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackApprovalServiceImpl.java @@ -240,7 +240,7 @@ public class PlanFeedbackApprovalServiceImpl extends ServiceImpl ridFeedBackMap = new HashMap<>(); if (CollUtil.isNotEmpty(recordIdList)) { ridFeedBackMap = planFeedbackService.getNewestOneByRecordIdList(recordIdList).stream().collect(Collectors.toMap(PlanFeedback::getRecordId, Function.identity(), (planFeedback, planFeedback2) -> planFeedback)); @@ -303,23 +303,24 @@ public class PlanFeedbackApprovalServiceImpl extends ServiceImpl() .eq(PlanFeedbackApproval::getInputWorkerId, userId) + .eq(PlanFeedbackApproval::getFeedbackType, feedbackType) .last("order by create_time desc limit 1") ); } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackServiceImpl.java index 250a2eec5..2c0213b9a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanFeedbackServiceImpl.java @@ -19,6 +19,7 @@ import com.zhgd.xmgl.modules.baotou.plan.mapper.PlanFeedbackMapper; import com.zhgd.xmgl.modules.baotou.plan.service.*; import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; import com.zhgd.xmgl.security.util.SecurityUtils; +import com.zhgd.xmgl.util.MapBuilder; import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.RefUtil; import org.apache.commons.collections.MapUtils; @@ -383,6 +384,20 @@ public class PlanFeedbackServiceImpl extends ServiceImpl() + .put("recordIdList", Collections.singletonList(feedback.getRecordId())) + .put("projectSn", feedback.getProjectSn()) + .put("feedbackType", feedback.getFeedbackType()) + .build()); } @Override @@ -441,7 +456,7 @@ public class PlanFeedbackServiceImpl extends ServiceImpl milestoneVals = period.getPlanMilestoneVals(); + List milestoneVals = period.getMilestoneVals(); if (CollUtil.isNotEmpty(milestoneVals)) { for (PlanMilestoneVal val : milestoneVals) { val.setFeedbackPeriodId(period.getId()); @@ -454,6 +469,6 @@ public class PlanFeedbackServiceImpl extends ServiceImpl queryManyNewestFeedbackMap(HashMap param) { - return baseMapper.queryManyNewestFeedbackMap(param).stream().collect(Collectors.toMap(PlanFeedback::getKey, Function.identity(), (o1, o2) -> o1)); + return baseMapper.queryManyNewestFeedbackMap(param).stream().collect(Collectors.toMap(PlanFeedback::getK, Function.identity(), (o1, o2) -> o1)); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java index 6df984025..1baffe60b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -213,11 +214,13 @@ public class PlanRecordServiceImpl extends ServiceImpl() + .set(PlanRecord::getWeightRate, planRecord.getWeightRate()) + .eq(PlanRecord::getId, planRecord.getId())); + baseMapper.updateById(planRecord); return this.queryById(String.valueOf(planRecord.getId())); } @@ -304,23 +307,22 @@ public class PlanRecordServiceImpl extends ServiceImpl allVals = new ArrayList(); if (CollUtil.isNotEmpty(fbIds)) { List pfbpIds = planFeedbackPeriodService.list(new LambdaQueryWrapper() - .eq(PlanFeedbackPeriod::getFeedbackId, fbIds)).stream().map(PlanFeedbackPeriod::getId).collect(Collectors.toList()); + .in(PlanFeedbackPeriod::getFeedbackId, fbIds)).stream().map(PlanFeedbackPeriod::getId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(pfbpIds)) { allVals = planMilestoneValService.list(new LambdaQueryWrapper() - .eq(PlanMilestoneVal::getFeedbackPeriodId, pfbpIds)); + .in(PlanMilestoneVal::getFeedbackPeriodId, pfbpIds)); } fbPeriods = planFeedbackPeriodService.list(new LambdaQueryWrapper().in(PlanFeedbackPeriod::getFeedbackId, fbIds)); } if (record.getWorkType() == 1) { feedbackPeriods = this.getPeriodMilestonesForWork(record, planPeriod, milestones, recordIdMap, fbPeriods, allVals); } else if (record.getWorkType() == 2) { - List planRecords = planRecordMapper.selectList(new LambdaQueryWrapper().eq(PlanRecord::getProjectSn, projectSn)); //判断是否最后一级wbs,是的话需要显示里程碑 - List children = planRecordMapper.getChildren(recordId); - children = ObjectUtil.cloneByStream(children); - children.add(record); - List trees = BeanUtil.copyToList(ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(children)), "id", "parentId", "children"), PlanRecord.class); - Map map = this.getChildFeedbackPeriodMap(trees.get(0), planRecords, milestones, planPeriod, recordIdMap, fbPeriods, allVals); + List records = planRecordMapper.getChildren(recordId); + records = ObjectUtil.cloneByStream(records); + records.add(record); + List trees = BeanUtil.copyToList(ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(records)), "id", "parentId", "children"), PlanRecord.class); + Map map = this.getChildFeedbackPeriodMap(trees.get(0), milestones, planPeriod, recordIdMap, fbPeriods, allVals); feedbackPeriods = new ArrayList<>(map.values()); } else { throw new OpenAlertException("不存在的类型"); @@ -369,7 +371,7 @@ public class PlanRecordServiceImpl extends ServiceImpl getPlanSharesForCurve(Map param, PlanRecord record, List milestones, PlanPeriod planPeriod, List planRecords, List children, PlanPeriod period) { + public List getPlanSharesForCurve(Map param, PlanRecord record, List milestones, PlanPeriod planPeriod, List planRecords, PlanPeriod period) { String beginDate = MapUtils.getString(param, "periodStart"); String endDate = MapUtils.getString(param, "periodEnd"); String projectSn = MapUtils.getString(param, "projectSn"); @@ -382,19 +384,16 @@ public class PlanRecordServiceImpl extends ServiceImpl allVals = new ArrayList(); if (CollUtil.isNotEmpty(fbIds)) { List pfbpIds = planFeedbackPeriodService.list(new LambdaQueryWrapper() - .eq(PlanFeedbackPeriod::getFeedbackId, fbIds)).stream().map(PlanFeedbackPeriod::getId).collect(Collectors.toList()); + .in(PlanFeedbackPeriod::getFeedbackId, fbIds)).stream().map(PlanFeedbackPeriod::getId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(pfbpIds)) { allVals = planMilestoneValService.list(new LambdaQueryWrapper() - .eq(PlanMilestoneVal::getFeedbackPeriodId, pfbpIds)); + .in(PlanMilestoneVal::getFeedbackPeriodId, pfbpIds)); } fbPeriods = planFeedbackPeriodService.list(new LambdaQueryWrapper().in(PlanFeedbackPeriod::getFeedbackId, fbIds)); } List feedbackPeriods; //判断是否最后一级wbs,是的话需要显示里程碑 - children = ObjectUtil.cloneByStream(children); - children.add(record); - List trees = BeanUtil.copyToList(ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(children)), "id", "parentId", "children"), PlanRecord.class); - Map map = this.getChildFeedbackPeriodMap(trees.get(0), planRecords, milestones, planPeriod, recordIdMap, fbPeriods, allVals); + Map map = this.getChildFeedbackPeriodMap(record, milestones, planPeriod, recordIdMap, fbPeriods, allVals); feedbackPeriods = new ArrayList<>(map.values()); if (CollUtil.isNotEmpty(feedbackPeriods)) { if (StrUtil.isNotBlank(beginDate)) { @@ -505,10 +504,10 @@ public class PlanRecordServiceImpl extends ServiceImpl allVals = new ArrayList(); if (CollUtil.isNotEmpty(fbIds)) { List pfbpIds = planFeedbackPeriodService.list(new LambdaQueryWrapper() - .eq(PlanFeedbackPeriod::getFeedbackId, fbIds)).stream().map(PlanFeedbackPeriod::getId).collect(Collectors.toList()); + .in(PlanFeedbackPeriod::getFeedbackId, fbIds)).stream().map(PlanFeedbackPeriod::getId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(pfbpIds)) { allVals = planMilestoneValService.list(new LambdaQueryWrapper() - .eq(PlanMilestoneVal::getFeedbackPeriodId, pfbpIds)); + .in(PlanMilestoneVal::getFeedbackPeriodId, pfbpIds)); } fbPeriods = planFeedbackPeriodService.list(new LambdaQueryWrapper().in(PlanFeedbackPeriod::getFeedbackId, fbIds)); } @@ -678,6 +677,14 @@ public class PlanRecordServiceImpl extends ServiceImpl getPlanRecordChildren(PlanRecord topRecord, List allPlanRecords) { + return allPlanRecords.stream() + .filter(m -> Objects.equals(m.getParentId(), topRecord.getId())) + .peek(m -> m.setChildren(getPlanRecordChildren(m, allPlanRecords))) + .collect(Collectors.toList()); + } + /** * 获取任务作业的区间数据 * @@ -725,13 +732,22 @@ public class PlanRecordServiceImpl extends ServiceImpl { return NumberUtil.div(planMilestone.getWeight(), new BigDecimal("100"), 2); }).orElse(null); - pp = NumberUtil.add(pp, NumberUtil.mul(val.getPlanVal(), weight)); - ap = NumberUtil.add(ap, NumberUtil.mul(val.getActualVal(), weight)); + if (val.getPlanVal() != null) { + pp = NumberUtil.add(pp, NumberUtil.mul(NumberUtil.div(val.getPlanVal(), new BigDecimal("100"), 2), weight)); + } + if (val.getActualVal() != null) { + ap = NumberUtil.add(ap, NumberUtil.mul(NumberUtil.div(val.getActualVal(), new BigDecimal("100"), 2), weight)); + } } - period.setPlanYdz(record.getWeightRate()); - period.setActualYdz(record.getWeightRate()); - period.setPlanPer((record.getWeightRate() == null || NumberUtil.equals(record.getWeightRate(), BigDecimal.ZERO)) ? BigDecimal.ZERO : NumberUtil.div(period.getPlanYdz(), record.getWeightRate(), 2)); - period.setActualPer((record.getWeightRate() == null || NumberUtil.equals(record.getWeightRate(), BigDecimal.ZERO)) ? BigDecimal.ZERO : NumberUtil.div(period.getActualYdz(), record.getWeightRate(), 2)); + period.setPlanPer(NumberUtil.mul(pp, new BigDecimal("100"))); + period.setActualPer(NumberUtil.mul(ap, new BigDecimal("100"))); + BigDecimal weight = record.getWeightRate() != null ? NumberUtil.div(record.getWeightRate(), new BigDecimal("100")) : null; + period.setPlanYdz(weight == null ? BigDecimal.ZERO : NumberUtil.mul(pp, weight)); + period.setActualYdz(weight == null ? BigDecimal.ZERO : NumberUtil.mul(ap, weight)); +// period.setPlanPer((record.getWeightRate() == null || NumberUtil.equals(record.getWeightRate(), BigDecimal.ZERO)) ? BigDecimal.ZERO : NumberUtil.div(period.getPlanYdz(), record.getWeightRate(), 2)); +// period.setActualPer((record.getWeightRate() == null || NumberUtil.equals(record.getWeightRate(), BigDecimal.ZERO)) ? BigDecimal.ZERO : NumberUtil.div(period.getActualYdz(), record.getWeightRate(), 2)); +// period.setPlanYdz(record.getWeightRate()); +// period.setActualYdz(record.getWeightRate()); } /** @@ -800,8 +816,7 @@ public class PlanRecordServiceImpl extends ServiceImpl getChildFeedbackPeriodMap(PlanRecord record, List planRecords, List milestones, PlanPeriod planPeriod, Map recordIdMap, List fbPeriods, List allVals) { + private Map getChildFeedbackPeriodMap(PlanRecord record, List milestones, PlanPeriod planPeriod, Map recordIdMap, List fbPeriods, List allVals) { List children = record.getChildren(); Map startMap = new HashMap<>(); for (PlanRecord child : children) { Map startMap1; + BigDecimal weight = record.getWeightRate() != null ? NumberUtil.div(record.getWeightRate(), new BigDecimal("100")) : null; if (Objects.equals(child.getWorkType(), 1)) { - PlanRecord planRecord = planRecords.stream().filter(o -> Objects.equals(o.getId(), child.getId())).findFirst().get(); - List feedbackPeriods1 = this.getPeriodMilestonesForWork(planRecord, planPeriod, milestones, recordIdMap, fbPeriods, allVals); + List feedbackPeriods1 = this.getPeriodMilestonesForWork(child, planPeriod, milestones, recordIdMap, fbPeriods, allVals); startMap1 = feedbackPeriods1.stream().collect(Collectors.toMap(PlanFeedbackPeriod::getPeriodStart, Function.identity(), (planFeedbackPeriod, planFeedbackPeriod2) -> planFeedbackPeriod)); //按权重求和 for (Map.Entry entry : startMap1.entrySet()) { PlanFeedbackPeriod fp = entry.getValue(); - BigDecimal pydz = NumberUtil.mul(fp.getPlanYdz(), record.getWeightRate()); - BigDecimal aydz = NumberUtil.mul(fp.getActualYdz(), record.getWeightRate()); + BigDecimal pydz = NumberUtil.mul(fp.getPlanYdz(), weight); + BigDecimal aydz = NumberUtil.mul(fp.getActualYdz(), weight); PlanFeedbackPeriod p = startMap.get(fp.getPeriodStart()); if (p == null) { p = ObjectUtil.cloneByStream(fp); @@ -835,11 +850,11 @@ public class PlanRecordServiceImpl extends ServiceImpl entry : startMap1.entrySet()) { PlanFeedbackPeriod fp = entry.getValue(); - BigDecimal pydz = NumberUtil.mul(fp.getPlanYdz(), record.getWeightRate()); - BigDecimal aydz = NumberUtil.mul(fp.getActualYdz(), record.getWeightRate()); + BigDecimal pydz = NumberUtil.mul(fp.getPlanYdz(), weight); + BigDecimal aydz = NumberUtil.mul(fp.getActualYdz(), weight); PlanFeedbackPeriod p = startMap.get(fp.getPeriodStart()); if (p == null) { p = ObjectUtil.cloneByStream(fp); @@ -855,9 +870,9 @@ public class PlanRecordServiceImpl extends ServiceImpl entry : startMap.entrySet()) { PlanFeedbackPeriod period = entry.getValue(); - if (record.getWeightRate() != null && BigDecimal.ZERO.compareTo(record.getWeightRate()) != 0) { - period.setPlanPer(NumberUtil.div(period.getPlanYdz(), record.getWeightRate(), 2)); - period.setActualPer(NumberUtil.div(period.getActualYdz(), record.getWeightRate(), 2)); + if (weight != null && BigDecimal.ZERO.compareTo(weight) != 0) { + period.setPlanPer(NumberUtil.div(period.getPlanYdz(), weight, 12)); + period.setActualPer(NumberUtil.div(period.getActualYdz(), weight, 12)); } } } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/ProjectGroupServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/ProjectGroupServiceImpl.java index 5f116b184..62339d9d4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/ProjectGroupServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/ProjectGroupServiceImpl.java @@ -62,7 +62,7 @@ public class ProjectGroupServiceImpl extends ServiceImpl queryPageList(HashMap param) { QueryWrapper queryWrapper = this.getQueryWrapper(param); Page page = PageUtil.getPage(param); - IPage pageList = baseMapper.queryList(page, queryWrapper); + IPage pageList = baseMapper.queryList(page, queryWrapper, param); pageList.setRecords(this.dealList(pageList.getRecords())); return pageList; } @@ -70,7 +70,7 @@ public class ProjectGroupServiceImpl extends ServiceImpl queryList(HashMap param) { QueryWrapper queryWrapper = getQueryWrapper(param); - return dealList(baseMapper.queryList(queryWrapper)); + return dealList(baseMapper.queryList(queryWrapper, param)); } private QueryWrapper getQueryWrapper(HashMap param) { diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java index 686d552f0..518a2c0ed 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java @@ -427,6 +427,7 @@ public class WorkerAdmissionServiceImpl extends ServiceImpl groupList = projectGroupService.queryList(new MapBuilder() .put("projectSn", projectSn) + .put("ignoreDataScope", 1) .build()); List organizations = partyConstructionOrganizationService.list(new LambdaQueryWrapper() .eq(PartyConstructionOrganization::getProjectSn, projectSn)); diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java index a2ed6d137..4e556aca4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java @@ -15,6 +15,7 @@ import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.xmgl.modules.baotou.entity.UserDevGroup; +import com.zhgd.xmgl.modules.baotou.plan.entity.PlanRecord; import com.zhgd.xmgl.modules.baotou.service.IProjectGroupService; import com.zhgd.xmgl.modules.baotou.service.IUserDevGroupService; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; @@ -207,6 +208,7 @@ public class SystemUserController { @ApiImplicitParam(name = "isSupervisingRoleName", required = false, value = "1监理角色名称的人", paramType = "body"), @ApiImplicitParam(name = "roleName", required = false, value = "角色名称", paramType = "body"), @ApiImplicitParam(name = "notI", required = false, value = "1不查自己", paramType = "body"), + @ApiImplicitParam(name = "createUserId", required = false, value = "创建用户id", paramType = "body"), }) @PostMapping(value = "/getProjectChilderSystemUserList") public Result> getProjectChilderSystemUserList(@RequestBody Map map) { @@ -505,4 +507,28 @@ public class SystemUserController { .eq(SystemUser::getUserId, userId)); return Result.ok(); } + + @ApiOperation(value = "更新所有ancestor", notes = "更新所有ancestor", httpMethod = "GET") + @GetMapping(value = "/updateAncestor") + public Result updateAncestor(@ApiIgnore @RequestParam HashMap param) { + List list = systemUserService.list(); + Map> pbsMap = list.stream().collect(Collectors.groupingBy(SystemUser::getUserId)); + for (Map.Entry> entry : pbsMap.entrySet()) { + List value = entry.getValue(); + value.stream().filter(o -> o.getCreateUserId().equals(0L)).forEach(o -> { + o.setCreateUserAncestor("0"); + systemUserService.updateById(o); + setAncestor(o, list); + }); + } + return Result.ok(); + } + + private void setAncestor(SystemUser planRecord, List all) { + all.stream().filter(o -> o.getCreateUserId().equals(planRecord.getId())).forEach(o -> { + o.setCreateUserAncestor(planRecord.getCreateUserAncestor() + "," + planRecord.getId()); + systemUserService.updateById(o); + setAncestor(o, all); + }); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java index dddec4c21..a26cdae90 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java @@ -245,8 +245,22 @@ public interface SystemUserMapper extends BaseMapper { /** * 更新子账号名称 + * * @param workerId * @param workerName */ void updateRealNameFromWorker(@Param("workerId") Long workerId, @Param("workerName") String workerName); + + List getChildren(Long id); + + /** + * 更新祖级列表 + * + * @param oldAncestor + * @param newAncestor + * @param projectSn + * @param id + */ + void updateAncestors(@Param("oldAncestor") String oldAncestor, @Param("newAncestor") String newAncestor, @Param("projectSn") String projectSn, @Param("id") Long id); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/SystemUserMapper.xml b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/SystemUserMapper.xml index bf5c7e09e..dad73cf5a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/SystemUserMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/xml/SystemUserMapper.xml @@ -68,6 +68,9 @@ qrte.quality_region_id = #{param.qualityRegionId} + + and t.create_user_id = #{param.createUserId} + and t.sn = #{param.projectSn} and t.account_type = 6 @@ -361,4 +364,15 @@ update system_user set real_name=#{workerName} where worker_id = #{workerId} + + + + + UPDATE system_user + SET create_user_ancestor=REPLACE(create_user_ancestor, #{oldAncestor}, #{newAncestor}) + WHERE create_user_ancestor LIKE N'${oldAncestor},${id}%' and sn = #{projectSn} and account_type = 6 + diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java index 2d7c55d06..3ed89dbe4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java @@ -1021,12 +1021,25 @@ public class SystemUserServiceImpl extends ServiceImpl() + .eq(SystemUser::getId, systemUser.getCreateUserId())); + if (pOrg != null) { + systemUser.setCreateUserAncestor(pOrg.getCreateUserAncestor() + "," + pOrg.getId()); + } + } + } systemUserMapper.insert(systemUser); addBaseRoleUsers(systemUser); } @@ -1044,8 +1057,8 @@ public class SystemUserServiceImpl extends ServiceImpl list = historyService.createHistoricProcessInstanceQuery().unfinished().list(); if (list.size() > 0) { @@ -1096,6 +1109,37 @@ public class SystemUserServiceImpl extends ServiceImpl children = baseMapper.getChildren(systemUser.getId()); + for (SystemUser child : children) { + if (child.getId().equals(systemUser.getCreateUserId())) { + throw new OpenAlertException("不能将用户移动到其自身下级"); + } + } + SystemUser pOrg = baseMapper.selectById(systemUser.getCreateUserId()); + // 修改子部门 + boolean top = systemUser.getCreateUserId() == null || systemUser.getCreateUserId() == 0; + if (top) { + systemUser.setCreateUserId(0L); + systemUser.setCreateUserAncestor("0"); + } else { + if (pOrg == null) { + throw new OpenAlertException("上级用户不存在"); + } + systemUser.setCreateUserAncestor(pOrg.getCreateUserAncestor() + "," + pOrg.getId()); + } + baseMapper.updateAncestors(oldUser.getCreateUserAncestor(), systemUser.getCreateUserAncestor(), systemUser.getProjectSn(), systemUser.getId()); + } else { + systemUser.setCreateUserAncestor(null); + } + } + systemUserMapper.updateById(systemUser); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.lambda().eq(BaseRoleUser::getUserId, systemUser.getUserId()); @@ -1529,6 +1573,10 @@ public class SystemUserServiceImpl extends ServiceImpl children = systemUserMapper.getChildren(Long.valueOf(id)); + if (CollUtil.isNotEmpty(children)) { + throw new OpenAlertException("请先删除下级账号"); + } if (Objects.equals(systemUser.getAccountType(), SystemUserAccountTypeEnum.NEW_USER.getValue())) { //新用户 deleteTenantOrSupplier(id, projectSn); diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java index 70b1ee10b..d38337220 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java @@ -728,6 +728,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl() + .eq(WorkerBlacklist::getWorkerId, id)); } private void checkExistAccount(String id) {