diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java index 8cd5c963..ba876013 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java @@ -10,5 +10,8 @@ import com.qs.serve.modules.bms.entity.BmsCostCenter; */ public interface BmsCostCenterService extends IService { + BmsCostCenter getByCode(String code); + BmsCostCenter getByName(String name); + } diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java index 93575c2d..889a40d6 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java @@ -20,6 +20,7 @@ public interface BmsRegion2Service extends IService { BmsRegion2 getByCode(String code); + BmsRegion2 getByName(String name,Integer level); // void flushLevel(BmsRegion2 param); void flushAllLevel(boolean batchUpdate); diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java index 70a62c54..89d4f048 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java @@ -20,6 +20,8 @@ public interface BmsRegionService extends IService { BmsRegion getByCode(String code); + BmsRegion getByName(String name,Integer level); + // void flushLevel(BmsRegion param); void flushAllLevel(boolean batchUpdate); diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java index 045087d8..78f976fe 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java @@ -11,5 +11,8 @@ import com.qs.serve.modules.bms.entity.BmsSubject; public interface BmsSubjectService extends IService { void updatePathNameByParent(BmsSubject subject); + + BmsSubject getByName(String name); + } diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java index af89f15e..f9fe19e9 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java @@ -20,6 +20,8 @@ public interface BmsSupplierService extends IService { BmsSupplier getByCode(String code,String belong); + BmsSupplier getByName(String String); + List listChild(String pid); List listByRegionId(String regionId); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java index 7bde4c7e..6c6a5904 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.bms.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -18,5 +19,19 @@ import com.qs.serve.modules.bms.mapper.BmsCostCenterMapper; @AllArgsConstructor public class BmsCostCenterServiceImpl extends ServiceImpl implements BmsCostCenterService { + @Override + public BmsCostCenter getByCode(String code) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsCostCenter::getCode,code); + return this.getOne(lqw,false); + } + + @Override + public BmsCostCenter getByName(String name) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsCostCenter::getName,name); + return this.getOne(lqw,true); + } + } diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java index 3af1fe38..a47d07ce 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java @@ -113,6 +113,16 @@ public class BmsRegion2ServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsRegion2::getName,name); + if(level!=null){ + lqw.eq(BmsRegion2::getLevel,level); + } + return this.getOne(lqw,true); + } + public BmsRegion2 toSetLevel(BmsRegion2 param) { if(StringUtils.hasText(param.getPid()) && !param.getPid().equals("0")){ BmsRegion2 parent = this.getById(param.getPid()); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java index 0396305f..3aeb6165 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java @@ -114,6 +114,16 @@ public class BmsRegionServiceImpl extends ServiceImpl return this.getOne(lqw,false); } + @Override + public BmsRegion getByName(String name, Integer level) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsRegion::getName,name); + if(level!=null){ + lqw.eq(BmsRegion::getLevel,level); + } + return this.getOne(lqw,true); + } + public BmsRegion flushLevel(BmsRegion param) { if(StringUtils.hasText(param.getPid()) && !param.getPid().equals("0") ){ BmsRegion parent = this.getById(param.getPid()); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java index f62de1d0..5878e0f7 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java @@ -45,5 +45,12 @@ public class BmsSubjectServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsSubject::getSubjectName,name); + return getOne(lqw,false); + } } diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java index 36aa0d52..dcf8bcc1 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java @@ -13,6 +13,8 @@ public interface GoodsCategoryService extends IService { GoodsCategory getByCode(String code); + GoodsCategory getByName(String code,Integer level); + void add(GoodsCategory category); void modifyLevel(GoodsCategoryLevelBo category); diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java index 56e47f03..a593a576 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java @@ -17,6 +17,8 @@ public interface GoodsSkuService extends IService { GoodsSku getByCode(String code); + List getByCodes(List codes); + List getBySpuId(Long spuId); List selectSkuVo(GoodsSku goodsSku); diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java index 9f9f291a..06153f22 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java @@ -25,6 +25,8 @@ public interface GoodsSpuService extends IService { GoodsSpu getByCode(String code); + GoodsSpu getByName(String name); + List saveBatchTasteSpu(GoodsSpuBatchTasteBo batchTasteBo); void edit(GoodsSpuEditBo spuEditBo); diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java index e4bd309d..84b9e76a 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java @@ -35,6 +35,14 @@ public class GoodsCategoryServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + lqw.eq(GoodsCategory::getName,name); + lqw.eq(GoodsCategory::getLevel,level); + return this.getOne(lqw,true); + } + @Override public void add(GoodsCategory category) { category.setId(null); diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java index ea710f99..8c271c93 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java @@ -47,6 +47,13 @@ public class GoodsSkuServiceImpl extends ServiceImpl im return getOne(lqw,false); } + @Override + public List getByCodes(List codes) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(GoodsSku::getSkuCode,codes); + return this.list(lqw); + } + @Override public List getBySpuId(Long spuId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java index 064b8e93..7ca582d2 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java @@ -52,6 +52,13 @@ public class GoodsSpuServiceImpl extends ServiceImpl im return getOne(lqw,false); } + @Override + public GoodsSpu getByName(String name) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(GoodsSpu::getName,name); + return getOne(lqw,true); + } + @Override public GoodsSpuVo getVoById(Long id) { GoodsSpu goodsSpu = this.getById(id); 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 1e856225..7c48c6a7 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 @@ -12,7 +12,9 @@ import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.entity.TbsBudgetCondition; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetStateBo; +import com.qs.serve.modules.tbs.entity.bo.TbsScheduleItemBudgetBo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.service.TbsBudgetConditionService; @@ -162,6 +164,22 @@ public class TbsBudgetController { return R.ok(); } + /** + * 修改周期金额 + * @param param + * @return + */ + @PostMapping("/updateScheduleItemAmount") + @SysLog(module = SystemModule.Budget, title = "预算", biz = BizType.UPDATE) + @PreAuthorize("hasRole('tbs:budget:update')") + public R updateById(@RequestBody @Valid TbsScheduleItemBudgetBo param){ + TbsScheduleItemBudget itemBudget = new TbsScheduleItemBudget(); + itemBudget.setId(param.getId()); + itemBudget.setBudgetAmount(param.getBudgetAmount()); + tbsScheduleItemBudgetService.updateById(itemBudget); + return R.ok(); + } + /** * 新增 * @param param @@ -176,6 +194,19 @@ public class TbsBudgetController { return R.ok(); } + /** + * excel导入 + * @param budgetBo + * @return + */ + @PostMapping("/import") + @SysLog(module = SystemModule.Budget, title = "预算", biz = BizType.INSERT) + @PreAuthorize("hasRole('tbs:budget:insert')") + public R importBo(@RequestBody @Valid TbsBudgetExcelBo budgetBo){ + tbsBudgetService.modifyByExcel(budgetBo); + return R.ok(); + } + /** * 删除 * @param ids 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 139e1d3f..650270fc 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 @@ -31,6 +31,9 @@ public class TbsBudget implements Serializable { @TableId(type = IdType.AUTO) private Long id; + /** 预算编码 */ + private String budgetCode; + /** 费用启用状态 */ private Integer budgetState; 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 a3213704..f5d97ddd 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 @@ -28,6 +28,9 @@ public class TbsBudgetBo implements Serializable { /** id */ private Long id; + /** 预算编码 */ + private String budgetCode; + /** 科目id */ @NotNull(message = "科目id不能为空") private Long subjectId; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java new file mode 100644 index 00000000..dfc3e901 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java @@ -0,0 +1,84 @@ +package com.qs.serve.modules.tbs.entity.bo; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 预算 Bo + * @author YenHex + * @since 2022-11-12 + */ +@Data +public class TbsBudgetExcelBo implements Serializable { + + private String budgetCode; + + /** 成本中心id */ + private String subjectName; + + /** + 成本中心类型: + center, + customer, + bizRegion, + saleRegion, + */ + private String centerType; + + /** + * 成本中心名称 + */ + private String centerName; + + /** 成本中心编码 */ + private String centerCode; + + /** 区域等级 */ + private Integer centerRegionLevel; + + /** 品牌名称列表 */ + private List brandNames; + + /** 品类名称列表 */ + private List categoryNames; + + /** 系列名称列表 */ + private List seriesNames; + + /** 商品名称列表(前端显示为sku) */ + private List spuNames; + + /** skuId列表(前端显示为单品) */ + private List skuCodes; + + /** 备注 */ + private String remark; + + /** 备注 */ + private String scheduleName; + + private BigDecimal amountYear; + private BigDecimal amountQ1; + private BigDecimal amountQ2; + private BigDecimal amountQ3; + private BigDecimal amountQ4; + private BigDecimal amountM1; + private BigDecimal amountM2; + private BigDecimal amountM3; + private BigDecimal amountM4; + private BigDecimal amountM5; + private BigDecimal amountM6; + private BigDecimal amountM7; + private BigDecimal amountM8; + private BigDecimal amountM9; + private BigDecimal amountM10; + private BigDecimal amountM11; + private BigDecimal amountM12; + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsScheduleItemBudgetBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsScheduleItemBudgetBo.java index 5633d1ce..958dcd40 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsScheduleItemBudgetBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsScheduleItemBudgetBo.java @@ -12,6 +12,7 @@ import lombok.Data; import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; +import javax.validation.constraints.DecimalMin; import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; @@ -25,65 +26,13 @@ public class TbsScheduleItemBudgetBo implements Serializable { private static final long serialVersionUID = 1L; - /** id */ + /** 考核期项费用id */ private Long id; - /** 考核id */ - @NotNull(message = "考核id不能为空") - private Long scheduleId; - - /** 考核编码 */ - @NotBlank(message = "考核编码不能为空") - @Length(max = 30,message = "考核编码长度不能超过30字") - private String itemName; - - /** 开始时间 */ - @NotNull(message = "开始时间不能为空") - @Length(max = 0,message = "开始时间长度不能超过0字") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime startDate; - - /** 结束时间 */ - @NotNull(message = "结束时间不能为空") - @Length(max = 0,message = "结束时间长度不能超过0字") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime endDate; - - /** 预算id */ - @NotNull(message = "预算id不能为空") - private Long budgetId; - /** 预算金额 */ + @DecimalMin(value = "0") @NotNull(message = "预算金额不能为空") private BigDecimal budgetAmount; - /** 备注 */ - @Length(max = 255,message = "备注长度不能超过255字") - private String remark; - - /** 创建时间 */ - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime createTime; - - /** 最后更新时间 */ - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime updateTime; - - /** 所属租户 */ - @JsonIgnore - @JsonProperty - private String tenantId; - - /** 创建人 */ - private String createBy; - - /** 更新人 */ - private String updateBy; - - /** 逻辑删除标记(0:显示;1:隐藏) */ - @JsonIgnore - @JsonProperty - private String delFlag; - } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetVo.java index aa7dd3ce..4416ef4c 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetVo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetVo.java @@ -29,6 +29,9 @@ public class TbsBudgetVo implements Serializable { /** id */ private Long id; + /** 预算编码 */ + private String budgetCode; + /** 科目id */ private Long subjectId; 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 e0177e81..8d5cedbf 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 @@ -3,6 +3,7 @@ package com.qs.serve.modules.tbs.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsBudget; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; +import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; /** * 预算 服务接口 @@ -17,5 +18,9 @@ public interface TbsBudgetService extends IService { */ void modify(TbsBudgetBo budgetBo); + void modifyByExcel(TbsBudgetExcelBo budgetBo); + + TbsBudget getByCode(String code); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java index 5d03e825..01b504b7 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java @@ -1,6 +1,7 @@ package com.qs.serve.modules.tbs.service; import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.bms.entity.BmsCostCenter; import com.qs.serve.modules.bms.entity.BmsRegion; import com.qs.serve.modules.bms.entity.BmsRegion2; @@ -51,4 +52,61 @@ public class TbsCenterDtoService { return null; } + /** + * 获取成本中心 + * @param centerType + * @param centerName + * @param centerCode + * @param centerRegionLevel + * @return + */ + public TbsCenterDto getCenterDtoByName(String centerType,String centerName,String centerCode,Integer centerRegionLevel){ + if(centerType.equals(TbsCenterType.center.name())){ + BmsCostCenter costCenter = null; + if(StringUtils.hasText(centerCode)){ + costCenter = costCenterService.getByCode(centerCode); + } + if(costCenter==null&&StringUtils.hasText(centerName)) { + costCenter = costCenterService.getByName(centerName); + } + return new TbsCenterDto(costCenter.getId()+"" ,costCenter.getCode(),costCenter.getName()); + }else if (centerType.equals(TbsCenterType.customer.name())){ + BmsSupplier supplier4Center = null; + if(StringUtils.hasText(centerCode)){ + String belong = null; + if(centerCode.contains("JSB")){ + centerCode = centerCode.replace("JSB",""); + belong = "JSB"; + }else if(centerCode.contains("JSL")){ + centerCode = centerCode.replace("JSL",""); + belong = "JSL"; + } + supplier4Center = supplierService.getByCode(centerCode,belong); + }if(supplier4Center==null&&StringUtils.hasText(centerName)) { + supplier4Center = supplierService.getByName(centerName); + } + return new TbsCenterDto(supplier4Center.getId(),supplier4Center.getCode(),supplier4Center.getName()); + }else if(centerType.equals(TbsCenterType.saleRegion.name())){ + BmsRegion saleRegion = null; + if(StringUtils.hasText(centerCode)){ + saleRegion = saleRegionService.getByCode(centerCode); + } + if(saleRegion==null&&StringUtils.hasText(centerName)){ + saleRegion = saleRegionService.getByName(centerName,centerRegionLevel); + } + return new TbsCenterDto(saleRegion.getId(),saleRegion.getCode(),saleRegion.getName()); + }else if (centerType.equals(TbsCenterType.bizRegion.name())){ + BmsRegion2 bizRegion = null; + if(StringUtils.hasText(centerCode)){ + bizRegion = bizRegionService.getByCode(centerCode); + } + if(bizRegion==null&&StringUtils.hasText(centerName)){ + bizRegion = bizRegionService.getByName(centerName,centerRegionLevel); + } + return new TbsCenterDto(bizRegion.getId(),bizRegion.getCode(),bizRegion.getName()); + } + Assert.throwEx("无法匹配成本中心类型:"+centerType); + return null; + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleService.java index bb733271..9bb179ee 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleService.java @@ -10,5 +10,7 @@ import com.qs.serve.modules.tbs.entity.TbsSchedule; */ public interface TbsScheduleService extends IService { + TbsSchedule getByName(String name); + } 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 0c0b757e..699a4a8d 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 @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CopierUtil; -import com.qs.serve.modules.bms.entity.BmsCostCenter; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.service.BmsCostCenterService; import com.qs.serve.modules.bms.service.BmsSubjectService; @@ -18,16 +17,18 @@ import com.qs.serve.modules.goods.service.GoodsSkuService; import com.qs.serve.modules.goods.service.GoodsSpuService; import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.entity.*; -import com.qs.serve.modules.tbs.entity.bo.TbsActivityGoodsBo; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; +import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; +import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; /** @@ -41,8 +42,6 @@ import java.util.stream.Collectors; public class TbsBudgetServiceImpl extends ServiceImpl implements TbsBudgetService { private final BmsSubjectService subjectService; - private final BmsCostCenterService costCenterService; - private final TbsScheduleService scheduleService; private final TbsBudgetConditionService budgetConditionService; private final TbsScheduleItemBudgetService scheduleItemBudgetService; @@ -63,33 +62,16 @@ public class TbsBudgetServiceImpl extends ServiceImpl if(budget==null){ Assert.throwEx("预算不存在或被移除"); } + if(budget.getBudgetState().equals(1)){ + Assert.throwEx("已开启的预算无法编辑"); + } }else { budget = CopierUtil.copy(budgetBo,new TbsBudget()); } BmsSubject subject = subjectService.getById(budgetBo.getSubjectId()); TbsCenterDto centerDto = tbsCenterDtoService.getCenterDto(budgetBo.getCenterType(),budgetBo.getCenterId()); TbsSchedule schedule = scheduleService.getById(budgetBo.getScheduleId()); - budget.setSubjectId(subject.getId()); - budget.setSubjectCode(subject.getSubjectCode()); - budget.setSubjectName(subject.getSubjectName()); - budget.setCenterId(centerDto.getId()); - budget.setCenterCode(centerDto.getCenterCode()); - budget.setCenterName(centerDto.getCenterName()); - budget.setScheduleId(schedule.getId()); - budget.setScheduleCode(schedule.getCode()); - budget.setScheduleName(schedule.getName()); - //删除条件 - if(budget.getId()!=null){ - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(TbsBudgetCondition::getBudgetId,budget.getId()); - budgetConditionService.remove(lqw); - //删除 费用项 - LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); - lqw2.eq(TbsScheduleItemBudget::getBudgetId,budget.getId()); - scheduleItemBudgetService.remove(lqw2); - } - this.saveOrUpdate(budget); - + initEmptyBudget(budget,subject,centerDto,schedule); //保存 费用项 List scheduleItems = scheduleItemService.listByScheduleId(schedule.getId()); List scheduleItemBudgets = new ArrayList<>(); @@ -111,73 +93,253 @@ public class TbsBudgetServiceImpl extends ServiceImpl } scheduleItemBudgetService.saveBatch(scheduleItemBudgets); //设置条件 + List skuIds = budgetBo.getSkuIds(); + List spuIds = budgetBo.getSpuIds(); + List seriesIds = budgetBo.getSeriesIds(); + List brandIds = budgetBo.getBrandIds(); + List categoryIds = budgetBo.getCategoryIds(); + buildCondition(budget.getId(),brandIds,categoryIds,seriesIds,spuIds,skuIds); + } + + @Override + public TbsBudget getByCode(String code) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsBudget::getBudgetCode,code); + return getOne(lqw,false); + } + + + + /** + * 建立类目条件 + * @param budgetId + * @param categoryIds + * @return + */ + public List buildCategoryCondition(Long budgetId,List categoryIds,String targetType){ List budgetConditions = new ArrayList<>(); - if(CollectionUtil.isNotEmpty(budgetBo.getSkuIds())){ - List skuList = goodsSkuService.listByIds(budgetBo.getSkuIds()); + if(CollectionUtil.isNotEmpty(categoryIds)){ + List categoryList = goodsCategoryService.listByIds(categoryIds); + for (GoodsCategory category : categoryList) { + TbsBudgetCondition condition = new TbsBudgetCondition(); + condition.setBudgetId(budgetId); + condition.setTargetType(targetType); + condition.setTargetId(category.getId()); + condition.setTargetCode(category.getCode()); + condition.setTargetName(category.getName()); + condition.setTargetLevelPathIds(category.getLevelPath()); + condition.setTargetLevelPathNames(category.getLevelPathNames()); + budgetConditions.add(condition); + } + } + return budgetConditions; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void modifyByExcel(TbsBudgetExcelBo budgetBo) { + TbsBudget budget = this.getByCode(budgetBo.getBudgetCode()); + if(budget!=null){ + if(budget.getBudgetState().equals(1)){ + Assert.throwEx("已开启的预算无法编辑"); + } + }else { + budget = new TbsBudget(); + budget.setBudgetCode(budgetBo.getBudgetCode()); + } + List skuIds = null; + List spuIds = null; + if(CollectionUtil.isNotEmpty(budgetBo.getSkuCodes())){ + List goodsSkus = goodsSkuService.listByIds(budgetBo.getSkuCodes()); + if(goodsSkus.size()!=budgetBo.getSkuCodes().size()){ + Assert.throwEx("部分存货编码不存在"); + } + skuIds = goodsSkus.stream().map(GoodsSku::getId).collect(Collectors.toList()); + } + if(CollectionUtil.isNotEmpty(budgetBo.getSpuNames())){ + spuIds = new ArrayList<>(); + for (String spuName : budgetBo.getSpuNames()) { + GoodsSpu goodsSpu = goodsSpuService.getByName(spuName); + if(goodsSpu==null){ + Assert.throwEx("["+spuName+"]单品不存在"); + } + spuIds.add(goodsSpu.getId()); + } + } + List brandIds = this.selectCategory(budgetBo.getBrandNames(),1); + List categoryIds = this.selectCategory(budgetBo.getBrandNames(),2); + List seriesIds = this.selectCategory(budgetBo.getBrandNames(),3); + + BmsSubject subject = subjectService.getByName(budgetBo.getSubjectName()); + TbsCenterDto centerDto = tbsCenterDtoService.getCenterDtoByName( + budgetBo.getCenterType(), + budgetBo.getCenterName(), + budgetBo.getBudgetCode(), + budgetBo.getCenterRegionLevel()); + TbsSchedule schedule = scheduleService.getByName(budgetBo.getScheduleName()); + initEmptyBudget(budget,subject,centerDto,schedule); + //保存 费用项 + List scheduleItems = scheduleItemService.listByScheduleId(schedule.getId()); + List scheduleItemBudgets = new ArrayList<>(); + for (TbsScheduleItem scheduleItem : scheduleItems) { + TbsScheduleItemBudget itemBudget = CopierUtil.copy(scheduleItem,new TbsScheduleItemBudget()); + itemBudget.setId(null); + itemBudget.setScheduleItemId(scheduleItem.getId()); + itemBudget.setBudgetId(budget.getId()); + if(scheduleItem.getItemName().equals("M1")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM1()); + }else if (scheduleItem.getItemName().equals("M2")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM2()); + }else if (scheduleItem.getItemName().equals("M3")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM3()); + }else if (scheduleItem.getItemName().equals("M4")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM4()); + }else if (scheduleItem.getItemName().equals("M5")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM5()); + }else if (scheduleItem.getItemName().equals("M6")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM6()); + }else if (scheduleItem.getItemName().equals("M7")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM7()); + }else if (scheduleItem.getItemName().equals("M8")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM8()); + }else if (scheduleItem.getItemName().equals("M9")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM9()); + }else if (scheduleItem.getItemName().equals("M10")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM10()); + }else if (scheduleItem.getItemName().equals("M11")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM11()); + }else if (scheduleItem.getItemName().equals("M12")){ + itemBudget.setBudgetAmount(budgetBo.getAmountM12()); + }else if (scheduleItem.getItemName().equals("Q1")){ + itemBudget.setBudgetAmount(budgetBo.getAmountQ1()); + }else if (scheduleItem.getItemName().equals("Q2")){ + itemBudget.setBudgetAmount(budgetBo.getAmountQ2()); + }else if (scheduleItem.getItemName().equals("Q3")){ + itemBudget.setBudgetAmount(budgetBo.getAmountQ3()); + }else if (scheduleItem.getItemName().equals("Q4")){ + itemBudget.setBudgetAmount(budgetBo.getAmountQ4()); + }else if (scheduleItem.getItemName().equals("Y")){ + itemBudget.setBudgetAmount(budgetBo.getAmountYear()); + } + if(itemBudget.getBudgetAmount()==null){ + itemBudget.setBudgetAmount(BigDecimal.ZERO); + } + scheduleItemBudgets.add(itemBudget); + } + scheduleItemBudgetService.saveBatch(scheduleItemBudgets); + //设置条件 + buildCondition(budget.getId(),brandIds,categoryIds,seriesIds,spuIds,skuIds); + } + + private List selectCategory(List names,Integer level){ + if(CollectionUtil.isNotEmpty(names)){ + List ids = new ArrayList<>(); + for (String name : names) { + GoodsCategory category = goodsCategoryService.getByName(name,level); + if(category==null){ + if(level==1){ + Assert.throwEx("品牌["+name+"]不存在"); + }else if (level==2){ + Assert.throwEx("品牌["+name+"]不存在"); + }else if (level==3){ + Assert.throwEx("系列["+name+"]不存在"); + } + } + ids.add(category.getId()); + } + return ids; + } + return null; + } + + /** + * 初始化空预算 + * @param budget + * @param subject + * @param centerDto + * @param schedule + */ + private void initEmptyBudget(TbsBudget budget,BmsSubject subject,TbsCenterDto centerDto,TbsSchedule schedule){ + if(subject==null){ + Assert.throwEx("科目不存在"); + } + if(schedule==null){ + Assert.throwEx("考核期不存在"); + } + budget.setSubjectId(subject.getId()); + budget.setSubjectCode(subject.getSubjectCode()); + budget.setSubjectName(subject.getSubjectName()); + budget.setCenterId(centerDto.getId()); + budget.setCenterCode(centerDto.getCenterCode()); + budget.setCenterName(centerDto.getCenterName()); + budget.setScheduleId(schedule.getId()); + budget.setScheduleCode(schedule.getCode()); + budget.setScheduleName(schedule.getName()); + //删除条件 + if(budget.getId()!=null){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsBudgetCondition::getBudgetId,budget.getId()); + budgetConditionService.remove(lqw); + //删除 费用项 + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.eq(TbsScheduleItemBudget::getBudgetId,budget.getId()); + scheduleItemBudgetService.remove(lqw2); + } + this.saveOrUpdate(budget); + } + + /** + * 建立条件数据 + * @param budgetId + * @param brandIds + * @param categoryIds + * @param seriesIds + * @param spuIds + * @param skuIds + */ + private void buildCondition(Long budgetId,List brandIds,List categoryIds,List seriesIds,List spuIds,List skuIds){ + List budgetConditions = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(skuIds)) { + List skuList = goodsSkuService.listByIds(skuIds); for (GoodsSku sku : skuList) { GoodsSpu goodsSpu = goodsSpuService.getById(sku.getSpuId()); GoodsCategory category1 = goodsCategoryService.getById(goodsSpu.getCategoryFirst()); GoodsCategory category2 = goodsCategoryService.getById(goodsSpu.getCategorySecond()); GoodsCategory category3 = goodsCategoryService.getById(goodsSpu.getCategoryThird()); TbsBudgetCondition condition = new TbsBudgetCondition(); - condition.setBudgetId(budget.getId()); + condition.setBudgetId(budgetId); condition.setTargetType(TbsGoodsType.sku.name()); condition.setTargetId(sku.getId()); condition.setTargetCode(sku.getSkuCode()); condition.setTargetName(sku.getSpecInfos()); - condition.setTargetLevelPathIds(category1.getId()+"_"+category2.getId()+"_"+category3.getId()+"_"+goodsSpu.getId()+"_"+sku.getId()); - condition.setTargetLevelPathNames(category1.getName()+"_"+category2.getName()+"_"+category3.getName()+"_"+goodsSpu.getName()+"_"+sku.getSpecInfos()); + condition.setTargetLevelPathIds(category1.getId() + "_" + category2.getId() + "_" + category3.getId() + "_" + goodsSpu.getId() + "_" + sku.getId()); + condition.setTargetLevelPathNames(category1.getName() + "_" + category2.getName() + "_" + category3.getName() + "_" + goodsSpu.getName() + "_" + sku.getSpecInfos()); budgetConditions.add(condition); } } - if(CollectionUtil.isNotEmpty(budgetBo.getSpuIds())){ - List spuList = goodsSpuService.listByIds(budgetBo.getSpuIds()); + if (CollectionUtil.isNotEmpty(spuIds)) { + List spuList = goodsSpuService.listByIds(spuIds); for (GoodsSpu goodsSpu : spuList) { GoodsCategory category1 = goodsCategoryService.getById(goodsSpu.getCategoryFirst()); GoodsCategory category2 = goodsCategoryService.getById(goodsSpu.getCategorySecond()); GoodsCategory category3 = goodsCategoryService.getById(goodsSpu.getCategoryThird()); TbsBudgetCondition condition = new TbsBudgetCondition(); - condition.setBudgetId(budget.getId()); + condition.setBudgetId(budgetId); condition.setTargetType(TbsGoodsType.spu.name()); condition.setTargetId(goodsSpu.getId()); condition.setTargetCode(goodsSpu.getSpuCode()); condition.setTargetName(goodsSpu.getName()); - condition.setTargetLevelPathIds(category1.getId()+"_"+category2.getId()+"_"+category3.getId()+"_"+goodsSpu.getId()); - condition.setTargetLevelPathNames(category1.getName()+"_"+category2.getName()+"_"+category3.getName()+"_"+goodsSpu.getName()); + condition.setTargetLevelPathIds(category1.getId() + "_" + category2.getId() + "_" + category3.getId() + "_" + goodsSpu.getId()); + condition.setTargetLevelPathNames(category1.getName() + "_" + category2.getName() + "_" + category3.getName() + "_" + goodsSpu.getName()); budgetConditions.add(condition); } } - budgetConditions.addAll(buildCategoryCondition(budget.getId(),budgetBo.getSeriesIds(),TbsGoodsType.series.name())); - budgetConditions.addAll(buildCategoryCondition(budget.getId(),budgetBo.getCategoryIds(),TbsGoodsType.category.name())); - budgetConditions.addAll(buildCategoryCondition(budget.getId(),budgetBo.getBrandIds(),TbsGoodsType.brand.name())); + budgetConditions.addAll(buildCategoryCondition(budgetId, seriesIds, TbsGoodsType.series.name())); + budgetConditions.addAll(buildCategoryCondition(budgetId, categoryIds, TbsGoodsType.category.name())); + budgetConditions.addAll(buildCategoryCondition(budgetId, brandIds, TbsGoodsType.brand.name())); budgetConditionService.saveBatch(budgetConditions); } - /** - * 建立类目条件 - * @param budgetId - * @param categoryIds - * @return - */ - public List buildCategoryCondition(Long budgetId,List categoryIds,String targetType){ - List budgetConditions = new ArrayList<>(); - if(CollectionUtil.isNotEmpty(categoryIds)){ - List categoryList = goodsCategoryService.listByIds(categoryIds); - for (GoodsCategory category : categoryList) { - TbsBudgetCondition condition = new TbsBudgetCondition(); - condition.setBudgetId(budgetId); - condition.setTargetType(targetType); - condition.setTargetId(category.getId()); - condition.setTargetCode(category.getCode()); - condition.setTargetName(category.getName()); - condition.setTargetLevelPathIds(category.getLevelPath()); - condition.setTargetLevelPathNames(category.getLevelPathNames()); - budgetConditions.add(condition); - } - } - return budgetConditions; - } - - } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleServiceImpl.java index d4de1c28..2f85c989 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -18,5 +19,12 @@ import com.qs.serve.modules.tbs.mapper.TbsScheduleMapper; @AllArgsConstructor public class TbsScheduleServiceImpl extends ServiceImpl implements TbsScheduleService { + @Override + public TbsSchedule getByName(String name) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsSchedule::getName,name); + return this.getOne(lqw,false); + } + }