Authored by chenchao

add super entry seller check

... ... @@ -2,6 +2,8 @@ package com.yohoufo.dal.order;
import com.yohoufo.dal.order.model.SuperEntrySeller;
import java.util.List;
public interface SuperEntrySellerMapper {
int deleteByPrimaryKey(Integer uid);
... ... @@ -14,4 +16,7 @@ public interface SuperEntrySellerMapper {
int updateByPrimaryKeySelective(SuperEntrySeller record);
int updateByPrimaryKey(SuperEntrySeller record);
List<SuperEntrySeller> selectAll(Short status);
}
\ No newline at end of file
... ...
package com.yohoufo.order.common;
/**
* Created by chao.chen on 2018/12/11.
*/
public enum SurperEntrySellerStatus {
COMMON((short)0),SURPER((short)1);
short code;
SurperEntrySellerStatus(short code) {
this.code = code;
}
public short getCode() {
return code;
}
}
... ...
package com.yohoufo.order.service.impl;
package com.yohoufo.order.service;
import com.yohobuy.ufo.model.order.resp.OrderListInfo;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
... ...
package com.yohoufo.order.service.impl;
package com.yohoufo.order.service;
import com.yohobuy.ufo.model.order.bo.ButtonShowBo;
import com.yohobuy.ufo.model.order.common.SellerType;
... ...
... ... @@ -4,6 +4,7 @@ import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
import com.yohobuy.ufo.model.order.common.TabType;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohoufo.order.model.request.OrderListRequest;
import com.yohoufo.user.cache.CacheKeyEnum;
import org.slf4j.helpers.MessageFormatter;
import java.math.BigDecimal;
... ... @@ -48,6 +49,8 @@ public class CacheKeyBuilder {
ORDER_DETAIL("ufo:order:orderDetail:", "uid:{}:tabType:{}:orderCode:{}"),
SELLER_ORDER_DETAIL("ufo:order:orderDetail:", "uid:{}:tabType:{}:batchNo:{}:price{}:status{}");
private String fix;
private String placeHolder;
... ... @@ -102,4 +105,8 @@ public class CacheKeyBuilder {
return KeyTemp.ORDER_DETAIL.builderKey(new Object[]{uid, actor, orderCode});
}
public static RedisKeyBuilder superEntrySellerListKey(CacheKeyEnum cke){
return cke.getKey();
}
}
... ...
... ... @@ -5,13 +5,16 @@ import com.yoho.core.redis.cluster.operations.nosync.YHRedisTemplate;
import com.yoho.core.redis.cluster.operations.nosync.YHValueOperations;
import com.yoho.core.redis.cluster.operations.nosync.YHZSetOperations;
import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
import com.yohoufo.common.cache.CacheClient;
import com.yohoufo.dal.order.model.StoredSeller;
import com.yohoufo.user.cache.CacheHelper;
import com.yohoufo.user.cache.CacheKeyEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
... ... @@ -29,6 +32,8 @@ public class StoredSellerCacheService {
@Redis("yohoNoSyncRedis")
YHValueOperations yhValueOperations;
@Autowired
private CacheClient cacheClient;
public static RedisKeyBuilder getStoredSellerRedisKeyBuilder(Integer uid){
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.STORED_SELLER_KEY.getCacheKey()).appendVar(uid);
... ... @@ -91,4 +96,21 @@ public class StoredSellerCacheService {
}
}
public void setSuperEntrySellerList(RedisKeyBuilder rkb,List<Integer> uids ){
try{
cacheClient.rightPushAll(rkb, uids, 3600);
}catch (Exception ex){
logger.warn("in getSuperUidList fetch cache fail rkb {}", rkb);
}
}
public List<Integer> getSuperEntrySellerList(RedisKeyBuilder rkb){
try{
return cacheClient.range(rkb, Integer.class, 0 , -1);
}catch (Exception ex){
logger.warn("in getSuperUidList fetch cache fail rkb {}", rkb);
return null;
}
}
}
... ...
... ... @@ -2,7 +2,6 @@ package com.yohoufo.order.service.impl;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.common.OrderStatus;
import com.yohobuy.ufo.model.order.common.TabType;
import com.yohobuy.ufo.model.order.resp.OrderListInfo;
import com.yohobuy.ufo.model.order.common.OrderListType;
... ... @@ -14,6 +13,7 @@ import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.BuyerOrderGoods;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohoufo.order.model.request.OrderListRequest;
import com.yohoufo.order.service.AbsBuyerOrderViewService;
import com.yohoufo.order.service.IBuyerOrderMetaService;
import com.yohoufo.order.service.IOrderListService;
import org.apache.commons.collections.CollectionUtils;
... ... @@ -28,7 +28,7 @@ import java.util.List;
* Created by chenchao on 2018/9/20.
*/
@Service
public class BuyerOrderListServiceImpl extends AbsOrderListService implements IOrderListService,AbsBuyerOrderViewService{
public class BuyerOrderListServiceImpl extends AbsOrderListService implements IOrderListService,AbsBuyerOrderViewService {
private final Logger logger = LoggerFactory.getLogger(getClass());
... ...
... ... @@ -22,6 +22,7 @@ import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.model.request.OrderRequest;
import com.yohoufo.order.model.response.GoodsInfo;
import com.yohoufo.order.model.response.OrderDetailInfo;
import com.yohoufo.order.service.AbsSellerOrderViewService;
import com.yohoufo.order.service.IOrderDetailService;
import com.yohoufo.order.service.cache.OrderCacheService;
import com.yohoufo.order.service.impl.processor.SellerOrderPrepareProcessor;
... ... @@ -157,9 +158,6 @@ public class SellerOrderDetailService extends AbsOrderDetailService implements I
}
@Override
void assembleSoldPrdCompute(OrderDetailInfo orderDetailInfo, int uid, int skup){
SellerOrderMeta feeMeta = somMapper.selectByMetaKey(uid, skup, MetaKey.SELLER_FEE);
... ...
... ... @@ -23,6 +23,7 @@ import com.yohoufo.dal.order.model.BuyerOrderGoods;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohoufo.order.model.request.OrderListRequest;
import com.yohoufo.order.service.AbsSellerOrderViewService;
import com.yohoufo.order.service.IOrderListService;
import com.yohoufo.order.service.cache.OrderCacheService;
import com.yohoufo.order.service.impl.processor.SellerOrderPrepareProcessor;
... ...
package com.yohoufo.order.service.impl;
import com.yohoufo.dal.order.SuperEntrySellerMapper;
import com.yohoufo.dal.order.model.SuperEntrySeller;
import com.yohoufo.order.common.SurperEntrySellerStatus;
import com.yohoufo.order.service.IStoredSellerService;
import com.yohoufo.order.service.cache.StoredSellerCacheService;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.user.cache.CacheKeyEnum;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
* 卖家服务(竞价提醒)
... ... @@ -17,6 +27,14 @@ public class SellerService {
private final Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
private StoredSellerCacheService storedSellerCacheService;
@Autowired
private IStoredSellerService storedSellerService;
@Autowired
private SuperEntrySellerMapper superEntrySellerMapper;
/**更低出价提醒
* 1)当有新卖家出价成功或调价成功时,给所有正在出售该sku(尺码)的其他卖家推送一条消息(push+消息盒子)
*2)同一卖家的同一SKU 1小时内仅推送一条提醒(最先推送的那条)
... ... @@ -41,4 +59,44 @@ public class SellerService {
//倒计时 需要考虑跨天,计算当前日期的最后一秒
}
public List<Integer> getSuperEntrySellerUids(){
CacheKeyEnum cke = CacheKeyEnum.SUPER_ENTRY_SELLER_LIST;
List<Integer> uidList = storedSellerCacheService.getSuperEntrySellerList(cke.getKey());
if (CollectionUtils.isNotEmpty(uidList)){
//hit in cache
logger.info("in getSuperEntrySellerUids hit cache uidList {}", uidList);
return uidList;
}
List<SuperEntrySeller> sesList = superEntrySellerMapper.selectAll(SurperEntrySellerStatus.SURPER.getCode());
if (CollectionUtils.isNotEmpty(sesList)){
uidList = sesList.parallelStream().map(SuperEntrySeller::getUid).collect(Collectors.toList());
storedSellerCacheService.setSuperEntrySellerList(cke.getKey(), uidList);
logger.info("in getSuperEntrySellerUids fetch from DB uidList {}", uidList);
}
return uidList;
}
public boolean isSuperEntrySeller(int uid){
if(storedSellerService.isStoredSeller(uid)){
List<Integer> uidList = getSuperEntrySellerUids();
logger.info("isSuperEntrySeller check uid {} uidList {}", uid, uidList);
if (CollectionUtils.isNotEmpty(uidList)){
//hit or not
return uidList.contains(uid);
}
}
return false;
}
}
... ...
... ... @@ -23,16 +23,11 @@ import java.util.List;
*/
@Service
public class SkupService {
private final Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
private SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
private SkupBatchMapper skupBatchMapper;
@Transactional(propagation = Propagation.REQUIRED)
@Database(ForceMaster=true, DataSource="ufo_order")
public SellerOrderGoods addSkup(GoodsInfo goodsInfo){
... ...
... ... @@ -3,6 +3,7 @@
*/
package com.yohoufo.user.cache;
import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
import org.apache.commons.lang3.StringUtils;
import java.util.concurrent.TimeUnit;
... ... @@ -23,6 +24,8 @@ public enum CacheKeyEnum {
STORED_SELLER_KEY("ufo:user:storedSeller:","商家入驻信息", 2, TimeUnit.HOURS),
USER_PRODUCT_FAVORITE_ZSET_KEY("ufo:user:product:favorite:","用户商品收藏集合", 180, TimeUnit.DAYS),
SUPER_ENTRY_SELLER_LIST("ufo:user:superEntrySeller:list","超级入驻商家集合", 1, TimeUnit.HOURS)
;
// 缓存的key
... ... @@ -78,4 +81,7 @@ public enum CacheKeyEnum {
return desc;
}
public RedisKeyBuilder getKey(){
return RedisKeyBuilder.newInstance().appendFixed(cacheKey);
}
}
\ No newline at end of file
... ...