From ee3e5778b1ec827a00c8cd1e3f9b471b1f7d824d Mon Sep 17 00:00:00 2001 From: eric <465889110@qq.com> Date: Thu, 4 Sep 2025 12:09:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=A5=97=E9=A4=90=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=95=86=E5=93=81=E5=B9=B6=E6=8C=81=E4=B9=85=E5=8C=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 + .../pay/alipay/controller/ItemController.java | 22 +- .../pay/alipay/po/RentCommodityConfig.java | 163 ++++++++ .../com/sczx/pay/alipay/po/RentRuleItem.java | 225 ++++++++--- .../alipay/service/ImageUploadService.java | 9 +- .../sczx/pay/alipay/service/ItemService.java | 4 - .../alipay/service/RentRuleItemService.java | 8 + .../service/impl/ImageUploadServiceImpl.java | 38 +- .../alipay/service/impl/ItemServiceImpl.java | 101 +++-- .../service/impl/RentRuleItemServiceImpl.java | 55 +++ .../sczx/pay/mapper/RentRuleItemMapper.java | 10 +- .../resources/mapper/RentRuleItemMapper.xml | 361 +++++++++++++----- 12 files changed, 790 insertions(+), 212 deletions(-) create mode 100644 src/main/java/com/sczx/pay/alipay/po/RentCommodityConfig.java create mode 100644 src/main/java/com/sczx/pay/alipay/service/RentRuleItemService.java create mode 100644 src/main/java/com/sczx/pay/alipay/service/impl/RentRuleItemServiceImpl.java diff --git a/pom.xml b/pom.xml index 4e07804..93ec073 100644 --- a/pom.xml +++ b/pom.xml @@ -242,6 +242,12 @@ 4.40.427.ALL + + net.coobird + thumbnailator + 0.4.17 + + diff --git a/src/main/java/com/sczx/pay/alipay/controller/ItemController.java b/src/main/java/com/sczx/pay/alipay/controller/ItemController.java index 8010424..672a163 100644 --- a/src/main/java/com/sczx/pay/alipay/controller/ItemController.java +++ b/src/main/java/com/sczx/pay/alipay/controller/ItemController.java @@ -1,7 +1,3 @@ -/** - * Alipay.com Inc. - * Copyright (c) 2004-2024 All Rights Reserved. - */ package com.sczx.pay.alipay.controller; import com.alipay.api.domain.AppxCategoryVO; @@ -12,6 +8,7 @@ import com.alipay.api.response.AlipayOpenAppItemTemplateQueryResponse; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.sczx.pay.alipay.po.RentRuleItem; import com.sczx.pay.alipay.service.ItemService; +import com.sczx.pay.alipay.service.RentRuleItemService; import com.sczx.pay.alipay.vo.ItemCreateRequest; import com.sczx.pay.alipay.vo.OpenResponse; import io.swagger.annotations.Api; @@ -22,11 +19,9 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; + -/** - * @author jishupei.jsp - * @version : ItemController, v0.1 2024年05月11日 2:45 下午 jishupei.jsp Exp $ - */ @Api(tags = "普通商品模块") @RestController @RequestMapping(value = "/item") @@ -35,6 +30,9 @@ public class ItemController { @Autowired private ItemService itemService; + @Autowired + private RentRuleItemService rentRuleItemService; + /** * 类目查询 * 获取叶子节点商品类目列表 @@ -131,4 +129,12 @@ public class ItemController { return itemService.shopQuery(); } + + @ApiOperation(value = "接收套餐数据并记录商品") + @GetMapping(value = "/sync/item") + public Map syncItem(@RequestParam(required = false) String brandId,@RequestParam(required = false) String carModelId, + @RequestParam(required = false) String carRuleId,@RequestParam(required = false) String batteryRuleId) { + return rentRuleItemService.syncItem(brandId, carModelId,carRuleId,batteryRuleId); + } + } diff --git a/src/main/java/com/sczx/pay/alipay/po/RentCommodityConfig.java b/src/main/java/com/sczx/pay/alipay/po/RentCommodityConfig.java new file mode 100644 index 0000000..437eb35 --- /dev/null +++ b/src/main/java/com/sczx/pay/alipay/po/RentCommodityConfig.java @@ -0,0 +1,163 @@ +package com.sczx.pay.alipay.po; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 租赁商品配置实体类 + */ +public class RentCommodityConfig { + + /** + * 商品名称 + */ + private String name; + + /** + * 商品描述 + */ + private String description; + + /** + * 是否自定义租赁 (0:否, 1:是) + */ + private String customLease; + + /** + * 斜率公式 + */ + private String slopeFormula; + + /** + * 时间单位 + */ + private String durationUnit; + + /** + * 买断价格 + */ + private String buyoutPrice; + + /** + * 价格单位 + */ + private String priceUnit; + + /** + * 时段价格列表 + */ + private List durationPriceList; + + // Getters and Setters + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getCustomLease() { + return customLease; + } + + public void setCustomLease(String customLease) { + this.customLease = customLease; + } + + public String getSlopeFormula() { + return slopeFormula; + } + + public void setSlopeFormula(String slopeFormula) { + this.slopeFormula = slopeFormula; + } + + public String getDurationUnit() { + return durationUnit; + } + + public void setDurationUnit(String durationUnit) { + this.durationUnit = durationUnit; + } + + public String getBuyoutPrice() { + return buyoutPrice; + } + + public void setBuyoutPrice(String buyoutPrice) { + this.buyoutPrice = buyoutPrice; + } + + public String getPriceUnit() { + return priceUnit; + } + + public void setPriceUnit(String priceUnit) { + this.priceUnit = priceUnit; + } + + public List getDurationPriceList() { + return durationPriceList; + } + + public void setDurationPriceList(List durationPriceList) { + this.durationPriceList = durationPriceList; + } + + /** + * 时段价格实体类 + */ + public static class DurationPrice { + + /** + * 时段 + */ + private String duration; + + /** + * 总原价 + */ + private String totalOriginalPrice; + + /** + * 总售价 + */ + private String totalSalePrice; + + // Getters and Setters + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public String getTotalOriginalPrice() { + return totalOriginalPrice; + } + + public void setTotalOriginalPrice(String totalOriginalPrice) { + this.totalOriginalPrice = totalOriginalPrice; + } + + public String getTotalSalePrice() { + return totalSalePrice; + } + + public void setTotalSalePrice(String totalSalePrice) { + this.totalSalePrice = totalSalePrice; + } + } +} diff --git a/src/main/java/com/sczx/pay/alipay/po/RentRuleItem.java b/src/main/java/com/sczx/pay/alipay/po/RentRuleItem.java index b32e350..f6a0453 100644 --- a/src/main/java/com/sczx/pay/alipay/po/RentRuleItem.java +++ b/src/main/java/com/sczx/pay/alipay/po/RentRuleItem.java @@ -11,179 +11,304 @@ import java.math.BigDecimal; @Data public class RentRuleItem implements Serializable { private static final long serialVersionUID = 1L; - + /** * 车型ID */ private Long id; - + /** - * 商户商品ID + * 外部商品ID */ private String outItemId; - + /** * 阿里商品ID */ private String aliItemId; - + + /** + * 外部SKU ID + */ + private String outSkuId; + + /** + * 商品描述 + */ + private String itemDesc; + /** * 品牌名称 */ private String brandName; - + /** * 车型名称 */ private String modelName; - + /** * 电池类别名称 */ private String categoryName; - + /** - * 字典标签 + * 租赁天数(当类型为"按天数"时使用) */ - private String dictLabel; - + private Integer rentalDays; + + /** + * 套餐类型 + */ + private String rentType; + /** * 套餐名称 */ private String ruleName; - + + + private String pagePath; /** * 车型照片 */ private String image; - + + /** + * 车型照片列表1 + */ + private String imageList1; + + /** + * 车型照片列表2 + */ + private String imageList2; + + /** + * 车型照片列表3 + */ + private String imageList3; + + /** + * 是否支持免押(0不支持 1支持) + */ + private String depositFree; + + /** + * 押金价格(元) + */ + private BigDecimal depositPrice; + + /** + * 租车价格(元) + */ + private BigDecimal rentalPrice; + /** * 电池规则ID */ private Long batteryRuleId; - + /** * 车辆规则ID */ private Long carRuleId; - + /** * 车型ID */ private Long carModelId; - + /** * 品牌ID */ private Long brandId; - private BigDecimal rentalPrice; - - private Integer rentalDays; - // Getters and Setters - + public Long getId() { return id; } - + public void setId(Long id) { this.id = id; } - + public String getOutItemId() { return outItemId; } - + public void setOutItemId(String outItemId) { this.outItemId = outItemId; } - + public String getAliItemId() { return aliItemId; } - + public void setAliItemId(String aliItemId) { this.aliItemId = aliItemId; } - + + public String getOutSkuId() { + return outSkuId; + } + + public void setOutSkuId(String outSkuId) { + this.outSkuId = outSkuId; + } + + public String getItemDesc() { + return itemDesc; + } + + public void setItemDesc(String itemDesc) { + this.itemDesc = itemDesc; + } + public String getBrandName() { return brandName; } - + public void setBrandName(String brandName) { this.brandName = brandName; } - + public String getModelName() { return modelName; } - + public void setModelName(String modelName) { this.modelName = modelName; } - + public String getCategoryName() { return categoryName; } - + public void setCategoryName(String categoryName) { this.categoryName = categoryName; } - - public String getDictLabel() { - return dictLabel; + + public Integer getRentalDays() { + return rentalDays; } - - public void setDictLabel(String dictLabel) { - this.dictLabel = dictLabel; + + public void setRentalDays(Integer rentalDays) { + this.rentalDays = rentalDays; } - + + public String getRentType() { + return rentType; + } + + public void setRentType(String rentType) { + this.rentType = rentType; + } + public String getRuleName() { return ruleName; } - + public void setRuleName(String ruleName) { this.ruleName = ruleName; } - + public String getImage() { return image; } - + public void setImage(String image) { this.image = image; } - + + public String getImageList1() { + return imageList1; + } + + public void setImageList1(String imageList1) { + this.imageList1 = imageList1; + } + + public String getImageList2() { + return imageList2; + } + + public void setImageList2(String imageList2) { + this.imageList2 = imageList2; + } + + public String getImageList3() { + return imageList3; + } + + public void setImageList3(String imageList3) { + this.imageList3 = imageList3; + } + + public String getDepositFree() { + return depositFree; + } + + public void setDepositFree(String depositFree) { + this.depositFree = depositFree; + } + + public BigDecimal getDepositPrice() { + return depositPrice; + } + + public void setDepositPrice(BigDecimal depositPrice) { + this.depositPrice = depositPrice; + } + + public BigDecimal getRentalPrice() { + return rentalPrice; + } + + public void setRentalPrice(BigDecimal rentalPrice) { + this.rentalPrice = rentalPrice; + } + public Long getBatteryRuleId() { return batteryRuleId; } - + public void setBatteryRuleId(Long batteryRuleId) { this.batteryRuleId = batteryRuleId; } - + public Long getCarRuleId() { return carRuleId; } - + public void setCarRuleId(Long carRuleId) { this.carRuleId = carRuleId; } - + public Long getCarModelId() { return carModelId; } - + public void setCarModelId(Long carModelId) { this.carModelId = carModelId; } - + public Long getBrandId() { return brandId; } - + public void setBrandId(Long brandId) { this.brandId = brandId; } + + public String getPagePath() { + return pagePath; + } + + public void setPagePath(String pagePath) { + this.pagePath = pagePath; + } + + } diff --git a/src/main/java/com/sczx/pay/alipay/service/ImageUploadService.java b/src/main/java/com/sczx/pay/alipay/service/ImageUploadService.java index 70dbbda..d24973e 100644 --- a/src/main/java/com/sczx/pay/alipay/service/ImageUploadService.java +++ b/src/main/java/com/sczx/pay/alipay/service/ImageUploadService.java @@ -1,7 +1,3 @@ -/** - * Alipay.com Inc. - * Copyright (c) 2004-2024 All Rights Reserved. - */ package com.sczx.pay.alipay.service; import com.alipay.api.AlipayApiException; @@ -12,10 +8,7 @@ import com.sczx.pay.alipay.vo.OpenResponse; import java.util.List; -/** - * @author jishupei.jsp - * @version : ImageUploadService, v0.1 2024年03月14日 10:38 上午 jishupei.jsp Exp $ - */ + public interface ImageUploadService { /** * 上传图片,返回imageId diff --git a/src/main/java/com/sczx/pay/alipay/service/ItemService.java b/src/main/java/com/sczx/pay/alipay/service/ItemService.java index 3b23d09..f65969b 100644 --- a/src/main/java/com/sczx/pay/alipay/service/ItemService.java +++ b/src/main/java/com/sczx/pay/alipay/service/ItemService.java @@ -10,10 +10,6 @@ import com.sczx.pay.alipay.vo.OpenResponse; import java.util.List; -/** - * @author jishupei.jsp - * @version : ItemService, v0.1 2024年05月11日 2:28 下午 jishupei.jsp Exp $ - */ public interface ItemService { /** * 获取叶子节点商品类目列表(默认获取类目状态为资质已开通的) diff --git a/src/main/java/com/sczx/pay/alipay/service/RentRuleItemService.java b/src/main/java/com/sczx/pay/alipay/service/RentRuleItemService.java new file mode 100644 index 0000000..4c28450 --- /dev/null +++ b/src/main/java/com/sczx/pay/alipay/service/RentRuleItemService.java @@ -0,0 +1,8 @@ +package com.sczx.pay.alipay.service; + +import java.util.Map; + +public interface RentRuleItemService { + + Map syncItem(String brandId,String carModelId,String carRuleId,String batteryRuleId); +} diff --git a/src/main/java/com/sczx/pay/alipay/service/impl/ImageUploadServiceImpl.java b/src/main/java/com/sczx/pay/alipay/service/impl/ImageUploadServiceImpl.java index 65ef8bb..011d791 100644 --- a/src/main/java/com/sczx/pay/alipay/service/impl/ImageUploadServiceImpl.java +++ b/src/main/java/com/sczx/pay/alipay/service/impl/ImageUploadServiceImpl.java @@ -18,17 +18,16 @@ import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; import java.util.List; +import net.coobird.thumbnailator.Thumbnails; + -/** - * @author jishupei.jsp - * @version : ImageUploadServiceImpl, v0.1 2024年03月14日 10:41 上午 jishupei.jsp Exp $ - */ @Service public class ImageUploadServiceImpl implements ImageUploadService { private static final Logger logger = LogManager.getLogger(ImageUploadServiceImpl.class); @@ -49,7 +48,8 @@ public class ImageUploadServiceImpl implements ImageUploadService { // 设置图片内容 try { - String imageBase64 = getImageFromUrlAndConvertToBase64(imagePath); + //String imageBase64 = getImageFromUrlAndConvertToBase64(imagePath); + String imageBase64 = getImageFromUrlAndConvertToBase64WithResize(imagePath, 750, 750); FileItem imageContent = new FileItem("imageContent.jpg",Base64.getDecoder().decode(imageBase64)); request.setImageContent(imageContent); } catch (IOException e) { @@ -317,4 +317,32 @@ public class ImageUploadServiceImpl implements ImageUploadService { connection.disconnect(); } } + + public String getImageFromUrlAndConvertToBase64WithResize(String imageUrl, int width, int height) throws IOException { + if (StringUtils.isBlank(imageUrl)) { + throw new IllegalArgumentException("图片URL不能为空"); + } + + URL url = new URL(imageUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + + try (InputStream inputStream = connection.getInputStream()) { + // 使用Thumbnailator调整图片尺寸 + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + Thumbnails.of(inputStream) + .size(width, height) + .outputFormat("jpg") + .toOutputStream(outputStream); + + byte[] imageBytes = outputStream.toByteArray(); + return Base64.getEncoder().encodeToString(imageBytes); + } finally { + connection.disconnect(); + } + } + + } diff --git a/src/main/java/com/sczx/pay/alipay/service/impl/ItemServiceImpl.java b/src/main/java/com/sczx/pay/alipay/service/impl/ItemServiceImpl.java index c92f0bd..4d608fb 100644 --- a/src/main/java/com/sczx/pay/alipay/service/impl/ItemServiceImpl.java +++ b/src/main/java/com/sczx/pay/alipay/service/impl/ItemServiceImpl.java @@ -8,6 +8,7 @@ import com.alipay.api.domain.*; import com.alipay.api.internal.util.StringUtils; import com.alipay.api.request.*; import com.alipay.api.response.*; +import com.sczx.pay.alipay.po.RentCommodityConfig; import com.sczx.pay.alipay.po.RentRuleItem; import com.sczx.pay.alipay.service.ImageUploadService; import com.sczx.pay.alipay.service.ItemService; @@ -24,15 +25,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -/** - * @author jishupei.jsp - * @version : ItemServiceImpl, v0.1 2024年05月11日 2:31 下午 jishupei.jsp Exp $ - */ + @Service public class ItemServiceImpl implements ItemService { @@ -123,31 +121,56 @@ public class ItemServiceImpl implements ItemService { @Override - public OpenResponse createRentItem(RentRuleItem param) { + public OpenResponse createRentItem(RentRuleItem rentRuleItem) { return AlipayApiTemplate.execute(new AlipayApiCallback() { @Override public AlipayOpenAppItemCreateResponse process() throws AlipayApiException { - RentRuleItem rentRuleItem = rentRuleItemMapper.selectByIds(param.getBatteryRuleId(), param.getCarRuleId(), param.getCarModelId(), param.getBrandId()); - + //RentRuleItem rentRuleItem = rentRuleItemMapper.selectByIds(param.getBatteryRuleId(), param.getCarRuleId(), param.getCarModelId(), param.getBrandId()); + RentRuleItem rentRuleItemvo = rentRuleItem; // 构造请求参数以调用接口 AlipayOpenAppItemCreateRequest request = new AlipayOpenAppItemCreateRequest(); - AlipayOpenAppItemCreateModel model = getAlipayOpenAppItemCreateModel(rentRuleItem); + AlipayOpenAppItemCreateModel model = new AlipayOpenAppItemCreateModel(); + + + // 设置平台类目 + 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"); // 设置价格单元 model.setPriceUnit("元"); - + 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())); // 设置属性列表 model.setAttrs(getItemAttrs(rentRuleItem, model.getImageList(), model.getItemType())); - + rentRuleItemMapper.insertByFourId(rentRuleItemvo); logger.info("属性列表:" + JSON.toJSONString(model)); request.setBizModel(model); return alipaySdkUtil.execute(request); @@ -455,19 +478,13 @@ public class ItemServiceImpl implements ItemService { // 设置商家侧商品ID model.setOutItemId(rentRuleItem.getOutItemId()); - // 设置商品名称由品牌、型号、电池规格、租赁类型、套餐名称拼接 - String title = rentRuleItem.getBrandName() + rentRuleItem.getModelName() +"_"+ rentRuleItem.getCategoryName() + "_" +rentRuleItem.getRentalDays()+ rentRuleItem.getDictLabel()+rentRuleItem.getRuleName(); - // 设置商品名称 - model.setTitle(title); - // 设置商品主图 - model.setHeadImg(imageUploadService.uploadAndReturnId(rentRuleItem.getImage(), "ITEM_HEAD_IMG")); + + // 设置类目ID model.setCategoryId("C001684401"); - // 设置导购描述 - model.setDesc(title); @@ -550,6 +567,9 @@ public class ItemServiceImpl implements ItemService { // 商品成色 appItemAttrVO.setAttrValue("secondHand"); break; + case "item_fineness_grade": + appItemAttrVO.setAttrValue("99new"); + break; case "whether_support_free_deposit": // 是否支持免押 appItemAttrVO.setAttrValue("1"); @@ -575,7 +595,7 @@ public class ItemServiceImpl implements ItemService { ItemSkuCreateVO sku = new ItemSkuCreateVO(); // 设置商家侧SKU ID,需要全局唯一 - sku.setOutSkuId(param.getOutItemId() + "_sku"); // 示例:基于outItemId生成 + sku.setOutSkuId(param.getOutItemId() + "_sku"); // 设置售卖状态 sku.setSaleStatus("AVAILABLE"); @@ -586,7 +606,12 @@ public class ItemServiceImpl implements ItemService { // 设置价格相关字段 Long rentalPriceInCents = param.getRentalPrice().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); sku.setSalePrice(param.getRentalPrice().toString()); - sku.setOriginalPrice(rentalPriceInCents); + // 设置原价为租赁价格的1.2倍 + Long originalPriceInCents = new BigDecimal(rentalPriceInCents) + .multiply(new BigDecimal("1.2")) + .setScale(0, BigDecimal.ROUND_HALF_UP) + .longValue(); + sku.setOriginalPrice(originalPriceInCents); // 设置库存 sku.setStockNum(String.valueOf(100L)); @@ -600,8 +625,34 @@ public class ItemServiceImpl implements ItemService { // 添加租赁商品属性 ItemSkuAttrVO rentCommodityAttr = new ItemSkuAttrVO(); rentCommodityAttr.setAttrKey("rent_commodity"); - rentCommodityAttr.setAttrValue("{\"name\":\"租完归还\",\"description\":\"套餐说明\",\"custom_lease\":\"1\",\"slope_formula\":\"DEFAULT_SLOPE_FORMULA\",\"durationUnit\":\"天\",\"buyoutPrice\":\"220\",\"priceUnit\":\"元\"}"); - rentCommodityAttr.setAttrType("custom"); // 根据实际情况设置 + rentCommodityAttr.setAttrType("custom"); + + RentCommodityConfig config = new RentCommodityConfig(); + config.setName("门店自提,租完归还"); + config.setDescription("套餐说明"); + config.setCustomLease("0"); + config.setSlopeFormula("DEFAULT_SLOPE_FORMULA"); + config.setDurationUnit("日"); + config.setBuyoutPrice("220"); + config.setPriceUnit("元"); + + // 创建时段价格列表根据基础价格创建3个时段价格 + List durationPriceList = new ArrayList<>(); + RentCommodityConfig.DurationPrice durationPrice = new RentCommodityConfig.DurationPrice(); + for(int i = 1; i < 4; i++){ + String val = i + ""; + durationPrice.setDuration(val); + durationPrice.setTotalOriginalPrice(param.getRentalPrice() + .multiply(new BigDecimal(val)) + .setScale(0, BigDecimal.ROUND_HALF_UP).toString()); + durationPrice.setTotalSalePrice(new BigDecimal(originalPriceInCents) + .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); diff --git a/src/main/java/com/sczx/pay/alipay/service/impl/RentRuleItemServiceImpl.java b/src/main/java/com/sczx/pay/alipay/service/impl/RentRuleItemServiceImpl.java new file mode 100644 index 0000000..b79f6cc --- /dev/null +++ b/src/main/java/com/sczx/pay/alipay/service/impl/RentRuleItemServiceImpl.java @@ -0,0 +1,55 @@ +package com.sczx.pay.alipay.service.impl; + + +import com.alibaba.fastjson.JSON; +import com.sczx.pay.alipay.po.RentRuleItem; +import com.sczx.pay.alipay.service.ItemService; +import com.sczx.pay.alipay.service.RentRuleItemService; +import com.sczx.pay.alipay.vo.OpenResponse; +import com.sczx.pay.mapper.RentRuleItemMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + + +@Slf4j +@Service +public class RentRuleItemServiceImpl implements RentRuleItemService { + + @Autowired + private RentRuleItemMapper rentRuleItemMapper; + + @Autowired + private ItemService itemService; + + @Override + public Map syncItem(String brandId, String carModelId, String carRuleId, String batteryRuleId) { + RentRuleItem rentRuleItem = rentRuleItemMapper.selectByFourId(Long.valueOf(batteryRuleId), Long.valueOf(carRuleId), Long.valueOf(carModelId), Long.valueOf(brandId)); + log.info("rentRuleItem:{}", JSON.toJSONString(rentRuleItem)); + Map map = new HashMap<>(); + if (rentRuleItem == null){ + map.put("msg","未找到此套餐信息"); + map.put("code","500"); + return map; + } + + OpenResponse response = itemService.createRentItem(rentRuleItem); + + + + map.put("code",response.getCode()); + map.put("msg",response.getMsg()); + map.put("subCode",response.getSubCode()); + map.put("subMsg",response.getSubMsg()); + map.put("data",response.getData()); + + return map; + + } +} diff --git a/src/main/java/com/sczx/pay/mapper/RentRuleItemMapper.java b/src/main/java/com/sczx/pay/mapper/RentRuleItemMapper.java index b5a0ec8..abea3e8 100644 --- a/src/main/java/com/sczx/pay/mapper/RentRuleItemMapper.java +++ b/src/main/java/com/sczx/pay/mapper/RentRuleItemMapper.java @@ -29,12 +29,10 @@ public interface RentRuleItemMapper { */ List selectAll(); - /** - * 新增车型租赁规则项 - * @param zcRentRuleItem 车型租赁规则项信息 - * @return 影响行数 - */ - int insert(RentRuleItem zcRentRuleItem); + + RentRuleItem selectByFourId(@Param("batteryRuleId") Long batteryRuleId, @Param("carRuleId") Long carRuleId, @Param("carModelId") Long carModelId,@Param("brandId") Long brandId); + + int insertByFourId(RentRuleItem zcRentRuleItem); /** * 更新车型租赁规则项 diff --git a/src/main/resources/mapper/RentRuleItemMapper.xml b/src/main/resources/mapper/RentRuleItemMapper.xml index 08f273d..12e3f3c 100644 --- a/src/main/resources/mapper/RentRuleItemMapper.xml +++ b/src/main/resources/mapper/RentRuleItemMapper.xml @@ -7,162 +7,311 @@ + + - + + + + + + + + + - - - + - id, out_item_id, ali_item_id, brand_name, model_name, category_name, - dict_label, rule_name, image, battery_rule_id, car_rule_id, car_model_id, brand_id,rental_days,rental_price + id + , + out_item_id, + ali_item_id, + out_sku_id, + item_desc, + brand_name, + model_name, + category_name, + rental_days, + rent_type, + rule_name, + page_path, + image, + image_list1, + image_list2, + image_list3, + deposit_free, + deposit_price, + rental_price, + battery_rule_id, + car_rule_id, + car_model_id, + brand_id - - - + + + - - - + - INSERT INTO zc_rent_rule_item ( - id, - out_item_id, - ali_item_id, - brand_name, - model_name, - category_name, - dict_label, - rule_name, - image, - battery_rule_id, - car_rule_id, - car_model_id, - rental_days, - rental_price, - brand_id - ) VALUES ( - #{id}, - #{outItemId}, - #{aliItemId}, - #{brandName}, - #{modelName}, - #{categoryName}, - #{dictLabel}, - #{ruleName}, - #{image}, - #{batteryRuleId}, - #{carRuleId}, - #{carModelId}, - #{rentalDays}, - #{rentalPrice}, - #{brandId} - ) + insert into zc_rent_rule_item + + id, + out_item_id, + ali_item_id, + out_sku_id, + item_desc, + brand_name, + model_name, + category_name, + rental_days, + rent_type, + rule_name, + page_path, + image, + image_list1, + image_list2, + image_list3, + deposit_free, + deposit_price, + rental_price, + battery_rule_id, + car_rule_id, + car_model_id, + brand_id, + + + #{id}, + #{outItemId}, + #{aliItemId}, + #{outSkuId}, + #{itemDesc}, + #{brandName}, + #{modelName}, + #{categoryName}, + #{rentalDays}, + #{rentType}, + #{ruleName}, + #{pagePath}, + #{image}, + #{imageList1}, + #{imageList2}, + #{imageList3}, + #{depositFree}, + #{depositPrice}, + #{rentalPrice}, + #{batteryRuleId}, + #{carRuleId}, + #{carModelId}, + #{brandId}, + - - - INSERT INTO zc_rent_rule_item ( - id, out_item_id, ali_item_id, brand_name, model_name, category_name, - dict_label, rule_name, image, battery_rule_id, car_rule_id, car_model_id, brand_id,rental_days,rental_price - ) VALUES - - ( - #{item.id}, - #{item.outItemId}, - #{item.aliItemId}, - #{item.brandName}, - #{item.modelName}, - #{item.categoryName}, - #{item.dictLabel}, - #{item.ruleName}, - #{item.image}, - #{item.batteryRuleId}, - #{item.carRuleId}, - #{item.carModelId}, - #{item.brandId}, - #{item.rentalDays}, - #{item.rentalPrice}, - ) - + + insert into zc_rent_rule_item + (out_item_id, + ali_item_id, + out_sku_id, + item_desc, + brand_name, + model_name, + category_name, + rental_days, + rent_type, + rule_name, + page_path, + image, + image_list1, + image_list2, + image_list3, + deposit_free, + deposit_price, + rental_price, + battery_rule_id,car_rule_id,car_model_id,brand_id) + SELECT + #{outItemId} AS out_item_id, + '' AS ali_item_id, + #{outSkuId} AS out_sku_id, + #{itemDesc} as item_desc, + zcm.brand_name AS brand_name, + zcm.model_name AS model_name, + zbc.category_name AS category_name, + zrcr.rental_days AS rental_days, + sdd.dict_label AS rent_type, + zrcr.rule_name AS rule_name, + #{pagePath} AS page_path, + zcm.image AS image, + '' as image_list1, + '' as image_list2, + '' as image_list3, + zrcr.deposit_free AS deposit_free, + zrcr.deposit_price AS deposit_price, + zrcr.rental_price AS rental_price, + zrcrb.battery_rule_id AS battery_rule_id, + zcmp.car_rule_id AS car_rule_id, + zcmp.car_model_id AS car_model_id, + zcb.id AS brand_id + FROM + zc_car_brand AS zcb, + zc_car_model AS zcm, + zc_car_model_package AS zcmp, + zc_rent_car_rule AS zrcr, + zc_rent_battey_rule AS zrbr, + zc_rent_car_rule_battery AS zrcrb, + sys_dict_data AS sdd, + zc_battery_category AS zbc + WHERE + zcb.id = zcm.brand_id + AND zcmp.car_model_id = zcm.id + AND zcmp.car_rule_id = zrcr.id + AND zrcrb.car_rule_id = zrcr.id + AND zrcrb.battery_rule_id = zrbr.id + AND sdd.dict_type = 'key_rent_type' + AND zrcr.rental_type = sdd.dict_value + AND zbc.id = zrbr.category_id + AND zcb.id = #{brandId} + AND zcmp.car_model_id = #{carModelId} + AND zcmp.car_rule_id = #{carRuleId} + AND zrcrb.battery_rule_id = #{batteryRuleId} - - - - UPDATE zc_rent_rule_item + + + update zc_rent_rule_item out_item_id = #{outItemId}, ali_item_id = #{aliItemId}, + out_sku_id = #{outSkuId}, + item_desc = #{itemDesc}, brand_name = #{brandName}, model_name = #{modelName}, category_name = #{categoryName}, - dict_label = #{dictLabel}, + rental_days = #{rentalDays}, + rent_type = #{rentType}, rule_name = #{ruleName}, - image = #{image}, + page_path = #{pagePath}, + image = #{image}, + image_list1 = #{imageList1}, + image_list2 = #{imageList2}, + image_list3 = #{imageList3}, + deposit_free = #{depositFree}, + deposit_price = #{depositPrice}, + rental_price = #{rentalPrice}, battery_rule_id = #{batteryRuleId}, car_rule_id = #{carRuleId}, car_model_id = #{carModelId}, brand_id = #{brandId}, - WHERE id = #{id} + where id = #{id} - - UPDATE zc_rent_rule_item - set ali_item_id = #{aliItemId} - WHERE out_item_id = #{aliItemId} + + update zc_rent_rule_item + + out_item_id = #{outItemId}, + ali_item_id = #{aliItemId}, + out_sku_id = #{outSkuId}, + item_desc = #{itemDesc}, + brand_name = #{brandName}, + model_name = #{modelName}, + category_name = #{categoryName}, + rental_days = #{rentalDays}, + rent_type = #{rentType}, + rule_name = #{ruleName}, + page_path = #{pagePath}, + image = #{image}, + image_list1 = #{imageList1}, + image_list2 = #{imageList2}, + image_list3 = #{imageList3}, + deposit_free = #{depositFree}, + deposit_price = #{depositPrice}, + rental_price = #{rentalPrice}, + battery_rule_id = #{batteryRuleId}, + car_rule_id = #{carRuleId}, + car_model_id = #{carModelId}, + brand_id = #{brandId}, + + where out_item_id = #{outItemId} + + + + - DELETE FROM zc_rent_rule_item WHERE id = #{id} + delete + from zc_rent_rule_item + where id = #{id} + +