Browse Source

feat:除了包含的规则,增加一个不包含的规则

v1.0
Yen 1 year ago
parent
commit
df0695b0a9
  1. 3
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java
  2. 5
      src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java
  3. 8
      src/main/java/com/qs/serve/modules/goods/entity/GoodsCategoryRule.java
  4. 3
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryRuleBo.java
  5. 16
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryRuleServiceImpl.java
  6. 60
      src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java
  7. 20
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  8. 2
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityGoodsMapper.java
  9. 6
      src/main/java/com/qs/serve/modules/tbs/service/TbsCostApplyService.java
  10. 20
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  11. 6
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java
  12. 50
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

3
src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java

@ -217,7 +217,8 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
totalAmt1 = totalAmt1.add(record.getActivityAmt());
totalAmt2 = totalAmt2.add(record.getBirCenterGoodAmt());
}
if(totalAmt1.compareTo(totalAmt2)==0){
//允许有不超过 3 的误差
if(totalAmt1.subtract(totalAmt2).abs().doubleValue() < 3){
List<BirBaseActivity> updList = new ArrayList<>();
for (UnMatchBirRecord record : list) {
BirBaseActivity baseActivity = new BirBaseActivity();

5
src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java

@ -129,6 +129,11 @@ public class GoodsCategoryController {
final boolean loadSpuData = param.getLoadSpuData()!=null&&param.getLoadSpuData().equals(1);
LambdaQueryWrapper<GoodsCategory> lqw = new LambdaQueryWrapper<>(param);
//param.setEnable(1);
if(CollectionUtil.isNotEmpty(param.getSelectIds())){
lqw.in(GoodsCategory::getId,param.getSelectIds());
}
List<GoodsCategory> list = goodsCategoryService.list(lqw);
List<GoodsCategoryTreeVo> treeVoList = list.stream().map(cate->{
GoodsCategoryTreeVo treeNode = CopierUtil.copy(cate,new GoodsCategoryTreeVo());

8
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;

3
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;

16
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<GoodsCategoryRuleM
GoodsCategoryRule entity = CopierUtil.copy(param,new GoodsCategoryRule());
entity.setBrandIds(ids.toArray(new String[ids.size()]));
entity.setBrandNames(names.toArray(new String[names.size()]));
//加载忽略的类目
if(param.getIgnoreBrandIds()!=null){
List<String> ids2 = new ArrayList<>();
List<String> names2 = new ArrayList<>();
List<String> igIds = Arrays.asList(param.getIgnoreBrandIds());
if(CollUtil.isNotEmpty(igIds)){
List<GoodsCategory> 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 {

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

@ -320,6 +320,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> im
newOrderItemList.add(orderItem);
}
this.handleCategoryRule(categoryRule,newOrderItemList);
this.updateById(order);
//移除已有的ITEM
@ -334,6 +335,52 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> im
}
}
/**
* 拦截规则
* @param categoryRule
* @param orderItems
*/
private void handleCategoryRule(GoodsCategoryRule categoryRule, List<OmsOrderItem> orderItems) {
if(categoryRule!=null){
List<String> cids = Arrays.asList(categoryRule.getBrandIds());
List<String> igcids = null;
if(categoryRule.getIgnoreBrandIds()!=null){
igcids = Arrays.asList(categoryRule.getIgnoreBrandIds());
}
Set<Long> spuIds = orderItems.stream().map(OmsOrderItem::getSpuId).collect(Collectors.toSet());
List<Long> skuIds = orderItems.stream().map(OmsOrderItem::getSkuId).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(skuIds)){
List<GoodsSpu> spuTmpList = goodsSpuService.listByIds(skuIds);
spuIds.addAll(spuTmpList.stream().map(GoodsSpu::getId).collect(Collectors.toList()));
}
List<GoodsSpu> 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<String> 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<OmsOrderMapper,OmsOrder> im
}
}
this.handleCategoryRule(categoryRule,orderItems);
omsOrderItemService.saveBatch(orderItems);
//清空勾选的购物车
@ -557,12 +604,22 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> 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<Long> spuIds = orderItemList.stream().map(OmsOrderItem::getSpuId).collect(Collectors.toList());
@ -576,7 +633,6 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> 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();

20
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

2
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<TbsActivityGoods> {
public interface TbsActivityGoodsMapper extends BaseMapper<TbsActivityGoods>{
}

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

@ -87,6 +87,12 @@ public interface TbsCostApplyService extends IService<TbsCostApply> {
*/
void flushCostStatus(Long costApplyId,boolean isContractFlag);
/**
* 活动变动时调用同步费用数据
* @param costApplyId
*/
void flushAmtByAct(Long costApplyId);
void buildMainData4ROI(TbsCostApply tbsCostApply, Map<String, Object> data);
}

20
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

@ -425,6 +425,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
}
}
}
BmsSupplier supplier = bmsSupplierService.getById(tbsCostApply.getSupplierId());
if(supplier.getCostFlag().equals(0)){
Assert.throwEx("["+supplier.getName()+"]无投放费用权限");
@ -1262,10 +1263,29 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
}
@Override
public void flushAmtByAct(Long costApplyId) {
//select sum(tbs_activity.total_amount) from tbs_activity where del_flag = 0 and cancel_flag = 0
LambdaQueryWrapper<TbsActivity> actLqw = new LambdaQueryWrapper<>();
actLqw.eq(TbsActivity::getCostApplyId,costApplyId);
actLqw.eq(TbsActivity::getCancelFlag,0);
List<TbsActivity> 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<TbsActivity> actLqw = new LambdaQueryWrapper<>();
actLqw.eq(TbsActivity::getCostApplyId,costApplyId);
actLqw.eq(TbsActivity::getCancelFlag,0);
List<TbsActivity> activityList = tbsActivityMapper.selectList(actLqw);
if(isContractFlag){
LambdaQueryWrapper<TbsActivityPayCondition> lqw = new LambdaQueryWrapper<>();

6
src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java

@ -39,6 +39,12 @@ public interface VtbVerificationService extends IService<VtbVerification> {
*/
void release(Long activityId,Boolean throwEx);
/**
* 取消释放
* @param activityId
*/
void cancelRelease(Long activityId);
/**
* 冻结
* @param param

50
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -553,6 +553,56 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
costApplyService.flushCostStatus(costApply.getId(),costApply.getContractFlag()!=null&&costApply.getContractFlag().equals(1));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelRelease(Long activityId) {
TbsActivity activity = activityService.getById(activityId);
if(activity.getCancelFlag().equals(1)){
Assert.throwEx("异动的活动,无法操作");
}
if(activity.getReleaseFlag().equals(1)){
//还原活动状态
TbsActivity param = new TbsActivity();
param.setId(activityId);
param.setActivityState(TbsActivityState.STATE_0_Todo);
param.setReleaseUserId("");
param.setReleaseUserName("");
param.setReleaseFlag(0);
param.setReleaseTime(LocalDateTime.now());
param.setReleaseAmount(BigDecimal.ZERO);
param.setFinishedFlag(0);
activityService.updateById(param);
//还原费用申请状态
TbsCostApply costApply = new TbsCostApply();
costApply.setId(activity.getCostApplyId());
costApply.setChargeState(TbsCostApplyState.State_2_actioning.getCode());
costApplyService.updateById(costApply);
//移除流水
LambdaQueryWrapper<VtbFundFlow> flowLqw = new LambdaQueryWrapper<>();
flowLqw.eq(VtbFundFlow::getFundType,VtbFundFlowType.Release);
flowLqw.eq(VtbFundFlow::getVerificationId,0);
flowLqw.eq(VtbFundFlow::getActivityId,activityId);
fundFlowService.remove(flowLqw);
//还原预算占用,移除释放的budgetLog
LambdaQueryWrapper<TbsBudgetLog> logLqw = new LambdaQueryWrapper<>();
logLqw.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_4.getCode());
logLqw.eq(TbsBudgetLog::getActivityId,activityId);
budgetLogService.remove(logLqw);
//更新付款条件状态
LambdaQueryWrapper<TbsActivityPayCondition> 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) {

Loading…
Cancel
Save