Authored by mali

鉴定中心地址

package com.yohoufo.dal.order;
import com.yohoufo.dal.order.model.AppraiseAddress;
import java.util.List;
/**
* Created by li.ma on 2018/9/28.
*/
public interface AppraiseAddressMapper {
List<AppraiseAddress> selectAll();
}
... ...
... ... @@ -4,6 +4,8 @@ import com.yohoufo.dal.order.model.BuyerOrderMeta;
import com.yohoufo.dal.order.model.SellerOrderMeta;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SellerOrderMetaMapper {
int deleteByPrimaryKey(Integer id);
... ... @@ -18,4 +20,6 @@ public interface SellerOrderMetaMapper {
int updateByPrimaryKey(SellerOrderMeta record);
SellerOrderMeta selectByMetaKey(@Param("uid") int uid, @Param("skup") int skup, @Param("metaKey") String metaKey);
List<SellerOrderMeta> selectBySkup(@Param("skup")Integer skup);
}
\ No newline at end of file
... ...
package com.yohoufo.dal.order.model;
import com.alibaba.fastjson.JSONObject;
/**
* Created by li.ma on 2018/9/28.
* 鉴定中心地址
*/
public class AppraiseAddress {
private Integer id;
// 地址信息的四级编码
private Integer areaCode;
// 0 北京鉴定中心 1 南京鉴定中心
private Integer type;
// 鉴定中心名称
private String addressName;
// 鉴定中心电话
private String mobile;
// 鉴定中心地址
private String address;
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAreaCode() {
return areaCode;
}
public void setAreaCode(Integer areaCode) {
this.areaCode = areaCode;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}
... ...
<?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.order.AppraiseAddressMapper">
<resultMap id="BaseResultMap" type="com.yohoufo.dal.order.model.AppraiseAddress">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="type" jdbcType="INTEGER" property="type" />
<result column="area_code" jdbcType="INTEGER" property="areaCode" />
<result column="address_name" jdbcType="VARCHAR" property="addressName" />
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
<result column="address" jdbcType="VARCHAR" property="address" />
</resultMap>
<sql id="Base_Column_List">
id, type, area_code, address_name, mobile, address
</sql>
<select id="selectAll" resultMap="BaseResultMap">
select <include refid="Base_Column_List" /> from appraise_address
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -98,5 +98,10 @@
where id = #{id,jdbcType=INTEGER}
</update>
<select id="selectBySkup" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from seller_order_meta
where skup = #{skup,jdbcType=BIGINT}
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -4,6 +4,8 @@ import com.yohobuy.ufo.model.order.resp.ExpressInfoRespBo;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.order.model.response.AppraiseAddressResp;
import com.yohoufo.order.service.IExpressInfoService;
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;
... ... @@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
public class ExpressInfoController {
private final Logger LOG = LoggerFactory.getLogger(ExpressInfoController.class);
@Autowired
private IExpressInfoService expressInfoService;
... ... @@ -52,8 +55,10 @@ public class ExpressInfoController {
* @return
*/
@RequestMapping(params = "method=ufo.order.appraiseAddress")
public ApiResponse queryAppraiseAddress(@RequestParam("uid") Integer uid) {
AppraiseAddressResp appraiseAddressResp = expressInfoService.queryAppraiseAddress(uid);
public ApiResponse queryAppraiseAddress(@RequestParam("uid") Integer uid, @RequestParam("skup")Integer skup) {
LOG.info("method=ufo.order.appraiseAddress in, uid is {}, skup is {}", uid, skup);
AppraiseAddressResp appraiseAddressResp = expressInfoService.queryAppraiseAddress(uid, skup);
return new ApiResponse.ApiResponseBuilder().code(200).data(appraiseAddressResp).build();
}
}
... ...
... ... @@ -15,6 +15,16 @@ public class AppraiseAddressResp {
@JSONField(name="address")
private String address;
private Integer areaCode;
public Integer getAreaCode() {
return areaCode;
}
public void setAreaCode(Integer areaCode) {
this.areaCode = areaCode;
}
public AppraiseAddressResp() {
}
... ... @@ -47,4 +57,61 @@ public class AppraiseAddressResp {
public void setAddress(String address) {
this.address = address;
}
public static class builder {
private String addressName;
private String mobile;
private String address;
private Integer areaCode;
public String getAddressName() {
return addressName;
}
public builder setAddressName(String addressName) {
this.addressName = addressName;
return this;
}
public Integer getAreaCode() {
return areaCode;
}
public builder setAreaCode(Integer areaCode) {
this.areaCode = areaCode;
return this;
}
public String getMobile() {
return mobile;
}
public builder setMobile(String mobile) {
this.mobile = mobile;
return this;
}
public String getAddress() {
return address;
}
public builder setAddress(String address) {
this.address = address;
return this;
}
public AppraiseAddressResp build() {
AppraiseAddressResp resp = new AppraiseAddressResp();
resp.setAddress(this.getAddress());
resp.setAddressName(this.getAddressName());
resp.setMobile(this.getMobile());
resp.setAreaCode(this.getAreaCode());
return resp;
}
}
}
... ...
... ... @@ -51,7 +51,7 @@ public interface IExpressInfoService {
* @param uid
* @return
*/
AppraiseAddressResp queryAppraiseAddress(Integer uid);
AppraiseAddressResp queryAppraiseAddress(Integer uid, Integer skup);
/**
... ...
package com.yohoufo.order.service.impl;
import com.google.common.collect.Lists;
import com.yoho.core.cache.LocalCache;
import com.yoho.core.cache.LocalCacheCallback;
import com.yoho.core.common.helpers.ImagesHelper;
import com.yohoufo.dal.order.AppraiseAddressMapper;
import com.yohoufo.dal.order.model.AppraiseAddress;
import com.yohoufo.order.model.response.AppraiseAddressResp;
import org.apache.commons.collections.CollectionUtils;
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 javax.annotation.PostConstruct;
import java.security.SecureRandom;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* Created by li.ma on 2018/9/28.
* 鉴定中心匹配查询接口
*/
@Service
public class AppraiseAddressService {
private static final Logger LOG = LoggerFactory.getLogger(AppraiseAddressService.class);
private final static String CACHE_KEY="appraiseAddress_cache";
@Autowired
private AppraiseAddressMapper appraiseAddressMapper;
private LocalCache localCache = new LocalCache();
// 防止缓存在同一时刻全部失效
private final static SecureRandom RANDOM = new SecureRandom();
// 根据四级地址code查询匹配的鉴定中心地址
public AppraiseAddressResp queryAddressByAreaCode(String areaCode) {
if (StringUtils.isEmpty(areaCode) || areaCode.length() < 2) {
return queryInitAddress();
}
String provinceCode = areaCode.substring(0, 2);
List<AppraiseAddressResp> appraiseAddressResps = queryAddressInfoList();
AppraiseAddressResp result = null;
for (AppraiseAddressResp resp : appraiseAddressResps) {
if (provinceCode.equals(String.valueOf(resp.getAreaCode()))) {
return resp;
}
}
return queryInitAddress();
}
// 根据默认鉴定中心地址
public AppraiseAddressResp queryInitAddress() {
List<AppraiseAddressResp> appraiseAddressResps = queryAddressInfoList();
if (CollectionUtils.isEmpty(appraiseAddressResps)) {
return new AppraiseAddressResp.builder().setMobile("15010019250").setAddressName("YOHO!北京鉴定中心").setAddress("北京市朝阳区建国路81号华贸中心1号写字楼3层").build();
}
return appraiseAddressResps.get(0);
}
public List<AppraiseAddressResp> queryAddressInfoList() {
Object value=localCache.get(CACHE_KEY);
if(null == value) {
return Lists.newArrayList();
}
return (List<AppraiseAddressResp>)value;
}
@PostConstruct
private void init() {
localCache.init("AddressInfoCache", 300000 + RANDOM.nextInt(100), TimeUnit.SECONDS, new LocalCacheCallback() {
@Override
public Object load(String key, Object oldvalue) {
List<AppraiseAddressResp> appraiseAddressResps = Lists.newArrayList();
try {
List<AppraiseAddress> appraiseAddresses = appraiseAddressMapper.selectAll();
if (CollectionUtils.isEmpty(appraiseAddresses)) {
LOG.warn("No data in database table (ufo_order.appraise_address).");
return Lists.newArrayList();
}
appraiseAddresses.stream().forEach(item ->
appraiseAddressResps.add(new AppraiseAddressResp.builder().setMobile(item.getMobile())
.setAreaCode(item.getAreaCode()).setAddressName(item.getAddressName()).setAddress(item.getAddress()).build())
);
} catch (Exception e) {
LOG.warn("appraiseAddressMapper failed!!!!!!!!!!", e);
}
return appraiseAddressResps;
}
});
}
}
... ...
package com.yohoufo.order.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yoho.core.rabbitmq.YhProducer;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
... ... @@ -12,13 +13,17 @@ import com.yohoufo.common.utils.DateUtil;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.ExpressInfoMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.SellerOrderMetaMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.ExpressInfo;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.dal.order.model.SellerOrderMeta;
import com.yohoufo.order.common.ExpressForMqSend;
import com.yohoufo.order.common.OrderCodeType;
import com.yohoufo.order.common.OrderStatus;
import com.yohoufo.order.common.SellerOrderStatus;
import com.yohoufo.order.constants.MetaKey;
import com.yohoufo.order.model.AddressInfo;
import com.yohoufo.order.model.response.AppraiseAddressResp;
import com.yohoufo.order.service.IExpressCompanyService;
import com.yohoufo.order.service.IExpressInfoService;
... ... @@ -55,11 +60,17 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
@Autowired
private SellerOrderMetaMapper sellerOrderMetaMapper;
@Autowired
private BuyerOrderMapper buyerOrderMapper;
@Resource( name = "yhProducer")
private YhProducer yhProducer;
@Autowired
private AppraiseAddressService appraiseAddressService;
private static String EXPRESS_MQ_SEND = "logistics.logistics_data";
/**
... ... @@ -274,16 +285,21 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
/**
* 根据用户默认地址的省份定位到鉴定中心的地址返回
*
*
* @param uid
* @return
*/
public AppraiseAddressResp queryAppraiseAddress(Integer uid) {
// TODO 根据用户id查询默认地址的省份
// TODO 根据产品给的哪些用户的省份匹配到对应的鉴定中心地址
// TODO 匹配不了,给个娄底的
return new AppraiseAddressResp("南京新与力文化传播有限公司", "18914495959", "江苏省 南京市 建邺区 嘉陵江东街国家广告园5栋楼17层");
public AppraiseAddressResp queryAppraiseAddress(Integer uid, Integer skup) {
// 根据用户id查询默认地址的省份
SellerOrderMeta addressMeta = sellerOrderMetaMapper.selectByMetaKey(uid, skup, MetaKey.BACK_2_SELLER_DELIVERY_ADDRESS);
if (null != addressMeta) {
LOGGER.info("addressMeta is not null uid is {}, skup is {}", uid, skup);
AddressInfo addressInfo = JSONObject.parseObject(addressMeta.getMetaValue(), AddressInfo.class);
// 根据产品给的哪些用户的省份匹配到对应的鉴定中心地址
return null == addressInfo ? appraiseAddressService.queryInitAddress() : appraiseAddressService.queryAddressByAreaCode(addressInfo.getAreaCode());
}
// 匹配不了,给个娄底的
return appraiseAddressService.queryInitAddress();
}
}
... ...
... ... @@ -51,6 +51,7 @@ datasources:
- com.yohoufo.dal.order.OrdersPayMapper
- com.yohoufo.dal.order.OrdersPayRefundMapper
- com.yohoufo.dal.order.ExpressCompanyMapper
- com.yohoufo.dal.order.AppraiseAddressMapper
yh_passport:
servers:
... ...
... ... @@ -62,7 +62,8 @@ datasources:
- com.yohoufo.dal.order.SellerOrderMetaMapper
- com.yohoufo.dal.order.OrdersPayMapper
- com.yohoufo.dal.order.OrdersPayRefundMapper
- com.yohoufo.dal.order.AppraiseAddressMapper
ufo_resource:
servers:
- 192.168.102.219:3306
... ...