|
|
package com.yohoufo.user.service.impl;
|
|
|
|
|
|
import com.yoho.error.exception.ServiceException;
|
|
|
import com.yohobuy.ufo.model.enums.InboxBusinessTypeEnum;
|
|
|
import com.yohobuy.ufo.model.enums.StoredSellerStatusEnum;
|
|
|
import com.yohoufo.common.caller.UfoServiceCaller;
|
|
|
import com.yohoufo.dal.user.IStoredSellerDao;
|
|
|
import com.yohoufo.dal.user.model.StoredSeller;
|
|
|
import com.yohoufo.dal.user.model.ZhiMaCert;
|
|
|
import com.yohoufo.inboxclient.model.InBoxResponse;
|
|
|
import com.yohoufo.inboxclient.model.InboxReqVO;
|
|
|
import com.yohoufo.inboxclient.sdk.InBoxSDK;
|
|
|
import com.yohoufo.inboxclient.sdk.InBoxSendSmsService;
|
|
|
import com.yohoufo.inboxclient.sdk.InboxUserProxyService;
|
|
|
import com.yohoufo.user.cache.CacheService;
|
|
|
import com.yohoufo.user.service.IRealNameAuthorizeService;
|
|
|
import com.yohoufo.user.service.IStoredSellerService;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneOffset;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
|
|
|
@Service
|
|
|
public class StoredSellerServiceImpl implements IStoredSellerService {
|
|
|
private Logger logger = LoggerFactory.getLogger(StoredSellerServiceImpl.class);
|
|
|
|
|
|
@Autowired
|
|
|
private CacheService cacheService;
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
IRealNameAuthorizeService realNameAuthorizeService;
|
|
|
|
|
|
@Autowired
|
|
|
private IStoredSellerDao storedSellerDao;
|
|
|
|
|
|
@Autowired
|
|
|
private UfoServiceCaller ufoServiceCaller;
|
|
|
|
|
|
@Autowired
|
|
|
private InBoxSDK inBoxSDK;
|
|
|
|
|
|
@Autowired
|
|
|
private InBoxSendSmsService inBoxSendSmsService;
|
|
|
|
|
|
@Autowired
|
|
|
private InboxUserProxyService inboxUserProxyService;
|
|
|
|
|
|
|
|
|
/*@Override
|
|
|
public void applyQuitStoredSeller(Integer uid){
|
|
|
logger.info("StoredSellerServiceImpl applyQuitStoredSeller uid is {} ",uid);
|
|
|
StoredSeller storedSeller = getValidStoredSeller(uid);
|
|
|
if(null==storedSeller){
|
|
|
logger.error("StoredSellerServiceImpl applyQuitStoredSeller store seller is null,uid is {} ",uid);
|
|
|
throw new ServiceException(400,"未找到入驻信息");
|
|
|
}
|
|
|
|
|
|
Integer expectStatus =StoredSellerStatusEnum.entered.getId();
|
|
|
if(!expectStatus.equals(storedSeller.getValidStatus())){
|
|
|
throw new ServiceException(400,"商户入驻状态变化,不允许申请退出!");
|
|
|
}
|
|
|
|
|
|
//只能操作自己的uid
|
|
|
if(!uid.equals(storedSeller.getUid())){
|
|
|
throw new ServiceException(400,"商户入驻操作错误,不允许申请退出!");
|
|
|
}
|
|
|
|
|
|
int num = storedSellerDao.updateStatusByPrimaryKey(storedSeller.getId(),StoredSellerStatusEnum.apply_quit.getId(),expectStatus);
|
|
|
//状态变化,清掉缓存
|
|
|
cacheService.removeStoredSeller(uid);
|
|
|
|
|
|
logger.info("StoredSellerServiceImpl applyQuitStoredSeller end ,uid is {} ,update num ",uid,num);
|
|
|
}*/
|
|
|
|
|
|
@Override
|
|
|
public boolean isStoredSeller(Integer uid){
|
|
|
logger.info("StoredSellerServiceImpl isStoredSeller uid is {} ",uid);
|
|
|
StoredSeller storedSeller = getValidStoredSeller(uid);
|
|
|
if(storedSeller!=null&&storedSeller.getUid()!=null){
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
private StoredSeller getValidStoredSeller(Integer uid){
|
|
|
//从缓存中获取
|
|
|
logger.info("StoredSellerServiceImpl getValidStoredSeller uid is {} ",uid);
|
|
|
StoredSeller storedSeller = cacheService.getStoredSeller(uid);
|
|
|
logger.info("StoredSellerServiceImpl valid store seller uid is {} ,redis info is {} ",uid,storedSeller);
|
|
|
if(null != storedSeller){
|
|
|
return storedSeller;
|
|
|
}
|
|
|
|
|
|
//如果不存在,则从数据库获取
|
|
|
storedSeller= storedSellerDao.selectValidByUid(uid);
|
|
|
logger.info("StoredSellerServiceImpl get valid store seller uid is {} ,database info is {} ",uid,storedSeller);
|
|
|
if(storedSeller!=null){
|
|
|
//保存到redis
|
|
|
cacheService.setStoredSeller( storedSeller);
|
|
|
}
|
|
|
return storedSeller;
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void addUserAsStoredSeller(Integer uid){
|
|
|
logger.info("StoredSellerServiceImpl addUserAsStoredSeller enter uid is {} ",uid);
|
|
|
//检查是否已经实名认证
|
|
|
ZhiMaCert zhiMaCert=realNameAuthorizeService.getValidZhiMaCert(uid);
|
|
|
if(null==zhiMaCert){
|
|
|
logger.error("StoredSellerServiceImpl get zhi ma cert info is null , uid is {} ",uid);
|
|
|
throw new ServiceException(400,"商户没有实名认证通过,不允许入驻");
|
|
|
}
|
|
|
|
|
|
//@TODO 检查是否已经缴纳保证金
|
|
|
|
|
|
|
|
|
|
|
|
LocalDateTime now=LocalDateTime.now();
|
|
|
long ts=now.toEpochSecond(ZoneOffset.of("+8"));
|
|
|
StoredSeller storedSeller=new StoredSeller();
|
|
|
storedSeller.setUid(uid);
|
|
|
storedSeller.setValidStatus(StoredSellerStatusEnum.entered.getId());
|
|
|
storedSeller.setEnterTime(ts);
|
|
|
storedSeller.setCertNo(zhiMaCert.getCertNo());
|
|
|
storedSeller.setCertName(zhiMaCert.getCertName());
|
|
|
storedSeller.setCreateTime(ts);
|
|
|
storedSeller.setUpdateTime(ts);
|
|
|
logger.info("StoredSellerServiceImpl addUserAsStoredSeller insert uid is {} , storedSeller {} ",uid,storedSeller);
|
|
|
int num=storedSellerDao.insert(storedSeller);
|
|
|
if(num<0){
|
|
|
logger.error("StoredSellerServiceImpl addUserAsStoredSeller error uid is {} , storedSeller {} ,insert num {} ",uid,storedSeller,num);
|
|
|
throw new ServiceException(400,"薪资入驻用户信息错误");
|
|
|
}
|
|
|
|
|
|
//保存到redis
|
|
|
cacheService.setStoredSeller( storedSeller);
|
|
|
|
|
|
//发送消息
|
|
|
sendMsg4enty(uid);
|
|
|
|
|
|
}
|
|
|
|
|
|
private void sendMsg4enty(Integer uid){
|
|
|
logger.info("sendMsg4enty inbox msg, uid {}",uid);
|
|
|
//采用异步方式新增消息
|
|
|
Runnable runnable = new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
// 发送消息
|
|
|
InboxBusinessTypeEnum ibt = InboxBusinessTypeEnum.SYSTEM_ENTER_SETTLED;
|
|
|
InboxReqVO inBoxReq = buildInboxReqVO(uid, null, ibt);
|
|
|
|
|
|
InBoxResponse resp = inBoxSDK.addInbox(inBoxReq);
|
|
|
logger.info("sendMsg4enty inbox msg, uid {}, resp {}",
|
|
|
uid, resp);
|
|
|
}
|
|
|
};
|
|
|
Thread thread = new Thread(runnable);
|
|
|
thread.start();
|
|
|
}
|
|
|
|
|
|
private InboxReqVO buildInboxReqVO(int uid, String params, InboxBusinessTypeEnum ibt) {
|
|
|
InboxReqVO req = new InboxReqVO();
|
|
|
req.setType(ibt.getType());
|
|
|
req.setBusinessType(ibt.getBusinessType());
|
|
|
//
|
|
|
req.setUid(uid);
|
|
|
req.setParams(params);
|
|
|
return req;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Integer updateStoredSellerQuitStatus(Integer uid){
|
|
|
logger.info("StoredSellerServiceImpl updateStoredSellerQuitStatus uid is {} ",uid);
|
|
|
StoredSeller storedSeller = getValidStoredSeller(uid);
|
|
|
if(null==storedSeller){
|
|
|
logger.error("StoredSellerServiceImpl applyQuitStoredSeller store seller is null,uid is {} ",uid);
|
|
|
throw new ServiceException(400,"未找到入驻信息");
|
|
|
}
|
|
|
|
|
|
Integer expectStatus =StoredSellerStatusEnum.entered.getId();
|
|
|
if(!expectStatus.equals(storedSeller.getValidStatus())){
|
|
|
throw new ServiceException(400,"商户入驻状态变化,不允许退出!");
|
|
|
}
|
|
|
|
|
|
//只能操作自己的uid
|
|
|
if(!uid.equals(storedSeller.getUid())){
|
|
|
throw new ServiceException(400,"商户入驻操作错误,不允许退出!");
|
|
|
}
|
|
|
|
|
|
LocalDateTime now=LocalDateTime.now();
|
|
|
long ts=now.toEpochSecond(ZoneOffset.of("+8"));
|
|
|
|
|
|
//更新为退驻
|
|
|
logger.info("StoredSellerServiceImpl updateStoredSellerQuitStatus begin ,uid is {} ,ts {} ",uid,ts);
|
|
|
int num = storedSellerDao.updateStatusByUid(uid,StoredSellerStatusEnum.quit.getId(),expectStatus,ts);
|
|
|
//状态变化,清掉缓存
|
|
|
cacheService.removeStoredSeller(uid);
|
|
|
|
|
|
logger.info("StoredSellerServiceImpl updateStoredSellerQuitStatus end ,uid is {} ,update num {}",uid,num);
|
|
|
|
|
|
|
|
|
return num;
|
|
|
}
|
|
|
|
|
|
private void sendMsg4quit(Integer uid){
|
|
|
logger.info("sendMsg4quit inbox msg, uid {}",uid);
|
|
|
//采用异步方式新增消息
|
|
|
Runnable runnable = new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
// 发送消息
|
|
|
InboxBusinessTypeEnum ibt = InboxBusinessTypeEnum.SYSTEM_EXIT_SETTLED;
|
|
|
InboxReqVO inBoxReq = buildInboxReqVO(uid, null, ibt);
|
|
|
|
|
|
InBoxResponse resp = inBoxSDK.addInbox(inBoxReq);
|
|
|
logger.info("sendMsg4quit inbox msg, uid {}, resp {}",
|
|
|
uid, resp);
|
|
|
|
|
|
// 发送短信
|
|
|
String content=InboxBusinessTypeEnum.SMS_EXIT_SETTLED.getContent();
|
|
|
String phone=inboxUserProxyService.getMobile(uid);
|
|
|
logger.info("sendMsg4quit inbox sms, uid {}, phone {}",
|
|
|
uid, phone);
|
|
|
if (StringUtils.isBlank(phone)){
|
|
|
logger.warn("endMsg4quit inbox sms fail cause of phone is empty, uid {} ", uid);
|
|
|
return;
|
|
|
}
|
|
|
List<String> mobileList = Arrays.asList(phone);
|
|
|
inBoxSendSmsService.smsSendByMobile(content,mobileList);
|
|
|
logger.info("sendMsg4quit inbox sms send end, uid {}, phone {}",
|
|
|
uid, phone);
|
|
|
}
|
|
|
};
|
|
|
Thread thread = new Thread(runnable);
|
|
|
thread.start();
|
|
|
}
|
|
|
} |