diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java index bfdc6741..c03401c2 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java @@ -217,7 +217,8 @@ public class BirBaseActivityServiceImpl extends ServiceImpl updList = new ArrayList<>(); for (UnMatchBirRecord record : list) { BirBaseActivity baseActivity = new BirBaseActivity(); diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java index 93becf61..4916ba45 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java @@ -129,6 +129,11 @@ public class GoodsCategoryController { final boolean loadSpuData = param.getLoadSpuData()!=null&¶m.getLoadSpuData().equals(1); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); //param.setEnable(1); + + if(CollectionUtil.isNotEmpty(param.getSelectIds())){ + lqw.in(GoodsCategory::getId,param.getSelectIds()); + } + List list = goodsCategoryService.list(lqw); List treeVoList = list.stream().map(cate->{ GoodsCategoryTreeVo treeNode = CopierUtil.copy(cate,new GoodsCategoryTreeVo()); diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategoryRule.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategoryRule.java index 8cb2b583..299cfca9 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategoryRule.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategoryRule.java @@ -47,6 +47,14 @@ public class GoodsCategoryRule implements Serializable { @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) private String[] brandNames; + /** 排除的品牌id */ + @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) + private String[] ignoreBrandIds; + + /** 排除的品牌名称 */ + @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) + private String[] ignoreBrandNames; + /** 启用状态 */ @NotNull(message = "启用状态不能为空") private Integer enableFlag; diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryRuleBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryRuleBo.java index 80f78385..7b10001c 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryRuleBo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryRuleBo.java @@ -24,6 +24,9 @@ public class GoodsCategoryRuleBo { /** 品牌id */ private String[] brandIds; + /** 排除品牌id */ + private String[] ignoreBrandIds; + /** 启用状态 */ private Integer enableFlag; diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryRuleServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryRuleServiceImpl.java index 0f60345f..b203d514 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryRuleServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryRuleServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.goods.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.CopierUtil; @@ -44,6 +45,21 @@ public class GoodsCategoryRuleServiceImpl extends ServiceImpl ids2 = new ArrayList<>(); + List names2 = new ArrayList<>(); + List igIds = Arrays.asList(param.getIgnoreBrandIds()); + if(CollUtil.isNotEmpty(igIds)){ + List ignoreCategoryList = goodsCategoryMapper.selectBatchIds(igIds); + for (GoodsCategory category : ignoreCategoryList) { + ids2.add(category.getId()+""); + names2.add(category.getName()); + } + entity.setIgnoreBrandIds(ids2.toArray(new String[ids2.size()])); + entity.setIgnoreBrandNames(names2.toArray(new String[names2.size()])); + } + } if(param.getId()!=null){ this.updateById(entity); }else { diff --git a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java index cf011375..0ca3560c 100644 --- a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java @@ -320,6 +320,7 @@ public class OmsOrderServiceImpl extends ServiceImpl im newOrderItemList.add(orderItem); } + this.handleCategoryRule(categoryRule,newOrderItemList); this.updateById(order); //移除已有的ITEM @@ -334,6 +335,52 @@ public class OmsOrderServiceImpl extends ServiceImpl im } } + /** + * 拦截规则 + * @param categoryRule + * @param orderItems + */ + private void handleCategoryRule(GoodsCategoryRule categoryRule, List orderItems) { + if(categoryRule!=null){ + List cids = Arrays.asList(categoryRule.getBrandIds()); + List igcids = null; + if(categoryRule.getIgnoreBrandIds()!=null){ + igcids = Arrays.asList(categoryRule.getIgnoreBrandIds()); + } + Set spuIds = orderItems.stream().map(OmsOrderItem::getSpuId).collect(Collectors.toSet()); + List skuIds = orderItems.stream().map(OmsOrderItem::getSkuId).collect(Collectors.toList()); + if(CollectionUtil.isNotEmpty(skuIds)){ + List spuTmpList = goodsSpuService.listByIds(skuIds); + spuIds.addAll(spuTmpList.stream().map(GoodsSpu::getId).collect(Collectors.toList())); + } + + List spuList = goodsSpuService.listByIds(spuIds); + for (GoodsSpu goodsSpu : spuList) { + matchIgnoreCate(igcids,goodsSpu.getCategoryFirst(),goodsSpu); + matchIgnoreCate(igcids,goodsSpu.getCategorySecond(),goodsSpu); + matchIgnoreCate(igcids,goodsSpu.getCategoryThird(),goodsSpu); + } + } + } + + /** + * 拦截忽略的品牌 + * @param igcids + * @param spuCateId + * @param goodsSpu + */ + private void matchIgnoreCate(List igcids, String spuCateId,GoodsSpu goodsSpu) { + if(igcids==null || spuCateId ==null|| spuCateId.equals("")|| spuCateId.equals("0")){ + return; + } + for (String igcid : igcids) { + if(spuCateId.equals(igcid)){ + Assert.throwEx("["+goodsSpu.getSkuCode()+"]"+goodsSpu.getName()+",不符合订单规则"); + } + } + } + + @Override @Transactional(rollbackFor = Exception.class) public OmsOrder createOrder(OmsOrderBo omsOrderBo) { @@ -486,7 +533,7 @@ public class OmsOrderServiceImpl extends ServiceImpl im } } - + this.handleCategoryRule(categoryRule,orderItems); omsOrderItemService.saveBatch(orderItems); //清空勾选的购物车 @@ -557,12 +604,22 @@ public class OmsOrderServiceImpl extends ServiceImpl im Assert.throwEx("空项目不支持下单"); } + //拦截相同的skuItem + long countDistinct = orderItemList.stream().map(OmsOrderItem::getSkuId).distinct().count(); + if(orderItemList.size()!=countDistinct){ + Assert.throwEx("有重复存货,请检查订单项"); + } + for (OmsOrderItem orderItem : orderItemList) { if(orderItem.getQuantity()==null||orderItem.getQuantity()<1){ Assert.throwEx("确认订单商品项数量不能为零"); } } + //下单前规则拦截 + GoodsCategoryRule categoryRule = goodsCategoryRuleMapper.selectById(omsOrder.getBrandRuleId()); + this.handleCategoryRule(categoryRule,orderItemList); + //List spuIds = orderItemList.stream().map(OmsOrderItem::getSpuId).collect(Collectors.toList()); @@ -576,7 +633,6 @@ public class OmsOrderServiceImpl extends ServiceImpl im //加载关联数据 BmsSupplierAddress supplierAddress = bmsSupplierAddressService.getById(omsOrder.getSupplierAddrId()); - GoodsCategoryRule categoryRule = goodsCategoryRuleMapper.selectById(omsOrder.getBrandRuleId()); String brands = Arrays.stream(categoryRule.getBrandNames()).collect(Collectors.joining(",")); BmsSupplier supplier = bmsSupplierMapper.selectById(omsOrder.getSupplierId()); String lastRegionId = supplier.getRegionLast(); 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 e49b50dc..1856f323 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 @@ -34,6 +34,7 @@ import com.qs.serve.modules.tbs.entity.bo.TbsActivityDefaultCenterBo; import com.qs.serve.modules.tbs.entity.bo.TbsActivityReopenBo; import com.qs.serve.modules.tbs.entity.vo.TbsActivityCenterGoodsVo; import com.qs.serve.modules.tbs.entity.vo.TbsActivityDefaultCenterVo; +import com.qs.serve.modules.tbs.mapper.TbsActivityGoodsMapper; import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.vtb.entity.VtbVerification; @@ -423,10 +424,7 @@ public class TbsActivityController { activityCenterService.remove(queryWrapper); activityCenterGoodsService.remove(queryWrapper); //删除活动数量到费用申请 - TbsCostApply costApplyParam = new TbsCostApply(); - costApplyParam.setId(costApply.getId()); - costApplyParam.setTotalActivity(costApply.getTotalActivity()-1); - costApplyService.updateById(costApplyParam); + costApplyService.flushAmtByAct(activity.getCostApplyId()); return R.isTrue(result); } @@ -443,6 +441,20 @@ public class TbsActivityController { return R.ok(); } + + /** + * 释放活动费用 + * @param id 活动ID + * @return + */ + @PostMapping("/cancelRelease/{id}") + @SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.DELETE) + @PreAuthorize("hasRole('tbs:activity:release')") + public R cancelRelease(@PathVariable("id") Long id){ + verificationService.cancelRelease(id); + return R.ok(); + } + /** * 刷新活动相关金额 * @param id diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityGoodsMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityGoodsMapper.java index 73e385c5..2958a338 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityGoodsMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityGoodsMapper.java @@ -8,7 +8,7 @@ import com.qs.serve.modules.tbs.entity.TbsActivityGoods; * @author YenHex * @date 2022-11-08 */ -public interface TbsActivityGoodsMapper extends BaseMapper { +public interface TbsActivityGoodsMapper extends BaseMapper{ } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java index 1172f34f..3bd9e586 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java @@ -87,6 +87,12 @@ public interface TbsCostApplyService extends IService { */ void flushCostStatus(Long costApplyId,boolean isContractFlag); + /** + * 活动变动时调用,同步费用数据 + * @param costApplyId + */ + void flushAmtByAct(Long costApplyId); + void buildMainData4ROI(TbsCostApply tbsCostApply, Map data); } 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 fd069518..e1a49039 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 @@ -425,6 +425,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl actLqw = new LambdaQueryWrapper<>(); + actLqw.eq(TbsActivity::getCostApplyId,costApplyId); + actLqw.eq(TbsActivity::getCancelFlag,0); + List activityList = tbsActivityMapper.selectList(actLqw); + BigDecimal total = BigDecimal.ZERO; + for (TbsActivity activity : activityList) { + total = total.add(activity.getTotalAmount()); + } + TbsCostApply costApply = new TbsCostApply(); + costApply.setId(costApplyId); + costApply.setTotalActivity(activityList.size()); + costApply.setTotalActivityAmount(total); + this.updateById(costApply); + } + @Override public void flushCostStatus(Long costApplyId,boolean isContractFlag) { LambdaQueryWrapper actLqw = new LambdaQueryWrapper<>(); actLqw.eq(TbsActivity::getCostApplyId,costApplyId); + actLqw.eq(TbsActivity::getCancelFlag,0); List activityList = tbsActivityMapper.selectList(actLqw); if(isContractFlag){ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java index 57fcc930..f0ba4ea5 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java @@ -39,6 +39,12 @@ public interface VtbVerificationService extends IService { */ void release(Long activityId,Boolean throwEx); + /** + * 取消释放 + * @param activityId + */ + void cancelRelease(Long activityId); + /** * 冻结 * @param param diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index 8eb288c0..c297b5ac 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -553,6 +553,56 @@ public class VtbVerificationServiceImpl extends ServiceImpl flowLqw = new LambdaQueryWrapper<>(); + flowLqw.eq(VtbFundFlow::getFundType,VtbFundFlowType.Release); + flowLqw.eq(VtbFundFlow::getVerificationId,0); + flowLqw.eq(VtbFundFlow::getActivityId,activityId); + fundFlowService.remove(flowLqw); + //还原预算占用,移除释放的budgetLog + LambdaQueryWrapper logLqw = new LambdaQueryWrapper<>(); + logLqw.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_4.getCode()); + logLqw.eq(TbsBudgetLog::getActivityId,activityId); + budgetLogService.remove(logLqw); + + //更新付款条件状态 + LambdaQueryWrapper updLqw = new LambdaQueryWrapper<>(); + updLqw.eq(TbsActivityPayCondition::getActivityId,activityId); + TbsActivityPayCondition payCondition = new TbsActivityPayCondition(); + payCondition.setFinishedFlag(0); + activityPayConditionService.update(payCondition,updLqw); + + }else { + Assert.throwEx("非释放的活动,无法操作"); + } + } + @Override @Transactional(rollbackFor = Exception.class) public R freeze(TbsActivityReopenBo param) {