From d63347284fa4efdd4b586302e7dc21223deb6ccd Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 1 Apr 2024 11:54:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E5=95=86=E5=93=81=E8=A7=84=E5=88=99=20feat=EF=BC=9A=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=88=90=E6=9C=AC=E4=B8=AD=E5=BF=83=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E9=94=80=E5=94=AE=E8=B4=B9=E7=94=A8=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/bms/entity/BmsCostCenter.java | 3 + .../bms/entity/bo/BmsCostCenterBo.java | 2 + .../bms/entity/vo/BmsCostCenterTreeVo.java | 3 + .../controller/GoodsAccreditController.java | 64 +++++ .../goods/controller/GoodsSpuController.java | 94 +++++-- .../modules/goods/entity/GoodsAccredit.java | 96 +++++++ .../goods/entity/GoodsAccreditItem.java | 95 +++++++ .../serve/modules/goods/entity/GoodsSpu.java | 12 + .../goods/entity/bo/GoodsAccreditBo.java | 49 ++++ .../goods/entity/vo/GoodsAccreditVo.java | 42 +++ .../goods/mapper/GoodsAccreditItemMapper.java | 14 + .../goods/mapper/GoodsAccreditMapper.java | 14 + .../service/GoodsAccreditItemService.java | 14 + .../goods/service/GoodsAccreditService.java | 20 ++ .../goods/service/GoodsRuleService.java | 9 + .../impl/GoodsAccreditItemServiceImpl.java | 22 ++ .../impl/GoodsAccreditServiceImpl.java | 264 ++++++++++++++++++ .../service/impl/GoodsRuleServiceImpl.java | 130 ++++++++- .../oms/service/impl/OmsOrderServiceImpl.java | 7 + .../sys/controller/SysUserController.java | 1 + .../service/PortalOfCostApplication.java | 11 +- 21 files changed, 916 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/GoodsAccredit.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/GoodsAccreditItem.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsAccreditVo.java create mode 100644 src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditItemMapper.java create mode 100644 src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditMapper.java create mode 100644 src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditItemService.java create mode 100644 src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java create mode 100644 src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditItemServiceImpl.java create mode 100644 src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java index 57a54a2f..50e500b9 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java @@ -49,6 +49,9 @@ public class BmsCostCenter implements Serializable { /** 是否所有人可见 */ private Integer visibleFlag; + /** 是否销售费用 */ + private Integer saleCostFlag; + /** 父级节点 */ @NotNull(message = "父级节点不能为空") private Long pid; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java index 8f31407d..61099d83 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java @@ -45,6 +45,8 @@ public class BmsCostCenterBo { /** 是否所有人可见 */ private Integer visibleFlag; + /** 是否销售费用 */ + private Integer saleCostFlag; /** 销售区域id */ private List saleRegionId; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java index 87a45828..60912925 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java @@ -30,6 +30,9 @@ public class BmsCostCenterTreeVo extends TreeNode { @NotNull(message = "父级id不能为空") private Long pid; + /** 是否销售费用 */ + private Integer saleCostFlag; + /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java new file mode 100644 index 00000000..4d24b033 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java @@ -0,0 +1,64 @@ +package com.qs.serve.modules.goods.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.StringUtils; +import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; +import com.qs.serve.modules.goods.entity.vo.GoodsAccreditVo; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.goods.entity.GoodsAccredit; +import com.qs.serve.modules.goods.service.GoodsAccreditService; + +import javax.validation.Valid; +import java.util.List; + +/** + * 商品 授权规则 + * @author YenHex + * @since 2024-04-01 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("goods/accredit") +public class GoodsAccreditController { + + private GoodsAccreditService goodsAccreditService; + + /** + * ID查询 + * @param cateId + * @param spuId + * @param skuId + * @return + */ + @GetMapping("/getById") + public R getById(String cateId,String spuId,String skuId){ + GoodsAccreditVo goodsAccredit = goodsAccreditService.getById(cateId,spuId,skuId); + return R.ok(goodsAccredit); + } + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + @SysLog(module = SystemModule.GOODS, title = "规则", biz = BizType.UPDATE) + public R updateById(@RequestBody @Valid GoodsAccreditBo param){ + goodsAccreditService.modify(param); + return R.ok(); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java index ca49f424..c0794b9c 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java @@ -139,42 +139,76 @@ public class GoodsSpuController { GoodsRuleItemDTO ruleItemDTO = goodsRuleService.buildGoodsRuleItemDTO(ruleItems); if(ruleItemDTO!=null){ - if(CollUtil.isEmpty(param.getSelectNotIntCateIds())){ - param.setSelectNotIntCateIds(ruleItemDTO.getNotInCategoryIds()); - }else if (ruleItemDTO.getNotInCategoryIds()!=null){ - param.getSelectNotIntCateIds().addAll(ruleItemDTO.getNotInCategoryIds()); + if(ruleItemDTO.getNotInCategoryIds()!=null){ + if(CollUtil.isEmpty(param.getSelectNotIntCateIds())){ + param.setSelectNotIntCateIds(ruleItemDTO.getNotInCategoryIds()); + }else{ + param.getSelectNotIntCateIds().addAll(ruleItemDTO.getNotInCategoryIds()); + } } - if (CollUtil.isEmpty(param.getSelectCateIds())){ - param.setSelectCateIds(ruleItemDTO.getOnlyCategoryIds()); - }else if (CollUtil.isNotEmpty(ruleItemDTO.getOnlyCategoryIds())){ - //交集 - Collection ids = cn.hutool.core.collection.CollectionUtil - .intersection(ruleItemDTO.getOnlyCategoryIds(), param.getSelectCateIds()); - List idsList = new ArrayList<>(); - idsList.addAll(ids); - param.setSelectCateIds(idsList); + if(CollUtil.isNotEmpty(ruleItemDTO.getOnlyCategoryIds())){ + if (CollUtil.isEmpty(param.getSelectCateIds())){ + param.setSelectCateIds(ruleItemDTO.getOnlyCategoryIds()); + }else{ + List onlyIds = ruleItemDTO.getOnlyCategoryIds(); + List onlyCategoryList = goodsCategoryService.listByIds(onlyIds); + for (GoodsCategory category : onlyCategoryList) { + List childList = goodsCategoryService.list(new LambdaQueryWrapper() + .likeRight(GoodsCategory::getLevelPath,category.getLevelPath()+"_")); + if(CollUtil.isNotEmpty(childList)){ + List childIds = childList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); + onlyIds.addAll(childIds); + } + } + List selectCateIds = param.getSelectCateIds(); + List goodsCategoryList = goodsCategoryService.listByIds(selectCateIds); + for (GoodsCategory category : goodsCategoryList) { + List childList = goodsCategoryService.list(new LambdaQueryWrapper() + .likeRight(GoodsCategory::getLevelPath,category.getLevelPath()+"_")); + if(CollUtil.isNotEmpty(childList)){ + List childIds = childList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); + selectCateIds.addAll(childIds); + } + } + //交集 + Collection ids = cn.hutool.core.collection.CollectionUtil + .intersection(onlyIds, selectCateIds); + List idsList = new ArrayList<>(); + idsList.addAll(ids); + idsList.add("#"); + param.setSelectCateIds(idsList); + } } - if (CollUtil.isEmpty(param.getSelectIds())){ - List ids = ruleItemDTO.getOnlySpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); - param.setSelectIds(ids); - }else if (CollUtil.isNotEmpty(ruleItemDTO.getOnlySpuIds())){ - List ids = ruleItemDTO.getOnlySpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); - //交集 - Collection id2s = cn.hutool.core.collection.CollectionUtil - .intersection(ids, param.getSelectIds()); - List idsList = new ArrayList<>(); - idsList.addAll(id2s); - param.setSelectIds(idsList); + if(CollUtil.isNotEmpty(ruleItemDTO.getOnlySpuIds())){ + if (CollUtil.isEmpty(param.getSelectIds())){ + List ids = ruleItemDTO.getOnlySpuIds().stream() + .filter(Objects::nonNull).map(Long::parseLong).collect(Collectors.toList()); + param.setSelectIds(ids); + }else{ + List ids = ruleItemDTO.getOnlySpuIds().stream() + .filter(Objects::nonNull).map(Long::parseLong).collect(Collectors.toList()); + //交集 + Collection id2s = cn.hutool.core.collection.CollectionUtil + .intersection(ids, param.getSelectIds()); + List idsList = new ArrayList<>(); + idsList.addAll(id2s); + idsList.add(-1L); + param.setSelectIds(idsList); + } } - if (CollUtil.isEmpty(param.getSelectNotInIds())){ - List ids = ruleItemDTO.getNotInSpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); - param.setSelectNotInIds(ids); - }else if (CollUtil.isNotEmpty(ruleItemDTO.getOnlySpuIds())){ - List ids = ruleItemDTO.getNotInSpuIds().stream().map(Long::parseLong).collect(Collectors.toList()); - param.getSelectNotInIds().addAll(ids); + if(CollUtil.isNotEmpty(ruleItemDTO.getNotInSpuIds())){ + if (CollUtil.isEmpty(param.getSelectNotInIds())){ + List ids = ruleItemDTO.getNotInSpuIds().stream() + .filter(Objects::nonNull).map(Long::parseLong).collect(Collectors.toList()); + param.setSelectNotInIds(ids); + }else{ + List ids = ruleItemDTO.getNotInSpuIds().stream() + .filter(Objects::nonNull).map(Long::parseLong).collect(Collectors.toList()); + param.getSelectNotInIds().addAll(ids); + } } } diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsAccredit.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsAccredit.java new file mode 100644 index 00000000..a4bb5448 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsAccredit.java @@ -0,0 +1,96 @@ +package com.qs.serve.modules.goods.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 规则 实体类 + * @author YenHex + * @since 2024-04-01 + */ +@Data +@TableName("goods_accredit") +public class GoodsAccredit implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 客户id */ + private Long spuId; + + /** 销售区域id */ + @Length(max = 32,message = "销售区域id长度不能超过32字") + private String categoryId; + + /** 空标识 */ + private Integer emptyFlag; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + + public static GoodsAccredit toNewObject(GoodsAccredit source){ + GoodsAccredit accredit = new GoodsAccredit(); + accredit.setId(source.getId()); + accredit.setSpuId(source.getSpuId()); + accredit.setCategoryId(source.getCategoryId()); + accredit.setEmptyFlag(source.getEmptyFlag()); + accredit.setRemark(source.getRemark()); + accredit.setCreateTime(source.getCreateTime()); + accredit.setUpdateTime(source.getUpdateTime()); + accredit.setTenantId(source.getTenantId()); + accredit.setDelFlag(source.getDelFlag()); + accredit.setCreateBy(source.getCreateBy()); + accredit.setUpdateBy(source.getUpdateBy()); + return accredit; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsAccreditItem.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsAccreditItem.java new file mode 100644 index 00000000..6c4fe2c2 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsAccreditItem.java @@ -0,0 +1,95 @@ +package com.qs.serve.modules.goods.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 商品sku规则 实体类 + * @author YenHex + * @since 2024-04-01 + */ +@Data +@TableName("goods_accredit_item") +public class GoodsAccreditItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 规则id */ + @NotNull(message = "规则id不能为空") + private Long accId; + + /** 0:in,1:not-in */ + private Integer accType; + + /** 维度类型:supplier-客户;bizRegion-行政区域;saleRegion-销售区域 */ + @NotNull(message = "维度类型:0-客户;1-行政区域;2-销售区域不能为空") + private String targetType; + + /** 维度编码 */ + @NotBlank(message = "维度编码不能为空") + @Length(max = 255,message = "维度编码长度不能超过255字") + private String targetCode; + + /** 维度名称 */ + @Length(max = 255,message = "维度名称长度不能超过255字") + private String targetName; + + /** 维度id */ + @NotBlank(message = "维度id不能为空") + @Length(max = 30,message = "维度id长度不能超过30字") + private String targetId; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + +} + 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 4172e604..2ac7f698 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 @@ -16,7 +16,11 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + /** * spu 实体类 * @author YenHex @@ -218,6 +222,14 @@ public class GoodsSpu implements Serializable { @TableField(exist = false) private String searchCateRuleId; + public List listCategoryIds(){ + List list = new ArrayList<>(); + list.add(this.getCategoryFirst()); + list.add(this.getCategorySecond()); + list.add(this.getCategoryThird()); + return list.stream().filter(Objects::nonNull).collect(Collectors.toList()); + } + public void toSetSkuInfo(GoodsSku goodsSku){ this.setSkuId(goodsSku.getId()); this.setSkuName(goodsSku.getSkuName()); diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java new file mode 100644 index 00000000..9a07f290 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsAccreditBo.java @@ -0,0 +1,49 @@ +package com.qs.serve.modules.goods.entity.bo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author YenHex + * @since 2024/4/1 + */ +@Data +@NoArgsConstructor +public class GoodsAccreditBo { + + /** 授权ID(更新必传) */ + private Long accId; + + private String spuId; + + private String skuId; + + private String categoryId; + + /** 只能选的销售区域 */ + private List onlySaleRegionIds; + + /** 不能选的销售区域 */ + private List notInSaleRegionIds; + + /** 只能选的行政区域 */ + private List onlyBizRegionIds; + + /** 不能选的行政区域 */ + private List notInBizRegionIds; + + /** 只能选的客户 */ + private List onlySupplierIds; + + /** 不能选的客户 */ + private List notInSupplierIds; + + public GoodsAccreditBo(String categoryId,String spuId,String skuId){ + this.categoryId = categoryId; + this.spuId = spuId; + this.skuId = skuId; + } + +} diff --git a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsAccreditVo.java b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsAccreditVo.java new file mode 100644 index 00000000..a6a14108 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsAccreditVo.java @@ -0,0 +1,42 @@ +package com.qs.serve.modules.goods.entity.vo; + +import com.qs.serve.modules.bms.entity.BmsRegion; +import com.qs.serve.modules.bms.entity.BmsRegion2; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2024/4/1 + */ +@Data +public class GoodsAccreditVo { + + /** 规则ID(更新必传) */ + private Long accreditId; + + /** 备注 */ + private String remark; + + /** 可下单 销售区域 */ + private List onlySaleRegionList; + + /** 不可下单 销售区域 */ + private List notInSaleRegionList; + + /** 可下单 行政区域 */ + private List onlyBizRegionList; + + /** 不可下单 行政区域 */ + private List notInBizRegionList; + + /** 可下单 客户 */ + private List onlySupplierList; + + /** 不可下单 客户 */ + private List notInSupplierList; + + +} diff --git a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditItemMapper.java b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditItemMapper.java new file mode 100644 index 00000000..76e10fb1 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditItemMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.goods.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.goods.entity.GoodsAccreditItem; + +/** + * 商品sku规则 Mapper + * @author YenHex + * @date 2024-04-01 + */ +public interface GoodsAccreditItemMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditMapper.java b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditMapper.java new file mode 100644 index 00000000..77dbcb3a --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsAccreditMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.goods.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.goods.entity.GoodsAccredit; + +/** + * 规则 Mapper + * @author YenHex + * @date 2024-04-01 + */ +public interface GoodsAccreditMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditItemService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditItemService.java new file mode 100644 index 00000000..8b96a9e3 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditItemService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.goods.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.goods.entity.GoodsAccreditItem; + +/** + * 商品sku规则 服务接口 + * @author YenHex + * @date 2024-04-01 + */ +public interface GoodsAccreditItemService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java new file mode 100644 index 00000000..156191d9 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.goods.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.goods.entity.GoodsAccredit; +import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; +import com.qs.serve.modules.goods.entity.vo.GoodsAccreditVo; + +/** + * 规则 服务接口 + * @author YenHex + * @date 2024-04-01 + */ +public interface GoodsAccreditService extends IService { + + void modify(GoodsAccreditBo param); + + GoodsAccreditVo getById(String cateId, String spuId, String skuId); + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java index c56f6e72..02131518 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsRuleService.java @@ -27,5 +27,14 @@ public interface GoodsRuleService extends IService { GoodsRuleItemDTO buildGoodsRuleItemDTO(List ruleItems); + /** + * 检测sku是否符合规则 + * @param skuCodes + * @param ruleItems + * @param throwEx 不判断数量拦截,只条件拦截 + * @return + */ + boolean checkSkuCode(List skuCodes,List ruleItems,boolean throwEx); + } diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditItemServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditItemServiceImpl.java new file mode 100644 index 00000000..123f4580 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditItemServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.goods.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.goods.entity.GoodsAccreditItem; +import com.qs.serve.modules.goods.service.GoodsAccreditItemService; +import com.qs.serve.modules.goods.mapper.GoodsAccreditItemMapper; + +/** + * 商品sku规则 服务实现类 + * @author YenHex + * @since 2024-04-01 + */ +@Slf4j +@Service +@AllArgsConstructor +public class GoodsAccreditItemServiceImpl extends ServiceImpl implements GoodsAccreditItemService { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java new file mode 100644 index 00000000..9d737065 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java @@ -0,0 +1,264 @@ +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.Assert; +import com.qs.serve.modules.bms.entity.BmsRegion; +import com.qs.serve.modules.bms.entity.BmsRegion2; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; +import com.qs.serve.modules.bms.mapper.BmsRegionMapper; +import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; +import com.qs.serve.modules.goods.entity.*; +import com.qs.serve.modules.goods.entity.bo.GoodsAccreditBo; +import com.qs.serve.modules.goods.entity.vo.GoodsAccreditVo; +import com.qs.serve.modules.goods.mapper.GoodsAccreditItemMapper; +import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper; +import com.qs.serve.modules.goods.mapper.GoodsSpuMapper; +import com.qs.serve.modules.goods.service.GoodsAccreditItemService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.goods.service.GoodsAccreditService; +import com.qs.serve.modules.goods.mapper.GoodsAccreditMapper; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 规则 服务实现类 + * @author YenHex + * @since 2024-04-01 + */ +@Slf4j +@Service +@AllArgsConstructor +public class GoodsAccreditServiceImpl extends ServiceImpl implements GoodsAccreditService { + + private final GoodsCategoryMapper categoryMapper; + private final GoodsSpuMapper goodsSpuMapper; + + private final BmsRegionMapper regionMapper; + private final BmsRegion2Mapper region2Mapper; + private final BmsSupplierMapper supplierMapper; + + private final GoodsAccreditItemService goodsAccreditItemService; + + @Override + public void modify(GoodsAccreditBo param) { + GoodsAccredit goodsAccredit = null; + if(param.getAccId()==null){ + goodsAccredit = this.getGoodsAccredit(param); + }else { + goodsAccredit = this.getById(param.getAccId()); + } + + if(goodsAccredit==null){ + Assert.throwEx("参数异常 500B2 "); + } + + boolean b1 = CollUtil.isNotEmpty(param.getNotInSaleRegionIds()); + boolean b2 = CollUtil.isNotEmpty(param.getOnlySaleRegionIds()); + boolean b3 = CollUtil.isNotEmpty(param.getNotInBizRegionIds()); + boolean b4 = CollUtil.isNotEmpty(param.getNotInBizRegionIds()); + boolean b5 = CollUtil.isNotEmpty(param.getOnlySupplierIds()); + boolean b6 = CollUtil.isNotEmpty(param.getNotInSupplierIds()); + + //清空历史 + goodsAccreditItemService.remove(new LambdaQueryWrapper() + .eq(GoodsAccreditItem::getAccId,goodsAccredit.getId())); + + if(!b1 && !b2 && !b3 && !b4 && !b5 && !b6){ + if(goodsAccredit.getId()!=null){ + goodsAccredit.setEmptyFlag(1); + this.updateById(goodsAccredit); + } + }else { + if(goodsAccredit.getId()!=null){ + goodsAccredit.setEmptyFlag(0); + this.updateById(goodsAccredit); + }else { + this.save(goodsAccredit); + param.setAccId(goodsAccredit.getId()); + } + } + Long accId = goodsAccredit.getId(); + + if(b1){ + List saleRegionList = regionMapper.selectBatchIds(param.getOnlySaleRegionIds()); + List list = saleRegionList.stream().map(a->{ + GoodsAccreditItem item = new GoodsAccreditItem(); + item.setAccId(accId); + item.setAccType(0); + item.setTargetType("saleRegion"); + item.setTargetCode(a.getCode()); + item.setTargetName(a.getName()); + item.setTargetId(a.getId()); + return item; + }).collect(Collectors.toList()); + goodsAccreditItemService.saveBatch(list); + } + + if(b2){ + List saleRegionList = regionMapper.selectBatchIds(param.getNotInSaleRegionIds()); + List list = saleRegionList.stream().map(a->{ + GoodsAccreditItem item = new GoodsAccreditItem(); + item.setAccId(accId); + item.setAccType(1); + item.setTargetType("saleRegion"); + item.setTargetCode(a.getCode()); + item.setTargetName(a.getName()); + item.setTargetId(a.getId()); + return item; + }).collect(Collectors.toList()); + goodsAccreditItemService.saveBatch(list); + } + + if(b3){ + List regionList = region2Mapper.selectBatchIds(param.getOnlyBizRegionIds()); + List list = regionList.stream().map(a->{ + GoodsAccreditItem item = new GoodsAccreditItem(); + item.setAccId(accId); + item.setAccType(0); + item.setTargetType("bizRegion"); + item.setTargetCode(a.getCode()); + item.setTargetName(a.getName()); + item.setTargetId(a.getId()); + return item; + }).collect(Collectors.toList()); + goodsAccreditItemService.saveBatch(list); + } + + if(b4){ + List regionList = region2Mapper.selectBatchIds(param.getNotInBizRegionIds()); + List list = regionList.stream().map(a->{ + GoodsAccreditItem item = new GoodsAccreditItem(); + item.setAccId(accId); + item.setAccType(1); + item.setTargetType("bizRegion"); + item.setTargetCode(a.getCode()); + item.setTargetName(a.getName()); + item.setTargetId(a.getId()); + return item; + }).collect(Collectors.toList()); + goodsAccreditItemService.saveBatch(list); + } + + if(b5){ + List supplierList = supplierMapper.selectBatchIds(param.getOnlySupplierIds()); + List list = supplierList.stream().map(a->{ + GoodsAccreditItem item = new GoodsAccreditItem(); + item.setAccId(accId); + item.setAccType(0); + item.setTargetType("supplier"); + item.setTargetCode(a.getCode()); + item.setTargetName(a.getName()); + item.setTargetId(a.getId()); + return item; + }).collect(Collectors.toList()); + goodsAccreditItemService.saveBatch(list); + } + + if(b6){ + List supplierList = supplierMapper.selectBatchIds(param.getNotInSupplierIds()); + List list = supplierList.stream().map(a->{ + GoodsAccreditItem item = new GoodsAccreditItem(); + item.setAccId(accId); + item.setAccType(1); + item.setTargetType("supplier"); + item.setTargetCode(a.getCode()); + item.setTargetName(a.getName()); + item.setTargetId(a.getId()); + return item; + }).collect(Collectors.toList()); + goodsAccreditItemService.saveBatch(list); + } + + } + + + @Override + public GoodsAccreditVo getById(String cateId, String spuId, String skuId) { + GoodsAccredit accredit = this.getGoodsAccredit(new GoodsAccreditBo(cateId,spuId,skuId)); + GoodsAccreditVo accreditVo = new GoodsAccreditVo(); + if(accredit!=null){ + List accreditItemList = goodsAccreditItemService + .list(new LambdaQueryWrapper().eq(GoodsAccreditItem::getAccId,accredit.getId())); + Map> accMap = accreditItemList.stream() + .collect(Collectors.groupingBy(GoodsAccreditItem::getTargetType)); + List list1 = accMap.get("supplier"); + List list2 = accMap.get("bizRegion"); + List list3 = accMap.get("caleRegion"); + + if(CollUtil.isNotEmpty(list1)){ + Map> listMap = list1.stream() + .collect(Collectors.groupingBy(GoodsAccreditItem::getAccType)); + List onlyList = listMap.get(0); + List notInList = listMap.get(1); + if(CollUtil.isNotEmpty(onlyList)){ + List ids = onlyList.stream().map(GoodsAccreditItem::getTargetId).collect(Collectors.toList()); + accreditVo.setOnlySupplierList(supplierMapper.selectBatchIds(ids)); + } + if(CollUtil.isNotEmpty(notInList)){ + List ids = notInList.stream().map(GoodsAccreditItem::getTargetId).collect(Collectors.toList()); + accreditVo.setNotInSupplierList(supplierMapper.selectBatchIds(ids)); + } + } + + if(CollUtil.isNotEmpty(list2)){ + Map> listMap = list2.stream() + .collect(Collectors.groupingBy(GoodsAccreditItem::getAccType)); + List onlyList = listMap.get(0); + List notInList = listMap.get(1); + if(CollUtil.isNotEmpty(onlyList)){ + List ids = onlyList.stream().map(GoodsAccreditItem::getTargetId).collect(Collectors.toList()); + accreditVo.setOnlyBizRegionList(region2Mapper.selectBatchIds(ids)); + } + if(CollUtil.isNotEmpty(notInList)){ + List ids = notInList.stream().map(GoodsAccreditItem::getTargetId).collect(Collectors.toList()); + accreditVo.setNotInBizRegionList(region2Mapper.selectBatchIds(ids)); + } + } + + if(CollUtil.isNotEmpty(list3)){ + Map> listMap = list3.stream() + .collect(Collectors.groupingBy(GoodsAccreditItem::getAccType)); + List onlyList = listMap.get(0); + List notInList = listMap.get(1); + if(CollUtil.isNotEmpty(onlyList)){ + List ids = onlyList.stream().map(GoodsAccreditItem::getTargetId).collect(Collectors.toList()); + accreditVo.setOnlySaleRegionList(regionMapper.selectBatchIds(ids)); + } + if(CollUtil.isNotEmpty(notInList)){ + List ids = notInList.stream().map(GoodsAccreditItem::getTargetId).collect(Collectors.toList()); + accreditVo.setNotInSaleRegionList(regionMapper.selectBatchIds(ids)); + } + } + return accreditVo; + } + return null; + } + + + private GoodsAccredit getGoodsAccredit(GoodsAccreditBo param){ + GoodsAccredit accredit = null; + if(param.getCategoryId()!=null){ + GoodsCategory category = categoryMapper.selectById(param.getCategoryId()); + if(category!=null){ + accredit = new GoodsAccredit(); + accredit.setCategoryId(category.getId().toString()); + } + }else if (param.getSpuId()!=null){ + GoodsSpu spu = goodsSpuMapper.selectById(param.getSpuId()); + if(spu!=null){ + accredit = new GoodsAccredit(); + accredit.setSpuId(spu.getId()); + } + } + return accredit; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java index 880c0345..a47fe594 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsRuleServiceImpl.java @@ -2,6 +2,7 @@ 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.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.StringUtils; @@ -11,21 +12,19 @@ import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; import com.qs.serve.modules.bms.mapper.BmsRegionMapper; import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; -import com.qs.serve.modules.goods.entity.GoodsCategory; -import com.qs.serve.modules.goods.entity.GoodsRuleItem; -import com.qs.serve.modules.goods.entity.GoodsSpu; +import com.qs.serve.modules.goods.entity.*; import com.qs.serve.modules.goods.entity.bo.GoodsRuleBo; import com.qs.serve.modules.goods.entity.dto.GoodsRuleBaseDTO; import com.qs.serve.modules.goods.entity.dto.GoodsRuleItemDTO; import com.qs.serve.modules.goods.entity.vo.GoodsRuleVo; import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper; +import com.qs.serve.modules.goods.mapper.GoodsSkuMapper; import com.qs.serve.modules.goods.mapper.GoodsSpuMapper; import com.qs.serve.modules.goods.service.GoodsRuleItemService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import com.qs.serve.modules.goods.entity.GoodsRule; import com.qs.serve.modules.goods.service.GoodsRuleService; import com.qs.serve.modules.goods.mapper.GoodsRuleMapper; import org.springframework.transaction.annotation.Transactional; @@ -51,6 +50,8 @@ public class GoodsRuleServiceImpl extends ServiceImpl private GoodsRuleItemService goodsRuleItemService; private GoodsCategoryMapper categoryMapper; private GoodsSpuMapper spuMapper; + private GoodsSkuMapper skuMapper; + private GoodsCategoryMapper goodsCategoryMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -151,6 +152,8 @@ public class GoodsRuleServiceImpl extends ServiceImpl @Override public GoodsRuleVo getVoById(GoodsRuleBaseDTO baseDTO) { GoodsRule goodsRule = this.getGoodsRule(baseDTO); + List categoryList = categoryMapper.selectList(new QueryWrapper<>()); + Map> cateListMap = categoryList.stream().collect(Collectors.groupingBy(GoodsCategory::getId)); if(goodsRule.getId()!=null){ LambdaQueryWrapper listByRuleLqw = new LambdaQueryWrapper<>(); listByRuleLqw.eq(GoodsRuleItem::getRuleId,goodsRule.getId()); @@ -174,17 +177,38 @@ public class GoodsRuleServiceImpl extends ServiceImpl } if(CollUtil.isNotEmpty(list3)){ List ids = list3.stream().map(GoodsRuleItem::getTargetId).collect(Collectors.toList()); - ruleVo.setOnlySpuList(spuMapper.selectBatchIds(ids)); + List spuList = spuMapper.selectBatchIds(ids); + for (GoodsSpu spu : spuList) { + spu.setCateFirstLabel(this.getCateName(cateListMap,spu.getCategoryFirst())); + spu.setCateSecondLabel(this.getCateName(cateListMap,spu.getCategorySecond())); + spu.setCateThirdLabel(this.getCateName(cateListMap,spu.getCategoryThird())); + } + ruleVo.setOnlySpuList(spuList); } if(CollUtil.isNotEmpty(list4)){ List ids = list4.stream().map(GoodsRuleItem::getTargetId).collect(Collectors.toList()); - ruleVo.setOnlySpuList(spuMapper.selectBatchIds(ids)); + List spuList = spuMapper.selectBatchIds(ids); + for (GoodsSpu spu : spuList) { + spu.setCateFirstLabel(this.getCateName(cateListMap,spu.getCategoryFirst())); + spu.setCateSecondLabel(this.getCateName(cateListMap,spu.getCategorySecond())); + spu.setCateThirdLabel(this.getCateName(cateListMap,spu.getCategoryThird())); + } + ruleVo.setNotInSpuList(spuList); } return ruleVo; } return null; } + private String getCateName(Map> cateListMap, String id) { + Long cateId = Long.parseLong(id); + List items = cateListMap.get(cateId); + if(items!=null&&items.size()>0){ + return items.get(0).getName(); + } + return null; + } + @Override public List listBySupplierId(String supplierId) { BmsSupplier supplier = supplierMapper.selectById(supplierId); @@ -197,21 +221,20 @@ public class GoodsRuleServiceImpl extends ServiceImpl List saleRegionIds = supplier.listSaleRegionIds(); saleRegionIds.add("#"); List bySaleRegion = this.list(new LambdaQueryWrapper() - .eq(GoodsRule::getSaleRegionId,saleRegionIds) + .in(GoodsRule::getSaleRegionId,saleRegionIds) ); goodsRules.addAll(bySaleRegion); List byBizRegion = this.list(new LambdaQueryWrapper() - .eq(GoodsRule::getBizRegionId,bizRegionIds) + .in(GoodsRule::getBizRegionId,bizRegionIds) ); goodsRules.addAll(byBizRegion); List ruleIds = goodsRules.stream().map(GoodsRule::getId).collect(Collectors.toList()); if(CollUtil.isNotEmpty(ruleIds)){ - List ruleItems = goodsRuleItemService.list(new LambdaQueryWrapper() - .eq(GoodsRuleItem::getRuleId,ruleIds) + return goodsRuleItemService.list(new LambdaQueryWrapper() + .in(GoodsRuleItem::getRuleId,ruleIds) ); - return ruleItems; } return null; } @@ -232,11 +255,94 @@ public class GoodsRuleServiceImpl extends ServiceImpl } + @Override + public boolean checkSkuCode(List skuCodes, List ruleItems, boolean throwEx) { + if(CollUtil.isEmpty(skuCodes)){ + return false; + } + GoodsRuleItemDTO itemDTO = this.buildGoodsRuleItemDTO(ruleItems); + if(itemDTO==null){ + return true; + } + List goodsSkuList = skuMapper.selectList(new LambdaQueryWrapper().in(GoodsSku::getSkuCode,skuCodes)); + + for (GoodsSku sku : goodsSkuList) { + boolean notExistInOnly = false; + if(itemDTO.getOnlySpuIds()!=null){ + for (String onlySpuId : itemDTO.getOnlySpuIds()) { + if(sku.getSpuId().toString().equals(onlySpuId)){ + notExistInOnly = true; + break; + } + } + } + + if(!notExistInOnly && throwEx){ + Assert.throwEx("单品["+sku.getSkuCode()+"]不符合SKU规则"); + } + + if(itemDTO.getNotInSpuIds()!=null){ + for (String notInSpuId : itemDTO.getNotInSpuIds()) { + if(sku.getSpuId().toString().equals(notInSpuId)){ + if(throwEx){ + GoodsSpu goodsSpu = spuMapper.selectById(notInSpuId); + Assert.throwEx("SKU["+goodsSpu.getSpuCode()+"/"+goodsSpu.getName()+"]不可选,单品["+sku.getSkuCode()+"]"); + }else { + return false; + } + } + } + } + if(itemDTO.getOnlyCategoryIds()==null&&itemDTO.getNotInCategoryIds()==null){ + continue; + } + GoodsSpu spu = spuMapper.selectById(sku.getSpuId()); + if(itemDTO.getOnlyCategoryIds()!=null){ + boolean anyMatch = false; + for (String categoryId : spu.listCategoryIds()) { + for (String onlyCategoryId : itemDTO.getOnlyCategoryIds()) { + boolean itemAnyMatch = onlyCategoryId.equals(categoryId); + if(itemAnyMatch){ + anyMatch = true; + break; + } + } + } + if (!anyMatch){ + if(throwEx){ + Assert.throwEx("SKU["+spu.getSpuCode()+"],类目不符合分类规则"); + }else { + return false; + } + } + + } + if(itemDTO.getNotInCategoryIds()!=null){ + for (String notInCateId : itemDTO.getNotInCategoryIds()) { + boolean b1 = notInCateId.equals(spu.getCategoryFirst()); + boolean b2 = notInCateId.equals(spu.getCategorySecond()); + boolean b3 = notInCateId.equals(spu.getCategoryThird()); + boolean anyMatch = b1||b2||b3; + if (anyMatch){ + if(throwEx){ + GoodsCategory goodsCategory = goodsCategoryMapper.selectById(notInCateId); + Assert.throwEx("类目["+goodsCategory.getCode()+"/"+goodsCategory.getName()+"]不可选,SKU["+spu.getSkuCode()+"]"); + }else { + return false; + } + } + } + } + } + + return false; + } + private List getRuleStrings(List list) { if(CollUtil.isEmpty(list)){ return null; } - return list.stream().map(a->a.getId()+"").collect(Collectors.toList()); + return list.stream().map(a->a.getTargetId()+"").collect(Collectors.toList()); } 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 da8bbe39..83e804a0 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 @@ -19,6 +19,7 @@ import com.qs.serve.modules.goods.entity.dto.InventoryCusPrice; import com.qs.serve.modules.goods.entity.so.InventoryCusPriceQuery; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; import com.qs.serve.modules.goods.mapper.GoodsCategoryRuleMapper; +import com.qs.serve.modules.goods.service.GoodsRuleService; import com.qs.serve.modules.goods.service.GoodsSkuService; import com.qs.serve.modules.goods.service.GoodsSpuService; import com.qs.serve.modules.oms.entity.*; @@ -79,6 +80,7 @@ public class OmsOrderServiceImpl extends ServiceImpl im private OmsOrderItemService omsOrderItemService; private OmsShoppingCartService omsShoppingCartService; private SeeYonRequestBaseService seeYonRequestBaseService; + private GoodsRuleService goodsRuleService; @Override @@ -321,6 +323,11 @@ public class OmsOrderServiceImpl extends ServiceImpl im newOrderItemList.add(orderItem); } + List skuCodes = newOrderItemList.stream().map(OmsOrderItem::getSkuCode).collect(Collectors.toList()); + + //拦截下单规则 + goodsRuleService.checkSkuCode(skuCodes,goodsRuleService.listBySupplierId(order.getSupplierId().toString()),true); + this.handleCategoryRule(categoryRule,newOrderItemList); this.updateById(order); diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java index 84aa2caf..dc2d55dc 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java @@ -341,6 +341,7 @@ public class SysUserController { //检查手机号是否已用 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysUser::getMobile,param.getMobile()); + wrapper.ne(SysUser::getServingState,0); Long count = sysUserService.count(wrapper); if(count>0L){ return R.error("手机号已被注册"); diff --git a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java index 07b1033b..203191b5 100644 --- a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java +++ b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java @@ -691,12 +691,6 @@ public class PortalOfCostApplication { Assert.throwEx("统计金额不能为0"); } - String activityCode = costCode; - - if(StringUtils.hasText(activityCode)){ - activityCode = CodeGenUtil.generate(CodeGenUtil.SourceKey.Activity); - } - String activityTitle = createBo.getActivityTitle(); if(!StringUtils.hasText(activityTitle)){ activityTitle = "由核销API生成的活动"; @@ -722,7 +716,7 @@ public class PortalOfCostApplication { costApply.setRemark(createBo.getRemark()); //构建活动 TbsActivity activity = new TbsActivity(); - activity.setActivityCode(activityCode); + activity.setActivityCode(costCode); activity.setActivityState(TbsActivityState.STATE_1_Finished); activity.setCostPassFlag(1); activity.setCostPassTime(nowTime); @@ -772,7 +766,7 @@ public class PortalOfCostApplication { activityGoods.setTargetType(GOODS_TYPE); activityGoods.setTargetId(sku.getId()); activityGoods.setTargetCode(sku.getSkuCode()); - activityGoods.setTargetName(sku.getSpecInfos()); + activityGoods.setTargetName(sku.getSkuName()); activityGoods.setTargetLevelPathIds(category1.getId()+"_"+category2.getId()+"_"+category3.getId()+"_"+goodsSpu.getId()+"_"+sku.getId()); activityGoods.setTargetLevelPathNames(category1.getName()+"_"+category2.getName()+"_"+category3.getName()+"_"+goodsSpu.getName()+"_"+sku.getSpecInfos()); activityGoodsList.add(activityGoods); @@ -990,6 +984,7 @@ public class PortalOfCostApplication { } verificationService.removeById(verification.getId()); verificationSubjectService.removeById(verificationSubject.getId()); + Assert.throwEx("请求支付失败"); } log.info("COST_TO_PAY_API 支付单信息:{},结果:{}", verification.getVerificationCode(), rs); }