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

Commit c9765a4c authored by anjiabin's avatar anjiabin

Merge remote-tracking branch 'origin/dev_member_voucher_refund' into dev-social

# Conflicts:
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/constant/KylinRedisConst.java
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/mongo/KylinPerformanceVo.java
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/returns/OrderDetailsVo.java
#	liquidnet-bus-api/pom.xml
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinPerformancesController.java
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/service/impl/KylinPerformancesAdminServiceImpl.java
#	liquidnet-bus-config/liquidnet-config/liquidnet-service-order-dev.yml
#	liquidnet-bus-config/liquidnet-config/liquidnet-service-order-test.yml
#	liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinPerformanceStatus.java
#	liquidnet-bus-do/liquidnet-service-kylin-do/src/main/resources/com.liquidnet.service.kylin.mapper/KylinPerformancesMapper.xml
#	liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/KylinOrderTicketsServiceImpl.java
#	liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/utils/DataUtils.java
#	liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/impl/kylin/DMCheckOrderTimeImpl.java
#	liquidnet-bus-service/pom.xml
parents bc99e09b d91b6aad
-- 退款配置添加 --
ALTER TABLE kylin_performance_status ADD is_refund_poundage tinyint DEFAULT 0 COMMENT '是否有手续费';
ALTER TABLE kylin_performance_status ADD is_refund_voucher tinyint DEFAULT 0 COMMENT '是否退优惠券';
ALTER TABLE kylin_performance_status ADD is_refund_express tinyint DEFAULT 0 COMMENT '是否快递费';
-- 订单相关券逻辑添加 --
drop TABLE if exists `kylin_order_coupons`;
CREATE TABLE `kylin_order_coupons`
(
`mid` int NOT NULL AUTO_INCREMENT,
`order_id` varchar(255) NOT NULL DEFAULT '' COMMENT '订单id',
`coupon_code` varchar(255) NOT NULL DEFAULT '' COMMENT '券code = 券id',
`coupon_type` tinyint NOT NULL DEFAULT 0 COMMENT '券类别',
`coupon_price` decimal(8, 2) NOT NULL DEFAULT 0.0 COMMENT '券的优惠金额',
`comment` varchar(200) NOT NULL DEFAULT '' COMMENT '备用',
`created_at` datetime(3) NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime(3) NULL DEFAULT NULL COMMENT '修改时间',
KEY `kylin_order_coupons_order_coupon_code_index` (`coupon_code`),
KEY `kylin_order_coupons_order_id_index` (`order_id`),
KEY `kylin_order_coupons_voucher_type_index` (`coupon_type`),
PRIMARY KEY (`mid`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci COMMENT '订单券 关联表';
# -- >>------------------------------------------------------------------------------------ |20210817会员与券改版
# 券发放管理
drop table if exists candy_mgt_coupon;
create table candy_mgt_coupon
(
mid bigint unsigned auto_increment primary key,
mcoupon_id varchar(64) not null,
coupon_id varchar(64) not null comment '~candy_coupon.coupon_id',
state tinyint comment '发放状态[0-未发放|1-已发放|2-无效|9-发放中]',
# bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户]',
event_amt int comment '发放量',
event_type tinyint comment '发放类型[1-会员|2-手机号|10-全体用户]',
event_limit text comment '`发放类型`为2-手机号时发放手机号以,分隔',
event_at datetime(3) comment '发放时间(立即-当前时间+3分钟|预约-点选时间)',
operator varchar(64) not null comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment text
) engine InnoDB comment '券发放管理';
create unique index uidx_candy_mgt_coupon_id on candy_mgt_coupon (mcoupon_id);
# 券基础信息
drop table if exists candy_coupon;
create table candy_coupon
(
mid bigint unsigned auto_increment primary key,
coupon_id varchar(64) not null,
state tinyint comment '券状态[0-INIT|1-NORMAL|2-INVALID]',
title varchar(50) not null comment '券标题',
label varchar(50) comment '标注',
notice varchar(200) comment '注意/须知',
exclusive smallint comment '专享标识[0-常规|1-会员礼包]',
busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]',
cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户]',
discount decimal(8, 2) comment '折扣[8折即0.8]',
val_face decimal(8, 2) comment '面值',
val_over decimal(8, 2) comment '满减~满',
val_minus decimal(8, 2) comment '满减~减',
overlay tinyint default 0 comment '叠加限制[0-限制|1-叠加]',
overlay_level tinyint default 0 comment '#同类别券叠加适用',
validity int comment '有效期(单位天)',
redeem_validity int comment '兑换有效期(单位天)',
redeem_start datetime(3) comment '兑换开放时间',
redeem_stop datetime(3) comment '兑换停止时间',
effect_at datetime(3) comment '生效时间',
expire_at datetime(3) comment '过期时间',
operator varchar(64) not null comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255)
) engine = InnoDB comment '券基础信息';
create unique index uidx_candy_coupon_id on candy_coupon (coupon_id);
# 券适用规则
drop table if exists candy_coupon_rule;
create table candy_coupon_rule
(
mid bigint unsigned auto_increment primary key,
crule_id varchar(64) not null,
coupon_id varchar(64) not null,
use_scope smallint comment '适用范围[100-全场|90-演出|80-商品]',
busi_name varchar(64) comment '适用名称',
busi_id varchar(64) comment '适用ID',
state tinyint comment '0-INIT,1-NORMAL,2-INVALID',
comment varchar(255)
) engine = InnoDB comment '券适用规则';
create unique index uidx_candy_coupon_rule_id on candy_coupon_rule (crule_id);
# 券码信息
drop table if exists candy_coupon_code;
create table candy_coupon_code
(
mid bigint unsigned auto_increment primary key,
ccode varchar(64) not null comment '券码',
coupon_id varchar(64) not null comment '~candy_coupon.coupon_id',
state tinyint comment '状态[0-未使用|1-已使用|2-失效|3-退回]',
redeem_uid varchar(64) comment '兑换用户UID',
redeem_mobile varchar(64) comment '兑换用户手机号',
redeem_at datetime(3) comment '兑换时间',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255)
) engine = InnoDB comment '券码信息';
create unique index uidx_candy_coupon_code_id on candy_coupon_code (ccode, coupon_id);
# 用户券信息
drop table if exists candy_user_coupon;
create table candy_user_coupon
(
mid bigint unsigned auto_increment primary key,
ucoupon_id varchar(64) not null,
mcoupon_id varchar(64) not null comment '~candy_mgt_coupon.mcoupon_id',
uid varchar(64) not null comment '~adam_user.uid',
coupon_id varchar(64) not null comment '~candy_coupon.coupon_id',
state tinyint comment '用户券状态[1-可用|2-无效|3-已过期|5-已使用]',
ccode varchar(64) comment '券码~candy_coupon_code.ccode',
bind_at datetime(3) comment '激活时间',
used_at datetime(3) comment '使用时间',
used_for varchar(255) comment '用于记录购买的内容',
comment varchar(255)
) engine = InnoDB comment '用户券信息';
create unique index uidx_candy_user_coupon_id on candy_user_coupon (ucoupon_id);
create index idx_candy_ucoupon_uid_state on candy_user_coupon (uid, state);
-- >>------------------------------------------------------------------------------------
package com.liquidnet.service.adam.constant;
public class AdamRedisConst {
public static final String ADAM = "adam:";
public static final String PREFIX = "adam:";
public static final String VALID = ADAM.concat("valid:");
public static final String VALID_SMS_CODE_MOBILE = PREFIX.concat("valid:sms:code:mobile");
public static final String VALID_SMS_CODE_MOBILE = VALID.concat("sms:code:mobile");
public static final String IDENTITY_MOBILE = PREFIX.concat("identity:mobile:");
public static final String IDENTITY_THIRD_PARTY = PREFIX.concat("identity:third_party:");
public static final String IDENTITY = ADAM.concat("identity:");
public static final String INFO_TAGS_SEX = PREFIX.concat("info:tags:sex");
public static final String INFO_TAGS_MUSIC = PREFIX.concat("info:tags:music");
public static final String IDENTITY_MOBILE = IDENTITY.concat("mobile:");
public static final String IDENTITY_THIRD_PARTY = IDENTITY.concat("third_party:");
public static final String INFO_USER = PREFIX.concat("info:user:");
public static final String INFO_USER_MEMBER = PREFIX.concat("info:umember:");
public static final String INFO_REAL_NAME = PREFIX.concat("info:real_name:");
public static final String INFO_THIRD_PARTY = PREFIX.concat("info:third_party:");
public static final String INFO_ENTERS = PREFIX.concat("info:enters:");
public static final String INFO_ADDRESSES = PREFIX.concat("info:addresses:");
public static final String INFO = ADAM.concat("info:");
public static final String INFO_TAGS_SEX = INFO.concat("tags:sex");
public static final String INFO_TAGS_MUSIC = INFO.concat("tags:music");
public static final String INFO_USER = INFO.concat("user:");
public static final String INFO_USER_MEMBER = INFO.concat("umember:");
public static final String INFO_REAL_NAME = INFO.concat("real_name:");
public static final String INFO_THIRD_PARTY = INFO.concat("third_party:");
public static final String INFO_ENTERS = INFO.concat("enters:");
public static final String INFO_ADDRESSES = INFO.concat("addresses:");
public static final String INFO_CERTIFICATION = INFO.concat("certification:");
public static final String INFO_CERTIFICATION = PREFIX.concat("info:certification:");
/**
* 认证失败标记
*/
public static final String INFO_CERTIFICATION_JUNK = INFO.concat("certification_junk:");
public static final String INFO_CERTIFICATION_JUNK = PREFIX.concat("info:certification_junk:");
public static final String INFO_MEMBER_SIMPLE = PREFIX.concat("info:member:simple");
public static final String INFO_MEMBER_CATEGORY = PREFIX.concat("info:member:category:");
public static final String INFO_MEMBER_PRICE = PREFIX.concat("info:member:price:");
/**
* 默认会员权益
*/
public static final String INFO_MEMBER_RIGHTS = PREFIX.concat("info:member:rights:");
/**
* 老会员权益
*/
public static final String INFO_MEMBER_RIGHTS_V = PREFIX.concat("info:member:rights:v:");
public static final String INFO_MEMBER_RIGHTS_COUPON = PREFIX.concat("info:member:rights_coupon:");
public static final String INFO_MEMBER_AGREEMENT = PREFIX.concat("info:member:agreement");
public static final String INFO_MEMBER_SIMPLE = INFO.concat("member:simple");
public static final String INFO_MEMBER_CATEGORY = INFO.concat("member:category:");
public static final String INFO_MEMBER_PRICE = INFO.concat("member:price:");
public static final String INFO_MEMBER_RIGHTS = INFO.concat("member:rights:");
public static final String INFO_MEMBER_AGREEMENT = INFO.concat("member:agreement");
public static final String INFO_MEMBER_CODE = INFO.concat("member:code:");
public static final String INFO_MEMBER_ORDER = INFO.concat("morder:");
public static final String INFO_BUY_MEMBER_ORDER_CODE = INFO.concat("mordercode:");
public static final String INFO_MEMBER_CODE = PREFIX.concat("info:member:code:");
public static final String INFO_MEMBER_ORDER = PREFIX.concat("info:morder:");
public static final String INFO_MEMBER_ORDER_BUY_CODE = PREFIX.concat("info:mordercode:");
// public static final String INFO_LIBRARY_NKNAME = INFO.concat("library:nkname");
// public static final String INFO_LIBRARY_NKNAME = PREFIX.concat("info:library:nkname");
public static final String BLACK_LIST = ADAM.concat("blacklist:");
public static final String BLK_LIST_MEMBER_UID = BLACK_LIST.concat("member:uid");
public static final String BLK_LIST_MEMBER_UID = PREFIX.concat("blacklist:member:uid");
public static final String SHOT_MEMBER_ORDER = ADAM.concat("morder:");
public static final String SHOT_MEMBER_ORDER = PREFIX.concat("morder:");
public static final String INCR = ADAM.concat("incr:");
public static final String INCR_MEMBER_NO = INCR.concat("member_no");
public static final String INCR_MEMBER_NO = PREFIX.concat("incr:member_no");
public static final String INCR_MEMBER_LIMITATION = PREFIX.concat("incr:member_limitation");
public static final String SWITCH = ADAM.concat("switch:");
public static final String SWITCH_BUY_MEMBER = SWITCH.concat("buy:member");
public static final String SWITCH_BUY_MEMBER = PREFIX.concat("switch:buy:member");
/* ----------------------------------------------------------------- */
......
......@@ -23,10 +23,17 @@ public class AdamMemberOrderCodeParam implements Serializable {
@Pattern(regexp = LnsRegex.Valid.DATETIME_YMD, message = "生日格式有误")
@NotBlank(message = "生日不能为空")
private String birthday;
@ApiModelProperty(position = 12, value = "支付终端[app,wap,js,applet]", example = "js")
@ApiModelProperty(position = 13, required = true, value = "地区[100]", example = "北京 北京市 朝阳区")
@NotBlank(message = "地区不能为空")
private String area;
@ApiModelProperty(position = 14, required = true, value = "收获地址")
@Size(min = 1, max = 64, message = "收获地址长度限制1-64位字符")
@NotBlank(message = "收获地址不能为空")
private String addressId;
@ApiModelProperty(position = 15, value = "支付终端[app,wap,js,applet]", example = "js")
private String deviceFrom;
@ApiModelProperty(position = 13, required = false, value = "姓名[未实名时必传]")
@ApiModelProperty(position = 16, required = false, value = "姓名[未实名时必传]")
private String name;
@ApiModelProperty(position = 14, required = false, value = "身份证件号[未实名时必传]")
@ApiModelProperty(position = 17, required = false, value = "身份证件号[未实名时必传]")
private String idCard;
}
......@@ -33,6 +33,9 @@ public class AdamMemberOrderParam implements Serializable {
@Pattern(regexp = LnsRegex.Valid.DATETIME_YMD, message = "生日格式有误")
@NotBlank(message = "生日不能为空")
private String birthday;
@ApiModelProperty(position = 16, required = true, value = "地区[100]", example = "北京 北京市 朝阳区")
@NotBlank(message = "地区不能为空")
private String area;
@ApiModelProperty(position = 16, required = true, value = "收获地址")
@Size(min = 1, max = 64, message = "收获地址长度限制1-64位字符")
@NotBlank(message = "收获地址不能为空")
......
package com.liquidnet.service.adam.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "AdamMemberParam", description = "添加会员入参")
@Data
public class AdamMemberParam implements Serializable {
private static final long serialVersionUID = -7411934614249221021L;
@ApiModelProperty(position = 0, required = false, value = "会员ID[50]")
private String memberId;
@ApiModelProperty(position = 1, required = true, value = "会员名称[50]", example = "摩登天空会员卡")
private String name;
@ApiModelProperty(position = 2, required = true, value = "会员标题[50]", example = "摩登天空会员卡")
private String title;
@ApiModelProperty(position = 3, required = true, value = "会员副标题[50]", example = "摩登天空会员卡副标题")
private String subTitle;
@ApiModelProperty(position = 4, required = true, value = "icon图标[200]", example = "https://img.zhengzai.tv/files/2020/08/28/5f490418d30b4.png")
private String icon;
@ApiModelProperty(position = 5, required = true, value = "会员头像[200]", example = "https://img.zhengzai.tv/files/2020/08/31/5f4c75095e9bc.png")
private String avatar;
@ApiModelProperty(position = 6, required = true, value = "权益详情[200]", example = "加入摩登天空会员您可享受到.....")
private String interestsDetail;
@ApiModelProperty(position = 7, required = true, value = "注意事项[200]", example = "摩登天空会员需注意以下事项.....")
private String notes;
@ApiModelProperty(position = 8, required = true, value = "是否展示须知[[0-否,1-是]]", allowableValues = "0,1")
private Integer isNotice;
@ApiModelProperty(position = 9, required = true, value = "会员须知内容[200]", example = "会员须知细则1.xxxx\n2.xxxx")
private String noticeInfo;
@ApiModelProperty(position = 10, required = true, value = "会员须知标题[200]", example = "摩登天空会员须知")
private String noticeTitle;
@ApiModelProperty(position = 11, required = true, value = "是否需要答题[0-否,1-是]", allowableValues = "0,1")
private Integer needQuestion;
@ApiModelProperty(position = 12, required = true, value = "是否展示协议[0-否,1-是]", allowableValues = "0,1")
private Integer displayAgreement;
@ApiModelProperty(position = 13, required = true, value = "状态[1-NORMAL,2-INVALID]", example = "1")
private Integer state;
@ApiModelProperty(position = 14, required = true, value = "限购数量,0不限购[200]", example = "0")
private Integer limitation;
}
package com.liquidnet.service.adam.dto.admin;
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;
@ApiModel(value = "AdamMemberBuildParam", description = "编辑会员入参")
@Data
public class AdamMemberBuildParam implements Serializable {
private static final long serialVersionUID = -7411934614249221021L;
@ApiModelProperty(required = false, value = "会员ID[64]")
private String memberId;
@ApiModelProperty(required = true, value = "会员名称[80]", example = "摩登天空会员卡")
@NotBlank(message = "会员名称不能为空")
private String name;
@ApiModelProperty(required = true, value = "会员标题[100]", example = "摩登天空会员卡")
@NotBlank(message = "会员标题不能为空")
private String title;
@ApiModelProperty(required = true, value = "会员副标题[255]", example = "摩登天空会员卡副标题")
@NotBlank(message = "会员副标题不能为空")
private String subTitle;
@ApiModelProperty(required = true, value = "icon图标[255]", example = "https://img.zhengzai.tv/files/2020/08/28/5f490418d30b4.png")
@NotBlank(message = "icon图标不能为空")
private String icon;
@ApiModelProperty(required = true, value = "会员头像[255]", example = "https://img.zhengzai.tv/files/2020/08/31/5f4c75095e9bc.png")
@NotBlank(message = "会员头像不能为空")
private String avatar;
@ApiModelProperty(required = true, value = "弹窗文案[200]", example = "加入摩登天空会员您可享受到.....")
@NotBlank(message = "弹窗文案不能为空")
private String interestsDetail;
@ApiModelProperty(required = true, value = "注意事项[200]", example = "摩登天空会员需注意以下事项.....")
@NotBlank(message = "注意事项不能为空")
private String notes;
@ApiModelProperty(required = true, value = "是否开售:1-开售|2-停售")
@NotNull(message = "是否开售不能为空")
private Integer onsale;
@ApiModelProperty(required = false, value = "限购数量,0不限购[200]", example = "0")
private Integer limitation;
@ApiModelProperty(required = false, value = "限购开始时间[yyyy-MM-dd]")
private String limitbAt;
@ApiModelProperty(required = false, value = "限购结束时间[yyyy-MM-dd]")
private String limiteAt;
}
package com.liquidnet.service.adam.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(value = "AdamMemberCodeListParam", description = "会员码列表入参")
@Data
public class AdamMemberCodeGenParam implements Serializable {
private static final long serialVersionUID = 7212595876649709617L;
@NotBlank(message = "会员类型ID不能为空")
@ApiModelProperty(required = true, value = "会员类型ID[64]", example = "1")
private String memberId;
@NotBlank(message = "会员价格ID不能为空")
@ApiModelProperty(required = true, value = "会员价格ID[64]", example = "1")
private String memberPriceId;
@NotNull(message = "有效期不能为空")
@ApiModelProperty(required = true, value = "有效期", example = "30")
private Integer validity;
@NotNull(message = "生成数量不能为空")
@Min(1)
@Max(100)
@ApiModelProperty(required = true, value = "生成数量[1-100]", example = "1")
private Integer genNum;
}
package com.liquidnet.service.adam.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "AdamMemberCodeListParam", description = "会员码列表入参")
@Data
public class AdamMemberCodeListParam implements Serializable {
private static final long serialVersionUID = -8454342033562304457L;
@ApiModelProperty(required = false, value = "会员类型ID[64]")
private String memberId;
@ApiModelProperty(required = false, value = "状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]")
private Integer state;
}
package com.liquidnet.service.adam.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
@ApiModel(value = "AdamMemberOrderRefundParam", description = "会员订单退款入参")
@Data
public class AdamMemberOrderRefundParam implements Serializable {
private static final long serialVersionUID = 3811495229630522458L;
@NotBlank(message = "订单号不能为空")
@ApiModelProperty(required = true, value = "订单号")
private String orderNo;
@NotNull(message = "退款金额不能为空")
@DecimalMin(value = "0.01", message = "退款金额不能小于0.01")
@ApiModelProperty(required = true, value = "退款金额")
private BigDecimal refundAmt;
@NotNull(message = "请选择是否能继续购买会员")
@ApiModelProperty(required = true, value = "是否能继续购买会员[1-是|2-否]")
private Integer renewable;
@NotBlank(message = "请输入退款原因")
@ApiModelProperty(required = true, value = "退款原因")
private String reason;
}
package com.liquidnet.service.adam.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
@ApiModel(value = "AdamMemberPriceBuildParam", description = "编辑价格入参")
@Data
public class AdamMemberPriceBuildParam implements Serializable {
private static final long serialVersionUID = -7331274160877946420L;
@ApiModelProperty(required = true, value = "会员类型ID")
@NotBlank(message = "会员类型ID不能为空")
private String memberId;
@ApiModelProperty(required = false, value = "会员价格ID")
private String memberPriceId;
@ApiModelProperty(required = true, value = "原价")
@DecimalMin("0.01")
private BigDecimal price;
@ApiModelProperty(required = true, value = "折扣价")
@DecimalMin("0.01")
private BigDecimal priceFixed;
@ApiModelProperty(required = true, value = "特价:首次、首年优惠价")
@DecimalMin("0.01")
private BigDecimal priceSpecial;
@ApiModelProperty(required = true, value = "有效天数")
@Min(1)
private Integer days;
@ApiModelProperty(required = false, value = "双倍积分[1-关闭,2-开启]")
private BigDecimal integralRate;
}
package com.liquidnet.service.adam.dto.admin;
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;
@ApiModel(value = "AdamMemberRightsBuildParam", description = "编辑权益入参")
@Data
public class AdamMemberRightsBuildParam implements Serializable {
private static final long serialVersionUID = -7331274160877946420L;
@ApiModelProperty(required = true, value = "会员卡ID")
@NotBlank(message = "会员类型ID不能为空")
private String memberId;
@ApiModelProperty(required = false, value = "权益ID[64]")
private String mrightsId;
@ApiModelProperty(required = true, value = "权益状态[0-INIT|1-NORMAL|2-INVALID]")
@NotNull(message = "会员权益状态不能为空")
private Integer state;
@ApiModelProperty(required = true, value = "权益标题[50]")
private String title;
@ApiModelProperty(required = true, value = "权益副标题[200]")
private String subTitle;
@ApiModelProperty(required = false, value = "标注[50]")
private String label;
@ApiModelProperty(required = true, value = "权益封面图片[255]")
private String cover;
@ApiModelProperty(required = false, value = "详情内容")
private String detail;
@ApiModelProperty(required = true, value = "展示顺序")
private Integer seqNo;
}
......@@ -14,12 +14,12 @@ public class AdamLoginInfoVo implements Serializable, Cloneable {
private String token;
@ApiModelProperty(position = 12, value = "用户信息")
private AdamUserInfoVo userInfo;
@ApiModelProperty(position = 13, value = "实名信息")
private AdamRealInfoVo realNameInfo;
@ApiModelProperty(position = 14, value = "用户第三方账号信息")
private List<AdamThirdPartInfoVo> thirdPartInfo;
@ApiModelProperty(position = 15, value = "会员信息")
private AdamMemberSimpleVo memberVo;
// @ApiModelProperty(position = 13, value = "实名信息")
// private AdamRealInfoVo realNameInfo;
// @ApiModelProperty(position = 14, value = "用户第三方账号信息")
// private List<AdamThirdPartInfoVo> thirdPartInfo;
// @ApiModelProperty(position = 15, value = "会员信息")
// private AdamMemberSimpleVo memberVo;
@ApiModelProperty(position = 16, value = "用户会员信息")
private AdamUserMemberVo userMemberVo;
......@@ -44,29 +44,29 @@ public class AdamLoginInfoVo implements Serializable, Cloneable {
this.userInfo = userInfo;
}
public AdamRealInfoVo getRealNameInfo() {
return realNameInfo;
}
public void setRealNameInfo(AdamRealInfoVo realNameInfo) {
this.realNameInfo = realNameInfo;
}
public List<AdamThirdPartInfoVo> getThirdPartInfo() {
return thirdPartInfo;
}
public void setThirdPartInfo(List<AdamThirdPartInfoVo> thirdPartInfo) {
this.thirdPartInfo = thirdPartInfo;
}
public AdamMemberSimpleVo getMemberVo() {
return memberVo;
}
public void setMemberVo(AdamMemberSimpleVo memberVo) {
this.memberVo = memberVo;
}
// public AdamRealInfoVo getRealNameInfo() {
// return realNameInfo;
// }
//
// public void setRealNameInfo(AdamRealInfoVo realNameInfo) {
// this.realNameInfo = realNameInfo;
// }
//
// public List<AdamThirdPartInfoVo> getThirdPartInfo() {
// return thirdPartInfo;
// }
//
// public void setThirdPartInfo(List<AdamThirdPartInfoVo> thirdPartInfo) {
// this.thirdPartInfo = thirdPartInfo;
// }
//
// public AdamMemberSimpleVo getMemberVo() {
// return memberVo;
// }
//
// public void setMemberVo(AdamMemberSimpleVo memberVo) {
// this.memberVo = memberVo;
// }
public AdamUserMemberVo getUserMemberVo() {
return userMemberVo;
......
......@@ -24,26 +24,37 @@ public class AdamMemberCodeVo implements Serializable, Cloneable {
private Integer type;
@ApiModelProperty(position = 4, value = "会员编号")
private String memberNo;
@ApiModelProperty(position = 5, value = "状态:0-未使用,1-已使用,2-不可用")
@ApiModelProperty(position = 5, value = "状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]")
private Integer state;
@ApiModelProperty(position = 6, value = "购买会员码的订单编号")
@ApiModelProperty(position = 6, value = "有效期(单位天)")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private Integer validity;
@ApiModelProperty(position = 7, value = "生效时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime effectAt;
@ApiModelProperty(position = 8, value = "失效时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime expireAt;
@ApiModelProperty(position = 9, value = "操作人")
private String operator;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
@ApiModelProperty(position = 11, value = "购买会员码的订单编号")
private String buyOrderNo;
@ApiModelProperty(position = 7, value = "购买会员码的用户id")
@ApiModelProperty(position = 12, value = "购买会员码的用户id")
private String buyUid;
@ApiModelProperty(position = 8, value = "购买时间")
@ApiModelProperty(position = 13, value = "购买时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime buyAt;
@ApiModelProperty(position = 9, value = "使用会员码的订单编号")
@ApiModelProperty(position = 14, value = "使用会员码的订单编号")
private String useOrderNo;
@ApiModelProperty(position = 10, value = "使用会员码的用户id")
@ApiModelProperty(position = 15, value = "使用会员码的用户id")
private String useUid;
@ApiModelProperty(position = 11, value = "使用时间")
@ApiModelProperty(position = 16, value = "使用时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime useAt;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
private static final AdamMemberCodeVo obj = new AdamMemberCodeVo();
......@@ -63,14 +74,17 @@ public class AdamMemberCodeVo implements Serializable, Cloneable {
this.setType(source.getType());
this.setMemberNo(source.getMemberNo());
this.setState(source.getState());
this.setValidity(source.getValidity());
this.setEffectAt(source.getEffectAt());
this.setExpireAt(source.getExpireAt());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
this.setBuyOrderNo(source.getBuyOrderNo());
this.setBuyUid(source.getBuyUid());
this.setBuyAt(source.getBuyAt());
this.setUseOrderNo(source.getUseOrderNo());
this.setUseUid(source.getUseUid());
this.setUseAt(source.getUseAt());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
return this;
}
}
......@@ -20,6 +20,10 @@ public class AdamMemberOrderPreviewVo implements Serializable {
private AdamRealInfoVo realInfoVo;
@ApiModelProperty(position = 14, value = "生日")
private String birthday;
@ApiModelProperty(position = 15, value = "常住地/区域[100]", example = "北京 北京市 朝阳区")
private String area;
@ApiModelProperty(position = 20, value = "标记[0-普通用户|2-过期会员|10-老会员|11-新会员]")
private Integer stageMarker;
private static final AdamMemberOrderPreviewVo obj = new AdamMemberOrderPreviewVo();
......
......@@ -36,33 +36,37 @@ public class AdamMemberOrderVo implements Serializable, Cloneable {
private String memberNo;
@ApiModelProperty(position = 9, value = "会员生日[yyyy-MM-dd]")
private String birthday;
@ApiModelProperty(position = 10, value = "支付终端", allowableValues = "app,wap,js,applet")
@ApiModelProperty(position = 10, value = "地区")
private String area;
@ApiModelProperty(position = 11, value = "支付终端", allowableValues = "app,wap,js,applet")
private String deviceFrom;
@ApiModelProperty(position = 11, value = "支付方式", allowableValues = "alipay,wepay")
@ApiModelProperty(position = 12, value = "支付方式", allowableValues = "alipay,wepay")
private String payType;
@ApiModelProperty(position = 12, value = "支付单号")
@ApiModelProperty(position = 13, value = "支付中心支付CODE")
private String payNo;
@ApiModelProperty(position = 13, value = "支付时间")
@ApiModelProperty(position = 14, value = "支付中心三方支付ID")
private String paymentId;
@ApiModelProperty(position = 15, value = "支付时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime paymentAt;
@ApiModelProperty(position = 14, value = "创建时间")
@ApiModelProperty(position = 16, value = "创建时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
@ApiModelProperty(position = 15, value = "创建时间")
@ApiModelProperty(position = 17, value = "创建时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
@ApiModelProperty(position = 16, value = "价格")
@ApiModelProperty(position = 18, value = "价格")
private BigDecimal price;
@ApiModelProperty(position = 17, value = "实付价格")
@ApiModelProperty(position = 19, value = "实付价格")
private BigDecimal pricePaid;
@ApiModelProperty(position = 18, value = "客户端IP")
@ApiModelProperty(position = 20, value = "客户端IP")
private String clientIp;
@ApiModelProperty(position = 19, value = "客户端来源")
@ApiModelProperty(position = 21, value = "客户端来源")
private String source;
@ApiModelProperty(position = 20, value = "客户端版本")
@ApiModelProperty(position = 22, value = "客户端版本")
private String version;
@ApiModelProperty(position = 21, value = "会员订单扩展信息")
@ApiModelProperty(position = 25, value = "会员订单扩展信息")
private AdamMemberOrderExtVo extendVo;
@ApiModelProperty(position = 30, value = "会员须知")
......
......@@ -20,22 +20,24 @@ public class AdamMemberPriceVo implements Serializable {
private String memberPriceId;
@ApiModelProperty(position = 2, value = "会员类型ID")
private String memberId;
@ApiModelProperty(position = 3, value = "价格状态[0-不可用,1-上线中,2-已下线]")
private Integer state;
// @ApiModelProperty(position = 3, value = "价格状态[0-不可用,1-上线中,2-已下线]")
// private Integer state;
@ApiModelProperty(position = 4, value = "价格包名称")
private String name;
@ApiModelProperty(position = 5, value = "原价")
private BigDecimal price;
@ApiModelProperty(position = 6, value = "折扣价")
@ApiModelProperty(position = 6, value = "折扣价:购买价格")
private BigDecimal priceFixed;
@ApiModelProperty(position = 7, value = "有效天数")
@ApiModelProperty(position = 7, value = "特价:首次、首年优惠价")
private BigDecimal priceSpecial;
@ApiModelProperty(position = 8, value = "有效天数")
private Integer days;
@ApiModelProperty(position = 8, value = "会员包须知")
private String detail;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
// @ApiModelProperty(position = 8, value = "会员包须知")
// private String detail;
// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
// private LocalDateTime createdAt;
// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
// private LocalDateTime updatedAt;
private static final AdamMemberPriceVo obj = new AdamMemberPriceVo();
......@@ -51,14 +53,15 @@ public class AdamMemberPriceVo implements Serializable {
if (null == source) return this;
this.setMemberPriceId(source.getMemberPriceId());
this.setMemberId(source.getMemberId());
this.setState(source.getState());
// this.setState(source.getState());
this.setName(source.getName());
this.setPrice(source.getPrice());
this.setPriceFixed(source.getPriceFixed());
this.setPriceSpecial(source.getPriceSpecial());
this.setDays(source.getDays());
this.setDetail(source.getDetail());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
// this.setDetail(source.getDetail());
// this.setCreatedAt(source.getCreatedAt());
// this.setUpdatedAt(source.getUpdatedAt());
return this;
}
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "AdamMemberRightsCouponRuleVo", description = "会员权益券适用规则")
@Data
public class AdamMemberRightsCouponRuleVo implements Serializable, Cloneable {
private static final long serialVersionUID = 4282440130223655255L;
@ApiModelProperty(value = "适用范围[100-全场|90-演出|91-场次|92-票|80-商品|81-款式]", example = "90")
private Integer useScope;
@ApiModelProperty(value = "适用名称", example = "北京草莓")
private String busiName;
@ApiModelProperty(value = "适用ID", example = "1")
private String busiId;
private static final AdamMemberRightsCouponRuleVo obj = new AdamMemberRightsCouponRuleVo();
public static AdamMemberRightsCouponRuleVo getNew() {
try {
return (AdamMemberRightsCouponRuleVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new AdamMemberRightsCouponRuleVo();
}
}
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@ApiModel(value = "AdamMemberRightsCouponVo", description = "会员专享特权券")
@Data
public class AdamMemberRightsCouponVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = 4099907681723174194L;
@ApiModelProperty(position = 1, value = "权益ID")
private String mrightsId;
@ApiModelProperty(position = 2, value = "券ID")
private String couponId;
@ApiModelProperty(position = 3, value = "券类别[0-全场|1-演出|2-商品|3-优先购]")
private Integer busiType;
@ApiModelProperty(position = 4, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]")
private Integer couType;
@ApiModelProperty(position = 5, value = "券标题")
private String title;
@ApiModelProperty(position = 6, value = "券标注")
private String label;
@ApiModelProperty(position = 7, value = "注意/须知")
private String notice;
@ApiModelProperty(position = 8, value = "券面值")
private BigDecimal valFace;
@ApiModelProperty(position = 9, value = "满减~满")
private BigDecimal valOver;
@ApiModelProperty(position = 10, value = "满减~减")
private BigDecimal valMinus;
/* com.liquidnet.service.adam.dto.vo.AdamMemberRightsCouponRuleVo */
private List<AdamMemberRightsCouponRuleVo> useRules;
private static final AdamMemberRightsCouponVo obj = new AdamMemberRightsCouponVo();
public static AdamMemberRightsCouponVo getNew() {
try {
return (AdamMemberRightsCouponVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new AdamMemberRightsCouponVo();
}
}
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
@ApiModel(value = "AdamMemberRightsVo", description = "会员权益详情")
public class AdamMemberRightsDetailVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -2407106925001008460L;
@ApiModelProperty(position = 1, value = "权益信息")
private AdamMemberRightsVo rightsVo;
@ApiModelProperty(position = 11, value = "专享券列表")
private List<AdamMemberRightsCouponVo> couponVoList;
public AdamMemberRightsVo getRightsVo() {
return rightsVo;
}
public AdamMemberRightsDetailVo setRightsVo(AdamMemberRightsVo rightsVo) {
this.rightsVo = rightsVo;
return this;
}
public List<AdamMemberRightsCouponVo> getCouponVoList() {
return couponVoList;
}
public AdamMemberRightsDetailVo setCouponVoList(List<AdamMemberRightsCouponVo> couponVoList) {
this.couponVoList = couponVoList;
return this;
}
private static final AdamMemberRightsDetailVo obj = new AdamMemberRightsDetailVo();
public static AdamMemberRightsDetailVo getNew() {
try {
return (AdamMemberRightsDetailVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new AdamMemberRightsDetailVo();
}
}
}
package com.liquidnet.service.adam.dto.vo;
import com.liquidnet.service.adam.entity.AdamMemberRights;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Arrays;
import java.util.List;
@ApiModel(value = "AdamMemberRightsVo", description = "会员")
@Data
public class AdamMemberRightsVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -2407106925001008460L;
@ApiModelProperty(position = 0, value = "权益封面[255]")
@ApiModelProperty(position = 1, value = "权益ID")
private String mrightsId;
@ApiModelProperty(position = 2, value = "排列序号")
private Integer seqNo;
@ApiModelProperty(position = 3, value = "权益标题")
private String title;
@ApiModelProperty(position = 4, value = "副标题")
private String subTitle;
@ApiModelProperty(position = 5, value = "标注")
private String label;
@ApiModelProperty(position = 6, value = "图片标识")
private String cover;
@ApiModelProperty(position = 1, value = "权益名称[10]")
private String name;
@ApiModelProperty(position = 2, value = "展示顺序[2]")
private Integer sort;
@ApiModelProperty(position = 7, value = "详情内容")
private String detail;
private static final AdamMemberRightsVo obj = new AdamMemberRightsVo();
public AdamMemberRightsVo setSeqNo(Integer seqNo) {
this.seqNo = seqNo;
return this;
}
public static AdamMemberRightsVo getNew() {
try {
return (AdamMemberRightsVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new AdamMemberRightsVo();
public AdamMemberRightsVo setTitle(String title) {
this.title = title;
return this;
}
public AdamMemberRightsVo setCover(String cover) {
......@@ -34,13 +39,25 @@ public class AdamMemberRightsVo implements java.io.Serializable, Cloneable {
return this;
}
public AdamMemberRightsVo setName(String name) {
this.name = name;
return this;
private static final AdamMemberRightsVo obj = new AdamMemberRightsVo();
public static AdamMemberRightsVo getNew() {
try {
return (AdamMemberRightsVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new AdamMemberRightsVo();
}
}
public AdamMemberRightsVo setSort(Integer sort) {
this.sort = sort;
public AdamMemberRightsVo copy(AdamMemberRights source) {
if (null == source) return this;
this.setMrightsId(source.getMrightsId());
this.setSeqNo(source.getSeqNo());
this.setTitle(source.getTitle());
this.setSubTitle(source.getSubTitle());
this.setLabel(source.getLabel());
this.setCover(source.getCover());
this.setDetail(source.getDetail());
return this;
}
}
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.entity.AdamMember;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel(value = "AdamMemberVo", description = "会员")
......@@ -41,10 +45,20 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable {
private Integer needQuestion;
@ApiModelProperty(position = 12, value = "是否展示协议[200]", example = "0")
private Integer displayAgreement;
@ApiModelProperty(position = 13, value = "状态[1-NORMAL,2-INVALID]")
@ApiModelProperty(position = 13, value = "状态[1-NORMAL,2-INVALID]", example = "1")
private Integer state;
@ApiModelProperty(position = 14, value = "限购数量,0不限购[200]", example = "0")
@ApiModelProperty(position = 14, value = "积分倍率", example = "2.00")
private BigDecimal integralRate;
@ApiModelProperty(position = 15, value = "是否开售:1-开售|2-停售", example = "1")
private Integer onsale;
@ApiModelProperty(position = 16, value = "限购数量[0-不限购]", example = "0")
private Integer limitation;
@ApiModelProperty(position = 17, value = "限购开始时间", example = "2021-08-02 00:00:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime limitbAt;
@ApiModelProperty(position = 18, value = "限购结束时间", example = "2021-09-02 00:00:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime limiteAt;
@ApiModelProperty(position = 20, value = "会员卡价格信息")
private List<AdamMemberPriceVo> priceVoList;
......@@ -52,8 +66,37 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable {
private List<AdamMemberRightsVo> rightsVoList;
@ApiModelProperty(position = 22, value = "用户会员信息")
private AdamUserMemberVo userMemberVo;
@ApiModelProperty(position = 23, value = "购买会员限制[0-名额已满|1-允许购买]")
private Integer buySwitch;
@ApiModelProperty(position = 23, value = "购买会员限购[0-名额已满|1-允许购买|2-限购未开始]")
private Integer limitMarker;
@ApiModelProperty(position = 24, value = "标记[0-普通用户|2-过期会员|10-老会员|11-新会员]")
private Integer stageMarker;
public Integer getOnsale() {
return null == onsale ? 1 : onsale;
}
/**
* 购买会员限购[0-名额已满|1-允许购买|2-限购未开始]
*
* @param maxMemberLimitation 当前系统限购已购数量
* @return [0-名额已满|1-允许购买]
*/
public Integer calculateLimitMarker(int maxMemberLimitation) {
if (null != this.limitation && this.limitation > 0) {// 限购
if (maxMemberLimitation >= limitation) {// 名额已满
this.setLimitMarker(0);
} else if (null != this.limitbAt && null != this.limiteAt) {// 限购时间判断
LocalDateTime now = LocalDateTime.now();
boolean isBetweenLimitTime = now.isAfter(this.limitbAt) && now.isBefore(this.limiteAt);
this.setLimitMarker(isBetweenLimitTime ? 1 : 2);
} else {
this.setLimitMarker(1);
}
} else {// 不限购
this.setLimitMarker(1);
}
return this.limitMarker;
}
private static final AdamMemberVo obj = new AdamMemberVo();
......@@ -84,7 +127,11 @@ public class AdamMemberVo implements java.io.Serializable, Cloneable {
this.setNeedQuestion(source.getNeedQuestion());
this.setDisplayAgreement(source.getDisplayAgreement());
this.setState(source.getState());
this.setIntegralRate(source.getIntegralRate());
this.setOnsale(source.getOnsale());
this.setLimitation(source.getLimitation());
this.setLimitbAt(source.getLimitbAt());
this.setLimiteAt(source.getLimiteAt());
return this;
}
}
......@@ -10,6 +10,7 @@ import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@ApiModel(value = "AdamUserMemberVo", description = "会员用户信息")
@Data
......@@ -33,6 +34,7 @@ public class AdamUserMemberVo implements Serializable, Cloneable {
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
private static final LocalDateTime oldMemberSpotTime = LocalDateTime.parse("2022-09-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
private static final AdamUserMemberVo obj = new AdamUserMemberVo();
public static AdamUserMemberVo getNew() {
......@@ -65,4 +67,15 @@ public class AdamUserMemberVo implements Serializable, Cloneable {
LocalDateTime expiryAt = this.getExpiryAt();
return this.getState() == 1 && null != expiryAt && expiryAt.isAfter(LocalDateTime.now());
}
/**
* 是否为老会员
*
* @return true-是
*/
@JsonIgnore
public boolean isOldMember() {
LocalDateTime expiryAt = this.getExpiryAt();
return expiryAt.isBefore(oldMemberSpotTime);
}
}
......@@ -16,22 +16,26 @@ public interface IAdamMemberOrderService {
* 购买会员或会员码
*
* @param uid
* @param param
* @param param AdamMemberOrderParam
* @return ResponseDto<AdamMemberOrderResult>
*/
ResponseDto<AdamMemberOrderResult> buyMemberOrMemberCode(String uid, AdamMemberOrderParam param);
/**
* 支付回调
*
* @return
*/
ResponseDto<Object> paymentNotifyCallBack(AdamMemberOrderCallbackParam parameter);
/**
* 使用会员码
* @param param
* @return
*
* @param uid
* @param param AdamMemberOrderCodeParam
* @return ResponseDto<AdamMemberOrderResult>
*/
ResponseDto<AdamMemberOrderResult> exchangeMemberCode(AdamMemberOrderCodeParam param);
ResponseDto<AdamMemberOrderResult> exchangeMemberCode(String uid, AdamMemberOrderCodeParam param);
/**
* 查取会员订单列表
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liquidnet-bus-api</artifactId>
<groupId>com.liquidnet</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-service-candy-api</artifactId>
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-candy-do</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.liquidnet.service.candy.constant;
public class CandyRedisConst {
public static final String PREFIX = "candy:";
/**
* <key>
* candy:basic:coupon_info:${coupon_id}
* </key>
* <value>
* com.liquidnet.service.candy.dto.CandyCouponInfoDto
* </value>
*/
public static final String BASIC_COUPON_INFO = PREFIX.concat("basic:coupon_info:");
/**
* <key>
* candy:basic:coupon_code:${ccode}
* </key>
* <value>
* com.liquidnet.service.candy.dto.CandyCouponCodeDto
* </value>
*/
public static final String BASIC_COUPON_CODE = PREFIX.concat("basic:coupon_code:");
/**
* <key>
* candy:basic:user_coupon:${uid}
* </key>
* <value>
* List<com.liquidnet.service.candy.dto.CandyUserCouponBasicDto>
* </value>
*/
public static final String BASIC_USER_COUPON = PREFIX.concat("basic:user_coupon:");
/**
* <key>
* candy:basic:common_coupon
* </key>
* <value>
* List<com.liquidnet.service.candy.dto.CandyCommonCouponBasicDto>
* </value>
*/
public static final String BASIC_COMMON_COUPON = PREFIX.concat("basic:common_coupon");
}
package com.liquidnet.service.candy.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Pattern;
@ApiModel(value = "CandyCouponRuleBuildParam", description = "添加券规则入参")
public class CandyCouponRuleBuildParam {
@Pattern(regexp = "\\b(100|90|91|92|80|81)\\b", message = "适用范围无效")
@ApiModelProperty(required = true, value = "适用范围[100-全场|90-演出|91-场次|92-票|80-商品|81-款式]", allowableValues = "100,90,91,92,80,81")
private Integer useScope;
@ApiModelProperty(required = true, value = "适用名称", allowableValues = "适用名称")
private String busiName;
@ApiModelProperty(required = false, value = "适用ID", allowableValues = "适用ID")
private String busiId;
public Integer getUseScope() {
return useScope;
}
public CandyCouponRuleBuildParam setUseScope(Integer useScope) {
this.useScope = useScope;
return this;
}
public String getBusiName() {
return busiName;
}
public CandyCouponRuleBuildParam setBusiName(String busiName) {
this.busiName = busiName;
return this;
}
public String getBusiId() {
return busiId;
}
public CandyCouponRuleBuildParam setBusiId(String busiId) {
this.busiId = busiId;
return this;
}
private static final CandyCouponRuleBuildParam obj = new CandyCouponRuleBuildParam();
public static CandyCouponRuleBuildParam getNew() {
try {
return (CandyCouponRuleBuildParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new CandyCouponRuleBuildParam();
}
}
}
package com.liquidnet.service.candy.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.List;
@ApiModel(value = "CandyMemberCouponBuildParam", description = "新建券入参")
@Data
public class CandyMemberCouponBuildParam {
@ApiModelProperty(required = true, value = "会员类型ID[64]", example = "1")
@NotBlank(message = "会员类型ID不能为空")
private String memberId;
@ApiModelProperty(required = true, value = "权益ID[64]")
@NotBlank(message = "会员权益ID不能为空")
private String mrightsId;
@ApiModelProperty(required = false, value = "券ID", example = "券ID")
private String couponId;
//private Integer state;
@NotBlank(message = "券标题不能为空")
@ApiModelProperty(required = true, value = "券标题", example = "券标题")
private String title;
@NotBlank(message = "券标注不能为空")
@ApiModelProperty(required = true, value = "标注", example = "标注")
private String label;
// @NotBlank(message = "券描述不能为空")
// @ApiModelProperty(required = true, value = "描述:注意/须知", example = "注意/须知")
// private String notice;
//private Integer exclusive;
@NotNull(message = "券类别不能为空")
@ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3")
private Integer busiType;
@NotNull(message = "券类型不能为空")
// @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]", allowableValues = "1,2,3,4,101")
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|101-优先券]", allowableValues = "1,2,101")
private Integer couType;
// @NotNull(message = "券领取方式不能为空")
// @ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户]", allowableValues = "0,1")
// private Integer bindType;
// @ApiModelProperty(required = false, value = "折扣[8折即0.8]", example = "0.8")
// private BigDecimal discount;
@ApiModelProperty(required = false, value = "面值", example = "0.01")
private BigDecimal valFace;
@ApiModelProperty(required = false, value = "满减~满", example = "1.00")
private BigDecimal valOver;
@ApiModelProperty(required = false, value = "满减~减", example = "0.01")
private BigDecimal valMinus;
@NotNull(message = "券叠加限制不能为空")
@ApiModelProperty(required = false, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1")
private Integer overlay;
//private Integer overlayLevel;
// @NotNull(message = "券有效期不能为空")
// @ApiModelProperty(required = true, value = "有效期(单位天)", example = "30")
// private Integer validity;
// @ApiModelProperty(required = false, value = "兑换有效期(单位天)", example = "30")
// private Integer redeemValidity;
//private LocalDateTime redeemStart;
//private LocalDateTime redeemStop;
//private LocalDateTime effectAt;
//private LocalDateTime expireAt;
//private String operator;
//private Date createdAt;
//private Date updatedAt;
//private String comment;
@ApiModelProperty(required = true, value = "适用范围列表", dataType = "List", example = "[{\"useScope\": 100,\"busiName\": \"适用名称1\",\"busiId\": \"IDIDIDIDIDIDID1\"},{\"useScope\": 100,\"busiName\": \"适用名称2\",\"busiId\": \"IDIDIDIDIDIDID2\"}]")
private List<CandyCouponRuleBuildParam> couponRuleList;
//private String mcouponId;
//private String couponId;
//private Integer state;
@NotNull(message = "券发放量不能为空")
@Max(value = 10, message = "发放量不满足1~10范围")
@Min(value = 1, message = "发放量不满足1~10范围")
@ApiModelProperty(required = true, value = "发放量", example = "1")
private Integer eventAmt;
// @NotNull(message = "券发放类型不能为空")
// @ApiModelProperty(required = true, value = "发放类型[1-会员|2-手机号|3-UID|10-全体用户]", allowableValues = "1,2,10")
// private Integer eventType;
// @ApiModelProperty(required = false, value = "`发放类型`为2-手机号时发放手机号以,分隔", example = "17701223310,17701223310")
// private String eventLimit;
// @NotNull(message = "券发放时间不能为空")
// @ApiModelProperty(required = true, value = "发放时间[yyyy-MM-dd HH:mm:ss](立即-当前时间|预约-点选时间)", example = "2021-08-26 00:00:00")
// private String eventAt;
//private String operator;
//private LocalDateTime createdAt;
//private LocalDateTime updatedAt;
//private String comment;
}
package com.liquidnet.service.candy.dto.admin;
import com.liquidnet.commons.lang.constant.LnsRegex;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.List;
@ApiModel(value = "CandyMgtCouponBuildParam", description = "新建券入参")
@Data
public class CandyMgtCouponBuildParam {
//private String couponId;
//private Integer state;
@NotBlank(message = "券标题不能为空")
@ApiModelProperty(required = true, value = "券标题", example = "券标题")
private String title;
@ApiModelProperty(required = false, value = "标注", example = "标注")
private String label;
@NotBlank(message = "券描述不能为空")
@ApiModelProperty(required = true, value = "描述:注意/须知", example = "注意/须知")
private String notice;
//private Integer exclusive;
@NotNull(message = "券类别不能为空")
@ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3")
private Integer busiType;
@NotNull(message = "券类型不能为空")
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]", allowableValues = "1,2,3,4,101")
private Integer couType;
@NotNull(message = "券领取方式不能为空")
@ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户]", allowableValues = "0,1")
private Integer bindType;
@ApiModelProperty(required = false, value = "折扣[8折即0.8]", example = "0.8")
private BigDecimal discount;
@ApiModelProperty(required = false, value = "面值", example = "0.01")
private BigDecimal valFace;
@ApiModelProperty(required = false, value = "满减~满", example = "1.00")
private BigDecimal valOver;
@ApiModelProperty(required = false, value = "满减~减", example = "0.01")
private BigDecimal valMinus;
@ApiModelProperty(required = false, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1")
@Min(value = 0, message = "叠加限制配置无效")
@Max(value = 1, message = "叠加限制配置无效")
private Integer overlay;
//private Integer overlayLevel;
@NotNull(message = "券有效期不能为空")
@Min(value = 1, message = "有效期不能小于1")
@ApiModelProperty(required = true, value = "有效期(单位天)", example = "30")
private Integer validity;
@Min(value = 1, message = "兑换有效期不能小于1")
@ApiModelProperty(required = false, value = "兑换有效期(单位天)", example = "30")
private Integer redeemValidity;
//private LocalDateTime redeemStart;
//private LocalDateTime redeemStop;
//private LocalDateTime effectAt;
//private LocalDateTime expireAt;
//private String operator;
//private Date createdAt;
//private Date updatedAt;
//private String comment;
@ApiModelProperty(required = true, value = "适用范围列表", dataType = "List", example = "[{\"useScope\": 100,\"busiName\": \"适用名称1\",\"busiId\": \"IDIDIDIDIDIDID1\"},{\"useScope\": 100,\"busiName\": \"适用名称2\",\"busiId\": \"IDIDIDIDIDIDID2\"}]")
private List<CandyCouponRuleBuildParam> couponRuleList;
//private String mcouponId;
//private String couponId;
//private Integer state;
@NotNull(message = "券发放量不能为空")
@Min(value = 1, message = "发放量不能小于1")
@ApiModelProperty(required = true, value = "发放量", example = "1")
private Integer eventAmt;
@ApiModelProperty(required = false, value = "发放类型[0-保留|1-会员|2-手机号|10-全体用户]", allowableValues = "0,1,2,10")
private Integer eventType;
@ApiModelProperty(required = false, value = "`发放类型`为2-手机号时发放手机号以,分隔", example = "18510957291,17701223310")
private String eventLimit;
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "发放时间格式有误")
@ApiModelProperty(required = true, value = "发放时间[yyyy-MM-dd HH:mm:ss](立即-当前时间|预约-点选时间)", example = "2021-08-26 00:00:00")
private String eventAt;
//private String operator;
//private LocalDateTime createdAt;
//private LocalDateTime updatedAt;
//private String comment;
}
package com.liquidnet.service.candy.param;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Api
public class BackCouponParam implements Serializable, Cloneable {
@ApiModelProperty(dataType = "String", name = "uCouponIds", value = "券唯一表示id(逗号隔开的字符串)",example = "1",required = true)
@NotNull @NotBlank
private String uCouponIds;
@ApiModelProperty(dataType = "String", name = "uid", value = "用户id",example = "10",required = true)
@NotNull @NotBlank
private String uid;
private static final BackCouponParam obj = new BackCouponParam();
public static BackCouponParam getNew() {
try {
return (BackCouponParam) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new BackCouponParam();
}
public String getuCouponIds() {
return uCouponIds;
}
public void setuCouponIds(String uCouponIds) {
this.uCouponIds = uCouponIds;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
package com.liquidnet.service.candy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.candy.entity.CandyCouponCode;
/**
* <p>
* 券码信息 服务类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
public interface ICandyCouponCodeService {
}
package com.liquidnet.service.candy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.candy.entity.CandyCouponRule;
/**
* <p>
* 券适用规则 服务类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
public interface ICandyCouponRuleService {
}
package com.liquidnet.service.candy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.param.BackCouponParam;
import com.liquidnet.service.candy.vo.CandyCouponPreVo;
import com.liquidnet.service.candy.vo.CandyCouponVo;
import com.liquidnet.service.candy.vo.CandyMyCouponListVo;
import com.liquidnet.service.candy.vo.CandyUseResultVo;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 券基础信息 服务类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
public interface ICandyCouponService {
CandyMyCouponListVo myCoupon(Integer type);
List<CandyCouponPreVo> memberCouponPre(String uid);
List<CandyCouponVo> memberCoupon(String mCouponId);
CandyMyCouponListVo preUsePerformanceCoupon(BigDecimal priceTotal, String performanceId, String timeId, String ticketId, Integer type);
Integer preCanUsePerformanceCoupon(BigDecimal priceTotal, String performanceId, String timeId, String ticketId);
CandyMyCouponListVo preUseGoodCoupon(BigDecimal priceTotal, String goodId, Integer type);
Integer preCanUseGoodCoupon(BigDecimal priceTotal, String goodI);
List<CandyCouponVo> myAdvanceCoupon(String performanceId);
Integer stateCoupon(String uCouponId);
CandyUseResultVo useCoupon(String uCouponId, String content, String totalPrice, String performanceId, String timesId, String ticketId, String goodIds);
Boolean useBackCoupon(List<BackCouponParam> backCouponParam);
ResponseDto<Boolean> receiveCoupon(String ccode);
ResponseDto<CandyCouponVo> receiveCouponDetails(String ccode);
ResponseDto<List<CandyCouponVo>> couponListById(String uCouponIds);
}
package com.liquidnet.service.candy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.candy.entity.CandyMgtCoupon;
/**
* <p>
* 券发放管理 服务类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
public interface ICandyMgtCouponService {
}
package com.liquidnet.service.candy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.candy.entity.CandyUserCoupon;
/**
* <p>
* 用户券信息 服务类
* </p>
*
* @author liquidnet
* @since 2021-08-18
*/
public interface ICandyUserCouponService {
}
package com.liquidnet.service.candy.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@ApiModel(value = "CandyCouponPreVo", description = "会员权益券统计")
public class CandyCouponPreVo implements Serializable, Cloneable {
private static final long serialVersionUID = 3741851732227825227L;
@ApiModelProperty(value = "权益ID", example = "权益ID")
private String mcouponId;
@ApiModelProperty(value = "当前可用券数量", example = "6")
private Long availableCt;
public String getMcouponId() {
return mcouponId;
}
public CandyCouponPreVo setMcouponId(String mcouponId) {
this.mcouponId = mcouponId;
return this;
}
public Long getAvailableCt() {
return availableCt;
}
public CandyCouponPreVo setAvailableCt(Long availableCt) {
this.availableCt = availableCt;
return this;
}
private static final CandyCouponPreVo obj = new CandyCouponPreVo();
public static CandyCouponPreVo getNew() {
try {
return (CandyCouponPreVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new CandyCouponPreVo();
}
}
}
package com.liquidnet.service.candy.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel
public class CandyCouponRulesVo implements Serializable,Cloneable {
private static final long serialVersionUID = 4073256621782131607L;
@ApiModelProperty(value = "适用范围[100-全场|90-演出|91-场次|92-票|80-商品|81-款式]",example = "90")
private Integer useScope;
@ApiModelProperty(value = "适用名称",example = "北京草莓")
private String busiName;
@ApiModelProperty(value = "适用ID",example = "1")
private String busiId;
private static final CandyCouponRulesVo obj = new CandyCouponRulesVo();
public static CandyCouponRulesVo getNew() {
try {
return (CandyCouponRulesVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CandyCouponRulesVo();
}
}
package com.liquidnet.service.candy.vo;
import com.liquidnet.service.candy.dto.CandyCouponRuleDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.ObjectUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ApiModel
public class CandyCouponVo implements Serializable, Cloneable {
private static final long serialVersionUID = 4073256621782131606L;
/* --- --- --- CandyCoupon */
@ApiModelProperty(value = "标题",example = "标题")
private String title;
@ApiModelProperty(value = "标注",example = "标注")
private String label;
@ApiModelProperty(value = "须知",example = "须知")
private String notice;
// private Integer exclusive;//专享标识[0-常规|1-会员礼包]
@ApiModelProperty(value = "业务类别[0-全场|1-演出|2-商品|3-优先购]",example = "0")
private Integer busiType;
@ApiModelProperty(value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券 | 101-优先券]",example = "1")
private Integer couType;
@ApiModelProperty(value = "[0-用户输入兑换|1-发放至用户]",example = "1")
private Integer bindType;
@ApiModelProperty(value = "折扣 可null",example = "0.5")
private BigDecimal discount;
@ApiModelProperty(value = "面值 可null",example = "1")
private BigDecimal valFace;
@ApiModelProperty(value = "满减~满 可null",example = "100")
private BigDecimal valOver;
@ApiModelProperty(value = "满减~减少 可null",example = "5")
private BigDecimal valMinus;
@ApiModelProperty(value = "过期时间 可null",example = "2021-09-25")
private String expireAt;
/* --- --- --- CandyUserCoupon */
@ApiModelProperty(value = "券id",example = "6d74a49d3d1d13f96ba09215abcc49af")
private String ucouponId;
@ApiModelProperty(value = "券状态[1-可用|2-无效|3-已过期 |31-未到期|5-已使用 |21-不可用]",example = "1")
private Integer state;
// private String bindAt;//激活时间
@ApiModelProperty(value = "使用时间 可null",example = "2021-09-25")
private String usedAt;
@ApiModelProperty(value = "购买内容 可null",example = "北京草莓")
private String usedFor;
/* --- --- --- CandyCouponRule */
private List<CandyCouponRulesVo> useRules;
private static final CandyCouponVo obj = new CandyCouponVo();
public static CandyCouponVo getNew() {
try {
return (CandyCouponVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CandyCouponVo();
}
}
package com.liquidnet.service.candy.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
@ApiModel
public class CandyMyCouponListVo implements Serializable, Cloneable {
private static final long serialVersionUID = 4073256621782131607L;
@ApiModelProperty(value = "会员券")
private List<CandyCouponVo> memberCoupon;
@ApiModelProperty(value = "我的券")
private List<CandyCouponVo> myCoupon;
private static final CandyMyCouponListVo obj = new CandyMyCouponListVo();
public static CandyMyCouponListVo getNew() {
try {
return (CandyMyCouponListVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CandyMyCouponListVo();
}
}
package com.liquidnet.service.candy.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel
public class CandyUseResultVo implements Serializable, Cloneable {
private static final long serialVersionUID = 4073256621782131607L;
@ApiModelProperty(value = "优惠内容",example = "1")
private BigDecimal value;
@ApiModelProperty(value = "券类型[-1-不可用 | 1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]",example = "1")
private Integer couType;
private static final CandyUseResultVo obj = new CandyUseResultVo();
public static CandyUseResultVo getNew() {
try {
return (CandyUseResultVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new CandyUseResultVo();
}
}
......@@ -28,6 +28,13 @@ public class KylinRedisConst {
public static final String ORDER_TRANSFER = "kylin:order:transfer:uid:";
public static final String ORDER_COUPON = "kylin:order:coupon:id:";
// 收货地址
public static final String ORDER_REFUND_ADDRESS = "kylin:order:refund:address";
// 手续费
public static final String ORDER_REFUND_POUNDAGE = "kylin:order:poundage";
public static final String USERID_BUY_INFO = "kylin:buy:userId:";
public static final String IDCARD_BUY_INFO = "kylin:buy:idCard:";
public static final String PERFORMANCE_ID = "performanceId";
......@@ -52,5 +59,4 @@ public class KylinRedisConst {
public static final String ADMIN_UPUSH_LIST_ANDROID = "basicServices:upushList:Android";
public static final String ADMIN_BANNER_LIST = "kylin:bannerList";
}
......@@ -61,4 +61,11 @@ public class PayOrderParam {
private String showUrl;
@ApiModelProperty(value = "returnUrl")
private String returnUrl;
@ApiModelProperty(value = "优惠券类型")
private Integer voucherType;
@ApiModelProperty(value = "优惠券码")
private String voucherCode;
@ApiModelProperty(value = "会员提前券码")
private String advanceCode;
}
package com.liquidnet.service.kylin.dto.vo.admin;
import lombok.Data;
/**
* @version V1.0
* @class: OrderRefundAddress
* @Copyright: LightNet @ Copyright (c) 2021
*/
@Data
public class OrderRefundAddress implements Cloneable {
private String name;
private String phone;
private String address;
private static final OrderRefundAddress obj = new OrderRefundAddress();
public static OrderRefundAddress getNew() {
try {
return (OrderRefundAddress) obj.clone();
} catch (CloneNotSupportedException e) {
return new OrderRefundAddress();
}
}
}
package com.liquidnet.service.kylin.dto.vo.admin;
import lombok.Data;
/**
* @version V1.0
* @class: OrderRefundPoundage
* @Copyright: LightNet @ Copyright (c) 2021
*/
@Data
public class OrderRefundPoundage implements Cloneable {
private int day;
private String content;
private float present;
private int isCanRefund;
private static final OrderRefundPoundage obj = new OrderRefundPoundage();
public static OrderRefundPoundage getNew() {
try {
return (OrderRefundPoundage) obj.clone();
} catch (CloneNotSupportedException e) {
return new OrderRefundPoundage();
}
}
}
......@@ -13,4 +13,10 @@ public class PerformanceRefundConfigVo {
private Integer isCanRefund;
private String refundOpenTime;
private String refundCloseTime;
private Integer isRefundPoundage;
private Integer isRefundVoucher;
private Integer isRefundExpress;
private OrderRefundAddress orderRefundAddress;
}
......@@ -120,6 +120,14 @@ public class KylinPerformanceVo {
// private Integer isRefundVoucher;
// private Integer isRefundExpress;
private Integer isRefundPoundage;
private Integer isRefundVoucher;
private Integer isRefundExpress;
private Integer isTransfer;
private String transferStartTime;
private String transferEndTime;
public void setPerformance(KylinPerformances performance) {
this.mid = performance.getMid();
this.performancesId = performance.getPerformancesId();
......@@ -172,6 +180,9 @@ public class KylinPerformanceVo {
this.isTransfer = performanceStatus.getIsTransfer();
this.transferStartTime = DateUtil.Formatter.yyyyMMddHHmmss.format(performanceStatus.getTransferStartTime());
this.transferEndTime = DateUtil.Formatter.yyyyMMddHHmmss.format(performanceStatus.getTransferEndTime());
this.isRefundPoundage = performanceStatus.getIsRefundPoundage();
this.isRefundVoucher = performanceStatus.getIsRefundVoucher();
this.isRefundExpress = performanceStatus.getIsRefundExpress();
}
public void setPerformanceRelations(KylinPerformanceRelations performanceRelations) {
......
package com.liquidnet.service.kylin.dto.vo.returns;
import lombok.Data;
import java.io.Serializable;
@Data
public class InnerReturnVo<T> implements Serializable,Cloneable {
private static final long serialVersionUID = 1541552316829686035L;
private String code;
private String message;
private T data;
private static final InnerReturnVo obj = new InnerReturnVo();
public static InnerReturnVo getNew() {
try {
return (InnerReturnVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new InnerReturnVo();
}
}
}
......@@ -4,6 +4,7 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.entity.KylinFields;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import lombok.Data;
import java.util.List;
......@@ -33,6 +34,7 @@ public class OrderDetailsVo implements Cloneable {
private Integer isCanBack;
@ApiModelProperty(position = 10, value = "退款相关list")
private List<KylinOrderRefundsOrderCodeVo> orderRefundsVoList;
private List<KylinOrderCoupons> orderCouponsList;
private static final OrderDetailsVo obj = new OrderDetailsVo();
......
package com.liquidnet.service.kylin.service.admin;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.kylin.dao.*;
import com.liquidnet.service.kylin.dto.param.PerformanceAdminListParam;
......@@ -11,7 +10,6 @@ import com.liquidnet.service.kylin.dto.vo.admin.KylinPerformanceDamaiVo;
import com.liquidnet.service.kylin.dto.vo.admin.PerformanceRefundConfigVo;
import com.liquidnet.service.kylin.dto.vo.admin.PerformanceTransferConfigVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo;
import com.liquidnet.service.kylin.entity.KylinPerformances;
import java.util.List;
......@@ -67,6 +65,15 @@ public interface IKylinPerformancesAdminService {
*/
List<PerformanceTitleDao> getListByStatus(String status,String title);
/**
* 根据演出状态 查询演出列表 演出全量场次票
*
* @param status 演出状态
* @return 20个 sql 数据
*/
List<PerformanceSimpleAllDao> getListDetailByStatus(String status, String title);
/**
* 修改演出的巡演关联
*
......@@ -202,7 +209,10 @@ public interface IKylinPerformancesAdminService {
String changeTransferConfig(String performancesId,
Integer isCanRefund,
String refundOpenTime,
String refundCloseTime);
String refundCloseTime,
Integer isRefundPoundage,
Integer isRefundVoucher,
Integer isRefundExpress);
KylinPerformanceAgentVo getPerformanceAgent(String performancesId);
......
......@@ -18,6 +18,7 @@
<module>liquidnet-service-kylin-api</module>
<module>liquidnet-service-dragon-api</module>
<module>liquidnet-service-chime-api</module>
<module>liquidnet-service-candy-api</module>
</modules>
<dependencies>
<dependency>
......
......@@ -124,4 +124,9 @@ public enum BusinessType
* 快递-打印 23
*/
BATCH_PRINT,
/**
* 会员订单退款
*/
MORDER_REFUND,
}
......@@ -18,13 +18,14 @@ import java.util.Arrays;
@EnableAsync
@EnableEurekaClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}, scanBasePackages = {"com.liquidnet"})
@MapperScan(basePackages = {"com.liquidnet.service.kylin.mapper", "com.liquidnet.service.adam.mapper"})//
@MapperScan(basePackages = {"com.liquidnet.service.*.mapper"})
public class ClientAdminApplication implements CommandLineRunner {
@Autowired
private Environment environment;
public static void main(String[] args) {
// System.setProperty("spring.devtools.restart.enabled", "false");
// System.setProperty("spring.devtoolq.restart.enabled", "false");
// System.setProperty("spring.devtoolq.restart.enabled", "false");
SpringApplication.run(ClientAdminApplication.class, args);
}
......
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberOrderAdminService;
import com.liquidnet.service.adam.dto.MemberOrderDto;
import com.liquidnet.service.adam.dto.param.admin.MemberOrderListReq;
import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
import com.liquidnet.service.adam.dto.vo.admin.MemberOrderDetailAdminVo;
import com.liquidnet.service.adam.entity.AdamMemberOrder;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
......@@ -27,8 +33,7 @@ import java.util.List;
*/
@Controller
@RequestMapping("adam/order")
public class AdamMemberOrderController extends BaseController
{
public class AdamMemberOrderAdminController extends BaseController {
private String prefix = "zhengzai/adam/order";
@Autowired
......@@ -36,30 +41,21 @@ public class AdamMemberOrderController extends BaseController
@RequiresPermissions("adam:order:orderlist:view")
@GetMapping("/orderList")
public String order()
{
public String order() {
return prefix + "/orderList/order";
}
/**
* 查询【请填写功能名称】列表
*/
@Log(title = "会员订单", businessType = BusinessType.LIST)
@Log(title = "会员订单列表", businessType = BusinessType.LIST)
@RequiresPermissions("adam:order:orderlist:list")
@PostMapping("/orderList/list")
@ResponseBody
public TableDataInfo list(MemberOrderListReq memberOrderListReq)
{
public TableDataInfo list(MemberOrderListReq memberOrderListReq) {
startPage();
List<MemberOrderDto> list = adamMemberOrderAdminService.getMemberOrderList(memberOrderListReq);
return getDataTable(list);
}
/**
* 订单详情
*/
@Log(title = "会员订单", businessType = BusinessType.DETAIL)
@Log(title = "会员订单详情", businessType = BusinessType.DETAIL)
@RequiresPermissions("adam:order:orderlist:detail")
@GetMapping("/orderList/detail/{orderId}")
public String orderDetail(@PathVariable("orderId") String orderId, ModelMap mmap) {
......@@ -68,73 +64,25 @@ public class AdamMemberOrderController extends BaseController
return prefix + "/orderList/detail";
}
// /**
// * 导出【请填写功能名称】列表
// */
// @RequiresPermissions("adam:order:export")
// @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// @ResponseBody
// public AjaxResult export(AdamMemberOrder adamMemberOrder)
// {
// List<AdamMemberOrder> list = adamMemberOrderService.selectAdamMemberOrderList(adamMemberOrder);
// ExcelUtil<AdamMemberOrder> util = new ExcelUtil<AdamMemberOrder>(AdamMemberOrder.class);
// return util.exportExcel(list, "【请填写功能名称】数据");
// }
// /**
// * 新增【请填写功能名称】
// */
// @GetMapping("/add")
// public String add()
// {
// return prefix + "/add";
// }
@Log(title = "会员订单退款", businessType = BusinessType.MORDER_REFUND)
@RequiresPermissions("adam:order:orderlist:refund")
@PostMapping("/orderList/refund")
@ResponseBody
public AjaxResult orderRefund(@Validated AdamMemberOrderRefundParam parameter) {
LambdaQueryWrapper<AdamMemberOrder> queryWrapper = Wrappers.lambdaQuery(AdamMemberOrder.class)
.eq(AdamMemberOrder::getOrderNo, parameter.getOrderNo());
AdamMemberOrder memberOrder = adamMemberOrderAdminService.getOne(queryWrapper);
// /**
// * 新增保存【请填写功能名称】
// */
// @RequiresPermissions("adam:order:add")
// @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
// @PostMapping("/add")
// @ResponseBody
// public AjaxResult addSave(AdamMemberOrder adamMemberOrder)
// {
// return toAjax(adamMemberOrderService.insertAdamMemberOrder(adamMemberOrder));
// }
if (null == memberOrder) {
return AjaxResult.warn("订单不存在");
}
if (memberOrder.getState() != 1) {
return AjaxResult.warn(String.format("该订单[%s]不支持退款,请核实订单状态", parameter.getOrderNo()));
}
if (memberOrder.getPricePaid().compareTo(parameter.getRefundAmt()) < 0) {
return AjaxResult.warn("退款金额超出订单实际支付金额");
}
// /**
// * 修改【请填写功能名称】
// */
// @GetMapping("/edit/{mid}")
// public String edit(@PathVariable("mid") String mid, ModelMap mmap)
// {
// AdamMemberOrder adamMemberOrder = adamMemberOrderService.selectAdamMemberOrderById(mid);
// mmap.put("adamMemberOrder", adamMemberOrder);
// return prefix + "/edit";
// }
//
// /**
// * 修改保存【请填写功能名称】
// */
// @RequiresPermissions("adam:order:edit")
// @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
// @PostMapping("/edit")
// @ResponseBody
// public AjaxResult editSave(AdamMemberOrder adamMemberOrder)
// {
// return toAjax(adamMemberOrderService.updateAdamMemberOrder(adamMemberOrder));
// }
//
// /**
// * 删除【请填写功能名称】
// */
// @RequiresPermissions("adam:order:remove")
// @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
// @PostMapping( "/remove")
// @ResponseBody
// public AjaxResult remove(String ids)
// {
// return toAjax(adamMemberOrderService.deleteAdamMemberOrderByIds(ids));
// }
return adamMemberOrderAdminService.refundProcessing(parameter, memberOrder);
}
}
......@@ -24,66 +24,66 @@ import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "会员价格")
@Slf4j
@Validated
@RestController
@RequestMapping("adam/mprice")
//@Api(tags = "会员价格")
//@Slf4j
//@Validated
//@RestController
//@RequestMapping("adam/mprice")
public class AdamMemberPriceAdminController {
@Autowired
IAdamMemberPriceAdminService adamMemberPriceService;
@Log(title = "会员价格", businessType = BusinessType.LIST)
@RequiresPermissions("adam:mprice:list")
@ApiOperation(value = "会员价格列表")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"),
})
@GetMapping("list")
public ResponseDto<List<AdamMemberPriceVo>> list(@NotBlank(message = "会员类型ID不能为空") @RequestParam String memberId) {
List<AdamMemberPrice> list = adamMemberPriceService.list(
Wrappers.lambdaQuery(AdamMemberPrice.class).eq(AdamMemberPrice::getMemberId, memberId)
);
List<AdamMemberPriceVo> vos = new ArrayList<>();
list.forEach(r -> {
vos.add(AdamMemberPriceVo.getNew().copy(r));
});
return ResponseDto.success(vos);
}
@Log(title = "会员价格", businessType = BusinessType.DETAIL)
@RequiresPermissions("adam:mprice:info")
@ApiOperation(value = "会员价格详情")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberPriceId", value = "会员卡价格ID[64]"),
})
@GetMapping("info")
public ResponseDto<AdamMemberPriceVo> query(@NotBlank(message = "会员类型ID不能为空") @RequestParam String memberId,
@NotBlank(message = "会员价格ID不能为空") @RequestParam String memberPriceId) {
AdamMemberPrice one = adamMemberPriceService.getOne(
Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, memberPriceId)
.eq(AdamMemberPrice::getMemberId, memberId)
);
return ResponseDto.success(AdamMemberPriceVo.getNew().copy(one));
}
@Log(title = "会员价格", businessType = BusinessType.INSERT)
@RequiresPermissions("adam:mprice:add")
@ApiOperation(value = "添加会员价格")
@PostMapping("add")
public ResponseDto<AdamMemberPriceVo> add(@Valid @RequestBody AdamMemberPriceParam param) {
AdamMemberPrice entity = new AdamMemberPrice();
BeanUtils.copyProperties(param, entity);
return ResponseDto.success(adamMemberPriceService.add(entity));
}
@Log(title = "会员价格", businessType = BusinessType.UPDATE)
@RequiresPermissions("adam:mprice:edit")
@ApiOperation(value = "编辑会员价格")
@PostMapping("edit")
public ResponseDto<AdamMemberPriceVo> edit(@Valid @RequestBody AdamMemberPriceParam param) {
return adamMemberPriceService.edit(param) ? ResponseDto.success() : ResponseDto.failure("无效编辑");
}
// @Autowired
// IAdamMemberPriceAdminService adamMemberPriceService;
//
// @Log(title = "会员价格", businessType = BusinessType.LIST)
// @RequiresPermissions("adam:mprice:list")
// @ApiOperation(value = "会员价格列表")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"),
// })
// @GetMapping("list")
// public ResponseDto<List<AdamMemberPriceVo>> list(@NotBlank(message = "会员类型ID不能为空") @RequestParam String memberId) {
// List<AdamMemberPrice> list = adamMemberPriceService.list(
// Wrappers.lambdaQuery(AdamMemberPrice.class).eq(AdamMemberPrice::getMemberId, memberId)
// );
// List<AdamMemberPriceVo> vos = new ArrayList<>();
// list.forEach(r -> {
// vos.add(AdamMemberPriceVo.getNew().copy(r));
// });
// return ResponseDto.success(vos);
// }
//
// @Log(title = "会员价格", businessType = BusinessType.DETAIL)
// @RequiresPermissions("adam:mprice:info")
// @ApiOperation(value = "会员价格详情")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberPriceId", value = "会员卡价格ID[64]"),
// })
// @GetMapping("info")
// public ResponseDto<AdamMemberPriceVo> query(@NotBlank(message = "会员类型ID不能为空") @RequestParam String memberId,
// @NotBlank(message = "会员价格ID不能为空") @RequestParam String memberPriceId) {
// AdamMemberPrice one = adamMemberPriceService.getOne(
// Wrappers.lambdaQuery(AdamMemberPrice.class)
// .eq(AdamMemberPrice::getMemberPriceId, memberPriceId)
// .eq(AdamMemberPrice::getMemberId, memberId)
// );
// return ResponseDto.success(AdamMemberPriceVo.getNew().copy(one));
// }
//
// @Log(title = "会员价格", businessType = BusinessType.INSERT)
// @RequiresPermissions("adam:mprice:add")
// @ApiOperation(value = "添加会员价格")
// @PostMapping("add")
// public ResponseDto<AdamMemberPriceVo> add(@Valid @RequestBody AdamMemberPriceParam param) {
// AdamMemberPrice entity = new AdamMemberPrice();
// BeanUtils.copyProperties(param, entity);
// return ResponseDto.success(adamMemberPriceService.add(entity));
// }
//
// @Log(title = "会员价格", businessType = BusinessType.UPDATE)
// @RequiresPermissions("adam:mprice:edit")
// @ApiOperation(value = "编辑会员价格")
// @PostMapping("edit")
// public ResponseDto<AdamMemberPriceVo> edit(@Valid @RequestBody AdamMemberPriceParam param) {
// return adamMemberPriceService.edit(param) ? ResponseDto.success() : ResponseDto.failure("无效编辑");
// }
}
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.base.ResponseDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
@Api(tags = "ADAM配置")
@Slf4j
@Validated
@RestController
@RequestMapping("adam/switch")
public class AdamSwitchAdminController {
@Autowired
RedisUtil redisUtil;
@Log(title = "ADAM配置", businessType = BusinessType.GRANT)
@RequiresPermissions("adam:switch:buy:member")
@ApiOperation(value = "开放/限制购买会员")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "int", name = "opt", value = "0-限制|1-开放", example = "0"),
})
@PostMapping("buy/member")
public ResponseDto<Object> purchaseSwitch(@Max(1) @Min(0) @RequestParam int opt) {
redisUtil.set(AdamRedisConst.SWITCH_BUY_MEMBER, opt);
return ResponseDto.success(redisUtil.get(AdamRedisConst.SWITCH_BUY_MEMBER));
}
@Log(title = "ADAM配置", businessType = BusinessType.OTHER)
@RequiresPermissions("adam:switch:max:memberno")
@ApiOperation(value = "会员用户最大ID_NO")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "int", name = "opt", value = "会员用户最大ID_NO", example = "15000"),
})
@PostMapping("set/memberno")
public ResponseDto<Object> purchaseStartMemberNo(@Min(11417) @RequestParam int opt) {
redisUtil.set(AdamRedisConst.INCR_MEMBER_NO, opt);
return ResponseDto.success(redisUtil.get(AdamRedisConst.INCR_MEMBER_NO));
}
}
......@@ -22,7 +22,7 @@ import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "会员用户")
@Api(tags = "登登登会员")
@Slf4j
@Validated
@RestController
......
package com.liquidnet.client.admin.web.controller.zhengzai.candy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.candy.dto.CandyCouponCodeExcelDto;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponCodeAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyCouponCodeDto;
import com.liquidnet.service.candy.dto.admin.CandyCouponCodeListParam;
import com.liquidnet.service.candy.dto.admin.CandyCouponCodeOptParam;
import com.liquidnet.service.candy.entity.CandyCouponCode;
import io.swagger.annotations.Api;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "券码管理")
@Controller
@RequestMapping("candy/coupon/code")
public class CandyCouponCodeAdminController extends BaseController {
private String prefix = "zhengzai/candy/coupon/code";
@Autowired
private RedisUtil redisUtil;
@Autowired
private ICandyCouponCodeAdminService candyCouponCodeAdminService;
@RequiresPermissions("candy:coupon:code:view")
@GetMapping()
public String view(@RequestParam String couponId, ModelMap mmap) {
mmap.put("couponId", couponId);
return prefix + "/code";
}
@RequiresPermissions("candy:coupon:code:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo list(CandyCouponCodeListParam listParam) {
startPage();
return getDataTable(listQuery(listParam));
}
private List<CandyCouponCode> listQuery(CandyCouponCodeListParam listParam) {
LambdaQueryWrapper<CandyCouponCode> lambdaQuery = Wrappers.lambdaQuery(CandyCouponCode.class);
lambdaQuery.eq(CandyCouponCode::getCouponId, listParam.getCouponId())
.ne(CandyCouponCode::getState, 2)
.select(
CandyCouponCode::getCcode,
CandyCouponCode::getCouponId,
CandyCouponCode::getRedeemMobile,
CandyCouponCode::getState
);
if (null != listParam.getState()) {
lambdaQuery.eq(CandyCouponCode::getState, listParam.getState());
}
return candyCouponCodeAdminService.list(lambdaQuery);
}
@RequiresPermissions("candy:coupon:code:export")
@PostMapping("export")
@ResponseBody
public AjaxResult export(CandyCouponCodeListParam listParam) {
List<CandyCouponCode> list = listQuery(listParam);
ExcelUtil<CandyCouponCodeExcelDto> excelUtil = new ExcelUtil<>(CandyCouponCodeExcelDto.class);
List<CandyCouponCodeExcelDto> excelList = new ArrayList<>();
list.forEach(r -> {
excelList.add(CandyCouponCodeExcelDto.getNew().copy(r));
});
return excelUtil.exportExcel(excelList, "券码数据");
}
@RequiresPermissions("candy:coupon:code:invalid")
@PostMapping("invalid")
@ResponseBody
public AjaxResult invalid(CandyCouponCodeOptParam optParam) {
logger.debug("optParam:{}", JsonUtils.toJson(optParam));
optParam.getCcodes().forEach(r -> {
String key = CandyRedisConst.BASIC_COUPON_CODE.concat(r);
CandyCouponCodeDto dto = (CandyCouponCodeDto) redisUtil.get(key);
if (null != dto) {
dto.setState(4);
redisUtil.set(key, dto);
}
});
LambdaUpdateWrapper<CandyCouponCode> couponCodeUpdateWrapper = Wrappers.lambdaUpdate(CandyCouponCode.class);
couponCodeUpdateWrapper.in(CandyCouponCode::getCcode, optParam.getCcodes()).eq(CandyCouponCode::getCouponId, optParam.getCouponId());
CandyCouponCode updateCouponCode = new CandyCouponCode();
updateCouponCode.setState(4);
updateCouponCode.setUpdatedAt(LocalDateTime.now());
return toAjax(candyCouponCodeAdminService.update(updateCouponCode, couponCodeUpdateWrapper));
}
@RequiresPermissions("candy:coupon:code:recover")
@PostMapping("recover")
@ResponseBody
public AjaxResult recover(CandyCouponCodeOptParam optParam) {
logger.debug("optParam:{}", JsonUtils.toJson(optParam));
optParam.getCcodes().forEach(r -> {
String key = CandyRedisConst.BASIC_COUPON_CODE.concat(r);
CandyCouponCodeDto dto = (CandyCouponCodeDto) redisUtil.get(key);
if (null != dto) {
dto.setState(5);
redisUtil.set(key, dto);
}
});
LambdaUpdateWrapper<CandyCouponCode> couponCodeUpdateWrapper = Wrappers.lambdaUpdate(CandyCouponCode.class);
couponCodeUpdateWrapper.in(CandyCouponCode::getCcode, optParam.getCcodes()).eq(CandyCouponCode::getCouponId, optParam.getCouponId());
CandyCouponCode updateCouponCode = new CandyCouponCode();
updateCouponCode.setState(5);
updateCouponCode.setUpdatedAt(LocalDateTime.now());
return toAjax(candyCouponCodeAdminService.update(updateCouponCode, couponCodeUpdateWrapper));
}
}
package com.liquidnet.client.admin.web.controller.zhengzai.candy;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.common.utils.DateUtils;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponBuildParam;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponInfoDto;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponListParam;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.entity.CandyCouponRule;
import com.liquidnet.service.candy.entity.CandyMgtCoupon;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Api(tags = "券发放管理")
@Controller
@RequestMapping("candy/coupon/mgt")
public class CandyMgtCouponAdminController extends BaseController {
private final String prefix = "zhengzai/candy/coupon/mgt";
@Autowired
private ICandyMgtCouponAdminService candyMgtCouponAdminService;
@RequiresPermissions("candy:coupon:mgt:view")
@GetMapping()
public String coupon(@RequestParam int couType) {
return prefix + "/coupon" + couType;
}
@RequiresPermissions("candy:coupon:mgt:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo list(CandyMgtCouponListParam listParam) {
startPage();
List<CandyMgtCouponInfoDto> list = candyMgtCouponAdminService.listForMgtCouponInfoDto(listParam);
return getDataTable(list);
}
@GetMapping("add/{couType}")
public String add(@PathVariable("couType") String couType, ModelMap mmap) {
mmap.put("couType", couType);
return prefix + "/add";
}
@ApiOperation(value = "新建券")
@RequiresPermissions("candy:coupon:mgt:add")
@Log(title = "券发放管理", businessType = BusinessType.INSERT)
@PostMapping("add")
@ResponseBody
public AjaxResult addSave(@RequestBody @Validated CandyMgtCouponBuildParam buildParam) {
switch (buildParam.getCouType()) {
case 1:// 代金券
BigDecimal valFace = buildParam.getValFace();
if (null == valFace || valFace.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("代金券金额无效");
}
buildParam.setDiscount(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
buildParam.setOverlay(0);
break;
case 2:// 满减券
BigDecimal valOver = buildParam.getValOver();
BigDecimal valMinus = buildParam.getValMinus();
if (null == valOver || valOver.compareTo(BigDecimal.ZERO) <= 0
|| null == valMinus || valMinus.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("满减金额无效");
}
buildParam.setDiscount(null);
buildParam.setValFace(valMinus);
buildParam.setOverlay(0);
break;
case 3:// 兑换券
buildParam.setBindType(0);
buildParam.setDiscount(null);
buildParam.setValFace(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
buildParam.setOverlay(0);
break;
case 4:// 折扣券
BigDecimal discount = buildParam.getDiscount();
if (null == discount || discount.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("折扣配置无效");
}
buildParam.setValFace(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
break;
case 101:
if (null == buildParam.getOverlay()) {
return AjaxResult.warn("叠加限制配置无效");
}
buildParam.setDiscount(null);
buildParam.setValFace(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
break;
default:
logger.warn("Invalid operation[buildParam.couType={}]", buildParam.getCouType());
return this.error(AjaxResult.Type.WARN, "券类型无效");
}
if (buildParam.getBusiType() > 0) {// 校验适用范围
List<CandyCouponRuleBuildParam> couponRuleList = buildParam.getCouponRuleList();
if (CollectionUtils.isEmpty(couponRuleList)) {
return AjaxResult.warn("请指定适用范围");
}
CandyCouponRuleBuildParam couponRuleBuildParam = couponRuleList.get(0);
if (couponRuleBuildParam.getUseScope() != 100 && (
StringUtils.isEmpty(couponRuleBuildParam.getBusiId()) || StringUtils.isEmpty(couponRuleBuildParam.getBusiName())
)) {
return AjaxResult.warn("请指定具体适用内容");
}
} else {
buildParam.setCouponRuleList(null);
}
if (0 == buildParam.getBindType()) {
buildParam.setEventType(0);
buildParam.setEventLimit(null);
if (null == buildParam.getRedeemValidity()) {
return AjaxResult.warn("兑换有效期无效");
}
} else {
if (buildParam.getEventType() == 2) {// 指定用户手机号
if (StringUtils.isEmpty(buildParam.getEventLimit().trim())) {
return AjaxResult.warn("请指定手机号");
}
}
}
return toAjax(candyMgtCouponAdminService.saveMgtCouponForCouponBuild(buildParam));
}
}
package com.liquidnet.client.admin.web.controller.zhengzai.kylin;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.zhengzai.kylin.service.impl.KylinPerformancesAdminServiceImpl;
import com.liquidnet.service.kylin.dao.PerformanceSimpleAllDao;
import com.liquidnet.service.kylin.dao.PerformanceTitleDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@RequestMapping("/kylin/base")
public class KylinBaseController extends BaseController {
@Autowired
private KylinPerformancesAdminServiceImpl kylinPerformancesService;
@GetMapping(value = "/performance/status")
@ResponseBody
public AjaxResult listByStatus(@RequestParam(value = "status") String status, @RequestParam(value = "title",required = false) String title) {
List<PerformanceSimpleAllDao> result = kylinPerformancesService.getListDetailByStatus(status,title);
AjaxResult ajax = new AjaxResult();
ajax.put("value", result);
return ajax;
}
}
......@@ -18,6 +18,7 @@ import com.liquidnet.service.kylin.dto.param.RefundSearchParam;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.dto.vo.returns.RefundOrderDetailsVo;
import com.liquidnet.service.kylin.service.IKylinOrderRefundsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
......@@ -38,7 +39,6 @@ import java.util.Map;
* @author jiangxiulong
* @since 2021-05-25 10:58 上午
*/
@Controller
@RequestMapping("/kylin/refund")
public class KylinOrderRefundAdminController extends BaseController {
......
......@@ -219,5 +219,11 @@ public class KylinPerformancesController extends BaseController {
@RequestParam("transferEndTime") String transferEndTime) {
String result = kylinPerformancesService.changeTransferConfig(performancesId, isCanTransfer, transferStartTime, transferEndTime);
return this.success(result);
@RequestParam("refundCloseTime") String refundCloseTime,
@RequestParam("isRefundPoundage") Integer isRefundPoundage,
@RequestParam("isRefundVoucher") Integer isRefundVoucher,
@RequestParam("isRefundExpress") Integer isRefundExpress) {
boolean result = kylinPerformancesService.changeRefundConfig(performancesId,isCanRefund,refundOpenTime,refundCloseTime,isRefundPoundage,isRefundVoucher,isRefundExpress);
return toAjax(result);
}
}
......@@ -1003,7 +1003,7 @@ var table = {
// 详细信息,以tab页展现
detailTab: function(id) {
table.set();
$.modal.openTab("详细" + table.options.modalName, $.operate.detailUrl(id));
$.modal.openTab(table.options.modalName + "详情", $.operate.detailUrl(id));
},
// 详细访问地址
detailUrl: function(id) {
......@@ -1057,6 +1057,53 @@ var table = {
$.operate.submit(url, "post", "json", data);
});
},
/**
* 批量处理
*
* @param url post.url
* @param optName 操作描述(失效、退回......)
* @param data post.data { "param1": param1,"param2": {param2} }
*/
batchProcessing: function(url, optName, data) {
table.set();
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
if (rows.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
$.modal.confirm("确认要" + optName + "选中的" + rows.length + "条数据吗?", function() {
$.operate.submit(url, "post", "json", data);
});
},
// 批量失效
batchProcessingForCouponCode: function(couponId, opt) {
table.set();
var url, message, uniqueId, optName;
if (uniqueId) {
var rows = $.table.selectColumns(uniqueId);
} else {
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
}
if (opt === 1) {
url = 'code/invalid';
optName = '失效';
} else if (opt === 2) {
url = 'code/recover';
optName = '退回';
} else {
$.modal.alertWarning("选择有误");
return;
}
message = message ?? "确认要" + optName + "选中的" + rows.length + "条数据吗?";
if (rows.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
$.modal.confirm(message, function() {
var data = { "couponId": couponId,"ccodes": rows.join() };
$.operate.submit(url, "post", "json", data);
});
},
// 清空信息
clean: function() {
table.set();
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<link href="favicon.ico" rel="shortcut icon">
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/jquery.contextMenu.min.css" rel="stylesheet">
<link href="/css/font-awesome.min.css" rel="stylesheet">
<link href="/css/animate.css" rel="stylesheet">
<link href="/css/style.css" rel="stylesheet">
<link href="/css/skins.css" rel="stylesheet">
<link href="/ruoyi/css/ry-ui.css?v=4.6.1" rel="stylesheet">
<link href="/ajax/libs/bootstrap-fileinput/fileinput.min.css?v=20201202" rel="stylesheet">
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<div class="file-loading">
<input id="fileinput-demo-1" type="file" name="file" data-browse-on-zone-click="true"
data-msg-placeholder="Select {files} for upload...">
<input hidden id="coverImg" name="coverImg">
</div>
</div>
<!-- 全局js -->
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="/js/jquery.contextMenu.min.js"></script>
<script src="/ajax/libs/blockUI/jquery.blockUI.js"></script>
<script src="/ajax/libs/layer/layer.min.js"></script>
<script src="/ruoyi/js/ry-ui.js?v=4.6.1"></script>
<script src="/ruoyi/js/common.js?v=4.6.1"></script>
<script src="/ruoyi/index.js?v=20201208"></script>
<script src="/ajax/libs/fullscreen/jquery.fullscreen.js"></script>
<script src="/ajax/libs/bootstrap-fileinput/fileinput.min.js?v=20201202"></script>
<script type="text/javascript">
var platformUrl = "[[${platformUrl}]]";
var url6 = "[[${url6}]]";
var url7 = "[[${url7}]]";
var url14 = "[[${url14}]]";
$(function () {
$("#fileinput-demo-1").fileinput({
'theme': 'explorer-fas',
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl': "https://devplatform.zhengzai.tv/platform/basicServices/alOss/upload",
"uploadExtraData": {
"pathName" : "banner",
"buckType" : 1
},
// overwriteInitial: false,
// initialPreviewAsData: true,
autoReplace: true,
dropZoneTitle: "请上传文件",
maxFileCount: 1
});
$("#fileinput-demo-1").on("fileuploaded", function (event, data, previewId, index) {
window.localStorage.setItem('vipBanner', data.response.data.ossPath);
});
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<link href="favicon.ico" rel="shortcut icon">
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/jquery.contextMenu.min.css" rel="stylesheet">
<link href="/css/font-awesome.min.css" rel="stylesheet">
<link href="/css/animate.css" rel="stylesheet">
<link href="/css/style.css" rel="stylesheet">
<link href="/css/skins.css" rel="stylesheet">
<link href="/ruoyi/css/ry-ui.css?v=4.6.1" rel="stylesheet">
<link href="/ajax/libs/bootstrap-fileinput/fileinput.min.css?v=20201202" rel="stylesheet">
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<div class="file-loading">
<input id="fileinput-demo-1" type="file" name="file" data-browse-on-zone-click="true"
data-msg-placeholder="Select {files} for upload...">
<input hidden id="coverImg" name="coverImg">
</div>
</div>
<!-- 全局js -->
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="/js/jquery.contextMenu.min.js"></script>
<script src="/ajax/libs/blockUI/jquery.blockUI.js"></script>
<script src="/ajax/libs/layer/layer.min.js"></script>
<script src="/ruoyi/js/ry-ui.js?v=4.6.1"></script>
<script src="/ruoyi/js/common.js?v=4.6.1"></script>
<script src="/ruoyi/index.js?v=20201208"></script>
<script src="/ajax/libs/fullscreen/jquery.fullscreen.js"></script>
<script src="/ajax/libs/bootstrap-fileinput/fileinput.min.js?v=20201202"></script>
<script type="text/javascript">
var platformUrl = "[[${platformUrl}]]";
var url6 = "[[${url6}]]";
var url7 = "[[${url7}]]";
var url14 = "[[${url14}]]";
$(function () {
$("#fileinput-demo-1").fileinput({
'theme': 'explorer-fas',
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl': "https://devplatform.zhengzai.tv/platform/basicServices/alOss/upload",
"uploadExtraData": {
"pathName" : "banner",
"buckType" : 1
},
// overwriteInitial: false,
// initialPreviewAsData: true,
autoReplace: true,
dropZoneTitle: "请上传文件",
maxFileCount: 1
});
$("#fileinput-demo-1").on("fileuploaded", function (event, data, previewId, index) {
window.localStorage.setItem('vipLast', data.response.data.ossPath);
});
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('会员码列表')" />
<th:block th:include="include :: select2-css" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="data-form">
<div class="select-list">
<ul>
<input type="text" name="memberId" hidden="hidden" th:value="${memberId}" readonly/>
<li>
状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="resetPre()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="candy:coupon:code:export">
<i class="fa fa-download"></i> 导出
</a>
<a class="btn btn-primary multiple disabled" onclick="invalidHandler()" shiro:hasPermission="candy:coupon:code:invalid">
<i class="fa fa-edit"></i> 批量失效
</a>
<a class="btn btn-danger multiple disabled" onclick="recoverHandler()" shiro:hasPermission="candy:coupon:code:recover">
<i class="fa fa-remove"></i> 批量退回
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var invalidFlag = [[${@permission.hasPermi('candy:coupon:code:invalid')}]];
var recoverFlag = [[${@permission.hasPermi('candy:coupon:code:recover')}]];
var datas = [[${@dict.getType('zhengzai_coupon_code_state')}]];
var memberId = [[${memberId}]];
var prefix = ctx + "adam/member";
$(function() {
var options = {
url: prefix + "/list_code",
exportUrl: prefix + "/export_code",
detailUrl: ctx + "adam/order/orderList/detail/{id}",
sortName: "code",
sortOrder: "asc",
modalName: "数据",
columns: [{
checkbox: true
},
{
field: 'code',
title: '代金码'
},
{
field: 'expireAt',
title: '到期时间'
},
{
field: 'useAt',
title: '使用时间'
},
{
field: 'useOrderNo',
title: '兑换订单号',
formatter: function(value, row, index) {
var actions = [];
if ($.common.isEmpty(value)) {
actions.push('<a href="javascript:void(0)">-</a>');
} else {
actions.push('<a href="javascript:void(0)" onclick="$.operate.detailTab(\'' + value + '\')">' + value + '</a>');
}
return actions.join('');
}
},
{
field: 'state',
title: '状态',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
if (row.state === 0) {
actions.push('<a class="btn btn-primary btn-xs ' + (invalidFlag && row.state===0) + '" href="javascript:void(0)" onclick="invalidHandler(\'' + row.code + '\')"><i class="fa fa-edit"></i>失效</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + (recoverFlag && row.state==0) + '" href="javascript:void(0)" onclick="recoverHandler(\'' + row.code + '\')"><i class="fa fa-remove"></i>退回</a>');
}
return actions.join('');
}
}]
};
$.table.init(options);
});
function resetPre() {
$.form.reset();
}
function invalidHandler(code) {
let invalidCodeUrl = prefix + '/invalid_code';
if (code !== null && code !== undefined) {
var data = {"memberId": memberId,"codes": code};
$.operate.submit(invalidCodeUrl, "post", "json", data);
} else {
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
var data = {"memberId": memberId, "codes": rows.join()};
$.operate.batchProcessing(invalidCodeUrl, '失效', data);
}
}
function recoverHandler(code) {
let recoverCodeUrl = prefix + '/recover_code';
if (code !== null && code !== undefined) {
var data = {"memberId": memberId,"codes": code};
$.operate.submit(recoverCodeUrl, "post", "json", data);
} else {
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
var data = {"memberId": memberId, "codes": rows.join()};
$.operate.batchProcessing(recoverCodeUrl, '失效', data);
}
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('会员卡列表')" />
<th:block th:include="include :: select2-css" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('adam:member:view:edit')}]];
var prefix = ctx + "adam/member";
$(function() {
var options = {
url: prefix + "/list",
updateUrl: prefix + "/info/{id}",
sortName: "memberId",
sortOrder: "asc",
modalName: "设置",
columns: [{
checkbox: true
},
{
field: 'memberId',
title: '会员卡ID'
},
{
field: 'icon',
title: 'ICON',
formatter: function (value, row, index) {
var actions = [];
actions.push($.common.sprintf("<img class='img-circle img-xs' src='%s' />", value));
return actions;
}
},
{
field: 'title',
title: '会员卡标题',
align: 'center',
},
{
field: 'subTitle',
title: '会员卡说明',
},
{
field: 'onsale',
title: '开售状态',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
var listClass = "badge badge-" + (value === 1 ? 'primary' : 'danger');
actions.push($.common.sprintf("<span class='%s'>%s</span>", listClass, value === 1 ? '开售' : '停售'));
return actions;
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.memberId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="memberCodeList(\'' + row.memberId + '\')"><i class="fa fa-edit"></i>兑换码列表</a> ');
return actions.join('');
}
}]
};
$.table.init(options);
});
/* 查看码列表 */
function memberCodeList(memberId) {
$.modal.openTab("会员码列表", 'adam/member/code/' + memberId);
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('请上传banner')"/>
<th:block th:include="include :: bootstrap-fileinput-css"/>
</head>
<body class="white-bg">
<th:block th:include="include :: footer"/>
<th:block th:include="include :: bootstrap-fileinput-js"/>
<th:block th:include="include :: bootstrap-fileinput-css" />
<script type="text/javascript">
$(function () {
$("#fileinput-demo-1").fileinput({
'theme': 'explorer-fas',
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload",
"uploadExtraData": {
"pathName" : "banner",
"buckType" : 1
},
// overwriteInitial: false,
// initialPreviewAsData: true,
autoReplace: true,
dropZoneTitle: "请上传文件",
maxFileCount: 1
});
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('【请填写功能名称】列表')" />
<th:block th:include="include :: header('会员订单列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
......@@ -90,17 +90,19 @@
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
detailUrl: prefix + "/detail/{id}",
modalName: "【请填写功能名称】",
modalName: "会员订单",
columns: [{
checkbox: true
checkbox: true,
},
{
field: 'orderNo',
title: '订单号'
title: '订单号',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a href="javascript:void(0)" onclick="$.operate.detailTab(\'' + row.orderNo + '\')">' + value + '</a>');
return actions.join('');
}
},
{
field: 'state',
......@@ -111,10 +113,13 @@
},
{
field: 'payType',
title: '支付方式'
title: '支付方式',
formatter: function (value) {
return '<span class="nav-label">' + value.toLocaleUpperCase() + '</span>';
}
},
{
field: 'price',
field: 'pricePaid',
title: '价格(元)'
},
{
......@@ -127,7 +132,7 @@
{
field: 'createdAt',
title: '创建时间'
},
},+
{
field: 'uid',
title: '用户ID'
......@@ -149,7 +154,7 @@
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="$.operate.detail(\'' + row.orderNo + '\')"><i class="fa fa-search"></i>详细</a>');
actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="$.operate.detailTab(\'' + row.orderNo + '\')"><i class="fa fa-search"></i>查看详情</a>');
return actions.join('');
}
}]
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('代金码列表')" />
<th:block th:include="include :: select2-css" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="data-form">
<div class="select-list">
<ul>
<input type="text" name="couponId" hidden="hidden" th:value="${couponId}" readonly/>
<li>
状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="resetPre()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="candy:coupon:code:export">
<i class="fa fa-download"></i> 导出
</a>
<a class="btn btn-primary multiple disabled" onclick="invalidHandler()" shiro:hasPermission="candy:coupon:code:invalid">
<i class="fa fa-edit"></i> 批量失效
</a>
<a class="btn btn-danger multiple disabled" onclick="recoverHandler()" shiro:hasPermission="candy:coupon:code:recover">
<i class="fa fa-remove"></i> 批量退回
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var invalidFlag = [[${@permission.hasPermi('candy:coupon:code:invalid')}]];
var recoverFlag = [[${@permission.hasPermi('candy:coupon:code:recover')}]];
var datas = [[${@dict.getType('zhengzai_coupon_code_state')}]];
var couponId = [[${couponId}]];
var prefix = ctx + "candy/coupon/code";
$(function() {
var options = {
url: prefix + "/list",
exportUrl: prefix + "/export",
queryParams: queryParams,
sortName: "ccode",
sortOrder: "asc",
modalName: "数据",
columns: [{
checkbox: true
},
{
field: 'ccode',
title: '代金码'
},
{
field: 'redeemMobile',
title: '用户手机号',
formatter: function(value, row, index) {
var listClass = $.common.equals("default", row.listClass) || $.common.isEmpty(row.listClass) ? "" : "badge badge-" + row.listClass;
return $.common.sprintf("<span class='%s'>%s</span>", listClass, value);
}
},
{
field: 'state',
title: '状态',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-primary btn-xs ' + invalidFlag + '" href="javascript:void(0)" onclick="invalidHandler(\'' + row.ccode + '\')"><i class="fa fa-edit"></i>失效</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + recoverFlag + '" href="javascript:void(0)" onclick="recoverHandler(\'' + row.ccode + '\')"><i class="fa fa-remove"></i>退回</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
function resetPre() {
$.form.reset();
}
function queryParams(params) {
var search = $.table.queryParams(params);
search.dictType = $("#dictType").val();
return search;
}
function invalidHandler(ccode) {
if (ccode !== null && ccode !== undefined) {
var data = {"couponId":couponId,"ccodes": ccode};
$.operate.submit('code/invalid', "post", "json", data);
} else {
$.operate.batchProcessingForCouponCode(couponId, 1);
}
}
function recoverHandler(ccode) {
if (ccode !== null && ccode !== undefined) {
var data = {"couponId":couponId,"ccodes": ccode};
$.operate.submit('code/recover', "post", "json", data);
} else {
$.operate.batchProcessingForCouponCode(couponId, 2);
}
}
</script>
</body>
</html>
\ No newline at end of file
......@@ -187,9 +187,9 @@
function changeInfo(changeBtn) {
var tr = $(changeBtn).parent().parent();//tr对象
tr.find('td').each(function (i, td) {
if ($(td).find("input").attr("name") == "priceDiscountMember") {//过滤修改列
$(td).find("input").removeAttr("readonly")
}
// if ($(td).find("input").attr("name") == "priceDiscountMember") {//过滤修改列
// $(td).find("input").removeAttr("readonly")
// }
if ($(td).find("input").attr("name") == "memberLimitCount") {//过滤修改列
$(td).find("input").removeAttr("readonly")
}
......
package com.liquidnet.client.admin.zhengzai.adam.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.dto.AdamMemberPriceParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberPriceVo;
import com.liquidnet.service.adam.dto.admin.AdamMemberPriceBuildParam;
import com.liquidnet.service.adam.entity.AdamMemberPrice;
public interface IAdamMemberPriceAdminService extends IService<AdamMemberPrice> {
AdamMemberPriceVo add(AdamMemberPrice info);
boolean edit(AdamMemberPriceParam param);
boolean edit(AdamMemberPriceBuildParam param);
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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