Commit dbda8291 authored by jiaorz's avatar jiaorz

Merge branch 'base-modify' of http://113.105.137.151:22280/youjj/cloud-platform into base-modify

parents 2b185c8d d518c25f
......@@ -24,6 +24,10 @@ public class CommonBaseController {
@Autowired
public HttpServletRequest request;
public HttpServletRequest getRequest() {
return request;
}
public String getCurrentUserName(){
return BaseContextHandler.getUsername();
}
......
......@@ -36,7 +36,7 @@ public class Query extends LinkedHashMap<String, Object> {
*/
public Query(PageParam pageParam){
this.putAll(BeanUtil.beanToMap(pageParam));
//分页参数
//分页参数
if(pageParam.getPage() != null) {
this.page = pageParam.getPage();
}
......
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;
}
......@@ -19,7 +19,6 @@ import java.io.Serializable;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "base_user_member_export")
public class BaseUserMemberExportDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
......
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
......@@ -15,7 +15,7 @@ import lombok.Data;
public class UserMemberDTO {
public static final int ISBIND_BIND = 1;
/**
* 用户id
*/
......
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 10:39
*/
@Data
public class UserMemberSaveDTO {
@ApiModelProperty(value = "手机号")
private String phone;
@ApiModelProperty(value = "会员名")
private String username;
/**
* 会员等级
*/
@ApiModelProperty(value = "会员等级")
private Integer memberLevel;
/**
* 赠送总天数
*/
@ApiModelProperty(value = "赠送总天数")
private Integer totalNumber;
/**
* 剩余天数
*/
@ApiModelProperty(value = "剩余天数")
private Integer rentFreeDays;
}
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 Integer crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Integer 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;
}
......@@ -135,6 +135,5 @@ public class BaseUserMember implements Serializable {
@Column(name = "recent_recharge")
private Long recentRecharge;
}
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 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 pageNo;
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 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){
entity.setUpdHost(AppPermissionService.getIp());
entity.setUpdatetime(Instant.now().toEpochMilli()/1000L);
BeanUtils.copyProperties(entity, userVo);
if (entity != null) {
entity.setUpdHost(AppPermissionService.getIp());
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 getExtract(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 com.github.wxiaoqi.security.admin.bo.UserIncomeBo;
import com.github.wxiaoqi.security.admin.dto.OrderGoodsDTO;
import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import com.github.wxiaoqi.security.admin.entity.MyWalletDetail;
import com.github.wxiaoqi.security.admin.mapper.MyWalletDetailMapper;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.AppUserSellingWater;
import com.github.wxiaoqi.security.admin.mapper.AppUserSellingWaterMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 拥金明细表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Service
@Slf4j
public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper,AppUserSellingWater> {
@Autowired
AppUserRelationBiz relationBiz;
@Autowired
BaseGoodCommissionBiz commissionBiz;
@Autowired
AppUserPositionBiz positionBiz;
@Autowired
AppUserDetailBiz detailBiz;
@Autowired
MyWaterBiz myWaterBiz;
//购买计算用户拥金
public void payOrderWater(OrderWaterDTO orderWaterDTO){
if(orderWaterDTO==null){
log.info("购买计算用户拥金----payOrderWater----次数不能为空----");
return;
}
//订单id
Integer orderId=orderWaterDTO.getOrderId();
//订单号
String orderNo=orderWaterDTO.getOrderNo();
//用户id
Integer userId=orderWaterDTO.getUserId();
//订单状态
Integer status=orderWaterDTO.getStatus();
List<OrderGoodsDTO> goodsDTOList=orderWaterDTO.getGoodsDTOList();
log.info("购买计算用户拥金----payOrderWater----userId===="+userId+"---orderId==="+orderId+"---orderNo==="+orderNo+"--status=="+status);
if(orderId==null||orderId==0||userId==null||userId==0||status==null||status==0||CollectionUtils.isEmpty(goodsDTOList)){
log.info("购买计算用户拥金----payOrderWater----次数不能为空----orderId==="+orderId);
return;
}
AppUserRelation relation=relationBiz.getRelationByUserId(userId);
if(relation==null||relation.getParentId()==null||relation.getParentId()==0){
log.info("购买计算用户拥金----payOrderWater--------userId==="+userId+"---无上线");
return;
}
Integer parentId=relation.getParentId();
log.info("购买计算用户拥金----payOrderWater--------userId==="+userId+"---parentId==="+parentId);
for(OrderGoodsDTO goodsDto:goodsDTOList){
//商品id
Integer goodId=goodsDto.getGoodId();
//商品价格
BigDecimal price=goodsDto.getPrice();
//商品类型
Integer type=goodsDto.getType();
//商品比例
Integer extract=commissionBiz.getExtract(type,goodId);
AppUserVo userVo=detailBiz.getUserInfoById(parentId);
Integer positionId=6;
if (userVo!=null){
positionId= userVo.getPositionId();
}
if(extract==null||extract==0){
extract=positionBiz.getExtract(parentId);
}
log.info("购买计算用户拥金----payOrderWater--------userId==="+userId+"---extract==="+extract);
if(extract!=null&&extract>0){
AppUserSellingWater sellingWater=new AppUserSellingWater();
sellingWater.setOrderId(orderId);
sellingWater.setGoodId(goodId);
sellingWater=selectOne(sellingWater);
if(sellingWater!=null){
continue;
}
BigDecimal commission=price.multiply(new BigDecimal(extract+"")).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP);
log.info("购买计算用户拥金----payOrderWater--------userId==="+userId+"---commission==="+commission);
sellingWater=new AppUserSellingWater();
sellingWater.setUserId(parentId);
sellingWater.setSourceId(userId);
sellingWater.setPositionId(positionId);
sellingWater.setOrderId(orderId);
sellingWater.setOrderNo(orderNo);
sellingWater.setGoodId(goodId);
sellingWater.setTitle(goodsDto.getTitle());
sellingWater.setImg(goodsDto.getImg());
sellingWater.setPrice(price);
sellingWater.setExtract(extract);
sellingWater.setCommission(commission);
insertSelective(sellingWater);
log.info("购买计算用户拥成功----payOrderWater--------userId==="+userId);
}
}
}
//订单完成计算用户拥金
public void finishOrderWater(OrderWaterDTO orderWaterDTO){
//订单id
Integer orderId=orderWaterDTO.getOrderId();
log.info("订单完成计算用户拥金----finishOrderWater----orderId===="+orderId);
if(orderId==null||orderId==0){
return;
}
List<AppUserSellingWater> list=getWaterList(orderId);
BigDecimal amount=new BigDecimal("0.00");
Integer userId=0;
if (list.size()>0){
for (AppUserSellingWater sellingWater:list){
Integer id=sellingWater.getId();
userId=sellingWater.getUserId();
sellingWater.setWaiting(1);
updateById(sellingWater);
BigDecimal commission=sellingWater.getCommission();
log.info("订单完成计算用户拥金----finishOrderWater----id===="+id+"---commission=="+commission);
amount.add(commission);
}
}
log.info("订单完成计算用户拥金----finishOrderWater----orderId===="+orderId+"---amount=="+amount);
int r=amount.compareTo(BigDecimal.ZERO);
//更新钱包
if(r==1&&userId>0){
myWaterBiz.updMyWater(userId,orderId,amount);
}
}
//订单退款计算用户拥金
public void refundOrderWater(OrderWaterDTO orderWaterDTO){
//订单id
Integer orderId=orderWaterDTO.getOrderId();
log.info("订单完成计算用户拥金----refundOrderWater----orderId===="+orderId);
if(orderId==null||orderId==0){
return;
}
List<AppUserSellingWater> list=getWaterList(orderId);
BigDecimal amount=new BigDecimal("0.00");
Integer userId=0;
if (list.size()>0){
for (AppUserSellingWater sellingWater:list){
Integer id=sellingWater.getId();
userId=sellingWater.getUserId();
sellingWater.setWaiting(1);
updateById(sellingWater);
sellingWater.setId(null);
sellingWater.setStatus(1);
insertSelective(sellingWater);
BigDecimal commission=sellingWater.getCommission();
log.info("订单完成计算用户拥金----refundOrderWater----id===="+id+"---commission=="+commission);
}
}
log.info("订单完成计算用户拥金----refundOrderWater----orderId===="+orderId+"---amount=="+amount);
int r=amount.compareTo(BigDecimal.ZERO);
//更新钱包
if(r==1&&userId>0){
myWaterBiz.updMyWater(userId,orderId,amount);
}
}
//获取拥金列表
public List<AppUserSellingWater> getWaterList(Integer orderId){
Example example=new Example(AppUserSellingWater.class);
example.createCriteria().andEqualTo("orderId",orderId).andEqualTo("waiting",0).andEqualTo("status",0);
return mapper.selectByExample(example);
}
public Map<Integer, BigDecimal> findMemberIdAndIncomeMapByMemberIds(List<Integer> memberIds) {
Map<Integer,BigDecimal> memberIdAndIncomeMap = new HashMap<>();
List<UserIncomeBo> userIncomeBos = mapper.accquireIncomeByMemberIds(memberIds);
if (CollectionUtils.isNotEmpty(userIncomeBos)){
memberIdAndIncomeMap = userIncomeBos.stream().collect(Collectors.toMap(UserIncomeBo::getUserId,UserIncomeBo::getIncome));
}
return memberIdAndIncomeMap;
}
}
\ 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
......@@ -4,8 +4,6 @@ import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberVO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.entity.UserMemberLevel;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.UserMemberVo;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -15,7 +13,6 @@ import org.apache.commons.beanutils.BeanUtilsBean;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
import org.springframework.integration.amqp.dsl.Amqp;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.BaseUserMember;
import com.github.wxiaoqi.security.admin.mapper.BaseUserMemberMapper;
......@@ -26,6 +23,7 @@ import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
/**
......@@ -49,6 +47,9 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
@Autowired
private UserMemberLevelBiz userMemberLevelBiz;
@Autowired
private AppUserLoginBiz appUserLoginBiz;
//获取用户会员信息
@Cache(key = "user:member{1}")
public UserMemberVo getMemberInfoByUserId(Integer userId){
......@@ -233,6 +234,4 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
}
}
}
\ No newline at end of file
......@@ -2,7 +2,9 @@ package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDTO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.dto.UserMemberSaveDTO;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberExport;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.mapper.BaseUserMemberExportMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -16,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
......@@ -41,13 +44,50 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
private AppUserLoginBiz appUserLoginBiz;
public void saveUserMember(UserMemberSaveDTO userMemberSaveDTO){
if (userMemberSaveDTO!=null){
UserMemberDTO userMemberDTO = new UserMemberDTO();
BaseUserMemberLevel level = userMemberLevelBiz.getLevel(userMemberSaveDTO.getMemberLevel());
Map<String, Integer> phoneAndUserIdMap = appUserLoginBiz.findPhoneAndUserIdMapByPhones(Arrays.asList(userMemberSaveDTO.getPhone()));
if (phoneAndUserIdMap!=null){
userMemberDTO.setUserId(phoneAndUserIdMap.get(userMemberSaveDTO.getPhone()));
userMemberDTO.setMemberLevel(userMemberSaveDTO.getMemberLevel());
userMemberDTO.setDiscount(level==null?0:(level.getDiscount()==null?0:level.getDiscount()));
userMemberDTO.setTotalNumber(userMemberSaveDTO.getTotalNumber());
userMemberDTO.setRentFreeDays(userMemberSaveDTO.getRentFreeDays());
userMemberDTO.setIsBind(1);
try {
baseUserMemberBiz.updUserMemberByUserId(userMemberDTO);
} catch (Exception e) {
log.error("会员更新或新增错误:【{}】",e.getMessage());
throw new BaseException(e);
}
}
BaseUserMemberExport memberExport = BaseUserMemberExport
.builder()
.username(userMemberSaveDTO.getPhone())
.memberLevel(userMemberSaveDTO.getMemberLevel())
.totalNumber(userMemberSaveDTO.getTotalNumber())
.rentFreeDays(userMemberSaveDTO.getRentFreeDays())
.discount(level==null?0:level.getDiscount()==null?0:level.getDiscount())
.status(phoneAndUserIdMap == null ? 0 : (phoneAndUserIdMap.get(userMemberSaveDTO.getPhone()) == null ? 0 : 1))
.isDel(0)
.build();
if (log.isDebugEnabled()){
log.debug("当前组装的数据:【{}】",memberExport);
}
mapper.insertSelective(memberExport);
}
}
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public int importUserMember(List<String[]> userMemberData){
List<BaseUserMemberExport> baseUserMemberExports = new ArrayList<>();
List<Integer> levels = userMemberData.stream().map(x -> x[1]).map(Integer::valueOf).collect(Collectors.toList());
List<Integer> levels = userMemberData.stream().map(x -> x[1]).map(Integer::valueOf).distinct().collect(Collectors.toList());
Map<Integer, Integer> levelAndDisCountMap= userMemberLevelBiz.getUserMemberLevelAndDisCountMapByLevels(levels);
List<String> phones = userMemberData.stream().map(x -> x[0]).collect(Collectors.toList());
List<String> phones = userMemberData.stream().map(x -> x[0]).distinct().collect(Collectors.toList());
Map<String,Integer> phoneAndUserIdMap = appUserLoginBiz.findPhoneAndUserIdMapByPhones(phones);
for (String[] data : userMemberData) {
......
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.admin.vo.WalletVo;
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 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
MyWalletDetailMapper walletDetailMapper;
//我的钱包入账
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&&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);
walletDetailMapper.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.setPageNo(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.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;
/**
......@@ -11,5 +12,8 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-07-09 10:00:42
*/
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;
/**
* 用户关系表
*
......@@ -11,5 +13,7 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-07-03 16:36:44
*/
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.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,42 +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();
//设置http头信息的内容
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
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.admin;
import com.github.wxiaoqi.security.admin.AdminBootstrap;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberExportBiz;
import com.github.wxiaoqi.security.admin.dto.UserMemberSaveDTO;
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 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.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;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/11 9:58
*/
@RestController
@RequestMapping("/admin/member")
@Api("后台*会员管理")
public class UserMemberAdminController {
@Autowired
private BaseUserMemberExportBiz baseUserMemberExportBiz;
@ApiOperation("批量导入会员")
@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();
}
}
@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();
}
}
<?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
<?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>0">
user_id=#{userId},
</if>
<if test="balance!=null AND balance>0">
balance=#{balance},
</if>
<if test="balance!=null AND balance>0">
withdrawals=#{withdrawals},
</if>
<if test="totalAmount!=null AND totalAmount>0">
total_amount=#{totalAmount},
</if>
<if test="todayAmount!=null AND todayAmount>0">
today_amount=#{todayAmount},
</if>
<if test="unbooked!=null AND unbooked>0">
unbooked=#{unbooked},
</if>
<if test="isFrozen!=null">
is_frozen=#{isFrozen},
</if>
<if test="lastIntime!=null AND lastIntime>0">
last_intime=#{lastIntime},
</if>
<if test="crtTime!=null AND crtTime>0">
crt_time=#{crtTime},
</if>
<if test="updTime!=null AND updTime>0">
upd_time=#{updTime},
</if>
<if test="version!=null ">
version=version+1,
</if>
</set>
<where>
id=#{id} and version=#{version}
</where>
</update>
</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;
}
......@@ -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;
}
}
}
......@@ -4,7 +4,7 @@ import java.util.HashMap;
import java.util.Map;
public enum OrderTypeEnum {
RentVehicle(1, "租车订单"),
RENT_VEHICLE(1, "租车订单"),
TOUR(2, "旅游订单"),
MEMBER(3, "会员订单"),
;
......@@ -18,13 +18,6 @@ public enum OrderTypeEnum {
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
//Maps.newHashMap();
// static{
// for(VehicleBookRecordStatus constantType : VehicleBookRecordStatus.values()){
// codeAndDesc.put(constantType.getCode(),constantType.getDesc());
// }
// }
OrderTypeEnum(Integer code, String desc){
this.code=code;
......@@ -50,4 +43,13 @@ public enum OrderTypeEnum {
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
public static OrderTypeEnum get(Integer code) {
for(OrderTypeEnum enumE : OrderTypeEnum.values()) {
if (enumE.getCode().equals(code)) {
return enumE;
}
}
return null;
}
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import javax.persistence.Id;
import java.time.format.DateTimeFormatter;
@Data
public class AddMemberDTO {
public class AddMemberDTO extends AddOrderCommonDTO{
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@ApiModelProperty(value = "会员等级id")
......@@ -18,9 +18,4 @@ public class AddMemberDTO {
@ApiModelProperty(value = "会员等级")
private Integer memberLevel;
/**
* 优惠券ids
*/
@ApiModelProperty(value = "优惠券ids")
private String couponIds;
}
package com.xxfc.platform.order.pojo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class AddOrderCommonDTO {
/**
*
*/
@ApiModelProperty(value = "下单来源,1--app;2--小程序")
private Integer orderOrigin;
/**
* 优惠券ids
*/
@ApiModelProperty(value = "优惠券ids")
private String couponIds;
}
......@@ -10,7 +10,7 @@ import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
@Data
public class AddRentVehicleDTO{
public class AddRentVehicleDTO extends AddOrderCommonDTO{
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//开始时间
......@@ -94,19 +94,6 @@ public class AddRentVehicleDTO{
@ApiModelProperty(value = "是否使用出租免费天数")
private Integer rentFreeDay;
/**
*
*/
@ApiModelProperty(value = "下单来源,1--app;2--小程序")
private Integer orderOrigin;
/**
* 优惠券ids
*/
@ApiModelProperty(value = "优惠券ids")
private String couponIds;
public void setStartTime(Long startTime) {
this.startTime = startTime;
this.bookStartDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneOffset.ofHours(8)));
......
......@@ -10,7 +10,7 @@ import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
@Data
public class AddTourDTO {
public class AddTourDTO extends AddOrderCommonDTO{
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//开始时间
......
......@@ -2,7 +2,6 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -97,7 +96,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
private static Map<Integer, List<Integer>> cancelAble;
static {
cancelAble = new HashMap<Integer, List<Integer>>();
cancelAble.put(OrderTypeEnum.RentVehicle.getCode(), new LinkedList<Integer>(){{
cancelAble.put(OrderTypeEnum.RENT_VEHICLE.getCode(), new LinkedList<Integer>(){{
add(OrderStatusEnum.ORDER_UNPAY.getCode());
add(OrderStatusEnum.ORDER_TOSTART.getCode());
}});
......@@ -186,7 +185,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
//判断是否已支付
if(SYS_TRUE.equals(baseOrder.getHasPay())) {
//判断订单类型
if(OrderTypeEnum.RentVehicle.getCode().equals(baseOrder.getType())) {
if(OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId());
}});
......@@ -221,7 +220,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
}
//处理取消流程
if(OrderTypeEnum.RentVehicle.getCode().equals(baseOrder.getType())) {
if(OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId());
}});
......@@ -267,24 +266,33 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
}
/**
* 租车退款流程(含押金)
* 租车(包括旅游)退款流程(含押金)
* @param baseOrder
* @param depositAmont
* @param depositAmount
* @param timeLag 与开始时间的时间差
* @param dicParentKey
*/
private void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmont, Long timeLag, String dicParentKey) {
private void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey) {
//计算退款金额
// 1、押金 + 租金(规则扣除)
BigDecimal refundGoodsAmount = baseOrder.getGoodsAmount();
// 1、押金 + 租金(规则扣除)
//BigDecimal refundGoodsAmount = baseOrder.getGoodsAmount();
String refundDesc = "取消订单退款:";
BigDecimal refundGoodsAmont = baseOrder.getGoodsAmount();
if(null == depositAmont) {
depositAmont = BigDecimal.ZERO;
if(null == depositAmount) {
depositAmount = BigDecimal.ZERO;
}
BigDecimal refundGoodsAmount = calculateRefund(baseOrder.getGoodsAmount(), timeLag, dicParentKey, refundDesc);
//退款金额
BigDecimal refundAmount = depositAmount.add(refundGoodsAmount);
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, refundAmount, RefundTypeEnum.RentVehicle.getCode(), RefundStatusEnum.ALL.getCode());
}
public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, String refundDesc) {
BigDecimal refundGoodsAmount = goodsAmount;
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
//获取出发时间 到现在 距离时间
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
Map<String, com.xxfc.platform.universal.entity.Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
......@@ -301,40 +309,37 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
//符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmont = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
refundGoodsAmount = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount
set("ga", baseOrder.getGoodsAmount());
set("ga", goodsAmount);
}})).toString());
refundDesc = names[1]+ ","+ refundDesc;
break;
}
}
//退款金额
BigDecimal refundAmont = depositAmont.add(refundGoodsAmont);
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RentVehicle.getCode(), RefundStatusEnum.ALL.getCode());
return refundGoodsAmount;
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc
* @param refundAmont
* @param refundAmount
* @param refundType
* @param refundStatus
*/
public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal refundAmont, Integer refundType, Integer refundStatus) {
public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal refundAmount, Integer refundType, Integer refundStatus) {
OrderRefundVo orv = new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo());
}};
orv.setRefundDesc(refundDesc+ refundAmont.toString());
orv.setRefundAmount(refundAmont.multiply(new BigDecimal("100")).intValue());
orv.setRefundDesc(refundDesc+ refundAmount.toString());
orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
String refundTradeNo = thirdFeign.refund(orv).getData();
//记录订单退款记录
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, refundAmont, refundTradeNo, refundType);
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, refundAmount, refundTradeNo, refundType);
//更新订单的退款状态和退款时间
if(SYS_TRUE.equals(flag) && null != refundStatus) {
......@@ -351,10 +356,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
* 记录订单退款记录
* @param orderId
* @param refundDesc
* @param refundAmont
* @param refundAmount
* @param refundTradeNo
*/
private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal refundAmont, String refundTradeNo, Integer refundType) {
private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal refundAmount, String refundTradeNo, Integer refundType) {
//如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(refundTradeNo)) {
......@@ -368,7 +373,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
setTradeNo(refundTradeNo);
setRefundType(RefundTypeEnum.RentVehicle.getCode());
}};
orderRefund.setRefundAmount(refundAmont);
orderRefund.setRefundAmount(refundAmount);
orderRefund.setRefundDesc(refundDesc);
orderRefund.setRefundStatus(refundStatus);
orderRefund.setRefundType(refundType);
......@@ -415,7 +420,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
setTotalNumber(omd.getRentFreeNum());
}});
log.info("orr.getStatus() : " + orr.getStatus() );
}else if(OrderTypeEnum.RentVehicle.getCode().equals(baseOrder.getType())) {
}else if(OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId());
......
......@@ -56,7 +56,8 @@ public class WebConfiguration implements WebMvcConfigurer {
"/orderRentVehicle/**",
"/baseOrder/**",
"/orderTour/**",
"/orderMember/**"
"/orderMember/**",
"/orderRefund/**"
};
Collections.addAll(list, urls);
return list;
......
......@@ -61,7 +61,7 @@ public class RentDepositHandler extends IJobHandler {
if(IntervalUtil.staticIsInTheInterval(String.valueOf(i), idLastNumInterval)) {
List<BaseOrder> lists = baseOrderBiz.selectByExample(new Example.Builder(BaseOrder.class)
//订单已完成的租车订单
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RentVehicle)
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RENT_VEHICLE)
.andEqualTo(BaseOrder::getStatus, OrderStatusEnum.ORDER_FINISH)
.andLike(BaseOrder::getId, "%"+ String.valueOf(i))).build());
......@@ -89,7 +89,7 @@ public class RentDepositHandler extends IJobHandler {
}else if(RefundStatusEnum.RESIDUE_ILLEGAL.getCode().equals(baseOrder.getRefundStatus())){
//判断是否违章
//扣违章的钱
//baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RentVehicle.getCode(), RefundStatusEnum.RESIDUE_ILLEGAL.getCode());
//baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RENT_VEHICLE.getCode(), RefundStatusEnum.RESIDUE_ILLEGAL.getCode());
}
// baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont);
}
......
......@@ -25,6 +25,7 @@ import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.mqhandler.RabbitProduct;
import com.xxfc.platform.order.pojo.order.*;
import com.xxfc.platform.order.pojo.pay.OrderPayDTO;
import com.xxfc.platform.order.rest.common.CommonInterface;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
......@@ -57,7 +58,7 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@RequestMapping("baseOrder")
@Api(value = "订单", tags = {"订单"})
@Slf4j
public class BaseOrderController extends CommonBaseController {
public class BaseOrderController extends CommonBaseController implements CommonInterface {
public static final Integer STATUS_SUCCESS = 1;
@Autowired
......@@ -74,6 +75,11 @@ public class BaseOrderController extends CommonBaseController {
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Override
public UserFeign getUserFeign() {
return userFeign;
}
@Value("${gateway.insideHost}")
String insideHost;
......@@ -237,11 +243,9 @@ public class BaseOrderController extends CommonBaseController {
@ResponseBody
public ObjectRestResponse<OrderPageVO> get(@PathVariable String no) {
log.info("no:"+ no + ",时间戳:"+ System.currentTimeMillis());
//查询列表数据
if (StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
}
checkAppUser();
//查询列表数据
Query query = initQuery(no);
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
if (page.getData().isEmpty()) {
......
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageParam;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderRefund;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.rest.common.CommonInterface;
import com.xxfc.platform.universal.constant.DictionaryKey;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
@Controller
@RequestMapping("orderRefund")
public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRefund> {
public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRefund> implements CommonInterface {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
UserFeign userFeign;
@Override
public UserFeign getUserFeign() {
return userFeign;
}
@RequestMapping(value = "/price/calculate/{type}/{no}", method = RequestMethod.GET)
@ResponseBody
@IgnoreClientToken
public ObjectRestResponse getOrderParam(@PathVariable(value = "no") String type, @PathVariable(value = "no") String no) {
checkAppUser();
//根据no 查订单
OrderPageVO orderPageVO = baseOrderBiz.pageByParm(new Query(new PageParam(){{
setLimit(1);
setPage(1);
}}){{put("no", no); }}.getSuper()).get(0);
OrderRefundPriceVO orp = new OrderRefundPriceVO(){{
setRealAmount(orderPageVO.getRealAmount());
}};
OrderTypeEnum orderTypeEnum = OrderTypeEnum.get(orderPageVO.getType());
switch (orderTypeEnum) {
case RENT_VEHICLE:
// orp.setRefundGoodsAmount(baseOrderBiz.calculateRefund(orderPageVO.getGoodsAmount()
// , System.currentTimeMillis() - orderPageVO.getOrderRentVehicleDetail().getStartTime()
// , DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND
// , "取消订单退款:"));
break;
case TOUR:
String dicParentKey = DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.TOUR_REFUND;
//不是省外,
if(SYS_FALSE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
dicParentKey = DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.TOUR_IN_REFUND;
}
orp.setRefundAmount(baseOrderBiz.calculateRefund(orderPageVO.getGoodsAmount()
, System.currentTimeMillis() - orderPageVO.getOrderRentVehicleDetail().getStartTime()
, DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND
, "取消订单退款:"));
break;
default:
// orp.setRefundAmount(orderPageVO);
break;
}
return null;
}
@Data
public class OrderRefundPriceVO {
BigDecimal refundAmount;
BigDecimal realAmount;
BigDecimal cutAmount;
public void setRefundAmount(BigDecimal refundAmount) {
this.refundAmount = refundAmount;
this.cutAmount = realAmount.multiply(refundAmount);
}
}
}
\ No newline at end of file
package com.xxfc.platform.order.rest.common;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import javax.servlet.http.HttpServletRequest;
public interface CommonInterface {
public UserFeign getUserFeign();
public HttpServletRequest getRequest();
default AppUserDTO getAppUser(){
return getUserFeign().userDetailByToken(BaseContextHandler.getToken()).getData();
}
default void checkAppUser(){
if(null == getAppUser()) {
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
}
}
......@@ -26,7 +26,6 @@ import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.RentVehicleBookDTO;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -70,7 +69,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
@PostConstruct
public void init(){
this.orderTypeEnum = OrderTypeEnum.RentVehicle;
this.orderTypeEnum = OrderTypeEnum.RENT_VEHICLE;
}
......
......@@ -18,7 +18,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* 实名认证
*/
@RestController
@RequestMapping("certif")
@Slf4j
......
......@@ -18,15 +18,14 @@ import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.util.EntityUtils;
import org.apache.poi.ss.usermodel.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
@Service
......@@ -266,8 +265,8 @@ public class CertificationService {
//正面进行解析
String front = imageParse(idInformation.getFrontUrl(), frontParameter);
String back = imageParse(idInformation.getBackUrl(), backParameter);
log.info("----解析front========="+front);
log.info("----解析back========="+back);
log.info("----解析front=========" + front);
log.info("----解析back=========" + back);
if (StringUtils.isBlank(front) || StringUtils.isBlank(back)) {
return ObjectRestResponse.createDefaultFail();
}
......@@ -282,7 +281,7 @@ public class CertificationService {
|| MapUtil.isEmpty(backMap)
|| !(backMap.get(imageRet).equals(imageResultCode))
){
) {
return ObjectRestResponse.createDefaultFail();
}
......@@ -292,7 +291,7 @@ public class CertificationService {
Map backData = (Map) backMap.get(dataNam);
if (MapUtil.isEmpty(backData)||MapUtil.isEmpty(frontData)){
if (MapUtil.isEmpty(backData) || MapUtil.isEmpty(frontData)) {
return ObjectRestResponse.createDefaultFail();
}
......@@ -312,7 +311,7 @@ public class CertificationService {
ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE, "证件号不一致");
}
//map携带身份证和姓名进行认证
//map携带身份证和姓名进行认证
Map<String, String> authMap = new HashMap<>();
authMap.put(idCardName, (String) frontData.get(numberName));
......@@ -320,13 +319,13 @@ public class CertificationService {
//3.调用接口进行认证
String result = certificate(authMap);
log.info("----认证结果result========="+result);
log.info("----认证结果result=========" + result);
//认证返回的参数是否为空
if (!StringUtils.isBlank(result)) {
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(result);
log.info("----certifRet========="+certifRet);
log.info("----certifRet=========" + certifRet);
if (MapUtil.isNotEmpty(map) || certifResultCode.equals(map.get(certifRet))) {
//认证成功后存入保存到数据库
......@@ -342,27 +341,35 @@ public class CertificationService {
//获得到期时间
String endDate = (String) backData.get(expirationDateName);
log.info("----获得到期时间endDate========="+endDate);
log.info("----获得到期时间endDate=========" + endDate);
if (StringUtils.isBlank(endDate)) {
return ObjectRestResponse.succ();
}
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
formatter.setLenient(false);
Date expirationDate = null;
try {
expirationDate = formatter.parse(endDate);
} catch (ParseException e) {
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
Date expirationDate = new Date();
if (!Validation.isDate(endDate)) {
Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.YEAR, 100);
expirationDate = c.getTime();
} else {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
formatter.setLenient(false);
try {
expirationDate = formatter.parse(endDate);
} catch (ParseException e) {
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
idInformation.setExpirationDate(expirationDate);
Boolean aBoolean = addIdInformation(idInformation);
log.info("----请求admin========="+aBoolean);
log.info("----请求admin=========" + aBoolean);
if (aBoolean) {
return ObjectRestResponse.succ();
}
......@@ -389,7 +396,7 @@ public class CertificationService {
//
try {
log.info("----querys========="+querys);
log.info("----querys=========" + querys);
HttpResponse response = CertifHttpUtils.doGet(cHost, cPath, cMethod, headers, querys);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
......@@ -439,7 +446,7 @@ public class CertificationService {
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
log.info("----statusCode========="+querys);
log.info("----statusCode=========" + querys);
/**
* 状态码: 200 正常;400 URL无效;401 appCode错误; 403 次数用完; 500 API网管错误
*/
......@@ -462,7 +469,7 @@ public class CertificationService {
//认证通过保存到数据库当中
public Boolean addIdInformation(IdInformation idInformation) {
log.info("----idInformation========="+idInformation);
log.info("----idInformation=========" + idInformation);
//保存认证信息
try {
......@@ -474,7 +481,7 @@ public class CertificationService {
//认证成功后修改用户,用户认证状态
ObjectRestResponse authentication = userFeign.authentication(idInformation.getUserLonginId(), idInformation.getName(),idInformation.getIdNumber(), 1);
ObjectRestResponse authentication = userFeign.authentication(idInformation.getUserLonginId(), idInformation.getName(), idInformation.getIdNumber(), 1);
return authentication.getRel();
}
......
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