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

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

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

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