...
|
...
|
@@ -24,6 +24,7 @@ import com.yohoufo.dal.order.model.StoredSeller; |
|
|
import com.yohoufo.order.constants.SellerConfig;
|
|
|
import com.yohoufo.order.service.IStoredSellerService;
|
|
|
import com.yohoufo.order.service.MerchantOrderPaymentService;
|
|
|
import com.yohoufo.order.service.cache.StoredSellerCacheService;
|
|
|
import com.yohoufo.order.service.proxy.InBoxFacade;
|
|
|
import com.yohoufo.order.service.proxy.ProductProxyService;
|
|
|
import com.yohoufo.order.utils.LoggerUtils;
|
...
|
...
|
@@ -38,6 +39,7 @@ import java.math.BigDecimal; |
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.function.Supplier;
|
|
|
|
|
|
/**
|
|
|
* Created by chao.chen on 2019/1/14.
|
...
|
...
|
@@ -80,6 +82,9 @@ public class SellerEnterApplyService { |
|
|
@Autowired
|
|
|
private ConfigReader configReader;
|
|
|
|
|
|
@Autowired
|
|
|
private StoredSellerCacheService storedSellerCacheService;
|
|
|
|
|
|
/**
|
|
|
* 申请成为超级卖家
|
|
|
* 对于未支付的某一种身份申请做订单号替换
|
...
|
...
|
@@ -457,43 +462,100 @@ public class SellerEnterApplyService { |
|
|
//身份等级配置
|
|
|
Map<EntrySellerType,EntryThreshold> estMap = metaConfigService.getEntryThreshold();
|
|
|
EntryThreshold set = estMap.get(currentEST);
|
|
|
Supplier<SellerLevelFuncBo> slfSupplier = () ->SellerHelper.getSellerLevelFunc(currentEST, set, left);
|
|
|
//目标身份对应的等级
|
|
|
SellerLevelFuncBo bslfb = SellerHelper.getSellerLevelFunc(currentEST, set, left);
|
|
|
Integer level = bslfb.getLevel();
|
|
|
logger.info("in changeLevel4Super ready change StoredSeller level func, uid {} currentEnterType {} target Level {}",
|
|
|
uid, currentEnterType, level);
|
|
|
//超级卖家
|
|
|
logger.info("in changeLevel4Super ready change StoredSeller targetFuncLevel func, uid {} currentEnterType {}",
|
|
|
uid, currentEnterType);
|
|
|
|
|
|
int result = 0;
|
|
|
if (sellerBo.isNormalSuper()) {
|
|
|
SellerLevelFuncBo bslfb = slfSupplier.get();
|
|
|
Integer targetFuncLevel = bslfb.getLevel();
|
|
|
//
|
|
|
EntryLevelNode eln = buildEntryLevelNode(sellerWrapper, bslfb);
|
|
|
Integer currentLevel = eln.currentLevel;
|
|
|
boolean levelNeedUpgrade = eln.needUpgrade;
|
|
|
StoredSeller pss = sellerWrapper.getStoredSeller();
|
|
|
boolean isValid = Objects.equals(pss.getValidStatus(), StoredSellerStatusEnum.entered.getId());
|
|
|
|
|
|
logger.info("in changeLevel4Super update StoredSeller, uid {} currentLevel {} target targetFuncLevel {} levelNeedUpgrade {} isValid {}",
|
|
|
uid, currentLevel, targetFuncLevel, levelNeedUpgrade, isValid);
|
|
|
doUpgradeSuper(currentEST, currentLevel, targetFuncLevel, uid);
|
|
|
SuperEnterStageLevel targetSESL = SuperEnterStageLevel.getSuperEnterStageLevel(targetFuncLevel);
|
|
|
inBoxFacade.noticeSuperSellerDegrade(uid, targetSESL, bslfb.getWalletThreshold());
|
|
|
}
|
|
|
|
|
|
processLargeSettlementSuperWhenWalletChange(sellerWrapper, left, slfSupplier);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
static class EntryLevelNode{
|
|
|
Integer currentLevel;
|
|
|
Integer targetLevel;
|
|
|
boolean needUpgrade;
|
|
|
}
|
|
|
|
|
|
private EntryLevelNode buildEntryLevelNode(SellerWrapper sellerWrapper, SellerLevelFuncBo bslfb){
|
|
|
Integer targetFuncLevel = bslfb.getLevel();
|
|
|
//
|
|
|
sellerWrapper.buildSuperEnterStageLevel(sellerLevelFuncMapper::selectByPrimaryKey);
|
|
|
SellerBo sellerBo = sellerWrapper.buildSellerBo();
|
|
|
SuperEnterStageLevel sesl = sellerBo.getSuperEnterStageLevel();
|
|
|
Integer currentLevel = null;
|
|
|
boolean levelNeedUpgrade = Objects.nonNull(sesl)
|
|
|
&& Objects.nonNull(currentLevel = sesl.getCode())
|
|
|
&& !currentLevel.equals(level);
|
|
|
StoredSeller pss = sellerWrapper.getStoredSeller();
|
|
|
boolean isValid = Objects.equals(pss.getValidStatus(), StoredSellerStatusEnum.entered.getId());
|
|
|
logger.info("in changeLevel4Super update StoredSeller, uid {} currentLevel {} target level {} levelNeedUpgrade {} isValid {}",
|
|
|
uid, currentLevel, level, levelNeedUpgrade, isValid);
|
|
|
int result = 0;
|
|
|
if (levelNeedUpgrade && isValid) {
|
|
|
doUpgradeSuper(currentEST, currentLevel, level, uid);
|
|
|
if (sellerBo.isNormalSuper()) {
|
|
|
SuperEnterStageLevel targetSESL = SuperEnterStageLevel.getSuperEnterStageLevel(level);
|
|
|
inBoxFacade.noticeSuperSellerDegrade(uid, targetSESL, bslfb.getWalletThreshold());
|
|
|
}
|
|
|
&& !currentLevel.equals(targetFuncLevel);
|
|
|
|
|
|
if (sellerBo.isLargeSettlementSuper()){
|
|
|
EntryLevelNode eln = new EntryLevelNode();
|
|
|
eln.currentLevel = currentLevel;
|
|
|
eln.targetLevel = targetFuncLevel;
|
|
|
eln.needUpgrade = levelNeedUpgrade;
|
|
|
return eln;
|
|
|
}
|
|
|
|
|
|
private EntryLevelNode buildEntryLevelNode(SellerWrapper sellerWrapper, Supplier<SellerLevelFuncBo> slfbSupplier){
|
|
|
SellerLevelFuncBo bslfb = slfbSupplier.get();
|
|
|
return buildEntryLevelNode(sellerWrapper, bslfb);
|
|
|
}
|
|
|
|
|
|
private void processLargeSettlementSuperWhenWalletChange(SellerWrapper sellerWrapper, BigDecimal left,Supplier<SellerLevelFuncBo> slfSupplier){
|
|
|
SellerBo sellerBo = sellerWrapper.buildSellerBo();
|
|
|
if (sellerBo.isLargeSettlementSuper() ){
|
|
|
SellerLevelFuncBo bslfb = slfSupplier.get();
|
|
|
int uid = sellerBo.getUid();
|
|
|
Integer noticeCnt = null ;
|
|
|
boolean walletNotEnough = (bslfb.getLevel() == SuperEnterStageLevel.FULL.getCode()
|
|
|
&& bslfb.getWalletThreshold().compareTo(left) > 0 );
|
|
|
boolean notNotice = (Objects.isNull(noticeCnt= storedSellerCacheService.getNoticeCntWhenWalletNotEnough(uid)) || noticeCnt<1);
|
|
|
if (notNotice && walletNotEnough){
|
|
|
try {
|
|
|
logger.info("in changeLevel4Super send mail uid {} sellerBo {} noticeCnt {}",
|
|
|
uid, sellerBo, noticeCnt);
|
|
|
String mailTo = configReader.getString("ufo.order.seller.noticeHKSellerEmailTo", "chao.chen@yoho.cn,xiuchun.luo@yoho.cn");
|
|
|
MailSender.newMailSender()
|
|
|
.subject("UFO香港卖家结算")
|
|
|
.to(configReader.getString("ufo.order.seller.noticeHKSellerEmailTo", "chao.chen@yoho.cn,xiuchun.luo@yoho.cn"))
|
|
|
.to(mailTo)
|
|
|
.body("您的钱包金额不足,请及时充值", "text/html;charset=utf-8")
|
|
|
.send();
|
|
|
storedSellerCacheService.setNoticeCntWhenWalletNotEnough(uid, 1);
|
|
|
}catch (Exception ex){
|
|
|
logger.info("changeLevel4Super send mail fail, uid {} left wallet {}", uid, left, ex);
|
|
|
logger.warn("changeLevel4Super send mail fail, uid {} left wallet {}", uid, left, ex);
|
|
|
}
|
|
|
}
|
|
|
logger.info("in changeLevel4Super uid {} sellerBo {} noticeCnt {}",
|
|
|
uid, sellerBo, noticeCnt);
|
|
|
|
|
|
//hidden sale product
|
|
|
boolean needHiddenPrds = bslfb.getLevel() == SuperEnterStageLevel.DISABLE.getCode()
|
|
|
&& bslfb.getWalletThreshold().compareTo(left) > 0;
|
|
|
boolean cancelHidden = bslfb.getLevel() != SuperEnterStageLevel.DISABLE.getCode()
|
|
|
&& bslfb.getWalletThreshold().compareTo(left) < 0;
|
|
|
EntrySellerType currentEST = sellerBo.getEntrySellerType();
|
|
|
if (needHiddenPrds || cancelHidden){
|
|
|
EntryLevelNode eln = buildEntryLevelNode(sellerWrapper, bslfb);
|
|
|
doUpgradeSuper(currentEST, eln.currentLevel, eln.targetLevel, uid);
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
...
|
...
|
|