Authored by caoyan

Merge branch 'test6.9.1' of http://git.yoho.cn/ufo/yohoufo-fore into test6.9.1

# Conflicts:
#	dal/src/main/resources/META-INF/mybatis/product/SecondhandImagesMapper.xml
Showing 43 changed files with 741 additions and 260 deletions
... ... @@ -95,6 +95,10 @@ public class BigDecimalHelper {
return matcher.matches();
}
public static BigDecimal calDiff(BigDecimal source, BigDecimal target){
return target.subtract(source);
}
public static void main(String[] args) {
System.out.println(formatNumber(new BigDecimal(111123.0011D), FORMAT_NOPOINT));
System.out.println(isDigitalNumber("11111"));
... ...
... ... @@ -9,4 +9,6 @@ import com.yohoufo.dal.product.model.SecondhandFlaw;
public interface SecondhandFlawMapper {
List<SecondhandFlaw> selectByType(@Param("type") Integer type);
List<SecondhandFlaw> selectByIds(@Param("type") String ids);
}
\ No newline at end of file
... ...
... ... @@ -12,4 +12,6 @@ public interface SecondhandImagesMapper {
List<SecondhandImages> selectBySkup(Integer skup);
List<SecondhandImages> selectDefaultBySkupList(@Param("skupList") List<Integer> skupList);
}
\ No newline at end of file
... ...
... ... @@ -8,4 +8,6 @@ public interface SecondhandInfoMapper {
int insert(@Param("record")SecondhandInfo record);
SecondhandInfo selectBySkup(Integer skup);
}
\ No newline at end of file
... ...
... ... @@ -38,6 +38,7 @@ public interface StoragePriceMapper {
List<StoragePrice> selectByStorageIds(List<Integer> storageIds);
List<StoragePrice> selectBySkupList(@Param("skupList") List<Integer> skupList);
List<StoragePrice> selectSecondByProductId(@Param("productId") Integer productId, @Param("start") Integer start, @Param("limit") Integer limit);
/**
* 批量修改skup价格
... ...
... ... @@ -15,4 +15,9 @@
where type=#{type}
order by order_by
</select>
<select id="selectByIds" resultMap="BaseResultMap">
select * from secondhand_flaw where id in(${ids})
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -19,8 +19,16 @@
</foreach>
</insert>
<select id="selectBySkup" resultMap="BaseResultMap">
select id, skup, type, code, is_default, image_url
from secondhand_images where skup = #{skup,jdbcType=INTEGER};
</select>
<select id="selectBySkup" resultMap="BaseResultMap">
select id, skup, type, is_default, image_url
from secondhand_images where skup = #{skup,jdbcType=INTEGER}
</select>
<select id="selectDefaultBySkupList" resultMap="BaseResultMap">
select * from secondhand_images where is_default = 'Y' and skup in
<foreach item="item" index="index" collection="skupList" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -18,4 +18,9 @@
values (#{record.skup,jdbcType=INTEGER}, #{record.flawId,jdbcType=VARCHAR},
#{record.flawAttr,jdbcType=VARCHAR}, #{record.describeInfo,jdbcType=VARCHAR}, unix_timestamp())
</insert>
<select id="selectBySkup" resultMap="BaseResultMap">
select * from secondhand_info where skup = #{skup}
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -191,4 +191,12 @@
</foreach>
</select>
<select id="selectSecondByProductId" resultMap="BaseResultMap">
select *
from storage_price
where status = 1
and product_id =#{productId} and pre_sale_flag in(5,6) and is_hide = 0
limit #{start},#{limit}
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -16,6 +16,7 @@ import com.yohoufo.order.service.impl.OrderDynamicConfig;
import com.yohoufo.order.service.impl.SellerOrderService;
import com.yohoufo.order.service.impl.SellerService;
import com.yohoufo.order.service.impl.SkupListService;
import com.yohoufo.order.service.seller.imperfect.ImperfectGoodsService;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -49,6 +50,9 @@ public class SellerOrderController {
@Autowired
private SkupListService skupListService;
@Autowired
private ImperfectGoodsService imperfectGoodsService;
static final String DEFAULT_SKUP_TYPE = "1";
/**
* 根据卖家提交价格来计算各项费用
... ... @@ -499,6 +503,31 @@ public class SellerOrderController {
}
/**
* 计算出售二手or 瑕疵(全新)商品价格 费率 费用
* @param uid
* @param storage_id
* @param price
* @return
* @throws GatewayException
*/
@RequestMapping(params = "method=ufo.seller.computeImperfectPrd")
@ResponseBody
public ApiResponse computeImperfectPrd(@RequestParam(name = "uid")int uid,
@RequestParam(name = "storage_id")int storage_id,
@RequestParam(name="price")String price,
@RequestParam(name="skupType") Integer skupType) {
SellerOrderComputeReq req = SellerOrderComputeReq.builder()
.uid(uid)
.storageId(storage_id)
.price(price)
.skupType(skupType)
.build();
logger.info("in ufo.sellerOrder.computeImperfectPrd, req {}", req);
SoldPrdComputeBo resp = imperfectGoodsService.compute(req);
return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("成功").build();
}
/**
* 发布出售二手or 瑕疵(全新)商品,生成保证金订单
... ... @@ -515,7 +544,6 @@ public class SellerOrderController {
@RequestParam(name = "storage_id")int storage_id,
@RequestParam(name="price")String price,
@RequestParam(name="address_id")String address_id,
@RequestParam(name="num", defaultValue = "1", required = false)int num,
@RequestParam(name="skupType") Integer skupType) {
ImperfectOrderSubmitReq req = ImperfectOrderSubmitReq.builder()
.uid(uid)
... ... @@ -525,7 +553,7 @@ public class SellerOrderController {
.skupType(skupType)
.build();
logger.info("in ufo.sellerOrder.publishImperfectPrd, req {}", req);
OrderSubmitResp resp = sellerOrderService.publishImperfectPrd(req);
OrderSubmitResp resp = imperfectGoodsService.publish(req);
return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("发布成功").build();
}
... ...
package com.yohoufo.order.model.dto;
import com.yohobuy.ufo.model.order.bo.PrdPrice;
import com.yohobuy.ufo.model.order.constants.SkupType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
... ... @@ -22,6 +24,10 @@ public class ImperfectComputePreparedNode {
private BigDecimal salePrice;
private PrdPrice prdPrice;
private SkupType skupType;
private SellerOrderComputeResult computeResult;
}
... ...
... ... @@ -72,7 +72,8 @@ public class CacheKeyBuilder {
PRESALE_THRESHOLD("ufo:order:presale:threshold", ""),
ORDER_CODE_RULE("ufo:order:code:rule", "")
ORDER_CODE_RULE("ufo:order:code:rule", ""),
SELLER_GOODS_FEE_RATE("ufo:order:seller:goods:service:feeRate", "")
;
private String fix;
... ...
... ... @@ -10,10 +10,7 @@ import com.yohobuy.ufo.model.order.resp.EntryThreshold;
import com.yohoufo.common.cache.CacheClient;
import com.yohoufo.dal.order.MetaConfigMapper;
import com.yohoufo.dal.order.model.MetaConfig;
import com.yohoufo.order.model.dto.BuyerPenalty;
import com.yohoufo.order.model.dto.EarnestMoney;
import com.yohoufo.order.model.dto.OrderCodeRule;
import com.yohoufo.order.model.dto.PreSaleOrderConfig;
import com.yohoufo.order.model.dto.*;
import com.yohoufo.order.service.cache.CacheKeyBuilder;
import com.yohoufo.order.service.cache.ExpiredTime;
import lombok.AllArgsConstructor;
... ... @@ -222,7 +219,7 @@ public class MetaConfigService {
CacheKeyBuilder.KeyTemp kt = CacheKeyBuilder.KeyTemp.PRESALE_THRESHOLD;
RedisKeyBuilder rkb = kt.builderKeyOnlyFixed();
final String key = MetaConfigKey.PRESALE_THRESHOLD;
String configVal = new DataProcesser(rkb, key, ExpiredTime.ORDER_BASE_CONFIG).getConfigVal();;
String configVal = new DataProcesser(rkb, key, ExpiredTime.ORDER_BASE_CONFIG).getConfigVal();
PreSaleOrderConfig psoc;
try {
/**
... ... @@ -259,7 +256,7 @@ public class MetaConfigService {
CacheKeyBuilder.KeyTemp kt = CacheKeyBuilder.KeyTemp.ORDER_CODE_RULE;
RedisKeyBuilder rkb = kt.builderKeyOnlyFixed();
final String key = MetaConfigKey.ORDER_CODE_RULE;
String configVal = new DataProcesser(rkb, key, ExpiredTime.ORDER_BASE_CONFIG).getConfigVal();;
String configVal = new DataProcesser(rkb, key, ExpiredTime.ORDER_BASE_CONFIG).getConfigVal();
OrderCodeRule ocr = new OrderCodeRule();
try{
ocr = JSONObject.parseObject(configVal, OrderCodeRule.class);
... ... @@ -269,4 +266,26 @@ public class MetaConfigService {
return ocr;
}
/**
* {
* "inStock":{"goodsPaymentRate":0.05},
* "preSale":{"goodsPaymentRate":0.05},
* "flaw":{"goodsPaymentRate":0.05},
* "secondHand":{"goodsPaymentRate":0.08}}
* @return
*/
public Map<String,ServiceFeeRate> getServiceFeeRate(){
CacheKeyBuilder.KeyTemp kt = CacheKeyBuilder.KeyTemp.SELLER_GOODS_FEE_RATE;
RedisKeyBuilder rkb = kt.builderKeyOnlyFixed();
final String key = MetaConfigKey.SELLER_GOODS_FEE_RATE;
String configVal = new DataProcesser(rkb, key, ExpiredTime.ORDER_BASE_CONFIG).getConfigVal();
Map<String,ServiceFeeRate> sfrMap = new HashMap<String,ServiceFeeRate>(10);
try{
sfrMap = JSONObject.parseObject(configVal, new TypeReference<Map<String,ServiceFeeRate>>(){});
}catch (Exception ex){
logger.warn("in getServiceFeeRate parseObject fail, metaVal {}", configVal, ex);
}
return sfrMap;
}
}
... ...
package com.yohoufo.order.service.impl;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohoufo.common.utils.BigDecimalHelper;
import com.yohoufo.order.model.dto.ServiceFeeRate;
import lombok.Data;
import lombok.Getter;
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.Component;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.Map;
/**
* Created by chao.chen on 2018/11/15.
... ... @@ -20,6 +23,9 @@ public class OrderDynamicConfig {
final private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private MetaConfigService metaConfigService;
@Value("${order.seller.earnestmoney.min:28}")
protected double earnestmoney_min;
... ... @@ -102,6 +108,17 @@ public class OrderDynamicConfig {
private ServiceFeeRate serviceFeeRate;
public ServiceFeeRate getServiceFeeRate(SkupType skupType){
Map<String,ServiceFeeRate> sfrMap = metaConfigService.getServiceFeeRate();
String key = skupType.getLocalCacheKey();
ServiceFeeRate sft = sfrMap.get(key);
logger.info("getServiceFeeRate from local cache, skupType {} ServiceFeeRate {}", skupType, sft);
return sft;
}
public ServiceFeeRate cloneServiceFeeRate(){
ServiceFeeRate serviceFeeRate = new ServiceFeeRate();
serviceFeeRate.setGoodsPaymentRate(new BigDecimal(goodsPaymentRate).setScale(2, BigDecimal.ROUND_HALF_UP));
... ...
... ... @@ -918,12 +918,5 @@ public class SellerOrderService implements IOrderListService, IOrderDetailServic
return occr;
}
@Autowired
private ImperfectGoodsService imperfectGoodsService;
public OrderSubmitResp publishImperfectPrd(ImperfectOrderSubmitReq req){
return imperfectGoodsService.publish(req);
}
}
... ...
... ... @@ -377,11 +377,7 @@ public class ShoppingServiceImpl implements IShoppingService {
*/
protected OrderAttributes buildOrderAttribute(SellerOrderGoods skup) {
OrderAttributes orderAttributes = OrderAttributes.getOrderAttributes(skup.getAttributes());
if (orderAttributes == OrderAttributes.ADVANCE_SALE) {
return OrderAttributes.ADVANCE_SALE;
} else {
return OrderAttributes.COMMON_IN_STOCK;
}
return orderAttributes;
}
protected int buildDeliveryWay() {
... ...
package com.yohoufo.order.service.impl;
import com.yoho.core.dal.datasource.annotation.Database;
import com.yohobuy.ufo.model.GoodsSize;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.SellerOrderSubmitReq;
import com.yohobuy.ufo.model.response.StorageDataResp;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.SkupBatchMapper;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohobuy.ufo.model.order.common.SkupStatus;
import com.yohobuy.ufo.model.order.bo.GoodsInfo;
import com.yohoufo.order.convert.GoodsInfoConvertor;
import com.yohoufo.order.model.SellerOrderContext;
import com.yohoufo.order.service.proxy.ProductProxyService;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -16,8 +21,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* Created by chenchao on 2018/9/17.
... ... @@ -29,6 +36,9 @@ public class SkupService {
@Autowired
private SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
private ProductProxyService productProxyService;
@Transactional(propagation = Propagation.REQUIRED)
@Database(ForceMaster=true, DataSource="ufo_order")
public SellerOrderGoods addSkup(GoodsInfo goodsInfo){
... ... @@ -59,4 +69,36 @@ public class SkupService {
return total;
}
public GoodsInfo getProductDetail(int uid, int storageId, BigDecimal salePrice, SkupType skupType){
try {
StorageDataResp prdResp = productProxyService.getStorageData(storageId);
if (!Integer.valueOf(1).equals(prdResp.getStatus())) {
logger.info("in getProductDetail occur product out shelve, uid {}, storageId {}", uid, storageId);
return null;
}
GoodsInfo goodsInfo = new GoodsInfo();
goodsInfo.setUid(uid);
goodsInfo.setProductId(prdResp.getProductId());
goodsInfo.setProductName(prdResp.getProductName());
goodsInfo.setColorId(Objects.isNull(prdResp.getColorId()) ? null : Integer.valueOf(prdResp.getColorId()));
goodsInfo.setColorName(prdResp.getColorName());
GoodsSize size;
if (Objects.nonNull(size = prdResp.getSize())){
goodsInfo.setSizeName(size.getSizeName());
goodsInfo.setSizeId(size.getSizeId());
}
goodsInfo.setImageUrl(prdResp.getImageUrl());
goodsInfo.setPrice(salePrice);
goodsInfo.setStorageId(storageId);
goodsInfo.setSkupType(skupType);
return goodsInfo;
}catch (Exception ex){
logger.warn("in getProductDetail occur error, uid {}, storageId {}", uid, storageId);
return null;
}
}
}
... ...
... ... @@ -1005,46 +1005,75 @@ public class InBoxFacade {
} catch (Exception e) {
logger.warn("InBoxFacade noticeSellerWhenOtherChangePriceLower error inbox msg, noticeSellerMap {}, sog {} ", noticeSellerMap, sog, e);
}
/*noticeSellerUidList.stream().forEach( // 发送PUSH
sellerUid ->{
StoredSeller storedSeller = storedSellerMapper.selectValidByUid(sellerUid);
if (Objects.isNull(storedSeller)) {
SellerOrder sellerOrder = sellerOrderMapper.selectBySkup(sog.getId());
String orderCode = Optional.ofNullable(sellerOrder).map(SellerOrder::getOrderCode).map(String::valueOf).orElse(null);
* 更低出售价提醒 商家未入驻
* @param uid
* @param productName 商品名称
* @param size 尺寸
* @param goodsNumber 货号
* @param salePrice 提醒的更低售价
* @param orderCode 订单编号
* @return
ufoSendService.sendLessPrice(String.valueOf(sellerUid), product.getProductName(), sog.getSizeName(),
product.getProductCode(), sog.getGoodsPrice().toPlainString(), orderCode);
logger.info("personal seller record laster price send out push msg sellerUid【{}】 productName【{}】 SizeName【{}】 productCode【{}】 price【{}】 orderCode【{}】",
sellerUid, product.getProductName(), sog.getSizeName(), product.getProductCode(), sog.getGoodsPrice(), orderCode);
} else {
* 更低出售价提醒 商家已入驻
* @param uid
* @param productName 商品名称
* @param size 尺寸
* @param goodsNumber 货号
* @param salePrice 提醒的更低售价
* @param productSkn 商品skn
* @return
ufoSendService.sendLessPriceEnter(String.valueOf(sellerUid), product.getProductName(), sog.getSizeName(),
product.getProductCode(), sog.getGoodsPrice().toPlainString(), String.valueOf(sog.getProductId()));
logger.info("store seller record laster price send out push msg sellerUid【{}】 productName【{}】 SizeName【{}】 productCode【{}】 price【{}】 productId【{}】",
sellerUid, product.getProductName(), sog.getSizeName(), product.getProductCode(), sog.getGoodsPrice(), sog.getProductId());
}
}
/**
* 二手商品申请的审核通过
*/
public void noticeSellerWhenSecondHandProductApplyAuditPass(int sellerUid,SellerOrderGoods sog){
noticeSellerWhenSecondHandProductApplyAudit(true,sellerUid, sog,StringUtils.EMPTY);
}
/**
* 二手商品申请的审核不通过
*/
public void noticeSellerWhenSecondHandProductApplyAuditReject(int sellerUid,SellerOrderGoods sog,String rejectReason){
noticeSellerWhenSecondHandProductApplyAudit(false,sellerUid, sog,rejectReason);
}
/**
* 二手商品申请的审核
*/
private void noticeSellerWhenSecondHandProductApplyAudit(boolean passFlag,int sellerUid,SellerOrderGoods sog,String rejectReason){
String prdName = sog.getProductName();
String sizeName = sog.getSizeName();
try {
executorService.execute(() -> {
// 发站内信
logger.info("record noticeSellerWhenSecondHandProductApplyAudit pass {} for seller,SellerOrderGoods {}, rejectReason {}", passFlag, sog,rejectReason);
Product product = productMapper.selectByPrimaryKey(sog.getProductId());
String productCode = product.getProductCode();
//发消息
String params;
InboxBusinessTypeEnum msgBizType;
if(passFlag){
msgBizType = InboxBusinessTypeEnum.NOTICE_SELLER_WHEN_SECOND_HAND_APPLY_PASS;
params = buildParams(prdName, sizeName,productCode);
}else{
msgBizType = InboxBusinessTypeEnum.NOTICE_SELLER_WHEN_SECOND_HAND_APPLY_REJECT;
params = buildParams(prdName, sizeName,productCode,rejectReason);
}
InboxReqVO req = buildInboxReqVO(sellerUid, params,msgBizType );
InBoxResponse resp = inBoxSDK.addInbox(req);
logger.info("record noticeSellerWhenSecondHandProductApplyAudit pass {} for seller msg end,SellerOrderGoods {}, resp {}", passFlag, sog,resp);
//短信
String phone = userProxyService.getMobile(sellerUid);
if (StringUtils.isBlank(phone)){
logger.warn("record noticeSellerWhenSecondHandProductApplyAudit sms send fail,sellerUid {}, prdName {}", sellerUid, prdName);
return;
}
);*/
List<String> mobileList = Arrays.asList(phone);
InboxBusinessTypeEnum smsBizType;
if(passFlag){
smsBizType = InboxBusinessTypeEnum.SMS_NOTICE_SELLER_WHEN_SECOND_HAND_APPLY_PASS;
}else{
smsBizType = InboxBusinessTypeEnum.SMS_NOTICE_SELLER_WHEN_SECOND_HAND_APPLY_REJECT;
}
String content = getReplacedContent(smsBizType.getContent(),prdName,sizeName,productCode);
sendSmsService.smsSendByMobile(content, mobileList);
logger.info("record noticeSellerWhenSecondHandProductApplyAudit inbox sms msg pass {} for seller,SellerOrderGoods {}, resp {}", passFlag, sog,resp);
//发push
/*
logger.info("record noticeSellerWhenSecondHandProductApplyAudit pass {} for seller push end ,sog {}",passFlag, sog);
*/
});
} catch (Exception e) {
logger.warn("InBoxFacade noticeSellerWhenSecondHandProductApplyAudit error inbox msg, pass {}, sog {} ", passFlag, sog, e);
}
}
/*********************************************************************
... ...
... ... @@ -7,6 +7,7 @@ import com.yohobuy.ufo.model.order.common.SkupStatus;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.request.StoragePriceBo;
import com.yohobuy.ufo.model.request.product.ProductImportTranItemBo;
import com.yohobuy.ufo.model.request.product.SecondhandInfoReqBo;
import com.yohobuy.ufo.model.response.ProductDetailResp;
import com.yohobuy.ufo.model.response.StorageDataResp;
import com.yohobuy.ufo.model.response.StorageInfoResp;
... ... @@ -56,6 +57,11 @@ public class ProductProxyService extends AbsProxyService{
final static String BATCH_ADD = "ufo.product.batchAdd";
/**
* 瑕疵 or 二手创建接口
*/
private static final String IMPERFECT_CREATE_API = "ufo.secondhand.save";
public boolean subtractStorage(Integer productId, Integer skup){
ApiResponse resp = ufoServiceCaller.call(SUBTRACT_STORAGE, productId, skup);
... ... @@ -374,28 +380,41 @@ public class ProductProxyService extends AbsProxyService{
public boolean hiddenSkup(Integer skup){
final String method = hideSellerSkup;
logger.info("begin in {} uid {}", method, skup);
logger.info("begin in {} skup {}", method, skup);
ApiResponse resp = null;
try {
resp = ufoServiceCaller.call(method, skup);
}catch (Exception ex){
logger.warn("in {} call fail uid {}", method, skup, ex);
logger.warn("in {} call fail skup {}", method, skup, ex);
}
logger.info("finish {} -> uid {}", method, skup);
logger.info("finish {} -> skup {}", method, skup);
return (null == resp || null == resp.getData())? false : (boolean)resp.getData();
}
public boolean cancelHiddenSkup(Integer skup){
final String method = showSellerSkup;
logger.info("begin in {} uid {}", method, skup);
logger.info("begin in {} skup {}", method, skup);
ApiResponse resp = null;
try {
resp = ufoServiceCaller.call(method, skup);
}catch (Exception ex){
logger.warn("in {} call fail uid {}", method, skup, ex);
logger.warn("in {} call fail skup {}", method, skup, ex);
}
logger.info("finish {} -> uid {}", method, skup);
logger.info("finish {} -> skup {}", method, skup);
return (null == resp || null == resp.getData())? false : (boolean)resp.getData();
}
public boolean createImperfectGoods(SecondhandInfoReqBo req){
final String method = IMPERFECT_CREATE_API;
logger.info("begin in {} req {}", method, req);
ApiResponse resp = null;
try {
resp = ufoServiceCaller.call(method, req);
}catch (Exception ex){
logger.warn("in {} call fail req {}", method, req, ex);
}
logger.info("finish {} -> req {}", method, req);
return (null == resp || null == resp.getData())? false : (boolean)resp.getData();
}
}
... ...
... ... @@ -104,10 +104,7 @@ public abstract class AbsSellerOrderComputeHandler implements OrderComputeHandle
*/
protected PlatformFeeDto calPlatformFee(BigDecimal price, ServiceFeeRate serviceFeeRate, PlatformFeeDto ppf){
BigDecimal goodsServiceRate = serviceFeeRate.getGoodsPaymentRate();
PlatformFeeDto platformFee = new PlatformFeeDto();
BigDecimal appraiseFee = ppf!=null && ppf.getAppraiseFee() != null ? ppf.getAppraiseFee() : new BigDecimal(getAppraiseFee());
BigDecimal packageFee = ppf!=null && ppf.getPackageFee() != null ? ppf.getPackageFee() : new BigDecimal(getPackageFee());
BigDecimal serviceFee = price.multiply(goodsServiceRate);
... ...
... ... @@ -10,7 +10,7 @@ import com.yohoufo.order.service.handler.SellerOrderSubmitHandler;
import com.yohoufo.order.service.impl.SellerService;
import com.yohoufo.order.service.impl.SkupBatchService;
import com.yohoufo.order.service.proxy.ProductProxyService;
import com.yohoufo.order.service.seller.processor.ImportPublishPrepareProcessor;
import com.yohoufo.order.service.seller.processor.ImportPublishProcessor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
... ... @@ -30,7 +30,7 @@ public class ImportPublishExcutor implements PublishExcutor<BatchImportPrdReq, S
private SellerOrderSubmitHandler orderSubmitHandler;
@Autowired
private ImportPublishPrepareProcessor importPublishPrepareProcessor;
private ImportPublishProcessor importPublishPrepareProcessor;
@Autowired
private ProductProxyService productProxyService;
... ...
... ... @@ -3,7 +3,7 @@ package com.yohoufo.order.service.seller;
/**
* Created by chao.chen on 2019/3/22.
*/
public interface PublishPrepareProcessor<I,O> {
public interface PublishProcessor<I,O> {
O buildPublishCtx(I im);
}
... ...
... ... @@ -22,7 +22,7 @@ import com.yohoufo.order.service.impl.SellerOrderCancelService;
import com.yohoufo.order.service.proxy.ProductProxyService;
import com.yohoufo.order.service.proxy.ResourcesProxyService;
import com.yohoufo.order.service.seller.processor.NESChangePricePrepareProcessor;
import com.yohoufo.order.service.seller.processor.NESChangePricePublishPrepareProcessor;
import com.yohoufo.order.service.seller.processor.NESChangePricePublishProcessor;
import com.yohoufo.order.utils.LoggerUtils;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
... ... @@ -65,7 +65,7 @@ public class NotEntrySellerChangePriceService{
private NESChangePricePrepareProcessor nesChangePricePrepareProcessor;
@Autowired
private NESChangePricePublishPrepareProcessor nesChangePricePublishPrepareProcessor;
private NESChangePricePublishProcessor nesChangePricePublishProcessor;
@Autowired
private NESChangePricePublishExcutor nesChangePricePublishExcutor;
... ... @@ -123,7 +123,7 @@ public class NotEntrySellerChangePriceService{
*/
public OrderSubmitResp changePrice(NESChangePriceReq req){
logger.info("in NotEntrySellerChangePriceService.changePrice, req {}", req);
NESCPOrderContext ctx = nesChangePricePublishPrepareProcessor.buildPublishCtx(req);
NESCPOrderContext ctx = nesChangePricePublishProcessor.buildPublishCtx(req);
SellerOrderGoods psog = ctx.getSellerOrderGoods();
int preSkup = psog.getId();
SellerOrder sellerOrder = ctx.getSellerOrder();
... ...
... ... @@ -10,7 +10,7 @@ import java.math.BigDecimal;
* Created by chao.chen on 2019/4/3.
*/
@Service
public class FlamGoodsComputeHandler extends ImperfectGoodsComputeHandler {
public class FlawGoodsComputeHandler extends ImperfectGoodsComputeHandler {
@Override
EarnestMoney getDefaultEarnestMoney() {
... ...
... ... @@ -52,7 +52,7 @@ public abstract class ImperfectGoodsComputeHandler extends AbsSellerOrderCompute
@Override
protected ServiceFeeRate buildServiceFeeRate(ServiceFeeRate psfr) {
//
ServiceFeeRate serviceFeeRate = orderDynamicConfig.cloneServiceFeeRate();
ServiceFeeRate serviceFeeRate = orderDynamicConfig.getServiceFeeRate(getSkupType());
BigDecimal pgpr;
if (psfr !=null
&& (pgpr = psfr.getGoodsPaymentRate()) !=null){
... ...
... ... @@ -5,13 +5,9 @@ import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.SellerOrderComputeReq;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.order.model.dto.ImperfectComputePreparedNode;
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.model.request.PrdQueryReq;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.service.seller.processor.PriceComputePrepareProcessor;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import com.yohoufo.order.utils.SellerGoodsHelper;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -30,8 +26,7 @@ public class ImperfectGoodsComputePrepareProcessor {
@Autowired
private PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
OrderComputeProvider orderComputeProvider;
public ImperfectComputePreparedNode checkAndAcquire(SellerOrderComputeReq req){
int uid = req.getUid();
... ... @@ -59,12 +54,10 @@ public class ImperfectGoodsComputePrepareProcessor {
.uid(uid).prdPrice(salePrice).storageId(storageId).build();
PrdPrice prdPrice = priceComputePrepareProcessor.checkPriceRange(pqr, true);
OrderComputeHandler computeHandler = orderComputeProvider.findBySkupType(skupType);
//TODO imperfect goods whether need to use special fee of platform service
SellerOrderComputeResult pcc = OrderAssist.buildPersonalComputeConfig(prdPrice);
SellerOrderComputeResult computeResult = computeHandler.compute(salePrice, pcc);
return ImperfectComputePreparedNode.builder()
.uid(uid).storageId(storageId)
.salePrice(salePrice).computeResult(computeResult).build();
.prdPrice(prdPrice)
.skupType(skupType)
.salePrice(salePrice).build();
}
}
... ...
package com.yohoufo.order.service.seller.imperfect;
import com.yohobuy.ufo.model.order.req.ImperfectOrderSubmitReq;
import com.yohoufo.order.model.ImperfectOrderContext;
import com.yohoufo.order.model.response.OrderSubmitResp;
import com.yohoufo.order.service.seller.PublishExcutor;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
import org.springframework.stereotype.Service;
/**
... ... @@ -11,8 +12,13 @@ import org.springframework.stereotype.Service;
*/
@Service
public class ImperfectGoodsPublishExcutor implements PublishExcutor<ImperfectOrderContext,OrderSubmitResp> {
private final Logger logger = LoggerUtils.getSellerOrderLogger();
@Override
public OrderSubmitResp publish(ImperfectOrderContext o) {
logger.info("in ImperfectGoodsPublishExcutor.publish");
return null;
}
}
... ...
package com.yohoufo.order.service.seller.imperfect;
import com.yohobuy.ufo.model.order.bo.SoldPrdComputeBo;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.ImperfectOrderSubmitReq;
import com.yohobuy.ufo.model.order.req.SellerOrderComputeReq;
import com.yohoufo.order.convert.SellerOrderConvertor;
import com.yohoufo.order.model.ImperfectOrderContext;
import com.yohoufo.order.model.dto.ImperfectComputePreparedNode;
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.model.response.OrderSubmitResp;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* Created by chao.chen on 2019/4/3.
* @version 6.9.1
... ... @@ -24,9 +30,13 @@ public class ImperfectGoodsService {
private ImperfectGoodsComputePrepareProcessor imperfectGoodsComputePrepareProcessor;
@Autowired
ImperfectGoodsPublishExcutor imperfectGoodsPublishExcutor;
private ImperfectPublishProcessor imperfectPublishProcessor;
@Autowired
private ImperfectGoodsPublishExcutor imperfectGoodsPublishExcutor;
@Autowired
private OrderComputeProvider orderComputeProvider;
/**
* 算费
* @param req
... ... @@ -35,15 +45,25 @@ public class ImperfectGoodsService {
public SoldPrdComputeBo compute(SellerOrderComputeReq req){
logger.info("in ImperfectGoodsService.compute,req {}", req);
ImperfectComputePreparedNode icpNode = imperfectGoodsComputePrepareProcessor.checkAndAcquire(req);
SoldPrdComputeBo spcb = SellerOrderConvertor.pureComputeResult2SoldPrdComputeBo(icpNode.getComputeResult());
//reach here, everything is ready
BigDecimal salePrice = icpNode.getSalePrice();
SkupType skupType = icpNode.getSkupType();
OrderComputeHandler computeHandler = orderComputeProvider.findBySkupType(skupType);
//TODO imperfect goods whether need to use special fee of platform service
SellerOrderComputeResult pcc = null;
//pcc = OrderAssist.buildPersonalComputeConfig(prdPrice);
//PrdPrice prdPrice = icpNode.getPrdPrice();
SellerOrderComputeResult computeResult = computeHandler.compute(salePrice, pcc);
SoldPrdComputeBo spcb = SellerOrderConvertor.pureComputeResult2SoldPrdComputeBo(computeResult);
return spcb;
}
public OrderSubmitResp publish(ImperfectOrderSubmitReq req){
logger.info("in ImperfectGoodsService.publish req {}", req);
//todo check req and build context of submit
ImperfectOrderContext ctx = null;
return imperfectGoodsPublishExcutor.publish(ctx);
ImperfectOrderContext ctx = imperfectPublishProcessor.buildPublishCtx(req);
OrderSubmitResp resp = imperfectGoodsPublishExcutor.publish(ctx);
return resp;
}
}
... ...
package com.yohoufo.order.service.seller.imperfect;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.bo.GoodsInfo;
import com.yohobuy.ufo.model.order.bo.PrdPrice;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.ImperfectOrderSubmitReq;
import com.yohobuy.ufo.model.order.req.SellerOrderComputeReq;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohoufo.common.utils.AddressUtil;
import com.yohoufo.order.model.ImperfectOrderContext;
import com.yohoufo.order.model.dto.ImperfectComputePreparedNode;
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.service.impl.SkupService;
import com.yohoufo.order.service.proxy.UserProxyService;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.service.seller.PublishProcessor;
import com.yohoufo.order.service.seller.processor.PriceComputePrepareProcessor;
import com.yohoufo.order.utils.AddressHelper;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Objects;
/**
* Created by chao.chen on 2019/4/9.
*/
@Service
public class ImperfectPublishProcessor implements PublishProcessor<ImperfectOrderSubmitReq,ImperfectOrderContext> {
private final Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
private ImperfectGoodsComputePrepareProcessor imperfectGoodsComputePrepareProcessor;
@Autowired
private UserProxyService userProxyService;
@Autowired
private SkupService skupService;
@Autowired
private PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
private OrderComputeProvider orderComputeProvider;
@Override
public ImperfectOrderContext buildPublishCtx(ImperfectOrderSubmitReq iosr) {
int uid;
int storageId;
SellerOrderComputeReq socr = SellerOrderComputeReq.builder()
.uid(uid=iosr.getUid()).storageId(storageId=iosr.getStorageId())
.price(iosr.getPrice()).skupType(iosr.getSkupType()).build();
ImperfectComputePreparedNode icpNode = imperfectGoodsComputePrepareProcessor.checkAndAcquire(socr);
BigDecimal salePrice = icpNode.getSalePrice();
SkupType skupType = icpNode.getSkupType();
//TODO check 多个输入敏感词,
int addressId = AddressUtil.getDecryptStr(iosr.getAddressId());
if (addressId < 0){
logger.warn("seller submit order addressId invalidate, uid {}, storageId {}, addressId is {}",
uid, storageId, iosr.getAddressId());
throw new ServiceException(ServiceError.ORDER_ADDRESSID_INVALIDATE);
}
//the address of send back 2 seller
AddressInfo hiddenBackAddress = userProxyService.getHiddenAddressInfo(uid, addressId);
AddressInfo noHiddenBackAddress = userProxyService.getAddressInfoNotHidden(uid, addressId);
if(AddressHelper.isNeedUpdate(noHiddenBackAddress)){
logger.warn("seller submit addressId need update, uid is {}, storageId is {}, addressId is {}",
uid, storageId, addressId);
throw new ServiceException(ServiceError.ORDER_ADDRESS_NEED_UPDATE);
}
//step 1: rpc get product detail by storage id
//ufo.product.storage.data
GoodsInfo goodsInfo = skupService.getProductDetail(uid, storageId, salePrice, skupType);
//step 2: generate skup ,action :set price status(unsaleable)
if (Objects.isNull(goodsInfo)){
logger.warn("in build Seller imperfect OrderContext storageId not exist in prd service , uid {}, storageId {}", uid, storageId);
throw new ServiceException(ServiceError.ORDER_ORDERS_GOODS_IS_EMPTY);
}
PrdPrice prdPrice = icpNode.getPrdPrice();
// compute every fee from price
SellerOrderComputeResult pcc = OrderAssist.buildPersonalComputeConfig(prdPrice);
OrderComputeHandler computeHandler = orderComputeProvider.findBySkupType(skupType);
SellerOrderComputeResult computeResult = computeHandler.compute(goodsInfo.getPrice(), pcc);
priceComputePrepareProcessor.checkIncome(storageId, computeResult.getIncome());
logger.info("in build Seller imperfect OrderContext , uid {}, storageId {}, price {}, computeResult {}", uid, storageId,
goodsInfo.getPrice(), computeResult);
//TODO check seller type , not entry ,entry(common, super) -> wallet pay
//TODO check wallet whether enough to pay
//
ImperfectOrderContext context = new ImperfectOrderContext();
context.setUid(uid);
context.setStorageId(storageId);
context.setSalePrice(salePrice);
//
context.setBackAddress(noHiddenBackAddress);
context.setBackHiddenAddress(hiddenBackAddress);
//
context.setSkupType(skupType);
//TODO change value-data of imperfect-product
context.setSoldProduct(goodsInfo);
context.setSellerOrderComputeResult(computeResult);
return context;
}
}
... ...
package com.yohoufo.order.service.seller.processor;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.dal.order.BuyerOrderGoodsMapper;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
/**
* Created by chao.chen on 2019/3/20.
*/
public abstract class AbsChangePricePrepareProcessor {
@Autowired
BuyerOrderGoodsMapper buyerOrderGoodsMapper;
@Autowired
BuyerOrderMapper buyerOrderMapper;
@Autowired
SellerOrderMapper sellerOrderMapper;
@Autowired
SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
SellerOrderPrepareProcessor sellerOrderPrepareProcessor;
@Autowired
PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
OrderComputeProvider orderComputeProvider;
protected abstract Logger getLogger();
public void checkChangeNecessary(Integer skup, BigDecimal oldPrice, BigDecimal newPrice){
if (oldPrice.compareTo(newPrice) == 0) {
getLogger().warn("skup:{} goodsPrice:{} and newPrice:{} must not be equals",
skup, oldPrice, newPrice);
throw new UfoServiceException(401, "前后价格没有变化");
}
}
BigDecimal calDiffOfEM(BigDecimal sourceEM, BigDecimal targetEM){
return targetEM.subtract(sourceEM);
}
}
... ... @@ -5,6 +5,11 @@ import com.yohobuy.ufo.model.order.common.OrderStatus;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.SellerBaseChangeReq;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.common.utils.BigDecimalHelper;
import com.yohoufo.dal.order.BuyerOrderGoodsMapper;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.BuyerOrderGoods;
import com.yohoufo.dal.order.model.SellerOrder;
... ... @@ -15,6 +20,7 @@ import com.yohoufo.order.model.dto.SkupDto;
import com.yohoufo.order.model.request.PrdQueryReq;
import com.yohoufo.order.service.impl.SellerService;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import org.apache.commons.collections.CollectionUtils;
... ... @@ -30,14 +36,39 @@ import java.util.stream.Collectors;
/**
* Created by jiexiang.wu on 2018/12/19.
*/
public abstract class AbsEntryChangePricePrepareProcessor<T extends SellerBaseChangeReq> extends AbsChangePricePrepareProcessor{
public abstract class AbsEntryChangePricePrepareProcessor<T extends SellerBaseChangeReq>
{
protected final Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
BuyerOrderGoodsMapper buyerOrderGoodsMapper;
@Autowired
BuyerOrderMapper buyerOrderMapper;
@Autowired
private SellerService sellerService;
@Autowired
SellerOrderMapper sellerOrderMapper;
@Autowired
SellerOrderPrepareProcessor sellerOrderPrepareProcessor;
@Autowired
OrderComputeProvider orderComputeProvider;
@Autowired
SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
ChangePriceCommonPrepareProcessor changePriceCommonPrepareProcessor;
public ChangePricePrepareDTO checkAndAcquire(T req) {
int uid = req.getUid();
if (uid <= 0){
... ... @@ -78,7 +109,7 @@ public abstract class AbsEntryChangePricePrepareProcessor<T extends SellerBaseCh
int num = skupMap.size();
//作为入驻商户 检查钱包
BigDecimal targetEM = computeResult.getEarnestMoney().getEarnestMoney();
BigDecimal diffEarnestMoney = calDiffOfEM(sourceEM,targetEM);
BigDecimal diffEarnestMoney = BigDecimalHelper.calDiff(sourceEM,targetEM);
boolean isSuper = sellerService.isSuperEntrySeller(uid);
if (diffEarnestMoney.compareTo(BigDecimal.ZERO)>0){
priceComputePrepareProcessor.checkNGetMergeEarnestMoney(uid, diffEarnestMoney, num, salePrice, isSuper);
... ...
package com.yohoufo.order.service.seller.processor;
import com.yohobuy.ufo.model.GoodsSize;
import com.yohobuy.ufo.model.order.bo.GoodsInfo;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohobuy.ufo.model.response.StorageDataResp;
import com.yohoufo.order.model.SellerOrderContext;
import com.yohoufo.order.service.proxy.ProductProxyService;
import com.yohoufo.order.service.seller.PublishPrepareProcessor;
import com.yohoufo.order.service.seller.PublishProcessor;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.util.Objects;
/**
* Created by chao.chen on 2019/3/22.
*/
public abstract class AbsPublishPrepareProcessor<I,O> extends AbsChangePricePrepareProcessor
implements PublishPrepareProcessor<I,O> {
public abstract class AbsPublishPrepareProcessor<I,O>
implements PublishProcessor<I,O> {
protected abstract Logger getLogger();
@Autowired
private ProductProxyService productProxyService;
public GoodsInfo getProductDetail(SellerOrderContext context){
int uid = context.getUid();
int storageId = context.getStorageId();
BigDecimal salePrice = context.getSalePrice();
try {
StorageDataResp prdResp = productProxyService.getStorageData(storageId);
if (!Integer.valueOf(1).equals(prdResp.getStatus())) {
getLogger().info("in getProductDetail occur product out shelve, uid {}, storageId {}", uid, storageId);
return null;
}
GoodsInfo goodsInfo = new GoodsInfo();
goodsInfo.setUid(uid);
goodsInfo.setProductId(prdResp.getProductId());
goodsInfo.setProductName(prdResp.getProductName());
goodsInfo.setColorId(Objects.isNull(prdResp.getColorId()) ? null : Integer.valueOf(prdResp.getColorId()));
goodsInfo.setColorName(prdResp.getColorName());
GoodsSize size;
if (Objects.nonNull(size = prdResp.getSize())){
goodsInfo.setSizeName(size.getSizeName());
goodsInfo.setSizeId(size.getSizeId());
}
goodsInfo.setImageUrl(prdResp.getImageUrl());
goodsInfo.setPrice(salePrice);
goodsInfo.setStorageId(context.getStorageId());
goodsInfo.setSkupType(context.getSkupType());
return goodsInfo;
}catch (Exception ex){
getLogger().warn("in getProductDetail occur error, uid {}, storageId {}", uid, storageId);
return null;
}
}
}
... ...
... ... @@ -18,10 +18,7 @@ import java.util.*;
*/
@Service
public class AdjustPricePrepareProcessor extends AbsEntryChangePricePrepareProcessor<SellerBatchChangeReq> {
@Override
protected Logger getLogger() {
return logger;
}
@Override
... ... @@ -66,8 +63,7 @@ public class AdjustPricePrepareProcessor extends AbsEntryChangePricePrepareProce
skup, sellerOrderGoods.getGoodsPrice(), newPrice);
throw new UfoServiceException(401, "当前价格不对");
}
checkChangeNecessary(skup, sellerOrderGoods.getGoodsPrice(), newPrice);
changePriceCommonPrepareProcessor.checkChangeNecessary(skup, sellerOrderGoods.getGoodsPrice(), newPrice);
map.put(skup, skupDto);
}
return map;
... ...
package com.yohoufo.order.service.seller.processor;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* Created by chao.chen on 2019/3/20.
*/
@Service
public class ChangePriceCommonPrepareProcessor {
private final Logger logger = LoggerUtils.getSellerOrderLogger();
public void checkChangeNecessary(Integer skup, BigDecimal oldPrice, BigDecimal newPrice){
if (oldPrice.compareTo(newPrice) == 0) {
logger.warn("skup:{} goodsPrice:{} and newPrice:{} must not be equals",
skup, oldPrice, newPrice);
throw new UfoServiceException(401, "前后价格没有变化");
}
}
}
... ...
... ... @@ -27,7 +27,6 @@ import java.util.stream.Collectors;
public class ChangePricePrepareProcessor extends AbsEntryChangePricePrepareProcessor<BatchChangePriceReq> {
@Override
public ChangePricePrepareDTO checkAndAcquire(BatchChangePriceReq req) {
String skupList = req.getSkupList();
... ... @@ -76,7 +75,7 @@ public class ChangePricePrepareProcessor extends AbsEntryChangePricePrepareProce
SellerOrderGoods sellerOrderGoods = skupOfSalingMap.get(skup).getSellerOrderGoods();
//校验价格
checkChangeNecessary(skup, sellerOrderGoods.getGoodsPrice(), newPrice);
changePriceCommonPrepareProcessor.checkChangeNecessary(skup, sellerOrderGoods.getGoodsPrice(), newPrice);
map.put(skup, skupOfSalingMap.get(skup));
}
return map;
... ... @@ -100,8 +99,4 @@ public class ChangePricePrepareProcessor extends AbsEntryChangePricePrepareProce
return batchNo;
}
@Override
protected Logger getLogger() {
return logger;
}
}
... ...
... ... @@ -10,11 +10,14 @@ import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.order.model.SellerOrderContext;
import com.yohoufo.order.model.dto.ImPrdNode;
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.service.impl.SkupService;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.PublishPrepareProcessor;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.service.seller.PublishProcessor;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
... ... @@ -24,17 +27,16 @@ import java.util.Objects;
* Created by chao.chen on 2019/3/22.
*/
@Service
public class ImportPublishPrepareProcessor extends AbsPublishPrepareProcessor<ImPrdNode,SellerOrderContext>
implements PublishPrepareProcessor<ImPrdNode,SellerOrderContext>
public class ImportPublishProcessor
implements PublishProcessor<ImPrdNode,SellerOrderContext>
{
Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
OrderComputeProvider orderComputeProvider;
@Override
protected Logger getLogger() {
return logger;
}
@Autowired
private SkupService skupService;
@Override
... ... @@ -86,7 +88,7 @@ public class ImportPublishPrepareProcessor extends AbsPublishPrepareProcessor<Im
//context.setBackHiddenAddress(hiddenBackAddress);
//step 1: rpc get product detail by storage id
//ufo.product.storage.data
GoodsInfo goodsInfo = getProductDetail(context);
GoodsInfo goodsInfo = skupService.getProductDetail(uid, storageId, salePrice, skupType);
//step 2: generate skup ,action :set price status(unsaleable)
if (Objects.isNull(goodsInfo)){
logger.warn("in buildImportPrdCxt storageId not exist in prd service , uid {}, storageId {}", uid, storageId);
... ...
... ... @@ -8,6 +8,11 @@ import com.yohobuy.ufo.model.order.common.SkupStatus;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.NESChangePriceReq;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.common.utils.BigDecimalHelper;
import com.yohoufo.dal.order.BuyerOrderGoodsMapper;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.BuyerOrderGoods;
import com.yohoufo.dal.order.model.SellerOrder;
... ... @@ -17,10 +22,12 @@ import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.model.dto.SkupDto;
import com.yohoufo.order.model.request.PrdQueryReq;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
... ... @@ -35,9 +42,29 @@ import java.util.stream.Collectors;
* Created by chao.chen on 2019/3/21.
*/
@Service
public class NESChangePricePrepareProcessor extends AbsChangePricePrepareProcessor {
public class NESChangePricePrepareProcessor {
protected final Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
BuyerOrderGoodsMapper buyerOrderGoodsMapper;
@Autowired
BuyerOrderMapper buyerOrderMapper;
@Autowired
SellerOrderMapper sellerOrderMapper;
@Autowired
SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
OrderComputeProvider orderComputeProvider;
@Autowired
private ChangePriceCommonPrepareProcessor changePriceCommonPrepareProcessor;
public void checkGoodsStatus(SellerOrderGoods psog){
if (SkupStatus.CAN_SELL.getCode() != psog.getStatus().intValue()){
... ... @@ -83,9 +110,7 @@ public class NESChangePricePrepareProcessor extends AbsChangePricePrepareProcess
BigDecimal salePrice = priceComputePrepareProcessor.checkAndAcquireSalePrice(req.getPrice(), skupType);
BigDecimal preSalePrice = psog.getGoodsPrice();
//check old price vs new price
checkChangeNecessary(skup, preSalePrice, salePrice);
changePriceCommonPrepareProcessor.checkChangeNecessary(skup, preSalePrice, salePrice);
PrdPrice prdPrice;
int storageId = psog.getStorageId();
PrdQueryReq pqr = PrdQueryReq.builder()
... ... @@ -103,7 +128,7 @@ public class NESChangePricePrepareProcessor extends AbsChangePricePrepareProcess
SellerOrder sellerOrder = sellerOrderMapper.selectBySkup(psog.getId());
BigDecimal sourceEM = sellerOrder.getEarnestMoney();
BigDecimal targetEM = computeResult.getEarnestMoney().getEarnestMoney();
BigDecimal diffEarnestMoney = calDiffOfEM(sourceEM,targetEM);
BigDecimal diffEarnestMoney = BigDecimalHelper.calDiff(sourceEM,targetEM);
//build one skup Map
Map<Integer, SkupDto> skupMap = Maps.newHashMapWithExpectedSize(1);
... ... @@ -123,10 +148,7 @@ public class NESChangePricePrepareProcessor extends AbsChangePricePrepareProcess
.build();
}
@Override
protected Logger getLogger() {
return logger;
}
SkupDto checkExistWaitingBuyerPay(SellerOrderGoods psog){
List<Integer> skups = Lists.newArrayListWithCapacity(1);
... ...
... ... @@ -8,6 +8,8 @@ import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.NESChangePriceReq;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohoufo.order.common.Payment;
... ... @@ -17,8 +19,10 @@ import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.model.dto.SkupDto;
import com.yohoufo.order.model.request.PrdQueryReq;
import com.yohoufo.order.service.impl.SellerAddressService;
import com.yohoufo.order.service.impl.SkupService;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.PublishPrepareProcessor;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.service.seller.PublishProcessor;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import org.slf4j.Logger;
... ... @@ -32,11 +36,18 @@ import java.util.Objects;
* Created by chao.chen on 2019/3/22.
*/
@Service
public class NESChangePricePublishPrepareProcessor extends AbsPublishPrepareProcessor<NESChangePriceReq, SellerOrderContext>
implements PublishPrepareProcessor<NESChangePriceReq, SellerOrderContext> {
public class NESChangePricePublishProcessor
implements PublishProcessor<NESChangePriceReq, SellerOrderContext> {
final Logger logger = LoggerUtils.getSellerOrderLogger();
@Autowired
SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
OrderComputeProvider orderComputeProvider;
@Autowired
private NESChangePricePrepareProcessor nesChangePricePrepareProcessor;
... ... @@ -44,6 +55,15 @@ public class NESChangePricePublishPrepareProcessor extends AbsPublishPrepareProc
@Autowired
private SellerAddressService sellerAddressService;
@Autowired
private SkupService skupService;
@Autowired
SellerOrderMapper sellerOrderMapper;
@Autowired
private ChangePriceCommonPrepareProcessor changePriceCommonPrepareProcessor;
@Override
public NESCPOrderContext buildPublishCtx(NESChangePriceReq im) {
return buildSellerOrderContext(im);
... ... @@ -87,7 +107,7 @@ public class NESChangePricePublishPrepareProcessor extends AbsPublishPrepareProc
BigDecimal salePrice = priceComputePrepareProcessor.checkAndAcquireSalePrice(req.getPrice(), skupType);
BigDecimal preSalePrice = psog.getGoodsPrice();
//check old price vs new price
checkChangeNecessary(skup, preSalePrice, salePrice);
changePriceCommonPrepareProcessor.checkChangeNecessary(skup, preSalePrice, salePrice);
PrdPrice prdPrice;
int storageId = psog.getStorageId();
PrdQueryReq pqr = PrdQueryReq.builder()
... ... @@ -121,7 +141,7 @@ public class NESChangePricePublishPrepareProcessor extends AbsPublishPrepareProc
context.setSkupType(skupType);
//step 1: rpc get product detail by storage id
//ufo.product.storage.data
GoodsInfo goodsInfo = getProductDetail(context);
GoodsInfo goodsInfo = skupService.getProductDetail(uid, storageId, salePrice, skupType);
//step 2: generate skup ,action :set price status(unsaleable)
if (Objects.isNull(goodsInfo)){
logger.warn("in buildSellerOrderContext storageId not exist in prd service , uid {}, storageId {}", uid, storageId);
... ... @@ -138,8 +158,5 @@ public class NESChangePricePublishPrepareProcessor extends AbsPublishPrepareProc
return context;
}
@Override
protected Logger getLogger() {
return this.logger;
}
}
... ...
... ... @@ -2,24 +2,21 @@ package com.yohoufo.order.service.seller.processor;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.GoodsSize;
import com.yohobuy.ufo.model.order.bo.GoodsInfo;
import com.yohobuy.ufo.model.order.bo.PrdPrice;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.SellerOrderSubmitReq;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohobuy.ufo.model.response.StorageDataResp;
import com.yohoufo.common.exception.GatewayException;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.common.utils.AddressUtil;
import com.yohoufo.order.model.SellerOrderContext;
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.model.request.PrdQueryReq;
import com.yohoufo.order.service.proxy.ProductProxyService;
import com.yohoufo.order.service.impl.SkupService;
import com.yohoufo.order.service.proxy.UserProxyService;
import com.yohoufo.order.service.seller.OrderComputeHandler;
import com.yohoufo.order.service.seller.OrderComputeProvider;
import com.yohoufo.order.service.seller.PublishPrepareProcessor;
import com.yohoufo.order.service.seller.PublishProcessor;
import com.yohoufo.order.utils.AddressHelper;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
... ... @@ -34,19 +31,22 @@ import java.util.Objects;
* Created by chao.chen on 2018/11/19.
*/
@Service
public class SellerOrderPrepareProcessor extends AbsPublishPrepareProcessor<SellerOrderSubmitReq, SellerOrderContext>
implements PublishPrepareProcessor<SellerOrderSubmitReq, SellerOrderContext> {
public class SellerOrderPrepareProcessor
implements PublishProcessor<SellerOrderSubmitReq, SellerOrderContext> {
private final Logger log = LoggerUtils.getSellerOrderLogger();
@Autowired
private UserProxyService userProxyService;
//@Autowired
//private OrderComputeProvider orderComputeProvider;
@Autowired
private SkupService skupService;
@Autowired
private PriceComputePrepareProcessor priceComputePrepareProcessor;
//@Autowired
//private PriceComputePrepareProcessor priceComputePrepareProcessor;
@Autowired
private OrderComputeProvider orderComputeProvider;
public SellerOrderContext buildPublishPrdCtx(SellerOrderSubmitReq req) {
SellerOrderContext ctx = buildSellerOrderContext(req);
... ... @@ -121,7 +121,7 @@ public class SellerOrderPrepareProcessor extends AbsPublishPrepareProcessor<Sell
context.setSkupType(skupType);
//step 1: rpc get product detail by storage id
//ufo.product.storage.data
GoodsInfo goodsInfo = getProductDetail(context);
GoodsInfo goodsInfo = skupService.getProductDetail(uid, storageId, salePrice, skupType);
//step 2: generate skup ,action :set price status(unsaleable)
if (Objects.isNull(goodsInfo)){
log.warn("in buildSellerOrderContext storageId not exist in prd service , uid {}, storageId {}", uid, storageId);
... ... @@ -160,11 +160,9 @@ public class SellerOrderPrepareProcessor extends AbsPublishPrepareProcessor<Sell
@Override
public SellerOrderContext buildPublishCtx(SellerOrderSubmitReq req) {
return buildPublishPrdCtx(req);
}
@Override
protected Logger getLogger() {
return this.log;
}
}
... ...
... ... @@ -87,6 +87,35 @@ public class ProductController {
return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("product data").build();
}
@ApiOperation(name = "ufo.product.secondHand.list", desc = "二手商品列表")
@IgnoreSession
@RequestMapping(params = "method=ufo.product.secondHand.list")
@Cachable(expire = 180)
public ApiResponse querySecondHandProductInfo(
@RequestParam(value = "product_id") Integer productId
, @RequestParam(value = "isJump") boolean isJump
, @RequestParam(value = "limit", required = false)Integer limit
, @RequestParam(value = "page", required = false)Integer page
) {
LOG.info("in method=ufo.product.secondHand.list product_id={}, isJump={}, limit={}, page ={}", productId, isJump, limit, page);
List<SecondHandProductResp> resp = productService.querySecondHandProductInfo(productId, isJump, limit, page);
if(isJump && resp.size()==1) {
return new ApiResponse.ApiResponseBuilder().data(resp.get(0)).code(200).message("second hand product data").build();
} else {
return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("second hand product data").build();
}
}
@ApiOperation(name = "ufo.product.secondHand.data", desc = "二手商品详情")
@IgnoreSession
@RequestMapping(params = "method=ufo.product.secondHand.data")
@Cachable(expire = 180)
public ApiResponse querySecondHandProductInfo( @RequestParam(value = "skup") Integer skup) {
LOG.info("in method=ufo.product.secondHand.data skup={}", skup);
SecondHandProductResp resp = productService.querySecondHandProductInfo(skup);
return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("second hand product data").build();
}
@ApiOperation(name = "ufo.product.sort.template", desc = "商品列表")
@IgnoreSignature
@IgnoreSession
... ...
package com.yohoufo.product.response;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class SecondHandProductResp {
private Integer productId;
private String productName;
private String productCode;
private Integer skup;
private String image;
private List<String> imageList;
private String price;
private String newProductPrice;
private String savePrice;
private String sizeName;
private String colorName;
private String describeInfo;
private List<String> flawInfo;
private String flawAttr;
/** 全新瑕疵,二手. */
private String sechondHandTypeName;
}
... ...
... ... @@ -95,4 +95,8 @@ public interface ProductService {
void addSales(Integer skup);
void changeOneSkupHideStatus(Integer skup, int status);
List<SecondHandProductResp> querySecondHandProductInfo(Integer productId, boolean isJump, Integer limit, Integer page);
SecondHandProductResp querySecondHandProductInfo(Integer skup);
}
... ...
... ... @@ -19,6 +19,7 @@ import com.yohoufo.dal.product.*;
import com.yohoufo.dal.product.model.*;
import com.yohoufo.product.model.*;
import com.yohoufo.product.response.*;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
... ... @@ -90,6 +91,15 @@ public class ProductServiceImpl implements ProductService {
private ProductSalesMapper productSalesMapper;
@Autowired
private SecondhandImagesMapper secondhandImagesMapper;
@Autowired
private SecondhandInfoMapper secondhandInfoMapper;
@Autowired
private SecondhandFlawMapper secondhandFlawMapper;
@Autowired
private SellerStoreMapUtil sellerStoreMapUtil;
@Override
... ... @@ -124,6 +134,12 @@ public class ProductServiceImpl implements ProductService {
BigDecimal preSaleLeastPrice = preSaleLeastPriceList.stream().min((p1, p2) -> (p1.compareTo(p2))).get();
productInfo.setPreSaleLeastPrice(preSaleLeastPrice);
}
List<BigDecimal> secondHandLeastPriceList = goodsSizes.stream().map(GoodsSize::getSecondHandLeastPrice).filter(Objects::nonNull).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(secondHandLeastPriceList)) {
BigDecimal secondHandLeastPrice = secondHandLeastPriceList.stream().min((p1, p2) -> (p1.compareTo(p2))).get();
productInfo.setSecondHandLeastPrice(secondHandLeastPrice);
}
goodsSizes.sort(Comparator.comparing(GoodsSize::getOrderBy));
}
}
... ... @@ -355,7 +371,7 @@ public class ProductServiceImpl implements ProductService {
@Override
public void sellerUpdateStatus(StoragePriceBo skupBo) {
// 卖家修改状态:*1:可售(支付保证金),2:取消支付保证金,3:超时未支付保证金,4:支付保证金后取消售卖
// 卖家修改状态:*1:可售(支付保证金),2:取消支付保证金,3:超时未支付保证金,4:支付保证金后取消售卖,10:待审核
if (skupBo == null) {
throw new ServiceException(400, "skupBo为空!");
}
... ... @@ -365,8 +381,9 @@ public class ProductServiceImpl implements ProductService {
throw new ServiceException(400, "skup错误:" + skup);
}
int status;
if (skupBo.getStatus() == null || (status = skupBo.getStatus()) < 1 || status > 4) {
Integer status = skupBo.getStatus();
int[] validStatus = {1, 2, 3, 4, 10};
if (status == null || !ArrayUtils.contains(validStatus, status)) {
throw new ServiceException(400, "商品(status)错误:" + skupBo.getStatus());
}
... ... @@ -386,7 +403,7 @@ public class ProductServiceImpl implements ProductService {
throw new ServiceException(400, "商品(skup)状态已变更");
}
addStorageNum(skup, sp.getStorageId(), 1);
} else if (status == 2 || status == 3) {
} else if (status == 2 || status == 3 || status == 10) {
if (storagePriceMapper.updateStatus(skup, status, 0) == 0) {
throw new ServiceException(400, "商品(skup)状态已变更");
}
... ... @@ -689,6 +706,13 @@ public class ProductServiceImpl implements ProductService {
StoragePrice storagePrice = storagePriceMap.get(storage.getId() + "_0");
StoragePrice storagePricePre = storagePriceMap.get(storage.getId() + "_1");
StoragePrice storagePriceSecondNew = storagePriceMap.get(storage.getId() + "_5");
StoragePrice storagePriceSecondOld = storagePriceMap.get(storage.getId() + "_6");
StoragePrice storagePriceSecond = storagePriceSecondNew == null ? storagePriceSecondOld : storagePriceSecondNew;
if (storagePriceSecondOld != null && storagePriceSecondNew != null && storagePriceSecondOld.getPrice().compareTo(storagePriceSecondNew.getPrice()) < 0) {
storagePriceSecond = storagePriceSecondOld;
}
GoodsSize goodsSize = new GoodsSize();
goodsSize.setId(storage.getId());
goodsSize.setSizeId(storage.getSizeId());
... ... @@ -718,6 +742,11 @@ public class ProductServiceImpl implements ProductService {
goodsSize.setPreSaleStatus(storagePricePre == null ? null : storagePricePre.getStatus());
goodsSize.setPreSaleSkup(storagePricePre == null ? 0 : storagePricePre.getSkup());
goodsSize.setPreSaleStorageNum(goodsSize.getPreSaleSkup() == null || goodsSize.getPreSaleSkup() == 0 ? 0 : 1);
goodsSize.setSecondHandLeastPrice(storagePriceSecond == null ? null : storagePriceSecond.getPrice());
goodsSize.setSecondHandStatus(storagePriceSecond == null ? null : storagePriceSecond.getStatus());
goodsSize.setSecondHandSkup(storagePriceSecond == null ? 0 : storagePriceSecond.getSkup());
goodsSize.setSecondHandStorageNum(goodsSize.getSecondHandSkup() == null || goodsSize.getSecondHandSkup() == 0 ? 0 : 1);
}
}
}
... ... @@ -1151,4 +1180,89 @@ public class ProductServiceImpl implements ProductService {
}
}
@Override
public List<SecondHandProductResp> querySecondHandProductInfo(Integer productId, boolean isJump, Integer limit, Integer page) {
List<StoragePrice> spList = storagePriceMapper.selectSecondByProductId(productId, limit, page);
if (spList.isEmpty()) {
return new ArrayList<>();
}
if (spList.size() == 1 && isJump) {
return Arrays.asList(querySecondHandProductInfo(spList.get(0).getSkup()));
}
List<Storage> storageList = storageMapper.selectByIds(spList.stream().map(StoragePrice::getStorageId).collect(Collectors.toList()));
List<Size> sizeList = sizeMapper.selectByIds(storageList.stream().map(Storage::getSizeId).collect(Collectors.toList()));
List<SecondhandImages> secondhandImagesList = secondhandImagesMapper.selectDefaultBySkupList(spList.stream().map(StoragePrice::getSkup).collect(Collectors.toList()));
Map<Integer, Storage> storageMap = storageList.stream().collect(Collectors.toMap(Storage::getId, Function.identity()));
Map<Integer, Size> sizeMap = sizeList.stream().collect(Collectors.toMap(Size::getId, Function.identity()));
Map<Integer, SecondhandImages> secondhandImagesMap = secondhandImagesList.stream().collect(Collectors.toMap(SecondhandImages::getSkup, Function.identity()));
List<SecondHandProductResp> resp = new ArrayList<>();
for (StoragePrice sp : spList) {
SecondHandProductResp bean = new SecondHandProductResp();
bean.setSkup(sp.getSkup());
bean.setPrice(sp.getPrice().toString());
bean.setSechondHandTypeName(sp.getPreSaleFlag() == 5 ? "全新瑕疵" : "二手");
Storage storage = storageMap.get(sp.getStorageId());
if (storage != null) {
Size size = sizeMap.get(storage.getSizeId());
if (size != null) {
bean.setSizeName(size.getSizeName() + "码");
}
}
if (StringUtils.isBlank(bean.getSizeName())) {
bean.setSizeName("");
}
SecondhandImages images = secondhandImagesMap.get(sp.getSkup());
if (images != null) {
bean.setImage(images.getImageUrl());
}
if (StringUtils.isBlank(bean.getImage())) {
bean.setImage("");
}
resp.add(bean);
}
return resp;
}
public SecondHandProductResp querySecondHandProductInfo(Integer skup) {
StoragePrice sp = storagePriceMapper.selectBySkup(skup);
if (sp == null) {
return null;
}
SecondHandProductResp resp = new SecondHandProductResp();
Integer storageId = sp.getStorageId();
Integer productId = sp.getProductId();
Storage storage = storageMapper.selectByPrimaryKey(storageId);
Goods goods = goodsMapper.selectByPrimaryKey(storage.getGoodsId());
Product product = productMapper.selectByPrimaryKey(productId);
Size size = sizeMapper.selectByPrimaryKey(storage.getSizeId());
List<SecondhandImages> secondhandImagesList = secondhandImagesMapper.selectBySkup(skup);
SecondhandInfo secondhandInfo = secondhandInfoMapper.selectBySkup(skup);
resp.setProductId(productId);
List<String> imageList = new ArrayList<>();
for (SecondhandImages image : secondhandImagesList) {
if (StringUtils.equals(image.getIsDefault(), "Y")) {
resp.setImage(image.getImageUrl());
} else {
imageList.add(image.getImageUrl());
}
}
resp.setImageList(imageList);
resp.setPrice(sp.getPrice().toString());
resp.setSizeName(size.getSizeName() + "码");
resp.setProductName(product.getProductName());
resp.setProductCode(product.getProductCode());
resp.setColorName(goods.getGoodsName());
resp.setFlawAttr(secondhandInfo.getFlawAttr());
resp.setDescribeInfo(secondhandInfo.getDescribeInfo());
resp.setSechondHandTypeName(sp.getPreSaleFlag() == 5 ? "全新瑕疵" : "二手");
if (secondhandInfo != null && StringUtils.isNotBlank(secondhandInfo.getFlawId())) {
List<SecondhandFlaw> flaws = secondhandFlawMapper.selectByIds(secondhandInfo.getFlawId());
resp.setFlawInfo(flaws.stream().map(SecondhandFlaw::getName).collect(Collectors.toList()));
}
return resp;
}
}
... ...