diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java index 9f488615..92a157f8 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java @@ -334,9 +334,19 @@ public class TbsBudgetController { * @return */ @GetMapping("/moveCenter") - public R test(String sourceId,String sourceType,String targetId,String targetType){ + public R moveCenter(String sourceId,String sourceType,String targetId,String targetType){ tbsBudgetService.moveCenterBudgetAndCostAmount(sourceId,sourceType,targetId,targetType); return R.ok(); } + + /** + * 更新周期预算金额 + * @return + */ + @PostMapping("/moveBudgetAmount") + public R moveBudgetAmount(@RequestBody @Valid TbsBudgetMoveAmountBo bo){ + tbsBudgetService.moveBudgetAmount(bo); + return R.ok(); + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetMoveAmountBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetMoveAmountBo.java new file mode 100644 index 00000000..a65d274a --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetMoveAmountBo.java @@ -0,0 +1,32 @@ +package com.qs.serve.modules.tbs.entity.bo; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 预算 Bo + * @author YenHex + * @since 2022-11-12 + */ +@Data +public class TbsBudgetMoveAmountBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @NotNull(message = "预算id不能为空") + private Long id; + + @NotNull(message = "预算子项源ID不能为空") + private List oriScheduleItemBudgetIds; + + @NotNull(message = "预算子项目标ID不能为空") + private Long targetScheduleItemBudgetId; + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java index f6453f20..b8e323bc 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java @@ -9,6 +9,7 @@ import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBatchDto; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; +import com.qs.serve.modules.tbs.entity.bo.TbsBudgetMoveAmountBo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import java.math.BigDecimal; @@ -42,5 +43,7 @@ public interface TbsBudgetService extends IService { TbsBudgetVo getEntityForExcel(TbsBudget budget); void moveCenterBudgetAndCostAmount(String sourceId,String sourceType,String targetId,String targetType); + + void moveBudgetAmount(TbsBudgetMoveAmountBo bo); } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java index cca4d626..b7bc3f18 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java @@ -28,6 +28,7 @@ import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; +import com.qs.serve.modules.tbs.entity.bo.TbsBudgetMoveAmountBo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.service.*; @@ -882,5 +883,53 @@ public class TbsBudgetServiceImpl extends ServiceImpl } + + @Override + public void moveBudgetAmount(TbsBudgetMoveAmountBo bo) { + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.eq(TbsScheduleItemBudget::getBudgetId,bo.getId()); + List scheduleItemBudgets = scheduleItemBudgetService.list(lqw2); + List scheduleItemBudgetIds = scheduleItemBudgets.stream().map(a->a.getId()).collect(Collectors.toList()); + bo.getOriScheduleItemBudgetIds().forEach(a->{ + if(!scheduleItemBudgetIds.contains(a)){ + Assert.throwEx("源ID不在请求的预算内"); + } + }); + if(!scheduleItemBudgetIds.contains(bo.getTargetScheduleItemBudgetId())){ + Assert.throwEx("目标ID不在请求的预算内"); + } + List budgetLogList = new ArrayList<>(); + SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); + TbsBudget budget = this.getById(bo.getId()); + TbsScheduleItemBudget targetTbsScheduleItemBudget = scheduleItemBudgetService.getById(bo.getTargetScheduleItemBudgetId()); + + bo.getOriScheduleItemBudgetIds().forEach(a->{ + TbsScheduleItemBudget scheduleItemBudget = scheduleItemBudgetService.getById(a); + LambdaQueryWrapper budgetLogLambdaQueryWrapper = new LambdaQueryWrapper<>(); + budgetLogLambdaQueryWrapper.eq(TbsBudgetLog::getScheduleItemBudgetId,a); + List logList = budgetLogService.list(budgetLogLambdaQueryWrapper); + BigDecimal unUserAmount = logList.stream().map(b->b.getAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + BigDecimal fixAmount = BigDecimal.ZERO.subtract(unUserAmount); + if(fixAmount.compareTo(BigDecimal.ZERO)>0){ + TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(sysUser, budget, scheduleItemBudget, + BudgetLogOptFlag.State_2,fixAmount); + budgetLogList.add(budgetLog); + + TbsBudgetLog targetBudgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(sysUser, budget, targetTbsScheduleItemBudget, + BudgetLogOptFlag.State_3,unUserAmount); + budgetLogList.add(targetBudgetLog); + }else if(fixAmount.compareTo(BigDecimal.ZERO)<0){ + TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(sysUser, budget, scheduleItemBudget, + BudgetLogOptFlag.State_3,fixAmount); + budgetLogList.add(budgetLog); + + TbsBudgetLog targetBudgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(sysUser, budget, targetTbsScheduleItemBudget, + BudgetLogOptFlag.State_2,unUserAmount); + budgetLogList.add(targetBudgetLog); + } + }); + budgetLogService.saveBatch(budgetLogList); + + } }