@ -155,14 +155,19 @@ public class ItemServiceImpl implements ItemService {
// 设置价格单元
model . setPriceUnit ( " 元/日 " ) ;
//设置商品ID
String timestamp = LocalDateTime . now ( ) . format ( DateTimeFormatter . ofPattern ( " yyyyMMddHHmmss " ) ) ;
String uuidSuffix = UUID . randomUUID ( ) . toString ( ) . replace ( " - " , " " ) . substring ( 0 , 6 ) . toUpperCase ( ) ;
String outItemId = " OI " + timestamp + uuidSuffix ;
model . setOutItemId ( outItemId ) ;
rentRuleItemvo . setOutItemId ( outItemId ) ;
rentRuleItemvo . setOutSkuId ( outItemId + " _sku " ) ;
//设置商品详情页路径
model . setPath ( " alipays://platformapi/startapp?appId=2021004169641281&page=pages/rentGoodsDetail/index?outItemId= " + outItemId ) ;
rentRuleItemvo . setPagePath ( " alipays://platformapi/startapp?appId=2021004169641281&page=pages/rentGoodsDetail/index?outItemId= " + outItemId ) ;
//设置商品状态
model . setSaleStatus ( " AVAILABLE " ) ;
//sku_attrs
model . setSkus ( getItemSkus ( rentRuleItem , model . getImageList ( ) , model . getItemType ( ) ) ) ;
@ -198,18 +203,65 @@ public class ItemServiceImpl implements ItemService {
@Override
public OpenResponse < String > modifyItem ( String para m) {
public OpenResponse < String > modifyItem ( RentRuleItem rentRuleIte m) {
return AlipayApiTemplate . execute ( new AlipayApiCallback < String , AlipayOpenAppItemModifyResponse > ( ) {
@Override
public AlipayOpenAppItemModifyResponse process ( ) throws AlipayApiException {
AlipayOpenAppItemModifyModel itemCreateRequest = JSON . parseObject ( param , AlipayOpenAppItemModifyModel . class ) ;
// 构造请求参数以调用接口
AlipayOpenAppItemModifyRequest request = new AlipayOpenAppItemModifyRequest ( ) ;
AlipayOpenAppItemModifyModel model = itemCreateRequest ;
AlipayOpenAppItemModifyModel model = new AlipayOpenAppItemModifyModel ( ) ;
RentRuleItem rentRuleItemvo = rentRuleItem ;
// 设置平台类目
model . setCategoryId ( " C001684401 " ) ;
// 设置商品名称由品牌、型号、电池规格、租赁类型、套餐名称拼接
String title = rentRuleItem . getBrandName ( ) + rentRuleItem . getModelName ( ) + " _ " + rentRuleItem . getCategoryName ( ) + " _ " + rentRuleItem . getRentType ( ) + rentRuleItem . getRuleName ( ) ;
rentRuleItemvo . setItemDesc ( title ) ;
// 设置商品名称
model . setTitle ( title ) ;
// 设置导购描述
model . setDesc ( title ) ;
// 设置平台类目
model . setCategoryId ( " C001684401 " ) ;
// 设置商品主图
String imgStr = imageUploadService . uploadAndReturnId ( rentRuleItem . getImage ( ) , " ITEM_HEAD_IMG " ) ;
model . setHeadImg ( imgStr ) ;
rentRuleItemvo . setImage ( imgStr ) ;
// 设置商品模版类型
model . setItemType ( " 2 " ) ;
//sku_attrs
// 设置价格单元
model . setPriceUnit ( " 元/日 " ) ;
//设置商品ID
String timestamp = LocalDateTime . now ( ) . format ( DateTimeFormatter . ofPattern ( " yyyyMMddHHmmss " ) ) ;
String uuidSuffix = UUID . randomUUID ( ) . toString ( ) . replace ( " - " , " " ) . substring ( 0 , 6 ) . toUpperCase ( ) ;
String outItemId = " OI " + timestamp + uuidSuffix ;
model . setOutItemId ( outItemId ) ;
rentRuleItemvo . setOutItemId ( outItemId ) ;
rentRuleItemvo . setOutSkuId ( outItemId + " _sku " ) ;
//设置商品详情页路径
model . setPath ( " alipays://platformapi/startapp?appId=2021004169641281&page=pages/rentGoodsDetail/index?outItemId= " + outItemId ) ;
rentRuleItemvo . setPagePath ( " alipays://platformapi/startapp?appId=2021004169641281&page=pages/rentGoodsDetail/index?outItemId= " + outItemId ) ;
//设置商品状态
model . setSaleStatus ( " AVAILABLE " ) ;
//sku_attrs
model . setSkus ( modifyItemSkus ( rentRuleItem ) ) ;
// 设置属性列表
model . setAttrs ( getItemAttrs ( rentRuleItem , model . getImageList ( ) , model . getItemType ( ) ) ) ;
RentRuleItem res = rentRuleItemMapper . selectItemByFourIds ( rentRuleItem . getBatteryRuleId ( ) , rentRuleItem . getCarRuleId ( ) , rentRuleItem . getCarModelId ( ) , rentRuleItem . getBrandId ( ) ) ;
if ( res ! = null ) {
rentRuleItemMapper . updateItemIdByOutItemId ( rentRuleItemvo ) ;
} else {
rentRuleItemMapper . insertByFourId ( rentRuleItemvo ) ;
}
logger . info ( " 属性列表: " + JSON . toJSONString ( model ) ) ;
request . setBizModel ( model ) ;
@ -471,6 +523,9 @@ public class ItemServiceImpl implements ItemService {
// 是否可买断
appItemAttrVO . setAttrValue ( " 1 " ) ;
break ;
case " 收货方式 " :
appItemAttrVO . setAttrValue ( " 自提 " ) ;
break ;
}
if ( ! StringUtils . isEmpty ( appItemAttrVO . getAttrValue ( ) ) ) {
attrs . add ( appItemAttrVO ) ;
@ -503,7 +558,7 @@ public class ItemServiceImpl implements ItemService {
// sku.setOriginalPrice(originalPriceInCents);
// 设置库存
sku . setStockNum ( String . valueOf ( 100L ) ) ;
sku . setStockNum ( String . valueOf ( 999999 ) ) ;
// 设置价格单元
sku . setPriceUnit ( " 元/日 " ) ;
@ -522,7 +577,9 @@ public class ItemServiceImpl implements ItemService {
config . setCustomLease ( " 0 " ) ;
config . setSlopeFormula ( " DEFAULT_SLOPE_FORMULA " ) ;
config . setDurationUnit ( " 日 " ) ;
config . setBuyoutPrice ( " 10000 " ) ;
//买断价10000元*100 单位分
config . setBuyoutPrice ( " 1000000 " ) ;
config . setPriceUnit ( " 元 " ) ;
int rentalDays = 1 ;
@ -535,7 +592,7 @@ public class ItemServiceImpl implements ItemService {
for ( int i = 1 ; i < 4 ; i + + ) {
RentCommodityConfig . DurationPrice durationPrice = new RentCommodityConfig . DurationPrice ( ) ;
String val = i + " " ;
String val = i * 100 + " " ;
durationPrice . setDuration ( i * rentalDays + " " ) ;
durationPrice . setTotalSalePrice ( param . getRentalPrice ( )
. multiply ( new BigDecimal ( val ) )
@ -555,6 +612,87 @@ public class ItemServiceImpl implements ItemService {
return itemSkus ;
}
private List < ItemSkuVO > modifyItemSkus ( RentRuleItem param ) throws AlipayApiException {
List < ItemSkuVO > itemSkus = new ArrayList < > ( ) ;
ItemSkuVO sku = new ItemSkuVO ( ) ;
// 设置商家侧SKU ID, 需要全局唯一
sku . setOutSkuId ( param . getOutItemId ( ) + " _sku " ) ;
// 设置售卖状态
sku . setSaleStatus ( " AVAILABLE " ) ;
// 设置SKU类型为租赁
sku . setSkuType ( " RENT " ) ;
// 设置价格相关字段
Long rentalPriceInCents = param . getRentalPrice ( ) . multiply ( new BigDecimal ( 100 ) ) . setScale ( 0 , BigDecimal . ROUND_HALF_UP ) . longValue ( ) ;
// sku.setSalePrice(rentalPriceInCents.toString());
// // 设置原价为租赁价格的1.2倍
// Long originalPriceInCents = new BigDecimal(rentalPriceInCents)
// .multiply(new BigDecimal("1.2"))
// .setScale(0, BigDecimal.ROUND_HALF_UP)
// .longValue();
// sku.setOriginalPrice(originalPriceInCents);
// 设置库存
sku . setStockNum ( 999999L ) ;
// 设置价格单元
sku . setPriceUnit ( " 元/日 " ) ;
// 设置销售属性
List < ItemSkuAttrVO > skuAttrs = new ArrayList < > ( ) ;
// 添加租赁商品属性
ItemSkuAttrVO rentCommodityAttr = new ItemSkuAttrVO ( ) ;
rentCommodityAttr . setAttrKey ( " rent_commodity " ) ;
rentCommodityAttr . setAttrType ( " custom " ) ;
RentCommodityConfig config = new RentCommodityConfig ( ) ;
config . setName ( " 门店自提,租完归还 " ) ;
config . setDescription ( " 套餐说明 " ) ;
config . setCustomLease ( " 0 " ) ;
config . setSlopeFormula ( " DEFAULT_SLOPE_FORMULA " ) ;
config . setDurationUnit ( " 日 " ) ;
//买断价10000元*100 单位分
config . setBuyoutPrice ( " 1000000 " ) ;
config . setPriceUnit ( " 元 " ) ;
int rentalDays = 1 ;
if ( param . getRentalDays ( ) ! = null & & param . getRentalDays ( ) > 0 ) {
rentalDays = param . getRentalDays ( ) ;
}
// 创建时段价格列表根据基础价格创建3个时段价格
List < RentCommodityConfig . DurationPrice > durationPriceList = new ArrayList < > ( ) ;
for ( int i = 1 ; i < 4 ; i + + ) {
RentCommodityConfig . DurationPrice durationPrice = new RentCommodityConfig . DurationPrice ( ) ;
String val = i * 100 + " " ;
durationPrice . setDuration ( i * rentalDays + " " ) ;
durationPrice . setTotalSalePrice ( param . getRentalPrice ( )
. multiply ( new BigDecimal ( val ) )
. setScale ( 0 , BigDecimal . ROUND_HALF_UP ) . toString ( ) ) ;
durationPrice . setTotalOriginalPrice ( param . getRentalPrice ( )
. multiply ( new BigDecimal ( val ) )
. setScale ( 0 , BigDecimal . ROUND_HALF_UP ) . toString ( ) ) ;
durationPriceList . add ( durationPrice ) ;
}
config . setDurationPriceList ( durationPriceList ) ;
rentCommodityAttr . setAttrValue ( JSON . toJSONString ( config ) ) ;
// 根据实际情况设置
skuAttrs . add ( rentCommodityAttr ) ;
sku . setSkuAttrs ( skuAttrs ) ;
itemSkus . add ( sku ) ;
return itemSkus ;
}
@Override
public OpenResponse < AlipayOpenAppItemQueryResponse > queryItemDetail ( String itemId , String outItemId , long needEditSpu ) {
return AlipayApiTemplate . execute ( new AlipayApiCallback < AlipayOpenAppItemQueryResponse , AlipayOpenAppItemQueryResponse > ( ) {