From d951d0ea1d8a19f26488d3b3dd81af4a06164c36 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 11 Dec 2023 22:31:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=87=91=E9=A2=9D=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/controller/TbsActivityController.java | 1 + .../TbsActivityTemplateController.java | 2 +- .../controller/TbsCostApplyController.java | 111 +++++++++++++++++- .../tbs/entity/TbsActivityTemplate.java | 2 +- .../tbs/entity/bo/TbsActivityTemplateBo.java | 1 - .../tbs/entity/dto/TbsActivityAmtCheck.java | 20 ++++ .../tbs/entity/dto/TbsCostErrorBudgetDTO.java | 29 +++++ .../tbs/mapper/TbsActivityAmtCheckMapper.java | 23 ++++ .../tbs/mapper/TbsCostApplyMapper.java | 27 +++++ .../tbs/service/TbsActivityService.java | 6 + .../service/impl/TbsActivityServiceImpl.java | 24 +++- .../mapper/tbs/TbsCostApplyMapper.xml | 27 +++++ 12 files changed, 264 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActivityAmtCheck.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostErrorBudgetDTO.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityAmtCheckMapper.java diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java index df42694a..114d2612 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java @@ -542,5 +542,6 @@ public class TbsActivityController { } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java index e98eba44..c79101b6 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java @@ -146,7 +146,7 @@ public class TbsActivityTemplateController { @PostMapping("/save") @SysLog(module = SystemModule.Budget, title = "活动模板", biz = BizType.INSERT) @PreAuthorize("hasRole('tbs:activityTemplate:insert')") - public R save(@RequestBody @Valid TbsActivityTemplateBo param){ + public R save(@RequestBody TbsActivityTemplateBo param){ if(param.getId()!=null){ return R.error("id is not null"); } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index f64033bf..fe05aa3a 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -32,9 +32,12 @@ import com.qs.serve.modules.tbs.entity.bo.*; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; import com.qs.serve.modules.tbs.entity.dto.TbsCostBudgetRelateInfo; +import com.qs.serve.modules.tbs.entity.dto.TbsCostErrorBudgetDTO; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.entity.vo.TbsCostApplyVo; +import com.qs.serve.modules.tbs.mapper.TbsBudgetLogMapper; +import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper; import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.tbs.service.impl.TbsCostApplyOperationServiceImpl; import lombok.AllArgsConstructor; @@ -65,6 +68,7 @@ public class TbsCostApplyController { private TbsCostApplyService tbsCostApplyService; private TbsActivityService tbsActivityService; private TbsActivityTemplateService tbsActivityTemplateService; + private TbsActivityCenterGoodsService tbsActivityCenterGoodsService; private final TbsActivityGoodsService activityGoodsService; private final TbsActivitySubjectService activitySubjectService; private final TbsActivityCenterService activityCenterService; @@ -72,6 +76,7 @@ public class TbsCostApplyController { private final TbsActivityChannelService activityChannelService; private final TbsActivityChannelPointService activityChannelPointService; private BmsSupplierService bmsSupplierService; + private final TbsBudgetLogMapper tbsBudgetLogMapper; private BmsRegion2Service region2Service; private SysUserService sysUserService; private TbsBudgetApplicationService budgetApplicationService; @@ -83,6 +88,7 @@ public class TbsCostApplyController { private TbsBudgetLogService tbsBudgetLogService; private TbsScheduleItemBudgetService tbsScheduleItemBudgetService; private SysDeleteLogService deleteLogService; + private TbsCostApplyMapper tbsCostApplyMapper; /** @@ -524,11 +530,110 @@ public class TbsCostApplyController { return R.ok(); } - public R dealCostBudget(Long costApplyId){ + + @GetMapping("rebuildBudgetLog") + public void dealCostBudget(Long costApplyId){ + List costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO(); + for (TbsCostErrorBudgetDTO budgetDTO : costErrorBudgetDTOList) { + rebuildBudgetLog(budgetDTO.getId()); + } + } + + /** + * 方法不可行 + */ + @Deprecated + //@GetMapping("rebuildBudgetLog2") + public void dealCostBudget2(){ + List costErrorBudgetDTOList = new ArrayList<>(); + costErrorBudgetDTOList.add(new TbsCostErrorBudgetDTO()); + //List costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO(); + for (TbsCostErrorBudgetDTO budgetDTO : costErrorBudgetDTOList) { + //Long costApplyId = budgetDTO.getId(); + Long costApplyId = 115356L; + //BigDecimal diff = budgetDTO.getTotalActivityAmount().subtract(budgetDTO.getSumBudget()); +// if(diff.abs().compareTo(BigDecimal.ONE)<0){ + LambdaQueryWrapper logLqw = new LambdaQueryWrapper<>(); + logLqw.eq(TbsBudgetLog::getCostApplyId,costApplyId); + logLqw.lt(TbsBudgetLog::getOptType,7); + List budgetLogList = tbsBudgetLogMapper.selectList(logLqw); + + List budgetCostItemList = tbsBudgetCostItemService.listByCostApplyId(costApplyId); + + if(budgetCostItemList.size()==budgetLogList.size()){ + for (TbsBudgetLog budgetLog : budgetLogList) { + for (TbsBudgetCostItem costItem : budgetCostItemList) { + if(budgetLog.getActivityId().equals(costItem.getActivityId()) + &&budgetLog.getSubjectId().equals(costItem.getSubjectId()) + &&budgetLog.getCenterType().equals(costItem.getCenterType()) + &&budgetLog.getCenterId().equals(costItem.getCenterId()) + &&budgetLog.getTargetId().equals(costItem.getTargetId()) + &&budgetLog.getScheduleItemBudgetId().equals(costItem.getScheduleItemBudgetId()) + ){ + budgetLog.setAmount(costItem.getCenterGoodsAmount().negate()); + tbsBudgetLogMapper.updateById(budgetLog); + } + } + } +// } + + } + return; + } + } + + + public void rebuildBudgetLog(Long costApplyId) { + TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId); //调整center_goods和budget_log之间的占用 + BigDecimal centerGoodsTotal = tbsCostApplyMapper.sumCostCenterGoodsAmount(costApplyId); + BigDecimal costAmt = costApply.getTotalActivityAmount(); + //判断合计金额与预算是否有差距过大 + boolean diffCostCenterGoods = costAmt.subtract(centerGoodsTotal).intValue()!=0; + if(diffCostCenterGoods){ + log.error("{}金额错误",costApply.getId()); + return; + } + BigDecimal costAmountBudget = tbsCostApplyMapper.sumCostAmountBudget(costApplyId); - //改方法支持审批完成时回调更新 - return R.ok(); + //判断合计金额与预算是否有差距过大 + boolean diffCostBudget = costAmt.subtract(costAmountBudget).intValue()!=0; + if(diffCostBudget){ + //判断是否有释放,没有直接清理(后续可修改为全部清理) + + LambdaQueryWrapper budgetLogRmLqw = new LambdaQueryWrapper<>(); + budgetLogRmLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId()); + budgetLogRmLqw.ne(TbsBudgetLog::getOptType,1); + tbsBudgetLogMapper.delete(budgetLogRmLqw); + + LambdaQueryWrapper budgetLogLqw = new LambdaQueryWrapper<>(); + budgetLogLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId()); + budgetLogLqw.eq(TbsBudgetLog::getOptType,1); + List budgetLogList = tbsBudgetLogMapper.selectList(budgetLogLqw); + + List activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId); + + List updateLogIdsList = new ArrayList<>(); + updateLogIdsList.add(0L); + + for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + for (TbsBudgetLog budgetLog : budgetLogList) { + if( budgetLog.getActivityId().equals(centerGoods.getActivityId()) + &&budgetLog.getSubjectId().equals(centerGoods.getSubjectId()) + && budgetLog.getCenterType().equals(centerGoods.getCenterType()) + && budgetLog.getCenterId().equals(centerGoods.getCenterId()) + && budgetLog.getTargetId().equals(centerGoods.getTargetId()) + ){ + budgetLog.setAmount(centerGoods.getCenterGoodsAmount().negate()); + tbsBudgetLogMapper.updateById(budgetLog); + updateLogIdsList.add(budgetLog.getId()); + break; + } + } + } + budgetLogLqw.notIn(TbsBudgetLog::getId,updateLogIdsList); + tbsBudgetLogMapper.delete(budgetLogLqw); + } } } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java index 96992ab6..46530282 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java @@ -34,7 +34,7 @@ public class TbsActivityTemplate implements Serializable { /** 模板名称 */ @NotBlank(message = "模板名称不能为空") - @Length(max = 30,message = "模板名称长度不能超过30字") + @Length(max = 60,message = "模板名称长度不能超过60字") @TableField(condition = SqlCondition.LIKE) private String templateName; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java index 8cce73a9..24bb9b63 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java @@ -33,7 +33,6 @@ public class TbsActivityTemplateBo implements Serializable { /** 模板名称 */ @NotBlank(message = "模板名称不能为空") - @Length(max = 30,message = "模板名称长度不能超过30字") private String templateName; /** 模板状态 */ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActivityAmtCheck.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActivityAmtCheck.java new file mode 100644 index 00000000..c559e064 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActivityAmtCheck.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/12/11 + */ +@Data +public class TbsActivityAmtCheck { + + private Long activityId; + + private BigDecimal totalAmount; + private BigDecimal sumCenterGoods; + private BigDecimal diffAmount; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostErrorBudgetDTO.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostErrorBudgetDTO.java new file mode 100644 index 00000000..69c8c69f --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostErrorBudgetDTO.java @@ -0,0 +1,29 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/12/10 + */ +@Data +public class TbsCostErrorBudgetDTO { + + Long id; + + String code; + + BigDecimal totalActivityAmount; + + BigDecimal totalActivityUsedAmount; + + BigDecimal releaseBudget; + + /** + * 统计budgetLog + */ + BigDecimal sumBudget; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityAmtCheckMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityAmtCheckMapper.java new file mode 100644 index 00000000..e80f7ec0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityAmtCheckMapper.java @@ -0,0 +1,23 @@ +package com.qs.serve.modules.tbs.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.qs.serve.modules.tbs.entity.dto.TbsActivityAmtCheck; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/12/11 + */ +public interface TbsActivityAmtCheckMapper { + + @Select("") + @InterceptorIgnore(tenantLine = "true") + List listByCostApplyId(Long costApplyId); + + @Select("") + @InterceptorIgnore(tenantLine = "true") + List listByActivityId(Long activityId); + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyMapper.java index a72054ef..378e9efd 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyMapper.java @@ -1,11 +1,13 @@ package com.qs.serve.modules.tbs.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.tbs.entity.TbsCostApply; +import com.qs.serve.modules.tbs.entity.dto.TbsCostErrorBudgetDTO; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; @@ -68,5 +70,30 @@ public interface TbsCostApplyMapper extends BaseMapper { */ IPage selectCostApplyList(IPage page,@Param("query")TbsCostApply param); + /** + * 查找 + * @return + */ + @InterceptorIgnore(tenantLine = "1") + List selectCostErrorBudgetDTO(); + + /** + * 统计cost的budgetLog占用 + * @param costApplyId + * @return + */ + @InterceptorIgnore(tenantLine = "1") + @Select("SELECT sum(- amount ) AS sum_budget FROM `tbs_budget_log`" + + " where tbs_budget_log.del_flag = 0" + + " and cost_apply_id = #{costApplyId}") + BigDecimal sumCostAmountBudget(@Param("costApplyId") Long costApplyId); + + + @Select("select sum(center_goods_amount)" + + " from tbs_activity_center_goods" + + " where cost_apply_id = #{costApplyId} and del_flag = 0") + BigDecimal sumCostCenterGoodsAmount(@Param("costApplyId") Long costApplyId); + + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java index 4732d55a..43ab2c65 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java @@ -26,5 +26,11 @@ public interface TbsActivityService extends IService { */ void modify(TbsActivityBo activityBo); + /** + * 修复精确度 + * @param updateBudgetLog 新建活动为false,修复数据时为true + */ + void checkCenterGoods(boolean updateBudgetLog); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java index 0e8be7e7..c1e27772 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java @@ -26,14 +26,13 @@ import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.*; -import com.qs.serve.modules.tbs.mapper.TbsActivityTemplateMapper; -import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper; +import com.qs.serve.modules.tbs.entity.dto.TbsActivityAmtCheck; +import com.qs.serve.modules.tbs.mapper.*; import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.One; import org.springframework.stereotype.Service; -import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; @@ -62,6 +61,7 @@ public class TbsActivityServiceImpl extends ServiceImpl activityAmtCheckList = activityAmtCheckMapper.listByCostApplyId(274022L); + for (TbsActivityAmtCheck amtCheck : activityAmtCheckList) { + LambdaQueryWrapper centerGoodsLqw = new LambdaQueryWrapper<>(); + centerGoodsLqw.eq(TbsActivityCenterGoods::getActivityId,amtCheck.getActivityId()); + centerGoodsLqw.apply(" limit 1"); + TbsActivityCenterGoods centerGoods = activityCenterGoodsService.getOne(centerGoodsLqw); + centerGoods.setCenterGoodsAmount(centerGoods.getCenterGoodsAmount().add(amtCheck.getDiffAmount())); + activityCenterGoodsService.updateById(centerGoods); + + } + + } + @Override public List listByCostApplyId(Long id) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/resources/mapper/tbs/TbsCostApplyMapper.xml b/src/main/resources/mapper/tbs/TbsCostApplyMapper.xml index 86f615bc..a2987d87 100644 --- a/src/main/resources/mapper/tbs/TbsCostApplyMapper.xml +++ b/src/main/resources/mapper/tbs/TbsCostApplyMapper.xml @@ -163,6 +163,33 @@ and `tbs_cost_apply`.`user_id` = #{userId} + + and `tbs_cost_apply`.`check_state` = #{query.checkState}