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 @@
-
-
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());