Commit 4dd966e5 authored by 周健威's avatar 周健威

Merge remote-tracking branch 'origin/base-modify' into base-modify

# Conflicts:
#	xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/service/CertificationService.java
parents c8d6c5b0 42f90d8a
package com.github.wxiaoqi.security.admin.bo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/11 16:30
*/
@Data
public class UserIncomeBo {
private Integer userId;
private BigDecimal income;
}
package com.github.wxiaoqi.security.admin.bo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description 用户的团队成员
* @data 2019/7/11 14:46
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserTeamMemberBo {
private Integer userId;
/**
* 用户名
*/
private String userName;
/**
* 昵称
*/
private String nickName;
/**
* 头像
*/
private String headUrl;
/**
* 加入时间
*/
private Long leagueTime;
/**
* 收入
*/
private BigDecimal income;
}
......@@ -53,9 +53,9 @@ public class AppUserManageDTO {
private Integer source;
/**
*
* 接收前台时间范围
*/
private String registrationDate;
private String[] registrationDate;
}
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/11 15:14
*/
@Data
public class AppUserSellingWaterDTO {
/**
* 用户id
*/
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 身份职位
*/
@ApiModelProperty(value = "身份职位")
private Integer positionId;
/**
* 来源用户id
*/
@ApiModelProperty(value = "来源用户id")
private Integer sourceId;
/**
* 订单id
*/
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 商品id
*/
@ApiModelProperty(value = "商品id")
private Integer goodId;
/**
* 商品数量
*/
@ApiModelProperty(value = "商品数量")
private Integer goodNumber;
/**
* 类型 1=>一级上线提成
*/
@ApiModelProperty(value = "类型 1=>一级上线提成")
private Integer type;
/**
* 类别:0-正;1-负
*/
@ApiModelProperty(value = "类别:0-正;1-负")
private Integer status;
/**
* 商品标题
*/
@ApiModelProperty(value = "商品标题")
private String title;
/**
* 图片
*/
@ApiModelProperty(value = "图片")
private String img;
/**
* 售价
*/
@ApiModelProperty(value = "售价")
private Long price;
/**
* 提成百分比
*/
@ApiModelProperty(value = "提成百分比")
private Integer extract;
/**
* 是否入账:0-未入账;1-已入账
*/
@ApiModelProperty(value = "是否入账:0-未入账;1-已入账")
private Integer waiting;
}
......@@ -21,10 +21,14 @@ import java.io.Serializable;
@AllArgsConstructor
public class BaseUserMemberExportDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private Integer memberLevel;
private Integer totalNumber;
private Integer rentFreeDays;
private Integer discount;
private Integer status;
private Long crtTime;
private String crtName;
private Integer crtId;
}
package com.github.wxiaoqi.security.admin.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/13 10:04
*/
@Data
public class BaseUserMemberExportDataFindDTO extends PageParam {
private String username;
private Long startTime;
private Long endTime;
}
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 拥金明细
*/
@Data
public class OrderGoodsDTO {
/**
* 商品id
*/
@ApiModelProperty(value = "商品id")
private Integer goodId;
/**
* 商品类型;1-租车;2-旅游;3-会员订单;4-营地
*/
@ApiModelProperty(value = "商品类型")
private Integer type;
/**
* 商品数量
*/
@ApiModelProperty(value = "商品数量")
private Integer goodNumber;
/**
* 商品标题
*/
@ApiModelProperty(value = "商品标题")
private String title;
/**
* 图片
*/
@ApiModelProperty(value = "图片")
private String img;
/**
* 售价
*/
@ApiModelProperty(value = "售价")
private BigDecimal price;
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 拥金明细
*/
@Data
public class OrderWaterDTO {
/**
* 用户id
*/
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 订单id
*/
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 订单号
*/
@ApiModelProperty(value = "订单号")
private String orderNo;
/**
* 1.已支付,2-已完成,3-已退款
*/
@ApiModelProperty(value = "订单状态")
private Integer status;
@ApiModelProperty(value = "订单商品")
private List<OrderGoodsDTO> goodsDTOList;
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 8:42
*/
@Data
public class WalletDTO {
@ApiModelProperty(value = "id")
private Long id;
/**
* 用户ID
*/
@ApiModelProperty("用户ID")
private Integer userId;
/**
* 余额(分)
*/
@ApiModelProperty(value = "余额(元)")
private BigDecimal balance;
/**
* 已提现金额
*/
@ApiModelProperty(value = "已提现金额")
private BigDecimal withdrawals;
/**
* 进账总额(元)
*/
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal totalAmount;
/**
* 进账总额(分)
*/
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal todayAmount;
/**
* 未入账金额
*/
@ApiModelProperty(value = "未入账金额")
private BigDecimal unbooked;
/**
* 是否冻结:0-正常,1-冻结
*/
@ApiModelProperty(value = "是否冻结:0-正常,1-冻结")
private Integer isFrozen;
/**
* 最后进账时间
*/
@ApiModelProperty(value = "最后进账时间")
private Long lastIntime;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 银行卡绑定表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Data
@Table(name = "app_user_bank_card")
public class AppUserBankCard implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("")
private Integer id;
/**
* 用户id
*/
@Column(name = "userid")
@ApiModelProperty(value = "用户id")
private String userid;
/**
* 绑定银行时的流水号,用于支付,退款,提现
*/
@Column(name = "bindingSN")
@ApiModelProperty(value = "绑定银行时的流水号,用于支付,退款,提现")
private String bindingsn;
/**
* 银行编号
*/
@Column(name = "bankID")
@ApiModelProperty(value = "银行编号")
private String bankid;
/**
* 账户名称
*/
@Column(name = "accountName")
@ApiModelProperty(value = "账户名称")
private String accountname;
/**
* 账户银行卡号
*/
@Column(name = "accountNo")
@ApiModelProperty(value = "账户银行卡号")
private String accountno;
/**
* 开户证件 0身份证 1户口簿 2护照
*/
@Column(name = "identificationType")
@ApiModelProperty(value = "开户证件 0身份证 1户口簿 2护照")
private String identificationtype;
/**
* 证件号
*/
@Column(name = "identificationNo")
@ApiModelProperty(value = "证件号")
private String identificationno;
/**
* 手机号 用于收取验证码
*/
@Column(name = "phoneNo")
@ApiModelProperty(value = "手机号 用于收取验证码")
private String phoneno;
/**
* 是否默认 用于提现有指定账户 1表示默认,0表示不默认
*/
@Column(name = "isDefault")
@ApiModelProperty(value = "是否默认 用于提现有指定账户 1表示默认,0表示不默认")
private Integer isdefault;
/**
* 绑定时间
*/
@Column(name = "bindTime")
@ApiModelProperty(value = "绑定时间")
private Integer bindtime;
/**
* 1:绑定,0:解绑
*/
@Column(name = "flag")
@ApiModelProperty(value = "1:绑定,0:解绑")
private Integer flag;
/**
* 解绑时间
*/
@Column(name = "unBindTime")
@ApiModelProperty(value = "解绑时间")
private Integer unbindtime;
/**
* 解绑人员
*/
@Column(name = "unBindUserId")
@ApiModelProperty(value = "解绑人员")
private String unbinduserid;
/**
* 绑定人员
*/
@Column(name = "bundUserId")
@ApiModelProperty(value = "绑定人员")
private String bunduserid;
/**
* 解绑绑定银行时的流水号
*/
@Column(name = "unBindingSN")
@ApiModelProperty(value = "解绑绑定银行时的流水号")
private String unbindingsn;
/**
* 银行名称
*/
@Column(name = "bankname")
@ApiModelProperty(value = "银行名称")
private String bankname;
/**
* 分支行名称
*/
@Column(name = "subbranch_name")
@ApiModelProperty(value = "分支行名称")
private String subbranchName;
/**
* 分支行省份
*/
@Column(name = "subbranch_province")
@ApiModelProperty(value = "分支行省份")
private String subbranchProvince;
/**
* 分支行城市
*/
@Column(name = "subbranch_city")
@ApiModelProperty(value = "分支行城市")
private String subbranchCity;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 拥金明细表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Data
@Table(name = "app_user_selling_water")
public class AppUserSellingWater implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("")
private Integer id;
/**
* 用户id
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 身份职位
*/
@Column(name = "position_id")
@ApiModelProperty(value = "身份职位")
private Integer positionId;
/**
* 来源用户id
*/
@Column(name = "source_id")
@ApiModelProperty(value = "来源用户id")
private Integer sourceId;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 订单号
*/
@Column(name = "order_no")
@ApiModelProperty(value = "订单号")
private String orderNo;
/**
* 商品id
*/
@Column(name = "good_id")
@ApiModelProperty(value = "商品id")
private Integer goodId;
/**
* 商品数量
*/
@Column(name = "good_number")
@ApiModelProperty(value = "商品数量")
private Integer goodNumber;
/**
* 类型 1=>一级上线提成
*/
@Column(name = "type")
@ApiModelProperty(value = "类型 1=>一级上线提成")
private Integer type;
/**
* 类别:0-正;1-负
*/
@Column(name = "status")
@ApiModelProperty(value = "类别:0-正;1-负")
private Integer status;
/**
* 商品标题
*/
@Column(name = "title")
@ApiModelProperty(value = "商品标题")
private String title;
/**
* 图片
*/
@Column(name = "img")
@ApiModelProperty(value = "图片")
private String img;
/**
* 售价
*/
@Column(name = "price")
@ApiModelProperty(value = "售价")
private BigDecimal price;
/**
* 提成百分比
*/
@Column(name = "extract")
@ApiModelProperty(value = "提成百分比")
private Integer extract;
/**
* 是否入账:0-未入账;1-已入账
*/
@Column(name = "waiting")
@ApiModelProperty(value = "是否入账:0-未入账;1-已入账")
private Integer waiting;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 所获佣金
*/
@Column(name = "commission")
private BigDecimal commission;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 商品拥金表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 18:34:39
*/
@Data
@Table(name = "base_good_commission")
public class BaseGoodCommission implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
/**
* 商品id
*/
@Column(name = "good_id")
@ApiModelProperty(value = "商品id")
private Integer goodId;
/**
* 1-租车;2-旅游;3-会员订单;4-营地
*/
@Column(name = "type")
@ApiModelProperty(value = "1-租车;2-旅游;3-会员订单;4-营地")
private Integer type;
/**
* 是否计算;0-不计算;1计算
*/
@Column(name = "is_reckon")
@ApiModelProperty(value = "是否计算;0-不计算;1计算")
private Integer isReckon;
/**
* 拥金比例
*/
@Column(name = "extract")
@ApiModelProperty(value = "拥金比例")
private Integer extract;
}
......@@ -34,5 +34,11 @@ public class BaseUserMemberExport implements Serializable {
private Integer status;
@Column(name = "is_del")
private Integer isDel;
@Column(name = "crt_time")
private Long crtTime;
@Column(name = "crt_name")
private String crtName;
@Column(name = "crt_id")
private Integer crtId;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 我的钱包
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Data
@Table(name = "my_wallet")
public class MyWallet implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@Column(name = "id")
@ApiModelProperty(value = "id")
private Integer id;
/**
* 用户ID
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("用户ID")
private Integer userId;
/**
* 余额(分)
*/
@Column(name = "balance")
@ApiModelProperty(value = "余额(元)")
private BigDecimal balance;
/**
* 已提现金额
*/
@Column(name = "withdrawals")
@ApiModelProperty(value = "已提现金额")
private BigDecimal withdrawals;
/**
* 进账总额(分)
*/
@Column(name = "total_amount")
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal totalAmount;
/**
* 进账总额(分)
*/
@Column(name = "today_amount")
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal todayAmount;
/**
* 未入账金额
*/
@Column(name = "unbooked")
@ApiModelProperty(value = "未入账金额")
private BigDecimal unbooked;
/**
* 是否冻结:0-正常,1-冻结
*/
@Column(name = "is_frozen")
@ApiModelProperty(value = "是否冻结:0-正常,1-冻结")
private Integer isFrozen;
/**
* 最后进账时间
*/
@Column(name = "last_intime")
@ApiModelProperty(value = "最后进账时间")
private Long lastIntime;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 版本
*/
@Column(name = "version")
@ApiModelProperty(value = "版本")
private Integer version;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 钱包提现表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Data
@Table(name = "my_wallet_cath")
public class MyWalletCath implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键ID")
private Long id;
/**
* 用户iD
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户iD")
private String userId;
/**
* 提现类别,第三方提现类别(0-微信,1-支付宝,2-银行卡)
*/
@Column(name = "cath_type")
@ApiModelProperty(value = "提现类别,第三方提现类别(0-微信,1-支付宝,2-银行卡)")
private Integer cathType;
/**
* 商户订单号
*/
@Column(name = "orderno")
@ApiModelProperty(value = "商户订单号")
private String orderno;
/**
* 第三方订单号:如微信,支付宝,银行卡等
*/
@Column(name = "cono")
@ApiModelProperty(value = "第三方订单号:如微信,支付宝,银行卡等")
private String cono;
/**
* 提现金额
*/
@Column(name = "amount")
@ApiModelProperty(value = "提现金额")
private BigDecimal amount;
/**
* 订单状态:0-未提现,待审核,1-已审核
*/
@Column(name = "stauts")
@ApiModelProperty(value = "订单状态:0-未提现,待审核,1-已审核")
private Integer stauts;
/**
* 提现日期
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "提现日期", hidden = true )
private Long crtTime;
/**
* 审核日期
*/
@Column(name = "finish_time")
@ApiModelProperty(value = "审核日期")
private Long finishTime;
/**
* 操作者ID
*/
@Column(name = "oper_user")
@ApiModelProperty(value = "操作者ID")
private String operUser;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 收入/支持明细表,每笔的进账,出账的详细记录
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Data
@Table(name = "my_wallet_detail")
public class MyWalletDetail implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键ID")
private Integer id;
/**
* 用户ID
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户ID")
private Integer userId;
/**
* 来源:0-活动,1-佣金,2-会员充值,10-提现,11-转账,12-购买
*/
@Column(name = "source")
@ApiModelProperty(value = "来源:0-活动,1-佣金,2-会员充值,10-提现,11-转账,12-购买")
private Integer source;
/**
* 收入/支出:0-收入,1-支出
*/
@Column(name = "itype")
@ApiModelProperty(value = "收入/支出:0-收入,1-支出")
private Integer itype;
/**
* 收入/支出的金额(分)
*/
@Column(name = "amount")
@ApiModelProperty(value = "收入/支出的金额(分)")
private BigDecimal amount;
/**
* 活动类型
*/
@Column(name = "type")
@ApiModelProperty(value = "活动类型")
private Integer type;
/**
* 活动id
*/
@Column(name = "activity_id")
@ApiModelProperty(value = "活动id")
private Integer activityId;
/**
* 单号
*/
@Column(name = "cono")
@ApiModelProperty(value = "单号")
private Integer cono;
/**
* 加上当时的收入的余额
*/
@Column(name = "balance")
@ApiModelProperty(value = "加上当时的收入的余额")
private BigDecimal balance;
/**
* 操作者ID(如果系统操作,-1)
*/
@Column(name = "crt_user")
@ApiModelProperty(value = "操作者ID(如果系统操作,-1)")
private Integer crtUser;
/**
* 操作时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "操作时间", hidden = true )
private Long crtTime;
}
......@@ -13,12 +13,10 @@ import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
......
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 9:20
*/
@Data
public class AppletWalletVo {
/**
* 用户ID
*/
@ApiModelProperty("用户ID")
private Integer userId;
/**
* 余额(元)
*/
@ApiModelProperty(value = "余额(元)")
private BigDecimal balance;
/**
* 进账总额(元)
*/
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal totalAmount;
/**
* 今日收益(元)
*/
@ApiModelProperty(value = "今日收益(元)")
private BigDecimal todayAmount;
}
package com.github.wxiaoqi.security.admin.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/8 16:08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "base_user_member_export")
public class BaseUserMemberExportVo implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private Integer memberLevel;
private Integer totalNumber;
private Integer rentFreeDays;
private Integer status;
private Integer isDel;
private Long crtTime;
private String crtName;
}
package com.github.wxiaoqi.security.admin.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 11:02
*/
@Data
public class SellingWalletPagVo {
private BigDecimal totalIncome;
private List<SellingWalletVo> sellingWaters;
private Integer pageNum;
private Integer pageSize;
private Integer totalCount;
private Integer totalPage;
}
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 11:02
*/
@Data
public class SellingWalletVo {
/**
* 用户名
*/
private String username;
/**
* 昵称
*/
private String nickName;
/**
* 用户头像
*/
private String headUrl;
@ApiModelProperty(value = "商品数量")
private Integer goodNumber;
@ApiModelProperty(value = "商品标题")
private String title;
@ApiModelProperty(value = "图片")
private String img;
@ApiModelProperty(value = "售价")
private BigDecimal price;
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
private Integer waiting;
private Integer status;
/**
* 所获佣金
*/
private BigDecimal commission;
}
package com.github.wxiaoqi.security.admin.vo;
import com.github.wxiaoqi.security.admin.bo.UserTeamMemberBo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description 用户的团队成员
* @data 2019/7/11 14:46
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserTeamMemberVo {
private BigDecimal totalIncome;
private List<UserTeamMemberBo> userTeamMemberBos;
private Integer pageNum;
private Integer pageSize;
private Integer totalCount;
private Integer totalPage;
}
package com.github.wxiaoqi.security.admin.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 10:31
*/
@Data
public class WalletCathPageVo {
private BigDecimal totalWithdraw;
private List<WalletCathVo> walletCaths;
private Integer pageNum;
private Integer pageSize;
private Integer totalCount;
private Integer totalPage;
}
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 10:45
*/
@Data
public class WalletCathVo {
/**
* 用户iD
*/
@ApiModelProperty(value = "用户iD")
private String userId;
/**
* 提现类别,第三方提现类别(0-微信,1-支付宝,2-银行卡)
*/
@ApiModelProperty(value = "提现类别,第三方提现类别(0-微信,1-支付宝,2-银行卡)")
private Integer cathType;
/**
* 商户订单号
*/
@ApiModelProperty(value = "商户订单号")
private String orderno;
/**
* 第三方订单号:如微信,支付宝,银行卡等
*/
@ApiModelProperty(value = "第三方订单号:如微信,支付宝,银行卡等")
private String cono;
/**
* 提现金额
*/
@ApiModelProperty(value = "提现金额")
private BigDecimal amount;
/**
* 订单状态:0-未提现,待审核,1-已审核
*/
@ApiModelProperty(value = "订单状态:0-未提现,待审核,1-已审核")
private Integer stauts;
/**
* 提现日期
*/
@ApiModelProperty(value = "提现日期", hidden = true )
private Long crtTime;
/**
* 审核日期
*/
@ApiModelProperty(value = "审核日期")
private Long finishTime;
}
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 9:20
*/
@Data
public class WalletVo {
@ApiModelProperty(value = "id")
private Long id;
/**
* 用户ID
*/
@ApiModelProperty("用户ID")
private Integer userId;
/**
* 余额(元)
*/
@ApiModelProperty(value = "余额(元)")
private BigDecimal balance;
/**
* 已提现金额
*/
@ApiModelProperty(value = "已提现金额")
private BigDecimal withdrawals;
/**
* 进账总额(元)
*/
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal totalAmount;
/**
* 进账总额(分)
*/
@ApiModelProperty(value = "进账总额(元)")
private BigDecimal todayAmount;
/**
* 未入账金额
*/
@ApiModelProperty(value = "未入账金额")
private BigDecimal unbooked;
/**
* 是否冻结:0-正常,1-冻结
*/
@ApiModelProperty(value = "是否冻结:0-正常,1-冻结")
private Integer isFrozen;
/**
* 最后进账时间
*/
@ApiModelProperty(value = "最后进账时间")
private Long lastIntime;
}
......@@ -8,12 +8,17 @@ import com.github.wxiaoqi.security.admin.rpc.service.AppPermissionService;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* ${DESCRIPTION}
......@@ -27,13 +32,14 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
@Override
@CacheClear(pre="user{1.userid}")
@CacheClear(pre = "user{1.userid}")
public void updateSelectiveById(AppUserDetail entity) {
super.updateSelectiveById(entity);
}
/**
* 根据用户id获取用户信息
*
* @param userid
* @return
*/
......@@ -49,26 +55,28 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
/**
* 获取用户信息
*
* @param userid
* @return
*/
@Cache(key="user{1}")
public AppUserVo getUserInfoById(Integer userid){
@Cache(key = "user{1}")
public AppUserVo getUserInfoById(Integer userid) {
return mapper.getUserInfo(userid);
}
/**
* 更新用户信息
*
* @param userVo
*/
@CacheClear(pre="user{1.userid}")
public void updUuserInfoById(AppUserVo userVo){
AppUserDetail entity =new AppUserDetail();
@CacheClear(pre = "user{1.userid}")
public void updUuserInfoById(AppUserVo userVo) {
AppUserDetail entity = new AppUserDetail();
try {
BeanUtils.copyProperties(entity,userVo);
if(entity!=null){
BeanUtils.copyProperties(entity, userVo);
if (entity != null) {
entity.setUpdHost(AppPermissionService.getIp());
entity.setUpdatetime(Instant.now().toEpochMilli()/1000L);
entity.setUpdatetime(Instant.now().toEpochMilli() / 1000L);
super.updateSelectiveById(entity);
}
} catch (Exception e) {
......@@ -78,9 +86,17 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
}
public Map<Integer, AppUserDetail> findUserIdAndUserDetailMapByMemberIds(List<Integer> memberIds) {
Map<Integer, AppUserDetail> userIdAndAppUserDetailMap = new HashMap<>();
Example example = new Example(AppUserDetail.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("userid", memberIds);
List<AppUserDetail> appUserDetails = mapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(appUserDetails)){
userIdAndAppUserDetailMap = appUserDetails.stream().collect(Collectors.toMap(AppUserDetail::getUserid, Function.identity()));
}
return userIdAndAppUserDetailMap;
}
}
......@@ -14,10 +14,12 @@ import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -168,4 +170,13 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
}
return phoneAndUserIdMap;
}
public Map<Integer, AppUserLogin> findUserIdAndUserLoginMapByMemberIds(List<Integer> memberIds) {
Map<Integer,AppUserLogin> userIdAndAppUserLoginMap = new HashMap<>();
List<AppUserLogin> appUserLogins = mapper.selectByIdList(memberIds);
if (CollectionUtils.isNotEmpty(appUserLogins)){
userIdAndAppUserLoginMap = appUserLogins.stream().collect(Collectors.toMap(AppUserLogin::getId, Function.identity()));
}
return userIdAndAppUserLoginMap;
}
}
......@@ -15,4 +15,10 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
*/
@Service
public class AppUserPositionBiz extends BaseBiz<AppUserPositionMapper,AppUserPosition> {
//获取用户职位的折扣
public Integer getExtract(Integer userId){
return mapper.getExtractByUserId(userId);
}
}
\ No newline at end of file
......@@ -2,16 +2,19 @@ package com.github.wxiaoqi.security.admin.biz;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.bo.UserTeamMemberBo;
import com.github.wxiaoqi.security.admin.entity.AppUserRelationTemp;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import com.github.wxiaoqi.security.admin.mapper.AppUserRelationMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example;
/**
* 用户关系表
......@@ -146,4 +149,8 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
private AppUserRelationBiz getMyBiz() {
return AopContext.currentProxy() != null ? (AppUserRelationBiz) AopContext.currentProxy() : this;
}
public PageDataVO<AppUserRelation> findMemberPageByLeaderId(Integer leaderId, Integer pageNo, Integer pageSize) {
return PageDataVO.pageInfo(pageNo, pageSize, () -> mapper.selectByLeaderId(leaderId));
}
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.biz;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.BaseGoodCommission;
import com.github.wxiaoqi.security.admin.mapper.BaseGoodCommissionMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* 商品拥金表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 18:34:39
*/
@Service
public class BaseGoodCommissionBiz extends BaseBiz<BaseGoodCommissionMapper,BaseGoodCommission> {
public Integer getExtract(Integer type,Integer goodId){
Example example=new Example(BaseGoodCommission.class);
example.createCriteria().andEqualTo("goodId", goodId).andEqualTo("type", type).andEqualTo("isReckon",1);
List<BaseGoodCommission> list = mapper.selectByExample(example);
if (list != null && list.size() != 0) {
return list.get(0).getExtract();
}
return 0;
}
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.entity.MyWallet;
import com.github.wxiaoqi.security.admin.mapper.MyWalletMapper;
import com.github.wxiaoqi.security.admin.vo.AppletWalletVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 9:18
*/
@Transactional
@Service
public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
public AppletWalletVo findMyWallet(Integer userId){
AppletWalletVo appletWalletVo = new AppletWalletVo();
Example example = new Example(MyWallet.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId",userId);
List<MyWallet> wallets = mapper.selectByExample(example);
MyWallet myWallet = wallets.get(0);
BeanUtils.copyProperties(myWallet,appletWalletVo);
return appletWalletVo;
}
}
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.entity.MyWalletCath;
import com.github.wxiaoqi.security.admin.mapper.MyWalletCathMapper;
import com.github.wxiaoqi.security.admin.vo.WalletCathPageVo;
import com.github.wxiaoqi.security.admin.vo.WalletCathVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 10:21
*/
@Transactional
@Service
public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
public WalletCathPageVo findWatchCatchByWithdrawalState(Integer userId,Integer state, Integer pageNo, Integer pageSize){
WalletCathPageVo walletCathPageVo = new WalletCathPageVo();
Example example = new Example(MyWalletCath.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("stauts",state);
criteria.andEqualTo("userId",userId);
PageDataVO<MyWalletCath> walletCathPage = PageDataVO.pageInfo(pageNo, pageSize, () -> mapper.selectByExample(example));
List<MyWalletCath> walletCaths = walletCathPage.getData();
if (CollectionUtils.isEmpty(walletCaths)){
return walletCathPageVo;
}
WalletCathVo walletCathVo = null;
BigDecimal totalWithdraw = new BigDecimal(0);
List<WalletCathVo> walletCatchPageVos = new ArrayList<>();
for (MyWalletCath walletCath : walletCaths) {
walletCathVo = new WalletCathVo();
BeanUtils.copyProperties(walletCath,walletCathVo);
totalWithdraw = totalWithdraw.add(walletCathVo.getAmount());
walletCatchPageVos.add(walletCathVo);
}
walletCathPageVo.setPageNum(walletCathPage.getPageNum());
walletCathPageVo.setPageSize(walletCathPage.getPageSize());
walletCathPageVo.setTotalCount(walletCathPage.getTotalCount().intValue());
walletCathPageVo.setTotalPage(walletCathPage.getTotalPage());
walletCathPageVo.setTotalWithdraw(totalWithdraw);
walletCathPageVo.setWalletCaths(walletCatchPageVos);
return walletCathPageVo;
}
}
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.entity.MyWalletDetail;
import com.github.wxiaoqi.security.admin.mapper.MyWalletDetailMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 9:18
*/
@Transactional
@Service
public class MyWalletDetailBiz extends BaseBiz<MyWalletDetailMapper, MyWalletDetail> {
}
package com.github.wxiaoqi.security.admin.biz;
import cn.hutool.core.date.DateTime;
import com.github.wxiaoqi.security.admin.entity.MyWallet;
import com.github.wxiaoqi.security.admin.entity.MyWalletDetail;
import com.github.wxiaoqi.security.admin.mapper.MyWalletDetailMapper;
import com.github.wxiaoqi.security.admin.mapper.MyWalletMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 钱包
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
@Service
@Slf4j
public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{
@Autowired
MyWalletDetailBiz walletDetailBiz;
//我的钱包入账
public void updMyWater(Integer userId, Integer orderId,BigDecimal amount){
log.info("---我的钱包入账----userId==="+userId+"----orderId===="+orderId+"----amount===="+amount);
MyWallet wallet=new MyWallet();
wallet.setUserId(userId);
wallet=selectOne(wallet);
//进账之前余额
BigDecimal oldBalance=new BigDecimal("0.00");
BigDecimal balance=new BigDecimal("0.00");
//进账总额(元)
BigDecimal totalAmount=new BigDecimal("0.00");
//今日收益
BigDecimal todayAmount=new BigDecimal("0.00");
//未入账金额
BigDecimal unbooked=new BigDecimal("0.00");
Integer id=0;
if(wallet==null){
wallet=new MyWallet();
wallet.setUserId(userId);
totalAmount=amount;
todayAmount=amount;
balance=amount;
}else {
id=wallet.getId();
oldBalance=wallet.getBalance();
balance=wallet.getBalance().add(amount);
totalAmount=wallet.getTotalAmount().add(amount);
Long lastTime=wallet.getLastIntime();
todayAmount=amount;
if (lastTime!=null&&(lastTime==0||isToday(lastTime))){
todayAmount=wallet.getTodayAmount().add(amount);
}
unbooked=wallet.getUnbooked().subtract(unbooked);
}
log.info("---我的钱包入账----userId==="+userId+"----balance===="+balance+"----totalAmount===="+totalAmount+"---todayAmount==="+todayAmount+"---unbooked=="+unbooked);
MyWalletDetail walletDetail=new MyWalletDetail();
walletDetail.setUserId(userId);
walletDetail.setSource(1);
walletDetail.setCono(orderId);
walletDetail.setItype(1);
walletDetail.setAmount(amount);
walletDetail.setBalance(oldBalance);
walletDetailBiz.insertSelective(walletDetail);
Long time=System.currentTimeMillis();
wallet.setBalance(balance);
wallet.setTodayAmount(todayAmount);
wallet.setTotalAmount(totalAmount);
wallet.setUnbooked(unbooked);
wallet.setLastIntime(time);
wallet.setUpdTime(time);
if(id>0){
mapper.updMyWater(wallet);
}else {
wallet.setCrtTime(time);
insertSelective(wallet);
}
log.info("---我的钱包入账----userId==="+userId+"----成功");
}
// 这个时间戳是不是今天
public boolean isToday(long time) {
boolean isToday = false;
Date date;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
date = sdf.parse(sdf.format(new Date()));
if (time < date.getTime() && time > date.getTime()) {
isToday = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return isToday;
}
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.bo.UserTeamMemberBo;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import com.github.wxiaoqi.security.admin.vo.UserTeamMemberVo;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/11 14:44
*/
@Transactional
@Service
public class UserBusinessBiz {
@Autowired
private AppUserRelationBiz appUserRelationBiz;
@Autowired
private AppUserSellingWaterBiz appUserSellingWaterBiz;
@Autowired
private AppUserLoginBiz appUserLoginBiz;
@Autowired
private AppUserDetailBiz appUserDetailBiz;
public UserTeamMemberVo findTeamMemberPageByUserId(Integer userId, Integer pageNo, Integer pageSize) {
UserTeamMemberVo userTeamMemberVo = new UserTeamMemberVo();
//根据用户id去关系表里查询下级
PageDataVO<AppUserRelation> memberPage = appUserRelationBiz.findMemberPageByLeaderId(userId, pageNo, pageSize);
List<AppUserRelation> teamMemberBos = memberPage.getData();
if (CollectionUtils.isEmpty(teamMemberBos)) {
return userTeamMemberVo;
}
List<Integer> memberIds = teamMemberBos.stream().map(team -> team.getUserId()).collect(Collectors.toList());
Map<Integer, BigDecimal> memberIdAndIncomeMap = appUserSellingWaterBiz.findMemberIdAndIncomeMapByMemberIds(memberIds);
if (memberIdAndIncomeMap == null) {
return userTeamMemberVo;
}
Map<Integer,AppUserLogin> userIdAndAppUserLoginMap = appUserLoginBiz.findUserIdAndUserLoginMapByMemberIds(memberIds);
Map<Integer, AppUserDetail> userIdAndAppUserDetailMap = appUserDetailBiz.findUserIdAndUserDetailMapByMemberIds(memberIds);
List<UserTeamMemberBo> userTeamMemberBos = new ArrayList<>();
UserTeamMemberBo userTeamMemberBo;
BigDecimal totalIncome = new BigDecimal(0);
for (AppUserRelation appUserRelation : teamMemberBos) {
userTeamMemberBo = new UserTeamMemberBo();
userTeamMemberBo.setLeagueTime(appUserRelation.getBindTime());
userTeamMemberBo.setUserId(appUserRelation.getUserId());
if (userIdAndAppUserLoginMap!=null){
AppUserLogin appUserLogin = userIdAndAppUserLoginMap.get(appUserRelation.getUserId());
userTeamMemberBo.setUserName(appUserLogin.getUsername());
}
if (userIdAndAppUserDetailMap!=null){
AppUserDetail appUserDetail = userIdAndAppUserDetailMap.get(appUserRelation.getUserId());
userTeamMemberBo.setHeadUrl(appUserDetail==null?"":appUserDetail.getHeadimgurl());
userTeamMemberBo.setNickName(appUserDetail==null?"":appUserDetail.getNickname());
}
userTeamMemberBo.setIncome(memberIdAndIncomeMap.get(appUserRelation.getUserId()));
totalIncome = totalIncome.add(userTeamMemberBo.getIncome());
userTeamMemberBos.add(userTeamMemberBo);
}
userTeamMemberVo.setPageNum(memberPage.getPageNum());
userTeamMemberVo.setPageSize(memberPage.getPageSize());
userTeamMemberVo.setTotalCount(memberPage.getTotalCount().intValue());
userTeamMemberVo.setTotalPage(memberPage.getTotalPage());
userTeamMemberVo.setUserTeamMemberBos(userTeamMemberBos);
userTeamMemberVo.setTotalIncome(totalIncome);
return userTeamMemberVo;
}
}
package com.github.wxiaoqi.security.admin.handler;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz;
import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class IntegralMQHandler {
@Autowired
AppUserSellingWaterBiz waterBiz;
@RabbitListener(queues = "orderWater_queue")
public void integralHandler(String json) {
log.info("接收到的消息:json = {}", json);
try{
OrderWaterDTO orderWaterDTO = JSONObject.parseObject(json, OrderWaterDTO.class);
waterBiz.orderWater(orderWaterDTO);
}catch (Exception e){
log.info("接收到的消息失败");
e.printStackTrace();
}
}
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserBankCard;
import tk.mybatis.mapper.common.Mapper;
/**
* 银行卡绑定表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
public interface AppUserBankCardMapper extends Mapper<AppUserBankCard> {
}
......@@ -4,11 +4,12 @@ import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserManage;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import tk.mybatis.mapper.additional.idlist.SelectByIdListMapper;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface AppUserLoginMapper extends Mapper<AppUserLogin> {
public interface AppUserLoginMapper extends Mapper<AppUserLogin>, SelectByIdListMapper<AppUserLogin,Integer> {
/**
......
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserPosition;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
/**
......@@ -12,4 +13,7 @@ import tk.mybatis.mapper.common.Mapper;
*/
public interface AppUserPositionMapper extends Mapper<AppUserPosition> {
Integer getExtractByUserId(@Param("userId")Integer userId);
}
......@@ -3,6 +3,8 @@ package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 用户关系表
*
......@@ -12,4 +14,6 @@ import tk.mybatis.mapper.common.Mapper;
*/
public interface AppUserRelationMapper extends Mapper<AppUserRelation> {
List<AppUserRelation> selectByLeaderId(Integer leaderId);
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.bo.UserIncomeBo;
import com.github.wxiaoqi.security.admin.entity.AppUserSellingWater;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 拥金明细表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
public interface AppUserSellingWaterMapper extends Mapper<AppUserSellingWater> {
List<UserIncomeBo> accquireIncomeByMemberIds(@Param("memberIds") List<Integer> memberIds);
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.BaseGoodCommission;
import tk.mybatis.mapper.common.Mapper;
/**
* 商品拥金表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 18:34:39
*/
public interface BaseGoodCommissionMapper extends Mapper<BaseGoodCommission> {
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDTO;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDataFindDTO;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberExport;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertListMapper;
import java.util.List;
/**
* @author libin
* @version 1.0
......@@ -15,4 +19,8 @@ public interface BaseUserMemberExportMapper extends Mapper<BaseUserMemberExport>
void updateUserMemberExportDataToLoseEfficacyByPhone(@Param("phone") String phone);
List<BaseUserMemberExportDTO> findExportDataPage(BaseUserMemberExportDataFindDTO exportDataFindDTO);
void updateUserMemberExportDataStatusById(@Param("id") Integer id, @Param("status") int status);
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.MyWalletCath;
import tk.mybatis.mapper.common.Mapper;
/**
* 钱包提现表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
public interface MyWalletCathMapper extends Mapper<MyWalletCath> {
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.MyWalletDetail;
import tk.mybatis.mapper.common.Mapper;
/**
* 收入/支持明细表,每笔的进账,出账的详细记录
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
public interface MyWalletDetailMapper extends Mapper<MyWalletDetail> {
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.MyWallet;
import tk.mybatis.mapper.common.Mapper;
/**
* 我的钱包
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
public interface MyWalletMapper extends Mapper<MyWallet> {
public void updMyWater(MyWallet myWallet);
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.MyWalletBiz;
import com.github.wxiaoqi.security.admin.vo.AppletWalletVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 9:17
*/
@RestController
@RequestMapping("/wallet")
public class MyWalletController {
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@Autowired
private MyWalletBiz myWalletBiz;
@GetMapping
public ObjectRestResponse<AppletWalletVo> findMyWallet(HttpServletRequest request){
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
AppletWalletVo wallet = myWalletBiz.findMyWallet(Integer.valueOf(infoFromToken.getId()));
return ObjectRestResponse.succ(wallet);
} catch (Exception e) {
throw new BaseException(e);
}
}
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.UserBusinessBiz;
import com.github.wxiaoqi.security.admin.bo.UserTeamMemberBo;
import com.github.wxiaoqi.security.admin.vo.UserTeamMemberVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/11 17:48
*/
@RestController
@RequestMapping("/team")
public class UserBussinessController {
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@Autowired
private UserBusinessBiz businessBiz;
@GetMapping("/teams")
public ObjectRestResponse<UserTeamMemberVo> findTeamPage(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, HttpServletRequest request){
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
UserTeamMemberVo userTeamMemberVo = businessBiz.findTeamMemberPageByUserId(Integer.valueOf(infoFromToken.getId()), pageNo, pageSize);
return ObjectRestResponse.succ(userTeamMemberVo);
} catch (Exception e) {
throw new BaseException(e);
}
}
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.AdminBootstrap;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberExportBiz;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.excel.ExcelImport;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* ${DESCRIPTION}
......@@ -33,9 +19,6 @@ public class UserMemberController {
@Autowired
private BaseUserMemberBiz memberBiz;
@Autowired
private BaseUserMemberExportBiz baseUserMemberExportBiz;
/**
* 购买会员
*
......@@ -66,41 +49,4 @@ public class UserMemberController {
) throws Exception {
return memberBiz.upMemberDays(userId, days, type);
}
@PostMapping("/user/export")
public ObjectRestResponse importUserMember(@RequestPart("file") MultipartFile userMemberExcel) {
List<String[]> userMemberData = ExcelImport.getExcelData(userMemberExcel);
if (userMemberData.size() < 1) {
return ObjectRestResponse.createFailedResult(1001, "导入不能没数据!!!");
}
for (String[] userMemberDatum : userMemberData) {
if (userMemberDatum.length!=4){
return ObjectRestResponse.createFailedResult(1002, "数据不完整!!!");
}
}
userMemberData.remove(0);
try {
int effectSize = baseUserMemberExportBiz.importUserMember(userMemberData);
return ObjectRestResponse.succ(effectSize);
}catch (BaseException ex){
return ObjectRestResponse.createDefaultFail();
}
}
@GetMapping("/app/unauth/user/excel_model/dowload")
public ResponseEntity<byte[]> dowloadUserMemberExcelModel(HttpServletResponse response){
// 重置response
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.addHeader("Content-Disposition", "attachment;filename=usermember.xlsx");
InputStream inputStream = AdminBootstrap.class.getClassLoader().getResourceAsStream("file/usermember.xlsx");
try {
byte[] bytes = IOUtils.toByteArray(inputStream);
return ResponseEntity.ok(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz;
import com.github.wxiaoqi.security.admin.vo.SellingWalletPagVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 11:35
*/
@RestController
@RequestMapping("/sellingwater")
public class UserSellingWaterController {
@Autowired
private AppUserSellingWaterBiz appUserSellingWaterBiz;
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@GetMapping("/page")
public ObjectRestResponse<SellingWalletPagVo> findSellingWaterPage(@RequestParam(required = false,value = "type") Integer wating,
@RequestParam("pageNo") Integer pageNo,
@RequestParam("pageSize") Integer pageSize,
HttpServletRequest request) {
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
SellingWalletPagVo sellingWalletPagVo = appUserSellingWaterBiz.findSellingWaterPageByWaiting(wating, Integer.valueOf(infoFromToken.getId()), pageNo, pageSize);
return ObjectRestResponse.succ(sellingWalletPagVo);
} catch (Exception e) {
throw new BaseException(e);
}
}
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.MyWalletCathBiz;
import com.github.wxiaoqi.security.admin.vo.WalletCathPageVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/12 14:17
*/
@RestController
@RequestMapping("/walletcath")
public class WalletCathController {
@Autowired
private MyWalletCathBiz myWalletCathBiz;
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@GetMapping
public ObjectRestResponse<WalletCathPageVo> findWatchCatchByWithdrawalState(@RequestParam("state") Integer state,
@RequestParam("pageNo") Integer pageNo,
@RequestParam("pageSize") Integer pageSize,
HttpServletRequest request) {
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
WalletCathPageVo catchByWithdrawa = myWalletCathBiz.findWatchCatchByWithdrawalState(Integer.valueOf(infoFromToken.getId()), state, pageNo, pageSize);
return ObjectRestResponse.succ(catchByWithdrawa);
} catch (Exception e) {
throw new BaseException(e);
}
}
}
package com.github.wxiaoqi.security.admin.rest.admin;
import com.github.wxiaoqi.security.admin.AdminBootstrap;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberExportBiz;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDataFindDTO;
import com.github.wxiaoqi.security.admin.dto.UserMemberSaveDTO;
import com.github.wxiaoqi.security.admin.vo.BaseUserMemberExportVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.excel.ExcelImport;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author libin
......@@ -17,14 +35,82 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/admin/member")
@Api("后台*会员管理")
public class UserMemberAdminController {
@Autowired
private BaseUserMemberExportBiz baseUserMemberExportBiz;
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
private UserAuthConfig userAuthConfig;
@ApiOperation("批量导入会员")
@PostMapping("/user/export")
public ObjectRestResponse importUserMember(@RequestPart("file") MultipartFile userMemberExcel, HttpServletRequest request) {
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
List<String[]> userMemberData = ExcelImport.getExcelData(userMemberExcel);
if (userMemberData.size() < 1) {
return ObjectRestResponse.createFailedResult(1001, "导入不能没数据!!!");
}
for (String[] userMemberDatum : userMemberData) {
if (userMemberDatum.length!=4){
return ObjectRestResponse.createFailedResult(1002, "数据不完整!!!");
}
}
userMemberData.remove(0);
try {
int effectSize = baseUserMemberExportBiz.importUserMember(userMemberData,Integer.valueOf(infoFromToken.getId()),infoFromToken.getUniqueName());
return ObjectRestResponse.succ(effectSize);
}catch (BaseException ex){
return ObjectRestResponse.createDefaultFail();
}
} catch (Exception e) {
throw new BaseException(e);
}
}
@ApiOperation("会员excel模板下载")
@GetMapping("/app/unauth/user/excel_model/dowload")
public ResponseEntity<byte[]> dowloadUserMemberExcelModel(HttpServletResponse response){
// 重置response
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.addHeader("Content-Disposition", "attachment;filename=usermember.xlsx");
InputStream inputStream = AdminBootstrap.class.getClassLoader().getResourceAsStream("file/usermember.xlsx");
try {
byte[] bytes = IOUtils.toByteArray(inputStream);
return ResponseEntity.ok(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
@ApiOperation("会员新增")
@PostMapping("/save")
public ObjectRestResponse<Void> saveUserMember(@RequestBody UserMemberSaveDTO userMemberSaveDTO) {
baseUserMemberExportBiz.saveUserMember(userMemberSaveDTO);
return ObjectRestResponse.succ();
}
@ApiOperation("分页查询")
@GetMapping("/page")
public ObjectRestResponse<PageDataVO<BaseUserMemberExportVo>> findUserMemberExprotDataPage(BaseUserMemberExportDataFindDTO baseUserMemberExportDataFindDTO){
PageDataVO<BaseUserMemberExportVo> userMemberExportDataPage = baseUserMemberExportBiz.findUserMemberExportDataPage(baseUserMemberExportDataFindDTO);
return ObjectRestResponse.succ(userMemberExportDataPage);
}
@ApiOperation("根据id删除")
@DeleteMapping("/{id}")
public ObjectRestResponse<Void> deleteExportDataById(@PathVariable(value = "id") Integer id){
baseUserMemberExportBiz.updateUserMemberExportDataStatus(id);
return ObjectRestResponse.succ();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserPositionMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.github.wxiaoqi.security.admin.entity.AppUserPosition" id="appUserPositionMap">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="level" column="level"/>
<result property="number" column="number"/>
<result property="extract" column="extract"/>
<result property="status" column="status"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="isDel" column="is_del"/>
</resultMap>
<select id="getExtractByUserId" resultType="Integer">
SELECT p.extract FROM app_user_detail d LEFT JOIN app_user_position p
ON d.position_id=p.id
WHERE d.userid=#{userId} LIMIT 1
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserRelationMapper">
<select id="selectByLeaderId" resultType="com.github.wxiaoqi.security.admin.entity.AppUserRelation">
select `parent_id` as `parentId`,`user_id`as `userId`,`bind_time` as `bindTime` from `app_user_relation` where `parent_id`=#{leaderId} and `is_del`=0
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserSellingWaterMapper">
<select id="accquireIncomeByMemberIds" resultType="com.github.wxiaoqi.security.admin.bo.UserIncomeBo">
SELECT DISTINCT
`source_id`as userId,
(( SELECT SUM(commission) FROM `app_user_selling_water` WHERE source_id=ausw.source_id AND `status` = 0 AND `waiting` = 1 )
- ( SELECT SUM(commission) FROM `app_user_selling_water` WHERE source_id=ausw.source_id AND `status` = 1 AND `waiting` = 1 )) as `income`
FROM
`app_user_selling_water` as ausw
WHERE
source_id in
<foreach collection="memberIds" item="memberId" open="(" close=")" separator=",">
#{memberId}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -10,9 +10,32 @@
<result property="username" column="username"/>
<result property="isDel" column="is_del"/>
<result property="status" column="status"/>
<result property="crtId" column="crt_id"/>
<result property="crtName" column="crt_name"/>
<result property="crtTime" column="crt_time"/>
</resultMap>
<update id="updateUserMemberExportDataToLoseEfficacyByPhone">
update `base_user_member_export` set `status`=1 where `username`=#{phone}
</update>
<select id="findExportDataPage" resultType="com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDTO">
select `id`,`member_level` as `memberLevel`,`rent_free_days` as `rentFreeDays`,`total_number` as `totalNumber`,`username`,`status`,`crt_name` as `crtName`,`crt_time`as `crtTime` from `base_user_member_export` where `is_del`=0
<if test="username != null and username != ''">
and `username`=#{username}
</if>
<if test="startTime != null and endTime != null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime != null and endTime == null">
and <![CDATA[`crt_time` >= #{startTime}]]>
</if>
<if test="endTime != null and startTime == null">
and <![CDATA[ `crt_time` <= #{startTime}]]>
</if>
</select>
<update id="updateUserMemberExportDataStatusById">
update `base_user_member_export` set `is_del`=#{status} where `id`=#{id}
</update>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.MyWalletMapper">
<update id="updMyWater" parameterType="com.github.wxiaoqi.security.admin.entity.MyWallet">
update my_wallet
<set>
<if test=" userId!=null and userId!=''">
user_id=#{userId},
</if>
<if test="balance!=null and balance!='' ">
balance=#{balance},
</if>
<if test="balance!=null and balance!='' ">
withdrawals=#{withdrawals},
</if>
<if test="totalAmount!=null and totalAmount!='' ">
total_amount=#{totalAmount},
</if>
<if test="todayAmount!=null and todayAmount!='' ">
today_amount=#{todayAmount},
</if>
<if test="unbooked!=null and unbooked!='' ">
unbooked=#{unbooked},
</if>
<if test="isFrozen!=null and isFrozen!='' ">
is_frozen=#{isFrozen},
</if>
<if test="lastIntime!=null and lastIntime!='' ">
last_intime=#{lastIntime},
</if>
<if test="crtTime!=null and crtTime!='' ">
crt_time=#{crtTime},
</if>
<if test="updTime!=null and updTime!='' ">
upd_time=#{updTime},
</if>
<if test="version!=null and version!='' ">
version=version+1,
</if>
</set>
<where>
id=#{id} and version=#{version}
</where>
</update>
</mapper>
\ No newline at end of file
......@@ -114,6 +114,12 @@ public class IntegralRule{
*/
private String name;
/**
* 规则名称
*/
private String code;
/**
* 获取积分规则
*/
......
package com.xxfc.platform.activity.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import javax.persistence.Column;
......@@ -8,6 +10,7 @@ import javax.persistence.Table;
@Table(name = "integral_user_record")
@Data
@Builder
public class IntegralUserRecord {
/**
* 主键id
......@@ -34,8 +37,8 @@ public class IntegralUserRecord {
/**
* 积分规则id
*/
@Column(name = "integral_rule_id")
private Integer integralRuleId;
@Column(name = "integral_rule_code")
private String integralRuleCode;
/**
* 积分时间
......
......@@ -10,105 +10,7 @@ public class IntegralRuleDto extends PageParam {
/**
* 主键id
*/
private Integer id;
Integer id;
/**
* 周期单位:0-天,1-周;3-月;4-季;5-年
*/
private Integer period;
/**
* 次数
*/
private Integer number;
/**
* 积分
*/
private Integer point;
/**
* 积分兑换:金额/分
*/
private BigDecimal price;
/**
* 是否连续:0-不连续;1-连续
*/
private Boolean isContinuity;
/**
* 多少天后连续算
*/
private Integer finishDay;
/**
* n天获取的积分
*/
private Integer finishPoint;
/**
* 是否启用:1-启用;0-停用
*/
private Boolean status;
/**
* 创建时间
*/
private Long crtTime;
/**
* 是否删除:0-正常;1-删除
*/
private Boolean isdel;
/**
* 规则开始时间
*/
private Long startTime;
/**
* 规则结束时间
*/
private Long endTime;
/**
* 更新时间
*/
private Long updTime;
/**
* 备注
*/
private String remarks;
/**
* 描述
*/
private String desc;
/**
* 规则图片
*/
private String img;
/**
* 排序
*/
private Integer orderId;
/**
* 规则名称
*/
private String name;
/**
* 获取积分规则
*/
private String regulation;
/**
* json字符串 如:[{"day":4,"integeral":8},{"day":4,"integeral":8}]
*/
private String otherRule;
String code;
}
package com.xxfc.platform.activity.vo;
import com.github.wxiaoqi.security.common.vo.PageParam;
import com.xxfc.platform.activity.entity.IntegralUserRecord;
import lombok.Data;
@Data
......@@ -8,6 +9,23 @@ public class IntegralUserRecordDto extends PageParam {
Integer userId;
Long startTime;
Long endTime;
Integer integralRuleId;
String integralRuleCode;
String amount;
/**
* 0-获取积分;1-抵扣积分
*/
private Integer type;
/**
* 积分数
*/
private Integer point;
/**
* 获取积分的途径id:如订单id,评论id,签到记录id
*/
private Integer channelId;
public IntegralUserRecord getIntegralUserRecord() {
return IntegralUserRecord.builder().integralRuleCode(integralRuleCode).userId(userId).channelId(channelId).point(point).type(type).isdel(false).isValid(true).build();
}
}
......@@ -60,12 +60,15 @@ public class IntegralRuleBiz extends BaseBiz<IntegralRuleMapper, IntegralRule> {
return ObjectRestResponse.succ();
}
public ObjectRestResponse<IntegralRule> getOne(IntegralRule integralRule) {
public ObjectRestResponse<IntegralRule> getOne(IntegralRuleDto integralRule) {
if(integralRule == null) {
return ObjectRestResponse.paramIsEmpty();
}
IntegralRule oldValue = mapper.selectByPrimaryKey(integralRule.getId());
return ObjectRestResponse.succ(oldValue);
List<IntegralRule> oldValue = mapper.selectAllByParam(integralRule);
if(oldValue != null && oldValue.size() > 0) {
return ObjectRestResponse.succ(oldValue.get(0));
}
return ObjectRestResponse.succ();
}
......
......@@ -14,6 +14,7 @@ import com.xxfc.platform.activity.entity.IntegralUserTotal;
import com.xxfc.platform.activity.mapper.IntegralSignRecordMapper;
import com.xxfc.platform.activity.user.UserInfoBiz;
import com.xxfc.platform.activity.util.IntegralToolsUtils;
import com.xxfc.platform.activity.vo.IntegralRuleDto;
import com.xxfc.platform.activity.vo.IntegralUserRecordDto;
import com.xxfc.platform.activity.vo.IntegralUserTotalDto;
import org.apache.commons.lang3.StringUtils;
......@@ -44,17 +45,20 @@ public class IntegralSignRecordBiz extends BaseBiz<IntegralSignRecordMapper, Int
* 签到
* @return
*/
public ObjectRestResponse add(Integer integralRuleId) {
public ObjectRestResponse add(String code) {
AppUserDTO appUserDTO = userInfoBiz.getUserInfo();
if (appUserDTO == null) {
return ObjectRestResponse.createFailedResult(508, "token is null or invalid");
}
if(StringUtils.isBlank(code)) {
return ObjectRestResponse.createDefaultFail();
}
List<IntegralSignRecord> integralSignRecordList = mapper.selectByUserId(appUserDTO.getUserid());
//第一次签到 默认连续1
if(integralSignRecordList == null || integralSignRecordList.size() <= 0) {
IntegralSignRecord integralSignRecord = new IntegralSignRecord();
IntegralRule integralRule = new IntegralRule();
integralRule.setId(integralRuleId);
IntegralRuleDto integralRule = new IntegralRuleDto();
integralRule.setCode(code);
ObjectRestResponse<IntegralRule> objectRestResponse = integralRuleBiz.getOne(integralRule);
if(objectRestResponse.getData() != null) {
integralSignRecord.setUserId(appUserDTO.getUserid());
......@@ -73,8 +77,8 @@ public class IntegralSignRecordBiz extends BaseBiz<IntegralSignRecordMapper, Int
IntegralSignRecord integralSignRecord = integralSignRecordList.get(0);
//判断最后签到的时间和当前时间是不是相差一天
int day = IntegralToolsUtils.differentDaysByMillisecond(integralSignRecord.getLastTime(), new Date().getTime());
IntegralRule integralRule = new IntegralRule();
integralRule.setId(integralRuleId);
IntegralRuleDto integralRule = new IntegralRuleDto();
integralRule.setCode(code);
ObjectRestResponse<IntegralRule> objectRestResponse = integralRuleBiz.getOne(integralRule);
if(objectRestResponse.getData() != null) {
if(day == 1) {//第二天续签
......@@ -139,13 +143,11 @@ public class IntegralSignRecordBiz extends BaseBiz<IntegralSignRecordMapper, Int
}
//添加积分记录
List<IntegralSignRecord> integralSignRecords = mapper.selectByUserId(appUserDTO.getUserid());
IntegralUserRecord integralUserRecord = new IntegralUserRecord();
IntegralUserRecordDto integralUserRecord = new IntegralUserRecordDto();
integralUserRecord.setUserId(appUserDTO.getUserid());
integralUserRecord.setType(0);
integralUserRecord.setIsdel(false);
integralUserRecord.setChannelId(integralSignRecords.get(0).getId());
integralUserRecord.setIntegralRuleId(integralRule.getId());
integralUserRecord.setIsValid(true);
integralUserRecord.setIntegralRuleCode(integralRule.getCode());
integralUserRecord.setPoint(point);
integralUserRecordBiz.add(integralUserRecord);
}
......@@ -170,7 +172,7 @@ public class IntegralSignRecordBiz extends BaseBiz<IntegralSignRecordMapper, Int
public boolean getSignNumberBoolean(AppUserDTO appUserDTO, IntegralRule integralRule) {
IntegralUserRecordDto integralUserRecordDto = new IntegralUserRecordDto();
integralUserRecordDto.setUserId(appUserDTO.getUserid());
integralUserRecordDto.setIntegralRuleId(integralRule.getId());
integralUserRecordDto.setIntegralRuleCode(integralRule.getCode());
switch (integralRule.getPeriod()) {
case 0 : //日
return getBoolean(IntegralToolsUtils.getDayStart(), IntegralToolsUtils.getDayStart() + 24 * 60 * 60 * 1000 - 1, integralUserRecordDto, integralRule);
......
package com.xxfc.platform.activity.biz;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
......@@ -8,18 +9,22 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.github.wxiaoqi.security.common.vo.PageParam;
import com.xxfc.platform.activity.entity.IntegralRule;
import com.xxfc.platform.activity.entity.IntegralUserRecord;
import com.xxfc.platform.activity.entity.IntegralUserTotal;
import com.xxfc.platform.activity.mapper.IntegralUserRecordMapper;
import com.xxfc.platform.activity.user.UserInfoBiz;
import com.xxfc.platform.activity.vo.IntegralRuleDto;
import com.xxfc.platform.activity.vo.IntegralUserRecordDto;
import com.xxfc.platform.activity.vo.IntegralUserTotalDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
@Service
......@@ -32,57 +37,83 @@ public class IntegralUserRecordBiz extends BaseBiz<IntegralUserRecordMapper, Int
@Autowired
IntegralUserTotalBiz integralUserTotalBiz;
@Autowired
IntegralRuleBiz integralRuleBiz;
/**
* 添加用户积分记录
*
* @param integralUserRecord
* @return
*/
public ObjectRestResponse add(IntegralUserRecord integralUserRecord) {
if(integralUserRecord == null) {
public ObjectRestResponse add(IntegralUserRecordDto integralUserRecord) {
log.info("添加积分记录的参数:integralUserRecord = {}", integralUserRecord);
if (integralUserRecord == null || StringUtils.isBlank(integralUserRecord.getIntegralRuleCode())) {
return ObjectRestResponse.paramIsEmpty();
}
if(integralUserRecord.getType() == 0) {//获取积分 增加总积分表
ObjectRestResponse<IntegralUserTotal> objectRestResponse = integralUserTotalBiz.getByUser();
if(objectRestResponse.getStatus() == RestCode.SUCCESS.getStatus() && objectRestResponse.getData() != null) {
IntegralUserTotal integralUserTotal = objectRestResponse.getData();
IntegralUserTotalDto integralUserTotalDto = new IntegralUserTotalDto();
integralUserTotalDto.setUserId(integralUserTotal.getUserId());
integralUserTotalDto.setPoint(integralUserRecord.getPoint());
integralUserTotalBiz.add(integralUserTotalDto);
//如果参数没有积分,说明是消息队列过来的参数,需要查询规则表获取积分数
if (integralUserRecord.getPoint() == null) {
IntegralRuleDto integralRule = new IntegralRuleDto();
integralRule.setCode(integralUserRecord.getIntegralRuleCode());
ObjectRestResponse<IntegralRule> ruleObjectRestResponse = integralRuleBiz.getOne(integralRule);
if (ruleObjectRestResponse.getData() == null) {
return ObjectRestResponse.createFailedResult(1202, "积分规则不存在");
}
Integer point = 0;
if(ruleObjectRestResponse.getData().getPoint() == 0) {//没有基础分需要计算分数
Integer amount = Integer.parseInt(new BigDecimal(integralUserRecord.getAmount()).divide(new BigDecimal("100"), 0, BigDecimal.ROUND_DOWN).toString());
JSONObject jsonObject = JSONObject.parseObject(ruleObjectRestResponse.getData().getOtherRule());
log.info("查询的其他规则json信息:jsonObject = {}", jsonObject);
if(jsonObject == null) {
point = ruleObjectRestResponse.getData().getPoint();
} else {
point = jsonObject.getInteger("rule") == null? 0 * amount: jsonObject.getInteger("rule") * amount;
}
} else {
point = ruleObjectRestResponse.getData().getPoint();
}
log.info("查询的其他规则积分数:point = {}", point);
//把规则表中的积分数设置到参数对象中,然后进行后续操作
integralUserRecord.setPoint(point);
}
if (integralUserRecord.getType() == 0) {//获取积分 增加总积分表
IntegralUserTotalDto integralUserTotalDto = new IntegralUserTotalDto();
integralUserTotalDto.setUserId(integralUserRecord.getUserId());
integralUserTotalDto.setPoint(integralUserRecord.getPoint());
integralUserTotalBiz.add(integralUserTotalDto);
}
} else if(integralUserRecord.getType() == 1) {//扣减积分
integralUserTotalBiz.update(integralUserTotalDto);
} else if (integralUserRecord.getType() == 1) {//扣减积分
ObjectRestResponse<IntegralUserTotal> objectRestResponse = integralUserTotalBiz.getByUser();
if(objectRestResponse.getStatus() == RestCode.SUCCESS.getStatus() && objectRestResponse.getData() != null) {
if (objectRestResponse.getStatus() == RestCode.SUCCESS.getStatus() && objectRestResponse.getData() != null) {
IntegralUserTotal integralUserTotal = objectRestResponse.getData();
IntegralUserTotalDto integralUserTotalDto = new IntegralUserTotalDto();
integralUserTotalDto.setUserId(integralUserTotal.getUserId());
integralUserTotalDto.setPoint(- integralUserRecord.getPoint());
integralUserTotalBiz.add(integralUserTotalDto);
integralUserTotalDto.setPoint(-integralUserRecord.getPoint());
integralUserTotalBiz.update(integralUserTotalDto);
} else {
return ObjectRestResponse.createFailedResult(1008,"用户积分不足");
return ObjectRestResponse.createFailedResult(1008, "用户积分不足");
}
}
insertSelective(integralUserRecord);
insertSelective(integralUserRecord.getIntegralUserRecord());
return ObjectRestResponse.succ();
}
/**
* 删除一个用户记录
*
* @param id
* @return
*/
public ObjectRestResponse deleteOne(Integer id) {
if(id == null || id <=0 ) {
log.info("删除用户积分记录的参数:id = {}", id);
if (id == null || id <= 0) {
return ObjectRestResponse.paramIsEmpty();
}
IntegralUserRecord integralUserRecord = mapper.selectByPrimaryKey(id);
if(integralUserRecord == null) {
if (integralUserRecord == null) {
log.info("删除的用户记录不存在,要删除的id ={}", id);
return ObjectRestResponse.createDefaultFail();
}
......@@ -93,20 +124,24 @@ public class IntegralUserRecordBiz extends BaseBiz<IntegralUserRecordMapper, Int
/**
* 根据获取某个用户的列表
*
* @return
*/
public ObjectRestResponse<PageDataVO> getUserList(IntegralUserRecordDto integralUserRecordDto) {
log.info("获取用户积分记录的参数:integralUserRecordDto = {}", integralUserRecordDto.toString());
AppUserDTO appUserDTO = userInfoBiz.getUserInfo();
if (appUserDTO == null) {
return ObjectRestResponse.createFailedResult(508, "token is null or invalid");
}
integralUserRecordDto.setUserId(appUserDTO.getUserid());
Query query = new Query(integralUserRecordDto);
PageDataVO pageDataVO = PageDataVO.pageInfo(query, () -> mapper.selectByUserId(appUserDTO.getUserid()));
return ObjectRestResponse.succ(pageDataVO);
}
public ObjectRestResponse<List<IntegralUserRecord>> getByUserAndTime(IntegralUserRecordDto integralUserRecordDto) {
if(integralUserRecordDto == null) {
log.info("获取用户积分记录的参数:integralUserRecordDto = {}", integralUserRecordDto.toString());
if (integralUserRecordDto == null) {
return ObjectRestResponse.paramIsEmpty();
}
List<IntegralUserRecord> integralUserRecordList = mapper.selectByUserAndTime(integralUserRecordDto);
......
......@@ -55,6 +55,34 @@ public class IntegralUserTotalBiz extends BaseBiz<IntegralUserTotalMapper, Integ
return ObjectRestResponse.succ();
}
public ObjectRestResponse update(IntegralUserTotalDto integralUserTotalDto) {
if(integralUserTotalDto == null || integralUserTotalDto.getUserId() == null) {
return ObjectRestResponse.paramIsEmpty();
}
List<IntegralUserTotal> integralUserTotalList = mapper.selectAllByParam(integralUserTotalDto);
if(integralUserTotalList != null && integralUserTotalList.size() > 0) {
if(integralUserTotalDto.getPoint() > 0) {//加
integralUserTotalList.get(0).setTotalPoint(integralUserTotalList.get(0).getTotalPoint() + integralUserTotalDto.getPoint());
integralUserTotalList.get(0).setRestPoint(integralUserTotalList.get(0).getRestPoint() + integralUserTotalDto.getPoint());
updateByIdRe( integralUserTotalList.get(0));
return ObjectRestResponse.succ();
} else { //减积分
integralUserTotalList.get(0).setRestPoint(integralUserTotalList.get(0).getTotalPoint() + integralUserTotalDto.getPoint());
updateByIdRe( integralUserTotalList.get(0));
return ObjectRestResponse.succ();
}
}
IntegralUserTotal integralUserTotal = new IntegralUserTotal();
integralUserTotal.setUserId(integralUserTotalDto.getUserId());
integralUserTotal.setTotalPoint(integralUserTotalDto.getPoint());
integralUserTotal.setRestPoint(integralUserTotalDto.getPoint());
integralUserTotal.setIsdel(false);
insertSelective(integralUserTotal);
return ObjectRestResponse.succ();
}
/**
* 删除信息
* @return
......
package com.xxfc.platform.activity.handler;
import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import com.xxfc.platform.activity.biz.IntegralUserRecordBiz;
import com.xxfc.platform.activity.vo.IntegralUserRecordDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Component
@Slf4j
public class IntegralMQHandler {
@Autowired
IntegralUserRecordBiz integralUserRecordBiz;
@RabbitListener(queues = "integral_queue")
public void integralHandler(Message message, @Headers Map<String, Object> headers, Channel channel) {
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(new Runnable() {
@Override
public void run() {
try{
String messageId = message.getMessageProperties().getMessageId();
String msg = new String(message.getBody(), "UTF-8");
log.info("接收到的消息:msg = {}, 消息ID是:messageId = {} ", msg, messageId);
if(StringUtils.isNotBlank(msg)) {
IntegralUserRecordDto integralUserRecordDto = JSONObject.parseObject(msg, IntegralUserRecordDto.class);
integralUserRecordBiz.add(integralUserRecordDto);
}
executorService.shutdown();
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
// 手动签收
channel.basicAck(deliveryTag, false);
}catch (Exception e){
log.info("接收到的消息失败");
try{
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
}catch (IOException i){
i.printStackTrace();
}
e.printStackTrace();
}
}
});
}
}
......@@ -37,8 +37,8 @@ public class IntegralRuleController {
@GetMapping(value = "/one")
@ApiOperation(value = "根据id获取制定规则")
public ObjectRestResponse<IntegralRule> getOne(IntegralRule integralRule) {
return integralRuleBiz.getOne(integralRule);
public ObjectRestResponse<IntegralRule> getOne(IntegralRuleDto integralRuleDto) {
return integralRuleBiz.getOne(integralRuleDto);
}
@GetMapping(value = "/list")
......
......@@ -17,8 +17,8 @@ public class IntegralSignRecordController {
IntegralSignRecordBiz integralSignRecordBiz;
@PostMapping(value = "/add")
public ObjectRestResponse add(Integer integralRuleId) {
return integralSignRecordBiz.add(integralRuleId);
public ObjectRestResponse add(String integralRuleCode) {
return integralSignRecordBiz.add(integralRuleCode);
}
}
......@@ -21,8 +21,8 @@ public class IntegralUserRecordController {
@PostMapping(value = "/add")
public ObjectRestResponse add(IntegralUserRecord integralUserRecord) {
return integralUserRecordBiz.add(integralUserRecord);
public ObjectRestResponse add(IntegralUserRecordDto integralUserRecordDto) {
return integralUserRecordBiz.add(integralUserRecordDto);
}
@PostMapping(value = "/delete")
......
......@@ -24,6 +24,7 @@
<result column="img" property="img" jdbcType="VARCHAR" />
<result column="order_id" property="orderId" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="code" property="code" jdbcType="VARCHAR" />
<result column="regulation" property="regulation" jdbcType="LONGVARCHAR" />
<result column="other_rule" property="otherRule" jdbcType="LONGVARCHAR" />
</resultMap>
......@@ -35,6 +36,9 @@
<if test="id != null">
and id = #{id}
</if>
<if test="code != null">
and code = #{code}
</if>
and isdel = 0 and status = 1
</where>
order by order_id DESC ,crt_time DESC
......
......@@ -9,7 +9,7 @@
<result column="user_id" property="userId" jdbcType="INTEGER" />
<result column="type" property="type" jdbcType="INTEGER" />
<result column="point" property="point" jdbcType="INTEGER" />
<result column="integral_rule_id" property="integralRuleId" jdbcType="INTEGER" />
<result column="integral_rule_code" property="integralRuleCode" jdbcType="INTEGER" />
<result column="crt_time" property="crtTime" jdbcType="BIGINT" />
<result column="is_valid" property="isValid" jdbcType="BIT" />
<result column="isdel" property="isdel" jdbcType="BIT" />
......@@ -27,6 +27,6 @@
</select>
<select id="selectByUserAndTime" resultType="com.xxfc.platform.activity.entity.IntegralUserRecord" parameterType="com.xxfc.platform.activity.vo.IntegralUserRecordDto">
select * from integral_user_record
where user_id = #{userId} and crt_time between #{startTime} and #{endTime} and integral_rule_id = #{integralRuleId}
where user_id = #{userId} and crt_time between #{startTime} and #{endTime} and integral_rule_code = #{integralRuleCode}
</select>
</mapper>
\ No newline at end of file
......@@ -100,4 +100,9 @@ public class Banner {
@Column(name = "type")
@ApiModelProperty(value = "banner类型")
private Integer type;
/**
* 位置 banner位置0 所有 1:推荐 2:拍拍 3:短视频 4:问答
*/
private Integer location;
}
......@@ -32,9 +32,9 @@ public class BannerBiz extends BaseBiz<BannerMapper,Banner> {
this.deleteById(id);
}*/
public List<BannerVo> findBannerList(Integer type) {
public List<BannerVo> findBannerList(Integer type,Integer location) {
List<BannerVo> bannerVos = new ArrayList<>();
List<Banner> banners = mapper.findBannerListByType(type);
List<Banner> banners = mapper.findBannerListByType(type,location);
banners.forEach(banner -> {
BannerVo bannerVo = new BannerVo();
bannerVo.setCover(banner.getCover());
......
package com.xxfc.platform.app.mapper;
import com.xxfc.platform.app.entity.Banner;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
......@@ -22,6 +23,6 @@ public interface BannerMapper extends Mapper<Banner> {
List<Banner> findBannerListByisDelOrderByRank(Banner banner);
@Select("select * from `banner` where `is_del`=0 and `type`=#{type} order by rank asc ")
List<Banner> findBannerListByType(Integer type);
List<Banner> findBannerListByType(@Param("type") Integer type,@Param("location") Integer location);
}
......@@ -29,11 +29,11 @@ public class BannerController {
* @return
*/
@GetMapping("/app/unauth/findBannerlist")
public ObjectRestResponse findBannerlist(@RequestParam("type") Integer type){
public ObjectRestResponse findBannerlist(@RequestParam("type") Integer type,@RequestParam(required = false,value = "location") Integer location){
if (type==null) {
return ObjectRestResponse.createDefaultFail();
}
List<BannerVo> bannerList = bannerBiz.findBannerList(type);
List<BannerVo> bannerList = bannerBiz.findBannerList(type,location);
return ObjectRestResponse.succ(bannerList);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.tour.mapper.TourBannerMapper">
<mapper namespace="com.xxfc.platform.app.mapper.BannerMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.app.entity.Banner" id="bannerMap">
......@@ -14,6 +14,14 @@
<result property="updTime" column="upd_time"/>
<result property="url" column="url"/>
<result property="isDel" column="is_del"/>
<result property="location" column="location"/>
</resultMap>
<select id="findBannerListByType">
select * from `banner` where `is_del`=0 and `type`=#{type}
<if test="location != null">
and `location`=#{location}
</if>
order by rank asc
</select>
</mapper>
\ No newline at end of file
......@@ -92,6 +92,9 @@ public class CampsiteShopPageDTO implements Serializable {
@ApiModelProperty(value = "创建时间", hidden = true)
private Long crtTime;
@ApiModelProperty(value = "電話")
private String phone;
@Override
public boolean equals(Object o) {
if (this == o) {
......
......@@ -98,4 +98,6 @@ public class CampsiteShopPageVo implements Serializable {
@ApiModelProperty(value = "创建时间", hidden = true)
private Long crtTime;
@ApiModelProperty(value = "電話")
private String phone;
}
......@@ -12,6 +12,7 @@ import com.xxfc.platform.campsite.mapper.CampsiteShopTagMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.List;
......@@ -76,4 +77,12 @@ public class CampsiteShopTagBiz extends BaseBiz<CampsiteShopTagMapper,CampsiteSh
}
return effectRows;
}
public boolean checkTagHashBindByTagId(Integer tagId){
Example example = new Example(CampsiteShopTag.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("",tagId);
List<CampsiteShopTag> shopTags = mapper.selectByExample(example);
return shopTags==null?false:shopTags.size()>0?true:false;
}
}
\ No newline at end of file
......@@ -2,12 +2,13 @@ package com.xxfc.platform.campsite.biz;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.sun.org.apache.regexp.internal.RE;
import com.xxfc.platform.campsite.dto.CampsiteTagListDTO;
import com.xxfc.platform.campsite.vo.CampsiteTagListVo;
import com.xxfc.platform.campsite.vo.CampsiteTagVo;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xxfc.platform.campsite.entity.CampsiteTag;
......@@ -27,6 +28,9 @@ import java.util.List;
@Service
public class CampsiteTagBiz extends BaseBiz<CampsiteTagMapper,CampsiteTag> {
@Autowired
private CampsiteShopTagBiz campsiteShopTagBiz;
/**
* 查询营地列表
* @return
......@@ -46,6 +50,10 @@ public class CampsiteTagBiz extends BaseBiz<CampsiteTagMapper,CampsiteTag> {
* @return
*/
public int updateCampsiteTagStatus(Integer tagId) {
boolean isBinding = campsiteShopTagBiz.checkTagHashBindByTagId(tagId);
if (isBinding){
throw new BaseException("该类型标签已经被占用",400);
}
return mapper.updateCampsiteTagStatusById(tagId,1);
}
......@@ -74,6 +82,7 @@ public class CampsiteTagBiz extends BaseBiz<CampsiteTagMapper,CampsiteTag> {
* @return
*/
public int updateCampsiteTagIsSearchStatus(Integer id, Integer status) {
return mapper.updateCampsiteTagIsearchStatusById(id,status);
}
......
......@@ -17,6 +17,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @author libin
......@@ -32,7 +33,6 @@ public class CampsiteShopController extends BaseController<CampsiteShopBiz, Camp
@ApiOperation("分页查询营地列表")
@GetMapping("/app/unauth/shops")
@IgnoreClientToken
public ObjectRestResponse<PageDataVO<CampsiteShopVo>> findCampsiteShopPageByType(@RequestParam(value = "type", required = false) Integer type,
@RequestParam(value = "pageNo", required = false, defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", required = false, defaultValue = "6") Integer pageSize) {
......@@ -48,7 +48,6 @@ public class CampsiteShopController extends BaseController<CampsiteShopBiz, Camp
*/
@ApiOperation("查询营地详情")
@GetMapping("/app/unauth/shop")
@IgnoreClientToken
public ObjectRestResponse<CampsiteShopDetailVo> findCampsiteShopDetailById(@RequestParam("id") Integer id, @RequestParam("longitude") Double longitude, @RequestParam("latitude") Double latitude) {
CampsiteShopDetailVo campsiteShopDetailVo = getBaseBiz().findCampsiteShopDetailById(id, longitude, latitude);
return ObjectRestResponse.succ(campsiteShopDetailVo);
......@@ -61,4 +60,5 @@ public class CampsiteShopController extends BaseController<CampsiteShopBiz, Camp
return getBaseBiz().getAllByHome(page,limit);
}
}
\ No newline at end of file
......@@ -36,7 +36,7 @@
<!--根据类型查询全部-->
<select id="findAllCampsiteShopsByType" resultType="com.xxfc.platform.campsite.dto.CampsiteShopPageDTO">
select cs.id as `id`,cs.name as `name`,cs.logo as `logo`,cs.url as `url`,cs.province_name as `provinceName`,cs.city_name as `cityName`,
select cs.id as `id`,cs.name as `name`,cs.logo as `logo`,cs.url as `url`,cs.province_name as `provinceName`,cs.city_name as `cityName`,cs.service_phone as `phone`,
cs.longitude as `longitude`,cs.latitude as `latitude`,cs.hot as `hot`,cs.crt_time as `crtTime`,ct.id as `storeId`,ct.name as `storeTypeName`
FROM `campsite_shop_tag` cst
left JOIN `campsite_shop` cs on cst.shop_id=cs.id
......
package com.xxfc.platform.common.annotaion;
import java.lang.annotation.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/8 15:26
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface LoginUser {
}
package com.xxfc.platform.common.annotaion;
import com.xxfc.platform.common.util.RedisLock;
import java.lang.annotation.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/8 15:26
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface NoRepeatSubmit {
long timeout() default 10;
String pre() default "";
RedisLock.ExpireTimeUnitEnum exptunit() default RedisLock.ExpireTimeUnitEnum.EXPIRETIME;
}
package com.xxfc.platform.common.annotaion;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface RateLimit {
}
package com.xxfc.platform.common.aop;
import com.xxfc.platform.common.annotaion.NoRepeatSubmit;
import com.xxfc.platform.common.msg.ApiResult;
import com.xxfc.platform.common.msg.PageApiResult;
import com.xxfc.platform.common.util.RedisLock;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/8 21:04
*/
@Aspect
@Component
@Slf4j
public class NoRepeatSubmitAop {
@Value("${auth.user.token-header:Authorization}")
private String tokenHeader;
private static final String NO_REPEAT_SUBMIT_PREKEY = "no:submit";
@Autowired
private RedisLock redisLock;
@Pointcut("@annotation(noRepeatSubmit)")
public void noRepeateSubmitExpress(NoRepeatSubmit noRepeatSubmit) {}
@Around("noRepeateSubmitExpress(noRepeatSubmit)")
public Object noRepeateSubmitAround(ProceedingJoinPoint proceedingJoinPoint, NoRepeatSubmit noRepeatSubmit) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
String uri = request.getRequestURI();
String token = request.getHeader(tokenHeader);
String lockKey = String.format("%s%s:%s:%s", StringUtils.isEmpty(noRepeatSubmit.pre()) ? "" : noRepeatSubmit.pre() + ":", NO_REPEAT_SUBMIT_PREKEY, token, uri);
boolean tryLock = redisLock.tryLock(lockKey, uri, noRepeatSubmit.exptunit(), noRepeatSubmit.timeout());
Object result = null;
if (tryLock) {
log.info("tryLock success, key=【{}】,接口地址:uri=【{}】", lockKey, uri);
try {
result = proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
} finally {
redisLock.releaseLock(lockKey, uri);
log.info("releassLock success,key=【{}】,接口地址:uri=【{}】", lockKey, uri);
}
return result;
} else {
log.info("tryLock fail key=【{}】", lockKey);
return ApiResult.fail(100001, "获取锁失败");
}
}
}
package com.xxfc.platform.common.aop;
import cn.hutool.core.util.ArrayUtil;
import com.github.wxiaoqi.security.common.annotation.BeanValid;
import com.github.wxiaoqi.security.common.annotation.SimpleValid;
import com.xxfc.platform.common.msg.ApiResult;
import lombok.Data;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import javax.validation.executable.ExecutableValidator;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Objects;
import java.util.Set;
/**
* @author libin
* @version 1.0
* @description 切面验证
* @data 2019/6/13 13:46
*/
@Aspect
@Data
public class ValidParamAop {
/**
* 复合类型验证器
*/
private Validator validator;
/**
* 简单类型验证器
*/
private ExecutableValidator executableValidator;
@Pointcut("execution(* com.xxfc.platform..rest..*(..))")
public void validatorExpress(){}
@Around("validatorExpress()")
public Object validatorAround(ProceedingJoinPoint proceedingJoinPoint)throws Throwable{
//获取方法的所有参数
Object[] args = proceedingJoinPoint.getArgs();
if (ArrayUtil.isEmpty(args)){
//没有参数,不用验证
return proceedingJoinPoint.proceed();
}
MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
Method currentMethod = methodSignature.getMethod();
Parameter[] parameters = currentMethod.getParameters();
boolean hashSimpleValid = false;
int argLength = args.length;
for (int i =0;i<argLength;i++){
BeanValid beanValidAnnotation = parameters[i].getDeclaredAnnotation(BeanValid.class);
if (Objects.nonNull(beanValidAnnotation)){
if (args[i].getClass().isArray()){
Object[] arrayArg =(Object[])args[i];
for (Object item:arrayArg){
Set<ConstraintViolation<Object>> validateResult = this.validator.validate(item, beanValidAnnotation.value());
if (!validateResult.isEmpty()){
String message = validateResult.iterator().next().getMessage();
return ApiResult.fail(400,message);
}
}
}else {
Set<ConstraintViolation<Object>> validateResult = this.validator.validate(args[i], beanValidAnnotation.value());
if (!validateResult.isEmpty()){
String message = validateResult.iterator().next().getMessage();
return ApiResult.fail(400,message);
}
}
continue;
}
if (!hashSimpleValid){
SimpleValid simpleValidAnnotation = parameters[i].getDeclaredAnnotation(SimpleValid.class);
if (Objects.nonNull(simpleValidAnnotation)){
hashSimpleValid = true;
}
}
}
if (hashSimpleValid){
Object target = proceedingJoinPoint.getTarget();
Set<ConstraintViolation<Object>> validResult = this.executableValidator.validateParameters(target, currentMethod, args);
if(!validResult.isEmpty()){
String message = validResult.iterator().next().getMessage();
return ApiResult.fail(400,message);
}
}
return proceedingJoinPoint.proceed();
}
}
package com.xxfc.platform.common.config;
import com.github.wxiaoqi.security.common.support.aop.ValidParamAop;
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.executable.ExecutableValidator;
/**
* @author libin
* @version 1.0
* @description 验证器validator
* @data 2019/6/13 13:48
*/
@Configuration
public class ValidatorConfig {
/**
* 复合类型所用的验证器
* @return Validator
*/
@Bean
public Validator validator(){
// .failFast( true ) 为设置快速错误模式,默认为false
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.failFast( true )
.buildValidatorFactory();
return validatorFactory.getValidator();
}
/**
* 简单类型所用的验证器
* @return ExecutableValidator
*/
@Bean
public ExecutableValidator executableValidator() {
return validator().forExecutables();
}
/**
* 装配验证器切面
* @param validator Bean验证器
* @param executableValidator 简单类型验证器
* @return ValidParamAop
*/
@Bean
public ValidParamAop validAop(Validator validator, ExecutableValidator executableValidator) {
ValidParamAop validParamAop = new ValidParamAop();
validParamAop.setValidator(validator);
validParamAop.setExecutableValidator(executableValidator);
return validParamAop;
}
}
package com.xxfc.platform.common.config;
import com.xxfc.platform.common.resover.LoginUserParamResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/9 17:29
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginUserParamResolver loginUserParamResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(loginUserParamResolver);
}
}
package com.xxfc.platform.common.msg;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/9 16:55
*/
@Data
public class ApiResult<T> extends BaseApiResult<T> {
private ApiResult(long code, String msg, T data, boolean successResponse, String requestId) {
super(code,msg,data,successResponse,requestId);
}
public static <T> ApiResult<T> ok() {
return new ApiResult(200, "ok", "ok", true, "0");
}
public static <T> ApiResult<T> ok(T data) {
return new ApiResult(200, "ok", data, true, "0");
}
public static <T> ApiResult<T> ok(T data, String requestId) {
return new ApiResult(200, "ok", data, true, requestId);
}
}
package com.xxfc.platform.common.msg;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/9 17:55
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseApiResult<T> implements Serializable {
private static final long serialVersionUID = 1L;
protected long code;
protected String msg;
protected T data;
protected boolean successResponse;
protected String requestId;
public static <T> BaseApiResult<T> fail() {
return new BaseApiResult(400, "fail", "fail", false, "0");
}
public static <T> BaseApiResult<T> fail(String msg) {
return new BaseApiResult(400, msg, "fail", false, "0");
}
public static <T> BaseApiResult<T> fail(long code, String msg) {
return new BaseApiResult(code, msg, "fail", false, "0");
}
}
package com.xxfc.platform.common.msg;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/9 17:45
*/
@Data
public class PageApiResult<T> extends BaseApiResult<T> {
private PageInfo pageInfo;
private PageApiResult(long code, String msg, T data, boolean successResponse, String requestId, PageInfo pageInfo) {
super(code, msg, data, successResponse, requestId);
this.pageInfo = pageInfo;
}
public static <T> PageApiResult<T> ok() {
return new PageApiResult(200, "ok", "ok", true, "0", PageInfo.createEmptyPageInfo());
}
public static <T> PageApiResult<T> ok(T data, PageInfo pageInfo) {
return new PageApiResult(200, "ok", data, true, "0", pageInfo);
}
public static <T> PageApiResult<T> ok(T data, PageInfo pageInfo, String requestId) {
return new PageApiResult(200, "ok", data, true, requestId, pageInfo);
}
@Data
static class PageInfo {
private Integer page;
private Integer pageSize;
private Integer total;
private PageInfo(){}
private PageInfo(Integer page, Integer pageSize, Integer total) {
this.page = page;
this.pageSize = pageSize;
this.total = total;
}
public static PageInfo createEmptyPageInfo() {
return new PageInfo();
}
public static PageInfo createPageInfo(Integer page, Integer pageSize, Integer total) {
return new PageInfo(page,pageSize,total);
}
}
}
package com.xxfc.platform.common.resover;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.xxfc.platform.common.annotaion.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.HttpServletRequest;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/8 20:17
*/
@ConditionalOnBean(value = UserFeign.class)
@Component
public class LoginUserParamResolver implements HandlerMethodArgumentResolver {
@Value("${auth.user.token-header:Authorization}")
private String tokenHeader;
@Autowired
private UserFeign userFeign;
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(LoginUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
String token = request.getHeader(tokenHeader);
Class<?> parameterType = parameter.getParameterType();
if (AppUserDTO.class.equals(parameterType)){
return userFeign.userDetailByToken(token).getData();
}
if (UserDTO.class.equals(parameterType)){
return userFeign.userinfoByToken(token).getData();
}
return null;
}
}
package com.xxfc.platform.common.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import java.util.Collections;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/8 21:02
*/
@Component
public class RedisLock {
private static final Long RELEASE_SUCCESS = 1L;
private static final String LOCK_SUCCESS = "OK";
private static final String SET_IF_NOT_EXIST = "NX";
/**
* if get(key) == value return del(key)
*/
private static final String RELEASE_LOCK_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 该加锁方法仅针对单实例 Redis 可实现分布式加锁
* 对于 Redis 集群则无法使用
* <p>
* 支持重复,线程安全
*
* @param lockKey 加锁键
* @param clientId 加锁客户端唯一标识(采用UUID)
* @param seconds 锁过期时间
* @return
*/
public boolean tryLock(String lockKey, String clientId, ExpireTimeUnitEnum expireTimeEnum,long seconds) {
return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> {
Jedis jedis = (Jedis) redisConnection.getNativeConnection();
String result = jedis.set(lockKey, clientId, SET_IF_NOT_EXIST, expireTimeEnum.getUnit(), seconds);
if (LOCK_SUCCESS.equals(result)) {
return true;
}
return false;
});
}
/**
* 与 tryLock 相对应,用作释放锁
*
* @param lockKey
* @param clientId
* @return
*/
public boolean releaseLock(String lockKey, String clientId) {
return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> {
Jedis jedis = (Jedis) redisConnection.getNativeConnection();
Object result = jedis.eval(RELEASE_LOCK_SCRIPT, Collections.singletonList(lockKey),
Collections.singletonList(clientId));
if (RELEASE_SUCCESS.equals(result)) {
return true;
}
return false;
});
}
public enum ExpireTimeUnitEnum {
/**
* 当前设置 过期时间单位, EX = seconds; PX = milliseconds
*/
EXPIRETIME("EX"),
PXPIRETIME("PX");
ExpireTimeUnitEnum(String unit) {
this.unit = unit;
}
String unit;
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
}
}
......@@ -30,11 +30,20 @@
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
......
......@@ -3,11 +3,12 @@ package com.xxfc.platform.universal.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;
@Data
@Table(name = "data_dictionary")
public class Dictionary {
public class Dictionary implements Serializable {
@Id
private Integer id;
......
package com.xxfc.platform.universal.feign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(value = "xx-universal", contextId = "sendMessage")
public interface MQSerderFeign {
@GetMapping(value = "/message/sendMessage")
public ObjectRestResponse sendMessage(@RequestParam(value = "exchange") String exchange, @RequestParam(value = "routingKey")String routKey, @RequestParam(value = "jsonParam") String jsonParam);
}
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