| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 年度投资计划主表 |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 分页查询 |
| | |
| | | @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); |
| | | } |
| | | |
| | | /** |
| | |
| | | @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(); |
| | | } |
| | | |