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

Commit 6ec9210e authored by 姜秀龙's avatar 姜秀龙

Merge branch 'refs/heads/master' into temp-data

parents e2b3fd9f 7b24e96f
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "AdamNftVo", description = "个人藏品响应数据")
@Data
public class AdamNftVo implements java.io.Serializable, Cloneable{
private static final long serialVersionUID = 1L; // 手动指定
@ApiModelProperty(position = 1, value = "是否存在NFT 1:存在 2:不存在")
private int hasNft;
@ApiModelProperty(position = 2, value = "是否存在NFT订单 1:存在 2:不存在")
private int hasNftOrder;
private static final AdamNftVo obj = new AdamNftVo();
public static AdamNftVo getNew() {
try {
return (AdamNftVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new AdamNftVo();
}
}
}
......@@ -22,6 +22,9 @@ public class AdamUserProfileVo implements java.io.Serializable, Cloneable {
private AdamUserMemberVo userMemberVo;
@ApiModelProperty(position = 16, value = "会员卡信息")
private AdamMemberJoinusVo memberJoinusVo;
@ApiModelProperty(position = 17, value = "藏品信息")
private AdamNftVo adamNftVo;
// @ApiModelProperty(position = 17, value = "业务账号信息")
// private List<AdamUserBizAcctVo> bizAcctVoList;
......
......@@ -356,6 +356,20 @@ public class GoblinRedisConst {
public static final String GOBLIN_MIX_RESERVE_UID = PREFIX.concat("mix:reserve:uid:");//$mixId:$uid 混合售用户预约保存
// 迈之
// 充值配置的需要充值金额的列表
public static final String GOBLIN_RECHARGE_WRISTBAND = PREFIX.concat("recharge:wristband");
// 迈之的accessToken
public static final String GOBLIN_RECHARGE_MAIZHI_TOKEN = PREFIX.concat("recharge:maizhitoken");
// 获取设备编号定时任务最后一次的时间
public static final String GOBLIN_RECHARGE_DEVICE_NUMBER_ENDTIME = PREFIX.concat("recharge:deviceNumber:endtime:operationNo:");
// 通过分订单号获取订单 id
public static final String GOBLIN_RECHARGE_FOUT_TRADE_NO = PREFIX.concat("recharge:foutTradeNo:");
// 手环订单
public static final String GOBLIN_BRACELET_ORDERID = PREFIX.concat("bracelet:orderId:");
public static final String GOBLIN_BRACELET_RELATED_ORDER = PREFIX.concat("bracelet:reqSeqId:");
/* ----------------------------------------------------------------- */
public static final String GOBLIN_ORDER_LOG = PREFIX.concat("order:log:");//无用
......
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.entity.GoblinBraceletOrder;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 手环-订单VO
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "手环订单vo")
public class GoblinBraceletOrderVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
/**
* 订单ID
*/
@ApiModelProperty(value = "订单ID")
private String orderId;
/**
* 用户ID
*/
@ApiModelProperty(value = "用户ID")
private String userId;
/**
* 绑定用户姓名
*/
@ApiModelProperty(value = "绑定用户姓名")
private String bindName;
/**
* 绑定用户手机号
*/
@ApiModelProperty(value = "绑定用户手机号")
private String bindMobile;
/**
* 绑定用户身份证号码
*/
@ApiModelProperty(value = "绑定用户身份证号码")
private String bindIdcard;
/**
* 请求日期
*/
@ApiModelProperty(value = "请求日期")
private String reqDate;
/**
* 商品描述
*/
@ApiModelProperty(value = "商品描述")
private String goodsDesc;
/**
* 手环ID
*/
@ApiModelProperty(value = "手环ID")
private String wristbandId;
/**
*手环金额
*/
@ApiModelProperty(value = "手环金额")
private BigDecimal wristbandPrice;
/**
*充值金额ID
*/
@ApiModelProperty(value = "充值金额ID")
private String amountId;
/**
*充值金额
*/
@ApiModelProperty(value = "充值金额")
private BigDecimal amountPrice;
/**
* 请求流水号
*/
@ApiModelProperty(value = "请求流水号")
private String reqSeqId;
/**
* 全局流水号
*/
@ApiModelProperty(value = "全局流水号")
private String hfSeqId;
/**
* 交易类型:
* T_JSAPI: 微信公众号支付
* T_MINIAPP: 微信小程序支付
* A_JSAPI: 支付宝JS
* A_NATIVE: 支付宝正扫
* U_NATIVE: 银联正扫
* U_JSAPI: 银联 JS
* D_NATIVE: 数字人民币正扫
* T_H5:微信直连H5支付
* T_APP:微信APP支付
* T_NATIVE:微信正扫
*/
@ApiModelProperty(value = "交易类型")
private String tradeType;
/**
* 用户账单上的交易订单号
*/
@ApiModelProperty(value = "用户账单上的交易订单号")
private String outTransId;
/**
* 用户账单上的商户订单号
*/
@ApiModelProperty(value = "用户账单上的商户订单号")
private String partyOrderId;
/**
* 支付完成时间 格式yyyyMMddHHmmss
*/
@ApiModelProperty(value = "支付完成时间 格式yyyyMMddHHmmss")
private String endTime;
/**
* 入账时间 格式为yyyyMMdd
*/
@ApiModelProperty(value = "入账时间 格式为yyyyMMdd")
private String acctDate;
/**
* 单价
*/
@ApiModelProperty(value = "单价")
private BigDecimal price;
/**
* 应付价格
*/
@ApiModelProperty(value = "应付价格")
private BigDecimal priceTotal;
/**
* 实付价格
*/
@ApiModelProperty(value = "实付价格")
private BigDecimal priceActual;
/**
* 退款价格
*/
@ApiModelProperty(value = "退款价格")
private BigDecimal priceRefund;
/**
* 退款扣除的手续费金额
*/
@ApiModelProperty(value = "退款扣除的手续费金额")
private BigDecimal refundPriceCharges;
/**
* 退款数
*/
@ApiModelProperty(value = "退款数")
private Integer refundNumber;
/**
* 支付时间
*/
@ApiModelProperty(value = "支付时间")
private String timePay;
/**
* 订单状态:
* 0 待付款
* 1 已付款
* 2 已关闭
* 3 正在退款
* 4 已退款
* 5 待关闭
* 6 部分退款
* 7 退款失败
*/
@ApiModelProperty(value = "订单状态")
private Integer status;
/**
* 支付状态:
* 0 未支付
* 1 已支付
* 2 支付失败
*/
@ApiModelProperty(value = "支付状态")
private Integer payStatus;
/**
* 迈之的分订单号
*/
@ApiModelProperty(value = "迈之的分订单号")
private String foutTradeNo;
/**
* 迈之的设备编号
*/
@ApiModelProperty(value = "迈之的设备编号")
private String cardno;
/**
* 迈之的分订单号
*/
@ApiModelProperty(value = "迈之的分订单号")
private Integer refundStatus;
/**
* 迈之的设备编号
*/
@ApiModelProperty(value = "迈之的设备编号")
private String refundStatusNote;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private LocalDateTime createdAt;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private LocalDateTime updatedAt;
private static final GoblinBraceletOrderVo obj = new GoblinBraceletOrderVo();
public static GoblinBraceletOrderVo getNew() {
try {
return (GoblinBraceletOrderVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new GoblinBraceletOrderVo();
}
public GoblinBraceletOrderVo copy(GoblinBraceletOrder goblinBraceletOrder){
if (goblinBraceletOrder == null) return this;
BeanUtils.copyProperties(goblinBraceletOrder, this);
return this;
}
}
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.io.Serializable;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "手环下单结果vo")
public class GoblinBraceletPayResultVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 1, value = "订单ID")
private String orderId;
@ApiModelProperty(position = 3, value = "价格")
private BigDecimal price;
@ApiModelProperty(position = 5, value = "三方支付信息")
private Object payInfo;
private static final GoblinBraceletPayResultVo obj = new GoblinBraceletPayResultVo();
public static GoblinBraceletPayResultVo getNew() {
try {
return (GoblinBraceletPayResultVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new GoblinBraceletPayResultVo();
}
}
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
/**
*
*/
@Data
public class GoblinBraceletRelatedOrderVo {
// 用户ID
private String uid;
// 手环订单ID
private String orderId;
// 调用斗拱请求ID
private String reqSeqId;
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinRechargeAmountVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = " 金额ID")
private String amountId;
@ApiModelProperty(value = "金额名称")
private String name;
@ApiModelProperty(value = "充值金额")
private BigDecimal price;
private final static GoblinRechargeAmountVo obj = new GoblinRechargeAmountVo();
public static GoblinRechargeAmountVo getNew() {
try {
return (GoblinRechargeAmountVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinRechargeAmountVo();
}
}
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinRechargeWristbandVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = " 手环ID")
private String wristbandId;
@ApiModelProperty(value = "手环名称")
private String name;
@ApiModelProperty(value = "手环价格")
private BigDecimal price;
@ApiModelProperty(value = "充值金额")
private List<GoblinRechargeAmountVo> amonutList;
private final static GoblinRechargeWristbandVo obj = new GoblinRechargeWristbandVo();
public static GoblinRechargeWristbandVo getNew() {
try {
return (GoblinRechargeWristbandVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinRechargeWristbandVo();
}
}
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* xx 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03 17:38
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MaiZhiAllVo {
// 基础响应类
@Data
public static class BaseResponse<T> {
private String msg;
private Integer errcode;
private T data;
}
// 登录授权
@Data
public static class AuthParam {
private String appid;
private String appSecret;
}
@Data
public static class AuthResponse extends BaseResponse<AuthResponse.DataRes> {
@Data
public static class DataRes {
private String accessToken;
private Integer expire;
}
}
// 实名
@Data
public static class IdCardParam {
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "身份证")
private String idcard;
}
@Data
public static class CheckIdcardResponse {
private String message;
private String msg;
private Integer result;
private String resultDesc;
private Integer gender;
private Integer age;
private String area;
private Integer errcode;
}
// 新增订单
@Data
public static class OrderParam implements Cloneable {
private String operationNo;
private String out_trade_no;
private String dgoid;
private BigDecimal receipt_amount;
private Integer total;
private String payTime;
private List<User> userList;
@Data
public static class User implements Cloneable {
private String name;
private String phone;
private String idcard;
private BigDecimal money;
private static final User obj = new User();
public static User getNew() {
try {
return (User) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new User();
}
}
private static final OrderParam obj = new OrderParam();
public static OrderParam getNew() {
try {
return (OrderParam) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new OrderParam();
}
}
@Data
public static class OrderResponse extends BaseResponse<String> {
}
// 订单查询
@Data
public static class OrderInfoParam implements Cloneable {
private List<String> orderList;
private static final OrderInfoParam obj = new OrderInfoParam();
public static OrderInfoParam getNew() {
try {
return (OrderInfoParam) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new OrderInfoParam();
}
}
@Data
public static class OrderInfoResponse {
private Integer errcode;
private List<OrderList> outlist;
@Data
public static class OrderList {
private String out_trade_no;
private Integer status;
private BigDecimal receipt_amount;
private String time;
private List<UserOrder> user_order;
@Data
public static class UserOrder {
private String fout_trade_no;
private Integer status;
private String name;
private String phone;
private String idcard;
private BigDecimal money;
}
}
}
// 核销码
@Data
public static class GenerateDeviceCodeResponse {
private String qrcode_str;
private Integer errcode;
}
// 设备编号获取
@Data
public static class DeviceNumberResponse {
private List<NumberList> list;
private Integer errcode;
@Data
public static class NumberList {
private String fout_trade_no;
private String cardno;
}
}
// 设备余额
@Data
public static class DeviceBalanceResponse {
private String cardno;
private BigDecimal money;
private String time;
private String msg;
private Integer errcode;
}
// 设备记录查询
@Data
public static class DeviceRecordResponse {
private List<Record> list;
private String msg;
private Integer errcode;
private String cardno;
private Integer total;
private Integer page;
@Data
public static class Record {
private String note;
private BigDecimal amt;
private BigDecimal ftbal;
private String time;
}
}
// 变更设备状态
@Data
public static class ChangeDeviceStatusResponse implements Cloneable {
private String msg;
private Integer errcode;
private Integer status;
private String note;
private static final ChangeDeviceStatusResponse obj = new ChangeDeviceStatusResponse();
public static ChangeDeviceStatusResponse getNew() {
try {
return (ChangeDeviceStatusResponse) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new ChangeDeviceStatusResponse();
}
}
}
package com.liquidnet.service.goblin.enums;
/**
* 订单状态枚举
*/
public enum OrderStatus {
PENDING_PAYMENT(0, "待付款"),
PAID(1, "已付款"),
CLOSED(2, "已关闭"),
REFUNDING(3, "正在退款"),
REFUNDED(4, "已退款"),
PENDING_CLOSE(5, "待关闭"),
PARTIAL_REFUND(6, "部分退款");
private final int code;
private final String description;
OrderStatus(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
// 通过code获取对应的枚举值
public static OrderStatus fromCode(int code) {
for (OrderStatus status : values()) {
if (status.getCode() == code) {
return status;
}
}
throw new IllegalArgumentException("无效的状态码: " + code);
}
}
package com.liquidnet.service.goblin.enums;
/**
* 支付状态枚举
*/
public enum PayStatus {
NOT_PAID(0, "未支付"),
PAID(1, "已支付"),
PAYMENT_FAILED(2, "支付失败");
private final int code;
private final String description;
PayStatus(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
// 根据 code 获取枚举实例
public static PayStatus fromCode(int code) {
for (PayStatus status : values()) {
if (status.getCode() == code) {
return status;
}
}
throw new IllegalArgumentException("无效的支付状态码: " + code);
}
@Override
public String toString() {
return description;
}
}
package com.liquidnet.service.goblin.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "GoblinBraceletOrderPayParam", description = "手环下单请求参数")
@Data
public class GoblinBraceletOrderPayParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "手环ID")
@NotBlank(message = "wristbandId不能为空")
private String wristbandId;
@ApiModelProperty(value = "金额ID")
@NotBlank(message = "金额ID不能为空")
private String amountId;
@ApiModelProperty(value = "姓名")
@NotBlank(message = "绑定姓名不能为空")
private String name;
@ApiModelProperty(value = "手机号")
@NotBlank(message = "绑定手机号不能为空")
private String mobile;
@ApiModelProperty(value = "身份证号码")
@NotBlank(message = "绑定身份证号码不能为空")
private String idCard;
@ApiModelProperty(value = "子商户用户标识")
@NotBlank(message = "openId不能为空")
private String subOpenId;
}
package com.liquidnet.service.goblin.param.dougong;
import lombok.Data;
import java.util.List;
/**
* 调用斗拱业务层参数
*/
@Data
public class DougongJsPayData {
// 请求日期
private String reqDate;
// 请求流水号
private String reqSeqId;
// 交易类型
private String tradeType;
// 商品描述
private String goodsDesc;
// 交易总金额
private String transAmt;
// 交易有效期
private String timeExpire;
// 商品列表
private List<DougongRequestParam.WxDataGoodsDetail> goodsDetailList;
// 子商户用户标识
private String subOpenid;
}
package com.liquidnet.service.goblin.param.dougong;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 斗拱-请求jspay-参数
*/
@Data
public class DougongRequestParam {
// 请求日期
@JsonProperty("req_date")
private String reqDate;
// 请求流水号
@JsonProperty("req_seq_id")
private String reqSeqId;
// 商户号
@JsonProperty("huifu_id")
private String huifuId;
// 商品描述
@JsonProperty("goods_desc")
private String goodsDesc;
//交易类型
//T_JSAPI: 微信公众号
//T_MINIAPP: 微信小程序
//A_JSAPI: 支付宝JS
//A_NATIVE: 支付宝正扫
//U_NATIVE: 银联正扫
//U_JSAPI: 银联JS
//D_NATIVE: 数字人民币正扫
//T_H5:微信直连H5支付
//T_APP:微信APP支付
//T_NATIVE:微信正扫
@JsonProperty("trade_type")
private String tradeType;
// 交易金额
@JsonProperty("trans_amt")
private String transAmt;
// 交易有效期
@JsonProperty("time_expire")
private String timeExpire;
// 微信参数集合 WxData
@JsonProperty("wx_data")
private String wxData;
// 是否延迟交易
@JsonProperty("delay_acct_flag")
private String delayAcctFlag = "N";
// 异步通知地址
@JsonProperty("notify_url")
private String notifyUrl;
@Data
public static class WxData {
//子商户应用ID
@JsonProperty("sub_appid")
private String subAppid;
// 子商户用户标识
@JsonProperty("sub_openid")
private String subOpenid;
//商品描述
@JsonProperty("body")
private String body;
// 商品详情
@JsonProperty("detail")
private WxDataDetail detail;
}
@Data
public static class WxDataDetail {
@JsonProperty("cost_price")
private String costPrice;
@JsonProperty("goods_detail")
private List<WxDataGoodsDetail> goodsDetail;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class WxDataGoodsDetail {
// 商品编码
@JsonProperty("goods_id")
private String goodsId;
// 商品名称
@JsonProperty("goods_name")
private String goodsName;
// 商品单价(元)
@JsonProperty("price")
private String price;
// 商品数量
@JsonProperty("quantity")
private Integer quantity;
}
}
package com.liquidnet.service.goblin.param.dougong;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class DougongSyncCallbackRespData {
// 业务响应码
@JsonProperty("resp_code")
private String respCode;
//业务响应信息
@JsonProperty("resp_code")
private String respDesc;
//商户号
@JsonProperty("huifu_id")
private String huifuId;
//请求流水号
@JsonProperty("req_seq_id")
private String reqSeqId;
//请求日期
@JsonProperty("req_date")
private String reqDate;
//交易类型
@JsonProperty("trans_type")
private String transType;
//全局流水号
@JsonProperty("hf_seq_id")
private String hfSeqId;
//交易金额
@JsonProperty("trans_amt")
private String transAmt;
//消费者实付金额
@JsonProperty("pay_amt")
private String payAmt;
// 支付完成时间 格式yyyyMMddHHmmss
@JsonProperty("end_time")
private String endTime;
//入账时间 格式为yyyyMMdd
@JsonProperty("acct_date")
private String acctDate;
// 交易状态 S:成功、F:失败,交易状态以此字段为准
@JsonProperty("trans_stat")
private String transStat;
//通知类型 1:通道通知,2:账务通知
@JsonProperty("notify_type")
private Integer notifyType;
@JsonProperty("out_trans_id")
private String outTransId;
}
package com.liquidnet.service.goblin.param.dougong;
import lombok.Data;
/**
* 异步返回参数
* 公共返回
*/
@Data
public class DougongSyncCallbackparam {
private String respCode;
private String respDesc;
private String sign;
private String respData;
}
package com.liquidnet.service.goblin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinBraceletOrderVo;
import com.liquidnet.service.goblin.dto.vo.GoblinBraceletPayResultVo;
import com.liquidnet.service.goblin.entity.GoblinBraceletOrder;
import com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam;
import com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam;
import java.util.List;
import java.util.Map;
public interface IGoblinBraceletOrderService extends IService<GoblinBraceletOrder> {
/**
* 下单
* @param payParam
* @return
*/
ResponseDto<GoblinBraceletPayResultVo> checkOrder(GoblinBraceletOrderPayParam payParam);
/**
* 校验订单状态
*
* @param orderId
* @return
*/
ResponseDto<Map<String, Object>> checkOrderResult(String orderId);
/**
* 斗拱支付回调
* @return
*/
ResponseDto<Boolean> dougongCallBack(DougongSyncCallbackparam callbackparam);
/**
* 获取订单列表
* @return
*/
List<GoblinBraceletOrderVo> getOrderList();
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.param.dougong.DougongJsPayData;
import java.util.Map;
public interface IGoblinDougongPayService {
/**
* @return
*/
Map<String, Object> jsPay(DougongJsPayData data);
boolean verifySign(String data, String sign);
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.entity.GoblinRechargeAmount;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 充值金额选项表 服务类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public interface IGoblinRechargeAmountService extends IService<GoblinRechargeAmount> {
}
package com.liquidnet.service.goblin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.goblin.dto.vo.GoblinRechargeWristbandVo;
import com.liquidnet.service.goblin.dto.vo.MaiZhiAllVo.*;
import com.liquidnet.service.goblin.entity.GoblinRechargeWristband;
/**
* <p>
* 手环信息表 服务类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public interface IGoblinRechargeWristbandService extends IService<GoblinRechargeWristband> {
GoblinRechargeWristbandVo getList();
CheckIdcardResponse auth(IdCardParam param);
OrderResponse createOrder(OrderParam param, String orderId);
OrderInfoResponse getOrder(OrderInfoParam param, String orderId);
GenerateDeviceCodeResponse getQrcode(String outno);
Boolean getDeviceNumber(Integer operationNo);
DeviceBalanceResponse getDeviceBalance(String cardno);
DeviceRecordResponse getDeviceRecord(String cardno, Integer page);
ChangeDeviceStatusResponse changeDeviceStatus(String orderId, int type);
Boolean refundRes();
}
......@@ -62,6 +62,7 @@ public class KylinRedisConst {
public static final String IDCARD_BUY_INFO = "kylin:buy:idCard:";
public static final String PERFORMANCE_ID = "performanceId";
public static final String TICKET_ID = "ticketId";
public static final String TIME_ID = "timeId";
public static final String USE_TIME = "useTime";
public static final String BUY_COUNT = "buyCount";
......@@ -120,4 +121,12 @@ public class KylinRedisConst {
public static final String ORDER_AR_CODE = "kylin:ar:order:";//$key + $orderId
/**
* 福袋相关
*/
// 福袋活动
public static final String LUCKY_BAG_ACTIVITY = "kylin:luckybag:activity";
public static final String LUCKY_BAG = "kylin:luckybag";
public static final String LUCKY_BAG_CODE_LOCK = "kylin:luckybag:code:lock:";
}
package com.liquidnet.service.kylin.constant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* 限购对象枚举
*/
@ApiModel("限购对象枚举")
public enum LimitTargetEnum {
@ApiModelProperty("账户")
ACCOUNT(1, "账户"),
@ApiModelProperty("实名")
IDCARD(2, "实名");
private final int code;
private final String desc;
LimitTargetEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
public static LimitTargetEnum valueOf(int code) {
for (LimitTargetEnum target : values()) {
if (target.code == code) {
return target;
}
}
return null;
}
}
\ No newline at end of file
package com.liquidnet.service.kylin.constant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* 限购类型枚举
*/
@ApiModel("限购类型枚举")
public enum LimitTypeEnum {
@ApiModelProperty("演出")
PERFORMANCE(1, "演出"),
@ApiModelProperty("票种")
TICKET(2, "票种"),
@ApiModelProperty("场次")
TIME(3, "场次");
private final int code;
private final String desc;
LimitTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
public static LimitTypeEnum valueOf(int code) {
for (LimitTypeEnum type : values()) {
if (type.code == code) {
return type;
}
}
return null;
}
}
\ No newline at end of file
package com.liquidnet.service.kylin.constant;
import lombok.Getter;
@Getter
public enum LuckyBagStatusEnum {
// 兑换码显示类型
CODE_SHOW_TYPE_CODE(1, "兑换码"),
CODE_SHOW_TYPE_QR_CODE(2, "二维码"),
// 解锁状态
UNLOCK_STATUS_NOT_UNLOCKED(0, "未解锁"),
UNLOCK_STATUS_UNLOCKED(1, "已解锁"),
// 可用状态
AVAILABLE_STATUS_UNAVAILABLE(0, "不可用"),
AVAILABLE_STATUS_AVAILABLE(1, "可用"),
AVAILABLE_STATUS_RECEIVED(2, "已领取");
private final Integer value;
private final String desc;
LuckyBagStatusEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
}
......@@ -75,6 +75,9 @@ public class BannersParam implements Serializable {
@ApiModelProperty(value = "推广省份 多选 数组", example = "[\"北京市\", \"天津市\", \"沈阳市\"]")
private List provincesNameList;
@ApiModelProperty(value = "演出ID")
private String performanceId;
@JsonIgnore
public KylinBanners getFields(String bannersId, String createdAt) {
KylinBanners fields = new KylinBanners();
......
......@@ -33,6 +33,10 @@ public class CreateTicketTimesParam implements Serializable {
@NotNull(message = "不能为空")
private Integer type;
@ApiModelProperty(value = "是否开启实名认证限购 0关闭 1开启", example = "0")
@NotNull(message = "实名认证限购不能为空")
private Integer realNameLimit;
@ApiModelProperty(value = "", example = "")
@JsonIgnore
private String createdAt;
......
......@@ -44,6 +44,9 @@ public class PerformanceStep2Param implements Serializable,Cloneable {
@ApiModelProperty(hidden = true)
private String merchantId;
@ApiModelProperty(value = "演出类型 1音乐节 2演唱会 3小型演出 4展览 6舞台剧", example = "3")
private Integer type;
@ApiModelProperty(value = "场次数据",hidden = true)
private List<TicketTimesTicketCreatePartnerVo> ticketTimes;
......
......@@ -77,4 +77,10 @@ public class KylinBannersVo implements Serializable {
@ApiModelProperty(value = "修改时间")
private String updatedAt;
@ApiModelProperty(value = "演出ID")
private String performanceId;
@ApiModelProperty(value = "演出名称")
private String performanceName;
}
package com.liquidnet.service.kylin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@ApiModel(value = "福袋兑换码详情VO")
public class KylinLuckyBagCodeDetailVo {
@ApiModelProperty(value = "福袋ID")
private String luckyBagId;
@ApiModelProperty(value = "福袋名称")
private String luckyBagName;
@ApiModelProperty(value = "兑换码")
private String code;
@ApiModelProperty(value = "状态 0:不可用 1:可用 2:已领取")
private int useStatus;
@ApiModelProperty(value = "发放时间")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createdAt;
@ApiModelProperty(value = "领取时间")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime updatedAt;
@ApiModelProperty(value = "领取人信息")
private UserInfo userInfo;
@ApiModelProperty(value = "关联订单订单")
private OrderInfo orderInfo;
@ApiModelProperty(value = "核验人")
private Operator operator;
@ApiModel(value = "用户信息")
@Data
public static class UserInfo {
@ApiModelProperty(value = "用户ID")
private String uid;
@ApiModelProperty(value = "用户昵称")
private String userName;
@ApiModelProperty(value = "用户手机号")
private String userMobile;
}
@ApiModel(value = "订单信息")
@Data
public static class OrderInfo {
@ApiModelProperty(value = "订单ID")
private String orderId;
@ApiModelProperty(position = 15, value = "订单号")
private String orderCode;
@ApiModelProperty(value = "演出名称")
private String performanceTitle;
@ApiModelProperty(value = "票种名称")
private String ticketTitle;
@ApiModelProperty(value = "数量")
private Integer number;
@ApiModelProperty(value = "退款张数")
private Integer refundNumber;
@ApiModelProperty(value = "订单生成时间")
private String createdAt;
@ApiModelProperty(value = "适用时间")
private String useStart;
}
@ApiModel(value = "和燕人")
@Data
@AllArgsConstructor
public static class Operator{
@ApiModelProperty(value = "手机号")
private String mobile;
@ApiModelProperty(value = "昵称")
private String nickName;
}
}
package com.liquidnet.service.kylin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "福袋Scope VO")
public class KylinLuckyBagScopeVo {
@ApiModelProperty(value = "福袋ID")
private String luckyBagId;
@ApiModelProperty(value = "福袋名称")
private String name;
@ApiModelProperty(value = "福袋描述")
private String introduction;
@ApiModelProperty(value = "关联演出ID")
private String performanceId;
@ApiModelProperty(value = "关联演出名称")
private String performanceName;
}
package com.liquidnet.service.kylin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
@Data
@ApiModel(value = "福袋VO")
public class KylinLuckyBagVo implements Serializable {
@ApiModelProperty(value = "福袋列表")
private List<LuckyBagVo> luckyBagVoList;
@ApiModelProperty(value = "福袋活动列表")
private LuckyBagActivityVo luckyBagActivityVo;
@Data
@ApiModel(value = "福袋活动VO")
@AllArgsConstructor
public static class LuckyBagActivityVo {
@ApiModelProperty(value = "活动ID")
private String luckyBagActivityId;
@ApiModelProperty(value = "活动名称")
private String name;
@ApiModelProperty(value = "活动简介")
private String detail;
@ApiModelProperty(value = "跳转地址")
private String targetUrl;
}
@Data
@ApiModel(value = "福袋VO")
public static class LuckyBagVo {
@ApiModelProperty(value = "福袋ID")
private String luckyBagId;
@ApiModelProperty(value = "福袋名称")
private String name;
@ApiModelProperty(value = "福袋描述")
private String introduction;
@ApiModelProperty(value = "兑换码显示状态 1:兑换码 2:二维码")
private Integer codeShowType;
@ApiModelProperty(value = "状态 0:未解锁 1:已解锁")
private Integer status;
@ApiModelProperty(value = "兑换码")
private List<RewardCodeVo> rewardCodeVoList;
}
@Data
@ApiModel(value = "兑换码VO")
public static class RewardCodeVo {
@ApiModelProperty(value = "状态 0:不可用 1:可用 2:已领取")
private Integer useStatus;
@ApiModelProperty(value = "兑换码")
private String code;
}
public static KylinLuckyBagVo of(List<LuckyBagVo> luckyBagVoList,
LuckyBagActivityVo luckyBagActivityVo){
KylinLuckyBagVo kylinLuckyBagVo = new KylinLuckyBagVo();
kylinLuckyBagVo.setLuckyBagVoList(luckyBagVoList);
kylinLuckyBagVo.setLuckyBagActivityVo(luckyBagActivityVo);
return kylinLuckyBagVo;
}
public static KylinLuckyBagVo ofEmpty(){
KylinLuckyBagVo kylinLuckyBagVo = new KylinLuckyBagVo();
kylinLuckyBagVo.setLuckyBagVoList(Collections.emptyList());
return kylinLuckyBagVo;
}
}
package com.liquidnet.service.kylin.dto.vo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesForOrderVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 限购错误结果VO
*/
@ApiModel("限购错误结果VO")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LimitErrorResultVo {
/**
* 限购类型
*/
@ApiModelProperty("限购类型:1-演出,2-票种,3-场次")
private Integer limitType;
/**
* 限购对象
*/
@ApiModelProperty("限购对象:1-账户,2-实名")
private Integer limitTarget;
/**
* 限购数量
*/
@ApiModelProperty("限购数量")
private Integer limitCount;
/**
* 当前已购买数量
*/
@ApiModelProperty("当前已购买数量")
private Integer currentCount;
/**
* 会员逻辑
*/
@ApiModelProperty("0全员 2会员专属 1会员时间段")
private Integer memberType;
/**
* 演出 id
*/
@ApiModelProperty("演出 id")
private String performancesId;
/**
* 票种 id
*/
@ApiModelProperty("票种 id")
private String ticketsId;
/**
* 场次 id
*/
@ApiModelProperty("场次 id")
private String timeId;
/**
* 身份证
*/
@ApiModelProperty("身份证")
private String idCard;
/**
* 姓名
*/
@ApiModelProperty("姓名")
private String idName;
/**
* 入场人 id
*/
@ApiModelProperty("入场人 id")
private String entersId;
/**
* 错误信息
*/
@ApiModelProperty("错误信息")
private String errorMessage;
/**
* 已购买的票信息
*/
@ApiModelProperty("已购买的票信息")
private List<KylinOrderTicketEntitiesForOrderVo> entities;
}
\ No newline at end of file
......@@ -30,6 +30,8 @@ public class KylinTicketTimesVo implements Serializable,Cloneable{
private String useStart;
@ApiModelProperty(value = "适用结束时间")
private String useEnd;
@ApiModelProperty(value = "是否开启实名认证限购 0关闭 1开启")
private Integer realNameLimit;
@ApiModelProperty(value = "票种")
private List<KylinTicketVo> ticketList;
......@@ -47,6 +49,7 @@ public class KylinTicketTimesVo implements Serializable,Cloneable{
this.ticketTimesId = ticketTimes.getTicketTimesId();
this.title = ticketTimes.getTitle();
this.type = ticketTimes.getType();
this.realNameLimit = ticketTimes.getRealNameLimit();
this.useStart = DateUtil.Formatter.yyyyMMddHHmmss.format(ticketTimes.getUseStart());
this.useEnd = DateUtil.Formatter.yyyyMMddHHmmss.format(ticketTimes.getUseEnd());
}
......@@ -57,5 +60,6 @@ public class KylinTicketTimesVo implements Serializable,Cloneable{
this.type = ticketTimes.getType();
this.useStart = ticketTimes.getUseStart();
this.useEnd = ticketTimes.getUseEnd();
this.realNameLimit = ticketTimes.getRealNameLimit();
}
}
package com.liquidnet.service.kylin.dto.vo.mongo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class KylinOrderTicketEntitiesForOrderVo implements Serializable, Cloneable {
private String orderId;
private String timeId;
@ApiModelProperty("演出名称")
private String performanceTitle;
@ApiModelProperty("票种名称")
private String ticketTitle;
@ApiModelProperty("场次开始")
private String useStart;
@ApiModelProperty("场次开始结束")
private String useEnd;
@ApiModelProperty("isPayment")
private Integer isPayment;
private static final KylinOrderTicketEntitiesForOrderVo obj = new KylinOrderTicketEntitiesForOrderVo();
public static KylinOrderTicketEntitiesForOrderVo getNew() {
try {
return (KylinOrderTicketEntitiesForOrderVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinOrderTicketEntitiesForOrderVo();
}
}
}
......@@ -37,6 +37,8 @@ public class KylinTicketTimesPartnerVo implements Serializable ,Cloneable{
@ApiModelProperty(value = "是否开启缺票登记")
private Integer isLackRegister;
@ApiModelProperty(value = "是否开启实名认证限购 0关闭 1开启")
private Integer realNameLimit;
@ApiModelProperty(value = "创建时间")
private String createdAt;
......@@ -61,6 +63,7 @@ public class KylinTicketTimesPartnerVo implements Serializable ,Cloneable{
this.setUseEnd(DateUtil.Formatter.yyyyMMddHHmmss.format(ticketTimes.getUseEnd()));
this.setStatus(ticketTimes.getStatus());
this.setType(ticketTimes.getType());
this.setRealNameLimit(ticketTimes.getRealNameLimit());
this.setCreatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(ticketTimes.getCreatedAt()));
this.setUpdatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(ticketTimes.getUpdatedAt()));
return this;
......
......@@ -31,6 +31,9 @@ public class TicketTimesTicketCreatePartnerVo implements Serializable ,Cloneable
@ApiModelProperty(value = "状态 1单日票 2通票")
private Integer type;
@ApiModelProperty(value = "是否开启实名认证限购 0关闭 1开启")
private Integer realNameLimit;
@ApiModelProperty(value = "创建时间")
private String createdAt;
......
package com.liquidnet.service.kylin.dto.vo.returns;
import com.liquidnet.service.kylin.dto.vo.LimitErrorResultVo;
import com.liquidnet.service.kylin.dto.vo.middle.PayDataVo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PayInnerResultVo implements Serializable,Cloneable {
......@@ -18,6 +20,7 @@ public class PayInnerResultVo implements Serializable,Cloneable {
private String returnUrl;
private BigDecimal price;
private PayDataVo payData;
private List<LimitErrorResultVo> limitResult;
private static final PayInnerResultVo obj = new PayInnerResultVo();
public static PayInnerResultVo getNew() {
......
package com.liquidnet.service.kylin.service;
public interface IFeishuBotService {
void sendTextMessage(String text);
}
package com.liquidnet.service.kylin.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagCodeDetailVo;
import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagScopeVo;
import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo;
import java.util.List;
public interface IKylinLuckyBagService {
/**
* 根据订单ID获取福袋
*
* @param orderId
* @return
*/
ResponseDto<KylinLuckyBagVo> getLuckyBagByOrderId(String orderId);
/**
* 获取福袋验码列表
*
* @param mobile
* @return
*/
ResponseDto<List<KylinLuckyBagScopeVo>> getLuckyBagListScope(String mobile);
/**
* 获取福袋详情
*
* @param authMobile
* @param code
* @param luckyBagId
* @return
*/
ResponseDto<KylinLuckyBagCodeDetailVo> getCodeDetail(String authMobile, String code, String luckyBagId);
/**
* 验码
* @param authMobile
* @param code
* @param luckyBagId
* @return
*/
ResponseDto<Boolean> consumeCode(String authMobile, String code, String luckyBagId);
}
......@@ -6,6 +6,7 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.PayAgainParam;
import com.liquidnet.service.kylin.dto.param.PayOrderParam;
import com.liquidnet.service.kylin.dto.param.SyncOrderParam;
import com.liquidnet.service.kylin.dto.vo.LimitErrorResultVo;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.KylinOrderTickets;
......@@ -73,4 +74,6 @@ public interface IKylinOrderTicketsService {
//获取 订单Ar激活码
ResponseDto<List<String>> getOrderArCode(String orderId);
ResponseDto<List<LimitErrorResultVo>> limitInfo(List<LimitErrorResultVo> param);
}
......@@ -9,6 +9,7 @@ import com.liquidnet.service.kylin.dto.param.PerformanceMemberAuditParam;
import com.liquidnet.service.kylin.dto.param.SysDamaiParam;
import com.liquidnet.service.kylin.dto.vo.admin.*;
import com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinPerformancesVo;
import com.liquidnet.service.kylin.entity.KylinOrderImport;
import com.liquidnet.service.kylin.entity.KylinPerformances;
......@@ -320,4 +321,6 @@ public interface IKylinPerformancesAdminService {
* @return: com.liquidnet.service.kylin.dto.vo.admin.KylinPerformanceAgentVo
**/
List<KylinPerformanceSubscribeTicketStatisticalDao> getPerformanceSubscribe(String performancesId);
List<KylinPerformancesVo> searchPerformanceByTitle(String title);
}
......@@ -60,6 +60,10 @@ public class SweetConstant {
public static final String REDIS_KEY_SWEET_SEND_COUPON = "sweet:integralActivity:coupon:send:";
// 答题活动
public final static String REDIS_KEY_SWEET_ANSWER_PHONE = "sweet:answer:phone:";
// doudou
public final static String REDIS_KEY_SWEET_DOUDOU_USER = "sweet:doudou:uid:";
public final static String REDIS_KEY_SWEET_DOUDOU_SCOPE_MOBILE = "sweet:doudou:scope:mobile:";
public static final String REDIS_KEY_SWEET_DOUDOU_ACTIVE = "sweet:doudou:active";
// 城市投票活动
public final static String REDIS_KEY_SWEET_CITY_VOTE_STAT_LIST = ":StatList";
public final static String REDIS_KEY_SWEET_CITY_VOTE_CITY_CODE = ":cityCode:";
......
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "SweetDouDouCheckParam", description = "入参")
@Data
public class SweetDouDouCheckParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 1, required = true, value = "核验人手机号", example = "10000000000")
@NotBlank(message = "authMobile不能为空")
private String authMobile;
@ApiModelProperty(position = 2, required = true, value = "doudouId", example = "5223713433667502081163230")
@NotBlank(message = "doudouId不能为空")
private String doudouId;
@ApiModelProperty(position = 4, required = true, value = "activeId", example = "3189092902231364195328061")
@NotBlank(message = "activeId不能为空")
private String activeId;
@ApiModelProperty(position = 3, required = true, value = "用户ID", example = "937724050260131847782985")
@NotBlank(message = "userId不能为空")
private String userId;
}
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "SweetDouDouParam", description = "入参")
@Data
public class SweetDouDouParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 10, required = true, value = "观演人姓名", example = "张三")
@NotBlank(message = "username不能为空")
private String username;
@ApiModelProperty(position = 11, required = true, value = "观演人手机号", example = "15811112222")
@NotBlank(message = "phone不能为空")
private String phone;
@ApiModelProperty(position = 12, required = true, value = "3442", example = "活动 ID")
@NotBlank(message = "activeId不能为空")
private String activeId;
@ApiModelProperty(position = 13, required = true, value = "img", example = "图片地址")
@NotBlank(message = "imgUrl不能为空")
private String imgUrl;
@ApiModelProperty(position = 14, required = true, value = "想给doudou说的话", example = "我爱你啦啦啦")
private String mark;
}
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 失物招领管理员查询参数
*
* @author liquidnet
* @since 2025-01-18
*/
@Data
@ApiModel("失物招领管理员查询参数")
public class SweetLostFoundAdminParam implements Serializable {
@ApiModelProperty("主键ID 编辑填写")
@NotNull(message = "ID不能为空", groups = ValidationGroups.Update.class)
private Long id;
@ApiModelProperty("手机号")
@NotBlank(message = "手机号不能为空")
private String phone;
@ApiModelProperty("备注姓名")
private String name;
@ApiModelProperty("权限类型:1-发帖员(仅发帖,发布后不可编辑) 2-管理员(发帖、编辑、删除)")
@NotNull(message = "权限类型不能为空")
private Integer permissionType;
@ApiModelProperty("授权范围:1-本站次 2-全站")
@NotNull(message = "授权范围不能为空")
private Integer authScope;
@ApiModelProperty("演出ID")
@NotBlank(message = "演出ID不能为空")
private String performanceId;
}
\ No newline at end of file
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 失物招领信息查询参数
*
* @author liquidnet
* @since 2025-01-18
*/
@Data
@ApiModel("失物招领信息查询参数")
public class SweetLostFoundItemParam implements Serializable {
@ApiModelProperty("主键ID 编辑填写")
@NotNull(message = "ID不能为空", groups = ValidationGroups.Update.class)
private Long id;
@ApiModelProperty("演出ID")
@NotBlank(message = "演出ID不能为空")
private String performanceId;
@ApiModelProperty("物品类型:1-证件卡类 2-3C数码类 3-服饰类 4-其他")
@NotNull(message = "物品类型不能为空")
private Integer itemType;
@ApiModelProperty("拾捡地:1-音乐节现场 2-其他")
@NotNull(message = "拾捡地不能为空")
private Integer pickupLocation;
@ApiModelProperty("捡拾日期")
@NotBlank(message = "捡拾日期不能为空")
private String pickupDate;
@ApiModelProperty("物品描述,最多120字")
@NotBlank(message = "物品描述不能为空")
private String description;
@ApiModelProperty("物品图片URL")
@NotBlank(message = "物品图片URL不能为空")
private String itemImage;
@ApiModelProperty("发布人uid")
@NotBlank(message = "发布人uid不能为空")
private String publisherUid;
}
\ No newline at end of file
package com.liquidnet.service.sweet.param;
import javax.validation.groups.Default;
/**
* <p>
* xx 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2025-08-20 13:13
*/
public class ValidationGroups {
public interface Create extends Default {}
public interface Update extends Default {}
public interface Delete extends Default {}
public interface Query extends Default {}
}
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetDoudou;
import com.liquidnet.service.sweet.param.SweetDouDouCheckParam;
import com.liquidnet.service.sweet.param.SweetDouDouParam;
import com.liquidnet.service.sweet.vo.SweetDouDouActiveVo;
import com.liquidnet.service.sweet.vo.SweetDouDouVo;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
* doudou预约签名CD记录表 服务类
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
public interface ISweetDoudouService extends IService<SweetDoudou> {
ResponseDto<SweetDouDouVo> info(String activeId);
ResponseDto<SweetDouDouVo> create(@Valid SweetDouDouParam param);
ResponseDto check(SweetDouDouCheckParam param);
ResponseDto<SweetDouDouVo> detail(SweetDouDouCheckParam param);
boolean winningUpload(MultipartFile file);
ResponseDto<List<SweetDouDouActiveVo>> getActiveList();
ResponseDto<SweetDouDouActiveVo> getActiveDetail(String activeId);
}
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetLostFoundAdmin;
import com.liquidnet.service.sweet.param.SweetLostFoundAdminParam;
import com.liquidnet.service.sweet.vo.SweetLostFoundAdminVo;
import java.util.List;
/**
* 失物招领管理员服务接口
*
* @author liquidnet
* @since 2025-01-18
*/
public interface ISweetLostFoundAdminService extends IService<SweetLostFoundAdmin> {
/**
* 添加管理员
*
* @param admin 管理员信息
* @return 是否成功
*/
ResponseDto<Boolean> addAdmin(SweetLostFoundAdminParam admin);
/**
* 编辑管理员
*
* @param admin 管理员信息
* @return 是否成功
*/
ResponseDto<Boolean> editAdmin(SweetLostFoundAdminParam admin);
/**
* 删除管理员
*
* @param id 管理员ID
* @return 是否成功
*/
boolean deleteAdmin(Long id);
/**
* 获取管理员详情
*
* @param id 管理员ID
* @return 管理员详情
*/
SweetLostFoundAdminVo getAdminDetail(Long id);
/**
* 分页查询管理员列表
*
* @param performanceId 查询参数
* @return 分页结果
*/
List<SweetLostFoundAdminVo> getAdminList(String performanceId);
/**
* 检查是否有管理员权限
*
* @param phone 手机号
* @param performanceId 演出ID
* @return 权限详情信息
*/
SweetLostFoundAdminVo hasPermission(String phone, String performanceId);
}
\ No newline at end of file
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.sweet.entity.SweetLostFoundItem;
import com.liquidnet.service.sweet.param.SweetLostFoundItemParam;
import com.liquidnet.service.sweet.vo.SweetLostFoundItemVo;
import java.util.List;
/**
* 失物招领信息服务接口
*
* @author liquidnet
* @since 2025-01-18
*/
public interface ISweetLostFoundItemService extends IService<SweetLostFoundItem> {
/**
* 发布失物信息
*
* @param item 失物信息
* @return 是否成功
*/
boolean publishItem(SweetLostFoundItemParam item);
/**
* 编辑失物信息
*
* @param item 失物信息
* @return 是否成功
*/
boolean editItem(SweetLostFoundItemParam item);
/**
* 删除失物信息
*
* @param id 物品ID
* @return 是否成功
*/
boolean deleteItem(Long id);
/**
* 获取失物信息详情
*
* @param id 物品ID
* @return 失物信息详情
*/
SweetLostFoundItemVo getItemDetail(Long id);
/**
* 根据演出ID查询失物信息列表
*
* @param itemType 演出ID
* @param performanceId 演出ID
* @return 失物信息列表
*/
List<SweetLostFoundItemVo> getItemList(Integer itemType, String performanceId);
}
\ No newline at end of file
......@@ -25,4 +25,6 @@ public interface ISweetManualService extends IService<SweetManual> {
//发布与否
ResponseDto<Boolean> changeRelease(String manualId, Integer isRelease);
ResponseDto<Boolean> changeReleaseManual(String manualId, Integer isReleaseManual);
}
package com.liquidnet.service.sweet.vo;
import com.liquidnet.service.sweet.entity.SweetDoudouActive;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("SweetDouDouActiveVo")
public class SweetDouDouActiveVo implements Serializable, Cloneable {
@ApiModelProperty("doudou_id")
private String doudouId;
@ApiModelProperty("user_id")
private String userId;
@ApiModelProperty("活动ID")
private String activeId;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("活动详情")
private String details;
@ApiModelProperty("卡片背景图")
private String cardImages;
@ApiModelProperty("活动详情背景图")
private String detailImages;
@ApiModelProperty("活动详情URL")
private String targetUrl;
@ApiModelProperty("活动状态:2:进行中 3:已结束")
private Integer activeStatus;
@ApiModelProperty("状态 0未登记 1已登记 2未中签 3已中签 4已核销")
private Integer status;
private static final SweetDouDouActiveVo obj = new SweetDouDouActiveVo();
public static SweetDouDouActiveVo getNew() {
try {
return (SweetDouDouActiveVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetDouDouActiveVo();
}
}
public SweetDouDouActiveVo copy(SweetDoudouActive source) {
if (null == source) return this;
this.activeId = source.getActiveId();
this.title = source.getTitle();
this.cardImages = source.getCardImages();
this.detailImages = source.getDetailImages();
this.targetUrl = source.getTargetUrl();
this.details = source.getDetails();
return this;
}
}
package com.liquidnet.service.sweet.vo;
import com.liquidnet.service.sweet.entity.SweetDoudouScope;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class SweetDouDouScopeVo implements Serializable, Cloneable{
@ApiModelProperty("mobile")
private String mobile;
@ApiModelProperty("nickName")
private String nickName;
@ApiModelProperty("realName")
private String realName;
@ApiModelProperty("idCard")
private String idCard;
@ApiModelProperty("status")
private Integer status;
@ApiModelProperty("createdAt")
private LocalDateTime createdAt;
@ApiModelProperty("updatedAt")
private LocalDateTime updatedAt;
private static final SweetDouDouScopeVo obj = new SweetDouDouScopeVo();
public static SweetDouDouScopeVo getNew() {
try {
return (SweetDouDouScopeVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetDouDouScopeVo();
}
}
public SweetDouDouScopeVo copy(SweetDoudouScope source) {
if (null == source) return this;
this.mobile = source.getMobile();
this.nickName = source.getNickName();
this.realName = source.getRealName();
this.idCard = source.getIdCard();
this.status = source.getStatus();
this.createdAt = source.getCreatedAt();
this.updatedAt = source.getUpdatedAt();
return this;
}
}
package com.liquidnet.service.sweet.vo;
import com.liquidnet.service.sweet.entity.SweetDoudou;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class SweetDouDouVo implements Serializable, Cloneable {
@ApiModelProperty("doudou_id")
private String doudouId;
@ApiModelProperty("user_id")
private String userId;
@ApiModelProperty("观演人姓名")
private String username;
@ApiModelProperty("观演人手机号")
private String phone;
@ApiModelProperty("图片地址")
private String imgUrl;
@ApiModelProperty("活动 ID")
private String activeId;
@ApiModelProperty("想给doudou说的话")
private String mark;
@ApiModelProperty("状态 1已登记 2未中签 3已中签 4已核销")
private Integer status;
@ApiModelProperty("活动名称")
private String activeTitle;
private static final SweetDouDouVo obj = new SweetDouDouVo();
public static SweetDouDouVo getNew() {
try {
return (SweetDouDouVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetDouDouVo();
}
}
public SweetDouDouVo copy(SweetDoudou source) {
if (null == source) return this;
this.setPhone(source.getPhone());
return this;
}
}
package com.liquidnet.service.sweet.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 失物招领信息返回VO
*
* @author liquidnet
* @since 2025-01-18
*/
@Data
@ApiModel("失物招领信息返回")
public class SweetLostFoundItemVo {
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("失物信息ID")
private String itemId;
@ApiModelProperty("物品图片URL")
private String itemImage;
@ApiModelProperty("物品描述,最多120字")
private String description;
@ApiModelProperty("拾捡地:1-音乐节现场 2-其他")
private Integer pickupLocation;
@ApiModelProperty("捡拾日期")
private String pickupDate;
@ApiModelProperty("物品类型:1-证件卡类 2-3C数码类 3-服饰类 4-其他")
private Integer itemType;
@ApiModelProperty("演出ID")
private String performanceId;
@ApiModelProperty("发布人uid")
private String publisherUid;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}
\ No newline at end of file
......@@ -19,6 +19,7 @@ public enum BannersDisplayLocation {
DISPLAY_LOCATION6("YOUNG BLOOD", 6),
DISPLAY_LOCATION8("视频", 8),
DISPLAY_LOCATION9("正在下单", 9),
DISPLAY_LOCATION10("福袋", 10),
;
private String name;
private int index;
......
......@@ -69,7 +69,7 @@ public class KylinBannersAdminController extends BaseController {
return prefix + "/create";
}
@Log(title = "Banner列表", businessType = BusinessType.INSERT)
@Log(title = "创建Banner", businessType = BusinessType.INSERT)
@RequiresPermissions("kylin:banners:create")
@PostMapping("create")
@ResponseBody
......@@ -105,7 +105,7 @@ public class KylinBannersAdminController extends BaseController {
return prefix + "/update";
}
@Log(title = "Banner列表", businessType = BusinessType.UPDATE)
@Log(title = "修改Banner", businessType = BusinessType.UPDATE)
@RequiresPermissions("kylin:banners:update")
@PostMapping("update")
@ResponseBody
......@@ -142,7 +142,7 @@ public class KylinBannersAdminController extends BaseController {
return getDataTable(result.getList());
}
@Log(title = "Banner列表", businessType = BusinessType.DELETE)
@Log(title = "删除Banner", businessType = BusinessType.DELETE)
@RequiresPermissions("kylin:banners:delete")
@PostMapping("delete")
@ResponseBody
......
......@@ -124,6 +124,10 @@
field: 'createdAt',
title: '创建时间'
},
{
field: 'performanceName',
title: '关联演出名称'
},
{
title: '操作',
align: 'center',
......
......@@ -155,39 +155,72 @@
var url9 = "[[${url9}]]";
var url14 = "[[${url14}]]";
let count = 0;
function areaSelect (e) {
function areaSelect(e) {
console.log(e.value, 'kan')
if (e.value == 9) {
// 清空之前的输入和选择
$("#searchIpt").val('').attr('data-id', '');
$("#selectActivity label").text("选择活动"); // 默认文本
if (e.value == 9 || e.value == 10) {
count++;
if (count % 2) {
console.log(count, 'dsa')
// 根据不同类型设置参数
let url, keyField, idField, searchTip;
if (e.value == 9) {
url = '/goblin/marketing/zhengzai/list/get?pageSize=10&pageNum=1&orderByColumn=createdAt&isAsc=desc&status=-1&purchaseName=';
keyField = 'name';
idField = 'selfMarketId';
searchTip = '请输入活动名称';
$("#selectActivity label").text("选择活动");
} else if (e.value == 10) {
url = '/kylin/performances/search?title='; // 演出搜索接口
keyField = 'title';
idField = 'performanceId';
searchTip = '请输入演出名称';
$("#selectActivity label").text("选择演出");
}
$("#selectActivity").show();
// 销毁旧的实例并重新初始化
$("#searchIpt").bsSuggest('destroy').attr('placeholder', searchTip);
$("#searchIpt").bsSuggest({
idField: 'selfMarketId', // data.value 的第几个数据,作为input输入框的内容
keyField: 'name', // data.value 的第几个数据,作为input输入框的内容
allowNoKeyword: false, //是否允许无关键字时请求数据
showBtn:false,
multiWord: true, //以分隔符号分割的多关键字支持
idField: idField,
keyField: keyField,
allowNoKeyword: false,
showBtn: false,
multiWord: true,
hideOnSelect: true,
getDataMethod: "url", //获取数据的方式,总是从 URL 获取
effectiveFields: ['name'],
url: '/goblin/marketing/zhengzai/list/get?pageSize=10&pageNum=1&orderByColumn=createdAt&isAsc=desc&status=-1&purchaseName=',
/*如果从 url 获取数据,并且需要跨域,则该参数必须设置*/
processData: function (json) { // url 获取数据时,对数据的处理,作为 getData 的回调函数
//字符串转化为 js 对象
console.log(json, 'json')
let data = {};
data.value = json.data
return data
getDataMethod: "url",
effectiveFields: [keyField],
url: url,
processData: function(json) {
// 统一处理接口返回数据
let data = { value: json.data || [] };
if (e.value == 10) {
// 假设演出接口返回格式为 { data: [{id:1, title:"演出名称"},...] }
data.value = json.data.map(item => ({
[idField]: item.performancesId,
[keyField]: item.title
}));
}
return data;
}
}).on('onDataRequestSuccess', function (e, result) {
}).on('onSetSelectValue', function (e, selectedData,selectedRawData ) { // 当前行的所有值都能拿到
}).on('onUnsetSelectValue', function (e) {
});;
}).on('onSetSelectValue', function(e, selectedData, selectedRawData) {
// 选中时存储ID
const id = selectedRawData[idField];
$(this).attr('data-id', id);
}).on('onUnsetSelectValue', function() {
// 取消选择时清空ID
$(this).attr('data-id', '');
});
} else {
$("#selectActivity").hide();
$("#searchIpt").val('').attr('data-id', '');
}
} else {
$("#selectActivity").hide();
$("#searchIpt").val('').attr('data-id', '');
}
}
function submitHandler() {
......@@ -202,6 +235,11 @@
layer.msg("请选择展示位置");
return false;
}
// 新增校验:如果选择了位置10,必须选择演出
if (positionList.split(',').includes('10') && !$('#searchIpt').attr('data-id')) {
layer.msg('请选择演出!');
return false;
}
var targetType = $('#targetType').select2('val');
if (!targetType) {
layer.msg("请选择跳转方式");
......@@ -212,6 +250,13 @@
if (positionList.split(',').includes('9')) {
data.push({"name": "marketId", "value": $('#searchIpt').attr('data-id')});
}
// 添加演出ID到提交数据
if (positionList.split(',').includes('10')) {
data.push({
"name": "performanceId",
"value": $('#searchIpt').attr('data-id')
});
}
var targetObj = '';
var targetObjName = '';
if (12 == targetType || 100 == targetType) { // 请填写url
......@@ -519,7 +564,7 @@
'theme': 'explorer-fas',
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload",
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload/unsm",
"uploadExtraData": {
"pathName" : "banner",
"buckType" : 1
......
......@@ -187,26 +187,92 @@
var bannersId = "[[${KylinBannersVo.bannersId}]]";
var marketName = "[[${KylinBannersVo.marketName}]]";
var marketId = "[[${KylinBannersVo.marketId}]]";
var performanceId = "[[${KylinBannersVo.performanceId}]]";
let count = 0;
console.log(marketId, marketName)
function areaSelect (e) {
function areaSelect(e) {
console.log(e.value, 'kan')
if (e.value == 9) {
// 清空之前的输入和选择
$("#searchIpt").val('').attr('data-id', '');
$("#selectActivity label").text("选择活动"); // 默认文本
if (e.value == 9 || e.value == 10) {
count++;
if (count % 2) {
console.log(count, 'dsa')
// 根据不同类型设置参数
let url, keyField, idField, searchTip;
if (e.value == 9) {
url = '/goblin/marketing/zhengzai/list/get?pageSize=10&pageNum=1&orderByColumn=createdAt&isAsc=desc&status=-1&purchaseName=';
keyField = 'name';
idField = 'selfMarketId';
searchTip = '请输入活动名称';
$("#selectActivity label").text("选择活动");
} else if (e.value == 10) {
url = '/kylin/performances/search?title='; // 演出搜索接口
keyField = 'title';
idField = 'performanceId';
searchTip = '请输入演出名称';
$("#selectActivity label").text("选择演出");
}
$("#selectActivity").show();
commomSe()
// 销毁旧的实例并重新初始化
$("#searchIpt").bsSuggest('destroy').attr('placeholder', searchTip);
$("#searchIpt").bsSuggest({
idField: idField,
keyField: keyField,
allowNoKeyword: false,
showBtn: false,
multiWord: true,
hideOnSelect: true,
getDataMethod: "url",
effectiveFields: [keyField],
url: url,
processData: function(json) {
// 统一处理接口返回数据
let data = { value: json.data || [] };
if (e.value == 10) {
// 假设演出接口返回格式为 { data: [{id:1, title:"演出名称"},...] }
data.value = json.data.map(item => ({
[idField]: item.performancesId,
[keyField]: item.title
}));
}
return data;
}
}).on('onSetSelectValue', function(e, selectedData, selectedRawData) {
// 选中时存储ID
const id = selectedRawData[idField];
$(this).attr('data-id', id);
}).on('onUnsetSelectValue', function() {
// 取消选择时清空ID
$(this).attr('data-id', '');
});
} else {
$("#selectActivity").hide();
$("#searchIpt").val('').attr('data-id', '');
}
} else {
$("#selectActivity").hide();
$("#searchIpt").val('').attr('data-id', '');
}
}
if (marketId) {
if (marketId || performanceId) {
count++;
$("#selectActivity").show()
commomSe()
$("#searchIpt").attr('data-id', marketId)
// 根据存储的位置类型初始化不同的搜索框
const positionList = "[[${KylinBannersVo.positionList}]]";
if (positionList && positionList.includes('10')) {
performanceCommomSe();
// 设置演出数据回显
$("#searchIpt").val("[[${KylinBannersVo.performanceName}]]") // 新增演出名称字段
.attr('data-id', "[[${KylinBannersVo.performanceId}]]"); // 新增演出ID字段
}else {
commomSe();
$("#searchIpt").attr('data-id', marketId);
}
}
function commomSe () {
$("#searchIpt").bsSuggest({
......@@ -233,6 +299,34 @@
}).on('onUnsetSelectValue', function (e) {
});;
}
// 搜索演出接口
function performanceCommomSe() {
// 初始化演出搜索框
$("#searchIpt").bsSuggest({
idField: 'performanceId', // 演出ID字段
keyField: 'title', // 演出名称字段
allowNoKeyword: false,
showBtn: false,
multiWord: true,
hideOnSelect: true,
getDataMethod: "url",
effectiveFields: ['title'],
url: '/kylin/performances/search?title=', // 演出搜索接口
processData: function(json) {
let data = {};
// 转换数据结构为bsSuggest需要的格式
data.value = json.data.map(item => ({
performanceId: item.performancesId,
title: item.title
}));
return data;
}
}).on('onSetSelectValue', function(e, selectedData, selectedRawData) {
$(this).attr('data-id', selectedRawData.performanceId);
}).on('onUnsetSelectValue', function() {
$(this).attr('data-id', '');
});
}
function submitHandler() {
var bannersName = $('#bannersName').val();
if (!bannersName) {
......@@ -245,6 +339,11 @@
layer.msg("请选择展示位置");
return false;
}
// 新增校验:如果选择了位置10,必须选择演出
if (positionList.split(',').includes('10') && !$('#searchIpt').attr('data-id')) {
layer.msg('请选择演出!');
return false;
}
var targetType = $('#targetType').select2('val');
if (!targetType) {
layer.msg("请选择跳转方式");
......@@ -254,6 +353,16 @@
var data = $('#form-post-add').serializeArray();
if (positionList.split(',').includes('9')) {
data.push({"name": "marketId", "value": $('#searchIpt').attr('data-id')});
data.push({"name": "performanceId", "value": ""})
data.push({"name": "performanceName", "value": ""})
}
// 添加演出ID到提交数据
if (positionList.split(',').includes('10')) {
data.push({
"name": "performanceId",
"value": $('#searchIpt').attr('data-id')
});
data.push({"name": "marketId", "value": ""})
}
var targetObj = '';
var targetObjName = '';
......@@ -585,7 +694,7 @@
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': ctx + "system/user/profile/updateAvatar",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload",
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload/unsm",
"uploadExtraData": {
"pathName": "banner",
"buckType": 1
......
......@@ -47,6 +47,10 @@
<div class="tab-content">
<div id="tab-1" class="tab-pane">
<div class="panel-body">
<!-- 导出按钮 -->
<div class="m-t-md" style="text-align: left; margin-bottom: 2px">
<button type="button" class="btn btn-primary" onclick="exportTableData()">导出数据</button>
</div>
<div id="tab-1" class="tab-pane">
<iframe id="tab_iframe_1" name="tab_iframe_1" marginwidth=0 marginheight=0 width=100%
height=800px frameborder=0></iframe>
......@@ -113,6 +117,14 @@
<label>演出实名限购:</label>
<span th:text="*{idCount}"></span>
</div>
<div class="panel-footer">
<label>场次实名限购:</label>
<span th:each="dict, iterStat : ${kylinPerformanceMisVo.ticketTimes}"
th:if="${dict.realNameLimit == 1}"
th:text="${#strings.replace(#strings.replace(dict.title, ' 00:00', ''), ' 00:00', '')} + ${iterStat.last ? '' : '; '}">
</span>
<span th:if="${#lists.isEmpty(kylinPerformanceMisVo.ticketTimes.?[realNameLimit == 1])}"></span>
</div>
<div class="panel-footer">
<label>时间:</label>
<span th:text="*{timeStart}"></span>
......@@ -575,6 +587,15 @@
anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
});
}
/**
* 导出文件
*/
function exportTableData() {
var performancesId = '[[${kylinPerformanceMisVo.performancesId}]]'.replaceAll("\"", "")
var url = prefix + '/performance/export?performanceId=' + performancesId;
window.location.href = url; // 直接触发下载
}
</script>
</body>
</html>
......@@ -53,12 +53,12 @@
<div th:text="*{totalBuyUsers}">39</div>
</div>
</div>
<div class="col-lg-1">
<div>
<div>小家伙分销(元)</div>
<div th:text="*{totalDisPrice}">0</div>
</div>
</div>
<!-- <div class="col-lg-1">-->
<!-- <div>-->
<!-- <div>小家伙分销(元)</div>-->
<!-- <div th:text="*{totalDisPrice}">0</div>-->
<!-- </div>-->
<!-- </div>-->
<div class="col-lg-1">
<div>
<div>退票数量(张)</div>
......@@ -71,66 +71,75 @@
<thead>
<tr>
<th>
<div class="cell">票种名</div>
<div class="cell">场次</div>
</th>
<th>
<div class="cell">单价</div>
<div class="cell">票种类型</div>
</th>
<th>
<div class="cell">类型</div>
<div class="cell">票种名称</div>
</th>
<th>
<div class="cell">适用时间</div>
<div class="cell">票种价格</div>
</th>
<th>
<div class="cell">销售总数量</div>
<div class="cell">库存数量</div>
</th>
<th>
<div class="cell">会员销售数量</div>
<div class="cell">销售数量</div>
</th>
<th>
<div class="cell">库存数量</div>
<div class="cell">余票数量</div>
</th>
<th>
<div class="cell">登登登VIP购票数量</div>
</th>
<th>
<div class="cell">正在支付数量</div>
</th>
<th>
<div class="cell">退票数量</div>
<div class="cell">退票总数量</div>
</th>
<th>
<div class="cell">全额退票数量</div>
</th>
<th>
<div class="cell">手续费退票数量</div>
</th>
<th>
<div class="cell">羊毛券数量</div>
<div class="cell">退票手续费收益</div>
</th>
<th>
<div class="cell">销售额(元)</div>
<div class="cell">票面销售金额</div>
</th>
<!-- <th>-->
<!-- <div class="cell">兑换数量</div>-->
<!-- </th>-->
</tr>
</thead>
<tbody>
<tr th:each="respBean,respBeanStat:${perOrderStaticList}">
<td>
<div class="cell" th:text="${respBean.title}">180元区</div>
<div class="cell" th:text="${respBean.timeTitle}">180元区</div>
</td>
<td>
<div class="cell" th:text="${respBean.price}">180.00</div>
<div class="cell" th:text="${@dict.getLabel('zhengzai_ticket_type',respBean.type)}">0</div>
</td>
<td>
<div class="cell" th:text="${@dict.getLabel('zhengzai_ticket_type',respBean.type)}">0</div>
<div class="cell" th:text="${respBean.title}">0</div>
</td>
<td>
<div class="cell" >[[${respBean.useStart}]] - [[${respBean.useEnd}]]</div>
<div class="cell" th:text="${respBean.price}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.saleGeneral}">0</div>
<div class="cell" th:text="${respBean.totalGeneral}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.totalMemberNumber}">0</div>
<div class="cell" th:text="${respBean.saleGeneral}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.surplusGeneral}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.vipBuyTotal}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.totalPayingNumber}">0</div>
</td>
......@@ -138,16 +147,40 @@
<div class="cell" th:text="${respBean.totalRefundGeneral}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.totalVoucherCount}">0</div>
<div class="cell" th:text="${respBean.fullRefundTicketTotal}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.handlingFeeRefundTicketTotal}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.refundFeeRevenueTotal}">0</div>
</td>
<td>
<div class="cell" th:text="${respBean.totalSalePrice}">0</div>
<div class="cell" th:text="${respBean.audienceSalesAmountTotal}">0</div>
</td>
<!-- <td>-->
<!-- <div class="cell" th:text="${respBean.totalExchange}">0</div>-->
<!-- </td>-->
</tr>
</tbody>
<tfoot>
<tr th:object="${sumResp}">
<td><div class="cell">总计</div></td>
<td><div class="cell"></div></td>
<td><div class="cell"></div></td>
<td><div class="cell"></div></td>
<td><div class="cell" th:text="*{totalGeneralSum}">0</div></td>
<td><div class="cell" th:text="*{saleGeneralSum}">0</div></td>
<td><div class="cell" th:text="*{surplusGeneralSum}">0</div></td>
<td><div class="cell" th:text="*{vipBuyTotalSum}">0</div></td>
<td><div class="cell" th:text="*{totalPayingNumberSum}">0</div></td>
<td><div class="cell" th:text="*{totalRefundGeneralSum}">0</div></td>
<td><div class="cell" th:text="*{fullRefundTicketTotalSum}">0</div></td>
<td><div class="cell" th:text="*{handlingFeeRefundTicketTotalSum}">0</div></td>
<td><div class="cell" th:text="*{refundFeeRevenueTotalSum}">0</div></td>
<td><div class="cell" th:text="*{audienceSalesAmountTotalSum}">0</div></td>
</tr>
</tfoot>
</table>
<div style="display: none;">
<button type="button" class="el-button main el-button--primary el-button--medium"><!---->
......
......@@ -152,7 +152,7 @@
var formData = new FormData();
formData.append("file", e.target.files[0]);
$.ajax({
url: platformUrl + "/platform/basicServices/alOss/upload",//路径是你控制器中上传图片的方法,下面controller里面我会写到
url: platformUrl + "/platform/basicServices/alOss/upload/unsm",//路径是你控制器中上传图片的方法,下面controller里面我会写到
data: formData,
cache: false,
contentType: false,
......
......@@ -182,7 +182,7 @@
var formData = new FormData();
formData.append("file", e.target.files[0]);
$.ajax({
url: platformUrl + "/platform/basicServices/alOss/upload",//路径是你控制器中上传图片的方法,下面controller里面我会写到
url: platformUrl + "/platform/basicServices/alOss/upload/unsm",//路径是你控制器中上传图片的方法,下面controller里面我会写到
data: formData,
cache: false,
contentType: false,
......
package com.liquidnet.client.admin.zhengzai.kylin.dto;
import lombok.Data;
@Data
public class OpenDataBaseResponse<T> {
private Integer code;
private String msg;
private T data;
public boolean isSucc(){
return this.code != null && this.code == 0;
}
}
package com.liquidnet.client.admin.zhengzai.kylin.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class OpenDataSalesResponse extends OpenDataBaseResponse<List<PerformanceSalesDto>>{
}
package com.liquidnet.client.admin.zhengzai.kylin.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class OpenDataTicketSalesResponse extends OpenDataBaseResponse<PerformanceTicketSalesDto>{
}
......@@ -24,6 +24,9 @@ public class OrderExportVo implements Serializable, Cloneable{
@Excel(name = "票种适用结束时间", cellType = Excel.ColumnType.STRING)
private String useEnd;
@Excel(name = "购买数量", cellType = Excel.ColumnType.STRING)
private String buyTotal;
private static final OrderExportVo obj = new OrderExportVo();
public static OrderExportVo getNew() {
......@@ -43,6 +46,7 @@ public class OrderExportVo implements Serializable, Cloneable{
this.setUseTime(source.getUseTime());
this.setUseStart(source.getUseStart());
this.setUseEnd(source.getUseEnd());
this.setBuyTotal(source.getBuyTotal());
return this;
}
}
package com.liquidnet.client.admin.zhengzai.kylin.dto;
import lombok.Data;
@Data
public class PerformanceSalesDto {
/**
* 演出ID
*/
private String performanceId;
/**
* 总库存
*/
private Integer totalGeneral;
/**
* 观众购票数
*/
private Integer audienceTicketTotal;
/**
* 剩余库存
*/
private Integer surplusGeneral;
/**
* 总销售额
*/
private String salesAmountTotal;
}
package com.liquidnet.client.admin.zhengzai.kylin.dto;
import lombok.Data;
import java.util.List;
@Data
public class PerformanceTicketSalesDto {
/**
* 演出ID
*/
private String performanceId;
/**
* 演出名称
*/
private String performanceTitle;
/**
* 总销售票款(元)
*/
private String fullSalesAmountTotal;
/**
* 观众购票数
*/
private String fullAudienceTicketTotal;
/**
* 总库存
*/
private String fullTotalGeneral;
/**
* 退票数量(张)
*/
private String fullRefundTicketTotal;
/**
* 购买人数
*/
private String fullBuyTotal;
/**
* 票种销售数据
*/
private List<TicketSales> fullTicketDataList;
@Data
public static class TicketSales {
// 票ID
private String ticketId;
// 场次ID
private String timeId;
// 场次名称
private String timeTitle;
// 票种名称
private String ticketTitle;
// 票种金额
private String ticketPrice;
// 销售总金额
private String salesAmountTotal;
// 退票手续费总收益
private String refundFeeRevenueTotal;
// 观众购票总数[销售总票量-兑换码票总数] 销售数量
private String audienceTicketTotal;
// 观众购票销售总金额[票种金额* 观众购票总数] 票面销售金额
private String audienceSalesAmountTotal;
// 全额退票总数
private Integer fullRefundTicketTotal;
// 手续费退票总数
private Integer handlingFeeRefundTicketTotal;
// 退票总数量
private String refundTicketTotal;
// 票种类型 1:单日票 2:通票
private Integer ticketType;
// 库存数量
private String totalGeneral;
// 登登登VIP购买数量
private Integer vipBuyTotal;
// 正在支付数量
private String payingTotal;
// 剩余库存
private String surplusGeneral;
}
}
package com.liquidnet.client.admin.zhengzai.kylin.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PerformanceTicketSumDto {
// 库存数量
private BigDecimal totalGeneralSum = BigDecimal.ZERO;
// 销售数量
private BigDecimal saleGeneralSum = BigDecimal.ZERO;
// 余票数量
private BigDecimal surplusGeneralSum = BigDecimal.ZERO;
//VIP购票数量
private BigDecimal vipBuyTotalSum = BigDecimal.ZERO;
//正在支付数量
private BigDecimal totalPayingNumberSum = BigDecimal.ZERO;
//退票总数量
private BigDecimal totalRefundGeneralSum = BigDecimal.ZERO;
//全额退票数量
private BigDecimal fullRefundTicketTotalSum = BigDecimal.ZERO;
//手续费退票数量
private BigDecimal handlingFeeRefundTicketTotalSum = BigDecimal.ZERO;
//退票手续费收益
private BigDecimal refundFeeRevenueTotalSum = BigDecimal.ZERO;
//票面销售金额
private BigDecimal audienceSalesAmountTotalSum = BigDecimal.ZERO;
}
package com.liquidnet.client.admin.zhengzai.kylin.service;
import com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceSalesDto;
import com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceTicketSalesDto;
import java.util.List;
/**
* 数据查询服务
*/
public interface IOpenDataService {
/**
* 获取演出销售数据
* @param performanceIdList
* @return
*/
List<PerformanceSalesDto> getPerformanceSalesInfo(List<String> performanceIdList);
/**
* 获取演出票销售数据
* @param performanceId
* @return
*/
PerformanceTicketSalesDto getPerformanceTicketSalesInfo(String performanceId);
}
package com.liquidnet.client.admin.zhengzai.kylin.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
......@@ -10,6 +11,7 @@ import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.goblin.entity.GoblinSelfMarketing;
import com.liquidnet.service.goblin.mapper.GoblinSelfMarketingMapper;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
......@@ -19,8 +21,10 @@ import com.liquidnet.service.kylin.dto.param.BannersSearchParam;
import com.liquidnet.service.kylin.dto.vo.KylinBannersVo;
import com.liquidnet.service.kylin.entity.KylinBanners;
import com.liquidnet.service.kylin.entity.KylinBannersRelations;
import com.liquidnet.service.kylin.entity.KylinPerformances;
import com.liquidnet.service.kylin.mapper.KylinBannersMapper;
import com.liquidnet.service.kylin.mapper.KylinBannersRelationsMapper;
import com.liquidnet.service.kylin.mapper.KylinPerformancesMapper;
import com.liquidnet.service.kylin.service.admin.IKylinBannersService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -63,6 +67,9 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
@Autowired
private GoblinSelfMarketingMapper goblinSelfMarketingMapper;
@Autowired
private KylinPerformancesMapper kylinPerformancesMapper;
public boolean create(BannersParam bannersParam) {
try {
// 时间
......@@ -76,7 +83,15 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
bannersParam.setOnlineEndTime(null);
}
// 入数据库
bannersMapper.insert(bannersParam.getFields(bannersId, createdAtString));
KylinBanners kylinBanners = bannersParam.getFields(bannersId, createdAtString);
String performanceName = getPerformanceNameById(bannersParam.getPerformanceId());
if (StringUtil.isBlank(performanceName)) {
kylinBanners.setPerformanceId("");
kylinBanners.setPerformanceName("");
}else {
kylinBanners.setPerformanceName(performanceName);
}
bannersMapper.insert(kylinBanners);
List<String> positionList = bannersParam.getPositionList();
KylinBannersRelations kylinBannersRelations = new KylinBannersRelations();
......@@ -105,10 +120,24 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
return true;
} catch (Exception e) {
log.error("error.", e);
return false;
}
}
private String getPerformanceNameById(String performanceId) {
if (StringUtil.isBlank(performanceId)) {
return "";
}
List<KylinPerformances> kylinPerformances = kylinPerformancesMapper.selectList(new LambdaUpdateWrapper<KylinPerformances>()
.eq(KylinPerformances::getPerformancesId, performanceId));
if (kylinPerformances.isEmpty()) {
return "";
}
return kylinPerformances.get(0).getTitle();
}
private void setBannerListRedis() {
List<KylinBanners> bannerList = bannersMapper.selectList(
Wrappers.lambdaQuery(KylinBanners.class).eq(KylinBanners::getIsOnline, 1)
......@@ -141,6 +170,14 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
KylinBanners params = bannersParam.getFields(null, null);
params.setUpdatedAt(updatedAtString);
String performanceName = getPerformanceNameById(bannersParam.getPerformanceId());
if (StringUtil.isBlank(performanceName)) {
params.setPerformanceId("");
params.setPerformanceName("");
}else {
params.setPerformanceName(performanceName);
}
/*if (StringUtils.isEmpty(bannersParam.getOnlineStartTime())) {
params.setOnlineStartTime(null);
}
......
......@@ -7,14 +7,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.utils.StringUtils;
import com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceSalesDto;
import com.liquidnet.client.admin.zhengzai.kylin.service.IOpenDataService;
import com.liquidnet.client.admin.zhengzai.kylin.service.InnerService;
import com.liquidnet.client.admin.zhengzai.kylin.utils.DataUtils;
import com.liquidnet.client.admin.zhengzai.kylin.utils.PerformanceVoUtils;
import com.liquidnet.client.admin.zhengzai.slime.service.ISlimeAuthorizationRecordsAdminService;
import com.liquidnet.client.admin.zhengzai.smile.utils.SmileRedisUtils;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.vo.SmileAgentVo;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
......@@ -25,10 +25,7 @@ import com.liquidnet.service.kylin.dto.vo.admin.*;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketTimesPartnerVo;
import com.liquidnet.service.kylin.dto.vo.partner.TicketTimesTicketCreatePartnerVo;
import com.liquidnet.service.kylin.dto.vo.partner.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.service.admin.IKylinPerformancesAdminService;
......@@ -107,6 +104,10 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
@Autowired
KylinPerformancesMapper kylinPerformancesMapper;
@Autowired
private IOpenDataService openDataService;
@Override
public void test() {
// //同步演出
......@@ -296,8 +297,31 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
List<PerformanceAdminListDao> newList = new ArrayList();
try {
Map<String, Object> map = BeanUtil.convertBeanToMap(performanceAdminListParam);
List<PerformanceAdminListDao> voList = performancesMapper.misPerformanceList(map);
List<PerformanceAdminListDao> voList = performancesMapper.misPerformanceListV2(map);
List<String> performanceIdList = voList.stream().map(PerformanceAdminListDao::getPerformancesId)
.collect(Collectors.toList());
Map<String, PerformanceSalesDto> salesDtoMap = new HashMap<>();
if (!performanceIdList.isEmpty()) {
// 获取演出销售数据
List<PerformanceSalesDto> performanceSalesInfoList = openDataService.getPerformanceSalesInfo(performanceIdList);
if (!performanceSalesInfoList.isEmpty()) {
salesDtoMap = performanceSalesInfoList.stream()
.collect(Collectors.toMap(
PerformanceSalesDto::getPerformanceId,
performanceSalesDto -> performanceSalesDto
));
}
}
for (PerformanceAdminListDao item : voList) {
// 修改售卖数据
PerformanceSalesDto performanceSalesDto = salesDtoMap.get(item.getPerformancesId());
if (performanceSalesDto != null) {
item.setTotalGeneral(performanceSalesDto.getTotalGeneral());
item.setTotalSalePrice(new BigDecimal(performanceSalesDto.getSalesAmountTotal()));
item.setSaleGeneral(performanceSalesDto.getAudienceTicketTotal());
item.setSurplusGeneral(performanceSalesDto.getSurplusGeneral());
}
if (item.getTimeSell() == null || item.getTimeStop() == null) {
continue;
}
......@@ -977,6 +1001,20 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
return performancesMapper.getSubscribeTicketStatisticalByPerformancesId(performancesId);
}
@Override
public List<KylinPerformancesVo> searchPerformanceByTitle(String title) {
LambdaQueryWrapper<KylinPerformances> lambdaQueryWrapper = new QueryWrapper<KylinPerformances>()
.lambda()
.like(KylinPerformances::getTitle, title);
List<KylinPerformances> kylinPerformances = performancesMapper.selectList(lambdaQueryWrapper);
return kylinPerformances.stream().map(k -> {
KylinPerformancesVo vo = new KylinPerformancesVo();
vo.setPerformancesId(k.getPerformancesId());
vo.setTitle(k.getTitle());
return vo;
}).collect(Collectors.toList());
}
//删除演出下所有订单缓存(订单详情,订单列表)
public void delOrderTicketsRedis(KylinPerformanceMisVo vo) {
//找到所有ticketId
......
......@@ -484,23 +484,6 @@ public class KylinRefundsStatusServiceImpl {
continue;
} else {
//未退款入场人数量为0才退优先卷
List<KylinOrderTicketEntities> kylinOrderTicketEntities = kylinOrderTicketEntitiesMapper.selectList(
Wrappers.lambdaQuery(KylinOrderTicketEntities.class).eq(KylinOrderTicketEntities::getOrderId, refund.getOrderTicketsId()).eq(KylinOrderTicketEntities::getIsPayment, 1));
log.info("admin退款请求未退款入场人数量number={}",kylinOrderTicketEntities.size());
if(kylinOrderTicketEntities.size()==0){
//获取订单详情
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(refund.getOrderTicketsId());
//退优先卷
ArrayList<KylinOrderCoupons> orderCoupons = dataUtils.getOrderCoupon(refund.getOrderTicketsId());
if (orderCoupons.size() > 0) {
for (KylinOrderCoupons item : orderCoupons) {
if (item.getCouponType() == 101) {
dataUtils.backCoupon(item.getCouponCode(), orderTicketVo.getUserId());
}
}
}
}
// 同步大麦 票务平台
KylinOrderTicketVo orderData = dataUtils.getOrderTicketVo(refund.getOrderTicketsId());
KylinPerformanceVo vo = dataUtils.getPerformanceVo(orderData.getPerformanceId());
......
package com.liquidnet.client.admin.zhengzai.kylin.service.impl;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OpenDataSalesResponse;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OpenDataTicketSalesResponse;
import com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceSalesDto;
import com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceTicketSalesDto;
import com.liquidnet.client.admin.zhengzai.kylin.service.IOpenDataService;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Service
public class OpenDataServiceImpl implements IOpenDataService {
@Value("${liquidnet.openData.host}")
private String openDataHost;
@Value("${liquidnet.openData.auth}")
private String openDataAuth;
@Override
public List<PerformanceSalesDto> getPerformanceSalesInfo(List<String> performanceIdList) {
HashMap<String, List<String>> map = new HashMap<>();
map.put("performanceIds", performanceIdList);
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.AUTHORIZATION, openDataAuth);
try {
String postJson = HttpUtil.postJson(openDataHost + "/api/performance/sales", JsonUtils.toJson(map), headers);
log.info("response: {}", postJson);
if (StringUtil.isBlank(postJson)) {
return Collections.emptyList();
}
OpenDataSalesResponse openDataSalesResponse = JsonUtils.fromJson(postJson, OpenDataSalesResponse.class);
if (!openDataSalesResponse.isSucc()) {
return Collections.emptyList();
}
return openDataSalesResponse.getData();
} catch (Exception e) {
log.error("error", e);
}
return Collections.emptyList();
}
@Override
public PerformanceTicketSalesDto getPerformanceTicketSalesInfo(String performanceId) {
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.AUTHORIZATION, openDataAuth);
try {
String responseStr = HttpUtil.getByUri(openDataHost + "/api/performance/ticket/sales?performanceId=" + performanceId, headers);
log.info("response: {}", responseStr);
if (StringUtil.isBlank(responseStr)) {
return null;
}
OpenDataTicketSalesResponse openDataSalesResponse = JsonUtils.fromJson(responseStr, OpenDataTicketSalesResponse.class);
if (!openDataSalesResponse.isSucc()) {
return null;
}
return openDataSalesResponse.getData();
} catch (Exception e) {
log.error("error", e);
}
return null;
}
}
package com.liquidnet.client.admin.zhengzai.kylin.utils;
import com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceTicketSumDto;
import com.liquidnet.service.kylin.dao.PerformanceOrderStatisticalDao;
import java.math.BigDecimal;
import java.util.List;
public class DataSumUtils {
public static PerformanceTicketSumDto sumStatistics(List<PerformanceOrderStatisticalDao> list) {
// 初始化所有需要统计的字段(BigDecimal类型)
BigDecimal totalGeneralSum = BigDecimal.ZERO;
BigDecimal saleGeneralSum = BigDecimal.ZERO;
BigDecimal surplusGeneralSum = BigDecimal.ZERO;
BigDecimal vipBuyTotalSum = BigDecimal.ZERO;
BigDecimal totalPayingNumberSum = BigDecimal.ZERO;
BigDecimal totalRefundGeneralSum = BigDecimal.ZERO;
BigDecimal fullRefundTicketTotalSum = BigDecimal.ZERO;
BigDecimal handlingFeeRefundTicketTotalSum = BigDecimal.ZERO;
BigDecimal refundFeeRevenueTotalSum = BigDecimal.ZERO;
BigDecimal audienceSalesAmountTotalSum = BigDecimal.ZERO;
// 遍历列表进行累加
for (PerformanceOrderStatisticalDao item : list) {
// BigDecimal类型字段
totalGeneralSum = safeAdd(totalGeneralSum, item.getTotalGeneral());
saleGeneralSum = safeAdd(saleGeneralSum, item.getSaleGeneral());
surplusGeneralSum = safeAdd(surplusGeneralSum, item.getSurplusGeneral());
totalPayingNumberSum = safeAdd(totalPayingNumberSum, item.getTotalPayingNumber());
totalRefundGeneralSum = safeAdd(totalRefundGeneralSum, item.getTotalRefundGeneral());
refundFeeRevenueTotalSum = safeAdd(refundFeeRevenueTotalSum, item.getRefundFeeRevenueTotal());
audienceSalesAmountTotalSum = safeAdd(audienceSalesAmountTotalSum, item.getAudienceSalesAmountTotal());
// Integer类型字段转换
vipBuyTotalSum = safeAdd(vipBuyTotalSum, BigDecimal.valueOf(item.getVipBuyTotal()));
fullRefundTicketTotalSum = safeAdd(fullRefundTicketTotalSum, BigDecimal.valueOf(item.getFullRefundTicketTotal()));
handlingFeeRefundTicketTotalSum = safeAdd(handlingFeeRefundTicketTotalSum,
BigDecimal.valueOf(item.getHandlingFeeRefundTicketTotal()));
}
PerformanceTicketSumDto sumDto = new PerformanceTicketSumDto();
sumDto.setTotalGeneralSum(totalGeneralSum); // 库存数量
sumDto.setSaleGeneralSum(saleGeneralSum); // 销售数量
sumDto.setSurplusGeneralSum(surplusGeneralSum); // 余票数量
sumDto.setVipBuyTotalSum(vipBuyTotalSum);//VIP购票数量
sumDto.setTotalPayingNumberSum(totalPayingNumberSum);//正在支付数量
sumDto.setTotalRefundGeneralSum(totalRefundGeneralSum);//退票总数量
sumDto.setFullRefundTicketTotalSum(fullRefundTicketTotalSum);//全额退票数量
sumDto.setHandlingFeeRefundTicketTotalSum(handlingFeeRefundTicketTotalSum);//手续费退票数量
sumDto.setRefundFeeRevenueTotalSum(refundFeeRevenueTotalSum);//退票手续费收益
sumDto.setAudienceSalesAmountTotalSum(audienceSalesAmountTotalSum);//票面销售金额
return sumDto;
}
// 安全的BigDecimal加法(处理null值)
private static BigDecimal safeAdd(BigDecimal sum, BigDecimal value) {
if (value == null) {
return sum;
}
return sum.add(value);
}
}
......@@ -37,4 +37,20 @@ public class RedisKeyExpireConst {
// sweet:user:service:openId 过期时间30天
public static final long SWEET_USER_SERVICE_OPENID_EXPIRE = 30 * 24 * 60 * 60;
// kylin:luckybag:activity 过期时间30天
public static final long KYLIN_LUCKY_BAG_ACTIVITY_EXPIRE = 30 * 24 * 60 * 60;
// kylin:luckybag 过期时间30天
public static final long KYLIN_LUCKY_BAG_EXPIRE = 30 * 24 * 60 * 60;
// sweet:douduo:active 过期时间30天
public static final long SWEET_DOUDOU_ACTIVE_EXPIRE = 30 * 24 * 60 * 60;
// sweet:doudou:scope:mobile 过期时间3天
public static final long SWEET_DOUDOU_SCOPE_MOBILE_EXPIRE = 3 * 24 * 60 * 60;
// GOBLIN_BRACELET_USER 过期时间3天
public static final long GOBLIN_BRACELET_USER_EXPIRE = 30 * 24 * 60 * 60;
// GOBLIN_BRACELET_RELATED_ORDER 过期30天
public static final long GOBLIN_BRACELET_RELATED_ORDER_EXPIRE = 30 * 24 * 60 * 60;
}
......@@ -7,10 +7,12 @@ public class SmsEnum {
*/
public enum ADSignName {
M01("摩登天空"),
M02("正在现场"),
// M02("正在现场"),
M02("摩登天空"),
M03("新血计划"),
M04("摩登小家伙"),
M05("五百里Live");
M05("五百里Live"),
M06("正在映画");
private final String val;
ADSignName(String val) {
......
......@@ -245,5 +245,10 @@ liquidnet:
erp:
wdt:
url: https://sandbox.wangdian.cn/openapi2/
alipay:
applet:
appId: appId
pubKey: pubKey
privateKey: xxxx
#application-dev-end
\ No newline at end of file
......@@ -22,5 +22,8 @@ liquidnet:
mongodb:
sslEnabled: false
database: dev_ln_scene
openData:
host: http://localhost:8091
auth: t-gI1wT4kM4qF2bB4mJ4zQ1gM6cU6dC9uB
# end-dev-这里是配置信息基本值
\ No newline at end of file
......@@ -22,5 +22,8 @@ liquidnet:
mongodb:
sslEnabled: false
database: test_ln_scene
openData:
host: https://testopen.zhengzai.tv
auth: t-gI1wT4kM4qF2bB4mJ4zQ1gM6cU6dC9uB
# end-test-这里是配置信息基本值
\ No newline at end of file
......@@ -15,4 +15,14 @@ liquidnet:
database-name: dev_ln_scene
mongodb:
sslEnabled: false
database: dev_ln_scene
\ No newline at end of file
database: dev_ln_scene
lxpay:
apps:
dougong:
huifu-id: '6666000171841162'
sys-id: '6666000162031620'
product-id: 'PAYUN'
sub-app-id: 'wx4732efeaa2b08086'
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'
......@@ -15,4 +15,14 @@ liquidnet:
database-name: test_ln_scene
mongodb:
sslEnabled: false
database: test_ln_scene
\ No newline at end of file
database: test_ln_scene
lxpay:
apps:
dougong:
huifu-id: '6666000171841162'
sys-id: '6666000162031620'
product-id: 'PAYUN'
sub-app-id: 'wx4732efeaa2b08086'
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'
\ No newline at end of file
......@@ -73,7 +73,7 @@ spring:
autoconfigure:
exclude:
- org.springframework.cloud.bus.BusAutoConfiguration
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
# - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
redis:
queue:
database: ${liquidnet.redis.queue.database}
......@@ -102,6 +102,17 @@ spring:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=200&waitQueueMultiple=100
sslEnabled: ${liquidnet.mongodb.sslEnabled}
database: ${liquidnet.mongodb.database}
datasource:
name: ${liquidnet.mysql.database-name}
url: jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username: ${liquidnet.mysql.username}
password: ${liquidnet.mysql.password}
# type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 45
minimum-idle: 8
connection-test-query: SELECT 1
# -----------------------------------------------------------
......@@ -134,6 +145,7 @@ global-auth:
- ${liquidnet.info.context}/app/mix/list
- ${liquidnet.info.context}/app/mix/details
- ${liquidnet.info.context}/wdt/**
- ${liquidnet.info.context}/bracelet/callback
oncheck-url-pattern:
-
# -----------------------------------------------------------
......
......@@ -22,3 +22,5 @@ liquidnet:
localUrl: ${liquidnet.service.kylin.url-pay.localUrl}
adam:
url: ${liquidnet.service.adam.url}
feishu:
bWebhook: "https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
......@@ -21,4 +21,6 @@ liquidnet:
check: ${liquidnet.service.kylin.url-pay.check}
localUrl: ${liquidnet.service.kylin.url-pay.localUrl}
adam:
url: ${liquidnet.service.adam.url}
\ No newline at end of file
url: ${liquidnet.service.adam.url}
feishu:
bWebhook: "https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
\ No newline at end of file
......@@ -21,4 +21,6 @@ liquidnet:
check: ${liquidnet.service.kylin.url-pay.check}
localUrl: ${liquidnet.service.kylin.url-pay.localUrl}
adam:
url: ${liquidnet.service.adam.url}
\ No newline at end of file
url: ${liquidnet.service.adam.url}
feishu:
bWebhook: "https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
\ No newline at end of file
......@@ -21,4 +21,6 @@ liquidnet:
check: ${liquidnet.service.kylin.url-pay.check}
localUrl: ${liquidnet.service.kylin.url-pay.localUrl}
adam:
url: ${liquidnet.service.adam.url}
\ No newline at end of file
url: ${liquidnet.service.adam.url}
feishu:
bWebhook: "https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
......@@ -73,7 +73,7 @@ spring:
autoconfigure:
exclude:
- org.springframework.cloud.bus.BusAutoConfiguration
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
# - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
redis:
queue:
database: ${liquidnet.redis.queue.database}
......@@ -102,6 +102,17 @@ spring:
uri: mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=200&waitQueueMultiple=100
sslEnabled: ${liquidnet.mongodb.sslEnabled}
database: ${liquidnet.mongodb.database}
datasource:
name: ${liquidnet.mysql.database-name}
url: jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
username: ${liquidnet.mysql.username}
password: ${liquidnet.mysql.password}
# type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 45
minimum-idle: 8
connection-test-query: SELECT 1
# -----------------------------------------------------------
# -----------------------------------------------------------
......@@ -143,6 +154,9 @@ global-auth:
# 场地摄像头列表
- ${liquidnet.info.context}/camera/list
- ${liquidnet.info.context}/inner/**
# 福袋
- ${liquidnet.info.context}/luckyBag/scope
- ${liquidnet.info.context}/luckyBag/code/**
oncheck-url-pattern:
- ${liquidnet.info.context}/order/details
- ${liquidnet.info.context}/order/transfer*
......
......@@ -128,6 +128,8 @@ global-auth:
- ${liquidnet.info.context}/wechatTemplate/followStatusPhone
# 做积分任务
- ${liquidnet.info.context}/wechatUsers/doTask
# doudou
- ${liquidnet.info.context}/doudou
oncheck-url-pattern:
# - ${liquidnet.info.context}/**
# -----------------------------------------------------------
......
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 手环订单表实体类
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinBraceletOrder implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 订单ID
*/
private String orderId;
/**
* 用户ID
*/
private String userId;
/**
* 绑定用户姓名
*/
private String bindName;
/**
* 绑定用户手机号
*/
private String bindMobile;
/**
* 绑定用户身份证号码
*/
private String bindIdcard;
/**
* 请求日期
*/
private String reqDate;
/**
* 商品描述
*/
private String goodsDesc;
/**
* 手环ID
*/
private String wristbandId;
/**
*手环金额
*/
private BigDecimal wristbandPrice;
/**
*充值金额ID
*/
private String amountId;
/**
*充值金额
*/
private BigDecimal amountPrice;
/**
* 请求流水号
*/
private String reqSeqId;
/**
* 全局流水号
*/
private String hfSeqId;
/**
* 交易类型:
* T_JSAPI: 微信公众号支付
* T_MINIAPP: 微信小程序支付
* A_JSAPI: 支付宝JS
* A_NATIVE: 支付宝正扫
* U_NATIVE: 银联正扫
* U_JSAPI: 银联 JS
* D_NATIVE: 数字人民币正扫
* T_H5:微信直连H5支付
* T_APP:微信APP支付
* T_NATIVE:微信正扫
*/
private String tradeType;
/**
* 用户账单上的交易订单号
*/
private String outTransId;
/**
* 用户账单上的商户订单号
*/
private String partyOrderId;
/**
* 支付完成时间 格式yyyyMMddHHmmss
*/
private String endTime;
/**
* 入账时间 格式为yyyyMMdd
*/
private String acctDate;
/**
* 单价
*/
private BigDecimal price;
/**
* 应付价格
*/
private BigDecimal priceTotal;
/**
* 实付价格
*/
private BigDecimal priceActual;
/**
* 退款价格
*/
private BigDecimal priceRefund;
/**
* 退款扣除的手续费金额
*/
private BigDecimal refundPriceCharges;
/**
* 退款数
*/
private Integer refundNumber;
/**
* 支付时间
*/
private String timePay;
/**
* 订单状态:
* 0 待付款
* 1 已付款
* 2 已关闭
* 3 正在退款
* 4 已退款
* 5 待关闭
* 6 部分退款
* 7 退款失败
*/
private Integer status;
/**
* 支付状态:
* 0 未支付
* 1 已支付
* 2 支付失败
*/
private Integer payStatus;
/**
* 迈之的分订单号
*/
private String foutTradeNo;
/**
* 迈之的设备编号
*/
private String cardno;
/**
* 迈之的分订单号
*/
private Integer refundStatus;
/**
* 迈之的设备编号
*/
private String refundStatusNote;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
/**
* 备注
*/
private String comment;
}
package com.liquidnet.service.goblin.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 充值金额选项表
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinRechargeAmount implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 金额ID
*/
private String amountId;
/**
* 金额名称
*/
private String name;
/**
* 充值金额
*/
private BigDecimal price;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.goblin.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 手环信息表
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinRechargeWristband implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 手环ID
*/
private String wristbandId;
/**
* 手环名称
*/
private String name;
/**
* 手环价格
*/
private BigDecimal price;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.goblin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.goblin.entity.GoblinBraceletOrder;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jxl
*/
public interface GoblinBraceletOrderMapper extends BaseMapper<GoblinBraceletOrder> {
}
package com.liquidnet.service.goblin.mapper;
import com.liquidnet.service.goblin.entity.GoblinRechargeAmount;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 充值金额选项表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public interface GoblinRechargeAmountMapper extends BaseMapper<GoblinRechargeAmount> {
}
package com.liquidnet.service.goblin.mapper;
import com.liquidnet.service.goblin.entity.GoblinRechargeWristband;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 手环信息表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public interface GoblinRechargeWristbandMapper extends BaseMapper<GoblinRechargeWristband> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.goblin.mapper.GoblinRechargeAmountMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.goblin.mapper.GoblinRechargeWristbandMapper">
</mapper>
This diff is collapsed.
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