From e61acfa07525eb3ebc4ebde0b1f45bee18b69ede Mon Sep 17 00:00:00 2001 From: Tom Li Date: Thu, 4 Dec 2025 14:30:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E4=BA=A7=E5=93=81=20?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=88=86=E7=B1=BB=20=E5=A4=9A=E5=AF=B9?= =?UTF-8?q?=E5=A4=9A=E5=85=B3=E7=B3=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 + .../jinchao/controller/ProductController.java | 113 +++------- .../modules/jinchao/mapper/ProductMapper.java | 7 +- .../modules/jinchao/mapper/ProductMapper.xml | 18 +- .../mapper/RelCatalogProductMapper.java | 2 + .../mapper/RelCatalogProductMapper.xml | 18 +- .../jinchao/pojo/entity/ProductEntity.java | 5 - .../pojo/entity/RelCatalogProductEntity.java | 3 + .../modules/jinchao/pojo/vo/ProductVO.java | 5 + .../jinchao/service/IBizPriceService.java | 2 + .../jinchao/service/IProductService.java | 27 ++- .../service/IRelCatalogProductService.java | 17 +- .../service/impl/BizPriceServiceImpl.java | 8 + .../service/impl/ProductServiceImpl.java | 198 ++++++++++++++++-- .../impl/RelCatalogProductServiceImpl.java | 54 ++++- .../jinchao/wrapper/ProductWrapper.java | 9 +- 16 files changed, 359 insertions(+), 134 deletions(-) diff --git a/pom.xml b/pom.xml index 346f3a3..4f5df35 100644 --- a/pom.xml +++ b/pom.xml @@ -244,6 +244,13 @@ + + + com.google.guava + guava + 32.1.3-jre + + org.projectlombok diff --git a/src/main/java/org/springblade/modules/jinchao/controller/ProductController.java b/src/main/java/org/springblade/modules/jinchao/controller/ProductController.java index fd452f7..743dbf8 100644 --- a/src/main/java/org/springblade/modules/jinchao/controller/ProductController.java +++ b/src/main/java/org/springblade/modules/jinchao/controller/ProductController.java @@ -33,14 +33,12 @@ import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import jakarta.validation.Valid; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.springblade.core.secure.BladeUser; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; -import org.springblade.core.tool.utils.Func; -import org.springblade.modules.jinchao.constant.BaseCol; -import org.springblade.modules.jinchao.constant.ProductConst; -import org.springblade.modules.jinchao.pojo.entity.BizPriceEntity; import org.springblade.modules.jinchao.pojo.vo.ProductVO; import org.springblade.modules.jinchao.service.IBizPriceService; import org.springframework.web.bind.annotation.*; @@ -56,8 +54,6 @@ import org.springblade.core.excel.util.ExcelUtil; import java.util.Map; import java.util.List; -import java.util.Objects; -import java.util.Optional; import jakarta.servlet.http.HttpServletResponse; @@ -68,8 +64,10 @@ import jakarta.servlet.http.HttpServletResponse; * @since 2025-12-01 */ @RestController -@AllArgsConstructor @RequestMapping("jinchao/product") +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @Tag(name = "[产品]", description = "[产品]接口") public class ProductController extends BladeController { @@ -96,9 +94,9 @@ public class ProductController extends BladeController { @GetMapping("/list") @ApiOperationSupport(order = 2) @Operation(summary = "list分页", description = "传入product") - public R> list(@Parameter(hidden = true) @RequestParam Map product, + public R> list(@Parameter(hidden = true) @RequestParam Map map, Query query) { - return service.list(product, query); + return service.list(map, query); } /** @@ -108,36 +106,36 @@ public class ProductController extends BladeController { @ApiOperationSupport(order = 3) @Operation(summary = "page分页", description = "传入product") public R> page(ProductVO product, Query query) { - IPage pages = service.selectProductPage(Condition.getPage(query), product); + IPage pages = service.selectProductPage(Condition.getPage(query), product); return R.data(pages); } /** - * [产品] 新增 + * [产品] 新增 批量 用不到单条 */ - @PostMapping("/save") - @ApiOperationSupport(order = 4) - @Operation(summary = "新增", description = "传入product") - public R save(@Valid @RequestBody ProductVO vo) { - vo.setId(null); - if (service.existsCode(vo.getCode())) { - return R.fail("已经存在此code"); - } - if (service.existsNameCn(vo.getNameCn())) { - return R.fail("已经存在此nameCn"); - } - return R.status(service.save(vo)); - } +// @PostMapping("/save") +// @ApiOperationSupport(order = 4) +// @Operation(summary = "新增", description = "传入product") +// public R save(@Valid @RequestBody ProductVO vo) { +// vo.setId(null); +// if (service.existsCode(vo.getCode())) { +// return R.fail("已经存在此code"); +// } +// if (service.existsNameCn(vo.getNameCn())) { +// return R.fail("已经存在此nameCn"); +// } +// return R.status(service.save(vo)); +// } /** - * [产品] 修改 + * [产品] 修改 批量 用不到单条 */ - @PostMapping("/update") - @ApiOperationSupport(order = 5) - @Operation(summary = "修改", description = "传入product") - public R update(@Valid @RequestBody ProductEntity product) { - return R.status(service.updateById(product)); - } +// @PostMapping("/update") +// @ApiOperationSupport(order = 5) +// @Operation(summary = "修改", description = "传入product") +// public R update(@Valid @RequestBody ProductEntity product) { +// return R.status(service.updateById(product)); +// } /** * [产品] 单条新增或修改 @@ -146,61 +144,14 @@ public class ProductController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "新增或修改", description = "传入product") public R submit(@Valid @RequestBody ProductVO vo) { - if (vo.getId() == null || vo.getId() == 0L) { - if (service.existsCode(vo.getCode())) { - return R.fail("已经存在此code"); - } - if (service.existsNameCn(vo.getNameCn())) { - return R.fail("已经存在此nameCn"); - } - } - if (Objects.equals(vo.getBizType(), ProductConst.TYPE_PRICE_CUSTOM)) { - // 跳过 - return R.fail("bizType类型错误"); - } - return R.status(service.saveOrUpdate(vo)); + return service.submit(vo); } @PostMapping("/submitBat") @ApiOperationSupport(order = 6) @Operation(summary = "批量新增或修改", description = "ProductEntity List") public R submitBat(@Valid @RequestBody List vos) { - // todo:删除的情况 - - // - if (vos != null && !vos.isEmpty()) { - for (ProductVO vo : vos) { - final Integer bizType = vo.getBizType(); - if (Objects.equals(bizType, ProductConst.TYPE_PRICE_STANDARD)) { // 标准价 - if (Objects.requireNonNull(vo).getId() == null || vo.getId() == 0L) { - // 新增check - if (service.existsCode(vo.getCode())) { - return R.fail("已经存在此code"); - } - if (service.existsNameCn(vo.getNameCn())) { - return R.fail("已经存在此nameCn"); - } - // 新增 - service.save(vo); - } else { - service.updateById(vo); - } - } else if (Objects.equals(bizType, ProductConst.TYPE_PRICE_CUSTOM)) { // 指定价 - QueryWrapper qw = new QueryWrapper() - .eq(BaseCol.ID, vo.getBizPriceId()); - Optional opt = bizPriceService.getOneOpt(qw); - opt.ifPresent( - bp -> { - bp.setSaleUserId(vo.getSaleUserId()); - bp.setCustomerId(vo.getCustomerId()); - bp.setBizPrice(vo.getBizPrice()); - bizPriceService.save(bp); - } - ); - } - } - } - return R.success(); + return service.submitBat(vos); } /** @@ -210,7 +161,7 @@ public class ProductController extends BladeController { @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { - return R.status(service.deleteLogic(Func.toLongList(ids))); + return service.remove(ids); } /** diff --git a/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.java b/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.java index 9dfabe9..455416a 100644 --- a/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.java +++ b/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.java @@ -31,6 +31,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springblade.modules.jinchao.pojo.vo.ProductVO; + import java.util.List; /** @@ -44,11 +46,11 @@ public interface ProductMapper extends BaseMapper { /** * 自定义分页 * - * @param page 分页参数 + * @param page 分页参数 * @param product 查询参数 * @return List */ - List selectProductPage(IPage page, org.springblade.modules.jinchao.pojo.vo.ProductVO product); + List selectProductPage(IPage page, ProductVO product); /** @@ -59,4 +61,5 @@ public interface ProductMapper extends BaseMapper { */ List exportProduct(@Param("ew") Wrapper queryWrapper); + Long countNameCn(@Param("catalogId") Long catalogId, @Param("nameCn") String nameCn); } diff --git a/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.xml b/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.xml index b34a90f..3d0c839 100644 --- a/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.xml +++ b/src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.xml @@ -9,7 +9,6 @@ - @@ -29,17 +28,24 @@ - - + diff --git a/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.java b/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.java index d882c58..16ba3ab 100644 --- a/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.java +++ b/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.java @@ -59,4 +59,6 @@ public interface RelCatalogProductMapper extends BaseMapper */ List exportRelCatalogProduct(@Param("ew") Wrapper queryWrapper); + + } diff --git a/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.xml b/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.xml index 0f021b7..8e095d4 100644 --- a/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.xml +++ b/src/main/java/org/springblade/modules/jinchao/mapper/RelCatalogProductMapper.xml @@ -1,9 +1,11 @@ - + - + @@ -17,14 +19,16 @@ - - + SELECT * + FROM jc_rel_catalog_product ${ew.customSqlSegment} - diff --git a/src/main/java/org/springblade/modules/jinchao/pojo/entity/ProductEntity.java b/src/main/java/org/springblade/modules/jinchao/pojo/entity/ProductEntity.java index 36dcd87..5d55414 100644 --- a/src/main/java/org/springblade/modules/jinchao/pojo/entity/ProductEntity.java +++ b/src/main/java/org/springblade/modules/jinchao/pojo/entity/ProductEntity.java @@ -57,11 +57,6 @@ public class ProductEntity extends TenantEntity { */ @Schema(description = "编号") private String code; - /** - * [产品目录]id - */ - @Schema(description = "[产品目录]id") - private Long catalogId; /** * 中文名称 */ diff --git a/src/main/java/org/springblade/modules/jinchao/pojo/entity/RelCatalogProductEntity.java b/src/main/java/org/springblade/modules/jinchao/pojo/entity/RelCatalogProductEntity.java index 1b4ee74..86c30c6 100644 --- a/src/main/java/org/springblade/modules/jinchao/pojo/entity/RelCatalogProductEntity.java +++ b/src/main/java/org/springblade/modules/jinchao/pojo/entity/RelCatalogProductEntity.java @@ -47,6 +47,9 @@ public class RelCatalogProductEntity extends TenantEntity { @Serial private static final long serialVersionUID = 1L; + public static final String COL_CATALOG_ID = "catalog_id"; + public static final String COL_PRODUCT_ID = "product_id"; + /** * 小类[产品目录]id */ diff --git a/src/main/java/org/springblade/modules/jinchao/pojo/vo/ProductVO.java b/src/main/java/org/springblade/modules/jinchao/pojo/vo/ProductVO.java index ec74397..30349ff 100644 --- a/src/main/java/org/springblade/modules/jinchao/pojo/vo/ProductVO.java +++ b/src/main/java/org/springblade/modules/jinchao/pojo/vo/ProductVO.java @@ -44,6 +44,11 @@ public class ProductVO extends ProductEntity { @Serial private static final long serialVersionUID = 1L; + /** + * [产品目录]id + */ + @Schema(description = "[产品目录]id") + private Long catalogId; /** * [1]标准;[2]客户特定价 */ diff --git a/src/main/java/org/springblade/modules/jinchao/service/IBizPriceService.java b/src/main/java/org/springblade/modules/jinchao/service/IBizPriceService.java index 1b5b5b1..ae240a3 100644 --- a/src/main/java/org/springblade/modules/jinchao/service/IBizPriceService.java +++ b/src/main/java/org/springblade/modules/jinchao/service/IBizPriceService.java @@ -60,4 +60,6 @@ public interface IBizPriceService extends BaseService { List exportBizPrice(Wrapper queryWrapper); List listByProductId(Long productId); + + Integer deleteByProductId(Long productId); } diff --git a/src/main/java/org/springblade/modules/jinchao/service/IProductService.java b/src/main/java/org/springblade/modules/jinchao/service/IProductService.java index fde0446..b975d72 100644 --- a/src/main/java/org/springblade/modules/jinchao/service/IProductService.java +++ b/src/main/java/org/springblade/modules/jinchao/service/IProductService.java @@ -26,6 +26,7 @@ package org.springblade.modules.jinchao.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import jakarta.validation.Valid; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.modules.jinchao.pojo.entity.ProductEntity; @@ -33,6 +34,7 @@ import org.springblade.modules.jinchao.excel.ProductExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.modules.jinchao.pojo.vo.ProductVO; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; import java.util.Map; @@ -51,7 +53,7 @@ public interface IProductService extends BaseService { * @param product 查询参数 * @return IPage */ - IPage selectProductPage(IPage page, org.springblade.modules.jinchao.pojo.vo.ProductVO product); + IPage selectProductPage(IPage page, ProductVO product); /** @@ -64,11 +66,30 @@ public interface IProductService extends BaseService { R> list(Map product, Query query); + public R remove(String ids); + + /** + * 全部产品中是否有此code。 + * + * @param code + * @return + */ Boolean existsCode(String code); - Boolean existsNameCn(String nameCn); + /** + * 小类产品中,是否有此nameCn + * + * @param catalogId + * @param nameCn + * @return + */ + Boolean existsNameCn(Long catalogId, String nameCn); - void setVoValue(ProductVO vo); + void setVoValue(Long catalogId, ProductVO vo); R> oneKeyMatch(List list); + + R submit(ProductVO vo); + + R submitBat(List vos); } diff --git a/src/main/java/org/springblade/modules/jinchao/service/IRelCatalogProductService.java b/src/main/java/org/springblade/modules/jinchao/service/IRelCatalogProductService.java index 645818d..627d53c 100644 --- a/src/main/java/org/springblade/modules/jinchao/service/IRelCatalogProductService.java +++ b/src/main/java/org/springblade/modules/jinchao/service/IRelCatalogProductService.java @@ -31,6 +31,7 @@ import org.springblade.modules.jinchao.pojo.vo.RelCatalogProductVO; import org.springblade.modules.jinchao.excel.RelCatalogProductExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; + import java.util.List; /** @@ -43,11 +44,12 @@ public interface IRelCatalogProductService extends BaseService */ - IPage selectRelCatalogProductPage(IPage page, RelCatalogProductVO relCatalogProduct); + IPage selectRelCatalogProductPage(IPage page, + RelCatalogProductVO relCatalogProduct); /** @@ -58,4 +60,15 @@ public interface IRelCatalogProductService extends BaseService exportRelCatalogProduct(Wrapper queryWrapper); + /** + * listByProductId + * + * @param catalogId + * @return + */ + List listByCatalogId(Long catalogId); + + RelCatalogProductEntity merge(Long catalogId, Long productId); + + Long deleteByProductId(Long productId); } diff --git a/src/main/java/org/springblade/modules/jinchao/service/impl/BizPriceServiceImpl.java b/src/main/java/org/springblade/modules/jinchao/service/impl/BizPriceServiceImpl.java index 3c44d31..2910374 100644 --- a/src/main/java/org/springblade/modules/jinchao/service/impl/BizPriceServiceImpl.java +++ b/src/main/java/org/springblade/modules/jinchao/service/impl/BizPriceServiceImpl.java @@ -69,4 +69,12 @@ public class BizPriceServiceImpl extends BaseServiceImpl() + .eq("product_id", productId) + ); + } } diff --git a/src/main/java/org/springblade/modules/jinchao/service/impl/ProductServiceImpl.java b/src/main/java/org/springblade/modules/jinchao/service/impl/ProductServiceImpl.java index 02493bd..fad236c 100644 --- a/src/main/java/org/springblade/modules/jinchao/service/impl/ProductServiceImpl.java +++ b/src/main/java/org/springblade/modules/jinchao/service/impl/ProductServiceImpl.java @@ -26,13 +26,17 @@ package org.springblade.modules.jinchao.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.common.collect.Sets; import jakarta.annotation.Resource; +import jakarta.validation.Valid; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.constant.BladeConstant; +import org.springblade.core.tool.utils.Func; import org.springblade.modules.jinchao.constant.BaseCol; import org.springblade.modules.jinchao.constant.ProductConst; import org.springblade.modules.jinchao.pojo.entity.BizPriceEntity; @@ -40,23 +44,25 @@ import org.springblade.modules.jinchao.pojo.entity.CustomerEntity; import org.springblade.modules.jinchao.pojo.entity.ProductEntity; import org.springblade.modules.jinchao.excel.ProductExcel; import org.springblade.modules.jinchao.mapper.ProductMapper; +import org.springblade.modules.jinchao.pojo.entity.RelCatalogProductEntity; import org.springblade.modules.jinchao.pojo.vo.ProductVO; import org.springblade.modules.jinchao.service.IBizPriceService; import org.springblade.modules.jinchao.service.ICustomerService; import org.springblade.modules.jinchao.service.IProductService; +import org.springblade.modules.jinchao.service.IRelCatalogProductService; import org.springblade.modules.jinchao.wrapper.ProductWrapper; import org.springblade.modules.system.pojo.entity.User; import org.springblade.modules.system.service.IUserService; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.web.bind.annotation.RequestBody; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -69,14 +75,20 @@ import java.util.stream.Collectors; @Data @EqualsAndHashCode(callSuper = true) @Slf4j -public class ProductServiceImpl extends BaseServiceImpl implements IProductService { +public class ProductServiceImpl extends BaseServiceImpl + implements IProductService { + @Resource + @Lazy + private IProductService self; @Resource private IUserService userService; @Resource private IBizPriceService bizPriceService; @Resource private ICustomerService customerService; + @Resource + private IRelCatalogProductService relCatalogProductService; @Override public IPage selectProductPage(IPage page, ProductVO product) { @@ -93,13 +105,32 @@ public class ProductServiceImpl extends BaseServiceImpl> list(Map product, Query query) { - IPage pages = page( + public R> list(Map map, Query query) { + Long catalogId = Long.parseLong((String) map.get("catalogId")); // 是Id [坏笑]。不是ld + log.warn("catalogId {}", catalogId); + if (catalogId == null || catalogId == 0L) { + return R.fail("catalogId error."); + } + IPage pageRel = relCatalogProductService.page( Condition.getPage(query), - Condition.getQueryWrapper(product, ProductEntity.class).orderByAsc(BaseCol.ID) + Condition.getQueryWrapper(map, RelCatalogProductEntity.class) + .eq("catalog_id", catalogId) + .orderByAsc("product_id") ); - IPage pagesVo = ProductWrapper.build().pageVO(pages); - ListIterator it = pagesVo.getRecords().listIterator(); + List listVO = new ArrayList<>(); + pageRel.getRecords().forEach(rel -> { + ProductEntity p = getById(rel.getProductId()); + if (p != null) { + ProductVO vo = ProductWrapper.build().entityVO(p); + vo.setCatalogId(catalogId); + listVO.add(vo); + } + }); + // 组装IPage + IPage pagesVO = Condition.getPage(query); + pagesVO.setRecords(listVO); + // 迭代器去添加元素。 + ListIterator it = pagesVO.getRecords().listIterator(); while (it.hasNext()) { ProductVO vo1 = it.next(); // 默认 @@ -136,7 +167,18 @@ public class ProductServiceImpl extends BaseServiceImpl list = Func.toLongList(ids); + // 同时 逻辑删除对应关联表 + list.forEach(id -> { + relCatalogProductService.deleteByProductId(id); + bizPriceService.deleteByProductId(id); + }); + return R.status(self.deleteLogic(list)); } @Override @@ -144,9 +186,11 @@ public class ProductServiceImpl extends BaseServiceImpl().eq(ProductEntity.COL_CODE, code)); } + @Override - public Boolean existsNameCn(String nameCn) { - return baseMapper.exists(new QueryWrapper().eq(ProductEntity.COL_NAME_CN, nameCn)); + public Boolean existsNameCn(Long catalogId, String nameCn) { + Long count = baseMapper.countNameCn(catalogId, nameCn); + return count != 0; } /** @@ -155,11 +199,9 @@ public class ProductServiceImpl extends BaseServiceImpl> oneKeyMatch(List list) { List listNew = list.stream() .map(vo -> { - ProductEntity pFind = getOne(new QueryWrapper().eq(ProductEntity.COL_NAME_CN, vo.getNameCn())); - if (pFind != null) { + // 全部数据,用nameCn去匹配 + ProductEntity find = getOne(new QueryWrapper().eq(ProductEntity.COL_NAME_CN, vo.getNameCn())); + if (find != null) { ProductVO voNew = new ProductVO(); - BeanUtils.copyProperties(pFind, voNew); + BeanUtils.copyProperties(find, voNew); voNew.setBizType(ProductConst.TYPE_PRICE_STANDARD); return voNew; + } else { + // 前端要赋值catalogId,后续保存会用到。 + // 数据原样返回。 + return vo; } - vo.setBizType(ProductConst.TYPE_PRICE_STANDARD); - return vo; }).collect(Collectors.toList()); return R.data(listNew); } + + @Override + public R submit(ProductVO vo) { + if (vo.getId() == null || vo.getId() == 0L) { + if (vo.getCatalogId() == null || vo.getCatalogId() == 0L) { + return R.fail("catalogId无效"); + } + if (existsCode(vo.getCode())) { + return R.fail("已经存在此code"); + } + if (existsNameCn(vo.getCatalogId(), vo.getNameCn())) { + return R.fail("已经存在此nameCn"); + } + } + if (Objects.equals(vo.getBizType(), ProductConst.TYPE_PRICE_CUSTOM)) { + // 跳过 + return R.fail("bizType类型错误"); + } + boolean b = saveOrUpdate(vo); + // 处理关联表 merge 关系 + relCatalogProductService.merge(vo.getCatalogId(), vo.getId()); + return R.status(b); + } + + @Override + public R submitBat(List vos) { + Long catalogId = 0L; + log.warn("catalogId = {}", catalogId); + // catalogId 设置值。 + if (vos != null && !vos.isEmpty()) { + catalogId = vos.get(0).getCatalogId(); + } + // 删除 先做删除,id还没有被赋值。 + if (false && vos != null && !vos.isEmpty()) { + // 前端传入数量 + AtomicReference sizeWeb = new AtomicReference<>(0); + Objects.requireNonNull(vos).forEach(vo -> { + if (vo != null && + Objects.equals(vo.getBizType(), ProductConst.TYPE_PRICE_STANDARD) && + vo.getId() != null && + vo.getId() != 0L) { + sizeWeb.set(sizeWeb.get() + 1); + } + }); + // 数据库中数量 + Integer sizeDb = Math.toIntExact(count(new QueryWrapper<>())); + // 数量比较 + if (Objects.equals(sizeWeb.get(), sizeDb)) { + log.info("没有删除数据"); + } else { + // 前端传入id的Set + Set setWeb = vos.stream() + .filter(vo -> ( + Objects.equals(vo.getBizType(), ProductConst.TYPE_PRICE_STANDARD) && + vo.getId() != null && + vo.getId() != 0L + )) + .map(ProductVO::getId) + .filter(Objects::nonNull) + .collect(Collectors.toCollection(TreeSet::new)); + // + Set setDB = null; + Set setDel = Sets.difference(setDB, setWeb); + } + } + if (vos != null && !vos.isEmpty()) { + for (ProductVO vo : vos) { + if (vo == null) { + continue; + } + final Integer bizType = vo.getBizType(); + if (Objects.equals(bizType, ProductConst.TYPE_PRICE_STANDARD)) { // 标准价 + // 添加 or 修改 + if (Objects.requireNonNull(vo).getId() == null || vo.getId() == 0L) { + // 新增check + if (vo.getCatalogId() == null || vo.getCatalogId() == 0L) { + return R.fail("catalogId无效"); + } + if (existsCode(vo.getCode())) { + return R.fail("已经存在此code"); + } + if (existsNameCn(catalogId, vo.getNameCn())) { + return R.fail("已经存在此nameCn"); + } + // 新增 产品 + save(vo); + } else { + // 修改 产品 根据id + updateById(vo); + } + // 处理关联表 merge 关系 + relCatalogProductService.merge(vo.getCatalogId(), vo.getId()); + } else if (Objects.equals(bizType, ProductConst.TYPE_PRICE_CUSTOM)) { // 指定价 + QueryWrapper qw = new QueryWrapper() + .eq(BaseCol.ID, vo.getBizPriceId()); + Optional opt = bizPriceService.getOneOpt(qw); + opt.ifPresent( + bp -> { + bp.setSaleUserId(vo.getSaleUserId()); + bp.setCustomerId(vo.getCustomerId()); + bp.setBizPrice(vo.getBizPrice()); + bizPriceService.updateById(bp); + } + ); + } + } + } + return R.success(); + } } diff --git a/src/main/java/org/springblade/modules/jinchao/service/impl/RelCatalogProductServiceImpl.java b/src/main/java/org/springblade/modules/jinchao/service/impl/RelCatalogProductServiceImpl.java index 1642135..bfc1d68 100644 --- a/src/main/java/org/springblade/modules/jinchao/service/impl/RelCatalogProductServiceImpl.java +++ b/src/main/java/org/springblade/modules/jinchao/service/impl/RelCatalogProductServiceImpl.java @@ -25,6 +25,7 @@ */ package org.springblade.modules.jinchao.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springblade.modules.jinchao.pojo.entity.RelCatalogProductEntity; import org.springblade.modules.jinchao.pojo.vo.RelCatalogProductVO; import org.springblade.modules.jinchao.excel.RelCatalogProductExcel; @@ -34,6 +35,7 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; + import java.util.List; /** @@ -43,10 +45,12 @@ import java.util.List; * @since 2025-12-03 */ @Service -public class RelCatalogProductServiceImpl extends BaseServiceImpl implements IRelCatalogProductService { +public class RelCatalogProductServiceImpl extends BaseServiceImpl + implements IRelCatalogProductService { @Override - public IPage selectRelCatalogProductPage(IPage page, RelCatalogProductVO relCatalogProduct) { + public IPage selectRelCatalogProductPage(IPage page, + RelCatalogProductVO relCatalogProduct) { return page.setRecords(baseMapper.selectRelCatalogProductPage(page, relCatalogProduct)); } @@ -60,4 +64,50 @@ public class RelCatalogProductServiceImpl extends BaseServiceImpl listByCatalogId(Long catalogId) { + return baseMapper.selectList( + new QueryWrapper() + .eq(RelCatalogProductEntity.COL_CATALOG_ID, catalogId) + ); + } + + /** + * 存在就返回,不存在就新建。 + * + * @param catalogId + * @param productId + * @return + */ + @Override + public RelCatalogProductEntity merge(Long catalogId, Long productId) { + RelCatalogProductEntity fOne = baseMapper.selectOne( + new QueryWrapper() + .eq(RelCatalogProductEntity.COL_CATALOG_ID, catalogId) + .eq(RelCatalogProductEntity.COL_PRODUCT_ID, productId) + ); + if (fOne == null) { + RelCatalogProductEntity newOne = new RelCatalogProductEntity(); + newOne.setCatalogId(catalogId); + newOne.setProductId(productId); + baseMapper.insert(newOne); + return newOne; + } else { + return fOne; + } + } + + @Override + public Long deleteByProductId(Long productId) { + List list = baseMapper.selectList( + new QueryWrapper() + .eq(RelCatalogProductEntity.COL_PRODUCT_ID, productId) + ); + long count = 0L; + for (RelCatalogProductEntity one : list) { + baseMapper.deleteById(one.getId()); + count = count + 1L; + } + return count; + } } diff --git a/src/main/java/org/springblade/modules/jinchao/wrapper/ProductWrapper.java b/src/main/java/org/springblade/modules/jinchao/wrapper/ProductWrapper.java index a395e12..68efd56 100644 --- a/src/main/java/org/springblade/modules/jinchao/wrapper/ProductWrapper.java +++ b/src/main/java/org/springblade/modules/jinchao/wrapper/ProductWrapper.java @@ -28,6 +28,7 @@ package org.springblade.modules.jinchao.wrapper; import org.springblade.core.mp.support.BaseEntityWrapper; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.modules.jinchao.pojo.entity.ProductEntity; +import org.springblade.modules.jinchao.pojo.vo.ProductVO; import java.util.Objects; @@ -37,15 +38,15 @@ import java.util.Objects; * @author BladeX * @since 2025-12-01 */ -public class ProductWrapper extends BaseEntityWrapper { +public class ProductWrapper extends BaseEntityWrapper { public static ProductWrapper build() { return new ProductWrapper(); - } + } @Override - public org.springblade.modules.jinchao.pojo.vo.ProductVO entityVO(ProductEntity product) { - org.springblade.modules.jinchao.pojo.vo.ProductVO productVO = Objects.requireNonNull(BeanUtil.copyProperties(product, org.springblade.modules.jinchao.pojo.vo.ProductVO.class)); + public ProductVO entityVO(ProductEntity product) { + ProductVO productVO = Objects.requireNonNull(BeanUtil.copyProperties(product, ProductVO.class)); //User createUser = UserCache.getUser(product.getCreateUser()); //User updateUser = UserCache.getUser(product.getUpdateUser());