diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java index a784ed53..5bd2974a 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java @@ -187,6 +187,12 @@ public class GoodsSpu implements Serializable { @TableField(exist = false) private String keyword; + @TableField(exist = false) + private String keywordName; + + @TableField(exist = false) + private String keywordCode; + @TableField(exist = false) private Integer skuSpecialFlag; diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java index 09bc019e..3d0441b2 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java @@ -30,6 +30,7 @@ import com.qs.serve.modules.tbs.entity.so.TbsBudgetSo; import javax.validation.Valid; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -196,15 +197,40 @@ public class TbsBudgetController { } /** - * 更新状态 + * 更新跨年状态 * @param param * @return */ - @PostMapping("/updateState") + @PostMapping("/updateCrossYearState") @SysLog(module = SystemModule.Budget, title = "预算", biz = BizType.UPDATE) - @PreAuthorize("hasRole('tbs:budget:update')") public R updateById(@RequestBody @Valid TbsBudgetStateBo param){ - tbsBudgetService.startBudget(param.getId()); + TbsBudget budget = tbsBudgetService.getById(param.getId()); +// LocalDate nowDate = LocalDate.now(); +// int currYear = nowDate.getYear(); +// List scheduleItems = tbsScheduleItemService.listByScheduleId(budget.getScheduleId()); +// budget.setCrossYearFlag(param.getCrossYearFlag()); +// if(scheduleItems.size()>0){ +// TbsScheduleItem s = scheduleItems.get(0); +// int year = s.getEndDate().getYear(); +// int diff = currYear-year ; +// //默认值 +// budget.setStopFlag(0); +// if(diff>1){ +// //超过1年 +// budget.setStopFlag(1); +// }else if (diff==1){ +// //刚过1年期间 +// if(!param.getCrossYearFlag().equals(1)){ +// budget.setStopFlag(1); +// } +// } +// }else { +// //未设置周期,定义为停用 +// budget.setStopFlag(1); +// } + budget.setCrossYearFlag(param.getCrossYearFlag()); + tbsBudgetService.updateById(budget); + tbsBudgetService.syncStopFlag(); return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java index d52cb7e9..a3126cbf 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java @@ -43,6 +43,12 @@ public class TbsBudget implements Serializable { /** 费用启用状态 0/1 */ private Integer budgetState; + /** 停用状态 0/1 */ + private Integer stopFlag; + + /** 是否允许跨年,控制停用状态 */ + private Integer crossYearFlag; + /** 审批流程状态 */ private Integer budgetCheckState; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBo.java index e91b6d4f..6f484666 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBo.java @@ -38,6 +38,9 @@ public class TbsBudgetBo implements Serializable { @NotNull(message = "成本中心id不能为空") private String centerId; + /** 是否允许跨年,控制停用状态 */ + private Integer crossYearFlag; + /** * 成本中心类型: center, diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetStateBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetStateBo.java index 426cbe29..24507c0a 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetStateBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetStateBo.java @@ -15,9 +15,12 @@ public class TbsBudgetStateBo { @NotNull private Long id; +// +// /** 费用启用状态 */ +// @NotNull +// private Integer budgetState; - /** 费用启用状态 */ - @NotNull - private Integer budgetState; + /** 是否允许跨年,控制停用状态 */ + private Integer crossYearFlag; } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsBudgetSo.java b/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsBudgetSo.java index a7c0122c..c5bbdbdc 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsBudgetSo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/so/TbsBudgetSo.java @@ -28,6 +28,12 @@ public class TbsBudgetSo implements Serializable { private Integer budgetState; + /** 停用状态 0/1 */ + private Integer stopFlag; + + /** 是否允许跨年,控制停用状态 */ + private Integer crossYearFlag; + /** 预算标题 */ private String budgetCode; diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMapper.java index 767699ad..f04fca10 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.tbs.entity.TbsBudget; import com.qs.serve.modules.tbs.entity.so.TbsBudgetSo; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; @@ -31,5 +32,64 @@ public interface TbsBudgetMapper extends BaseMapper { @Update("update tbs_budget set center_combo = concat(center_type,'_',center_id) where id = #{budgetId}") int updateBudgetComboCenter(@Param("budgetId")Long budgetId); + + /** + * 查询未过期的预算ID + * @return + */ + @InterceptorIgnore(tenantLine = "true") + @Select("select tbs_budget.id " + + " from tbs_schedule_item " + + " left join tbs_budget on tbs_schedule_item.schedule_id = tbs_budget.schedule_id " + + " where YEAR(end_date) >= YEAR(CURRENT_DATE) " + + " and tbs_schedule_item.del_flag = 0 " + + " and tbs_budget.del_flag = 0 " + + " GROUP BY tbs_budget.id") + List selectNotExpireBudgetId(); + + /** + * 查询上年过期的预算ID + * @return + */ + @InterceptorIgnore(tenantLine = "true") + @Select("select tbs_budget.id " + + "from tbs_schedule_item " + + "left join tbs_budget on tbs_schedule_item.schedule_id = tbs_budget.schedule_id " + + "where YEAR(end_date) = YEAR(CURRENT_DATE) -1 " + + "and cross_year_flag = 0 " + + "and tbs_schedule_item.del_flag = 0 " + + "and tbs_budget.del_flag = 0 " + + "GROUP BY tbs_budget.id") + List selectLastYearStopBudgetId(); + + /** + * 查询未过期的预算ID + * @return + */ + @InterceptorIgnore(tenantLine = "true") + @Select("select tbs_budget.id " + + "from tbs_schedule_item " + + "left join tbs_budget on tbs_schedule_item.schedule_id = tbs_budget.schedule_id " + + "where YEAR(end_date) = YEAR(CURRENT_DATE) -1 " + + "and cross_year_flag = 1 " + + "and tbs_schedule_item.del_flag = 0 " + + "and tbs_budget.del_flag = 0 " + + "GROUP BY tbs_budget.id") + List selectLastYearPassBudgetId(); + + /** + * 一年前的过期的预算 + * @return + */ + @InterceptorIgnore(tenantLine = "true") + @Select("select tbs_budget.id " + + "from tbs_schedule_item " + + "left join tbs_budget on tbs_schedule_item.schedule_id = tbs_budget.schedule_id " + + "where YEAR(end_date) < YEAR(CURRENT_DATE) -1 " + + "and tbs_schedule_item.del_flag = 0 " + + "and tbs_budget.del_flag = 0 " + + "GROUP BY tbs_budget.id ") + List selectExpireBudgetId(); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java index fe398d4b..0ae4fa76 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetMatchApplication.java @@ -4,17 +4,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.AmountDTO; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.StringUtils; +import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.common.util.CostSort2WrapperUtil; -import com.qs.serve.modules.tbs.entity.TbsActivity; -import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; -import com.qs.serve.modules.tbs.entity.TbsBudget; -import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.dto.TbsCenterGoodsGroupDTO; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableResultVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetMatchMapper; +import com.qs.serve.modules.tbs.mapper.TbsCostApplyMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; @@ -34,6 +33,7 @@ import java.util.stream.Collectors; @AllArgsConstructor public class TbsBudgetMatchApplication { + private final TbsCostApplyMapper tbsCostApplyMapper; private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService; private final TbsActivityService activityService; private final TbsBudgetMatchMapper budgetMatchMapper; @@ -41,6 +41,8 @@ public class TbsBudgetMatchApplication { public TbsBudgetTableResultVo getMatchResult(Long costApplyId,boolean buildTable){ + TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId); + List activityList = activityService.listByCostApplyId(costApplyId); //list转map,减少循环代码 @@ -79,11 +81,21 @@ public class TbsBudgetMatchApplication { //加载金额统计 this.batchInitScheduleAmount(activityCenterGoodsList, scheduleItemBudgetIds,costApplyId); + + + //加载所有预算 allBudgetIds.add(0L); List allBudgetList = budgetMapper.selectBatchIds(allBudgetIds); Map allBudgetMap = new HashMap<>(allBudgetList.size()); for (TbsBudget budget : allBudgetList) { + //不是回退和异动,需要过滤停用条件 + if(!costApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())&& + !costApply.getChargeState().equals(TbsCostApplyState.State_7_changed.getCode())){ + if(budget.getStopFlag().equals(1)){ + continue; + } + } allBudgetMap.put(budget.getId(),budget); } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java index 2d59ec77..95e75c25 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java @@ -53,5 +53,8 @@ public interface TbsBudgetService extends IService { void moveBudgetAmount(TbsBudgetMoveAmountBo bo); void updateBudgetAfterStart(TbsBudgetUpdateAfterStartBo param); + + void syncStopFlag(); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java index a4482e5c..604a9543 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java @@ -50,6 +50,7 @@ public class TbsBudgetManagerServiceImpl implements TbsBudgetManagerService { .or().in(TbsBudget::getSubjectId,subjectIds); }).in(TbsBudget::getCenterCombo,centerComboList) + .eq(TbsBudget::getStopFlag,0) .select(TbsBudget::getId); List budgetList = budgetMapper.selectList(lqw); return budgetList.stream().map(TbsBudget::getId).collect(Collectors.toList()); diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java index 51e0e9a5..c561c90d 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java @@ -1109,5 +1109,35 @@ public class TbsBudgetServiceImpl extends ServiceImpl buildCondition(budget.getId(),param.getBrandIds(),param.getCategoryIds(),param.getSeriesIds(),param.getSpuIds(),param.getSkuIds()); } + + @Override + public void syncStopFlag() { + + List budgetIds = baseMapper.selectLastYearPassBudgetId(); + List budgetIds2 = baseMapper.selectNotExpireBudgetId(); + + List expireBudgetIds2 = baseMapper.selectLastYearStopBudgetId(); + List expireBudgetIds = baseMapper.selectExpireBudgetId(); + + TbsBudget stopBudget = new TbsBudget(); + stopBudget.setStopFlag(1); + + TbsBudget numalBudget = new TbsBudget(); + numalBudget.setStopFlag(0); + + if(CollectionUtil.isNotEmpty(expireBudgetIds)){ + this.update(stopBudget,new LambdaQueryWrapper().in(TbsBudget::getId,expireBudgetIds)); + } + if(CollectionUtil.isNotEmpty(expireBudgetIds2)){ + this.update(stopBudget,new LambdaQueryWrapper().in(TbsBudget::getId,expireBudgetIds2)); + } + + if(CollectionUtil.isNotEmpty(budgetIds)){ + this.update(numalBudget,new LambdaQueryWrapper().in(TbsBudget::getId,budgetIds)); + } + if(CollectionUtil.isNotEmpty(budgetIds2)){ + this.update(numalBudget,new LambdaQueryWrapper().in(TbsBudget::getId,budgetIds2)); + } + } } diff --git a/src/main/resources/mapper/goods/GoodsSpuMapper.xml b/src/main/resources/mapper/goods/GoodsSpuMapper.xml index 84313c26..ef9af6b2 100644 --- a/src/main/resources/mapper/goods/GoodsSpuMapper.xml +++ b/src/main/resources/mapper/goods/GoodsSpuMapper.xml @@ -178,6 +178,18 @@ `spu`.`spu_code` like concat('%', #{query.keyword},'%') ) + + and ( + `sku`.`sku_code` like concat('%', #{query.keywordCode},'%') or + `spu`.`spu_code` like concat('%', #{query.keywordCode},'%') + ) + + + and ( + `sku`.`sku_name` like concat('%', #{query.keywordName},'%') or + `spu`.`name` like concat('%', #{query.keywordName},'%') + ) + ) UNION ALL SELECT sku.*,1 as rn FROM goods_sku sku @@ -191,6 +203,18 @@ `spu`.`spu_code` like concat('%', #{query.keyword},'%') ) + + and ( + `sku`.`sku_code` like concat('%', #{query.keywordCode},'%') or + `spu`.`spu_code` like concat('%', #{query.keywordCode},'%') + ) + + + and ( + `sku`.`sku_name` like concat('%', #{query.keywordName},'%') or + `spu`.`name` like concat('%', #{query.keywordName},'%') + ) + ) AS goods_sku left join goods_spu on goods_sku.spu_id = goods_spu.id LEFT JOIN `goods_category` `cate1` ON `cate1`.`id` = `goods_spu`.`category_first` @@ -221,6 +245,18 @@ `spu`.`spu_code` like concat('%', #{query.keyword},'%') ) + + and ( + `sku`.`sku_code` like concat('%', #{query.keywordCode},'%') or + `spu`.`spu_code` like concat('%', #{query.keywordCode},'%') + ) + + + and ( + `sku`.`sku_name` like concat('%', #{query.keywordName},'%') or + `spu`.`name` like concat('%', #{query.keywordName},'%') + ) + ) UNION ALL SELECT sku.*,1 as rn FROM goods_sku sku @@ -234,6 +270,18 @@ `spu`.`spu_code` like concat('%', #{query.keyword},'%') ) + + and ( + `sku`.`sku_code` like concat('%', #{query.keywordCode},'%') or + `spu`.`spu_code` like concat('%', #{query.keywordCode},'%') + ) + + + and ( + `sku`.`sku_name` like concat('%', #{query.keywordName},'%') or + `spu`.`name` like concat('%', #{query.keywordName},'%') + ) + ) AS goods_sku left join goods_spu on goods_sku.spu_id = goods_spu.id