|
@@ -558,7 +558,6 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
*/
|
|
|
@Override
|
|
|
public ProjectCostBudgetVO3 MonthPlanOverview(String planDate) {
|
|
|
- //没有用户
|
|
|
Long userId = SecureUtil.getUserId();
|
|
|
//初始化时间段
|
|
|
String[] split = planDate.split("-");
|
|
@@ -567,7 +566,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
LocalDate startDate;
|
|
|
LocalDate endDate;
|
|
|
startDate = LocalDate.of(year,month,1);
|
|
|
- if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(month)){
|
|
|
+ if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(month+"")){
|
|
|
endDate = LocalDate.of(year,month,31);
|
|
|
}else {
|
|
|
if (month != 2) {
|
|
@@ -581,6 +580,41 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
}
|
|
|
}
|
|
|
ProjectCostBudgetVO3 vo3 = baseMapper.MonthPlanOverview(userId, startDate, endDate);
|
|
|
+ //获取转移任务总数
|
|
|
+ Integer total = baseMapper.getChangePlanTotal(userId, startDate, endDate);
|
|
|
+ vo3.setTransferPlan(total);
|
|
|
+ //获取日志未填写总数,获取创建时间,从创建时间当天开始填写日志
|
|
|
+ LocalDate creatTime =baseMapper.getUserCreatTime(userId);
|
|
|
+ LocalDate start;
|
|
|
+ LocalDate end;
|
|
|
+ Integer days = 0;
|
|
|
+ if (startDate.isAfter(LocalDate.now())){
|
|
|
+ return vo3;
|
|
|
+ }
|
|
|
+ //如果创建时间大于查询结束时间,就不用计算日志
|
|
|
+ if (!creatTime.isAfter(endDate)){
|
|
|
+ //创建时间小于查询结束时间,则判断判断时间是否大于查询开始时间
|
|
|
+ if (creatTime.isAfter(startDate)){
|
|
|
+ //创建时间大于查询开始时间,则查询开始时间变成创建时间
|
|
|
+ start = creatTime;
|
|
|
+ }else {
|
|
|
+ //创建时间小于查询开始时间,则开始时间变成查询开始时间
|
|
|
+ start = startDate;
|
|
|
+ }
|
|
|
+ //如果查询结束时间大于今天,则今天为查询结束时间
|
|
|
+ if (endDate.isAfter(LocalDate.now())){
|
|
|
+ end = LocalDate.now();
|
|
|
+ }else {
|
|
|
+ //查询结束时间小于今天,则查询结束时间为结束时间
|
|
|
+ end = endDate;
|
|
|
+ }
|
|
|
+ //获取用户当月填写的日志
|
|
|
+ Integer logTotal = baseMapper.getUserMonthLog(userId,start,end);
|
|
|
+ //根据开始时间,结束时间获取工作日应该填写
|
|
|
+ days = CommonUtil.getWorkDays(start, end);
|
|
|
+ //计算 应该填写-实际填写
|
|
|
+ vo3.setNotFilledLog(days - logTotal);
|
|
|
+ }
|
|
|
return vo3;
|
|
|
}
|
|
|
|
|
@@ -1889,6 +1923,74 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * //根据项目id获取项目截至目前-每个项目环节的维护支出,按项目环节返回
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<Long,BigDecimal> getAllMaintainCost8(Long projectId) {
|
|
|
+ //获取当前项目-指定费用分类的-维护支出,如果没有返回null
|
|
|
+ List<ProjectCostBudget> plans = baseMapper.getAllMaintainPlan2(projectId);
|
|
|
+ if (plans != null && plans.size() > 0) {
|
|
|
+ //分离出主计划和子计划,建立主计划的id,set集合
|
|
|
+ Set<Long> bab = new HashSet<>();
|
|
|
+ for (ProjectCostBudget plan : plans) {
|
|
|
+ if (plan.getParentId() == 0) {
|
|
|
+ bab.add(plan.getId());
|
|
|
+ } else {
|
|
|
+ bab.add(plan.getParentId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询出所有维护计划
|
|
|
+ List<ProjectCostBudget> budgets = this.listByIds(bab);
|
|
|
+ //通过项目id查询出所有的合同,如果项目没有合同则提示,项目没有合同,无法计算维护支出
|
|
|
+ ControlContractInfo contract = contractService.getOne(
|
|
|
+ new LambdaQueryWrapper<ControlContractInfo>().in(ControlContractInfo::getProjectId, projectId));
|
|
|
+ if (contract == null){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //返回值
|
|
|
+ Map<Long,BigDecimal> map = new HashMap<>();
|
|
|
+ //获取合同时间,获取多少个月
|
|
|
+ LocalDate startTime = contract.getStartTime();
|
|
|
+ LocalDate endTime = contract.getEndTime();
|
|
|
+ // 当前日期和合同开始时间比较,相差多少月 月 * 每个月维护费 = 当前项目截至当前的所有维护费
|
|
|
+ if (LocalDate.now().compareTo(startTime) < 0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ int years = endTime.getYear() - startTime.getYear();
|
|
|
+ int months = years * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
|
|
|
+ //每个项目的维护总和 / 多少个月 = 该项目每个月的维护费
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ for (ProjectCostBudget l : budgets) {
|
|
|
+ big = big.add(l.getBudgetStaffCost());
|
|
|
+ if (map.get(l.getProjectProcess()) == null){
|
|
|
+ map.put(l.getProjectProcess(),l.getBudgetStaffCost());
|
|
|
+ }else {
|
|
|
+ map.put(l.getProjectProcess(),map.get(l.getProjectProcess()).add(l.getBudgetStaffCost()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (big.compareTo(new BigDecimal(0)) == 0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //如果合同结束时间比当前大,就用当前时间
|
|
|
+ if (endTime.compareTo(LocalDate.now()) > 0){
|
|
|
+ endTime = LocalDate.now();
|
|
|
+ }
|
|
|
+ int year = LocalDate.now().getYear() - startTime.getYear();
|
|
|
+ int month = year * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
|
|
|
+ //目前是每个部门总金额,先计算每个月的总费用,再乘以month个月
|
|
|
+ for (Long process: map.keySet()) {
|
|
|
+ BigDecimal count = map.get(process);
|
|
|
+ //获得每个月的维护费
|
|
|
+ BigDecimal scale = count.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ map.put(process,scale.multiply(new BigDecimal(month)));
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* //获取项目的维护预算
|
|
|
* @return
|