Browse Source

调整金额异常修复

v1.0
Yen 2 years ago
parent
commit
d951d0ea1d
  1. 1
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  2. 2
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java
  3. 111
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  4. 2
      src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java
  5. 1
      src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java
  6. 20
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActivityAmtCheck.java
  7. 29
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostErrorBudgetDTO.java
  8. 23
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityAmtCheckMapper.java
  9. 27
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyMapper.java
  10. 6
      src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java
  11. 24
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  12. 27
      src/main/resources/mapper/tbs/TbsCostApplyMapper.xml

1
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -542,5 +542,6 @@ public class TbsActivityController {
} }
} }

2
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java

@ -146,7 +146,7 @@ public class TbsActivityTemplateController {
@PostMapping("/save") @PostMapping("/save")
@SysLog(module = SystemModule.Budget, title = "活动模板", biz = BizType.INSERT) @SysLog(module = SystemModule.Budget, title = "活动模板", biz = BizType.INSERT)
@PreAuthorize("hasRole('tbs:activityTemplate:insert')") @PreAuthorize("hasRole('tbs:activityTemplate:insert')")
public R<?> save(@RequestBody @Valid TbsActivityTemplateBo param){ public R<?> save(@RequestBody TbsActivityTemplateBo param){
if(param.getId()!=null){ if(param.getId()!=null){
return R.error("id is not null"); return R.error("id is not null");
} }

111
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.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; 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.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.CtpAffairVo;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import com.qs.serve.modules.tbs.entity.vo.TbsCostApplyVo; 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.*;
import com.qs.serve.modules.tbs.service.impl.TbsCostApplyOperationServiceImpl; import com.qs.serve.modules.tbs.service.impl.TbsCostApplyOperationServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -65,6 +68,7 @@ public class TbsCostApplyController {
private TbsCostApplyService tbsCostApplyService; private TbsCostApplyService tbsCostApplyService;
private TbsActivityService tbsActivityService; private TbsActivityService tbsActivityService;
private TbsActivityTemplateService tbsActivityTemplateService; private TbsActivityTemplateService tbsActivityTemplateService;
private TbsActivityCenterGoodsService tbsActivityCenterGoodsService;
private final TbsActivityGoodsService activityGoodsService; private final TbsActivityGoodsService activityGoodsService;
private final TbsActivitySubjectService activitySubjectService; private final TbsActivitySubjectService activitySubjectService;
private final TbsActivityCenterService activityCenterService; private final TbsActivityCenterService activityCenterService;
@ -72,6 +76,7 @@ public class TbsCostApplyController {
private final TbsActivityChannelService activityChannelService; private final TbsActivityChannelService activityChannelService;
private final TbsActivityChannelPointService activityChannelPointService; private final TbsActivityChannelPointService activityChannelPointService;
private BmsSupplierService bmsSupplierService; private BmsSupplierService bmsSupplierService;
private final TbsBudgetLogMapper tbsBudgetLogMapper;
private BmsRegion2Service region2Service; private BmsRegion2Service region2Service;
private SysUserService sysUserService; private SysUserService sysUserService;
private TbsBudgetApplicationService budgetApplicationService; private TbsBudgetApplicationService budgetApplicationService;
@ -83,6 +88,7 @@ public class TbsCostApplyController {
private TbsBudgetLogService tbsBudgetLogService; private TbsBudgetLogService tbsBudgetLogService;
private TbsScheduleItemBudgetService tbsScheduleItemBudgetService; private TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
private SysDeleteLogService deleteLogService; private SysDeleteLogService deleteLogService;
private TbsCostApplyMapper tbsCostApplyMapper;
/** /**
@ -524,11 +530,110 @@ public class TbsCostApplyController {
return R.ok(); return R.ok();
} }
public R<?> dealCostBudget(Long costApplyId){
@GetMapping("rebuildBudgetLog")
public void dealCostBudget(Long costApplyId){
List<TbsCostErrorBudgetDTO> costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO();
for (TbsCostErrorBudgetDTO budgetDTO : costErrorBudgetDTOList) {
rebuildBudgetLog(budgetDTO.getId());
}
}
/**
* 方法不可行
*/
@Deprecated
//@GetMapping("rebuildBudgetLog2")
public void dealCostBudget2(){
List<TbsCostErrorBudgetDTO> costErrorBudgetDTOList = new ArrayList<>();
costErrorBudgetDTOList.add(new TbsCostErrorBudgetDTO());
//List<TbsCostErrorBudgetDTO> 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<TbsBudgetLog> logLqw = new LambdaQueryWrapper<>();
logLqw.eq(TbsBudgetLog::getCostApplyId,costApplyId);
logLqw.lt(TbsBudgetLog::getOptType,7);
List<TbsBudgetLog> budgetLogList = tbsBudgetLogMapper.selectList(logLqw);
List<TbsBudgetCostItem> 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之间的占用 //调整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<TbsBudgetLog> budgetLogRmLqw = new LambdaQueryWrapper<>();
budgetLogRmLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId());
budgetLogRmLqw.ne(TbsBudgetLog::getOptType,1);
tbsBudgetLogMapper.delete(budgetLogRmLqw);
LambdaQueryWrapper<TbsBudgetLog> budgetLogLqw = new LambdaQueryWrapper<>();
budgetLogLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId());
budgetLogLqw.eq(TbsBudgetLog::getOptType,1);
List<TbsBudgetLog> budgetLogList = tbsBudgetLogMapper.selectList(budgetLogLqw);
List<TbsActivityCenterGoods> activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApplyId);
List<Long> 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);
}
} }
} }

2
src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java

@ -34,7 +34,7 @@ public class TbsActivityTemplate implements Serializable {
/** 模板名称 */ /** 模板名称 */
@NotBlank(message = "模板名称不能为空") @NotBlank(message = "模板名称不能为空")
@Length(max = 30,message = "模板名称长度不能超过30字") @Length(max = 60,message = "模板名称长度不能超过60字")
@TableField(condition = SqlCondition.LIKE) @TableField(condition = SqlCondition.LIKE)
private String templateName; private String templateName;

1
src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java

@ -33,7 +33,6 @@ public class TbsActivityTemplateBo implements Serializable {
/** 模板名称 */ /** 模板名称 */
@NotBlank(message = "模板名称不能为空") @NotBlank(message = "模板名称不能为空")
@Length(max = 30,message = "模板名称长度不能超过30字")
private String templateName; private String templateName;
/** 模板状态 */ /** 模板状态 */

20
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;
}

29
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;
}

23
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<TbsActivityAmtCheck> listByCostApplyId(Long costApplyId);
@Select("")
@InterceptorIgnore(tenantLine = "true")
List<TbsActivityAmtCheck> listByActivityId(Long activityId);
}

27
src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyMapper.java

@ -1,11 +1,13 @@
package com.qs.serve.modules.tbs.mapper; 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.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.tbs.entity.TbsCostApply; 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.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Update;
@ -68,5 +70,30 @@ public interface TbsCostApplyMapper extends BaseMapper<TbsCostApply> {
*/ */
IPage<TbsCostApply> selectCostApplyList(IPage<TbsCostApply> page,@Param("query")TbsCostApply param); IPage<TbsCostApply> selectCostApplyList(IPage<TbsCostApply> page,@Param("query")TbsCostApply param);
/**
* 查找
* @return
*/
@InterceptorIgnore(tenantLine = "1")
List<TbsCostErrorBudgetDTO> 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);
} }

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

@ -26,5 +26,11 @@ public interface TbsActivityService extends IService<TbsActivity> {
*/ */
void modify(TbsActivityBo activityBo); void modify(TbsActivityBo activityBo);
/**
* 修复精确度
* @param updateBudgetLog 新建活动为false修复数据时为true
*/
void checkCenterGoods(boolean updateBudgetLog);
} }

24
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.common.TbsGoodsType;
import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.entity.bo.*; import com.qs.serve.modules.tbs.entity.bo.*;
import com.qs.serve.modules.tbs.mapper.TbsActivityTemplateMapper; import com.qs.serve.modules.tbs.entity.dto.TbsActivityAmtCheck;
import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper; import com.qs.serve.modules.tbs.mapper.*;
import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.tbs.service.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.One;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -62,6 +61,7 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
private final TbsCostApplyMapper costApplyMapper; private final TbsCostApplyMapper costApplyMapper;
private final TbsActivitySlottingFeeService activitySlottingFeeService; private final TbsActivitySlottingFeeService activitySlottingFeeService;
private final TbsCenterDtoService tbsCenterDtoService; private final TbsCenterDtoService tbsCenterDtoService;
private final TbsBudgetLogMapper tbsBudgetLogMapper;
private final BmsSubjectFormMapper subjectFormMapper; private final BmsSubjectFormMapper subjectFormMapper;
private final BmsSupplierService supplierService; private final BmsSupplierService supplierService;
@ -75,8 +75,26 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
private final SysConfigService configService; private final SysConfigService configService;
private final TbsActivityAmtCheckMapper activityAmtCheckMapper;
@Override
public void checkCenterGoods(boolean updateBudgetLog) {
List<TbsActivityAmtCheck> activityAmtCheckList = activityAmtCheckMapper.listByCostApplyId(274022L);
for (TbsActivityAmtCheck amtCheck : activityAmtCheckList) {
LambdaQueryWrapper<TbsActivityCenterGoods> 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 @Override
public List<TbsActivity> listByCostApplyId(Long id) { public List<TbsActivity> listByCostApplyId(Long id) {
LambdaQueryWrapper<TbsActivity> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsActivity> lqw = new LambdaQueryWrapper<>();

27
src/main/resources/mapper/tbs/TbsCostApplyMapper.xml

@ -163,6 +163,33 @@
and `tbs_cost_apply`.`user_id` = #{userId} and `tbs_cost_apply`.`user_id` = #{userId}
</select> </select>
<select id="selectCostErrorBudgetDTO"
resultType="com.qs.serve.modules.tbs.entity.dto.TbsCostErrorBudgetDTO">
SELECT
tbs_cost_apply.id,
tbs_cost_apply.`code`,
tbs_cost_apply.charge_state,
tbs_cost_apply.total_activity_amount,
tbs_cost_apply.total_activity_used_amount,
release_budget,
sum_budget
FROM
tbs_cost_apply
LEFT JOIN ( SELECT cost_apply_id, sum(- amount ) AS sum_budget FROM `tbs_budget_log` where tbs_budget_log.del_flag = 0 GROUP BY cost_apply_id ) AS tmp ON tbs_cost_apply.id = tmp.cost_apply_id
LEFT JOIN ( SELECT cost_apply_id, sum( used_amount ) AS release_budget FROM `vtb_fund_flow` where vtb_fund_flow.del_flag = 0 and fund_type = 'release' GROUP BY cost_apply_id ) AS tmp2 ON tbs_cost_apply.id = tmp2.cost_apply_id
WHERE
xlt_sync IS NULL
and tbs_cost_apply.del_flag = 0
and tbs_cost_apply.cancel_flag = 0
AND tbs_cost_apply.charge_state in (1,2,3,7)
and (
( release_budget is not null and total_activity_amount - release_budget - sum_budget !=0 )
or
( release_budget is null and sum_budget - total_activity_amount!=0 )
)
</select>
<sql id="baseWhere4CostApply"> <sql id="baseWhere4CostApply">
<if test="query.checkState != null"> and `tbs_cost_apply`.`check_state` = #{query.checkState}</if> <if test="query.checkState != null"> and `tbs_cost_apply`.`check_state` = #{query.checkState}</if>

Loading…
Cancel
Save