diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java index 7da88d41..f9d89f75 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java @@ -5,6 +5,8 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; +import java.util.List; + /** * @website https://eladmin.vip * @author admin @@ -23,5 +25,6 @@ public interface TbProskuConRepository extends JpaRepository searchAllByProductId(Integer productId); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java index 3ae77a02..fa91bc64 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java @@ -56,6 +56,22 @@ public class TbProskuConController { } } + @PostMapping("V2") + @Log("新增商品耗材绑定关系") + @ApiOperation("新增商品耗材绑定关系") + public ResponseEntity upV2(@Validated @RequestBody List resources) throws Exception { + try { + tbProskuConService.upV2(resources); + return new ResponseEntity<>(HttpStatus.CREATED); + } catch (BadRequestException be) { + throw new Exception(be.getMessage()); + }catch (Exception e){ + e.printStackTrace(); + throw new Exception("相同商品耗材信息不允许添加"); + } + } + + @PutMapping @Log("修改商品规格耗材信息") @ApiOperation("修改商品规格耗材信息") diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java index f95aaec0..61287cfe 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java @@ -44,6 +44,7 @@ public interface TbProskuConService { * @return TbProskuConDto */ TbProskuConDto create(List resources) throws Exception; + void upV2(List resources) throws Exception; /** * 编辑 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java index 78559efe..46b0c563 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java @@ -19,14 +19,17 @@ import cn.ysk.cashier.cons.service.dto.TbProskuConDto; import cn.ysk.cashier.cons.service.dto.TbProskuConQueryCriteria; import cn.ysk.cashier.cons.service.mapstruct.TbProskuConMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.util.CollectionUtils; import java.sql.Timestamp; import java.util.*; import java.io.IOException; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; /** @@ -154,6 +157,61 @@ public class TbProskuConServiceImpl implements TbProskuConService { return new TbProskuConDto(); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void upV2(List resources) { + List newCons=new ArrayList<>(); + Map> conMap = resources.stream() + .collect(Collectors.groupingBy(TbProskuCon::getProductId)); + for (Integer proId : conMap.keySet()) { + TbProduct product= tbProductRepository.getById(proId); + if(Objects.isNull(product)){ + throw new BadRequestException("对应的商品信息不存在"); + } + List cons = conMap.get(proId); + List collect = cons.stream().map(TbProskuCon::getId).collect(Collectors.toList()); + //现有的 + List tbProskuCons = tbProskuConRepository.searchAllByProductId(proId); + List delIds = new ArrayList<>(); + for (TbProskuCon tbProskuCon : tbProskuCons) { + if (!collect.contains(tbProskuCon.getId())) { + delIds.add(tbProskuCon.getId()); + } + } + if (!CollectionUtils.isEmpty(delIds)) { + tbProskuConRepository.deleteAllById(delIds); + } + //判断 + for (TbProskuCon resource : cons) { + TbConsInfo tbConsInfo = tbConsInfoRepository.findById(resource.getConInfoId()).orElseGet(TbConsInfo::new); + if (ObjectUtil.isNull(tbConsInfo) || ObjectUtil.isNull(tbConsInfo.getId())) { + throw new BadRequestException("对应的耗材信息不存在"); + } + TbProductSku sku = new TbProductSku(); + if (resource.getProductSkuId() != 0) { + sku = tbProductSkuRepository.findById(resource.getProductSkuId()).orElseGet(TbProductSku::new); + if (ObjectUtil.isNull(sku) || ObjectUtil.isNull(sku.getId())) { + throw new BadRequestException("规格信息不存在"); + } + } + int count = tbProskuConRepository.countByConInfoIdAndProductSkuIdAndShopId(resource.getConInfoId(), resource.getProductSkuId(), resource.getShopId(), resource.getProductId()); + if (count <= 0) { + newCons.add(resource); + } else { + if (resource.getProductSkuId() != 0) { + throw new BadRequestException(StringUtils.isNotBlank(sku.getSpecSnap()) ? sku.getSpecSnap() : "".concat(" 对应的耗材").concat(tbConsInfo.getConName()).concat("关系已存在")); + } else { + throw new BadRequestException(" 对应的耗材".concat(tbConsInfo.getConName()).concat("关系已存在")); + } + } + } + if(!CollectionUtils.isEmpty(newCons)){ + tbProskuConRepository.saveAll(newCons); + } + } + } + @Override @Transactional(rollbackFor = Exception.class) public void update(TbProskuCon resources) throws Exception { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java index e65ed825..d67d7bac 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java @@ -285,7 +285,7 @@ public class TbProductServiceImpl implements TbProductService { Threads.call(tbProductSkus, tbProductSpec); //组装 TbProductVo tbProductVo = new TbProductVo(); - tbProductVo.setStockNumber(tbProduct.getStockNumber() == null ? 0.00 : tbProduct.getStockNumber()); +// tbProductVo.setStockNumber(tbProduct.getStockNumber() == null ? 0.00 : tbProduct.getStockNumber()); tbProductVo.setCategoryId(StringUtils.isNotBlank(tbProduct.getCategoryId())?Integer.valueOf(tbProduct.getCategoryId()):null); //单位 // if (tbProduct.getUnitId() == null) { @@ -318,6 +318,14 @@ public class TbProductServiceImpl implements TbProductService { } else { tbProductVo.setSkuList(tbProductSkus.get()); } + + ViewConSku viewConSku=new ViewConSku(); + viewConSku.setShopId(Integer.valueOf(tbProduct.getShopId())); + viewConSku.setProductId(tbProduct.getId()); + Example query = Example.of(viewConSku); + List skuCons = viewConSkuRepository.findAll(query); + tbProductVo.setConInfos(skuCons); + if ("sku".equals(tbProductVo.getTypeEnum())) { Optional skuResult = tbProductSkuResultRepository.findById(tbProductVo.getId()); tbProductVo.setSkuSnap(skuResult.get().getTagSnap()); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java index 80c4de0a..034b542b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.vo; +import cn.ysk.cashier.cons.domain.ViewConSku; import cn.ysk.cashier.dto.TbPlatformDictDto; import cn.ysk.cashier.dto.shop.TbCouponCategoryDto; import cn.ysk.cashier.pojo.shop.TbPurchaseNotice; @@ -221,6 +222,8 @@ public class TbProductVo { private BigDecimal maxPrice; + private List conInfos; + private TbPurchaseNotice notices=new TbPurchaseNotice(); private List groupCategoryId = new ArrayList<>(); private List tags = new ArrayList<>();