diff --git a/src/main/java/mjkf/xinke/main/controller/BudgetController.java b/src/main/java/mjkf/xinke/main/controller/BudgetController.java index 3b8c741..6ce92f6 100644 --- a/src/main/java/mjkf/xinke/main/controller/BudgetController.java +++ b/src/main/java/mjkf/xinke/main/controller/BudgetController.java @@ -22,10 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; /** *

@@ -62,26 +59,8 @@ public class BudgetController { // 转换查询结果为键值对 材料id,月份 => 价格 var priceMap = pricePublishService.getPriceMapEntryByMaterialIdAndMonth(query); // 各月份求和 - var totalMap = new HashMap(); - var budgetItemList = new ArrayList(); - for (var item: params.getItems()) { - var meta = new ArrayList>(); - for (var month: params.getMonths()) { - var key = item.getName() + month.toString(); - var price = priceMap.getOrDefault(key, 0); - meta.add(Map.of( - "month", month, - "total", price * item.getQuantity(), - "price", price - ) - ); - var total = totalMap.getOrDefault(month.toString(), 0); - totalMap.put(month.toString(), total + price * item.getQuantity()); - // 遍历月份 获取各材料各月份总数 - } - var budgetItem = new BudgetItem(item, meta); - budgetItemList.add(budgetItem); - } + var totalMap = params.getTotalMap(priceMap); + var budgetItemList = params.getBudgetItemList(priceMap); // 入库 var budget = new Budget(params, user, totalMap); budgetService.save(budget); @@ -138,5 +117,38 @@ public class BudgetController { return FuHttpResponse.Builder().dataResponse(result).build(); } + @ApiOperation("预算编辑") + @PutMapping("/{id}") + public HttpResponse edit ( + @ApiParam("id") @PathVariable String id, + @ApiParam("参数") @RequestBody BudgetCreateRequest params + ) throws Exception { + params.check(); + var user = StpLoginUserUtil.getLoginUser(); + + var budget = budgetService.getById(id); + if (budget == null) { + throw new NcHttpException(HttpErrorResponseEnum.BUDGET_NOT_FOUND); + } + + // 查询各月份材料价格 + LambdaQueryWrapper query = pricePublishService.getQuery(params); + // 转换查询结果为键值对 材料id,月份 => 价格 + var priceMap = pricePublishService.getPriceMapEntryByMaterialIdAndMonth(query); + // 各月份求和 + var totalMap = params.getTotalMap(priceMap); + var budgetItemList = params.getBudgetItemList(priceMap); + // 入库 + budget.update(params, user, totalMap); + budgetService.updateById(budget); + budgetItemService.remove(new LambdaQueryWrapper().eq(BudgetItem::getBudgetId, id)); + for (var budgetItem: budgetItemList) { + budgetItem.setBudgetId(budget.getId()); + budgetItemService.save(budgetItem); + } + + return FuHttpResponse.Builder().dataResponse(budgetItemList).build(); + } + // todo 在价格发布创建时补全材料id } diff --git a/src/main/java/mjkf/xinke/main/model/db/Budget.java b/src/main/java/mjkf/xinke/main/model/db/Budget.java index 5ba938e..8de522a 100644 --- a/src/main/java/mjkf/xinke/main/model/db/Budget.java +++ b/src/main/java/mjkf/xinke/main/model/db/Budget.java @@ -74,7 +74,11 @@ public class Budget extends Model { public Budget() {} - public Budget(BudgetCreateRequest params, SaBaseLoginUser user, HashMap totalMap) { + public Budget(BudgetCreateRequest params, SaBaseLoginUser user, Map totalMap) { + this.update(params, user, totalMap); + } + + public void update(BudgetCreateRequest params, SaBaseLoginUser user, Map totalMap) { this.name = params.getName(); this.amount = params.getItems().stream().mapToInt(item -> item.getTotalPrice()).sum(); diff --git a/src/main/java/mjkf/xinke/main/model/vo/BudgetCreateRequest.java b/src/main/java/mjkf/xinke/main/model/vo/BudgetCreateRequest.java index f5bca1f..317469f 100644 --- a/src/main/java/mjkf/xinke/main/model/vo/BudgetCreateRequest.java +++ b/src/main/java/mjkf/xinke/main/model/vo/BudgetCreateRequest.java @@ -3,9 +3,13 @@ package mjkf.xinke.main.model.vo; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import mjkf.xinke.main.model.db.BudgetItem; import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Data public class BudgetCreateRequest { @@ -47,4 +51,39 @@ public class BudgetCreateRequest { @JsonProperty(value = "total_price") private Integer totalPrice; } + + public Map getTotalMap(Map priceMap) { + var params = this; + var totalMap = new HashMap(); + for (var item: params.getItems()) { + for (var month: params.getMonths()) { + var key = item.getName() + month.toString(); + var price = priceMap.getOrDefault(key, 0); + var total = totalMap.getOrDefault(month.toString(), 0); + totalMap.put(month.toString(), total + price * item.getQuantity()); + } + } + return totalMap; + } + + public List getBudgetItemList(Map priceMap) { + var params = this; + var budgetItemList = new ArrayList(); + for (var item: params.getItems()) { + var meta = new ArrayList>(); + for (var month: params.getMonths()) { + var key = item.getName() + month.toString(); + var price = priceMap.getOrDefault(key, 0); + meta.add(Map.of( + "month", month, + "total", price * item.getQuantity(), + "price", price + ) + ); + } + var budgetItem = new BudgetItem(item, meta); + budgetItemList.add(budgetItem); + } + return budgetItemList; + } }