kongdeqiang
2025-03-31 b0fd64098134466414d22af52baa823245839070
platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/InvestmentPlanController.java
@@ -3,18 +3,17 @@
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.by4cloud.platformx.common.core.util.R;
import com.by4cloud.platformx.common.log.annotation.SysLog;
import com.by4cloud.platformx.device.constant.MaxSizeContant;
import com.by4cloud.platformx.device.entity.DeviceDemandPlan;
import com.by4cloud.platformx.device.entity.InvestmentPlan;
import com.by4cloud.platformx.device.service.DeviceDemandPlanService;
import com.by4cloud.platformx.device.service.InvestmentPlanService;
import com.by4cloud.platformx.device.service.JcMaxSizeService;
import com.by4cloud.platformx.device.entity.*;
import com.by4cloud.platformx.device.service.*;
import com.by4cloud.platformx.device.util.NumUtils;
import com.github.yulichang.adapter.base.ITableInfoAdapter;
import org.springframework.security.access.prepost.PreAuthorize;
import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -25,8 +24,8 @@
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 年度投资计划主表
@@ -42,8 +41,11 @@
public class InvestmentPlanController {
    private final  InvestmentPlanService investmentPlanService;
    private final  InvestmentPlanItemService investmentPlanItemService;
    private final DeviceDemandPlanService deviceDemandPlanService;
    private final DeviceDemandSubService deviceDemandSubService;
    private final JcMaxSizeService maxSizeService;
    private final DeviceService deviceService;
    /**
     * 分页查询
@@ -72,7 +74,25 @@
    @GetMapping("/{id}" )
    @PreAuthorize("@pms.hasPermission('device_investmentPlan_view')" )
    public R getById(@PathVariable("id" ) Long id) {
        return R.ok(investmentPlanService.getById(id));
      Map<String,Object> map = new HashMap<>();
      InvestmentPlan plan = investmentPlanService.getById(id);
      QueryWrapper<InvestmentPlanItem> wrapper = new QueryWrapper<>();
      wrapper.lambda()
            .eq(InvestmentPlanItem::getPlanId,plan.getId())
            .orderByAsc(InvestmentPlanItem::getMonth);
      List<InvestmentPlanItem> list = investmentPlanItemService.list(wrapper);
      List<Map<String,Object>> resultList = new ArrayList<>();
      for (Map.Entry<Integer, List<InvestmentPlanItem>> listEntry : list.stream().collect(Collectors.groupingBy(item -> item.getMonth())).entrySet()) {
         Integer month = listEntry.getKey();
         List<InvestmentPlanItem> value = listEntry.getValue();
         Map<String,Object> entry = new HashMap<>();
         entry.put("month",month);
         entry.put("value",value);
         resultList.add(entry);
      }
      map.put("plan",plan);
      map.put("items",resultList);
      return R.ok(map);
    }
    /**
@@ -85,9 +105,50 @@
    @PostMapping
    @PreAuthorize("@pms.hasPermission('device_investmentPlan_add')" )
    public R save(@RequestBody InvestmentPlan investmentPlan) {
      List<DeviceDemandSub> subs = new ArrayList<>();
      investmentPlan.setNumber(maxSizeService.nextNo(MaxSizeContant.TZPLAN_NUM));
      investmentPlanService.save(investmentPlan);
      String planIds = investmentPlan.getPlanIds();
      String[] split = planIds.split(",");
      for (String s : split) {
         DeviceDemandPlan demandPlan = deviceDemandPlanService.getById(Long.parseLong(s));
         QueryWrapper<DeviceDemandPlan> wrapper = new QueryWrapper<>();
         wrapper.lambda()
               .eq(DeviceDemandPlan::getPlanId,demandPlan.getId());
         List<DeviceDemandPlan> list = deviceDemandPlanService.list(wrapper);
         List<Long> collect = list.stream().map(DeviceDemandPlan::getId).collect(Collectors.toList());
         for (Long l : collect) {
            //合并子项
            List<DeviceDemandSub> byPlanId = deviceDemandSubService.getByPlanId(l);
            subs.addAll(byPlanId);
         }
      }
      List<InvestmentPlanItem> items = new ArrayList<>();
      for (Map.Entry<Integer, List<DeviceDemandSub>> integerListEntry : subs.stream().collect(Collectors.groupingBy(item -> item.getMonth())).entrySet()) {
         Integer month = integerListEntry.getKey();
         List<DeviceDemandSub> subList = integerListEntry.getValue();
         for (Map.Entry<Long, List<DeviceDemandSub>> deviceEntry : subList.stream().collect(Collectors.groupingBy(item -> item.getDeviceId())).entrySet()) {
            Long deviceId = deviceEntry.getKey();
            List<DeviceDemandSub> value = deviceEntry.getValue();
            double total = value.stream().mapToDouble(DeviceDemandSub::getPrice).sum();
            Device device = deviceService.getById(deviceId);
            InvestmentPlanItem item = new InvestmentPlanItem();
            item.setYear(value.get(0).getYear());
            item.setPlanId(investmentPlan.getId());
            item.setMonth(month);
            item.setDeviceId(deviceId);
            item.setNumber(device.getNumber());
            item.setSpecification(device.getSpecification());
            item.setNum(value.size());
            item.setUnit(device.getUnit());
            item.setPrice(device.getPrice());
            item.setAmount(total);
            items.add(item);
         }
      }
      investmentPlanItemService.saveBatch(items);
      return R.ok();
    }