master:新增商品时,默认新增档口商品对应颜色的库存;
parent
90f3fe37a9
commit
b40ef4f06b
|
|
@ -4,7 +4,8 @@ import com.ruoyi.common.constant.CacheConstants;
|
|||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.redis.RedisCache;
|
||||
import com.ruoyi.web.controller.xkt.shipMaster.vo.DoubleRunImportVO;
|
||||
import com.ruoyi.web.controller.xkt.shipMaster.vo.DoubleRunAttrRQVO;
|
||||
import com.ruoyi.web.controller.xkt.shipMaster.vo.DoubleRunRQVO;
|
||||
import com.ruoyi.xkt.service.shipMaster.IShipMasterService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
|
@ -31,16 +32,16 @@ public class DoubleRunController extends BaseController {
|
|||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin')")
|
||||
@PostMapping("/cache")
|
||||
public R<Integer> createCache(@Validated @RequestBody DoubleRunImportVO importVO) {
|
||||
List<DoubleRunImportVO.DRIArtNoVO> artNoList = importVO.getData().getData();
|
||||
final Integer userId = importVO.getData().getData().get(0).getUserId();
|
||||
public R<Integer> createCache(@Validated @RequestBody DoubleRunRQVO importVO) {
|
||||
List<DoubleRunRQVO.DRIArtNoVO> artNoList = importVO.getData().getData();
|
||||
final Integer userId = importVO.getData().getData().get(0).getUser_id();
|
||||
// 先从redis中获取列表数据
|
||||
List<DoubleRunImportVO.DRIArtNoSkuVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
List<DoubleRunRQVO.DRIArtNoSkuVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
.getCacheObject(CacheConstants.DOUBLE_RUN_KEY + userId), new ArrayList<>());
|
||||
// Map<String, Map<String, List<DoubleRunImportVO.DRIArtNoSkuVO>>> artNoMap = new LinkedHashMap<>();
|
||||
artNoList.forEach(artNoInfo -> {
|
||||
artNoInfo.getSkus().forEach(x -> x.setColor(this.decodeUnicode(x.getColor()))
|
||||
.setArticle_number(artNoInfo.getArticle_number()));
|
||||
.setArticle_number(artNoInfo.getArticle_number()).setProduct_id(artNoInfo.getId()));
|
||||
cacheList.addAll(artNoInfo.getSkus());
|
||||
// artNoMap.put(artNoInfo.getArticle_number(), artNoInfo.getSkus().stream().collect(Collectors
|
||||
// .groupingBy(DoubleRunImportVO.DRIArtNoSkuVO::getColor)));
|
||||
|
|
@ -61,33 +62,57 @@ public class DoubleRunController extends BaseController {
|
|||
return R.ok();
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin')")
|
||||
@PostMapping("/attr/cache/{product_id}")
|
||||
public R<Integer> createAttrCache(@PathVariable Integer product_id, @Validated @RequestBody DoubleRunAttrRQVO attrVO) {
|
||||
Map<String, String> attrMap = new HashMap<>();
|
||||
attrVO.getData().forEach((itemId, attr) -> {
|
||||
// 不处理 multi=1 的属性
|
||||
if (attr.getMulti() == 1) {
|
||||
return;
|
||||
}
|
||||
// 有值
|
||||
if (attr.getHas_value() == 1) {
|
||||
attr.getAttr().stream().filter(x -> x.getChoosed() == 1).forEach(x -> attrMap.put(this.decodeUnicode(x.getProps_name()), this.decodeUnicode(x.getPropsvalue_name())));
|
||||
}
|
||||
});
|
||||
|
||||
Map<Integer, Map<String, String>> productIdAttrMap = new HashMap<>();
|
||||
productIdAttrMap.put(product_id, attrMap);
|
||||
|
||||
|
||||
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin')")
|
||||
@GetMapping("/cache/{userId}")
|
||||
public R<Integer> getCache(@PathVariable Integer userId) {
|
||||
// 从redis中获取数据
|
||||
List<DoubleRunImportVO.DRIArtNoSkuVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
List<DoubleRunRQVO.DRIArtNoSkuVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
.getCacheObject(CacheConstants.DOUBLE_RUN_KEY + userId), new ArrayList<>());
|
||||
if (CollectionUtils.isEmpty(cacheList)) {
|
||||
return R.fail();
|
||||
}
|
||||
Map<String, List<DoubleRunImportVO.DRIArtNoSkuVO>> artNoGroup = cacheList.stream()
|
||||
.sorted(Comparator.comparing(DoubleRunImportVO.DRIArtNoSkuVO::getArticle_number)
|
||||
.thenComparing(DoubleRunImportVO.DRIArtNoSkuVO::getColor))
|
||||
Map<String, List<DoubleRunRQVO.DRIArtNoSkuVO>> artNoGroup = cacheList.stream()
|
||||
.sorted(Comparator.comparing(DoubleRunRQVO.DRIArtNoSkuVO::getArticle_number)
|
||||
.thenComparing(DoubleRunRQVO.DRIArtNoSkuVO::getColor))
|
||||
.collect(Collectors
|
||||
.groupingBy(DoubleRunImportVO.DRIArtNoSkuVO::getArticle_number, LinkedHashMap::new, Collectors.toList()));
|
||||
.groupingBy(DoubleRunRQVO.DRIArtNoSkuVO::getArticle_number, LinkedHashMap::new, Collectors.toList()));
|
||||
// 货号 颜色 map
|
||||
Map<String, List<String>> artNoColorMap = new LinkedHashMap<>();
|
||||
artNoGroup.forEach((artNo, colorList) -> {
|
||||
artNoColorMap.put(artNo, colorList.stream().map(DoubleRunImportVO.DRIArtNoSkuVO::getColor).collect(Collectors.toList()));
|
||||
artNoColorMap.put(artNo, colorList.stream().map(DoubleRunRQVO.DRIArtNoSkuVO::getColor).collect(Collectors.toList()));
|
||||
});
|
||||
|
||||
artNoColorMap.forEach((k,v) -> {
|
||||
System.err.println(k + ":" + v);
|
||||
});
|
||||
|
||||
// TODO 如何对比??
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
|
@ -102,6 +127,8 @@ public class DoubleRunController extends BaseController {
|
|||
if (unicodeStr == null || unicodeStr.isEmpty()) {
|
||||
return unicodeStr;
|
||||
}
|
||||
// 去除首尾的空格
|
||||
unicodeStr = unicodeStr.trim();
|
||||
StringBuilder result = new StringBuilder();
|
||||
int i = 0;
|
||||
while (i < unicodeStr.length()) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.ruoyi.common.constant.CacheConstants;
|
|||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.redis.RedisCache;
|
||||
import com.ruoyi.web.controller.xkt.shipMaster.vo.ShipMasterImportVO;
|
||||
import com.ruoyi.web.controller.xkt.shipMaster.vo.ShipMasterRQVO;
|
||||
import com.ruoyi.xkt.service.shipMaster.IShipMasterService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
|
@ -31,11 +31,11 @@ public class ShipMasterController extends BaseController {
|
|||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin')")
|
||||
@PostMapping("/cache")
|
||||
public R<Integer> createCache(@Validated @RequestBody ShipMasterImportVO importVO) {
|
||||
public R<Integer> createCache(@Validated @RequestBody ShipMasterRQVO importVO) {
|
||||
// 供应商ID
|
||||
final Integer supplierId = importVO.getData().getRecords().get(0).getSupplierId();
|
||||
// 先从redis中获取列表数据
|
||||
List<ShipMasterImportVO.SMIVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
List<ShipMasterRQVO.SMIVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
.getCacheObject(CacheConstants.SUPPLIER_KEY + supplierId), new ArrayList<>());
|
||||
CollectionUtils.addAll(cacheList, importVO.getData().getRecords());
|
||||
// 存到redis中
|
||||
|
|
@ -47,23 +47,23 @@ public class ShipMasterController extends BaseController {
|
|||
@GetMapping("/cache/{supplierId}")
|
||||
public R<Integer> getCache(@PathVariable Integer supplierId) {
|
||||
// 从redis中获取数据
|
||||
List<ShipMasterImportVO.SMIVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
List<ShipMasterRQVO.SMIVO> cacheList = ObjectUtils.defaultIfNull(redisCache
|
||||
.getCacheObject(CacheConstants.SUPPLIER_KEY + supplierId), new ArrayList<>());
|
||||
if (CollectionUtils.isEmpty(cacheList)) {
|
||||
return R.fail();
|
||||
}
|
||||
// 按照artNo分组
|
||||
Map<String, List<ShipMasterImportVO.SMIVO>> artNoGroup = cacheList.stream()
|
||||
.sorted(Comparator.comparing(ShipMasterImportVO.SMIVO::getArtNo)
|
||||
.thenComparing(ShipMasterImportVO.SMIVO::getColor))
|
||||
Map<String, List<ShipMasterRQVO.SMIVO>> artNoGroup = cacheList.stream()
|
||||
.sorted(Comparator.comparing(ShipMasterRQVO.SMIVO::getArtNo)
|
||||
.thenComparing(ShipMasterRQVO.SMIVO::getColor))
|
||||
.collect(Collectors
|
||||
.groupingBy(ShipMasterImportVO.SMIVO::getArtNo, LinkedHashMap::new, Collectors.toList()));
|
||||
.groupingBy(ShipMasterRQVO.SMIVO::getArtNo, LinkedHashMap::new, Collectors.toList()));
|
||||
// 货号 颜色 对应的条码前缀
|
||||
Map<String, Map<String, String>> artSnPrefixMap = new LinkedHashMap<>();
|
||||
// 货号 颜色 map
|
||||
Map<String, List<String>> artNoColorMap = new LinkedHashMap<>();
|
||||
artNoGroup.forEach((artNo, colorList) -> {
|
||||
artNoColorMap.put(artNo, colorList.stream().map(ShipMasterImportVO.SMIVO::getColor).collect(Collectors.toList()));
|
||||
artNoColorMap.put(artNo, colorList.stream().map(ShipMasterRQVO.SMIVO::getColor).collect(Collectors.toList()));
|
||||
Map<String, String> snPrefixMap = new LinkedHashMap<>();
|
||||
// 按照颜色设置条码前缀
|
||||
colorList.forEach(color -> snPrefixMap
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
package com.ruoyi.web.controller.xkt.shipMaster.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-05-11 23:46
|
||||
*/
|
||||
@Data
|
||||
public class DoubleRunAttrRQVO {
|
||||
|
||||
private Map<String, DRAAttrVO> data;
|
||||
|
||||
@Data
|
||||
public static class DRAAttrVO {
|
||||
private Integer must;
|
||||
private Integer multi;
|
||||
private Integer has_value;
|
||||
// eg: 帮面材质
|
||||
private String name;
|
||||
private Integer props_id;
|
||||
private List<DRAAttrItemVO> attr;
|
||||
|
||||
@Data
|
||||
public static class DRAAttrItemVO {
|
||||
private Integer props_id;
|
||||
// eg: 帮面材质
|
||||
private String props_name;
|
||||
private Integer propsvalue_id;
|
||||
// eg: 头层牛皮
|
||||
private String propsvalue_name;
|
||||
private Integer choosed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ import java.util.List;
|
|||
* @date 2025-05-11 23:46
|
||||
*/
|
||||
@Data
|
||||
public class DoubleRunImportVO {
|
||||
public class DoubleRunRQVO {
|
||||
|
||||
private DRIDataVO data;
|
||||
|
||||
|
|
@ -22,7 +22,8 @@ public class DoubleRunImportVO {
|
|||
|
||||
@Data
|
||||
public static class DRIArtNoVO {
|
||||
private Integer userId;
|
||||
private Integer id;
|
||||
private Integer user_id;
|
||||
private String article_number;
|
||||
private List<DRIArtNoSkuVO> skus;
|
||||
}
|
||||
|
|
@ -30,6 +31,7 @@ public class DoubleRunImportVO {
|
|||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class DRIArtNoSkuVO {
|
||||
private Integer product_id;
|
||||
private String article_number;
|
||||
private String color;
|
||||
private Integer size;
|
||||
|
|
@ -9,7 +9,7 @@ import java.util.List;
|
|||
* @date 2025-05-11 23:46
|
||||
*/
|
||||
@Data
|
||||
public class ShipMasterImportVO {
|
||||
public class ShipMasterRQVO {
|
||||
|
||||
private SMIDataVO data;
|
||||
|
||||
|
|
@ -12,6 +12,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
|
|||
|
||||
/**
|
||||
* 档口商品库存对象 store_product_stock
|
||||
* 全部统一在新增商品时,创建默认的库存
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-03-26
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
.setRecommendWeight(0L).setSaleWeight(0L).setPopularityWeight(0L);
|
||||
int count = this.storeProdMapper.insert(storeProd);
|
||||
// 新增档口商品颜色相关
|
||||
this.createProdColor(createDTO, storeProd.getId(), storeProd.getStoreId());
|
||||
this.createProdColor(createDTO, storeProd.getId(), storeProd.getStoreId(), storeProd.getProdArtNum());
|
||||
// 新增档口商品其它属性
|
||||
this.createOtherProperties(createDTO, storeProd);
|
||||
// 立即发布 将商品同步到 ES 商品文档,并将商品主图同步到 以图搜款服务中
|
||||
|
|
@ -279,7 +279,7 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
// 档口工艺信息的del_flag置为2
|
||||
this.storeProdProcMapper.updateDelFlagByStoreProdId(storeProdId);
|
||||
// 更新档口商品颜色价格及尺码等
|
||||
this.updateColorRelation(updateDTO, storeProd.getId(), storeProd.getStoreId());
|
||||
this.updateColorRelation(updateDTO, storeProd.getId(), storeProd.getStoreId(), storeProd.getProdArtNum());
|
||||
// 处理更新逻辑
|
||||
this.updateOtherProperties(updateDTO, storeProd);
|
||||
// 只有在售和尾货状态,更新ES 信息 及 图搜
|
||||
|
|
@ -337,12 +337,12 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
|
||||
/**
|
||||
* 更新档口商品其它属性
|
||||
*
|
||||
* @param updateDTO 更新入参
|
||||
* @param updateDTO 更新入参
|
||||
* @param storeProdId 档口商品ID
|
||||
* @param storeId 档口ID
|
||||
* @param prodArtNum 货号
|
||||
*/
|
||||
private void updateColorRelation(StoreProdDTO updateDTO, Long storeProdId, Long storeId) {
|
||||
private void updateColorRelation(StoreProdDTO updateDTO, Long storeProdId, Long storeId, String prodArtNum) {
|
||||
// 处理档口所有颜色
|
||||
Map<String, Long> storeColorMap = updateDTO.getAllColorList().stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreColorId()))
|
||||
.collect(Collectors.toMap(StoreColorDTO::getColorName, StoreColorDTO::getStoreColorId));
|
||||
|
|
@ -415,6 +415,20 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
if (CollectionUtils.isNotEmpty(nullSnPrefixList)) {
|
||||
this.storeProdColorSizeMapper.updateById(nullSnPrefixList);
|
||||
}
|
||||
|
||||
// 正在生效的颜色
|
||||
List<StoreProductColor> validColorList = dbProdColorList.stream().filter(x -> Objects.equals(x.getDelFlag(), UNDELETED)).collect(Collectors.toList());
|
||||
final List<Long> validColorIdList = validColorList.stream().map(StoreProductColor::getId).collect(Collectors.toList());
|
||||
// 如果数据库不存在该商品颜色的库存,则初始化
|
||||
List<StoreProductStock> dbProdStockList = Optional.ofNullable(this.prodStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
|
||||
.eq(StoreProductStock::getStoreProdId, storeProdId).eq(StoreProductStock::getDelFlag, Constants.UNDELETED))).orElse(new ArrayList<>());
|
||||
final List<Long> dbExistStockColorIdList = dbProdStockList.stream().map(StoreProductStock::getStoreProdColorId).collect(Collectors.toList());
|
||||
// 有哪些颜色是删除的
|
||||
dbProdStockList.stream().filter(x -> !validColorIdList.contains(x.getStoreProdColorId())).forEach(x -> x.setDelFlag(Constants.DELETED));
|
||||
// 有哪些是新增的颜色
|
||||
validColorList.stream().filter(x -> !dbExistStockColorIdList.contains(x.getId()))
|
||||
.forEach(x -> dbProdStockList.add(BeanUtil.toBean(x, StoreProductStock.class).setProdArtNum(prodArtNum).setStoreProdColorId(x.getId())));
|
||||
this.prodStockMapper.insertOrUpdate(dbProdStockList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -456,12 +470,12 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
|
||||
/**
|
||||
* 新增档口商品颜色等
|
||||
*
|
||||
* @param createDTO 入参
|
||||
* @param createDTO 入参
|
||||
* @param storeProdId 档口商品ID
|
||||
* @param storeId 档口ID
|
||||
* @param prodArtNum 货号
|
||||
*/
|
||||
private void createProdColor(StoreProdDTO createDTO, Long storeProdId, Long storeId) {
|
||||
private void createProdColor(StoreProdDTO createDTO, Long storeProdId, Long storeId, String prodArtNum) {
|
||||
// 处理档口所有颜色
|
||||
Map<String, Long> storeColorMap = createDTO.getAllColorList().stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreColorId()))
|
||||
.collect(Collectors.toMap(StoreColorDTO::getColorName, StoreColorDTO::getStoreColorId));
|
||||
|
|
@ -488,6 +502,10 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
// 设置档口商品价格尺码的barcode_prefix
|
||||
prodColorSizeList.forEach(x -> x.setSnPrefix(storeId + String.format("%08d", x.getId())));
|
||||
this.storeProdColorSizeMapper.updateById(prodColorSizeList);
|
||||
// 新增档口库存初始化数据
|
||||
List<StoreProductStock> prodStockList = prodColorList.stream().map(x -> BeanUtil.toBean(x, StoreProductStock.class)
|
||||
.setProdArtNum(prodArtNum).setStoreProdColorId(x.getId())).collect(Collectors.toList());
|
||||
this.prodStockMapper.insert(prodStockList);
|
||||
// 设置了档口商品全部优惠的客户,新增商品优惠
|
||||
this.createStoreCusDiscount(prodColorList, storeProdId);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue