商品详情 增加关于耗材的 信息

/api/tbProskuCon/V2 新增商品耗材绑定关系
This commit is contained in:
wangw 2024-09-19 16:06:30 +08:00
parent e4a8991205
commit df3e3604f2
6 changed files with 90 additions and 1 deletions

View File

@ -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<TbProskuCon, Intege
@Query(value = "select * from tb_prosku_con where con_info_id=?1 and product_sku_id=?2 and shop_id=?3 and product_id=?4",nativeQuery = true)
TbProskuCon selectByConInfoIdAndProductSkuIdAndShopId(Integer conInfoId,Integer productSkuId,Integer shopId,Integer productId);
List<TbProskuCon> searchAllByProductId(Integer productId);
}

View File

@ -56,6 +56,22 @@ public class TbProskuConController {
}
}
@PostMapping("V2")
@Log("新增商品耗材绑定关系")
@ApiOperation("新增商品耗材绑定关系")
public ResponseEntity<Object> upV2(@Validated @RequestBody List<TbProskuCon> 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("修改商品规格耗材信息")

View File

@ -44,6 +44,7 @@ public interface TbProskuConService {
* @return TbProskuConDto
*/
TbProskuConDto create(List<ProskuInfo> resources) throws Exception;
void upV2(List<TbProskuCon> resources) throws Exception;
/**
* 编辑

View File

@ -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<TbProskuCon> resources) {
List<TbProskuCon> newCons=new ArrayList<>();
Map<Integer, List<TbProskuCon>> 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<TbProskuCon> cons = conMap.get(proId);
List<Integer> collect = cons.stream().map(TbProskuCon::getId).collect(Collectors.toList());
//现有的
List<TbProskuCon> tbProskuCons = tbProskuConRepository.searchAllByProductId(proId);
List<Integer> 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 {

View File

@ -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<ViewConSku> query = Example.of(viewConSku);
List<ViewConSku> skuCons = viewConSkuRepository.findAll(query);
tbProductVo.setConInfos(skuCons);
if ("sku".equals(tbProductVo.getTypeEnum())) {
Optional<TbProductSkuResult> skuResult = tbProductSkuResultRepository.findById(tbProductVo.getId());
tbProductVo.setSkuSnap(skuResult.get().getTagSnap());

View File

@ -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<ViewConSku> conInfos;
private TbPurchaseNotice notices=new TbPurchaseNotice();
private List<TbCouponCategoryDto> groupCategoryId = new ArrayList<>();
private List<TbPlatformDictDto> tags = new ArrayList<>();