Browse Source

调整金额异常修复

v1.0
Yen 2 years ago
parent
commit
3ad87647e8
  1. 4
      src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java
  2. 116
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  3. 18
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActNotMatchAmtCenterGoods.java
  4. 26
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityCenterGoodsMapper.java
  5. 8
      src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterGoodsService.java
  6. 5
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterGoodsServiceImpl.java
  7. 10
      src/main/resources/mapper/tbs/TbsCostApplyMapper.xml

4
src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java

@ -416,6 +416,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> im
orderItem.setSpecValues(shoppingCart.getSpecInfo()); orderItem.setSpecValues(shoppingCart.getSpecInfo());
orderItem.setSpuCode(shoppingCart.getSpuCode()); orderItem.setSpuCode(shoppingCart.getSpuCode());
if(goodsSku!=null){ if(goodsSku!=null){
GoodsSpu goodsSpu = goodsSpuService.getById(goodsSku.getSpuId());
orderItem.setSpuTitle(goodsSpu.getName());
orderItem.setSkuTitle(goodsSpu.getSkuName());
log.warn("shoppingCart json =>"+JsonUtil.objectToJson(shoppingCart)); log.warn("shoppingCart json =>"+JsonUtil.objectToJson(shoppingCart));
orderItem.setSkuTitle(goodsSku.getSkuName()); orderItem.setSkuTitle(goodsSku.getSkuName());
orderItem.setMarketPrice(goodsSku.getMarketPrice()); orderItem.setMarketPrice(goodsSku.getMarketPrice());

116
src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java

@ -29,10 +29,7 @@ import com.qs.serve.modules.tbs.common.dto.CompensateDTO;
import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil;
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.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.dto.*;
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.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;
@ -532,10 +529,97 @@ public class TbsCostApplyController {
@GetMapping("rebuildBudgetLog") @GetMapping("rebuildBudgetLog")
public void dealCostBudget(Long costApplyId){ public R dealCostBudget(Long costApplyId){
if(costApplyId!=null){
rebuildBudgetLog(costApplyId);
return R.ok();
}
List<TbsCostErrorBudgetDTO> costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO();
for (TbsCostErrorBudgetDTO budgetDTO : costErrorBudgetDTOList) {
Long costApplyId2 = budgetDTO.getId();
rebuildBudgetLog(costApplyId2);
}
return R.ok();
}
@GetMapping("rebuildBudgetLog3")
public void dealCostBudget3(){
List<TbsCostErrorBudgetDTO> costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO(); List<TbsCostErrorBudgetDTO> costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO();
for (TbsCostErrorBudgetDTO budgetDTO : costErrorBudgetDTOList) { for (TbsCostErrorBudgetDTO budgetDTO : costErrorBudgetDTOList) {
rebuildBudgetLog(budgetDTO.getId()); Long costApplyId = budgetDTO.getId();
centerGoodsAmtToBudgetLog(costApplyId);
}
}
@GetMapping("flushActivityCenterGoodsAmount")
public void flushActivityCenterGoodsAmount(){
//List<TbsCostErrorBudgetDTO> costErrorBudgetDTOList = tbsCostApplyMapper.selectCostErrorBudgetDTO();
//过滤大额错误订单
// costErrorBudgetDTOList = costErrorBudgetDTOList.stream().filter(a->a.getTotalActivityAmount()
// .subtract(a.getSumBudget())
// .abs()
// .compareTo(BigDecimal.ONE)<1).collect(Collectors.toList());
//List<Long> costApplyIds = costErrorBudgetDTOList.stream().map(TbsCostErrorBudgetDTO::getId).distinct().collect(Collectors.toList());
List<Long> costApplyIds = new ArrayList<>();
costApplyIds.add(263925L);
costApplyIds.add(263930L);
costApplyIds.add(270102L);
List<TbsActNotMatchAmtCenterGoods> notMatchAmtCenterGoodsList = activityCenterGoodsService.listNotMatchAmtCenterGoods(costApplyIds);
List<Long> activityIds = notMatchAmtCenterGoodsList.stream().map(a->a.getActivityId()).collect(Collectors.toList());
for (Long activityId : activityIds) {
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.listByActivityId(activityId);
Map<String,List<TbsActivityCenterGoods>> stringListMap = activityCenterGoodsList.stream()
.collect(Collectors.groupingBy(a->a.getSubjectId()+"_"+a.getCenterType()+"_"+a.getCenterId()));
for (String key : stringListMap.keySet()) {
List<TbsActivityCenterGoods> list = stringListMap.get(key);
BigDecimal totalAmountOfCenter = list.get(0).getCenterAmount();
BigDecimal totalCenterGoods = BigDecimal.ZERO;
for (TbsActivityCenterGoods centerGoods : list) {
totalCenterGoods = totalCenterGoods.add(centerGoods.getCenterGoodsAmount());
}
BigDecimal diff = totalAmountOfCenter.subtract(totalCenterGoods);
if(diff.compareTo(BigDecimal.ZERO)!=0&&diff.compareTo(BigDecimal.ONE)<0){
TbsActivityCenterGoods centerGoods = list.get(0);
centerGoods.setCenterGoodsAmount(centerGoods.getCenterGoodsAmount().add(diff));
activityCenterGoodsService.updateById(centerGoods);
}
}
}
}
private void centerGoodsAmtToBudgetLog(Long costApplyId) {
LambdaQueryWrapper<TbsBudgetLog> logLqw = new LambdaQueryWrapper<>();
logLqw.eq(TbsBudgetLog::getCostApplyId, costApplyId);
logLqw.lt(TbsBudgetLog::getOptType,7);
List<TbsBudgetLog> budgetLogList = tbsBudgetLogMapper.selectList(logLqw);
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.listByCostApplyId(costApplyId);
if(budgetLogList.size()==activityCenterGoodsList.size()){
List<TbsBudgetLog> updBudgetLogList = new ArrayList<>();
for (TbsBudgetLog budgetLog : budgetLogList) {
TbsBudgetLog tmpObject = null;
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
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.getScheduleItemBudgetId().equals(centerGoods.getScheduleItemBudgetId())
){
budgetLog.setAmount(centerGoods.getCenterGoodsAmount().negate());
tmpObject = budgetLog;
//tbsBudgetLogMapper.updateById(budgetLog);
}
}
if(tmpObject==null){
break;
}
updBudgetLogList.add(tmpObject);
}
if(updBudgetLogList.size()== budgetLogList.size()){
for (TbsBudgetLog budgetLog : updBudgetLogList) {
tbsBudgetLogMapper.updateById(budgetLog);
}
}
} }
} }
@ -594,18 +678,10 @@ public class TbsCostApplyController {
log.error("{}金额错误",costApply.getId()); log.error("{}金额错误",costApply.getId());
return; return;
} }
BigDecimal costAmountBudget = tbsCostApplyMapper.sumCostAmountBudget(costApplyId); //BigDecimal costAmountBudget = tbsCostApplyMapper.sumCostAmountBudget(costApplyId);
//判断合计金额与预算是否有差距过大
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<>(); LambdaQueryWrapper<TbsBudgetLog> budgetLogLqw = new LambdaQueryWrapper<>();
budgetLogLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId()); budgetLogLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId());
budgetLogLqw.eq(TbsBudgetLog::getOptType,1); budgetLogLqw.eq(TbsBudgetLog::getOptType,1);
@ -616,6 +692,7 @@ public class TbsCostApplyController {
List<Long> updateLogIdsList = new ArrayList<>(); List<Long> updateLogIdsList = new ArrayList<>();
updateLogIdsList.add(0L); updateLogIdsList.add(0L);
if(activityCenterGoodsList.size()==budgetLogList.size()){
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) {
for (TbsBudgetLog budgetLog : budgetLogList) { for (TbsBudgetLog budgetLog : budgetLogList) {
if( budgetLog.getActivityId().equals(centerGoods.getActivityId()) if( budgetLog.getActivityId().equals(centerGoods.getActivityId())
@ -631,9 +708,14 @@ public class TbsCostApplyController {
} }
} }
} }
budgetLogLqw.notIn(TbsBudgetLog::getId,updateLogIdsList);
tbsBudgetLogMapper.delete(budgetLogLqw); LambdaQueryWrapper<TbsBudgetLog> delBudgetLogLqw = new LambdaQueryWrapper<>();
delBudgetLogLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId());
delBudgetLogLqw.notIn(TbsBudgetLog::getId,updateLogIdsList);
tbsBudgetLogMapper.delete(delBudgetLogLqw);
} }
} }
} }

18
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsActNotMatchAmtCenterGoods.java

@ -0,0 +1,18 @@
package com.qs.serve.modules.tbs.entity.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author YenHex
* @since 2023/12/12
*/
@Data
public class TbsActNotMatchAmtCenterGoods {
private Long activityId;
private BigDecimal totalAmount;
private BigDecimal sumGoodsAmt;
}

26
src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityCenterGoodsMapper.java

@ -1,7 +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.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods;
import com.qs.serve.modules.tbs.entity.dto.TbsActNotMatchAmtCenterGoods;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* 活动成本中心配比项 Mapper * 活动成本中心配比项 Mapper
@ -10,5 +16,25 @@ import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods;
*/ */
public interface TbsActivityCenterGoodsMapper extends BaseMapper<TbsActivityCenterGoods> { public interface TbsActivityCenterGoodsMapper extends BaseMapper<TbsActivityCenterGoods> {
@Select("<script>"+
"select activity_id,tbs_activity.total_amount,tmp.sum_goods_amt from tbs_activity " +
" left join (SELECT activity_id, sum(center_goods_amount) AS sum_goods_amt,sum(center_amount) as sum_center_amt " +
" FROM `tbs_activity_center_goods` where tbs_activity_center_goods.del_flag = 0 and tbs_activity_center_goods.cost_apply_id in " +
" <foreach collection='costApplyIds' item='id' open='(' separator=',' close=')'>"+
" #{id} "+
" </foreach> "+
" GROUP BY activity_id) as tmp " +
" on tmp.activity_id = tbs_activity.id " +
" where tbs_activity.del_flag = 0 " +
" and tbs_activity.total_amount != tmp.sum_goods_amt" +
" and tbs_activity.cost_apply_id in "+
" <foreach collection='costApplyIds' item='id' open='(' separator=',' close=')'>"+
" #{id} "+
" </foreach> "+
"</script>"
)
@InterceptorIgnore(tenantLine = "1")
List<TbsActNotMatchAmtCenterGoods> listNotMatchAmtCenterGoods(@Param("costApplyIds") List<Long> costIds);
} }

8
src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterGoodsService.java

@ -3,6 +3,7 @@ package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods;
import com.qs.serve.modules.tbs.entity.TbsActivitySubject; import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
import com.qs.serve.modules.tbs.entity.dto.TbsActNotMatchAmtCenterGoods;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -21,5 +22,12 @@ public interface TbsActivityCenterGoodsService extends IService<TbsActivityCente
Map<Long,List<TbsActivityCenterGoods>> listByActivityMap(List<Long> activityIds); Map<Long,List<TbsActivityCenterGoods>> listByActivityMap(List<Long> activityIds);
/**
* 加载center_goods与activity不匹配的
* @param costIds
* @return
*/
List<TbsActNotMatchAmtCenterGoods> listNotMatchAmtCenterGoods(List<Long> costIds);
} }

5
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterGoodsServiceImpl.java

@ -3,6 +3,7 @@ package com.qs.serve.modules.tbs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.modules.tbs.entity.TbsActivitySubject; import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
import com.qs.serve.modules.tbs.entity.dto.TbsActNotMatchAmtCenterGoods;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -46,5 +47,9 @@ public class TbsActivityCenterGoodsServiceImpl extends ServiceImpl<TbsActivityCe
return activityCenterList.stream().collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); return activityCenterList.stream().collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId));
} }
@Override
public List<TbsActNotMatchAmtCenterGoods> listNotMatchAmtCenterGoods(List<Long> costIds) {
return baseMapper.listNotMatchAmtCenterGoods(costIds);
}
} }

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

@ -183,11 +183,13 @@
and tbs_cost_apply.cancel_flag = 0 and tbs_cost_apply.cancel_flag = 0
AND tbs_cost_apply.charge_state in (1,2,3,7) AND tbs_cost_apply.charge_state in (1,2,3,7)
and ( and
( release_budget is not null and total_activity_amount - release_budget - sum_budget !=0 ) (
or (tbs_cost_apply.total_activity_amount - sum_budget != 0 and release_budget is null )
( release_budget is null and sum_budget - total_activity_amount!=0 ) or (tbs_cost_apply.total_activity_amount-release_budget-sum_budget!=0 and release_budget is not null)
) )
and tbs_cost_apply.total_activity_amount - sum_budget !=0
</select> </select>

Loading…
Cancel
Save