diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java index 9a58b975..53043808 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java @@ -182,6 +182,9 @@ public class BmsRegion2Controller { @PreAuthorize("hasRole('bms:region:query')") public R getById(@PathVariable("id") String id){ BmsRegion2 msRegion2 = bmsRegion2Service.getById(id); + if(StringUtils.hasText(msRegion2.getPid())&&msRegion2.getPid().equals("0")){ + msRegion2.setPid(null); + } if(msRegion2.getPid()!=null&&!msRegion2.getPid().equals("0")){ BmsRegion2 bmsRegion2 = bmsRegion2Service.getById(msRegion2.getPid()); msRegion2.setParentInfo(bmsRegion2); diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/impl/SyBaseService.java b/src/main/java/com/qs/serve/modules/seeyon/service/impl/SyBaseService.java index d45fbe4a..217ad191 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/impl/SyBaseService.java +++ b/src/main/java/com/qs/serve/modules/seeyon/service/impl/SyBaseService.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.seeyon.service.impl; +import cn.hutool.crypto.SecureUtil; import com.qs.serve.common.config.properties.SeeYonProperties; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.Assert; @@ -10,6 +11,9 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.util.HashMap; + /** * @author YenHex * @since 2023/1/4 @@ -24,8 +28,11 @@ public class SyBaseService { private SysUserService sysUserService; public R getBase(String url2, String title){ + String token = SecureUtil.md5(LocalDate.now().getDayOfYear()+"000"+LocalDate.now().getYear()); + HashMap headers = new HashMap<>(); + headers.put("token",token); String url = getBaseUrl(); - R result = HttpUtil.doGetResult(url+url2,null); + R result = HttpUtil.doGetResult(url+url2,headers); if(result.getStatus()!=200){ log.error("致远服务失败[{},{}] url2:{}",title,result.getMsg(),url2); } @@ -33,8 +40,11 @@ public class SyBaseService { } public R postBase(String url2,Object param,String title){ + String token = SecureUtil.md5(LocalDate.now().getDayOfYear()+"000"+LocalDate.now().getYear()); + HashMap headers = new HashMap<>(); + headers.put("token",token); String url = getBaseUrl(); - R result = HttpUtil.doPostResult(url + url2, JsonUtil.objectToJson(param),null); + R result = HttpUtil.doPostResult(url + url2, JsonUtil.objectToJson(param),headers); if(result.getStatus()!=200){ log.error("致远服务失败[{},{}]\nParam:{}",title,result.getMsg(),JsonUtil.objectToJson(param)); } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index b8b7bd9e..0d5e79a6 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java @@ -222,6 +222,18 @@ public class TbsActivityCenterGoods implements Serializable { @TableField(exist = false) private String scheduleItemName; + /** 后台参数:录入时考核期可用预算 */ + @TableField(exist = false) + private BigDecimal scheduleItemAmount; + + /** 后台参数:录入时,考核期已用金额(含申请占用金额) */ + @TableField(exist = false) + private BigDecimal scheduleItemAmountUsed; + + /** 后台参数:录入时,考核期申请占用金额 */ + @TableField(exist = false) + private BigDecimal scheduleItemAmountApply; + /** 后台参数:费用考核期项id */ @TableField(exist = false) private Long scheduleItemBudgetId; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java index 5c8f8176..2d385454 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java @@ -216,6 +216,12 @@ public class TbsBudgetCostItem implements Serializable { @NotNull(message = "费用占比不能为空") private BigDecimal scheduleItemAmount; + /** 后台参数:录入时,考核期已用金额(含申请占用金额) */ + private BigDecimal scheduleItemAmountUsed; + + /** 录入时,考核期申请占用金额 */ + private BigDecimal scheduleItemAmountApply; + /** 费用考核期项id */ @NotNull(message = "费用考核期项id不能为空") private Long scheduleItemBudgetId; diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java index b7f63e6a..66271ce3 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java @@ -2,6 +2,10 @@ package com.qs.serve.modules.tbs.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.math.BigDecimal; /** * 预算考核期项 Mapper @@ -10,5 +14,17 @@ import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; */ public interface TbsScheduleItemBudgetMapper extends BaseMapper { + /** + * 统计费用申请占用的预算金额 + * @param scheduleItemBudgetId 预算考核期id + * @return + */ + @Select("SELECT sum(`tbs_budget_cost_item`.center_goods_amount) FROM `tbs_budget_cost_item` " + + " LEFT JOIN `tbs_cost_apply` " + + " ON `tbs_budget_cost_item`.cost_apply_id = `tbs_cost_apply`.id " + + " WHERE `tbs_cost_apply`.charge_state = 1 OR `tbs_cost_apply`.charge_state = 4 " + + " AND `tbs_budget_cost_item`.id = #{scheduleItemBudgetId}") + BigDecimal totalApplyAmount(@Param("scheduleItemBudgetId") Long scheduleItemBudgetId); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java index 65367abf..ad5726b2 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java @@ -14,6 +14,7 @@ import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.mapper.TbsActivityGoodsMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; @@ -43,6 +44,7 @@ public class TbsBudgetApplicationService { private SysConfigService configService; private TbsActivityMapper activityMapper; private TbsActivityGoodsMapper activityGoodsMapper; + private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; public TbsBudgetTableVo buildResultTable(Long costApplyId){ //加载活动 @@ -209,6 +211,12 @@ public class TbsBudgetApplicationService { if(!budgetNoCondition){ this.handleNoBudgetActivity(throwEx, overspend, activityList, noBudgetActivityIds,activityAllowBudgetIdMap); } + //统计费用申请占用金额 + Map budgetItemApplyAmountMap = new HashMap<>(scheduleItemList.size()); + for (TbsScheduleItemBudget itemBudget : scheduleItemList) { + BigDecimal budgetItemApplyAmount = tbsScheduleItemBudgetMapper.totalApplyAmount(itemBudget.getId()); + budgetItemApplyAmountMap.put(itemBudget.getId(),budgetItemApplyAmount); + } //统计当前活动前置项占用预算 Map counterMap = new HashMap<>(); //匹配预算主要方法 @@ -216,7 +224,7 @@ public class TbsBudgetApplicationService { final List actUnMatchList = new ArrayList<>(); for (TbsActivityCenterGoods activityCostItem : centerGoodsList) { this.matchActivityMain(activityCostItem,throwEx, overspend, activityList, hisCostGroupByItemBudget, budgetList, - noConditionBudgetList, counterMap, actMatchList, actUnMatchList,activityAllowBudgetIdMap,activitySubjects,activityCenterList); + noConditionBudgetList, counterMap, actMatchList, actUnMatchList,activityAllowBudgetIdMap,budgetItemApplyAmountMap); } List budgetMatchList = actMatchList.stream() .map(TbsActivityCenterGoods::toBudgetCostItem).collect(Collectors.toList()); @@ -413,7 +421,7 @@ public class TbsBudgetApplicationService { * @param actMatchList 匹配预算占用的费用(含超支预算) * @param actUnMatchList 没有匹配预算的费用 * @param activityAllowBudgetIdMap 满足当前活动项的费用idMap - * @param activitySubjects 活动科目 + * @param budgetItemApplyAmountMap 统计费用申请占用金额 */ private void matchActivityMain(TbsActivityCenterGoods activityCostItem, Boolean throwEx, @@ -426,8 +434,7 @@ public class TbsBudgetApplicationService { final List actMatchList, final List actUnMatchList, final Map> activityAllowBudgetIdMap, - final List activitySubjects, - final List activityCenterList) { + Map budgetItemApplyAmountMap) { //过滤满全条件的预算 List allowBudgetIds = activityAllowBudgetIdMap.get(activityCostItem.getActivityId()); List budgetList = allBudgetList.stream().filter(obj->allowBudgetIds.contains(obj.getId())).collect(Collectors.toList()); @@ -469,7 +476,7 @@ public class TbsBudgetApplicationService { if(CollectionUtil.isNotEmpty(currentScheduleItemBudgets)){ boolean isMatch = false; for (TbsScheduleItemBudget itemBudget : currentScheduleItemBudgets) { - //历史费用 + //历史费用(含申请占用金额) BigDecimal totalUsed = TbsBudgetCostUtil.totalHisCost(hisCostGroupByItemBudget.get(itemBudget.getId())); //当前项费用 BigDecimal budgetAmount = itemBudget.getBudgetAmount(); @@ -478,12 +485,17 @@ public class TbsBudgetApplicationService { if(lastAmount==null){ lastAmount = BigDecimal.ZERO; } + //判断是否够用 if(budgetAmount.subtract(lastAmount).subtract(totalUsed).compareTo(goodsAmount)>0){ activityCostItem.setBudgetId(itemBudget.getBudgetId()); activityCostItem.setScheduleId(itemBudget.getScheduleId()); activityCostItem.setScheduleItemId(itemBudget.getScheduleItemId()); activityCostItem.setScheduleItemBudgetId(itemBudget.getId()); activityCostItem.setScheduleItemName(itemBudget.getItemName()); + activityCostItem.setScheduleItemAmount(budgetAmount); + //剩余的可用预算 + activityCostItem.setScheduleItemAmountUsed(totalUsed); + activityCostItem.setScheduleItemAmountApply(budgetItemApplyAmountMap.get(itemBudget.getId())); isMatch = true; //记录当前费用使用考核期费用 lastAmount = lastAmount.add(goodsAmount);