From cb1fcfdeb5d9c28ad1abf41ba27abd06b1abe3d9 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 27 Dec 2023 15:46:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=91=A8=E6=9C=9F=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/update.sql | 5 + .../BirBudgetScheduleController.java | 73 +++++++++++ .../service/GoodsApplicationService.java | 3 + .../modules/tbs/common/TbsSeeYonConst.java | 1 + .../dto/TbsScheduleItemBudgetIdDto.java | 18 +++ .../entity/dto/TbsScheduleItemWithAmount.java | 63 ++++++++++ .../tbs/entity/so/TbsScheduleItemSearch.java | 54 ++++++++ .../mapper/TbsScheduleItemBudget2Mapper.java | 72 +++++++++++ .../service/TbsScheduleItemBudgetService.java | 9 ++ .../TbsScheduleItemBudgetServiceImpl.java | 81 ++++++++++++ .../java/com/qs/serve/task/GoodsTask.java | 8 ++ .../tbs/TbsScheduleItemBudget2Mapper.xml | 118 ++++++++++++++++++ 12 files changed, 505 insertions(+) create mode 100644 doc/update.sql create mode 100644 src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemBudgetIdDto.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemWithAmount.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/so/TbsScheduleItemSearch.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudget2Mapper.java create mode 100644 src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml diff --git a/doc/update.sql b/doc/update.sql new file mode 100644 index 00000000..50998a79 --- /dev/null +++ b/doc/update.sql @@ -0,0 +1,5 @@ + +update tbs_budget_condition set brand_id = SUBSTRING_INDEX(target_level_path_ids,'_',1) + +update tbs_budget set center_combo = concat(center_type,'_',center_id) + diff --git a/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java b/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java new file mode 100644 index 00000000..3e24420f --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java @@ -0,0 +1,73 @@ +package com.qs.serve.modules.bir.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.tbs.entity.TbsSchedule; +import com.qs.serve.modules.tbs.entity.TbsScheduleItem; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; +import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudget2Mapper; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemMapper; +import com.qs.serve.modules.tbs.mapper.TbsScheduleMapper; +import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/12/27 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("bir/budget") +public class BirBudgetScheduleController { + + private final TbsScheduleItemBudgetService scheduleItemBudgetService; + private final TbsScheduleItemBudget2Mapper scheduleItemBudget2Mapper; + private final TbsScheduleItemMapper tbsScheduleItemMapper; + private final TbsScheduleMapper tbsScheduleMapper; + + + /** + * 查询周期使用情况 + * @param query + * @return + */ + @GetMapping("/budgetItemUsedList") + public R> queryBudgetItemUsed(TbsScheduleItemSearch query){ + query.initCenterCombo(); + List scheduleItemBudgetIdDtoList = scheduleItemBudget2Mapper.listItemBudgetIds(query); + List scheduleItemIds = scheduleItemBudgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemId).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(scheduleItemIds)){ + return R.ok(); + } + List scheduleItemList = tbsScheduleItemMapper.selectBatchIds(scheduleItemIds); + List scheduleList = tbsScheduleMapper.selectList(new QueryWrapper<>()); + List scheduleItemWithAmounts = scheduleItemBudgetService.listScheduleItemAmountByIds(scheduleItemBudgetIdDtoList); + for (TbsScheduleItemWithAmount itemWithAmount : scheduleItemWithAmounts) { + for (TbsScheduleItem scheduleItem : scheduleItemList) { + if(itemWithAmount.getScheduleItemId().equals(scheduleItem.getId())){ + itemWithAmount.setScheduleItemName(scheduleItem.getItemName()); + for (TbsSchedule schedule : scheduleList) { + if(schedule.getId().equals(scheduleItem.getScheduleId())){ + itemWithAmount.setScheduleName(schedule.getName()); + break; + } + } + break; + } + } + } + return R.ok(scheduleItemWithAmounts); + } + +} diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsApplicationService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsApplicationService.java index fd14aea5..268dc86b 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsApplicationService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsApplicationService.java @@ -43,6 +43,9 @@ public class GoodsApplicationService { private final SeeYonRequestBaseService seeYonRequestBaseService; private final GoodsCrmSkuMapper goodsCrmSkuMapper; + public void syncSkuPrice(){ + R result = seeYonRequestBaseService.getBase(TbsSeeYonConst.ERP_CUS_INV_SYNC_PRICE,""); + } public void syncStandGoods(boolean isFullUpdate){ //兼容任务调度 diff --git a/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java b/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java index 5e4bedc7..76a50592 100644 --- a/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java +++ b/src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java @@ -90,6 +90,7 @@ public interface TbsSeeYonConst { String ERP_CUS_AMOUNT = "/erp/customer/amount"; String ERP_CUS_INV_PRICE = "/erp/inventory/invPrices"; String ERP_CUS_INV_STAND = "/erp/inventory/standList"; + String ERP_CUS_INV_SYNC_PRICE = "/erp/inventory/syncPrice"; String ERP_CUS_INV_SPECIAL = "/erp/inventory/specialSyncCrm"; String ERP_CUS_INV_SHELF = "/erp/inventory/shelfSyncCrm"; String ERP_ORDER_CREATE = "/erp/order/create"; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemBudgetIdDto.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemBudgetIdDto.java new file mode 100644 index 00000000..15f4c8c4 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemBudgetIdDto.java @@ -0,0 +1,18 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/6/29 + */ +@Data +public class TbsScheduleItemBudgetIdDto { + + Long scheduleItemId; + + Long scheduleItemBudgetId; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemWithAmount.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemWithAmount.java new file mode 100644 index 00000000..409283f0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsScheduleItemWithAmount.java @@ -0,0 +1,63 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/6/29 + */ +@Data +public class TbsScheduleItemWithAmount { + + /** + * 周期项ID + */ + Long scheduleItemId; + + String scheduleName; + + String scheduleItemName; + + /** + * 预算总额 + */ + BigDecimal finalAmt = BigDecimal.ZERO; + + /** + * 当前占用中的预算 + */ + BigDecimal allUsingAmt = BigDecimal.ZERO; + + /** + * 申请中的预算占用 + */ + BigDecimal allCheckingAmt = BigDecimal.ZERO; + + /** + * 费用申请-申请中的预算 + */ + BigDecimal costUsingAmt = BigDecimal.ZERO; + + /** + * 费用申请-申请中的预算 + */ + BigDecimal costCheckingAmt = BigDecimal.ZERO; + + /** + * 政策-申请中的预算 + */ + BigDecimal policyUsingAmt = BigDecimal.ZERO; + + /** + * 政策-申请中的预算 + */ + BigDecimal policyCheckingAmt = BigDecimal.ZERO; + + /** + * 剩余预算(预算总额-当前占用的预算) + */ + BigDecimal surplusAmt = BigDecimal.ZERO; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsScheduleItemSearch.java b/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsScheduleItemSearch.java new file mode 100644 index 00000000..6c289c74 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsScheduleItemSearch.java @@ -0,0 +1,54 @@ +package com.qs.serve.modules.tbs.entity.so; + +import com.qs.serve.common.util.CollectionUtil; +import lombok.Data; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/12/27 + */ +@Data +public class TbsScheduleItemSearch { + + /** + * 成本中心组合值列表,格式:centerType_centerId + */ + private List centerCombos; + + /** + * 周期ID + */ + private List scheduleItemIds; + + /** + * 品牌ID + */ + private List brandIds; + + /** + * 成本中心列表 + */ + private List centerList; + + @Data + public static class CenterItem{ + + private String centerType; + + private String centerId; + + } + + /** + * 调整数据结构 + */ + public void initCenterCombo(){ + if(CollectionUtil.isNotEmpty(centerList)){ + this.centerCombos = centerList.stream().map(a-> a.getCenterType()+"_"+a.getCenterId()).collect(Collectors.toList()); + } + } + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudget2Mapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudget2Mapper.java new file mode 100644 index 00000000..8842995b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudget2Mapper.java @@ -0,0 +1,72 @@ +package com.qs.serve.modules.tbs.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogPreAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; +import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 预算考核期项 Mapper + * @author YenHex + * @date 2022-11-08 + */ +public interface TbsScheduleItemBudget2Mapper extends BaseMapper { + + /** + * 查询TbsScheduleItemBudget.id + * @param query + * @return + */ + List listItemBudgetIds(@Param("query") TbsScheduleItemSearch query); + + + /** + * 统计Schedule金额 + * @param ids scheduleItemIds + * @param optNumbers 包含 + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getSumAmtInList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + + /** + * 统计Schedule金额 + * @param ids scheduleItemIds + * @param optNumbers 不包含 + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getSumAmtNotInList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + + + /** + * 统计审批中的政策,占用多少的预算 + * @param ids + * @param optNumbers + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getPolicyCheckingList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + /** + * 统计审批中的费用,占用多少的预算 + * @param ids + * @param optNumbers + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getCostCheckingList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java index 273ee972..aaa2ef8c 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; import java.time.LocalDate; import java.util.List; @@ -28,5 +30,12 @@ public interface TbsScheduleItemBudgetService extends IService listScheduleAmountByIds(List scheduleItemBudgetIds); + /** + * 统计预算周期使用情况 + * @param budgetIdDtoList + * @return + */ + List listScheduleItemAmountByIds(List budgetIdDtoList); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java index 740697f9..edd075f2 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudget2Mapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -28,6 +31,8 @@ import java.util.stream.Collectors; @AllArgsConstructor public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl implements TbsScheduleItemBudgetService { + private final TbsScheduleItemBudget2Mapper scheduleItemBudget2Mapper; + @Override public List betweenDateList(LocalDate startDate, LocalDate endDate) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); @@ -125,5 +130,81 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl listScheduleItemAmountByIds(List scheduleItemBudgetIdDtoList) { + + List scheduleItemBudgetIds = scheduleItemBudgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemBudgetId).collect(Collectors.toList()); + List scheduleItemIds = scheduleItemBudgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemId).collect(Collectors.toList()); + + // 预算金额 + List finalList = scheduleItemBudget2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); + // 被占用金额 + List usedList = scheduleItemBudget2Mapper.getSumAmtNotInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); + // 费用使用金额 + List costUsedList = scheduleItemBudget2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.finalCostOptFlag); + // 政策使用金额 + List policyUsedList = scheduleItemBudget2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List policyCheckingList = scheduleItemBudget2Mapper.getPolicyCheckingList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List costCheckingList = scheduleItemBudget2Mapper.getCostCheckingList(scheduleItemBudgetIds, BudgetLogOptFlag.finalCostOptFlag); + + List result = new ArrayList<>(); + + for (Long scheduleItemId : scheduleItemIds) { + TbsScheduleItemWithAmount withAmount = new TbsScheduleItemWithAmount(); + withAmount.setScheduleItemId(scheduleItemId); + for (TbsBudgetLogWithAmount obj : finalList) { + if(scheduleItemId.equals(obj.getId())){ + withAmount.setFinalAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : usedList) { + if(scheduleItemId.equals(obj.getId())){ + withAmount.setAllUsingAmt(obj.getAmt()); + break; + } + } + + for (TbsBudgetLogWithAmount obj : costUsedList) { + if(scheduleItemId.equals(obj.getId())){ + withAmount.setCostUsingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : policyUsedList) { + if(scheduleItemId.equals(obj.getId())){ + withAmount.setPolicyUsingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : costCheckingList) { + if(scheduleItemId.equals(obj.getId())){ + withAmount.setCostCheckingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : policyCheckingList) { + if(scheduleItemId.equals(obj.getId())){ + withAmount.setPolicyCheckingAmt(obj.getAmt()); + break; + } + } + //因为log统计为负数,需要把数值取正 + withAmount.setAllUsingAmt(withAmount.getAllUsingAmt().negate()); + withAmount.setCostUsingAmt(withAmount.getCostUsingAmt().negate()); + withAmount.setCostCheckingAmt(withAmount.getCostCheckingAmt().negate()); + withAmount.setPolicyUsingAmt(withAmount.getPolicyUsingAmt().negate()); + withAmount.setPolicyCheckingAmt(withAmount.getPolicyCheckingAmt().negate()); + //计算剩余及审批合计 + withAmount.setAllCheckingAmt(withAmount.getCostCheckingAmt().add(withAmount.getPolicyCheckingAmt())); + withAmount.setSurplusAmt(withAmount.getFinalAmt().subtract(withAmount.getAllUsingAmt())); + result.add(withAmount); + } + return result; + } + } diff --git a/src/main/java/com/qs/serve/task/GoodsTask.java b/src/main/java/com/qs/serve/task/GoodsTask.java index 873ad504..63054584 100644 --- a/src/main/java/com/qs/serve/task/GoodsTask.java +++ b/src/main/java/com/qs/serve/task/GoodsTask.java @@ -34,4 +34,12 @@ public class GoodsTask { goodsApplicationService.syncStandGoods(false); } + /** + * 同步价格 + */ + @Scheduled(cron="0 0 1 * * ?") + public void syncInvPrice(){ + goodsApplicationService.syncSkuPrice(); + } + } diff --git a/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml b/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml new file mode 100644 index 00000000..00c4ed06 --- /dev/null +++ b/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + +