Authored by mali

Merge branch 'hotfix_areacode' into test6.9.3

... ... @@ -305,7 +305,7 @@ public class CouponServiceImpl implements ICouponService,IBusinessExportService{
JSONObject sendCouponParam = new JSONObject();
sendCouponParam.put("uid", uid);
sendCouponParam.put("couponTokens", Collections.singletonList(coupon.getCouponToken()));
sendCouponParam.put("sendType", "1");//sendType 为1时, 若这张券已经领过,则仍然可以领
sendCouponParam.put("sendType", "2");//sendType 为1时, 若这张券已经领过,则仍然可以领
yhProducer.send("ufo.couponSendWithTradeMqNotify", sendCouponParam, null);
LOGGER.info("sendCoupon by mq, token is {}, uid is {}, operateUserId is {}, operateUserName is {}", couponToken, uid, operator.getUserId(), operator.getUserName());
Thread.sleep(5);
... ...
... ... @@ -13,7 +13,5 @@ public interface BuyerOrderMetaMapper {
BuyerOrderMeta selectByOrderCodeAndKey(@Param("orderCode") String orderCode, @Param("metaKey") String metaKey);
int updateMetaValue(@Param("orderCode") String orderCode, @Param("metaKey") String metaKey, @Param("metaValue") String metaValue);
List<BuyerOrderMeta> selectByBatchOrderCodeAndKey(@Param("list") List<String> orderCodeList, @Param("metaKey") String metaKey);
}
... ...
... ... @@ -115,6 +115,8 @@ public class BuyerOrderReq extends PageRequestBO{
private Integer attributes; //订单类型 1-普通现货订单,2-线下店订单,3-急速发货订单,4-普通预售
private String area; // 四级地址
private Integer sellerDeliveryStatus ;
private Integer currentSecondMinus24Hours;
... ...
... ... @@ -15,19 +15,16 @@
<select id="selectByOrderCodeAndKey" resultMap="BaseResultMap">
select <include refid="Base_Column_List" />
from buyer_order_meta where order_code=#{orderCode} and meta_key=#{metaKey}
from buyer_order_meta where order_code=#{orderCode,jdbcType=BIGINT} and meta_key=#{metaKey}
</select>
<update id="updateMetaValue">
update buyer_order_meta set meta_value=#{metaValue}
where order_code=#{orderCode} and meta_key=#{metaKey}
</update>
<select id="selectByBatchOrderCodeAndKey" resultMap="BaseResultMap">
select <include refid="Base_Column_List" />
from buyer_order_meta where meta_key=#{metaKey} and order_code in
<foreach collection="list" item="orderCode" open="(" separator="," close=")">
#{orderCode}
#{orderCode,jdbcType=BIGINT}
</foreach>
</select>
... ...
... ... @@ -56,4 +56,16 @@ public class StoredSellerController {
String result = billsTradeService.getMobileByUidFromCache(req.getUid());
return new ApiResponse.ApiResponseBuilder().code(200).message("查询成功").data(result).build();
}
/**
* 根据手机号查询uid
* @param req
* @return
*/
@RequestMapping(value = "/getUidByMobile")
public ApiResponse getUidByMobile(StoredSellerReqVo req) {
LOGGER.info("getUidByMobile in. req is {}", req);
Integer result = billsTradeService.getUidByMobile(req.getMobile());
return new ApiResponse.ApiResponseBuilder().code(200).message("查询成功").data(result).build();
}
}
... ...
... ... @@ -33,4 +33,11 @@ public interface ITradeBillsService {
* @return
*/
String getMobileByUidFromCache(Integer uid);
/**
* 根据手机号查询uid
* @param mobile
* @return
*/
Integer getUidByMobile(String mobile);
}
... ...
package com.yoho.ufo.order.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import com.yoho.core.config.ConfigReader;
import com.yoho.core.rest.client.ServiceCaller;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yoho.order.dal.AreaMapper;
import com.yoho.order.model.Area;
import com.yoho.service.model.request.UserAddressReqBO;
import com.yohobuy.ufo.model.common.ApiResponse;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.common.collect.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* Created by li.ma on 2019/4/26.
* 地址code 服务接口
*/
@Service
public class AreaService {
private static final Logger LOGGER = LoggerFactory.getLogger(AreaService.class);
@Value("${erp-gateway.url}")
private String erpGatewayUrl;
private static final String GETPROVINCES = "/erp/passport/getProvinces"; //根据地址父id查询子集合
private static final String GETAREABYCODE = "/erp/passport/getAreaByCode"; //根据地址父id查询caption
@Autowired
private ServiceCaller serviceCaller;
@Autowired
private AreaMapper areaMapper;
@Autowired
private ConfigReader configReader;
private boolean areaByErp() {
return configReader.getBoolean("ufo.platform.queryAreaCode", false);
}
public Map<Integer, String> selectByCodeList(Integer uid, List<Integer> codeList) {
if (areaByErp()) {
LOGGER.info("method selectByCodeList in get by code from erp interface");
return getAddressInfoByErp(codeList.get(3), codeList);
}
LOGGER.info("method selectByCodeList in codeList is {}", codeList);
List<Area> areaList = areaMapper.selectByCodeList(codeList);
Map<Integer, String> areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, Area::getCaption));
LOGGER.info("method selectByCodeList out areaList is {}", areaList);
return areaMap;
}
private Map<Integer, String> getAddressInfoByErp(Integer fourAreaCode, List<Integer> codeList) {
LOGGER.info("method getAddressInfoByErp in codeList is {}", codeList);
Map<String,Object> params = Maps.newHashMap();
params.put("id", fourAreaCode);
params.put("debug", "XYZ");
AddressInfo addressInfo ;
ApiResponse userAddressBO ;
try {
userAddressBO = serviceCaller.get("users.getAreaByCode", erpGatewayUrl + GETAREABYCODE, params, ApiResponse.class, null).get(500, TimeUnit.MILLISECONDS);
}catch (Exception ex){
LOGGER.warn("in getAreaByCode fail, fourAreaCode {}", fourAreaCode, ex);
throw new ServiceException(ServiceError.ADDRESS_NULL);
}
JSONObject addressData ;
if (userAddressBO == null || (addressData = (JSONObject)userAddressBO.getData()) == null){
LOGGER.warn("in getAreaByCode fail, fourAreaCode {}", fourAreaCode);
throw new ServiceException(ServiceError.ADDRESS_NULL);
}
Map<Integer, String> result = new HashMap<>();
parseResp(addressData, result);
completeFourAreaCode(fourAreaCode, result);
LOGGER.info("method getAddressInfoByErp out result is {}", result);
return result;
}
// 对于“其他”这个 特殊的四级地址,uic接口是不返回,需要自己补充一下
private void completeFourAreaCode(Integer fourAreaCode, Map<Integer, String> result) {
if (!result.containsKey(fourAreaCode) && fourAreaCode % 1000 == 0) {
result.put(fourAreaCode, "其他");
}
}
private void parseResp(JSONObject jsonObject, Map<Integer, String> result) {
if (null == jsonObject) {
return;
}
result.put(jsonObject.getInteger("id"), jsonObject.getString("caption"));
parseResp(jsonObject.getJSONObject("parent"), result);
}
public Map<Integer, String> selectByParentCode(String parentCode) {
if (areaByErp()) {
LOGGER.info("method selectByParentCode in get by code from erp interface");
return selectByErp(parentCode);
}
List<Area> areaList = areaMapper.selectByParentCode(parentCode);
return areaList.stream().collect(Collectors.toMap(Area::getId, Area::getCaption));
}
private Map<Integer, String> selectByErp(String parentCode) {
Map<String,Object> params = Maps.newHashMap();
params.put("id", parentCode);
params.put("debug", "XYZ");
AddressInfo addressInfo ;
ApiResponse userAddressBO ;
try {
userAddressBO = serviceCaller.get("users.getProvinces", erpGatewayUrl + GETPROVINCES, params, ApiResponse.class, null).get(500, TimeUnit.MILLISECONDS);
}catch (Exception ex){
LOGGER.warn("in getProvinces fail, parentCode {}", parentCode, ex);
throw new ServiceException(ServiceError.ADDRESS_NULL);
}
JSONArray addressArray ;
if (userAddressBO == null || (addressArray = (JSONArray)userAddressBO.getData()) == null){
LOGGER.warn("in getProvinces fail, parentCode {}", parentCode);
throw new ServiceException(ServiceError.ADDRESS_NULL);
}
Map<Integer, String> result = new HashMap<>();
addressArray.parallelStream().forEach(item -> {
result.put(((JSONObject)item).getInteger("id"), ((JSONObject)item).getString("caption"));
});
return result;
}
}
... ...
... ... @@ -18,6 +18,7 @@ import com.yoho.ufo.dal.IdentifyRecordsMapper;
import com.yoho.ufo.dal.ProductMapper;
import com.yoho.ufo.dal.model.IdentifyRecords;
import com.yoho.ufo.dal.model.Product;
import com.yoho.ufo.exception.CommonException;
import com.yoho.ufo.order.constant.Constant;
import com.yoho.ufo.order.constant.OrderConfigConstant;
import com.yoho.ufo.order.request.SaveQualityCheckInfoRequest;
... ... @@ -26,6 +27,7 @@ import com.yoho.ufo.service.impl.UfoServiceCaller;
import com.yoho.ufo.service.impl.UserHelper;
import com.yoho.ufo.service.model.PageResponseBO;
import com.yoho.ufo.util.*;
import com.yohobuy.ufo.model.enums.ProductSkupStatusEnum;
import com.yohobuy.ufo.model.order.bo.AppraiseExpressInfoBo;
import com.yohobuy.ufo.model.order.common.*;
import com.yohobuy.ufo.model.order.req.BuyerOrderMetaUpdateReq;
... ... @@ -96,7 +98,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
private AppraiseAddressMapper appraiseAddressMapper;
@Autowired
private AreaMapper areaMapper;
private AreaService areaService;
@Autowired
private OrderOperateRecordMapper orderOperateRecordMapper;
... ... @@ -1386,7 +1388,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
result.setPlatformWaybillTitle("发货信息");
result.setReceiveName(metaValue.getString("consignee"));
result.setReceiveMobile(metaValue.getString("mobile"));
result.setReceiveAddress(getAddressInfo(metaValue.getString("areaCode")) + metaValue.getString("address"));
result.setReceiveAddress(metaValue.getString("area") + metaValue.getString("address"));
ExpressRecord record = expressRecordMapper.selectByOrderCodeAndType(req.getOrderCode(), null, EXPRESS_TYPE_JUDGE_TO_BUYER);
if(null == record) {
return result;
... ... @@ -1469,7 +1471,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
result.setPlatformWaybillTitle("寄回信息");
result.setReceiveName(metaValue.getString("consignee"));
result.setReceiveMobile(metaValue.getString("mobile"));
result.setReceiveAddress(getAddressInfo(metaValue.getString("areaCode")) + metaValue.getString("address"));
result.setReceiveAddress(metaValue.getString("area") + metaValue.getString("address"));
if(StringUtils.isEmpty(req.getOrderCode())) {
return result;
... ... @@ -1541,7 +1543,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
resp.setReceiveAddressDetail(metaValue.getString("address"));
resp.setZipCode("null".equals(metaValue.getString("zipCode")) ? "--" : metaValue.getString("zipCode"));
String receiveAddressCode = metaValue.getString("areaCode");
resp.setReceiveAddress(getAddressInfo(receiveAddressCode));
resp.setReceiveAddress(metaValue.getString("area"));
//查询buyer_order_goods
List<BuyerOrderGoods> goodsList = buyerOrderGoodsMapper.selectByOrderCode(Lists.newArrayList(buyerOrder.getOrderCode()));
... ... @@ -1561,7 +1563,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
if(sellerMeta!=null){
JSONObject sellerMetaValue = JSONObject.parseObject(sellerMeta.getMetaValue());
resp.setSellerRebackAddressDetail(sellerMetaValue.getString("address"));
resp.setSellerRebackAddress(getAddressInfo(sellerMetaValue.getString("areaCode")));
resp.setSellerRebackAddress(sellerMetaValue.getString("area"));
resp.setSellerRebackMobile(sellerMetaValue.getString("mobile"));
resp.setSellerZipCode("null".equals(sellerMetaValue.getString("zipCode")) ? "--" : sellerMetaValue.getString("zipCode"));
}
... ... @@ -1866,7 +1868,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
|| buyerOrder.getStatus().equals(Constant.BUYER_ORDER_STATUS_MINI_FAULT_ACCEPT.getByteVal())) {//收件人为买家
BuyerOrderMeta buyerMeta = buyerOrderMetaMapper.selectByOrderCodeAndKey(buyerOrder.getOrderCode(), BUYER_ORDER_META_KEY_DELIVERY_ADDRESS);
JSONObject metaValue = JSONObject.parseObject(buyerMeta.getMetaValue());
buildAddressInfo(metaValue, jsonObj);
buildAddressInfo(metaValue, jsonObj, buyerOrder.getUid());
jsonObj.put("receiverType", "buyer");
}else if(buyerOrder.getStatus().equals(Constant.BUYER_ORDER_STATUS_JUDGE_NOT_PASS.getByteVal())
|| buyerOrder.getStatus().equals(Constant.BUYER_ORDER_STATUS_BUYER_CANCEL_AFTER_SELLER_DELIVERY.getByteVal())
... ... @@ -1876,14 +1878,16 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
|| buyerOrder.getStatus().equals(Constant.BUYER_ORDER_STATUS_APPRAISE_UNSURE.getByteVal())) {//收件人为卖家
SellerOrderMeta sellerMeta = sellerOrderMetaMapper.selectBySkupAndKey(skup, SELLER_ORDER_META_KEY_BACK_DELIVERY_ADDRESS);
JSONObject sellerMetaValue = JSONObject.parseObject(sellerMeta.getMetaValue());
buildAddressInfo(sellerMetaValue, jsonObj);
buildAddressInfo(sellerMetaValue, jsonObj, buyerOrder.getSellerUid());
jsonObj.put("receiverType", "seller");
}else {
throw new CommonException(500, "状态异常,当前状态是"+Constant.convertOrderStatusStr(buyerOrder.getStatus()));
}
return jsonObj;
}
private void buildAddressInfo(JSONObject metaValue, JSONObject jsonObj) {
private void buildAddressInfo(JSONObject metaValue, JSONObject jsonObj, Integer uid) {
// jsonObj.put("dCompany", "");
jsonObj.put("dContact", metaValue.getString("consignee"));
jsonObj.put("dTel", metaValue.getString("mobile"));
... ... @@ -1894,8 +1898,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
Integer secondId = Integer.valueOf(areaCode.substring(0, 4));
Integer thirdId = Integer.valueOf(areaCode.substring(0, 6));
Integer fourthId = Integer.valueOf(areaCode);
List<Area> areaList = areaMapper.selectByCodeList(Lists.newArrayList(firstId, secondId, thirdId, fourthId));
Map<Integer, String> areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, Area::getCaption));
Map<Integer, String> areaMap = areaService.selectByCodeList(uid, Lists.newArrayList(firstId, secondId, thirdId, fourthId));
String dProvince = areaMap.get(firstId).replace("省", "").replace("市", "");
jsonObj.put("dProvince", dProvince);
jsonObj.put("dCity", areaMap.get(secondId).replace("市", ""));
... ... @@ -1943,7 +1946,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
resp.setReceiveMobile(metaValue.getString("mobile"));
resp.setReceiveAddressDetail(metaValue.getString("address"));
String receiveAddressCode = metaValue.getString("areaCode");
resp.setReceiveAddress(getAddressInfo(receiveAddressCode));
resp.setReceiveAddress(metaValue.getString("area"));
}
if(buyerOrder.getStatus().byteValue() == Constant.BUYER_ORDER_STATUS_JUDGE_NOT_PASS.getByteVal()) {
... ... @@ -1953,7 +1956,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
if(sellerMeta!=null){
JSONObject sellerMetaValue = JSONObject.parseObject(sellerMeta.getMetaValue());
resp.setSellerRebackAddressDetail(sellerMetaValue.getString("address"));
resp.setSellerRebackAddress(getAddressInfo(sellerMetaValue.getString("areaCode")));
resp.setSellerRebackAddress(sellerMetaValue.getString("area"));
resp.setSellerRebackMobile(sellerMetaValue.getString("mobile"));
}
}
... ... @@ -2195,16 +2198,14 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
return Lists.newArrayList();
}
List<Area> areaList = areaMapper.selectByParentCode(parentCode);
List<JSONObject> result = new ArrayList<>();
for (Area area : areaList) {
JSONObject jo = new JSONObject();
// 地区
jo.put("id", area.getId());
jo.put("caption", area.getCaption());
result.add(jo);
}
Map<Integer, String> stringMap = areaService.selectByParentCode(parentCode);
List<JSONObject> result = new ArrayList<>();
for (Map.Entry<Integer, String> item : stringMap.entrySet()) {
JSONObject jo = new JSONObject();
jo.put("id", item.getKey());
jo.put("caption", item.getValue()); // 地区
result.add(jo);
}
return result;
}
... ... @@ -2278,7 +2279,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
metaValue.replace("address", req.getReceiveAddressDetail());
metaValue.replace("zipCode", req.getReceiveZipCode());
metaValue.replace("areaCode", req.getReceiveAreaCode());
metaValue.replace("area", getAddressInfo(req.getReceiveAreaCode()));
metaValue.replace("area", req.getArea());
BuyerOrderMetaUpdateReq metaReq = new BuyerOrderMetaUpdateReq();
metaReq.setOrderCode(Long.valueOf(req.getOrderCode()));
... ... @@ -2313,7 +2314,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
orderOperateRecordMapper.insert(optRecord);
}
private String getAddressInfo(String areaCode) {
/*private String getAddressInfo(String areaCode) {
//查询四级地址,比如id=110102001:北京市北京市西城区西长安街街道办事处,11-北京市, 1101-北京市, 110102-西城区 110102001-西长安街街道办事处
Integer firstId = Integer.valueOf(areaCode.substring(0, 2));
Integer secondId = Integer.valueOf(areaCode.substring(0, 4));
... ... @@ -2322,7 +2323,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
List<Area> areaList = areaMapper.selectByCodeList(Lists.newArrayList(firstId, secondId, thirdId, fourthId));
Map<Integer, String> areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, Area::getCaption));
return areaMap.get(firstId) + " " + areaMap.get(secondId) + " " + areaMap.get(thirdId) + " " + areaMap.get(fourthId);
}
}*/
private String getMobileByUid(Integer uid) {
LOGGER.info("call getMobileByUid uid is{}", uid);
... ... @@ -2507,8 +2508,8 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
resp.setReceiveName(metaValue.getString("consignee"));
resp.setReceiveMobile(metaValue.getString("mobile"));
String receiveAddressCode = metaValue.getString("areaCode");
resp.setReceiveAddress(getAddressInfo(receiveAddressCode));
resp.setNfcStatus(CollectionUtils.isEmpty(identifyMap.get(item.getOrderCode())) ? 0 : 1);//0:未写入,1:已写入
resp.setReceiveAddress(metaValue.getString("area"));
resp.setNfcStatus(CollectionUtils.isEmpty(identifyMap.get(item.getOrderCode())) ? 0 : 1);//0:未写入,1:已写入
respList.add(resp);
}
... ...
... ... @@ -327,7 +327,7 @@ public class TradeBillsServiceImpl implements ITradeBillsService {
return "";
}
private Integer getUidByMobile(String mobile) {
public Integer getUidByMobile(String mobile) {
Map<String,String> request = Collections.singletonMap("account", mobile);
JSONObject jsonObject = serviceCaller.get("uic.getProfileAction", "http://" + uicServerIpAndPort + UIC_GETPROFILE_URL, request, JSONObject.class, null).get(1);
if(null == jsonObject.getJSONObject("data") || null == jsonObject.getJSONObject("data").getInteger("uid")) {
... ...
... ... @@ -23,6 +23,7 @@
<value>updateVideoUrl</value>
<value>queryVideoInfo</value>
<value>getMobileByUid</value>
<value>getUidByMobile</value>
</list>
</property>
</bean>
... ...
... ... @@ -370,6 +370,7 @@ function updateOrderInfo(orderCode){
var receiveAddressDetail = $("#input_receiveAddressDetail").val();
var receiveZipCode = $("#input_zipCode").val();
var receiveAreaCode = $("#jiedao").combobox('getValue');
var area = $("#sheng").combobox('getText') + ' ' + $("#shi").combobox('getText') + ' ' + $("#quxian").combobox('getText') + ' ' + $("#jiedao").combobox('getText');
if(receiveName == '' || receiveMobile == '' || receiveAddressDetail == '' || receiveAreaCode == ''){
alert("收货人姓名,手机号码,收货地址,详细地址不能有空值!");
return;
... ... @@ -381,7 +382,8 @@ function updateOrderInfo(orderCode){
receiveAddressDetail : receiveAddressDetail,
receiveZipCode : receiveZipCode,
receiveAreaCode : receiveAreaCode,
sellerWaybillCode : sellerWaybillCode
sellerWaybillCode : sellerWaybillCode,
area : area
}, function(data) {
if (data.code == 200) {
getOrderInfo(orderCode);
... ...