记得上下班打卡 | git大法好,push需谨慎

Commit a29fc956 authored by 姜秀龙's avatar 姜秀龙

收钱吧商品列表、电店铺接口对接完成

parent de7edea0
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.service.goblin.param.shouqianba.response.data.MallProductsQueryData;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
public class GoblinSqbPerfGoodsVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("商城编号")
private String mallSn;
@ApiModelProperty("商城名称")
private String mallName;
@ApiModelProperty(value = "商品spuId")
private String spuId;
private String spuName;
@ApiModelProperty(value = "商品图片")
private List<String> converImages;
@ApiModelProperty(value = "商品描述")
private String productIntroduction;
@ApiModelProperty(value = "商品标题")
private String title;
@ApiModelProperty(value = "商品规格")
private List<MallProductsQueryData.Sku> skuResults;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel(value = "商品规格")
public static class Sku {
@ApiModelProperty(value = "库存类型")
private Integer stockType;
@ApiModelProperty(value = "商品skuId")
private String skuId;
@ApiModelProperty(value = "库存值")
private BigDecimal quantity;
@ApiModelProperty(value = "规格标题")
private String skuTitle;
@ApiModelProperty(value = "规格名称")
private String skuName;
/** 商品原价(分/元,与原有 price 字段保持向后兼容) */
@ApiModelProperty(value = "价格")
private Long price;
private String coverPic;
private Integer sort;
/** 换购价格(为 null 时按售价) */
private BigDecimal settlementPrice;
/** 商品库存(管理后台展示用) */
private Integer stock;
/** 商品状态(管理后台展示用) */
private Integer status;
}
}
......@@ -17,32 +17,4 @@ public class MallProductsQueryRequest {
@ApiModelProperty(value = "商城标识", required = true)
private CommonRequest.Mall mallID;
@ApiModelProperty(value = "商品筛选条件")
private Filter filter;
@ApiModelProperty(value = "分页游标")
private Cursor cursor;
@Data
@ApiModel("商品筛选条件")
public static class Filter {
@ApiModelProperty(value = "商品ID (spuId)")
private String spuId;
@ApiModelProperty(value = "商品名称 (模糊查询)")
private String title;
}
@Data
@ApiModel("分页游标")
public static class Cursor {
@ApiModelProperty(value = "游标字段")
private String cursorField;
@ApiModelProperty(value = "查询数量")
private Integer count;
@ApiModelProperty(value = "结束游标")
private String endCursor;
}
}
......@@ -12,12 +12,11 @@ import java.util.List;
public interface IGoblinSqbGoodsService {
/**
* 获取所有商城及商品列表
* 自动拉取所有商城,循环获取每个商城的商品列表,聚合返回
* 根据搜索条件拉取商城商品列表
*
* @return 商城商品列表
* @return 过滤后的商品列表
*/
ResponseDto<List<GoblinSqbPerfGoodsVo>> getAllMallProducts();
ResponseDto<List<GoblinSqbPerfGoodsVo>> getProductList();
/**
* 批量新增商品到 goblin 系统(不存在则新增)
......
......@@ -202,20 +202,20 @@ public class SqbPerformanceGoodsServiceImpl implements ISqbPerformanceGoodsServi
List<GoblinSqbPerfGoodsVo> goodsList = new ArrayList<>();
for (GoblinSqbPerformanceGoods rel : relations) {
GoblinSqbPerfGoodsVo vo = new GoblinSqbPerfGoodsVo();
vo.setSkuId(rel.getSkuId());
vo.setSpuId(rel.getSpuId());
vo.setSort(rel.getSort());
vo.setSettlementPrice(rel.getSettlementPrice());
vo.setStatus(rel.getStatus());
GoblinGoodsSku sku = skuMap.get(rel.getSkuId());
if (sku != null) {
vo.setSkuName(sku.getName());
vo.setSpuName(sku.getName());
vo.setCoverPic(sku.getSkuPic());
vo.setPrice(sku.getPrice() != null ? sku.getPrice().longValue() : null);
vo.setStock(sku.getSkuStock());
}
// vo.setSkuId(rel.getSkuId());
// vo.setSpuId(rel.getSpuId());
// vo.setSort(rel.getSort());
// vo.setSettlementPrice(rel.getSettlementPrice());
// vo.setStatus(rel.getStatus());
//
// GoblinGoodsSku sku = skuMap.get(rel.getSkuId());
// if (sku != null) {
// vo.setSkuName(sku.getName());
// vo.setSpuName(sku.getName());
// vo.setCoverPic(sku.getSkuPic());
// vo.setPrice(sku.getPrice() != null ? sku.getPrice().longValue() : null);
// vo.setStock(sku.getSkuStock());
// }
goodsList.add(vo);
}
resp.setGoodsList(goodsList);
......@@ -246,13 +246,13 @@ public class SqbPerformanceGoodsServiceImpl implements ISqbPerformanceGoodsServi
List<GoblinSqbPerfGoodsVo> result = new ArrayList<>();
for (GoblinGoodsSku sku : skuList) {
GoblinSqbPerfGoodsVo vo = new GoblinSqbPerfGoodsVo();
vo.setSkuId(sku.getSkuId());
vo.setSpuId(sku.getSpuId());
vo.setSkuName(sku.getName());
vo.setSpuName(sku.getName()); // 前端显示需要,统一赋值为 sku 名称
vo.setCoverPic(sku.getSkuPic()); // 同步阶段已将图片存入了 skuPic
vo.setPrice(sku.getPrice() != null ? sku.getPrice().longValue() : null);
vo.setStock(sku.getSkuStock());
// vo.setSkuId(sku.getSkuId());
// vo.setSpuId(sku.getSpuId());
// vo.setSkuName(sku.getName());
// vo.setSpuName(sku.getName()); // 前端显示需要,统一赋值为 sku 名称
// vo.setCoverPic(sku.getSkuPic()); // 同步阶段已将图片存入了 skuPic
// vo.setPrice(sku.getPrice() != null ? sku.getPrice().longValue() : null);
// vo.setStock(sku.getSkuStock());
result.add(vo);
}
return ResponseDto.success(result);
......
......@@ -37,7 +37,7 @@ public class GoblinSqbGoodsController {
@GetMapping("/list")
@ApiOperation("查询收钱吧所有商城及商品列表")
public ResponseDto<List<GoblinSqbPerfGoodsVo>> list() {
return goblinSqbGoodsService.getAllMallProducts();
return goblinSqbGoodsService.getProductList();
}
/**
......
......@@ -15,6 +15,7 @@ import com.liquidnet.service.goblin.service.IGoblinShouQianBaService;
import com.liquidnet.service.goblin.service.IGoblinSqbOrderService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.GoblinSqbRedisUtils;
import com.liquidnet.service.goblin.config.properties.ShouqianbaProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -51,12 +52,8 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// ========== 常量(后期可移至配置文件) ==========
// TODO: 将以下常量移至 application.yml 配置
private static final String SQB_APPID = "test_appid";
private static final String SQB_MERCHANT_ID = "todo_merchant_id";
private static final String SQB_MERCHANT_USER_ID = "todo_merchant_user_id";
private static final String SQB_ROLE = "super_admin";
@Autowired
private ShouqianbaProperties shouqianbaProperties;
// ================================ 创建订单 ================================
......@@ -100,7 +97,7 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
// Step 4.1: createSettlement → 得 checkoutItemsId
// TODO: 从商品数据中获取价格、图片、标题等信息填充 CheckoutItem
SettlementCreateRequest settlementReq = new SettlementCreateRequest();
settlementReq.setAppid(SQB_APPID);
settlementReq.setAppid(shouqianbaProperties.getAppId());
settlementReq.setSeller(seller);
CommonRequest.Buyer buyer = new CommonRequest.Buyer();
buyer.setBuyerId(userId);
......@@ -117,7 +114,7 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
// Step 4.2: createOrder → 得 sqbOrderSn + sqbOrderSignature + sqbAcquiringSn
OrderCreateRequest orderReq = new OrderCreateRequest();
orderReq.setAppid(SQB_APPID);
orderReq.setAppid(shouqianbaProperties.getAppId());
orderReq.setSeller(seller);
orderReq.setCheckoutItemsId(checkoutItemsId);
orderReq.setBuyer(buyer);
......@@ -372,7 +369,7 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
// 调用收钱吧查询券码
CouponQueryRequest req = new CouponQueryRequest();
req.setAppid(SQB_APPID);
req.setAppid(shouqianbaProperties.getAppId());
req.setSeller(buildSeller());
CouponQueryRequest.OrderInfo orderInfo = new CouponQueryRequest.OrderInfo();
orderInfo.setSn(orderVo.getSqbOrderSn());
......@@ -422,7 +419,7 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
try {
// 调用收钱吧退款
CouponRefundRequest refundReq = new CouponRefundRequest();
refundReq.setAppid(SQB_APPID);
refundReq.setAppid(shouqianbaProperties.getAppId());
refundReq.setSeller(buildSeller());
refundReq.setRequestSource("EXTERN");
refundReq.setRequestId(IDGenerator.nextSnowId());
......@@ -480,14 +477,14 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
if (!userId.equals(orderVo.getUserId())) return ResponseDto.failure("无权限访问该订单");
CouponStatusSyncRequest req = new CouponStatusSyncRequest();
req.setAppid(SQB_APPID);
req.setAppid(shouqianbaProperties.getAppId());
req.setRedeemSource("EXTERN");
// TODO: 填充 voucherNos(券号列表)、redeemMerchantId、redeemExternalOrderSn、clientSn、status
// 需要从 orderVo 中获取 couponSn 和其他必要字段
if (orderVo.getCouponSn() != null) {
req.setVoucherNos(java.util.Collections.singletonList(orderVo.getCouponSn()));
}
req.setRedeemMerchantId(SQB_MERCHANT_ID);
req.setRedeemMerchantId(shouqianbaProperties.getMerchantId());
req.setRedeemExternalOrderSn(IDGenerator.nextSnowId());
req.setClientSn("terminal_001"); // TODO: 配置终端号
req.setStatus((byte) 1); // 1-已核销
......@@ -729,16 +726,16 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
private CommonRequest.Seller buildSeller() {
CommonRequest.Seller seller = new CommonRequest.Seller();
seller.setMerchantId(SQB_MERCHANT_ID);
seller.setMerchantUserId(SQB_MERCHANT_USER_ID);
seller.setRole(SQB_ROLE);
seller.setMerchantId(shouqianbaProperties.getMerchantId());
seller.setMerchantUserId(shouqianbaProperties.getMerchantUserId());
seller.setRole(shouqianbaProperties.getRole());
return seller;
}
private CashierQueryRequest buildCashierQueryRequest(CommonRequest.Seller seller,
String acquiringSn, String acquiringSignature) {
CashierQueryRequest req = new CashierQueryRequest();
req.setAppid(SQB_APPID);
req.setAppid(shouqianbaProperties.getAppId());
req.setSeller(seller);
req.setPaymentMode(4); // 4-微信小程序支付
......@@ -760,7 +757,7 @@ public class GoblinSqbOrderServiceImpl implements IGoblinSqbOrderService {
String seq,
CashierQueryData cashierData) {
CreateWechatPrepayOrderRequest req = new CreateWechatPrepayOrderRequest();
req.setAppid(SQB_APPID);
req.setAppid(shouqianbaProperties.getAppId());
req.setSeller(seller);
req.setAcquiringSn(acquiringSn);
req.setSignature(acquiringSignature);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment