From b0fd64098134466414d22af52baa823245839070 Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期一, 31 三月 2025 16:48:18 +0800
Subject: [PATCH] fix: 年度投资计划接口

---
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/InvestmentPlanController.java     |   77 ++++++++++++++++++++++++++++++++++----
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceDemandSubServiceImpl.java |   14 ++++--
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlanItem.java               |    4 ++
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlan.java                   |    7 +++
 4 files changed, 89 insertions(+), 13 deletions(-)

diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlan.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlan.java
index c43e667..c81fd04 100644
--- a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlan.java
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlan.java
@@ -1,5 +1,6 @@
 package com.by4cloud.platformx.device.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.by4cloud.platformx.common.data.mybatis.BaseModel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -9,7 +10,9 @@
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.Transient;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author kdq
@@ -74,4 +77,8 @@
 	@Column(columnDefinition="VARCHAR(64) comment '鎶曡祫璁″垝ids'")
 	private String planIds;
 
+	@Transient
+	@TableField(exist = false)
+	private List<InvestmentPlanItem> subList;
+
 }
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlanItem.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlanItem.java
index cbf7b9c..dc62884 100644
--- a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlanItem.java
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/InvestmentPlanItem.java
@@ -22,6 +22,10 @@
 @Entity
 @Table(appliesTo = "investment_plan_item", comment = "骞村害鎶曡祫璁″垝瀛愯〃")
 public class InvestmentPlanItem extends BaseModel<InvestmentPlanItem> {
+
+	@Schema(description = "璁″垝id")
+	@Column(columnDefinition="long comment '璁″垝id'")
+	private Long planId;
 	@Schema(description = "骞村害")
 	@Column(columnDefinition="int comment '骞村害'")
 	private Integer year;
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/InvestmentPlanController.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/InvestmentPlanController.java
index 24d7d1b..ce63b93 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/InvestmentPlanController.java
+++ b/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();
     }
 
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceDemandSubServiceImpl.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceDemandSubServiceImpl.java
index 9171963..991a730 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceDemandSubServiceImpl.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceDemandSubServiceImpl.java
@@ -32,10 +32,14 @@
 		List<DeviceDemandTotal> deviceDemandTotals = totalMapper.selectList(wrapper);
 		List<Long> collect = deviceDemandTotals.stream().map(DeviceDemandTotal::getId).collect(Collectors.toList());
 
-		QueryWrapper<DeviceDemandSub> subwrapper = new QueryWrapper<>();
-		subwrapper.lambda()
-				.in(DeviceDemandSub::getTotalId,collect);
-		List<DeviceDemandSub> subs = list(subwrapper);
-		return subs;
+		if(collect !=null && collect.size()>0){
+			QueryWrapper<DeviceDemandSub> subwrapper = new QueryWrapper<>();
+			subwrapper.lambda()
+					.in(DeviceDemandSub::getTotalId,collect);
+			List<DeviceDemandSub> subs = list(subwrapper);
+			return subs;
+		}else {
+			return null;
+		}
 	}
 }

--
Gitblit v1.9.1