Browse Source

预算费用占用,添加预览table

mssql
Yen 3 years ago
parent
commit
e8d50a811c
  1. 4
      src/main/java/com/qs/serve/modules/tbs/common/util/TbsBudgetCostUtil.java
  2. 22
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  3. 9
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java
  4. 16
      src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java
  5. 32
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java
  6. 41
      src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java
  7. 2
      src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java
  8. 131
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java
  9. 4
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  10. 11
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetCostItemServiceImpl.java
  11. 4
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java

4
src/main/java/com/qs/serve/modules/tbs/common/util/TbsBudgetCostUtil.java

@ -27,7 +27,7 @@ public class TbsBudgetCostUtil {
BigDecimal total = BigDecimal.ZERO;
if(CollectionUtil.isNotEmpty(budgetCostItems)){
for (TbsBudgetCostItem item : budgetCostItems) {
total = total.add(item.getMonthAmount());
total = total.add(item.getCenterGoodsAmount());
}
}
return total;
@ -94,9 +94,11 @@ public class TbsBudgetCostUtil {
TbsBudgetCostItem budgetCostItem = CopierUtil.copy(centerGoods,new TbsBudgetCostItem());
budgetCostItem.setId(null);
budgetCostItem.setCenterGoodItemId(centerGoods.getId());
/*
budgetCostItem.setItemStartDate(itemStartDate);
budgetCostItem.setItemEndDate(itemLastDay);
budgetCostItem.setMonthAmount(currentItemAmount);
*/
budgetCostItems.add(budgetCostItem);
//跨月份重新赋值
itemStartDate = itemLastDay.plusDays(1);

22
src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java

@ -25,6 +25,7 @@ import com.qs.serve.modules.tbs.common.util.TbsBudgetCostUtil;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo;
import com.qs.serve.modules.tbs.entity.bo.TbsCostApplyBo;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.vo.TbsCostApplyVo;
import com.qs.serve.modules.tbs.service.*;
import lombok.AllArgsConstructor;
@ -50,23 +51,22 @@ import java.util.stream.Collectors;
@RequestMapping("tbs/costApply")
public class TbsCostApplyController {
private TbsBudgetApplicationService tbsBudgetApplicationService;
private TbsCostApplyService tbsCostApplyService;
private TbsActivityService tbsActivityService;
private TbsActivityCenterGoodsService tbsActivityCenterGoodsService;
private TbsBudgetService tbsBudgetService;
private TbsBudgetConditionService tbsBudgetConditionService;
private TbsBudgetCostItemService tbsBudgetCostItemService;
private BmsSupplierService bmsSupplierService;
private SysUserService sysUserService;
private SysConfigService configService;
private SeeYonService seeYonService;
private TbsBudgetApplicationService budgetApplicationService;
@GetMapping("test")
public R<?> test(Long id,Integer ex,Integer tb){
Boolean throwEx = ex == 1;
Boolean buildTableFlag = tb == 1;
TbsBudgetCostResult result = budgetApplicationService.buildBudgetCostResult(id,throwEx,buildTableFlag);
return R.ok(result);
}
/**
* 列表
* @param param

9
src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.common.util.CopierUtil;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@ -206,5 +207,13 @@ public class TbsActivityCenterGoods implements Serializable {
@TableField(exist = false)
private Long scheduleItemBudgetId;
public TbsBudgetCostItem toBudgetCostItem(){
TbsBudgetCostItem budgetCostItem = CopierUtil.copy(this,new TbsBudgetCostItem());
budgetCostItem.setId(null);
budgetCostItem.setCenterGoodItemId(this.getId());
return budgetCostItem;
}
}

16
src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java

@ -183,22 +183,6 @@ public class TbsBudgetCostItem implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate preCheckDate;
/** 预算开始时间 */
@NotNull(message = "预算开始时间不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate itemStartDate;
/** 预算结束时间 */
@NotNull(message = "预算结束时间不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate itemEndDate;
/** 月份占用金额 */
@NotNull(message = "月份占用金额不能为空")
private BigDecimal monthAmount;
/** 预算id */
@NotNull(message = "预算id不能为空")
private Long budgetId;

32
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetAmountResult.java → src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCostResult.java

@ -3,6 +3,8 @@ package com.qs.serve.modules.tbs.entity.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qs.serve.modules.tbs.entity.TbsBudgetCostItem;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@ -11,36 +13,22 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author YenHex
* @since 2022/12/5
*/
@Data
public class TbsBudgetAmountResult {
public class TbsBudgetCostResult {
/** id */
private Long scheduleItemBudgetId;
/** 匹配费用占用 */
private List<TbsBudgetCostItem> budgetMatchList;
/** 考核id */
private Long scheduleId;
/** 超支预算 */
private List<TbsBudgetCostItem> budgetUnMatchList;
/** 考核项id */
private Long scheduleItemId;
/** 考核编码 */
private String itemName;
/** 开始时间 */
private LocalDateTime startDate;
/** 结束时间 */
private LocalDateTime endDate;
/** 预算id */
private Long budgetId;
/** 预算金额 */
private BigDecimal budgetAmount;
/** 表数据封装 */
private TbsBudgetTableVo tableData;
}

41
src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetTableVo.java

@ -0,0 +1,41 @@
package com.qs.serve.modules.tbs.entity.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* @author YenHex
* @since 2022/12/6
*/
@Data
public class TbsBudgetTableVo {
private List<TopTheadHeader> topTheadHeaderList;
private List<LeftTheadHeader> leftTheadHeaderList;
private List<TableValue> tableValueList;
@Data
public static class LeftTheadHeader{
private String id;
private String label;
}
@Data
public static class TopTheadHeader{
private String id;
private String label;
private BigDecimal budgetAmount;
}
@Data
public static class TableValue{
private String topId;
private String leftId;
private BigDecimal value;
}
}

2
src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java

@ -18,7 +18,7 @@ public interface TbsActivityService extends IService<TbsActivity> {
* @param id
* @return
*/
List<TbsActivity> listByCostApplyIdAndTodoState(Long id);
List<TbsActivity> listByCostApplyId(Long id);
/**
* 修改

131
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java

@ -9,6 +9,8 @@ import com.qs.serve.modules.sys.service.SysConfigService;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.util.TbsBudgetCostUtil;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@ -49,12 +51,19 @@ public class TbsBudgetApplicationService {
*
* @param costApplyId
* @param throwEx 是否需要抛出异常
* @param buildTableFlag 创建表VO
*/
public void commit(Long costApplyId,Boolean throwEx){
public TbsBudgetCostResult buildBudgetCostResult(Long costApplyId,Boolean throwEx,Boolean buildTableFlag){
//允许超出预算标识
boolean overspend = configService.getByKey(SysConfigKey.TbsBudgetOverspend).getConfigValue().equals("1");
//加载待核销活动
List<TbsActivity> activityList = tbsActivityService.listByCostApplyIdAndTodoState(costApplyId);
//加载活动
List<TbsActivity> activityList = tbsActivityService.listByCostApplyId(costApplyId);
if(activityList.size()<1){
if(throwEx){
Assert.throwEx("当前费用未设置活动");
}
return null;
}
//考核期有关的预算id,判断逻辑为活动需要允许在
List<Long> budgetIds = new ArrayList<>();
//没有预算的活动
@ -69,7 +78,7 @@ public class TbsBudgetApplicationService {
// 构建预算费用占用明细
List<TbsActivityCenterGoods> centerGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId);
// 加载所有条件
List<TbsBudget> budgetList = tbsBudgetService.listByIds(budgetIds);
List<TbsBudget> budgetList = budgetIds.size()>0?tbsBudgetService.listByIds(budgetIds):new ArrayList<>();
List<TbsBudget> noConditionBudgetList = new ArrayList<>();
boolean budgetNoCondition = this.loadConditionByBudgetsAndMatch(budgetList, noConditionBudgetList);
//活动拦截
@ -80,10 +89,108 @@ public class TbsBudgetApplicationService {
final List<TbsActivityCenterGoods> actMatchList = new ArrayList<>();
final List<TbsActivityCenterGoods> actUnMatchList = new ArrayList<>();
for (TbsActivityCenterGoods activityCostItem : centerGoodsList) {
this.matchActivityMain(activityCostItem,throwEx, overspend, activityList, hisCostGroupByItemBudget, budgetList, noConditionBudgetList, counterMap, actMatchList, actUnMatchList);
this.matchActivityMain(activityCostItem,throwEx, overspend, activityList, hisCostGroupByItemBudget, budgetList,
noConditionBudgetList, counterMap, actMatchList, actUnMatchList);
}
List<TbsBudgetCostItem> budgetMatchList = actMatchList.stream()
.map(TbsActivityCenterGoods::toBudgetCostItem).collect(Collectors.toList());
List<TbsBudgetCostItem> budgetUnMatchList = actUnMatchList.stream()
.map(TbsActivityCenterGoods::toBudgetCostItem).collect(Collectors.toList());
TbsBudgetTableVo tableVo = null;
if(buildTableFlag){
//构建tableDTO
tableVo = this.buildBudgetTableVo(activityList, scheduleItemList, hisCostGroupByItemBudget, budgetList, budgetMatchList, budgetUnMatchList);
}
TbsBudgetCostResult result = new TbsBudgetCostResult();
result.setBudgetMatchList(budgetMatchList);
result.setBudgetUnMatchList(budgetUnMatchList);
result.setTableData(tableVo);
return result;
}
/**
* 建立费用预算表
* @param activityList
* @param scheduleItemList
* @param hisCostGroupByItemBudget
* @param budgetList
* @param budgetMatchList
* @param budgetUnMatchList
* @return
*/
private TbsBudgetTableVo buildBudgetTableVo(List<TbsActivity> activityList,
List<TbsScheduleItemBudget> scheduleItemList,
Map<Long, List<TbsBudgetCostItem>> hisCostGroupByItemBudget,
List<TbsBudget> budgetList,
List<TbsBudgetCostItem> budgetMatchList,
List<TbsBudgetCostItem> budgetUnMatchList) {
List<TbsBudgetCostItem> allBudgetItem = new ArrayList<>();
allBudgetItem.addAll(budgetMatchList);
allBudgetItem.addAll(budgetUnMatchList);
TbsBudgetTableVo tableVo = new TbsBudgetTableVo();
List<TbsBudgetTableVo.TopTheadHeader> topTheadHeaders = new ArrayList<>();
Map<Long,List<TbsBudgetCostItem>> tmpMap = allBudgetItem.stream().collect(Collectors.groupingBy(TbsBudgetCostItem::getScheduleItemBudgetId));
for (Long scheduleItemBudgetId : tmpMap.keySet()) {
TbsBudgetCostItem itemBudget = tmpMap.get(scheduleItemBudgetId).get(0);
String budgetCode = null;
for (TbsBudget budget : budgetList) {
if(budget.getId().equals(itemBudget.getBudgetId())){
budgetCode = budget.getBudgetCode();
break;
}
}
BigDecimal budgetAmount = BigDecimal.ZERO;
String scheduleItemName = null;
for (TbsScheduleItemBudget scheduleItemBudget : scheduleItemList) {
if(scheduleItemBudget.getId().equals(scheduleItemBudgetId)){
budgetAmount = scheduleItemBudget.getBudgetAmount();
scheduleItemName = scheduleItemBudget.getItemName();
break;
}
}
TbsBudgetTableVo.TopTheadHeader theadHeader = new TbsBudgetTableVo.TopTheadHeader();
theadHeader.setId(scheduleItemBudgetId+"");
theadHeader.setLabel(budgetCode+"("+scheduleItemName+")");
BigDecimal totalUsed = TbsBudgetCostUtil.totalHisCost(hisCostGroupByItemBudget.get(itemBudget.getId()));
theadHeader.setBudgetAmount(budgetAmount.subtract(totalUsed));
topTheadHeaders.add(theadHeader);
}
//自定义超额预算
TbsBudgetTableVo.TopTheadHeader overTopHeader = new TbsBudgetTableVo.TopTheadHeader();
overTopHeader.setId("0");
overTopHeader.setLabel("超额预算");
overTopHeader.setBudgetAmount(BigDecimal.ZERO);
topTheadHeaders.add(overTopHeader);
List<TbsBudgetTableVo.LeftTheadHeader> leftTheadHeaders = new ArrayList<>();
for (TbsBudgetCostItem centerGoods : allBudgetItem) {
TbsActivity activity = null;
for (TbsActivity obj : activityList) {
if(obj.getId().equals(centerGoods.getActivityId())){
activity = obj;
}
}
TbsBudgetTableVo.LeftTheadHeader theadHeader = new TbsBudgetTableVo.LeftTheadHeader();
theadHeader.setId(centerGoods.getCenterGoodItemId()+"");
String label = (activity==null?centerGoods.getActivityId():activity.getActivityCode())+"-"+centerGoods.getCenterName()+"-"
+centerGoods.getSubjectName()+"-"+centerGoods.getTargetName();
theadHeader.setLabel(label);
leftTheadHeaders.add(theadHeader);
}
List<TbsBudgetTableVo.TableValue> tableValueList = new ArrayList<>();
for (TbsBudgetCostItem costItem : allBudgetItem) {
TbsBudgetTableVo.TableValue tableValue = new TbsBudgetTableVo.TableValue();
tableValue.setTopId(costItem.getScheduleItemBudgetId()+"");
tableValue.setLeftId(costItem.getCenterGoodItemId()+"");
tableValue.setValue(costItem.getCenterGoodsAmount());
tableValueList.add(tableValue);
}
List<TbsBudgetCostItem> budgetCostItems1 = TbsBudgetCostUtil.createBudgetCostItems(actMatchList);
List<TbsBudgetCostItem> budgetCostItems2 = TbsBudgetCostUtil.createBudgetCostItems(actUnMatchList);
tableVo.setTableValueList(tableValueList);
tableVo.setTopTheadHeaderList(topTheadHeaders);
tableVo.setLeftTheadHeaderList(leftTheadHeaders);
return tableVo;
}
/**
@ -178,6 +285,10 @@ public class TbsBudgetApplicationService {
}
if(overspend){
//添加到预算超支表
activityCostItem.setBudgetId(0L);
activityCostItem.setScheduleId(0L);
activityCostItem.setScheduleItemId(0L);
activityCostItem.setScheduleItemBudgetId(0L);
actUnMatchList.add(activityCostItem);
}
}
@ -246,7 +357,8 @@ public class TbsBudgetApplicationService {
* @param noBudgetActivityIds 没有预算的活动id
* @param budgetNoCondition 标识没有条件的预算
*/
private void handleNoBudgetActivity(Boolean throwEx, boolean overspend, List<TbsActivity> activityList, List<Long> noBudgetActivityIds, boolean budgetNoCondition) {
private void handleNoBudgetActivity(Boolean throwEx, boolean overspend, List<TbsActivity> activityList,
List<Long> noBudgetActivityIds, boolean budgetNoCondition) {
if(!overspend && !budgetNoCondition && throwEx && noBudgetActivityIds.size()>0){
for (Long activityId : noBudgetActivityIds) {
for (TbsActivity activity : activityList) {
@ -267,7 +379,8 @@ public class TbsBudgetApplicationService {
* @param budgetIds
* @param noBudgetActivityIds
*/
public List<TbsScheduleItemBudget> loadScheduleBudgetAndSetting(List<TbsActivity> activityList, List<Long> budgetIds, List<Long> noBudgetActivityIds) {
public List<TbsScheduleItemBudget> loadScheduleBudgetAndSetting(List<TbsActivity> activityList,
List<Long> budgetIds, List<Long> noBudgetActivityIds) {
List<TbsScheduleItemBudget> scheduleItemList = new ArrayList<>();
Set<Long> budgetIdsSet = new HashSet<>();
Map<Long,TbsScheduleItemBudget> allAllowScheduleItemTempMap = new HashMap<>();

4
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java

@ -69,10 +69,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
@Override
public List<TbsActivity> listByCostApplyIdAndTodoState(Long id) {
public List<TbsActivity> listByCostApplyId(Long id) {
LambdaQueryWrapper<TbsActivity> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsActivity::getCostApplyId,id);
lqw.eq(TbsActivity::getActivityState, TbsActivityState.STATE_0_Todo);
//lqw.eq(TbsActivity::getActivityState, TbsActivityState.STATE_0_Todo);
return this.list(lqw);
}

11
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetCostItemServiceImpl.java

@ -2,6 +2,7 @@ package com.qs.serve.modules.tbs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.util.CollectionUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -9,6 +10,7 @@ import com.qs.serve.modules.tbs.entity.TbsBudgetCostItem;
import com.qs.serve.modules.tbs.service.TbsBudgetCostItemService;
import com.qs.serve.modules.tbs.mapper.TbsBudgetCostItemMapper;
import java.util.ArrayList;
import java.util.List;
/**
@ -23,9 +25,12 @@ public class TbsBudgetCostItemServiceImpl extends ServiceImpl<TbsBudgetCostItemM
@Override
public List<TbsBudgetCostItem> listByScheduleItemBudgetIds(List<Long> ids) {
LambdaQueryWrapper<TbsBudgetCostItem> costLqw = new LambdaQueryWrapper<>();
costLqw.in(TbsBudgetCostItem::getScheduleItemBudgetId,ids);
return this.list(costLqw);
if(CollectionUtil.isNotEmpty(ids)){
LambdaQueryWrapper<TbsBudgetCostItem> costLqw = new LambdaQueryWrapper<>();
costLqw.in(TbsBudgetCostItem::getScheduleItemBudgetId,ids);
return this.list(costLqw);
}
return new ArrayList<>();
}
}

4
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java

@ -25,8 +25,8 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl<TbsScheduleIte
@Override
public List<TbsScheduleItemBudget> betweenDateList(LocalDate startDate, LocalDate endDate) {
LambdaQueryWrapper<TbsScheduleItemBudget> lqw = new LambdaQueryWrapper<>();
lqw.ge(TbsScheduleItemBudget::getStartDate,startDate);
lqw.le(TbsScheduleItemBudget::getEndDate,endDate);
lqw.le(TbsScheduleItemBudget::getStartDate,startDate);
lqw.ge(TbsScheduleItemBudget::getEndDate,endDate);
return this.list(lqw);
}

Loading…
Cancel
Save