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

Commit 2e9b36ae authored by 姜秀龙's avatar 姜秀龙

Merge branch 'refs/heads/dev-1.6-shouqianba' into container-test

parents e531a918 bdd81e6e
This diff is collapsed.
......@@ -27,6 +27,12 @@
<artifactId>liquidnet-service-dragon-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-third-sqb</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -430,4 +430,39 @@ public class GoblinRedisConst {
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
/**
* 收钱吧订单详情
*/
public static final String SQB_ORDER = PREFIX.concat("sqb:order:");
/**
* 演出关联收钱吧商品缓存 performancesId
*/
public static final String SQB_PERFORMANCE_GOODS = PREFIX.concat("sqb:perf:goods:");
/**
* 收钱吧下单防重锁
*/
public static final String SQB_ORDER_LOCK = PREFIX.concat("sqb:order:lock:");
/**
* 收钱吧订单扩展 key
*/
public static final String SQB_GOBLIN_GOODS_EXT_KEY = PREFIX.concat("sqb:goods:ext:");
/**
* 收钱吧 orderSn与正在orderId 对应关系 key
*/
public static final String SQB_GOBLIN_ORDER_SN_KEY = PREFIX.concat("sqb:orderSn:");
/**
* 收钱吧 用户订单列表
*/
public static final String SQB_GOBLIN_ORDER_LIST = PREFIX.concat("sqb:order:id:list:");//用户订单id列表 key:$uid
/**
* 演出关联收钱吧商品换购价 缓存 performancesId:skuId
*/
public static final String SQB_SKU_PRICE = PREFIX.concat("sqb:sku:price:");
}
package com.liquidnet.service.goblin.dto.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ApiModel(value = "GoblinSqbOrderParam")
@Data
public class GoblinSqbOrderParam {
@ApiModelProperty(required = true, value = "apuId")
@NotBlank(message = "商品不能为空")
private String spuId;
@ApiModelProperty(required = true, value = "skuId")
@NotBlank(message = "商品规格不能为空")
private String skuId;
@ApiModelProperty(required = true, value = "购买数量")
@NotNull(message = "购买数量不能为空")
private Integer quantity;
@ApiModelProperty(required = true, value = "关联演出ID")
@NotBlank(message = "关联演出ID不能为空")
private String performancesId;
@ApiModelProperty(required = true, value = "微信 openId(对应支付小程序 appid 下的用户唯一 openid)")
@NotBlank(message = "openId不能为空")
private String openId;
}
package com.liquidnet.service.goblin.dto.manage;
import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@ApiModel(value = "GoblinStoreMgtGoodsSqbAddSkuParam", description = "商品管理:添加收钱吧商品:添加SKU入参")
@Data
public class GoblinStoreMgtGoodsSqbAddSkuParam implements Serializable {
private static final long serialVersionUID = 7886534346305369761L;
@ApiModelProperty(position = 10, required = false, value = "单品ID[编辑时必传]")
private String skuId;
// @ApiModelProperty(position = 11, required = false, value = "单品编码[默认为系统编码,也可手动输入商家自己的编码]")
// @Pattern(regexp = LnsRegex.Valid.ALPHABET_NUMBER_UNDER_50, message = "单品编码格式或长度有误")
// private String skuNo;
// @ApiModelProperty(position = 12, required = false, value = "单品条码")
// @Pattern(regexp = LnsRegex.Valid.ALPHABET_NUMBER_32, message = "单品条码格式或长度有误")
// private String skuBarCode;
// @ApiModelProperty(position = 13, required = false, value = "ERP商家编码")
// @Size(max = 40, message = "ERP商家编码长度限制40")
// private String skuErpCode;//-
// @ApiModelProperty(position = 14, required = false, value = "ERP托管[0-否|1-是],默认0")
// @Pattern(regexp = "\\b(0|1)\\b", message = "ERP托管参数无效")
// private String erpHosting;//-
// @ApiModelProperty(position = 15, required = false, value = "ERP仓库编号")
// @Size(max = 40, message = "ERP仓库编号长度限制40")
// private String erpWarehouseNo;//-
// @ApiModelProperty(position = 16, required = false, value = "单品默认图片的url[256]")
// @NotBlank(message = "单品图片不能为空")
// private String skuPic;
@ApiModelProperty(position = 12, required = false, value = "单品规格信息")
// @NotNull(message = "规格信息不能为空")
// @Valid// 初始化写死['规格':'张']
private List<GoblinGoodsSpecDto> skuSpecList;
// @ApiModelProperty(position = 18, required = false, value = "单品销售价-原价[20,2]")
// private BigDecimal sellPrice;
@ApiModelProperty(position = 19, required = true, value = "单品现价[20,2]")
@Digits(integer = 6, fraction = 2, message = "参数'单品现价'无效")
@DecimalMin(value = "0.01", message = "参数'单品现价'必须为大于0")
private BigDecimal price;
// @ApiModelProperty(position = 20, required = false, value = "单品会员价格[20,2]")
// @NotNull(message = "单品会员价格不能为空")
// @Min(value = 0, message = "单品会员价格不能小于0")
// private BigDecimal priceMember;
// @ApiModelProperty(position = 21, required = false, value = "单品的重量[20,2]")
// private BigDecimal weight;//-
@ApiModelProperty(position = 20, required = true, value = "总库存")
@Min(value = 0, message = "总库存不能小于0")
private Integer stock;
// @ApiModelProperty(position = 21, required = false, value = "预警库存")
// private Integer warningStock;
// @ApiModelProperty(position = 22, required = false, value = "ISBN,针对CD/图书等[100]")
// private String skuIsbn;//-
// @ApiModelProperty(position = 23, required = false, value = "购买限制[0-全部用户|1-仅会员|2-指定用户]")
// @NotNull(message = "购买限制不能为空")
// private String buyFactor;
// @ApiModelProperty(position = 24, required = false, value = "购买限制人员名单[购买限制为2-指定用户时必填]")
// private String buyRoster;
@ApiModelProperty(position = 25, required = false, value = "限量[0-无限制|X:限购数量]")
private Integer buyLimit;
// @ApiModelProperty(position = 26, required = false, value = "单品有效期[yyyy-MM-dd HH:mm:ss]")
// @Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "单品有效期格式有误")
// private String skuValidity;
// @ApiModelProperty(position = 27, required = false, value = "自定义展示[0-默认展示|1-隐藏不可购买]")
// private String skuAppear;
/**
* ---------------------------- 收钱吧商品-代金券属性 ----------------------------
*/
@ApiModelProperty(position = 28, required = true, value = "是否实名[0-否|1-是,表示该商品需要实名关联]", allowableValues = "0,1", example = "1")
@Pattern(regexp = "\\b(0|1)\\b", message = "参数'是否实名'无效")
private String isTrueName;
@ApiModelProperty(position = 29, required = true, value = "适用范围[101-音乐节|102-小型演出(livehouse演出)|103-巡演]", allowableValues = "101,102,103", example = "101")
@Pattern(regexp = "\\b(101|102|103)\\b", message = "参数'适用范围'无效")
private String useScope;
@ApiModelProperty(position = 30, required = true, value = "面值", example = "99.00")
@Digits(integer = 3, fraction = 2, message = "参数'面值'无效")
@DecimalMin(value = "0.01", message = "参数'面值'必须为大于0")
private BigDecimal valFace;
@ApiModelProperty(position = 31, required = true, value = "开始时间[yyyy-MM-dd HH:mm:ss]", example = "2024-01-01 00:00:00")
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "开始时间格式有误")
@NotNull(message = "参数'开始时间'不可为空")
private String effectAt;
@ApiModelProperty(position = 32, required = true, value = "结束时间[yyyy-MM-dd HH:mm:ss]", example = "2024-12-31 00:00:00")
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "结束时间格式有误")
@NotNull(message = "参数'结束时间'不可为空")
private String expireAt;
}
package com.liquidnet.service.goblin.dto.manage;
import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
@ApiModel(value = "GoblinStoreMgtGoodsSqbEditSkuParam", description = "商品管理:编辑收钱吧商品:编辑SKU入参")
@Data
public class GoblinStoreMgtGoodsSqbEditSkuParam implements Serializable {
private static final long serialVersionUID = 8174428924922310702L;
@ApiModelProperty(position = 10, required = true, value = "店铺ID[64]")
@NotBlank(message = "店铺ID不能为空")
private String storeId;
@ApiModelProperty(position = 11, required = true, value = "商品ID[64]")
@NotNull(message = "商品ID不能为空")
private String spuId;
@ApiModelProperty(position = 12, required = true, value = "单品ID[编辑时必传]")
@NotNull(message = "商品SKU_ID不能为空")
private String skuId;
@ApiModelProperty(position = 13, required = true, value = "单品现价[20,2]")
@Digits(integer = 3, fraction = 2, message = "参数'单品现价'无效")
@DecimalMin(value = "0.01", message = "参数'单品现价'必须为大于0")
private BigDecimal price;
@ApiModelProperty(position = 14, required = true, value = "限量[0-无限制|X:限购数量]")
@Min(value = 0, message = "参数'限购数量'不能小于0")
@NotNull(message = "参数'限购数量'不可为空")
private Integer buyLimit;
@ApiModelProperty(position = 15, required = false, value = "总库存")
private Integer stock;
@ApiModelProperty(position = 16, required = false, value = "总库存")
private Integer skuStock;
@ApiModelProperty(position = 17, required = false, value = "加减库存")
private Integer operStock;
/**
* ---------------------------- 收钱吧商品-代金券属性 ----------------------------
*/
@ApiModelProperty(position = 18, required = true, value = "是否实名[0-否|1-是,表示该商品需要实名关联]", example = "1")
@Pattern(regexp = "\\b(0|1)\\b", message = "参数'是否实名'无效")
private String isTrueName;
@ApiModelProperty(position = 19, required = true, value = "适用范围[101-音乐节|102-小型演出(livehouse演出)|103-巡演]")
@Pattern(regexp = "\\b(101|102|103)\\b", message = "参数'适用范围'无效")
private String useScope;
@ApiModelProperty(position = 20, required = true, value = "面值", example = "99.00")
@Digits(integer = 3, fraction = 2, message = "参数'面值'无效")
@DecimalMin(value = "0.01", message = "参数'面值'必须为大于0")
private BigDecimal valFace;
@ApiModelProperty(position = 21, required = true, value = "结束时间[yyyy-MM-dd HH:mm:ss]", example = "2024-01-01 00:00:00")
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "开始时间格式有误")
@NotNull(message = "参数'开始时间'不可为空")
private String effectAt;
@ApiModelProperty(position = 22, required = true, value = "结束时间[yyyy-MM-dd HH:mm:ss]", example = "2024-12-31 00:00:00")
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "结束时间格式有误")
@NotNull(message = "参数'结束时间'不可为空")
private String expireAt;
public GoblinGoodsSkuInfoVo initEditGoodsSkuInfoVo() {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = GoblinGoodsSkuInfoVo.getNew();
goodsSkuInfoVo.setSkuType(2);
goodsSkuInfoVo.setSkuId(this.getSkuId());
goodsSkuInfoVo.setPrice(this.getPrice());
goodsSkuInfoVo.setPriceMember(this.getPrice());
goodsSkuInfoVo.setBuyLimit(this.getBuyLimit());
goodsSkuInfoVo.setStock(this.getStock());
goodsSkuInfoVo.setSkuStock(this.getSkuStock());
goodsSkuInfoVo.setIsTrueName(Integer.valueOf(this.getIsTrueName()));
goodsSkuInfoVo.setUseScope(Integer.valueOf(this.getUseScope()));
goodsSkuInfoVo.setValFace(this.getValFace());
goodsSkuInfoVo.setEffectAt(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getEffectAt()));
goodsSkuInfoVo.setExpireAt(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getExpireAt()));
return goodsSkuInfoVo;
}
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class GoblinAdminSqbGoodsVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "商品skuId")
private String skuId;
@ApiModelProperty(value = "单品默认图片的url")
private String skuPic;
@ApiModelProperty(value = "商品描述")
private String productIntroduction;
@ApiModelProperty(value = "商品标题")
private String title;
@ApiModelProperty(value = "单品现价")
private BigDecimal price;
@ApiModelProperty(value = "单品库存")
private Integer skuStock;
}
......@@ -21,16 +21,20 @@ import java.util.List;
public class GoblinFrontGoodDetailVo implements Serializable {
//spu
GoblinGoodsInfoDetailVo goblinGoodsInfoVo;
//sku
List<GoblinGoodsSkuInfoDetailVo> goblinGoodsSkuInfoVolist;
@ApiModelProperty(value = "商铺名称")
String storeName;
@ApiModelProperty(value = "商品可参与券类型")
ArrayList<String> getSpuType;
@ApiModelProperty(value = "条码识别到的SKUID列表", notes = "仅当条码识别时有效")
private List<String> hitSkuIdList;
private static final long serialVersionUID = 1L;
private static final GoblinFrontGoodDetailVo obj = new GoblinFrontGoodDetailVo();
......
......@@ -146,6 +146,11 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 63, value = "skuList")
private List<GoblinGoodsSkuInfoVo> goblinOrderSkuVos;
@ApiModelProperty(position = 70, value = "收钱吧SPU ID")
private String sqbSpuId;
@ApiModelProperty(position = 71, value = "收钱吧商城编号")
private String mallSn;
public String getMarketType() {
if (marketId == null) {
return "";
......
......@@ -48,6 +48,9 @@ public class GoblinGoodsSkuInfoDetailVo implements Serializable, Cloneable {
@ApiModelProperty(position = 51, value = "是否实名[0-否|1-是,表示该商品需要实名关联]")
private Integer isTrueName;
@ApiModelProperty(position = 52, value = "关联演出ID")
private String performancesId;
private static final GoblinGoodsSkuInfoDetailVo obj = new GoblinGoodsSkuInfoDetailVo();
public static GoblinGoodsSkuInfoDetailVo getNew() {
......
......@@ -78,7 +78,7 @@ public class GoblinOrderSkuVo implements Serializable, Cloneable {
* ---------------------------- 以下为券类商品-代金券属性 ----------------------------
*/
@ApiModelProperty(value = "商品类型[0-常规|1-数字藏品|2-券类商品]")
@ApiModelProperty(value = "商品类型[0-常规|1-数字藏品|2-券类商品] 33-收钱吧商品")
private Integer skuType;
@ApiModelProperty(value = "是否实名[0-否|1-是,表示该商品需要实名关联],这里默认0")
private Integer isTrueName;
......
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "用户端-查询券码-VO")
public class GoblinSqbCouponVo implements Serializable {
private static final long serialVersionUID = 1L;
private String couponSn;
private String couponQrCode;
private String couponExpireTime;
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "收钱吧商品扩展-VO-redis")
public class GoblinSqbGoodsExtVo implements Serializable {
@ApiModelProperty(value = " goblin_goods.spu_id")
private String spuId;
@ApiModelProperty(value = "关联 goblin_goods_sku.sku_id")
private String skuId;
@ApiModelProperty(value = "所属收钱吧商城编号")
private String mallSn;
@ApiModelProperty(value = "商城签名")
private String signature;
@ApiModelProperty(value = "收钱吧商品ID")
private String sqbSpuId;
@ApiModelProperty(value = "收钱吧规格ID (skuId)")
private String sqbSkuId;
public static GoblinSqbGoodsExtVo of(String spuId,
String skuId,
String mallSn,
String signature,
String sqbSpuId,
String sqbSkuId) {
GoblinSqbGoodsExtVo extVo = new GoblinSqbGoodsExtVo();
extVo.setSpuId(spuId);
extVo.setSkuId(skuId);
extVo.setMallSn(mallSn);
extVo.setSignature(signature);
extVo.setSqbSpuId(sqbSpuId);
extVo.setSqbSkuId(sqbSkuId);
return extVo;
}
}
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class GoblinSqbOrderCreateVo implements Serializable {
private static final long serialVersionUID = 1L;
private String orderId;
private String acquiringSn;
// paymentVoucher fields
private String timeStamp;
private String packageStr;
private String paySign;
private String appId;
private String signType;
private String nonceStr;
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 收钱吧订单列表/详情展示 VO
* 融合:GoblinStoreOrderVo(基础信息)+ GoblinOrderSkuVo(商品信息)+ GoblinSqbOrderVo(收钱吧扩展)
*/
@Data
public class GoblinSqbOrderDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
// ========== 来自 GoblinStoreOrderVo(现有订单体系) ==========
@ApiModelProperty(value = "本地订单ID")
private String orderId;
@ApiModelProperty(value = "订单号")
private String orderCode;
@ApiModelProperty(value = "goblin订单状态[0-待付款|2-已付款|5-取消]")
private Integer status;
@ApiModelProperty(value = "实付金额")
private BigDecimal priceActual;
@ApiModelProperty(value = "创建时间")
private String createdAt;
@ApiModelProperty(value = "支付时间")
private String payTime;
// ========== 来自 GoblinOrderSkuVo(sku商品信息) ==========
@ApiModelProperty(value = "商品SPU ID")
private String spuId;
@ApiModelProperty(value = "商品名称")
private String spuName;
@ApiModelProperty(value = "商品SKU ID")
private String skuId;
@ApiModelProperty(value = "款式名称")
private String skuName;
@ApiModelProperty(value = "款式图片")
private String skuImage;
@ApiModelProperty(value = "购买数量")
private Integer quantity;
// ========== 来自 GoblinSqbOrderVo(收钱吧扩展字段) ==========
@ApiModelProperty(value = "收钱吧订单状态:0-待支付 1-已支付 2-已核销 3-已退款 4-退款中 9-失败")
private Integer sqbStatus;
@ApiModelProperty(value = "关联演出ID")
private String performancesId;
@ApiModelProperty(value = "收钱吧收单号")
private String sqbAcquiringSn;
@ApiModelProperty(value = "券码编号")
private String couponSn;
@ApiModelProperty(value = "核销二维码")
private String couponQrCode;
@ApiModelProperty(value = "券码过期时间")
private String couponExpireTime;
@ApiModelProperty(value = "核销状态:0-未核销 1-已核销")
private Integer couponUsedStatus;
}
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinSqbOrderVo implements Serializable {
private static final long serialVersionUID = 1L;
private String orderId;
private String userId;
private String performancesId;
/**
* 微信 openId(对应支付小程序 appid 下的用户唯一 openid)
* 用于收钱吧创建预支付时的 identity,以及待支付状态下的再次拉起支付。
*/
private String openId;
// 正在spuId
private String spuId;
// 正在skuId
private String skuId;
// 数量
private Integer quantity;
// 金额(分为单位)
private Long amount;
// 订单编号
private String sqbOrderSn;
// 订单密钥
private String sqbOrderSignature;
// 收单号
private String sqbAcquiringSn;
// 收单密钥
private String sqbAcquiringSign;
// 结算项ID
private String sqbCheckoutItemsId;
// 收钱吧-券码编号
private String couponSn;
// 收钱吧-券二维码url
private String couponQrCode;
// 券核销时间?
private String couponExpireTime;
// 0-待支付 1-已支付 2-已核销 3-已退款 4-退款中 5-已取消 9-失败
private Integer status;
// 退款备注
private String refundReason;
// 退款单号
private String refundSn;
// 退款单号密码
private String refundSignature;
// 创建时间
private String createdAt;
// 修改时间
private String updatedAt;
// 扩展属性
// 券核销状态 0-未核销 1-已核销
private Integer couponUsedStatus;
}
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.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("商城签名")
private String signature;
@ApiModelProperty(value = "商品spuId")
private String spuId;
@ApiModelProperty(value = "商品图片")
private List<String> converImages;
@ApiModelProperty(value = "商品描述")
private String productIntroduction;
@ApiModelProperty(value = "商品标题")
private String title;
@ApiModelProperty(value = "商品规格")
private List<MallProductsQueryData.Sku> skuResults;
@ApiModelProperty("是否已同步")
private Boolean synced;
@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;
}
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 演出关联收钱吧商品列表项(本地关联视图)
*/
@Data
public class GoblinSqbPerfLinkedGoodsVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "商品skuId(本地)")
private String skuId;
@ApiModelProperty(value = "商品spuId(本地)")
private String spuId;
@ApiModelProperty(value = "商品spu名称(本地)")
private String spuName;
@ApiModelProperty(value = "商品sku名称(本地)")
private String skuName;
@ApiModelProperty(value = "商品头图(本地)")
private String coverPic;
@ApiModelProperty(value = "商品售价(分,本地)")
private Long price;
@ApiModelProperty(value = "商品库存(本地)")
private Integer stock;
@ApiModelProperty(value = "排序权重")
private Integer sort;
@ApiModelProperty(value = "换购价格")
private BigDecimal settlementPrice;
@ApiModelProperty(value = "状态 0-禁用 1-启用")
private Integer status;
}
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class GoblinSqbPerfListRespVo implements Serializable {
private static final long serialVersionUID = 1L;
/** 演出结束自动下架 0-否 1-是(全局配置) */
private Integer autoOffline;
/** 关联商品列表 */
private List<GoblinSqbPerfLinkedGoodsVo> goodsList;
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 收钱吧-演出关联商品前端展示VO
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "GoblinSqbPerformanceGoodsInfoVo", description = "收钱吧-演出关联商品前端展示VO")
public class GoblinSqbPerformanceGoodsInfoVo extends GoblinGoodsInfoVo {
@ApiModelProperty(value = "正常售价")
private BigDecimal price;
@ApiModelProperty(value = "换购价(不设置则按正常价)")
private BigDecimal settlementPrice;
}
......@@ -42,6 +42,11 @@ public interface GoblinFrontService {
*/
GoblinFrontSelectGoodVo getSelectGoods(int page, int pageSize);
/**
* 按演出ID查询已关联商品列表
*/
GoblinFrontSelectGoodVo getPerformanceSelectGoods(String performancesId, int page, int pageSize);
//根据艺人标签和演出id查询商品列表
List<GoblinGoodsInfoVo> getGoodByMusicTagP(String musicTag, String performanceId);
......
package com.liquidnet.service.goblin.service;
import com.liquidnet.common.third.sqb.param.callback.CouponCallbackContent;
import com.liquidnet.common.third.sqb.param.callback.OrderCallbackContent;
import com.liquidnet.common.third.sqb.param.callback.RefundCallbackContent;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.manage.GoblinSqbOrderParam;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbOrderCreateVo;
/**
* 收钱吧订单服务接口
*/
public interface IGoblinSqbOrderService {
/**
* 创建收钱吧订单
*
* @param userId 用户ID(从 token 获取)
* @param orderParam
* @return 订单创建结果(orderId、acquiringSn、paymentVoucher)
*/
ResponseDto<GoblinSqbOrderCreateVo> createOrder(String userId, GoblinSqbOrderParam orderParam);
/**
* 再次付款(待支付状态下重新拉起微信支付)
*
* @param userId 用户ID
* @param orderId 本地订单ID
* @return 新的 paymentVoucher(复用原 orderId)
*/
ResponseDto<GoblinSqbOrderCreateVo> repay(String userId, String orderId);
/**
* 查询支付状态
*
* @param userId 用户ID
* @param orderId 本地订单ID
* @return 支付状态(0-待支付 1-已支付 9-失败)
*/
ResponseDto<Integer> queryPayStatus(String userId, String orderId);
/**
* 支付成功回调(收钱吧主动推送)
*
* @param orderCallbackContent@return "success"
*/
ResponseDto<String> handlePayCallback(OrderCallbackContent orderCallbackContent);
/**
* 退款成功回调(收钱吧主动推送)
*
* @param refundCallbackContent@return "success"
*/
ResponseDto<String> handleRefundCallback(RefundCallbackContent refundCallbackContent);
/**
* 券状态变更回调(收钱吧主动推送)
*
* @param callbackContent@return "success"
*/
ResponseDto<String> handleCouponCallback(CouponCallbackContent callbackContent);
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbOrderDetailVo;
import java.util.List;
public interface IGoblinSqbService {
/**
* 获取核销二维码(券码)
*
* @param userId 用户ID
* @param orderId 本地订单ID
* @return 券码信息(couponSn、couponQrCode、couponExpireTime)
*/
ResponseDto<GoblinSqbCouponVo> queryCoupon(String userId, String orderId);
/**
* 申请退款
*
* @param userId 用户ID
* @param orderId 本地订单ID
* @param reason 退款原因
* @return 退款结果
*/
ResponseDto<Boolean> refund(String userId, String orderId, String reason);
/**
* 主动同步核销状态
*
* @param userId 用户ID
* @param orderId 本地订单ID
* @return 同步结果
*/
ResponseDto<Boolean> syncCouponStatus(String userId, String orderId);
/**
* 演出结束自动退款(定时任务调用)
* TODO
* @param performancesId 演出ID
* @return 处理结果摘要(成功/失败笔数)
*/
ResponseDto<String> autoRefundByPerformance(String performancesId);
/**
* 查询用户收钱吧订单列表
*
* @param userId 用户ID
* @return 收钱吧订单列表(仅 skuType=33 的订单,按下单时间倒序)
*/
ResponseDto<List<GoblinSqbOrderDetailVo>> getOrderList(String userId);
/**
* 查询收钱吧订单详情
*
* @param userId 用户ID
* @param orderId 本地订单ID
* @return 订单详情(基础信息 + 收钱吧扩展信息)
*/
ResponseDto<GoblinSqbOrderDetailVo> getOrderDetail(String userId, String orderId);
}
package com.liquidnet.service.goblin.service.manage;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo;
import java.util.List;
/**
* 商品管理:收钱吧商品(独立接口)
*/
public interface IGoblinStoreMgtSqbGoodsService {
/**
* 根据搜索条件拉取商城商品列表
*
* @return 过滤后的商品列表
*/
ResponseDto<List<GoblinSqbPerfGoodsVo>> getProductList();
/**
* 商品管理:SPU添加-收钱吧商品
*/
void sqbGoodsAdd(GoblinGoodsInfoVo goodsInfoVo, List<GoblinGoodsSkuInfoVo> goodsSkuInfoVoList);
/**
* 商品管理:商品编辑:SPU编辑-收钱吧商品
*/
boolean sqbGoodsEditSpu(String uid, GoblinSqbPerfGoodsVo mgtGoodsSqbParam, GoblinGoodsInfoVo goodsInfoVo);
}
package com.liquidnet.client.admin.web.controller.zhengzai.goblin;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.zhengzai.goblin.dto.SqbPerfGoodsBindItemParam;
import com.liquidnet.client.admin.zhengzai.goblin.service.ISqbPerformanceGoodsService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinAdminSqbGoodsVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfListRespVo;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 演出-收钱吧商品关联管理
*/
@Slf4j
@Controller
@Api(tags = "收钱吧-演出商品关联管理")
@RequestMapping("sqb/performance/goods")
public class SqbPerformanceGoodsController extends BaseController {
private final String prefix = "zhengzai/goblin/sqbGoods";
@Autowired
private ISqbPerformanceGoodsService sqbPerformanceGoodsService;
/**
* 关联商品管理页面(iframe 内嵌)
*/
@GetMapping("page/{performancesId}")
public String sqbGoodsPage(@PathVariable("performancesId") String performancesId, ModelMap mmap) {
mmap.put("performancesId", performancesId);
return prefix + "/index";
}
/**
* 搜索可选商品(skuType=33 的收钱吧商品)
*/
@GetMapping("search")
@ResponseBody
@ApiOperation("搜索收钱吧候选商品")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "keyword", value = "关键词", required = false),
})
public AjaxResult searchGoods(@RequestParam(value = "keyword", required = false) String keyword) {
ResponseDto<List<GoblinAdminSqbGoodsVo>> resp = sqbPerformanceGoodsService.searchGoods(keyword);
if (resp.isSuccess()) {
return AjaxResult.success(resp.getData());
}
return AjaxResult.error(resp.getMessage());
}
/**
* 批量绑定/保存关联商品配置
*/
@PostMapping("bind")
@ResponseBody
@ApiOperation("批量绑定演出与商品(含换购价、演出级自动下架全局配置)")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", required = true, dataType = "String", name = "performancesId", value = "演出ID"),
@ApiImplicitParam(type = "query", required = false, dataType = "int", name = "autoOffline", value = "自动下架开关 0-否 1-是"),
})
public AjaxResult bind(@RequestParam("performancesId") String performancesId,
@RequestParam(value = "autoOffline", required = false, defaultValue = "0") Integer autoOffline,
@RequestBody List<SqbPerfGoodsBindItemParam> items) {
ResponseDto<Boolean> resp = sqbPerformanceGoodsService.bind(performancesId, items, autoOffline);
if (resp.isSuccess()) {
return AjaxResult.success("保存成功");
}
return AjaxResult.error(resp.getMessage());
}
/**
* 解除关联
*/
@PostMapping("unbind")
@ResponseBody
@ApiOperation("解除演出与商品关联")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "performancesId", value = "演出ID"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "skuId", value = "SKU ID"),
})
public AjaxResult unbind(@RequestParam("performancesId") String performancesId,
@RequestParam("skuId") String skuId) {
ResponseDto<Boolean> resp = sqbPerformanceGoodsService.unbind(performancesId, skuId);
if (resp.isSuccess()) {
return AjaxResult.success("已取消关联");
}
return AjaxResult.error(resp.getMessage());
}
/**
* 查询演出已关联商品列表
*/
@GetMapping("list")
@ResponseBody
@ApiOperation("查询演出关联商品列表(含全局配置)")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", required = true, dataType = "String", name = "performancesId", value = "演出ID"),
})
public AjaxResult list(@RequestParam("performancesId") String performancesId) {
ResponseDto<GoblinSqbPerfListRespVo> resp = sqbPerformanceGoodsService.list(performancesId);
if (resp.isSuccess()) {
return AjaxResult.success(resp.getData());
}
return AjaxResult.error(resp.getMessage());
}
}
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('关联推荐商品')"/>
<link rel="stylesheet" th:href="@{/ajax/libs/select2/select2.min.css}"/>
<style>
body { background: #fff; }
.page-wrap { padding: 16px; }
.tip { color: #e8501a; font-size: 12px; margin-left: 8px; }
.section-title { font-weight: bold; margin: 16px 0 8px; }
.auto-offline-bar { margin-bottom: 10px; font-size: 13px; }
.settlement-input { width: 100px; }
.img-thumb { width: 40px; height: 40px; object-fit: cover; border-radius: 4px; }
.select2-container { min-width: 380px; }
.add-row { margin-bottom: 16px; display: flex; align-items: center; gap: 10px; }
</style>
</head>
<body class="white-bg">
<div class="page-wrap">
<div class="section-title">
关联推荐商品
<span class="tip">如未关联商品,则APP和小程序前端推荐模块隐藏</span>
</div>
<!-- Select2 选择框 -->
<div class="add-row">
<select id="goodsSelect" style="width:400px;">
<option value="">请输入商品名称搜索...</option>
</select>
<span style="color:#999;font-size:12px;">选中商品后自动添加到列表</span>
</div>
<!-- 已关联商品 -->
<div class="section-title">
已关联商品
<span class="tip">⚠ 设置换购价格,则商品参与演出票换购活动,不设置则按售价售卖,换购价须小于商品售价</span>
</div>
<div class="auto-offline-bar">
<label>
<input type="checkbox" id="globalAutoOffline" onchange="toggleGlobalAutoOffline(this)"/>
演出结束商品自动下架
</label>
</div>
<div class="table-responsive">
<table class="table table-bordered" id="linkedGoodsTable">
<thead>
<tr>
<th>商品ID</th>
<th>商品头图</th>
<th>商品名称</th>
<th>商品售价(元)</th>
<th>换购价(元)</th>
<th>商品库存</th>
<th>操作</th>
</tr>
</thead>
<tbody id="linkedGoodsBody">
<tr id="emptyRow">
<td colspan="7" style="text-align:center;color:#999;">暂无关联商品</td>
</tr>
</tbody>
</table>
</div>
<button type="button" class="btn btn-primary" onclick="saveConfig()">保存配置</button>
</div>
<th:block th:include="include :: footer"/>
<script th:src="@{/ajax/libs/select2/select2.min.js}"></script>
<script th:inline="javascript">
var performancesId = /*[[${performancesId}]]*/ '';
var prefix = ctx + 'sqb/performance/goods';
// 内存中维护已关联商品列表
var linkedGoods = [];
$(function () {
initSelect2();
loadLinkedGoods();
});
// 初始化 Select2(AJAX 搜索)
function initSelect2() {
$('#goodsSelect').select2({
allowClear: true,
placeholder: '请输入商品名称搜索...',
minimumInputLength: 0,
language: { inputTooShort: function () { return '请输入关键词'; } },
ajax: {
url: prefix + '/search',
dataType: 'json',
delay: 300,
data: function (params) { return { keyword: params.term || '' }; },
processResults: function (resp) {
var list = (resp && resp.data) ? resp.data : [];
return { results: list.map(function (item) {
return { id: item.skuId, text: (item.title || item.spuName || item.skuName), _raw: item };
})};
}
}
});
// 选中即添加
$('#goodsSelect').on('select2:select', function (e) {
var raw = e.params.data._raw;
if (raw) { addLinked(raw); }
// 清空选择框
$(this).val(null).trigger('change');
});
}
// 加载已关联商品
function loadLinkedGoods() {
$.get(prefix + '/list', { performancesId: performancesId }, function (resp) {
if (resp.code === 0 && resp.data) {
// 设置全局开关状态
var globalAuto = resp.data.autoOffline === 1;
$('#globalAutoOffline').prop('checked', globalAuto);
var list = resp.data.goodsList || [];
linkedGoods = list.map(function (item) {
return {
skuId: item.skuId, spuId: item.spuId,
spuName: item.spuName || item.skuName, skuName: item.skuName,
coverPic: item.coverPic || '', price: item.price, stock: item.stock,
settlementPrice: (item.settlementPrice != null ? item.settlementPrice : ''),
persisted: true
};
});
renderLinkedGoods();
}
});
}
function renderLinkedGoods() {
var tbody = document.getElementById('linkedGoodsBody');
if (linkedGoods.length === 0) {
tbody.innerHTML = '<tr id="emptyRow"><td colspan="7" style="text-align:center;color:#999;">暂无关联商品</td></tr>';
return;
}
var html = '';
linkedGoods.forEach(function (item, idx) {
var priceYuan = item.price ? (item.price / 100).toFixed(2) : '-';
var settlementVal = item.settlementPrice || '';
var imgHtml = item.coverPic
? '<img src="' + item.coverPic + '" class="img-thumb"/>'
: '<span style="color:#ccc;font-size:12px;">无图</span>';
html += '<tr data-idx="' + idx + '">';
html += '<td><small>' + item.skuId + '</small></td>';
html += '<td>' + imgHtml + '</td>';
html += '<td>' + (item.spuName || item.skuName || '-') + '</td>';
html += '<td>' + priceYuan + '</td>';
html += '<td><input type="number" class="form-control settlement-input" value="' + settlementVal
+ '" placeholder="不填按售价" onchange="updateSettlement(' + idx + ', this.value)" min="0" step="0.01"/></td>';
html += '<td>' + (item.stock != null ? item.stock : '-') + '</td>';
html += '<td><button type="button" class="btn btn-xs btn-danger" onclick="removeLinked(' + idx + ')">取消关联</button></td>';
html += '</tr>';
});
tbody.innerHTML = html;
}
function addLinked(item) {
for (var i = 0; i < linkedGoods.length; i++) {
if (linkedGoods[i].skuId === item.skuId) {
layer.msg('该商品已在关联列表中');
return;
}
}
linkedGoods.push({
skuId: item.skuId, spuId: item.spuId || '',
spuName: item.title || item.spuName || item.skuName,
skuName: item.title || item.skuName || item.spuName,
coverPic: item.skuPic || item.coverPic || '',
price: item.price,
stock: (item.skuStock != null ? item.skuStock : item.stock),
settlementPrice: null, autoOffline: 0, persisted: false
});
renderLinkedGoods();
layer.msg('已添加,可配置换购价后保存');
}
function updateSettlement(idx, val) {
linkedGoods[idx].settlementPrice = val ? parseFloat(val) : null;
}
function updateAutoOffline(idx, checkbox) {
linkedGoods[idx].autoOffline = checkbox.checked ? 1 : 0;
}
function toggleGlobalAutoOffline(checkbox) {
// 全局开关,无需在 linkedGoods 中逐个维护 autoOffline
// 只需在保存时通过 checkbox.checked 获取
}
function removeLinked(idx) {
var item = linkedGoods[idx];
if (!item) {
return;
}
// 未入库(本次新增、未保存)直接从页面移除
if (!item.persisted) {
linkedGoods.splice(idx, 1);
renderLinkedGoods();
layer.msg('已从待保存列表移除');
return;
}
$.modal.confirm('确认要取消关联该商品吗?', function () {
$.post(prefix + '/unbind', { performancesId: performancesId, skuId: item.skuId }, function (resp) {
if (resp.code === 0) {
linkedGoods.splice(idx, 1);
renderLinkedGoods();
layer.msg('已取消关联');
} else {
layer.msg(resp.msg || resp.message || '操作失败', { icon: 2 });
}
});
});
}
function saveConfig() {
var autoOffline = $('#globalAutoOffline').is(':checked') ? 1 : 0;
var items = linkedGoods.map(function (item) {
return {
skuId: item.skuId, sort: 0,
settlementPrice: (item.settlementPrice === '' || item.settlementPrice == null) ? null : item.settlementPrice
};
});
$.ajax({
url: prefix + '/bind?performancesId=' + encodeURIComponent(performancesId) + '&autoOffline=' + autoOffline,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(items),
success: function (resp) {
if (resp.code === 0) {
layer.msg('保存成功');
loadLinkedGoods();
} else {
layer.msg(resp.msg || resp.message || '保存失败', { icon: 2 });
}
},
error: function () {
layer.msg('请求失败,请重试', { icon: 2 });
}
});
}
</script>
</body>
</html>
......@@ -45,6 +45,8 @@
</li>
<li id="li-tab-12"><a data-toggle="tab" href="#tab-12" aria-expanded="false" onclick="artistLineupInfo()">演出阵容</a>
</li>
<li id="li-tab-13"><a data-toggle="tab" href="#tab-13" aria-expanded="false" onclick="sqbGoodsInfo()">关联推荐商品</a>
</li>
</ul>
<div class="tab-content">
<div id="tab-1" class="tab-pane">
......@@ -373,6 +375,13 @@
height=800px frameborder=0></iframe>
</div>
</div>
<div id="tab-13" class="tab-pane">
<div class="panel-body">
<iframe id="sqb_goods_iframe" name="sqb_goods_iframe" marginwidth=0 marginheight=0
width=100%
height=800px frameborder=0></iframe>
</div>
</div>
</div>
</div>
</div>
......@@ -578,6 +587,11 @@
document.getElementById("artist_lineup_iframe").src = "../artistLineup/" + '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", "");
}
//关联推荐商品
function sqbGoodsInfo() {
document.getElementById("sqb_goods_iframe").src = ctx + "sqb/performance/goods/page/" + '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", "");
}
$("#tab-nav-1").bind("click", function () {
$("#tab_iframe_1").attr("src", prefix + "/performanceStatic/" + '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", ""));
});
......
package com.liquidnet.client.admin.zhengzai.goblin.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 演出-商品关联绑定请求 DTO
*/
@Data
public class SqbPerfGoodsBindItemParam implements Serializable {
private static final long serialVersionUID = 1L;
/** SKU ID */
private String skuId;
/** 排序权重 */
private Integer sort;
/** 换购价格(null 表示不设置换购价,按原价售卖) */
private BigDecimal settlementPrice;
}
package com.liquidnet.client.admin.zhengzai.goblin.service;
import com.liquidnet.client.admin.zhengzai.goblin.dto.SqbPerfGoodsBindItemParam;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinAdminSqbGoodsVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfGoodsVo;
import com.liquidnet.service.goblin.dto.vo.GoblinSqbPerfListRespVo;
import java.util.List;
/**
* 演出-收钱吧商品关联 服务接口
*/
public interface ISqbPerformanceGoodsService {
/**
* 关联演出与商品(批量,支持换购价/演出级自动下架全局配置)
*
* @param performancesId 演出ID
* @param items 绑定项列表(仅含 SKU ID、排序、换购价)
* @param autoOffline 演出结束自动下架 0-否 1-是(全局配置)
* @return 操作结果
*/
ResponseDto<Boolean> bind(String performancesId, List<SqbPerfGoodsBindItemParam> items, Integer autoOffline);
/**
* 解除演出与商品关联
*
* @param performancesId 演出ID
* @param skuId SKU ID
* @return 操作结果
*/
ResponseDto<Boolean> unbind(String performancesId, String skuId);
/**
* 查询演出关联的收钱吧商品列表(包含全局配置)
*
* @param performancesId 演出ID
* @return 商品列表及配置
*/
ResponseDto<GoblinSqbPerfListRespVo> list(String performancesId);
/**
* 搜索收钱吧商品(skuType=33,供关联候选)
*
* @param keyword 商品名称关键词
* @return 商品列表
*/
ResponseDto<List<GoblinAdminSqbGoodsVo>> searchGoods(String keyword);
}
......@@ -249,4 +249,14 @@ public class GoblinRedisUtils {
rk = rk.concat(skuId);
return (int) redisDataSourceUtil.getRedisGoblinUtil().incr(rk, stock);
}
/**
* 清除演出关联收钱吧商品缓存
*
* @param performancesId 演出ID
*/
public void delPerformanceGoodsCache(String performancesId) {
String redisKey = GoblinRedisConst.SQB_PERFORMANCE_GOODS.concat(performancesId);
redisDataSourceUtil.getRedisGoblinUtil().del(redisKey);
}
}
......@@ -56,4 +56,19 @@ public class RedisKeyExpireConst {
// 演出关联阵容缓存过期时间
public static final long PERFORMANCES_ARTISTS_EXPIRE = 30 * 24 * 60 * 60;
/**
* 演出关联收钱吧商品缓存过期时间 (5分钟)
*/
public static final long SQB_PERFORMANCE_GOODS_EXPIRE = 5 * 60;
/**
* 收钱吧订单详情过期时间 (2小时)
*/
public static final long SQB_ORDER_EXPIRE = 2 * 60 * 60;
/**
* 收钱吧下单防重锁过期时间 (10秒)
*/
public static final long SQB_ORDER_LOCK_EXPIRE = 10;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-third</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-common-third-sqb</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.liquidnet.common.third.sqb.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "liquidnet.sqb")
@Component
@Setter
@Getter
public class SqbConfig {
private String appId;
private String appKey;
private String appCode;
/**
* 商户ID
*/
private String merchantId;
/**
* 商户UserID
*/
private String merchantUserId;
/**
* 角色
*/
private String role;
/**
* 公钥
*/
private String publicKey;
private String baseApi;
}
package com.liquidnet.common.third.sqb.param.callback;
import lombok.Data;
@Data
/**
* CallbackParams
*/
public class CallbackParams {
/** 推送事件ID,全局唯一 */
private Long eventId;
/** 推送时间戳,当前时间毫秒值 */
private Long timestamp;
/** 随机字串,用于签名 */
private String nonce;
/** 订单数据 JSON字符串 (详见 SqbOrderContentDTO) */
private String content;
/** 报文签名 */
private String signature;
}
package com.liquidnet.common.third.sqb.param.callback;
import lombok.Data;
import java.util.List;
@Data
/**
* SqbVoucherStatusDTO
*/
public class CouponCallbackContent {
/** 订单Sn */
private String orderSn;
/** 商城Sn */
private String mallSn;
/** 商户Sn */
private String merchantSn;
/** 门店id */
private String storeId;
/** 券列表信息 */
private List<VoucherItem> voucherList;
@Data
/**
* VoucherItem
*/
public static class VoucherItem {
/** 券号 */
private String voucherNo;
/** 类型 */
private String type;
/** 券状态 (0未核销, 1已核销, 2未核销退款, 3已核销退款中, 4未核销退款完成, 5已核销退款完成, 6已失效) */
private Byte targetState;
/** 券原状态 */
private Byte sourceState;
/** 券名称 */
private String voucherName;
/** 操作时间 (yyyy-MM-dd HH:mm:ss) */
private String operationTime;
/** 券对应的商品信息 */
private VoucherProductInfo item;
/** 券二维码地址 */
private String qrCodeUrl;
/** 券二维码内容 */
private String qrCodeContent;
/** 原金额 (单位:分) */
private Long oriAmount;
/** 实收金额 (单位:分) */
private Long receivedAmount;
/** 核销信息 (已核销会有这部分) */
private RedeemInfo redeemInfo;
}
@Data
/**
* VoucherProductInfo
*/
public static class VoucherProductInfo {
/** spuId */
private Long spuId;
/** skuId */
private Long skuId;
/** 商品标题 */
private String title;
/** 商品图片地址 */
private String img;
}
@Data
/**
* RedeemInfo
*/
public static class RedeemInfo {
/** 操作来源 (如: EXTERN) */
private String redeemSource;
/** 操作appId */
private String redeemAppId;
/** 客户端编码 */
private String redeemClientSn;
/** 外部编码 (appId + 请求号) */
private String redeemExternalOrderSn;
/** 操作商户 (userId) */
private String operatorMerchantId;
}
}
package com.liquidnet.common.third.sqb.param.callback;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
/**
* OrderCallbackContent
*/
public class OrderCallbackContent {
/**
* 订单号
*/
private String orderSn;
/**
* 支付流水号列表
*/
private List<String> payTsnList;
/**
* 终端号
*/
private String terminalSn;
/**
* 门店号
*/
private String storeSn;
/**
* 商城名称
*/
private String mallName;
/**
* 订单金额
*/
private BigDecimal orderAmount;
/**
* 创建时间
*/
private String createdAt;
/**
* 订单状态码 0:已创建 10:已支付 35:已完成 40:已取消
*/
private Integer orderStateCode;
/**
* 商品明细列表
*/
private List<Item> items;
/**
* 收集的信息 JSON字符串
*/
private String collectedInfo;
/**
* 预订单编码
*/
private List<String> preOrderSns;
/**
* 订单签名
*/
private String orderSignature;
/**
* 支付的代客下单数据
*/
private List<PreOrder> preOrderList;
/**
* 商品明细
*/
@Data
public static class Item {
/**
* 商品标题
*/
private String title;
/**
* 规格描述
*/
private String skuDesc;
/**
* 数量
*/
private String quantity;
/**
* 单位
*/
private String unit;
}
/**
* 采集数据
*/
@Data
public static class CollectedInfo {
/**
* 控件类型
*/
private String type;
/**
* 控件格式
*/
private String form;
/**
* 字段名
*/
private String fieldName;
/**
* 采集数据内容
*/
private String content;
}
/**
* 支付的代客下单数据
*/
@Data
public static class PreOrder {
/**
* 预订单id
*/
private String preOrderId;
/**
* 预订单编号
*/
private String preOrderSn;
/**
* 请求号
*/
private String requestId;
}
}
package com.liquidnet.common.third.sqb.param.callback;
import lombok.Data;
import java.util.List;
@Data
/**
* SqbRefundContentDTO
*/
public class RefundCallbackContent {
/** 售后单号 (全局唯一) */
private String ticketSn;
/** 订单号 */
private String orderSn;
/** 原状态 */
private Integer sourceState;
/** 目标状态 (20:完成, 15:退款完成, 0:创建, 10:退款中, 30:取消退款) */
private Integer targetState;
/** 下单金额 (单位:分) */
private Long amount;
/** 申请金额 (单位:分) */
private Long applyAmount;
/** 请求号 */
private String requestId;
/** 来源 (如: EXTERN) */
private String requestSource;
/** 退款的商品信息 */
private SqbRefundItemContainer item;
@Data
/**
* SqbRefundItemContainer
*/
public static class SqbRefundItemContainer {
/** 退款类型 (1:商品, 2:金额) */
private Byte type;
/** 商品明细列表 */
private List<SqbRefundItemDetail> items;
}
@Data
/**
* SqbRefundItemDetail
*/
public static class SqbRefundItemDetail {
/** spu id */
private String spuId;
/** sku id */
private String skuId;
/** 标题 */
private String title;
/** 数量 */
private String quantity;
/** 退款类型 (0:正常商品, 1:自定义商品) */
private Byte type;
}
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
/**
* 创建收单请求
*/
@Data
public class AcquiringCreateRequest {
/**
* 应用id
*/
private String appid;
/**
* 卖家信息
*/
private CommonRequest.Seller seller;
/**
* 卖家信息
*/
private Order orderID;
/**
* 订单信息
*/
@Data
public static class Order {
/**
* 订单ID
*/
private String sn;
/**
* 订单密码
*/
private String signature;
}
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
/**
* 收银台查询请求
*/
@Data
public class CashierQueryRequest {
/** 应用id */
private String appid;
/** 商户信息 */
private CommonRequest.Seller seller;
/** 支付模式代码 */
private Integer paymentMode;
/** 支付环境 */
private PaymentEnv paymentEnv;
/** 付款人信息 */
private CommonRequest.Payer payer;
/** 收单信息 */
private CommonRequest.Acquiring acquiringInfo;
@Data
/**
* 支付环境信息
*/
public static class PaymentEnv {
/** ip地址 最大40位 */
private String ip;
/** 支付客户端 最大32位 */
private String client;
/** 设备号 最大64位 */
private String device;
/** 版本号 */
private String version;
}
}
package com.liquidnet.common.third.sqb.param.request;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
public class CommonRequest {
/**
* 商城信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
public static class Mall {
/**
* 商城ID
*/
private String mallSn;
/**
* 商城密码
*/
private String signature;
}
/**
* 卖家信息/商户信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
public static class Seller {
/**
* 商户ID
*/
private String merchantId;
/**
* 商户userID
*/
private String merchantUserId;
/**
* 角色 固定值(super_admin)
*/
private String role;
}
/**
* 买家信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Buyer {
/**
* 买家ID(用户唯一标识)
*/
private String buyerId;
}
/**
* 付款人信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Payer {
/**
* 付款人ID
*/
private String userId;
}
/**
* 收单信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
public static class Acquiring {
/**
* 收单号
*/
private String acquiringSn;
/**
* 收单密钥
*/
private String signature;
}
/**
* 金额构成信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class AmountComposition {
/**
* 金额构成项列表
*/
private List<CompositionItem> compositionItems;
}
/**
* 金额构成项详情
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class CompositionItem {
/**
* 构成项类目
*/
private String category;
/**
* 构成项金额
*/
private Long amount;
}
/**
* 订单信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class OrderInfo {
/**
* 订单ID
*/
private String sn;
/**
* 订单密码
*/
private String signature;
}
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
/**
* 查询券码请求
*/
@Data
public class CouponQueryRequest {
/** 应用id */
private String appid;
/** 订单信息 */
private CommonRequest.OrderInfo orderID;
/** 卖家信息 */
private CommonRequest.Seller seller;
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 券退款请求参数
*/
@Data
public class CouponRefundRequest {
/**
* 应用ID(收钱吧分配的应用id)
*/
private String appid;
/**
* 卖家信息
*/
private CommonRequest.Seller seller;
/**
* 订单信息
*/
private CommonRequest.OrderInfo orderID;
/**
* 申请退款信息不能为空
*/
private RefundInfo refundInfo;
/**
* 退款请求id(${AppCode}+id)
*/
private String requestId;
/**
* 退款来源(固定值:EXTERN)
*/
private String requestSource;
/**
* 退款信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class RefundInfo {
/**
* 金额
*/
private Long applyAmount;
/**
* 退款类型(1商品 2金额)
*/
private Byte type;
/**
* 退款明细(商品必填)
*/
private List<RefundItem> items;
/**
* 退款原因
*/
private String refundReason;
}
/**
* 退款明细商品
*/
@Data
public static class RefundItem {
/**
* spu
*/
private String spuId;
/**
* sku
*/
private String skuId;
/**
* 标题
*/
private String title;
/**
* 商品图片
*/
private String img;
/**
* 数量
*/
private String quantity;
/**
* 退款类型(0正常商品 1自定义商品)
*/
private Byte type;
}
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
import java.util.List;
/**
* 券码状态同步
*/
@Data
public class CouponStatusSyncRequest {
/** 应用ID(聚合收单唯一ID,需申请) */
private String appid;
/** 券号 */
private List<String> voucherNos;
/** 用户ID(自定义,核销用户id) */
private String redeemMerchantId;
/** 外部单号(${AppCode}+id,AppCode需要分配) */
private String redeemExternalOrderSn;
/** 来源(固定值:EXTERN) */
private String redeemSource;
/** 核销终端号(自定义) */
private String clientSn;
/** 券使用状态(0未核销,1已核销) */
private Byte status;
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 创建微信预支付订单请求
*/
@Data
public class CreateWechatPrepayOrderRequest {
/** 应用id */
private String appid;
/** 商户信息 */
private CommonRequest.Seller seller;
/** 收单号 */
private String acquiringSn;
/** 收单签名 */
private String signature;
/** 支付工具 */
private List<UsingPayTool> usingPayTools;
/** 支付环境 */
private PaymentEnv paymentEnv;
/** 支付工具签名 */
private String selectedSignature;
/** 序列号 */
private String seq;
@Data
/**
* 支付工具使用详情
*/
public static class UsingPayTool {
/** 支付工具ID */
private Long id;
/** 支付工具代码 */
private Integer payTool;
/** 支付模式 */
private Integer payMode;
/** 支付金额 */
private String amount;
/** 金额构成 */
private CommonRequest.AmountComposition amountComposition;
/** 用户身份信息 */
private String identity;
/** 支付请求号 */
private String requestSn;
/** 通道扩展参数 */
private Map<String, Object> channelExt;
}
@Data
/**
* 支付环境信息
*/
public static class PaymentEnv {
/** 付款终端ip */
private String clientIp;
/** 付款经纬度 */
private ClientPoi clientPoi;
/** 支付入口 */
private String paymentEntry;
}
@Data
/**
* 地理位置信息
*/
public static class ClientPoi {
/** 经度信息 */
private String longitude;
/** 纬度信息 */
private String latitude;
}
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 商城列表接口
*/
@Data
public class MallListQueryRequest implements Serializable {
private static final long serialVersionUID = 1L;
/** 应用ID */
private String appid;
/** 过滤条件 */
private Filter filter;
/** 分页游标 */
private Cursor cursor;
/** 排序条件 */
private Sort sort;
@Data
/**
* 查询过滤条件
*/
public static class Filter {
/** 商户信息 */
private CommonRequest.Seller seller;
/** 商城行业筛选 */
private List<String> industryCodes;
/** 商城状态筛选 */
private List<Byte> states;
/** 商城状态筛选 */
private Byte state;
/** 创建时间起始 */
private String beginDateTime;
/** 创建时间截止 */
private String endDateTime;
}
@Data
/**
* 排序规则
*/
public static class Sort {
/** 排序方式: DESC/ASC */
private String sort;
/** 排序字段 */
private String sortField;
}
@Data
/**
* 分页游标
*/
public static class Cursor {
/** 游标字段 分页依据的字段(固定为id) */
private String cursorField;
/** 结束游标 上一页的结束游标(首次查询传 null) */
private String endCursor;
/** 查询数量 每页返回的最大订单数 */
private Integer count;
}
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
/**
* 商城列表查询响应数据
*/
@Data
public class MallProductsQueryRequest {
/** 应用ID */
private String appid;
/** 商户信息 */
private CommonRequest.Seller seller;
/** 商城标识 */
private CommonRequest.Mall mallID;
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
* 收钱吧 - 订单创建 请求参数
*
* @author liquidnet
* @since 2026-03-16
*/
@Data
public class OrderCreateRequest implements Serializable {
private static final long serialVersionUID = 1L;
/** 应用ID(聚合收单唯一ID,需申请) */
private String appid;
/** 商城信息 */
private CommonRequest.Mall mallID;
/** 商户信息 */
private CommonRequest.Seller seller;
/** 结算项ID */
private String checkoutItemsId;
/** 买家信息 */
private CommonRequest.Buyer buyer;
/** 请求ID 不超过40位 */
private String requestId;
/** 标题 不超过32 */
private String subject;
}
package com.liquidnet.common.third.sqb.param.request;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 收钱吧 - 创建结算明细 请求参数
*
* @author liquidnet
* @since 2026-03-16
*/
@Data
public class SettlementCreateRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 应用ID(聚合收单唯一ID,需申请)
*/
private String appid;
/**
* 商城信息
*/
private CommonRequest.Mall mallID;
/**
* 商户信息
*/
private CommonRequest.Seller seller;
/**
* 买家信息
*/
private CommonRequest.Buyer buyer;
/**
* 结算明细组(结算条目列表)
*/
private List<CheckoutItem> checkoutItems;
/**
* 结算总金额(单位:分)
*/
private Long amount;
/**
* 结算明细条目
*/
@Data
public static class CheckoutItem {
/**
* sqb 商品识别号(商品唯一标识,如 spuId)
*/
private String spuId;
/**
* sqb 规格识别号(SKU唯一标识,如 skuId)
*/
private String skuId;
/**
* 单价(单位:分)
*/
private Long price;
/**
* 购买数量
*/
private String quantity;
/**
* 商品类型(0 正常商品 1 自定义商品)
*/
private Byte type;
/**
* 商品标题
*/
private String title;
/**
* 商品图片链接
*/
private String image;
}
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.AcquiringCreateData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 创建收单响应参数
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AcquiringCreateResponse extends BaseResponse<AcquiringCreateData> {
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 收钱吧基础响应参数
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class BaseResponse<T> {
/** 是否成功(true-成功,false-失败) */
private Boolean success;
/** 业务码(200-成功,4001等-失败码) */
private String code;
/** 失败信息(success为false时返回失败原因描述) */
private String msg;
/** data */
private T data;
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.CashierQueryData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 自助收银查询响应
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CashierQueryResponse extends BaseResponse<CashierQueryData>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.CouponQueryData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 券详情查询响应
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CouponQueryResponse extends BaseResponse<CouponQueryData>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.CouponRefundData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 券退款响应
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CouponRefundResponse extends BaseResponse<CouponRefundData>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 券状态变更响应
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CouponStatusSyncResponse extends BaseResponse<String>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.CreateWechatPrepayOrderData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 创建微信预支付订单响应
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CreateWechatPrepayOrderResponse extends BaseResponse<CreateWechatPrepayOrderData>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.MallListQueryData;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 商城列表查询响应参数
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class MallListQueryResponse extends BaseResponse<List<MallListQueryData>> {
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.MallProductsQueryData;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 商城商品接口响应
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class MallProductsQueryResponse extends BaseResponse<List<MallProductsQueryData>>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.OrderCreateData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 收钱吧 - 创建订单 响应参数
*
* @author liquidnet
* @since 2026-03-16
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderCreateResponse extends BaseResponse<OrderCreateData>{
}
package com.liquidnet.common.third.sqb.param.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.response.data.SettlementCreateData;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 收钱吧 - 创建结算明细 响应参数
*
* @author liquidnet
* @since 2026-03-16
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SettlementCreateResponse extends BaseResponse<SettlementCreateData> {
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.request.CommonRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 创建收单Data
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AcquiringCreateData extends CommonRequest.Acquiring {
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.request.CommonRequest;
import lombok.Data;
import java.util.List;
/**
* 收银台查询Data
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CashierQueryData {
/**
* 支付工具列表
*/
private List<PayTool> payTools;
/**
* 已选中的支付工具签名
*/
private String selectedSignature;
/**
* 全局提示
*/
private List<String> globalTips;
/**
* 响应唯一序列号
*/
private String seq;
/**
* 收单金额
*/
private Long amount;
/**
* 收款方信息
*/
private Payee payee;
/**
* 业务信息
*/
private BizInfo bizInfo;
/**
* 金额模型
*/
private CashierAmount cashierAmount;
/**
* 支付工具详情
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class PayTool {
/**
* 支付工具id
*/
private Long id;
/**
* 支付工具代码
*/
private String code;
/**
* 支付工具名称
*/
private String name;
/**
* 支付工具类型 (0表示微信)
*/
private Integer type;
/**
* 是否可选
*/
private Boolean selectable;
/**
* 是否选中
*/
private Boolean selected;
/**
* 展示金额
*/
private Long showAmount;
/**
* 提示列表
*/
private List<String> tips;
/**
* 金额构成
*/
private CommonRequest.AmountComposition amountComposition;
}
/**
* 收款方信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Payee {
/**
* 商户id
*/
private String merchantId;
/**
* 商户名称
*/
private String merchantName;
/**
* 门店id
*/
private String storeId;
/**
* 门店名称
*/
private String storeName;
/**
* 终端号
*/
private String terminalSn;
}
/**
* 业务信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class BizInfo {
/**
* 业务方
*/
private String bizParty;
/**
* 交易应用
*/
private String tradeApp;
}
/**
* 金额明细模型
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class CashierAmount {
/**
* 原始支付金额
*/
private Long oriPaymentAmount;
/**
* 实际支付金额
*/
private Long discPaymentAmount;
/**
* 优惠金额
*/
private Long discAmount;
}
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
/**
* 查询券码响应Data
*/
public class CouponQueryData {
/** 券名称 */
private String voucherName;
/** 商品SPU */
private String spuId;
/** 商品SKU */
private String skuId;
/** 商品地址 */
private String itemImageUrl;
/** 券二维码 */
private String url;
/** 券号 */
private String voucherNo;
/** 券类型 0金额券 1商品券 */
private Byte type;
/** 券状态 0未核销 1已核销 2未核销退款 3已核销退款中 4未核销退款完成 5已核销退款完成 6已失效 */
private Byte status;
/** 操作时间 */
private String operationTime;
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 券退款响应结果
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CouponRefundData {
/** 退款单号 */
private String ticketsSn;
/** 单号密码 */
private String ticketSignature;
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 创建微信预支付订单响应
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CreateWechatPrepayOrderData {
/**
* 收单号
*/
private String acquiringSn;
/**
* 收单签名
*/
private String signature;
/**
* 收单状态
*/
private Byte acquiringState;
/**
* 金额明细
*/
private AmountDetails amount;
/**
* 支付凭证
*/
private PaymentVoucher paymentVoucher;
/**
* 通道信息
*/
private ChannelInfo channelInfo;
/**
* 订单金额明细
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class AmountDetails {
/**
* 收单总金额
*/
private Long totalAmount;
/**
* 已付总金额
*/
private Long paidAmount;
/**
* 已退总金额
*/
private Long refundedAmount;
}
/**
* 支付凭证详情
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class PaymentVoucher {
/**
* 时间戳
*/
private String timeStamp;
/**
* 订单详情扩展字符串
*/
private String packageStr;
/**
* 签名
*/
private String paySign;
/**
* Appid
*/
private String appId;
/**
* 签名方式
*/
private String signType;
/**
* 随机字符串
*/
private String nonceStr;
}
/**
* 通道信息详情
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class ChannelInfo {
/**
* 收钱吧通道流水号
*/
private String payTsn;
}
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 商城列表查询响应数据
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class MallListQueryData {
/** 商城编号 */
private String mallSn;
/** 商城签名 */
private String signature;
/** 商城名称 */
private String mallName;
/** 商城状态 0:待上线 1:已上线 2:已下线 */
private Byte state;
/** 商城状态描述 */
private String stateDesc;
/** 内部状态 1启用 0禁用 */
private Byte internalState;
/** 内部状态描述 */
private String internalStateDesc;
/** 删除状态 0未删除 1已删除 */
private Byte isDelete;
/** 删除时间 */
private String deleteTime;
/** 大额开通状态 */
private Byte crossCityPaymentStatus;
/** 大额开通状态描述 */
private String crossCityPaymentStatusDesc;
/** 应用类型 0拼塔商城 目前都是0,无需关注 */
private Integer appType;
/** 行业code */
private String industryCode;
/** 商户信息 */
private Seller seller;
/** 订单统计 */
private OrderStatistics orderStatistics;
/** 商户统计 */
private SellerStatisticsModel sellerStatisticsModel;
/** 创建时间 */
private String ctime;
/** 跨城状态明细 */
private List<CrossCityPayment> crossCityPayments;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
/**
* 商户信息
*/
public static class Seller {
/** 商户号 */
private String merchantSn;
/** 商户id */
private String merchantId;
/** 商户名称 */
private String merchantName;
/** 门店号 */
private String storeSn;
/** 门店id */
private String storeId;
/** 门店名称 */
private String storeName;
/** 终端号 */
private String terminalSn;
/** 大额终端编号 */
private String crossCityTerminalSn;
}
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
/**
* 订单统计
*/
public static class OrderStatistics {
/** 订单数量 */
private Long totalNum;
/** 商品数量 */
private String totalQuantity;
/** 订单总额(分) */
private Long totalAmount;
}
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
/**
* 商户统计
*/
public static class SellerStatisticsModel {
/** 异地交易失败订单数量 */
private Long orderFailNum;
}
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
/**
* 跨城支付明细
*/
public static class CrossCityPayment {
/** 支付工具code 2:支付宝 3:微信 */
private Byte payToolCode;
/** 支付工具描述 */
private String payToolCodeDesc;
/** 大额开通状态 */
private Integer status;
/** 大额开通状态描述 */
private String statusDesc;
}
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 商城商品接口响应数据
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class MallProductsQueryData {
/**
* 商品spuId
*/
private String spuId;
/**
* 商品图片
*/
private List<String> converImages;
/**
* 商品描述
*/
private String productIntroduction;
/**
* 商品标题
*/
private String title;
/**
* 商品规格
*/
private List<Sku> skuResults;
/**
* 商品规格
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Sku {
/**
* 库存类型
*/
private Integer stockType;
/**
* 商品skuId
*/
private String skuId;
/**
* 库存值
*/
private BigDecimal quantity;
/**
* 规格标题
*/
private String skuTitle;
/**
* 规格名称
*/
private String skuName;
/**
* 价格
*/
private Long price;
}
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.common.third.sqb.param.request.CommonRequest;
import lombok.Data;
/**
* 收钱吧创建订单响应参数Data
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderCreateData {
/** 订单编号) */
private String orderSn;
/** 订单密钥) */
private String orderSignature;
/** 收单信息) */
private CommonRequest.Acquiring acquiring;
}
package com.liquidnet.common.third.sqb.param.response.data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 收钱吧创建结算明细响应参数Data
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SettlementCreateData {
/** 结算项ID) */
private String checkoutItemsId;
}
......@@ -16,5 +16,6 @@
<module>liquidnet-common-third-zxlnft</module>
<module>liquidnet-common-third-antchain</module>
<module>liquidnet-common-third-xuper</module>
<module>liquidnet-common-third-sqb</module>
</modules>
</project>
......@@ -251,4 +251,13 @@ liquidnet:
pubKey: pubKey
privateKey: xxxx
#application-dev-end
\ No newline at end of file
#application-dev-end
sqb:
base-api: 'https://open-api.shouqianba.com'
app-id: '2026040900011060'
app-key: '5cd1e48eba44a5264914115cd31df494'
app-code: 'MDTEST'
public-key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuf1oOZm3u5NraTs4F8AABXbtU2jSiWYp+IWmQ36vokuq6s2s3eKQR6l4RkrPPxjC86bIvjT4pApJZJrFMA4YcjY4G49wFZySfom4IPaZlKsOrNGJH0Kag0BSO9U5el1z7dMz7oP9cChbdl4mjKuqYtgnNtaPT+SqhXRQdFcc9kiVybAGs8WEGqsdwxsmD9aZTd4rQMvLEGWIj/MLdo7w1avc0WVSPQSM5jRHjjQmUzEuusv+QGcDt3ttNaip2uo1xoQdcwILYmS6fnWL8xKw4V8lX0CWypUKIZcIc1Y/1N8VeUN+8MirdrS5JSghq62Yifu9A3W/mANB+S6yYwD+WQIDAQAB'
merchant-id: 'b2d63146-934f-401f-a864-14926d952c16'
merchant-user-id: '6d0d632e-50e9-464e-bbb3-be76047ec835'
role: 'super_admin'
\ No newline at end of file
......@@ -250,4 +250,13 @@ liquidnet:
appId: 2021002131608679
pubKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAph6mXcV8gPoEE6ZJJiaSk6x6jwWThLuzHDpZ9CMreZrMRUkGrV0WC920Ktp0tGlpo+BNfF+yBrapTAM8Y0Ztz5XcZWnx7gsfcsV48GHJ09qWbkJfXaBY30iX6O6q59jqWJMITQKz6OLL6HL3wxhoXooKHjXamQ983RTsI6wT4nWsTtBp8mTXCY+8XOQ4rw87AeHHetIoAtogk8H2etKgu1nDaQGXaA+ng+khab+b42pZSBX5g6jWlNCZviAoiy7e3upyu/6lqOhuLDEYzxD0i0oZ/46oIsILvEBCYQvXpbEz8KAM8dD5RBylNSpbu2edrrhytCq+0HFA4f1yp2D7WQIDAQAB
privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCR3u0lL7LvLHK0VG8/FXcA6hjLC+oY4ra/zqs7QRg4EVR8GGQ1G3hg5av6LJxBN5lR07ONYojAOgzmxkoPdM4+aTn9XMfk2sAWen7RMMNcdpyx1eNdCFlm1GzT419CXkIS0Z+gUsxF+PasGamjzfB/Lg66DNZ1zHh1YPa/hwt4KKO1YHiReBCO0hLo7/uGTFUdfzB9pCUIzOTQwaYJPqRc0pz0/9MSF65K/Qtc9lqFpsVXmcWQOZZjoDJGIH6XEbyWXzMRPy5MLryvF3s6ZNURuU7j8t16DVkUTx3p+bEm2U3GmL5btltiouduPUBXHZjRUWAAyFVzc9EMQDQDA89rAgMBAAECggEAQPEHkQuoVPTr6D7C/EnZHk4aVaNrSEL+62veLdYwKx4EB+9wBXjCYhk+NHXR5vMSziw6/tIEYdg2UDOtWy48d+qvB45b7BY7eIZ2mTllcG/aGQ5JV+zUqIQgI0FR8qE2N1yd/Wl/ShOp9jrCnIud63Ec21XF0NIEOvW9RM2hnI+G6YLT9j3NbvJvB4zS7U7tejEXfDP1Oxtjk0ba7Qq04yYdeX16TOrs8VTpAzrj+xW/VJDLBoDfgLvE2G/PqhpFOFfH5V6zKTYfk9VQLh1H9dTj1CkFgRHEJfrFc7XcIIb9nxjnV5JXZmcPjmErQUg1t8JLzjJuQIvzCda5Ba9JEQKBgQDL+iSWlSfyJQyx283VIjhIJ3w9ZRAIWsm/Z1205tdnBeFAzsiItLamASf7Y1zMIMYxFyUD41npFUqetjzdxVHiWlOg2/cE7t2SQWbfrbgqwG0z23If4jUdIj3CJq9yLVWAXvvvm/I/Zrj4oGycYkWV0eGZwoAqIIHIOmTPslacUwKBgQC3Eve/jAHkcgCRppwvDvrw9AYKd6rrs9dyCcsj7Zz2sT7CTw89JcjmjwsLx5+v+zSGgkceG21uIusAfWoAbAYadIGP7zCOBWGVdFvt5hqqKtwL7sLdWrauKw5NId8SlVu0Jvy2dVjzyJ3jfYj1tXt/kCNLgf0zL4yZ+q9G+KBdiQKBgQCkNcSu1XVLIziNFv8lzl6w99i1NF8r2qsARB7UO+K9NaaZnd8i7xj7m4Kshtl2HAxyCMfr0WPYmSNxkhR+FRROvZkFrw+2EPaff7dp61iQUkmXrdq6gElyItbFLo+fw49JwS3hQBJNqEzRG5VUcGjErCqKtmKnh3Pz1c7CxjejsQKBgEbJ6cxCGdU4k6m+D7ROiY+z+8X+YbPEFXF+AfOBhGkLPiYqJc1SF+22r+G9La0BaFz+cPteRaEJlW7aD6vcGTwPgq2iIlc4E3STypwhlnvoGK/wgZ7P3cVY1q3ShAwOfqgZTyxKEbwp/YsiVlwT8Y3wsQUYXUx2fVpoyW+a4X9pAoGBAIQSQ/Dig/6kU7yb9F4uFYVGnrArQk9bFC3tXe1rgyw6nUq5txAmc6ovvrmCVMilQ2nfYuzAtuKy6ouf71u+nTDaTV9LxGOxKzSDu+58R8qZrzcnSerfPivocWmlpN5mse45RVRnlw3EvObCwKE3zkDYKk5PgxKsmLrLAgaF4CGg
#application-test-end
\ No newline at end of file
#application-test-end
sqb:
base-api: 'https://open-api.shouqianba.com'
app-id: '2026040900011060'
app-key: '5cd1e48eba44a5264914115cd31df494'
app-code: 'MDTEST'
public-key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuf1oOZm3u5NraTs4F8AABXbtU2jSiWYp+IWmQ36vokuq6s2s3eKQR6l4RkrPPxjC86bIvjT4pApJZJrFMA4YcjY4G49wFZySfom4IPaZlKsOrNGJH0Kag0BSO9U5el1z7dMz7oP9cChbdl4mjKuqYtgnNtaPT+SqhXRQdFcc9kiVybAGs8WEGqsdwxsmD9aZTd4rQMvLEGWIj/MLdo7w1avc0WVSPQSM5jRHjjQmUzEuusv+QGcDt3ttNaip2uo1xoQdcwILYmS6fnWL8xKw4V8lX0CWypUKIZcIc1Y/1N8VeUN+8MirdrS5JSghq62Yifu9A3W/mANB+S6yYwD+WQIDAQAB'
merchant-id: 'b2d63146-934f-401f-a864-14926d952c16'
merchant-user-id: '6d0d632e-50e9-464e-bbb3-be76047ec835'
role: 'super_admin'
\ No newline at end of file
......@@ -26,3 +26,5 @@ liquidnet:
public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArR8pqWsRMqiunn8uEZGF9AeizJK0vuWjlcNnTbw9Sb96dMVuYu3SRj+Dx4E4SgyEL4CYROou1xwY57kAKEqHdH7o1W41O9jYjXZG38BrtBR+D9Qh9OqGxCZ+e4Gi38XHGg6fn67iXefOqp1kWGd4qc8tIZO1lIDXS19R09D/mESNBMulQdVPyZF7gvd11A+7EEOfRlSOjrtqIoUWV0GIqhLPUtGJk8Uq/d9NLitJyvK3tgz8cvJ4RyK6UpGtRDrqiBiQxbvK9EqMd1sw3zkvM03szSWon4LHFNqvDr6RYfFyFUCvX9UPYmeritENnroEuTBlTFLLb68ed4HZEZDPTQIDAQAB"
private-key: "MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDJAOaA1ikJzDL0vUuTyl3/vlHyuSod6/gFLLrSTD6EJkma5Ld34HHu82/5pEojEvbcU113L9j3fUJlpyjX6CFk6j2KjMIuyFxhgrVFi5WT5m74wYohoWNifkQrgwsO3oxI7cewWFu/w7/yCK9dzI4QxasGUKH9iPweI+26IR0DBbOfC9GVudOy2b2xLrGAevEEHdVTNqrQNdlrTzqAH7r3uk8s2vaBZX+O4gyf7eKdHdC4CVSWfYPLO1sA48MxNwI7OExxfGeV+0wmBMGRSoZ5FhWsqZs+f9jGcmfF+uEfAO71PqHjezXYxq7+oWDfDBPCTc5fo9w5v1HV0aZaYOe1AgMBAAECggEBAI4yR98fInse7XF8NOpBwIv6/QhEfAoc9CHdCfFaJOPiHjIo2a5BpvhPWYj288eqU998TmPSAqDbCUzWm6taOb2lhJHukDT+Y3RMPqcLX275Fsp+SJUQEjoMb3eExh7ny8CQDrOvXoDkH3c/M6ic3Gf7Hslh46dz8D/2VOhXIqoObPlSLzniwiMTDBEwB7IRc3Q+r4V6ZnKt8wjKQZpotBA3TlJlEBBj/h5SbWokwMQbTqFkjl7gVe0ase2WfV+cD4qhPZx6CWphPVyWelg+wpDqXOIQdnE8pgri5a9ZkzgPTOrKyCm+EOa9lZAp81tnb2iFhrlkKPSWUW8zLtZzxMECgYEA+sNyF0U9anyxeKxXtlGKKuMHJSnBpZeU6FSvZjTewFH2Sxh3QwZjg6h5BfvTLH1XfNerx3gdpAPJ+EyAZuEibDr47bp+j4CtT27dVolz5XQ5ugOadwzdNZkq6vhuq1aGATmS/mlNE1/pdMEP9F6hi2HYncER6BFOy0xSwMKCnRECgYEAzTNxhvZ0pb2hPKylxHUydkm3Uznq5Zkquv6II6W5aiKvceETHwdRZLoKc+I0kd0/4fBfJI2Jsjexy51ERiG+8y4wVrcrky6NLw6mnXSvnTSQCftbexheJTg9c5dpfKIj+rxtuBeZ3Sj1MJQ6OSBUYu3iTqstO0Rgp/1ofWQJ8GUCgYEAspxzr0+KJ0cZwbI/54S8vT9n33iWjbQiRDnNlScjYij/HQ4YJI1wZF6jlTeBerbskeesWy+bLS/ltA4Jhz3knuKCXBHyA5TL3UBCN1lAS7c1RuE6LIHlLkAi6ap6aV//ou+3W671T0+JobfB/XVJ61WOTQ8wCfQKA5QhfVsOXYECgYEAvzbm3Ysfm6qfazi+p9lGErASov1fhGA8T1AMcJtnsh1sO8Qu20UodaJfRylNL3dqphIltpwl6eq4RTLhgjDEDTvHU6cQdfB1I5qVbDhlxSpL5uFRl91XLXvA18wKQledC3M3Esr7V/loscIOl1knCaD+t6wPVCEdqK0dB2uHT3kCgYEA3p3rlmCmWzkZ/U8jE4087YEkJWV+r86YC63r4YZEqZtfHk4hNchAYke4jYPqkTtmRVZi2C6KuVr5M3ASHmGWorBY0VA9Abd3daniNocZCeMOt4Z7U6MIbqW7KYSrjx8V8HIsdH7HF97ofRuMH6oaz9bFMM6XwrEAMY+zTdH9A4Y="
notify-url: 'https://testgoblin.zhengzai.tv/goblin/bracelet/callback'
......@@ -126,6 +126,10 @@ global-auth:
- ${liquidnet.info.context}/pay/**
# 健康检查
- ${liquidnet.info.context}/health
# 收钱吧回调
- ${liquidnet.info.context}/goblin/sqb/order/callback
- ${liquidnet.info.context}/goblin/sqb/refund/callback
- ${liquidnet.info.context}/goblin/sqb/coupon/callback
# -----------------------------------------------------------
# -----------------------------------------------------------
......
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 收钱吧商品扩展信息
* </p>
*
* @author liquidnet
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("goblin_sqb_goods_ext")
public class GoblinSqbGoodsExt implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 关联 goblin_goods.spu_id
*/
private String spuId;
/**
* 关联 goblin_goods_sku.sku_id
*/
private String skuId;
/**
* 所属收钱吧商城编号
*/
private String mallSn;
/**
* 商城签名
*/
private String signature;
/**
* 收钱吧商品ID
*/
private String sqbSpuId;
/**
* 收钱吧规格ID (skuId)
*/
private String sqbSkuId;
private LocalDateTime createdAt;
private String updatedBy;
private LocalDateTime updatedAt;
/**
* 删除标记[0-未删除|1-删除]
*/
private String delFlg;
private String deletedBy;
private LocalDateTime deletedAt;
}
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 收钱吧商城信息
* </p>
*
* @author liquidnet
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("goblin_sqb_mall_info")
public class GoblinSqbMallInfo implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 商城唯一ID
*/
private String mallId;
/**
* 收钱吧商城编号
*/
private String mallSn;
/**
* 商城名称
*/
private String mallName;
/**
* 商城密钥
*/
private String signature;
/**
* 关联我方店铺ID
*/
private String storeId;
/**
* 状态 0-禁用 1-启用
*/
private Integer status;
private String createdAt;
private String updatedAt;
}
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 收钱吧订单
* </p>
*
* @author liquidnet
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("goblin_sqb_order")
public class GoblinSqbOrder implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 本地订单ID
*/
private String orderId;
/**
* 用户ID
*/
private String userId;
/**
* 关联演出ID
*/
private String performancesId;
/**
* 商品ID
*/
private String spuId;
/**
* SKU ID
*/
private String skuId;
/**
* 购买数量
*/
private Integer quantity;
/**
* 支付金额(分)
*/
private Long amount;
/**
* 收钱吧订单号
*/
private String sqbOrderSn;
/**
* 收钱吧订单签名
*/
private String sqbOrderSignature;
/**
* 收钱吧收单号
*/
private String sqbAcquiringSn;
/**
* 收钱吧收单号密码
*/
private String sqbAcquiringSign;
/**
* 结算明细ID
*/
private String sqbCheckoutItemsId;
/**
* 券码编号
*/
private String couponSn;
/**
* 核销二维码
*/
private String couponQrCode;
/**
* 券码过期时间
*/
private String couponExpireTime;
/**
* 状态 0-待支付 1-已支付 2-已核销 3-已退款 4-退款中 5-已取消 9-失败
*/
private Integer status;
/**
* 收钱吧-退款号
*/
private String sqbRefundSn;
/**
* 收钱吧-退款号密码
*/
private String sqbRefundSignature;
/**
* 退款原因
*/
private String refundReason;
private String createdAt;
private String updatedAt;
}
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 演出-收钱吧配置
* </p>
*
* @author liquidnet
* @since 2025-03-27
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("goblin_sqb_performance_config")
public class GoblinSqbPerformanceConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 演出ID
*/
@TableId(value = "performances_id", type = IdType.INPUT)
private String performancesId;
/**
* 演出结束自动下架 0-否 1-是
*/
private Integer autoOffline;
private String createdAt;
private String updatedAt;
}
package com.liquidnet.service.goblin.mapper;
import com.liquidnet.service.goblin.entity.GoblinSqbGoodsExt;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 收钱吧商品扩展信息 Mapper 接口
* </p>
*
* @author liquidnet
* @since 2025-01-01
*/
public interface GoblinSqbGoodsExtMapper extends BaseMapper<GoblinSqbGoodsExt> {
}
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