记得上下班打卡 | git大法好,push需谨慎

Commit 7d7fe923 authored by 胡佳晨's avatar 胡佳晨

提交 结束时间未填写分段购 sku详情逻辑

增加 上个时间段 库存未售罄的库存
parent 706e6de9
...@@ -713,30 +713,101 @@ public class GoblinRedisUtils { ...@@ -713,30 +713,101 @@ public class GoblinRedisUtils {
*/ */
public HashMap<String, Object> getGoodsSkuInfoVo(LocalDateTime now, String skuId) { public HashMap<String, Object> getGoodsSkuInfoVo(LocalDateTime now, String skuId) {
GoblinGoodsSkuInfoVo vo = getGoodsSkuInfoVo(skuId); GoblinGoodsSkuInfoVo vo = getGoodsSkuInfoVo(skuId);
HashMap<String, Object> map = CollectionUtil.mapStringObject();
if (now.isAfter(vo.getSaleStartTime())) {//普通商品已开售
lastStockToLastStock(getGoblinListCollect(skuId),null,skuId);
map.put("vo", vo);
map.put("tagType", null);
map.put("listId", null);
} else {//未开售
GoblinListCollectVo collectVo = getCollectByNow(now, skuId);
Integer tagType = null;
String listId = null;
if (collectVo != null) {
vo.setPrice(collectVo.getPrice());
vo.setPriceV(collectVo.getPriceV());
vo.setProductId(collectVo.getProductId());
vo.setSaleStartTime(collectVo.getTimeStart());
vo.setSaleStopTime(collectVo.getTimeEnd());
tagType = collectVo.getTagType();
listId = collectVo.getListId();
}
map.put("vo", vo);
map.put("tagType", tagType);
map.put("listId", listId);
}
return map;
}
/**
* 根据时间获取当前分段购vo
*
* @param now
* @param skuId
* @return
*/
public GoblinListCollectVo getCollectByNow(LocalDateTime now, String skuId) {
GoblinListCollectVo collectVo = null;
GoblinListCollectVo collectTemp = null;
List<GoblinListCollectVo> collectVos = getGoblinListCollect(skuId); List<GoblinListCollectVo> collectVos = getGoblinListCollect(skuId);
for (GoblinListCollectVo collectVoItem : collectVos) {
if (now.isAfter(collectVoItem.getTimeStart()) && collectVoItem.getTimeEnd() == null) {
if (collectTemp == null || collectTemp.getTimeStart().isBefore(collectVoItem.getTimeStart())) {
collectTemp = collectVoItem;
}
} else if (now.isAfter(collectVoItem.getTimeStart()) && now.isBefore(collectVoItem.getTimeEnd())) {
collectVo = collectVoItem;
break;
}
}
if (collectVo == null) {
collectVo = collectTemp;
}
lastStockToLastStock(collectVos, collectVo, skuId);
return collectVo;
}
/**
* 处理上个时间段的库存
*
* @param collectVos
* @param vo
* @param skuId
*/
public void lastStockToLastStock(List<GoblinListCollectVo> collectVos, GoblinListCollectVo vo, String skuId) {
if(vo ==null ){//已开售逻辑
}
LocalDateTime st = vo.getTimeStart().minusSeconds(1);
GoblinListCollectVo collectVo = null; GoblinListCollectVo collectVo = null;
GoblinListCollectVo collectTemp = null;
//获取上个分配购的vo
for (GoblinListCollectVo collectVoItem : collectVos) { for (GoblinListCollectVo collectVoItem : collectVos) {
if (now.isAfter(collectVoItem.getTimeStart()) && now.isBefore(collectVoItem.getTimeEnd())) { if (st.isAfter(collectVoItem.getTimeStart()) && collectVoItem.getTimeEnd() == null) {
collectTemp = collectVoItem;
} else if (st.isAfter(collectVoItem.getTimeStart()) && st.isBefore(collectVoItem.getTimeEnd())) {
collectVo = collectVoItem; collectVo = collectVoItem;
break; break;
} }
} }
HashMap<String, Object> map = CollectionUtil.mapStringObject(); if (collectVo == null) {
Integer tagType = null; collectVo = collectTemp;
String listId = null; }
if (collectVo != null) { if (collectVo == null && collectVos.size() != 0) {
vo.setPrice(collectVo.getPrice());
vo.setPriceV(collectVo.getPriceV()); } else if (collectVo != null) {
vo.setProductId(collectVo.getProductId()); //减少上个时间段sku库存
vo.setSaleStartTime(collectVo.getTimeStart()); int lastStock = getSkuStock(collectVo.getListId(), skuId);
vo.setSaleStopTime(collectVo.getTimeEnd()); int restStock = decrSkuStock(collectVo.getListId(), skuId, lastStock);
tagType = collectVo.getTagType(); if (restStock < 0) {
listId = collectVo.getListId(); //库存超过销售量 操作失败回滚库存
} incrSkuStock(collectVo.getListId(), skuId, lastStock);
map.put("vo", vo); } else {
map.put("tagType", tagType); //上个时间段的库存增加到当前时间段
map.put("listId", listId); incrSkuStock(vo.getListId(), skuId, lastStock);
return map; }
}
} }
public GoblinGoodsSkuInfoVo getGoodsSkuInfoVoByUnShelves(String skuId) { public GoblinGoodsSkuInfoVo getGoodsSkuInfoVoByUnShelves(String skuId) {
......
...@@ -45,6 +45,20 @@ public class GoblinRedisUtils { ...@@ -45,6 +45,20 @@ public class GoblinRedisUtils {
return (int) redisUtil.decr(rk, stock); return (int) redisUtil.decr(rk, stock);
} }
public int getSkuStock(String marketPre, String skuId) {
String rk = GoblinRedisConst.REAL_STOCK_SKU;
if (marketPre != null && !marketPre.equals("null")) {
rk = rk.concat(marketPre + ":");
}
rk = rk.concat(skuId);
Object obj = redisUtil.get(rk);
if (obj == null) {
return 0;
} else {
return (int) obj;
}
}
public int getSkuStock(String skuId) { public int getSkuStock(String skuId) {
String rk = GoblinRedisConst.REAL_STOCK_SKU.concat(skuId); String rk = GoblinRedisConst.REAL_STOCK_SKU.concat(skuId);
Object obj = redisUtil.get(rk); Object obj = redisUtil.get(rk);
...@@ -171,14 +185,7 @@ public class GoblinRedisUtils { ...@@ -171,14 +185,7 @@ public class GoblinRedisUtils {
*/ */
public HashMap<String, Object> getGoodsSkuInfoVo(LocalDateTime now, String skuId) { public HashMap<String, Object> getGoodsSkuInfoVo(LocalDateTime now, String skuId) {
GoblinGoodsSkuInfoVo vo = getGoodsSkuInfoVo(skuId); GoblinGoodsSkuInfoVo vo = getGoodsSkuInfoVo(skuId);
List<GoblinListCollectVo> collectVos = getGoblinListCollect(skuId); GoblinListCollectVo collectVo = getCollectByNow(now,skuId);
GoblinListCollectVo collectVo = null;
for (GoblinListCollectVo collectVoItem : collectVos) {
if (now.isAfter(collectVoItem.getTimeStart()) && now.isBefore(collectVoItem.getTimeEnd())) {
collectVo = collectVoItem;
break;
}
}
HashMap<String, Object> map = CollectionUtil.mapStringObject(); HashMap<String, Object> map = CollectionUtil.mapStringObject();
Integer tagType = null; Integer tagType = null;
String listId = null; String listId = null;
...@@ -197,6 +204,70 @@ public class GoblinRedisUtils { ...@@ -197,6 +204,70 @@ public class GoblinRedisUtils {
return map; return map;
} }
/**
* 根据时间获取当前分段购vo
* @param now
* @param skuId
* @return
*/
public GoblinListCollectVo getCollectByNow(LocalDateTime now, String skuId) {
GoblinListCollectVo collectVo = null;
GoblinListCollectVo collectTemp = null;
List<GoblinListCollectVo> collectVos = getGoblinListCollect(skuId);
//获取当前
for (GoblinListCollectVo collectVoItem : collectVos) {
if (now.isAfter(collectVoItem.getTimeStart()) && collectVoItem.getTimeEnd() == null) {
if (collectTemp == null || collectTemp.getTimeStart().isBefore(collectVoItem.getTimeStart())) {
collectTemp = collectVoItem;
}
} else if (now.isAfter(collectVoItem.getTimeStart()) && now.isBefore(collectVoItem.getTimeEnd())) {
collectVo = collectVoItem;
break;
}
}
if(collectVo==null){
collectVo = collectTemp;
}
lastStockToLastStock(collectVos,collectVo,skuId);
return collectVo;
}
/**
* 处理上个时间段的库存
* @param collectVos
* @param vo
* @param skuId
*/
public void lastStockToLastStock(List<GoblinListCollectVo> collectVos ,GoblinListCollectVo vo,String skuId){
LocalDateTime st = vo.getTimeStart().minusSeconds(1);
GoblinListCollectVo collectVo = null;
GoblinListCollectVo collectTemp = null;
//获取上个分配购的vo
for (GoblinListCollectVo collectVoItem : collectVos) {
if (st.isAfter(collectVoItem.getTimeStart()) && collectVoItem.getTimeEnd() == null) {
collectTemp = collectVoItem;
}else if (st.isAfter(collectVoItem.getTimeStart()) && st.isBefore(collectVoItem.getTimeEnd())) {
collectVo = collectVoItem;
break;
}
}
if(collectVo==null){
collectVo = collectTemp;
}
if(collectVo!=null){
//减少上个时间段sku库存
int lastStock = getSkuStock(collectVo.getListId(),skuId);
int restStock = decrSkuStock(collectVo.getListId(),skuId,lastStock);
if(restStock<0){
//库存超过销售量 操作失败回滚库存
incrSkuStock(collectVo.getListId(),skuId,lastStock);
}else{
//上个时间段的库存增加到当前时间段
incrSkuStock(vo.getListId(),skuId,lastStock);
}
}
}
/** /**
* 分段购获取 * 分段购获取
* @param skuId * @param skuId
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment