Authored by qinchao

入驻商户接口变更 user -> order

Showing 19 changed files with 413 additions and 444 deletions
package com.yohoufo.dal.user;
package com.yohoufo.dal.order;
import com.yohoufo.dal.user.model.StoredSeller;
import com.yohoufo.dal.order.model.StoredSeller;
import org.apache.ibatis.annotations.Param;
public interface IStoredSellerDao {
... ... @@ -9,7 +9,7 @@ public interface IStoredSellerDao {
int insert(StoredSeller storedSeller);
int updateStatusByUid(@Param("uid")int uid,@Param("validStatus") int validStatus ,@Param("expectStatus") int expectStatus,@Param("updateTime") long updateTime);
int updateStatusByUid(@Param("uid") int uid, @Param("validStatus") int validStatus, @Param("expectStatus") int expectStatus, @Param("updateTime") long updateTime);
/*int updateToQuitByPrimaryKey(@Param("id")int id,@Param("validStatus") int validStatus ,@Param("expectStatus") int expectStatus
,@Param("operatorUid") int operatorUid,@Param("operatorName") String operatorName
... ...
package com.yohoufo.dal.user.model;
package com.yohoufo.dal.order.model;
import lombok.Data;
import lombok.ToString;
... ...
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yohoufo.dal.user.IStoredSellerDao" >
<resultMap id="BaseResultMap" type="com.yohoufo.dal.user.model.StoredSeller" >
<mapper namespace="com.yohoufo.dal.order.IStoredSellerDao" >
<resultMap id="BaseResultMap" type="com.yohoufo.dal.order.model.StoredSeller" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="uid" property="uid" jdbcType="INTEGER" />
<result column="valid_status" property="validStatus" jdbcType="INTEGER" />
... ... @@ -27,7 +27,7 @@
order by id desc limit 1
</select>
<insert id="insert" parameterType="com.yohoufo.dal.user.model.StoredSeller" >
<insert id="insert" parameterType="com.yohoufo.dal.order.model.StoredSeller" >
insert into stored_seller (uid, valid_status,cert_no,cert_name,operator_uid,operator_name,enter_time,quit_time, create_time, update_time)
values (#{uid},#{validStatus},
#{certNo},#{certName},#{operatorUid},#{operatorName},
... ...
... ... @@ -5,6 +5,7 @@ import com.yohoufo.common.exception.GatewayException;
import com.yohoufo.order.model.request.ShoppingRequest;
import com.yohoufo.order.model.response.OrderSubmitResponse;
import com.yohoufo.order.service.IStoredSellerDepositService;
import com.yohoufo.order.service.IStoredSellerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -27,6 +28,9 @@ public class StoredSellerDepositController {
@Autowired
private IStoredSellerDepositService storedSellerDepositService;
@Autowired
private IStoredSellerService storedSellerService;
/**
* 预存保证金
*/
... ... @@ -54,6 +58,7 @@ public class StoredSellerDepositController {
* 商户退驻
*/
@RequestMapping(params = "method=ufo.sellerOrder.quitStoredSeller")
@ResponseBody
public ApiResponse quitStoredSeller(@RequestParam("uid") Integer uid) throws GatewayException {
logger.info("enter StoredSellerController quitStoredSeller param uid is {}", uid);
//(1) 优先校验请求的参数
... ... @@ -65,4 +70,22 @@ public class StoredSellerDepositController {
return new ApiResponse();
}
/**
* 是否入驻商户
*/
@RequestMapping(params = "method=ufo.sellerOrder.isStoredSeller")
@ResponseBody
public ApiResponse isStoredSeller(@RequestParam("uid") Integer uid) throws GatewayException {
logger.info("enter StoredSellerController isStoredSeller param uid is {}", uid);
//(1) 优先校验请求的参数
if (uid == null || uid <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
boolean isStoredSeller=storedSellerService.isStoredSeller(uid);
ApiResponse apiResponse = new ApiResponse();
apiResponse.setData(isStoredSeller);
return apiResponse;
}
}
... ...
package com.yohoufo.order.service;
import com.yohoufo.dal.order.model.StoredSeller;
/**
* 入驻商户
*/
public interface IStoredSellerService {
boolean isStoredSeller(Integer uid);
void addUserAsStoredSeller(Integer uid);
StoredSeller getValidStoredSeller(Integer uid);
}
... ...
package com.yohoufo.order.service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.yoho.core.common.utils.DateUtil;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yoho.tools.common.beans.ApiResponse;
import com.yohobuy.ufo.model.order.bo.OrderInfo;
import com.yohobuy.ufo.model.order.common.OrderCodeType;
import com.yohobuy.ufo.model.order.common.OrderStatus;
... ... @@ -25,22 +12,25 @@ import com.yohobuy.ufo.model.order.resp.PageResp;
import com.yohoufo.common.alarm.CommonAlarmEventPublisher;
import com.yohoufo.common.caller.UfoServiceCaller;
import com.yohoufo.common.utils.TimeUtils;
import com.yohoufo.dal.order.EntrySellerRechargeOrderMapper;
import com.yohoufo.dal.order.OrdersPayMapper;
import com.yohoufo.dal.order.OrdersPayRefundMapper;
import com.yohoufo.dal.order.SellerWalletDetailMapper;
import com.yohoufo.dal.order.SellerWalletMapper;
import com.yohoufo.dal.order.model.EntrySellerRechargeOrder;
import com.yohoufo.dal.order.model.OrdersPay;
import com.yohoufo.dal.order.model.OrdersPayRefund;
import com.yohoufo.dal.order.model.SellerWallet;
import com.yohoufo.dal.order.model.SellerWalletDetail;
import com.yohoufo.dal.order.*;
import com.yohoufo.dal.order.model.*;
import com.yohoufo.order.common.Payment;
import com.yohoufo.order.model.request.PaymentRequest;
import com.yohoufo.order.model.response.PrepayResponse;
import com.yohoufo.order.service.cache.CacheCleaner;
import com.yohoufo.order.service.cache.CacheKeyBuilder;
import com.yohoufo.order.service.impl.PaymentServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Service
public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
... ... @@ -72,6 +62,9 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
@Autowired
PaymentServiceImpl paymentService;
@Autowired
IStoredSellerService storedSellerService;
/**
* 更新订单状态
* @param orderInfo
... ... @@ -95,10 +88,7 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
if (orderInfo.getType() == TYPE_FIRST_RECHARGE) {
try {
logger.info("首次充值后回调,调用商家入驻接口,uid={}", orderInfo.getUid());
com.yoho.tools.common.beans.ApiResponse<?> resp = ufoServiceCaller.call("ufo.user.addUserAsStoredSeller", ApiResponse.class, orderInfo.getUid());
if (resp == null || resp.getCode() != 200) {
throw new Exception("调用商家入驻接口返回结果code不是200");
}
storedSellerService.addUserAsStoredSeller(orderInfo.getUid());
} catch (Exception e) {
logger.error("首次充值后回调,商家入驻接口失败,uid={}, msg={}", orderInfo.getUid(), e.getMessage());
CommonAlarmEventPublisher.publish("商家入驻失败", "ufo.user.addUserAsStoredSeller", "首次充值后回调,商家入驻接口失败:uid=" + orderInfo.getUid() + ",充值订单号为:" + orderInfo.getOrderCode() + ",err="+ e.getMessage());
... ...
package com.yohoufo.order.service.cache;
import com.yoho.core.redis.cluster.annotation.Redis;
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.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.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
* Created by craig.qin on 2018/9/20.
*/
@Service
public class StoredSellerCacheService {
private final Logger logger = LoggerFactory.getLogger(StoredSellerCacheService.class);
@Redis("yohoNoSyncRedis")
YHZSetOperations yhZSetOperations;
@Redis("yohoNoSyncRedis")
YHRedisTemplate yhRedisTemplate;
@Redis("yohoNoSyncRedis")
YHValueOperations yhValueOperations;
public static RedisKeyBuilder getStoredSellerRedisKeyBuilder(Integer uid){
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.STORED_SELLER_KEY.getCacheKey()).appendVar(uid);
}
/**************************************************************************
* 商家入驻相关
*************************************************************************/
public StoredSeller getStoredSeller(Integer uid){
return get(getStoredSellerRedisKeyBuilder(uid),StoredSeller.class);
}
public void setStoredSeller(StoredSeller storedSeller){
set(getStoredSellerRedisKeyBuilder(storedSeller.getUid()),storedSeller,CacheKeyEnum.STORED_SELLER_KEY.getDefaultExpireTime(),CacheKeyEnum.STORED_SELLER_KEY.getTimeUnit());
}
public void removeStoredSeller(Integer uid) {
yhRedisTemplate.delete(getStoredSellerRedisKeyBuilder(uid));
}
/**************************************************************************
* 通用
*************************************************************************/
/**
* 取值
*
* @param cacheKey
* @param clazz
*/
public <T> T get(RedisKeyBuilder cacheKey, Class<T> clazz) {
logger.debug("Enter get valueOperation redis value.key is {}", cacheKey);
try {
String value = yhValueOperations.get(cacheKey);
return CacheHelper.string2Value(value, clazz);
} catch (Exception e) {
logger.warn("Redis exception. value redis get,key {}, error msg is {}", cacheKey, e);
}
return null;
}
/**
* 设置值
*
* @param cacheKey
* @param value
* @param timeout
* @param unit
* @param <T>
*/
public <T> void set(RedisKeyBuilder cacheKey, T value, long timeout, TimeUnit unit) {
logger.debug("Enter set valueOperation redis value.key is {},value is {}", cacheKey, value);
try {
String v = CacheHelper.value2String(value);
yhValueOperations.set(cacheKey, v, timeout, unit);
} catch (Exception e) {
logger.warn("Redis exception. value redis set,key {},value is {}, error msg is {}", cacheKey, value, e);
}
}
}
... ...
package com.yohoufo.order.service.impl;
import com.yoho.error.exception.ServiceException;
import com.yoho.tools.common.beans.ApiResponse;
import com.yohobuy.ufo.model.enums.StoredSellerStatusEnum;
import com.yohoufo.common.caller.UfoServiceCaller;
import com.yohoufo.dal.order.IStoredSellerDao;
import com.yohoufo.dal.order.model.StoredSeller;
import com.yohoufo.dal.user.model.ZhiMaCert;
import com.yohoufo.order.service.IStoredSellerService;
import com.yohoufo.order.service.cache.StoredSellerCacheService;
import com.yohoufo.order.service.proxy.InBoxFacade;
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;
@Service
public class StoreSellerServiceImpl implements IStoredSellerService {
private final Logger logger = LoggerFactory.getLogger(StoreSellerServiceImpl.class);
@Autowired
private IStoredSellerDao storedSellerDao;
@Autowired
private InBoxFacade inBoxFacade;
@Autowired
UfoServiceCaller ufoServiceCaller;
@Autowired
StoredSellerCacheService storedSellerCacheService;
/**
* 是否入驻商户
* @param uid
* @return
*/
@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;
}
@Override
public StoredSeller getValidStoredSeller(Integer uid){
//从缓存中获取
logger.info("StoredSellerServiceImpl getValidStoredSeller uid is {} ",uid);
StoredSeller storedSeller = storedSellerCacheService.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
storedSellerCacheService.setStoredSeller( storedSeller);
}
return storedSeller;
}
@Override
public void addUserAsStoredSeller(Integer uid){
logger.info("StoredSellerServiceImpl addUserAsStoredSeller enter uid is {} ",uid);
//检查是否已经实名认证
ZhiMaCert zhiMaCert = getZhiMaCertInfo(uid);
if(null == zhiMaCert){
logger.error("StoredSellerServiceImpl get zhi ma cert info is null , uid is {} ",uid);
throw new ServiceException(400,"商户没有实名认证通过,不允许入驻");
}
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
storedSellerCacheService.setStoredSeller( storedSeller);
//发送消息
inBoxFacade.sendMsg4EntySeller(uid);
}
private ZhiMaCert getZhiMaCertInfo(int targetUid) {
ApiResponse<ZhiMaCert> resp = ufoServiceCaller.call("ufo.user.zhiMaCertInfo", ApiResponse.class, targetUid);
if (resp != null&&resp.getCode()==200) {
if (resp.getData() != null) {
return (ZhiMaCert)resp.getData();
}
}
return null;
}
}
... ...
... ... @@ -12,12 +12,16 @@ import com.yohobuy.ufo.model.user.resp.AuthorizeResultRespVO;
import com.yohoufo.common.caller.UfoServiceCaller;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.dal.order.EntrySellerRechargeOrderMapper;
import com.yohoufo.dal.order.IStoredSellerDao;
import com.yohoufo.dal.order.model.EntrySellerRechargeOrder;
import com.yohoufo.dal.order.model.StoredSeller;
import com.yohoufo.order.common.Payment;
import com.yohoufo.order.model.request.ShoppingRequest;
import com.yohoufo.order.model.response.OrderSubmitResponse;
import com.yohoufo.order.service.IStoredSellerService;
import com.yohoufo.order.service.IStoredSellerDepositService;
import com.yohoufo.order.service.MerchantOrderPaymentService;
import com.yohoufo.order.service.proxy.InBoxFacade;
import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
... ... @@ -27,6 +31,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@Service
public class StoredSellerDepositServiceImpl implements IStoredSellerDepositService {
... ... @@ -52,6 +58,15 @@ public class StoredSellerDepositServiceImpl implements IStoredSellerDepositServi
@Autowired
MerchantOrderPaymentService merchantOrderPaymentService;
@Autowired
private IStoredSellerDao storedSellerDao;
@Autowired
private InBoxFacade inBoxFacade;
@Autowired
private IStoredSellerService storedSellerService;
/**
* 充值保证金
*/
... ... @@ -69,7 +84,7 @@ public class StoredSellerDepositServiceImpl implements IStoredSellerDepositServi
}
//是否是入驻商户
if(!isEntrySeller(uid)){
if(!storedSellerService.isStoredSeller(uid)){
throw new UfoServiceException(400, "不是入驻商户,无法充值!");
}
... ... @@ -160,7 +175,7 @@ public class StoredSellerDepositServiceImpl implements IStoredSellerDepositServi
public void quitStoredSellerAndReturnDeposit(Integer uid){
logger.info("StoredSellerServiceImpl quitStoredSeller enter uid is {} ",uid);
if(!isEntrySeller(uid)){
if(!storedSellerService.isStoredSeller(uid)){
logger.error("StoredSellerServiceImpl quitStoredSeller store seller isEntrySeller false,uid is {} ",uid);
throw new UfoServiceException(400,"商户入驻状态为非入驻,不允许退驻!");
}
... ... @@ -188,11 +203,9 @@ public class StoredSellerDepositServiceImpl implements IStoredSellerDepositServi
}
ApiResponse<Integer> resp = ufoServiceCaller.call("ufo.user.updateStoredSellerQuitStatus", ApiResponse.class, uid);
int updateSellerToQuitRow = this.updateStoredSellerQuitStatus(uid);
logger.info("StoredSellerServiceImpl quitStoredSeller call updateStoredSellerQuitStatus ,uid is {} ,resp is {} ",uid,resp);
if(resp!=null&&resp.getCode()==200&&resp.getData()!=null&&(Integer)resp.getData()>0){
if(updateSellerToQuitRow > 0){
//创建一个退款订单
long orderCode = orderCodeGenerator.generate(OrderCodeType.SELLER_RECHARGE_EARNEST_TYPE);
BigDecimal amount=BigDecimal.ZERO;
... ... @@ -269,21 +282,6 @@ public class StoredSellerDepositServiceImpl implements IStoredSellerDepositServi
}
}
/**
* 是否入驻商户
* @param targetUid
* @return
*/
private boolean isEntrySeller(int targetUid) {
ApiResponse<Boolean> resp = ufoServiceCaller.call("ufo.user.isStoredSeller", ApiResponse.class, targetUid);
if (resp != null) {
Boolean data = (Boolean) resp.getData();
if (data != null) {
return data;
}
}
return false;
}
/**
* 是否芝麻认证通过
... ... @@ -292,12 +290,48 @@ public class StoredSellerDepositServiceImpl implements IStoredSellerDepositServi
*/
private boolean isZhiMaCertPass(int targetUid) {
ApiResponse<Boolean> resp = ufoServiceCaller.call("ufo.user.isRealNameCert", ApiResponse.class, targetUid);
if (resp != null) {
Boolean data = (Boolean) resp.getData();
if (data != null) {
return data;
if (resp != null &&resp.getCode()==200) {
if (resp.getData() != null) {
return (Boolean) resp.getData();
}
}
return false;
}
private Integer updateStoredSellerQuitStatus(Integer uid){
logger.info("StoredSellerServiceImpl updateStoredSellerQuitStatus uid is {} ",uid);
StoredSeller storedSeller = storedSellerService.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);
//TODO 状态变化,清掉缓存
//cacheService.removeStoredSeller(uid);
logger.info("StoredSellerServiceImpl updateStoredSellerQuitStatus end ,uid is {} ,update num {}",uid,num);
if(num >0){
inBoxFacade.sendMsg4QuitEntrySeller(uid);
}
return num;
}
}
... ...
... ... @@ -495,6 +495,62 @@ public class InBoxFacade {
* 其他---短信
********************************************************************/
public void sendMsg4EntySeller(Integer uid){
logger.info("InBoxFacade sendMsg4EntySeller inbox msg, uid {}",uid);
try {
executorService.execute(() -> {
// 发送消息
InboxBusinessTypeEnum ibt = InboxBusinessTypeEnum.SYSTEM_ENTER_SETTLED;
String params = buildParams(null);
InboxReqVO inBoxReq = buildInboxReqVO(uid, params, ibt);
InBoxResponse resp = inBoxSDK.addInbox(inBoxReq);
logger.info("InBoxFacade sendMsg4enty inbox msg, uid {}, resp {}",
uid, resp);
});
} catch (Exception e) {
logger.error("InBoxFacade sendMsg4EntySeller error inbox msg, sellerUid {}, prdName {} ,error {}",
uid, e);
}
}
public void sendMsg4QuitEntrySeller(Integer uid){
logger.info("InBoxFacade sendMsg4QuitEntrySeller inbox msg, uid {}",uid);
try {
executorService.execute(() -> {
// 发送消息
InboxBusinessTypeEnum ibt = InboxBusinessTypeEnum.SYSTEM_EXIT_SETTLED;
String params = buildParams(null);
InboxReqVO inBoxReq = buildInboxReqVO(uid, params, ibt);
InBoxResponse resp = inBoxSDK.addInbox(inBoxReq);
logger.info("InBoxFacade sendMsg4quit inbox msg, uid {}, resp {}",
uid, resp);
// 发送短信
String content=InboxBusinessTypeEnum.SMS_EXIT_SETTLED.getContent();
String phone=userProxyService.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);
sendSmsService.smsSendByMobile(content,mobileList);
logger.info("sendMsg4quit inbox sms send end, uid {}, phone {}",
uid, phone);
});
} catch (Exception e) {
logger.error("InBoxFacade sendMsg4QuitEntrySeller error inbox msg, sellerUid {}, prdName {} ,error {}",
uid, e);
}
}
/**
* 鉴定中心把 买家取消(卖家已发货给中心)的物品,顺丰到付寄给卖家
*/
... ...
... ... @@ -8,9 +8,9 @@ import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yoho.service.model.request.UserAddressReqBO;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.common.caller.UfoServiceCaller;
import com.yohoufo.order.convert.AddressInfoConvertor;
import com.yohoufo.order.model.AddressInfo;
import com.yohoufo.order.service.IStoredSellerService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -41,7 +41,7 @@ public class UserProxyService {
private String uicUrl;
@Autowired
private UfoServiceCaller ufoServiceCaller;
private IStoredSellerService storeSellerService;
/**
* 获取用户信息
* @param uid
... ... @@ -138,17 +138,12 @@ public class UserProxyService {
return mobile;
}
/**
* 入驻商户
* @param uid
* @return
*/
public boolean isEntryShop(int uid){
//入驻商户 method=ufo.user.isStoredSeller ,入参 uid
com.yoho.tools.common.beans.ApiResponse userInfo ;
try {
userInfo = ufoServiceCaller.call("ufo.user.isStoredSeller", uid);
}catch (Exception ex){
logger.warn("in getMobile fail, uid {}", uid, ex);
throw new ServiceException(ServiceError.USER_IS_NOT_EXIST);
}
logger.info("judge user is entry shop, uid {} resp {}", uid, userInfo);
return (userInfo == null || userInfo.getData() == null) ? false : (boolean) userInfo.getData();
return storeSellerService.isStoredSeller(uid);
}
}
... ...
... ... @@ -5,7 +5,6 @@ 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.dal.user.model.StoredSeller;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.dal.user.model.UserFavorite;
import com.yohoufo.dal.user.model.ZhiMaCert;
... ... @@ -53,9 +52,6 @@ public class CacheService {
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.ZHI_MA_CERT_KEY.getCacheKey()).appendVar(uid);
}
public static RedisKeyBuilder getStoredSellerRedisKeyBuilder(Integer uid){
return RedisKeyBuilder.newInstance().appendFixed(CacheKeyEnum.STORED_SELLER_KEY.getCacheKey()).appendVar(uid);
}
/**************************************************************************
* 商品收藏相关
*************************************************************************/
... ... @@ -203,20 +199,6 @@ public class CacheService {
set(getZhiMaCertRedisKeyBuilder(zhiMaCert.getUid()),zhiMaCert,CacheKeyEnum.ZHI_MA_CERT_KEY.getDefaultExpireTime(),CacheKeyEnum.ZHI_MA_CERT_KEY.getTimeUnit());
}
/**************************************************************************
* 商家入驻相关
*************************************************************************/
public StoredSeller getStoredSeller(Integer uid){
return get(getStoredSellerRedisKeyBuilder(uid),StoredSeller.class);
}
public void setStoredSeller(StoredSeller storedSeller){
set(getStoredSellerRedisKeyBuilder(storedSeller.getUid()),storedSeller,CacheKeyEnum.STORED_SELLER_KEY.getDefaultExpireTime(),CacheKeyEnum.STORED_SELLER_KEY.getTimeUnit());
}
public void removeStoredSeller(Integer uid) {
yhRedisTemplate.delete(getStoredSellerRedisKeyBuilder(uid));
}
/**************************************************************************
... ...
... ... @@ -8,7 +8,6 @@ import com.yohoufo.common.annotation.IgnoreSession;
import com.yohoufo.common.annotation.IgnoreSignature;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.user.service.IRealNameAuthorizeService;
import com.yohoufo.user.service.IStoredSellerService;
import com.yohoufo.user.service.risk.GraphVerifyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -33,9 +32,6 @@ public class RealNameAuthorize4PlatformController {
@Autowired
GraphVerifyService graphVerifyService;
@Autowired
private IStoredSellerService storedSellerService;
/**
* 查询支付宝信息
* 提供给运营平台使用
... ...
... ... @@ -5,13 +5,11 @@ import com.yoho.tools.common.beans.ApiResponse;
import com.yohobuy.ufo.model.user.resp.AuthorizeResultRespVO;
import com.yohoufo.common.exception.GatewayException;
import com.yohoufo.common.utils.UserInfoHiddenHelper;
import com.yohoufo.dal.user.model.UserAuthorizeInfo;
import com.yohoufo.dal.user.model.ZhiMaCert;
import com.yohoufo.user.common.IDCardUtils;
import com.yohoufo.user.helper.HideDataUtil;
import com.yohoufo.user.requestVO.RealNameAuthorizeReqVO;
import com.yohoufo.user.service.IRealNameAuthorizeService;
import com.yohoufo.user.service.risk.GraphVerifyService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -105,6 +103,19 @@ public class RealNameAuthorizeController {
return new ApiResponse(isZhiMaCert);
}
@RequestMapping(params = "method=ufo.user.zhiMaCertInfo")
public ApiResponse zhiMaCertInfo(@RequestParam("uid") Integer uid) throws GatewayException {
logger.info("enter realNameAuthorize.zhiMaCertInfo param uid is {}", uid);
//(1) 优先校验请求的参数
if (uid == null || uid <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
ZhiMaCert zhiMaCertInfo =realNameAuthorizeService.getValidZhiMaCert(uid);
return new ApiResponse(zhiMaCertInfo);
}
/**
* 芝麻认证(初始化并购置返回url)
*/
... ...
package com.yohoufo.user.controller.passport;
import com.yoho.tools.common.beans.ApiResponse;
import com.yohoufo.common.exception.GatewayException;
import com.yohoufo.user.service.IStoredSellerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 入驻商户接口
* Created by craig.qin on 2018/9/11.
*/
@RestController
public class StoredSellerController {
private Logger logger = LoggerFactory.getLogger(StoredSellerController.class);
@Autowired
private IStoredSellerService storedSellerService;
/**
* 是否入驻商户
*/
@RequestMapping(params = "method=ufo.user.isStoredSeller")
public ApiResponse isStoredSeller(@RequestParam("uid") Integer uid) throws GatewayException {
logger.info("enter StoredSellerController isStoredSeller param uid is {}", uid);
//(1) 优先校验请求的参数
if (uid == null || uid <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
boolean isStoredSeller=storedSellerService.isStoredSeller(uid);
return new ApiResponse(isStoredSeller);
}
/**
* 更新商户为入驻商户
*/
@RequestMapping(params = "method=ufo.user.addUserAsStoredSeller")
public ApiResponse addUserAsStoredSeller(@RequestParam("uid") Integer uid) throws GatewayException {
logger.info("enter StoredSellerController addUserAsStoredSeller param uid is {}", uid);
//(1) 优先校验请求的参数
if (uid == null || uid <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
storedSellerService.addUserAsStoredSeller(uid);
return new ApiResponse();
}
/**
* 申请退驻
*/
/*@RequestMapping(params = "method=ufo.user.applyQuitStoredSeller")
public ApiResponse applyQuitStoredSeller(RealNameAuthorizeReqVO reqVO) throws GatewayException {
logger.info("enter StoredSellerController applyQuitStoredSeller param reqVO is {}", reqVO);
//(1) 优先校验请求的参数
if (reqVO == null || reqVO.getUid() <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
storedSellerService.applyQuitStoredSeller(reqVO.getUid());
return new ApiResponse();
}*/
/**
* 更新商户状态为"退驻"
*/
@RequestMapping(params = "method=ufo.user.updateStoredSellerQuitStatus")
public ApiResponse updateStoredSellerQuitStatus(@RequestParam("uid") Integer uid) throws GatewayException {
logger.info("enter StoredSellerController updateStoredSellerQuitStatus param uid is {}", uid);
//(1) 优先校验请求的参数
if (uid == null || uid <=0 ){
throw new GatewayException(400, "参数错误,uid不存在!");
}
Integer updateNum=storedSellerService.updateStoredSellerQuitStatus(uid);
return new ApiResponse(updateNum);
}
}
package com.yohoufo.user.service;
public interface IStoredSellerService {
boolean isStoredSeller(Integer uid);
void addUserAsStoredSeller(Integer uid);
//void applyQuitStoredSeller(Integer uid);
Integer updateStoredSellerQuitStatus(Integer uid);
}
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();
}
}
... ... @@ -9,7 +9,6 @@ datasources:
- com.yohoufo.dal.user.IUserAuthorizeHistoryDao
- com.yohoufo.dal.user.IUserAuthorizeInfoDao
- com.yohoufo.dal.user.IZhiMaCertDao
- com.yohoufo.dal.user.IStoredSellerDao
ufo_product:
servers:
... ... @@ -57,6 +56,7 @@ datasources:
- com.yohoufo.dal.order.SellerWalletDetailMapper
- com.yohoufo.dal.order.OrderCouponMapper
- com.yohoufo.dal.order.EntrySellerRechargeOrderMapper
- com.yohoufo.dal.user.IStoredSellerDao
ufo_promotion:
... ...
... ... @@ -9,7 +9,6 @@ datasources:
- com.yohoufo.dal.user.IUserAuthorizeHistoryDao
- com.yohoufo.dal.user.IUserAuthorizeInfoDao
- com.yohoufo.dal.user.IZhiMaCertDao
- com.yohoufo.dal.user.IStoredSellerDao
ufo_product:
servers:
... ... @@ -57,6 +56,7 @@ datasources:
- com.yohoufo.dal.order.SellerWalletDetailMapper
- com.yohoufo.dal.order.OrderCouponMapper
- com.yohoufo.dal.order.EntrySellerRechargeOrderMapper
- com.yohoufo.dal.user.IStoredSellerDao
ufo_promotion:
... ...