From 9635b814bb601170c06ff1fa1695f4d8be55eb19 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 25 Dec 2023 11:42:03 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../goods/controller/GoodsSkuController.java | 4 +- .../third/util/ThirdRequestLogUtil.java | 108 ++++++++++++++++++ 2 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/third/util/ThirdRequestLogUtil.java diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java index 58f6bf29..fe652298 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java @@ -234,7 +234,7 @@ public class GoodsSkuController { List delSkuCodes = delList.stream().map(GoodsSkuImportBo.SkuItem::getSkuCode).collect(Collectors.toList()); QueryWrapper lqw1 = new QueryWrapper<>(); lqw1.eq("target_type", TbsGoodsType.sku.name()); - lqw1.eq("target_code",delSkuCodes); + lqw1.in("target_code",delSkuCodes); lqw1.select("target_code"); List activityGoodsList = activityGoodsService.list(lqw1); List budgetConditionList = budgetConditionService.list(lqw1); @@ -313,7 +313,7 @@ public class GoodsSkuController { goodsSkuService.save(addSku); } } - return R.ok(param); + return R.ok(param.getSkuList()); } private GoodsSku buildByImportItem(GoodsSkuImportBo.SkuItem skuItem){ diff --git a/src/main/java/com/qs/serve/modules/third/util/ThirdRequestLogUtil.java b/src/main/java/com/qs/serve/modules/third/util/ThirdRequestLogUtil.java new file mode 100644 index 00000000..11c3ab89 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/third/util/ThirdRequestLogUtil.java @@ -0,0 +1,108 @@ +package com.qs.serve.modules.third.util; + +import lombok.Data; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +/** + * 日志平台工具类(Spring版本) + * @author YenHex + * @since 2023/12/21 + */ +public class ThirdRequestLogUtil { + + /* + public static void main(String[] args) { + ThirtyRequestLog requestLog = new ThirtyRequestLog(); + requestLog.setTitle("test"); + requestLog.setModule("test"); + requestLog.setRequestJson("{}"); + requestLog.setResponseJson("{}"); + requestLog.setKey1("A100"); + requestLog.setKey2("A100"); + requestLog.setKey3("A100"); + requestLog.setErrorMsg("A100"); + requestLog.setLogLevel("info"); + requestLog.setSuccessStatus(1); + requestLog.setRemark("A100"); + requestLog.setExtValue1("A100"); + requestLog.setExtValue2("A100"); + requestLog.setExtValue3("A100"); + requestLog.setExtValue4("A100"); + + String rs = ThirdRequestLogUtil.post(requestLog); + System.out.println(rs); + }*/ + + private static final String SAVE_LOG_URL = "http://192.168.0.9:7100/api/reqLog/saveLog"; + + private static RestTemplate restTemplate; + + private static RestTemplate getRestTemplate(){ + if(restTemplate==null){ + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setReadTimeout(5000); + factory.setConnectTimeout(15000); + restTemplate = new RestTemplate(factory); + } + return restTemplate; + } + + public static String post(ThirtyRequestLog requestLog) { + HttpHeaders headers = new HttpHeaders(); + HttpEntity formEntity = new HttpEntity<>(requestLog,headers); + return getRestTemplate().postForObject(SAVE_LOG_URL,formEntity, String.class); + } + + @Data + public static class ThirtyRequestLog{ + + /** 标题 长度255 */ + private String title; + + /** 业务模块 长度255 */ + private String module; + + /** 请求json 只接受json */ + private String requestJson; + + /** 返回json 只接受json */ + private String responseJson; + + /** 键id_1 长度255 */ + private String key1; + + /** 键id_2 长度255 */ + private String key2; + + /** 键id_3 长度255 */ + private String key3; + + /** 错误信息 长度不能超过1255字 */ + private String errorMsg; + + /** 严重程度:info,warning,error */ + private String logLevel; + + /** 状态:0-不成功,需要处理;1-成功 */ + private Integer successStatus; + + /** 备注 长度不能超过255字 */ + private String remark; + + /** 拓展1 长度不能超过255字 */ + private String extValue1; + + /** 拓展2 长度不能超过255字 */ + private String extValue2; + + /** 拓展3 长度不能超过255字 */ + private String extValue3; + + /** 拓展4 长度不能超过255字 */ + private String extValue4; + } + +} From cb1fcfdeb5d9c28ad1abf41ba27abd06b1abe3d9 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 27 Dec 2023 15:46:37 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E4=BD=BF=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 @@ + + + + + + + + + + + + + + + + + From b08c4db52b2526bcc87f3a45746666aba6daf332 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 27 Dec 2023 17:42:48 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E6=9D=A1=E6=AC=BE?= =?UTF-8?q?=E5=85=B3=E8=81=94OA=E6=B5=81=E6=B0=B4=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qs/serve/modules/tbs/common/TbsSeeYonConst.java | 3 +++ .../com/qs/serve/modules/tbs/entity/TbsCostTodo.java | 3 +++ .../service/impl/TbsCostTodoOperationServiceImpl.java | 9 +++++++++ .../modules/tzc/controller/TzcPolicyItemController.java | 4 ++++ 4 files changed, 19 insertions(+) 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 76a50592..8bd192fd 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 @@ -84,6 +84,9 @@ public interface TbsSeeYonConst { String OA_USER_INFO = "/process/getUserByCode"; String OA_USER_LIST_1 = "/process/getUsersList"; + /** 获取流水号 */ + String API_FLOW_CODE_TODO = "/process/getTodoFlowCode?todoId="; + String TASK_SYNC_DISPATCH = "/task/dispatch"; /** 客户账单余额 */ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostTodo.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostTodo.java index cc53a493..33320255 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostTodo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostTodo.java @@ -53,6 +53,9 @@ public class TbsCostTodo implements Serializable { /** 致远表单id */ private String syFormId; + /** 致远表单流水号 */ + private String syFlowCode; + /** 涉及品牌 */ @Length(max = 255,message = "涉及品牌长度不能超过255字") private String brands; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostTodoOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostTodoOperationServiceImpl.java index e21702d3..84a7873f 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostTodoOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostTodoOperationServiceImpl.java @@ -13,6 +13,7 @@ import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo; import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo; import com.qs.serve.modules.seeyon.service.SeeYonOperationService; import com.qs.serve.modules.seeyon.service.SeeYonRequestService; +import com.qs.serve.modules.seeyon.service.impl.SeeYonRequestBaseService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.tbs.common.TbsCommonCheckState; @@ -50,6 +51,7 @@ public class TbsCostTodoOperationServiceImpl implements SeeYonOperationService { private final SysUserMapper sysUserMapper; private final ProjectProperties projectProperties; private final SeeYonRequestService seeYonService; + private final SeeYonRequestBaseService seeYonRequestBaseService; /** * 提交 @@ -98,6 +100,13 @@ public class TbsCostTodoOperationServiceImpl implements SeeYonOperationService { BaseCreateCallbackBo callbackBo = new BaseCreateCallbackBo(TbsSeeYonConst.CheckCostAgreeConf.Code(),param.getId()+""); seeYonService.createCallbackStatus(callbackBo); + //流水号 + R codeRs = seeYonRequestBaseService.getBase(TbsSeeYonConst.API_FLOW_CODE_TODO+todoId,"获取条款申请流水号"); + if(codeRs!=null && codeRs.getData()!=null){ + String flowCode = codeRs.getData().toString(); + costTodo.setSyFlowCode(flowCode); + } + costTodo.setCheckStatus(TbsCommonCheckState.State_1_apply); costTodo.setSubmitTime(LocalDateTime.now()); costTodo.setSyFormId(formId); diff --git a/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java b/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java index 1e00b33d..e8186c75 100644 --- a/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java +++ b/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java @@ -56,6 +56,10 @@ public class TzcPolicyItemController { for (TzcPolicyItem policyItem : list) { List policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItem.getId()); policyItem.setPolicyGoodsList(policyGoodsList); + if(policyItem.getAttachIds()!=null&&policyItem.getAttachIds().length>0){ + List attachList = attachService.listByIds(Arrays.asList(policyItem.getAttachIds())); + policyItem.setAttachList(attachList); + } } return R.ok(list); } From 5a40aa9d7bc35b0dfd152dda0f2b9c87ee019da3 Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 28 Dec 2023 18:07:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BirBudgetScheduleController.java | 17 +++- .../tbs/entity/so/TbsScheduleItemSearch.java | 5 + .../tbs/entity/vo/TbsBudgetMatchMsgVo.java | 27 ++++++ .../tbs/service/TbsBudgetManagerService.java | 19 ++++ .../impl/TbsBudgetManagerServiceImpl.java | 96 +++++++++++++++++++ .../service/impl/TbsCostApplyServiceImpl.java | 3 +- .../TbsScheduleItemBudgetServiceImpl.java | 2 +- .../tbs/TbsScheduleItemBudget2Mapper.xml | 8 +- 8 files changed, 166 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchMsgVo.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetManagerService.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java 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 index 3e24420f..675297e8 100644 --- a/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java +++ b/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.bir.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.CollectionUtil; @@ -14,9 +15,7 @@ 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 org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; @@ -42,9 +41,17 @@ public class BirBudgetScheduleController { * @param query * @return */ - @GetMapping("/budgetItemUsedList") - public R> queryBudgetItemUsed(TbsScheduleItemSearch query){ + @PostMapping("/budgetItemUsedList") + public R> queryBudgetItemUsed(@RequestBody TbsScheduleItemSearch query){ query.initCenterCombo(); + if(CollectionUtil.isNotEmpty(query.getScheduleIds())){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(TbsScheduleItem::getScheduleId,query.getScheduleIds()); + lqw.select(TbsScheduleItem::getId); + List scheduleItemList = tbsScheduleItemMapper.selectList(lqw); + List itemIds = scheduleItemList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); + query.setScheduleItemIds(itemIds); + } List scheduleItemBudgetIdDtoList = scheduleItemBudget2Mapper.listItemBudgetIds(query); List scheduleItemIds = scheduleItemBudgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemId).collect(Collectors.toList()); if(CollectionUtil.isEmpty(scheduleItemIds)){ 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 index 6c289c74..a2590144 100644 --- 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 @@ -18,6 +18,11 @@ public class TbsScheduleItemSearch { */ private List centerCombos; + /** + * 周期ID + */ + private List scheduleIds; + /** * 周期ID */ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchMsgVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchMsgVo.java new file mode 100644 index 00000000..89c30795 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchMsgVo.java @@ -0,0 +1,27 @@ +package com.qs.serve.modules.tbs.entity.vo; + +/** + * @author YenHex + * @since 2023/12/28 + */ +public class TbsBudgetMatchMsgVo { + + /** 活动ID */ + private Long activityId; + + /** 活动编码 */ + private String activityCode; + + /** 活动标题 */ + private String activityTitle; + + /** 预算ID */ + private Long budgetId; + + /** 预算编码 */ + private String budgetCode; + + /** 预算标题 */ + private String budgetTitle; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetManagerService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetManagerService.java new file mode 100644 index 00000000..cb794ab4 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetManagerService.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.tbs.service; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/12/28 + */ +public interface TbsBudgetManagerService { + + /** + * 对比活动和预算进行条件匹配,返回不符合的内容(以Budget为参照物,全量匹配) + * @param activityIds + * @param budgetIds + * @return + */ + Object compare(List activityIds, List budgetIds); + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java new file mode 100644 index 00000000..f8cd6ec6 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java @@ -0,0 +1,96 @@ +package com.qs.serve.modules.tbs.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qs.serve.modules.tbs.entity.*; +import com.qs.serve.modules.tbs.mapper.*; +import com.qs.serve.modules.tbs.service.TbsActivityCenterGoodsService; +import com.qs.serve.modules.tbs.service.TbsBudgetManagerService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/12/28 + */ +@Slf4j +@Service +@AllArgsConstructor +public class TbsBudgetManagerServiceImpl implements TbsBudgetManagerService { + + private final TbsActivityMapper activityMapper; + private final TbsActivityCenterMapper activityCenterMapper; + private final TbsActivitySubjectMapper activitySubjectMapper; + private final TbsActivityCenterGoodsMapper activityCenterGoodsMapper; + private final TbsBudgetMapper budgetMapper; + private final TbsBudgetConditionMapper budgetConditionMapper; + private final TbsScheduleItemBudgetMapper scheduleItemBudgetMapper; + + @Override + public Object compare(List activityIds, List budgetIds) { + //加载基础数据 + QueryWrapper acgLqw = new QueryWrapper<>(); + acgLqw.in("activity_id",activityIds); + + List budgetList = budgetMapper.selectBatchIds(budgetIds); + List activityList = activityMapper.selectBatchIds(activityIds); + List allCenterList = activityCenterMapper.selectList(acgLqw); + List allSubjectList = activitySubjectMapper.selectList(acgLqw); + List allCenterGoodsList = activityCenterGoodsMapper.selectList(acgLqw); + + Map> centerListMap = allCenterList.stream().collect(Collectors.groupingBy(TbsActivityCenter::getActivityId)); + Map> subjectListMap = allSubjectList.stream().collect(Collectors.groupingBy(TbsActivitySubject::getActivityId)); + Map> centerGoodsListMap = allCenterGoodsList.stream().collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); + + LambdaQueryWrapper conditionLqw = new LambdaQueryWrapper<>(); + conditionLqw.in(TbsBudgetCondition::getBudgetId,budgetIds); + List allConditionList = budgetConditionMapper.selectList(conditionLqw); + + + Map> conditionListMap = allConditionList.stream().collect(Collectors.groupingBy(TbsBudgetCondition::getBudgetId)); + + //匹对 + for (TbsBudget budget : budgetList) { + for (TbsActivity activity : activityList) { + Long budgetId = budget.getId(); + Long activityId = activity.getId(); + //判断科目 + if(!budget.getSubjectId().equals(0L)){ + List subjectList = subjectListMap.get(activityId); + for (TbsActivitySubject subject : subjectList) { + if(!subject.getSubjectId().equals(budget.getSubjectId())){ + String msg = "无法匹配科目"; + } + } + } + //判断成本中心 + List centerList = centerListMap.get(activityId); + for (TbsActivityCenter center : centerList) { + if(!center.getCenterType().equals(budget.getCenterType())||center.getCenterId().equals(budget.getCenterId())){ + String msg = "无法匹配成本中心"; + } + } + //判断时间 + List budgetConditionList = conditionListMap.get(budgetId); + //判断品类 + + + } + + } + + + // + + + return null; + } + + + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java index f9841e6d..14baf01b 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java @@ -274,7 +274,8 @@ public class TbsCostApplyServiceImpl 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 scheduleItemIds = scheduleItemBudgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemId).distinct().collect(Collectors.toList()); // 预算金额 List finalList = scheduleItemBudget2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); diff --git a/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml b/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml index 00c4ed06..bf341c04 100644 --- a/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml +++ b/src/main/resources/mapper/tbs/TbsScheduleItemBudget2Mapper.xml @@ -20,7 +20,7 @@ #{selectId} - + and ( tbs_budget.condition_flag = 0 or tbs_budget_condition.brand_id in @@ -63,7 +63,7 @@ #{selectId} - AND schedule_item_budeget_id in + AND schedule_item_budget_id in #{selectId} @@ -85,7 +85,7 @@ #{selectId} - AND schedule_item_budeget_id in + AND schedule_item_budget_id in #{selectId} @@ -107,7 +107,7 @@ #{selectId} - AND schedule_item_budeget_id in + AND schedule_item_budget_id in #{selectId}