10 changed files with 910 additions and 0 deletions
@ -0,0 +1,21 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.annotation; |
||||||
|
|
||||||
|
import java.lang.annotation.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Target({ ElementType.PARAMETER, ElementType.METHOD }) |
||||||
|
@Retention(RetentionPolicy.RUNTIME) |
||||||
|
@Documented |
||||||
|
public @interface SystemLog { |
||||||
|
/** |
||||||
|
* 功能模块信息 |
||||||
|
*/ |
||||||
|
String msg() default ""; |
||||||
|
/** |
||||||
|
* 操作描述 |
||||||
|
*/ |
||||||
|
String operation() default ""; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,109 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.aspect; |
||||||
|
|
||||||
|
import com.ecell.internationalize.common.core.utils.ServletUtils; |
||||||
|
import com.ecell.internationalize.common.core.utils.StringUtils; |
||||||
|
import com.ecell.internationalize.common.core.utils.ip.IpUtils; |
||||||
|
import com.ecell.internationalize.common.core.utils.locale.LocaleUtil; |
||||||
|
import com.ecell.internationalize.common.core.utils.uuid.UUID; |
||||||
|
import com.ecell.internationalize.common.security.utils.SecurityUtils; |
||||||
|
import com.ecell.internationalize.common.sysytem.annotation.SystemLog; |
||||||
|
import com.ecell.internationalize.common.sysytem.constant.FieldConstant; |
||||||
|
import com.ecell.internationalize.common.sysytem.entity.SysOperateInfo; |
||||||
|
import com.ecell.internationalize.common.sysytem.feign.SysOperatorInfoFeignClient; |
||||||
|
import org.aspectj.lang.JoinPoint; |
||||||
|
import org.aspectj.lang.annotation.AfterReturning; |
||||||
|
import org.aspectj.lang.annotation.AfterThrowing; |
||||||
|
import org.aspectj.lang.annotation.Aspect; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Aspect |
||||||
|
@Component |
||||||
|
public class SystemLogAspect { |
||||||
|
private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect.class); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private SysOperatorInfoFeignClient sysOperatorInfoFeignClient; |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理完请求后执行 |
||||||
|
* @param joinPoint 切点 |
||||||
|
*/ |
||||||
|
@AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") |
||||||
|
public void doAfterReturning(JoinPoint joinPoint, SystemLog controllerLog, Map<String,Object> jsonResult) { |
||||||
|
handleLog(joinPoint, controllerLog, null, jsonResult); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 拦截异常操作 |
||||||
|
* |
||||||
|
* @param joinPoint 切点 |
||||||
|
* @param e 异常 |
||||||
|
*/ |
||||||
|
@AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") |
||||||
|
public void doAfterThrowing(JoinPoint joinPoint, SystemLog controllerLog, Exception e) { |
||||||
|
handleLog(joinPoint, controllerLog, e, null); |
||||||
|
} |
||||||
|
|
||||||
|
protected void handleLog(final JoinPoint joinPoint, SystemLog controllerLog, final Exception e, Map<String,Object> jsonResult) { |
||||||
|
try { |
||||||
|
// ========数据库日志=========*/
|
||||||
|
SysOperateInfo sysOperateInfo = new SysOperateInfo(); |
||||||
|
String id= UUID.randomUUID().toString(true); |
||||||
|
sysOperateInfo.setId(id); |
||||||
|
String username = SecurityUtils.getUsername(); |
||||||
|
if (StringUtils.isNotBlank(username)) { |
||||||
|
sysOperateInfo.setAccount(username); |
||||||
|
sysOperateInfo.setCreateUser(username); |
||||||
|
} |
||||||
|
String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); |
||||||
|
System.out.println("获取到的操作机器的IP:"+ip); |
||||||
|
sysOperateInfo.setLoginIp(ip); |
||||||
|
sysOperateInfo.setAccessTime(new Date()); |
||||||
|
sysOperateInfo.setStatus(FieldConstant.OPERATOR_SUCCESS); |
||||||
|
if (e != null) { |
||||||
|
sysOperateInfo.setErrorMsg(LocaleUtil.getMessage("messages.system.error")); |
||||||
|
sysOperateInfo.setStatus(FieldConstant.OPERATOR_FAIL); |
||||||
|
} |
||||||
|
else { |
||||||
|
if (FieldConstant.CODE_FIVE == Integer.parseInt(jsonResult.get(FieldConstant.CODE).toString())){ |
||||||
|
//操作失败,记录原因
|
||||||
|
sysOperateInfo.setErrorMsg(jsonResult.get(FieldConstant.MSG).toString()); |
||||||
|
sysOperateInfo.setStatus(FieldConstant.OPERATOR_FAIL); |
||||||
|
} |
||||||
|
} |
||||||
|
// 处理设置注解上的参数
|
||||||
|
getControllerMethodDescription(joinPoint, controllerLog, sysOperateInfo, jsonResult); |
||||||
|
// 保存数据库
|
||||||
|
sysOperatorInfoFeignClient.save(sysOperateInfo); |
||||||
|
|
||||||
|
} |
||||||
|
catch (Exception exp) { |
||||||
|
// 记录本地异常日志
|
||||||
|
logger.error("==前置通知异常=="); |
||||||
|
logger.error("异常信息:{}", exp.getMessage()); |
||||||
|
exp.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取注解中对方法的描述信息 用于Controller层注解 |
||||||
|
* @param systemLog 日志 |
||||||
|
* @param sysOperateInfo 操作日志 |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public void getControllerMethodDescription(JoinPoint joinPoint, SystemLog systemLog, SysOperateInfo sysOperateInfo, Map<String,Object> jsonResult) { |
||||||
|
// 设置action动作
|
||||||
|
sysOperateInfo.setOperationModule(LocaleUtil.getMessage(systemLog.operation())); |
||||||
|
// 设置标题
|
||||||
|
sysOperateInfo.setMsg(LocaleUtil.getMessage(systemLog.msg())); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
public class SysRoleMenu implements Serializable { |
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 角色ID |
||||||
|
*/ |
||||||
|
private String roleId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 菜单ID |
||||||
|
*/ |
||||||
|
private String menuId; |
||||||
|
} |
@ -0,0 +1,129 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@TableName("sys_user") |
||||||
|
public class SysUser implements Serializable { |
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 主键Id |
||||||
|
*/ |
||||||
|
@TableId("user_id") |
||||||
|
private String userId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户昵称 |
||||||
|
*/ |
||||||
|
private String nickName; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户账号 |
||||||
|
*/ |
||||||
|
private String account; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户类型 |
||||||
|
*/ |
||||||
|
private String userType; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户头像 |
||||||
|
*/ |
||||||
|
private String headImg; |
||||||
|
|
||||||
|
/** |
||||||
|
* 密码 |
||||||
|
*/ |
||||||
|
private String password; |
||||||
|
/** |
||||||
|
* 新密码 |
||||||
|
*/ |
||||||
|
@TableField(exist = false) |
||||||
|
private String newPassword; |
||||||
|
|
||||||
|
/** |
||||||
|
* 帐号状态(0正常 1停用) |
||||||
|
*/ |
||||||
|
private String status; |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除标识(0:已删除,1:正常) |
||||||
|
*/ |
||||||
|
private String delFlag; |
||||||
|
|
||||||
|
/** |
||||||
|
* 登录IP |
||||||
|
*/ |
||||||
|
private String loginIp; |
||||||
|
|
||||||
|
/** |
||||||
|
* 最后登录时间 |
||||||
|
*/ |
||||||
|
private String loginDate; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建人 |
||||||
|
*/ |
||||||
|
private String createUser; |
||||||
|
/** |
||||||
|
* 创建时间 |
||||||
|
*/ |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date createTime; |
||||||
|
/** |
||||||
|
* 修改人 |
||||||
|
*/ |
||||||
|
private String updateUser; |
||||||
|
/** |
||||||
|
* 修改时间 |
||||||
|
*/ |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date updateTime; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 厂商Id |
||||||
|
*/ |
||||||
|
private String firmId; |
||||||
|
/** |
||||||
|
* 代理商Id |
||||||
|
*/ |
||||||
|
private String secondFirmId; |
||||||
|
/** |
||||||
|
* 代理商名称 |
||||||
|
*/ |
||||||
|
@TableField(exist = false) |
||||||
|
private String secondFirmName; |
||||||
|
/** |
||||||
|
* 标识(1:厂商:2:代理商) |
||||||
|
*/ |
||||||
|
private String firmFlag; |
||||||
|
/** |
||||||
|
* 厂商名称 |
||||||
|
*/ |
||||||
|
@TableField(exist = false) |
||||||
|
private String firmName; |
||||||
|
|
||||||
|
/** 角色 */ |
||||||
|
@TableField(exist = false) |
||||||
|
private String roleId; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private String roleName; |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
public class SysUserRole implements Serializable { |
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户ID |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 角色ID |
||||||
|
*/ |
||||||
|
private String roleId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,195 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.FieldFill; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@ApiModel(value="user对象",description="用户对象user") |
||||||
|
public class User implements Serializable { |
||||||
|
|
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 主键Id |
||||||
|
*/ |
||||||
|
@TableId("user_id") |
||||||
|
private String userId; |
||||||
|
/** |
||||||
|
* accessToken |
||||||
|
*/ |
||||||
|
private String accessToken; |
||||||
|
|
||||||
|
/** |
||||||
|
* accessToken创建时的时间戳 |
||||||
|
*/ |
||||||
|
private Date accessTokenTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 密码 |
||||||
|
*/ |
||||||
|
private String password; |
||||||
|
|
||||||
|
/** |
||||||
|
* 名字 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(example = "姓名") |
||||||
|
private String name; |
||||||
|
|
||||||
|
/** |
||||||
|
* 性别 |
||||||
|
*/ |
||||||
|
private String sex; |
||||||
|
|
||||||
|
/** |
||||||
|
* 手机号 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(example = "手机号") |
||||||
|
private String phone; |
||||||
|
|
||||||
|
/** |
||||||
|
* 监听腕表功能用的手机号 |
||||||
|
*/ |
||||||
|
private String monitorWatchPhone; |
||||||
|
|
||||||
|
/** |
||||||
|
* 头像文件名 xxx.jpg |
||||||
|
*/ |
||||||
|
@ApiModelProperty(example = "头像") |
||||||
|
private String image; |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否接收其他人聊天群消息(0:接收 1:不接收) |
||||||
|
*/ |
||||||
|
private String chatFlag; |
||||||
|
|
||||||
|
/** |
||||||
|
* 聊天群组id的未读信息个数(有多个聊天群就有多条字段) |
||||||
|
*/ |
||||||
|
private String groupId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 总未读信息个数 |
||||||
|
*/ |
||||||
|
private Integer unreadMsgTotal; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户删除消息中心时间戳 |
||||||
|
*/ |
||||||
|
private Date delMsgTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户删除历史轨迹时间戳 |
||||||
|
*/ |
||||||
|
private Date delLocationTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户删除话费流量消息时间戳 |
||||||
|
*/ |
||||||
|
private Date delCostTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 所属国家 |
||||||
|
*/ |
||||||
|
private String country; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户状态 |
||||||
|
*/ |
||||||
|
private String status; |
||||||
|
|
||||||
|
/** |
||||||
|
* 国家编码 |
||||||
|
*/ |
||||||
|
private String countryCode; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户最近一次使用时间 |
||||||
|
*/ |
||||||
|
private Date lastUseTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户注册时间 |
||||||
|
*/ |
||||||
|
private Date registerTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户最后一次登录时间 |
||||||
|
*/ |
||||||
|
private Date lastLoginTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 登录机型[ios、android] |
||||||
|
*/ |
||||||
|
private String mobileType; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户使用什么渠道APP登录的 |
||||||
|
*/ |
||||||
|
private String channel; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建人 |
||||||
|
*/ |
||||||
|
private String createUser; |
||||||
|
/** |
||||||
|
* 创建时间 |
||||||
|
*/ |
||||||
|
@TableField(value = "create_time",fill = FieldFill.INSERT) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date createTime; |
||||||
|
/** |
||||||
|
* 修改人 |
||||||
|
*/ |
||||||
|
private String updateUser; |
||||||
|
/** |
||||||
|
* 修改时间 |
||||||
|
*/ |
||||||
|
@TableField(value = "update_time",fill = FieldFill.UPDATE) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date updateTime; |
||||||
|
/** |
||||||
|
* 设备imei |
||||||
|
*/ |
||||||
|
@TableField(exist = false) |
||||||
|
private String imei; |
||||||
|
/** |
||||||
|
* 用户邮箱 |
||||||
|
*/ |
||||||
|
private String userEmail; |
||||||
|
/** |
||||||
|
* APP相关信息 |
||||||
|
*/ |
||||||
|
private String userAgent; |
||||||
|
@TableField(exist = false) |
||||||
|
private String token; |
||||||
|
|
||||||
|
private String completeUserAgent; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date userLastTime; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private String channelName; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private String version; |
||||||
|
|
||||||
|
@TableField(exist = false) |
||||||
|
private String relation; |
||||||
|
} |
@ -0,0 +1,89 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.FieldFill; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@TableName("user_device_bind_app") |
||||||
|
public class UserDeviceBindApp implements Serializable { |
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 主键Id |
||||||
|
*/ |
||||||
|
private String id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户Id |
||||||
|
*/ |
||||||
|
private String userId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设备imei |
||||||
|
*/ |
||||||
|
private String imei; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户身份(默认0:游客,1:普通用户(申请关注的人),2:管理员) |
||||||
|
*/ |
||||||
|
private String identity; |
||||||
|
|
||||||
|
/** |
||||||
|
* 与孩子关系 |
||||||
|
*/ |
||||||
|
private String relation; |
||||||
|
|
||||||
|
/** |
||||||
|
* 与孩子关系头像文件名ID xxx.jpg |
||||||
|
*/ |
||||||
|
private String relationImageId; |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建人 |
||||||
|
*/ |
||||||
|
private String createUser; |
||||||
|
/** |
||||||
|
* 创建时间 |
||||||
|
*/ |
||||||
|
@TableField(value = "create_time",fill = FieldFill.INSERT) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date createTime; |
||||||
|
/** |
||||||
|
* 修改人 |
||||||
|
*/ |
||||||
|
private String updateUser; |
||||||
|
/** |
||||||
|
* 修改时间 |
||||||
|
*/ |
||||||
|
@TableField(value = "update_time",fill = FieldFill.UPDATE) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date updateTime; |
||||||
|
/** |
||||||
|
* 是否绑定 (0:未绑定,1:绑定) |
||||||
|
*/ |
||||||
|
private String bindStatus; |
||||||
|
/** |
||||||
|
* 是否审批(0:待审批 ,1:已审批,2:已拒绝) |
||||||
|
*/ |
||||||
|
private String approveStatus; |
||||||
|
/** |
||||||
|
* 用户邮箱 |
||||||
|
*/ |
||||||
|
private String userEmail; |
||||||
|
|
||||||
|
private String phone; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@ApiModel(value="VersionRatio对象", description="用户版本统计") |
||||||
|
public class VersionRatio implements Serializable { |
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "主键Id") |
||||||
|
private String id; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间") |
||||||
|
private Date createTime; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "渠道") |
||||||
|
private String channelName; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "版本号") |
||||||
|
private String version; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户id") |
||||||
|
private String userId; |
||||||
|
|
||||||
|
private Integer timestamp; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.entity; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@ApiModel(value="VersionRatioHistory对象", description="历史活跃数") |
||||||
|
public class VersionRatioHistory implements Serializable { |
||||||
|
private static final long serialVersionUID=1L; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "主键Id") |
||||||
|
private String id; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "活跃时间") |
||||||
|
private String historyTime; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "每天活跃数") |
||||||
|
private Integer historyTotal; |
||||||
|
} |
@ -0,0 +1,244 @@ |
|||||||
|
package com.ecell.internationalize.common.sysytem.utlis; |
||||||
|
|
||||||
|
import com.aliyun.oss.ClientException; |
||||||
|
import com.aliyun.oss.OSS; |
||||||
|
import com.aliyun.oss.OSSClientBuilder; |
||||||
|
import com.aliyun.oss.OSSException; |
||||||
|
import com.aliyun.oss.model.PutObjectRequest; |
||||||
|
import com.ecell.internationalize.common.core.exception.ServiceException; |
||||||
|
import com.ecell.internationalize.common.core.utils.uuid.UUID; |
||||||
|
import com.ecell.internationalize.common.sysytem.constant.OssClientConstants; |
||||||
|
import com.ecell.internationalize.common.sysytem.entity.ChatOssDto; |
||||||
|
import com.ecell.internationalize.common.sysytem.entity.CheckVersionUpload; |
||||||
|
import org.apache.poi.ss.usermodel.Workbook; |
||||||
|
import org.springframework.web.multipart.MultipartFile; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.net.URL; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.time.ZoneId; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author borui |
||||||
|
*/ |
||||||
|
public class UploadUtil { |
||||||
|
public static String upload(MultipartFile file) throws IOException { |
||||||
|
// 创建OSSClient实例
|
||||||
|
OSS ossClient = new OSSClientBuilder().build(OssClientConstants.ENDPOINT, OssClientConstants.ACCESS_KEY_ID, OssClientConstants.ACCESS_KEY_SECRET); |
||||||
|
// 上传文件流。
|
||||||
|
InputStream inputStream = null; |
||||||
|
// 获取文件后缀名
|
||||||
|
String suffix =getSuffix(file); |
||||||
|
//唯一key
|
||||||
|
String uuid= UUID.fastUUID().toString(); |
||||||
|
File tempFile = File.createTempFile(uuid, suffix); |
||||||
|
//MultipartFile 转换为 File
|
||||||
|
file.transferTo(tempFile); |
||||||
|
try { |
||||||
|
//文件地址
|
||||||
|
inputStream = new FileInputStream(tempFile); |
||||||
|
} catch (FileNotFoundException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
//上传到OSS,第一个参数为存储空间名,第二个为对象名,唯一值
|
||||||
|
ossClient.putObject(OssClientConstants.BUCKET_NAME, uuid+"."+suffix, inputStream); |
||||||
|
// 设置URL过期时间为100年,默认这里是int型,转换为long型即可
|
||||||
|
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100); |
||||||
|
// 生成URL
|
||||||
|
URL url = ossClient.generatePresignedUrl(OssClientConstants.BUCKET_NAME, uuid+"."+suffix, expiration); |
||||||
|
System.out.println("url:"+url); |
||||||
|
return url.toString(); |
||||||
|
// 关闭OSSClient。
|
||||||
|
// ossClient.shutdown();
|
||||||
|
} |
||||||
|
|
||||||
|
public static ChatOssDto uploadChat(MultipartFile file) throws IOException { |
||||||
|
ChatOssDto chatOssDto=new ChatOssDto(); |
||||||
|
// 创建OSSClient实例
|
||||||
|
OSS ossClient = new OSSClientBuilder().build(OssClientConstants.ENDPOINT, OssClientConstants.ACCESS_KEY_ID, OssClientConstants.ACCESS_KEY_SECRET); |
||||||
|
// 上传文件流。
|
||||||
|
InputStream inputStream = null; |
||||||
|
// 获取文件后缀名
|
||||||
|
// String suffix =getSuffix(file);
|
||||||
|
String suffix ="amr"; |
||||||
|
System.out.println("语音文件名后缀:"+suffix); |
||||||
|
String fileName=file.getOriginalFilename()+"."+suffix; |
||||||
|
System.out.println("fileName:"+fileName); |
||||||
|
//唯一key
|
||||||
|
String uuid= UUID.fastUUID().toString(); |
||||||
|
File tempFile = File.createTempFile(uuid, suffix); |
||||||
|
//MultipartFile 转换为 File
|
||||||
|
file.transferTo(tempFile); |
||||||
|
try { |
||||||
|
//文件地址
|
||||||
|
inputStream = new FileInputStream(tempFile); |
||||||
|
} catch (FileNotFoundException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
//String fileName="static/message/"+uuid+"."+suffix;
|
||||||
|
//上传到OSS,第一个参数为存储空间名,第二个为对象名,唯一值
|
||||||
|
ossClient.putObject(OssClientConstants.BUCKET_NAME, fileName, inputStream); |
||||||
|
// 设置URL过期时间为100年,默认这里是int型,转换为long型即可
|
||||||
|
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100); |
||||||
|
// 生成URL
|
||||||
|
URL url = ossClient.generatePresignedUrl(OssClientConstants.BUCKET_NAME, fileName, expiration); |
||||||
|
chatOssDto.setUrl(url.toString()); |
||||||
|
chatOssDto.setFileName(fileName); |
||||||
|
System.out.println("chatOssDto:"+chatOssDto); |
||||||
|
return chatOssDto; |
||||||
|
// 关闭OSSClient。
|
||||||
|
// ossClient.shutdown();
|
||||||
|
} |
||||||
|
|
||||||
|
public static CheckVersionUpload versionUpload(MultipartFile file) throws IOException { |
||||||
|
System.out.println("开始文件上传"); |
||||||
|
CheckVersionUpload checkVersionUpload=new CheckVersionUpload(); |
||||||
|
String fileName=file.getOriginalFilename(); |
||||||
|
// 创建OSSClient实例
|
||||||
|
OSS ossClient = new OSSClientBuilder().build(OssClientConstants.ENDPOINT, OssClientConstants.ACCESS_KEY_ID, OssClientConstants.ACCESS_KEY_SECRET); |
||||||
|
// 上传文件流。
|
||||||
|
InputStream inputStream = null; |
||||||
|
// 获取文件后缀名
|
||||||
|
String suffix =getSuffix(file); |
||||||
|
//唯一key
|
||||||
|
String uuid= UUID.fastUUID().toString(); |
||||||
|
File tempFile = File.createTempFile(uuid, suffix); |
||||||
|
//MultipartFile 转换为 File
|
||||||
|
file.transferTo(tempFile); |
||||||
|
try { |
||||||
|
//文件地址
|
||||||
|
inputStream = new FileInputStream(tempFile); |
||||||
|
} catch (FileNotFoundException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
//String fileName="static/message/"+uuid+"."+suffix;
|
||||||
|
//上传到OSS,第一个参数为存储空间名,第二个为对象名,唯一值
|
||||||
|
ossClient.putObject(OssClientConstants.BUCKET_NAME, fileName, inputStream); |
||||||
|
// 设置URL过期时间为100年,默认这里是int型,转换为long型即可
|
||||||
|
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100); |
||||||
|
// 生成URL
|
||||||
|
URL url = ossClient.generatePresignedUrl(OssClientConstants.BUCKET_NAME, fileName, expiration); |
||||||
|
checkVersionUpload.setUrl(url.toString()); |
||||||
|
checkVersionUpload.setFileName(fileName); |
||||||
|
checkVersionUpload.setGetSuffix(suffix); |
||||||
|
return checkVersionUpload; |
||||||
|
// 关闭OSSClient。
|
||||||
|
// ossClient.shutdown();
|
||||||
|
} |
||||||
|
|
||||||
|
public static String uploadTwo(MultipartFile file,String inputBatch) throws IOException { |
||||||
|
// 创建OSSClient实例
|
||||||
|
OSS ossClient = new OSSClientBuilder().build(OssClientConstants.ENDPOINT, OssClientConstants.ACCESS_KEY_ID, OssClientConstants.ACCESS_KEY_SECRET); |
||||||
|
// 上传文件流。
|
||||||
|
InputStream inputStream = null; |
||||||
|
// 获取文件后缀名
|
||||||
|
String suffix =getSuffix(file); |
||||||
|
//唯一key
|
||||||
|
//String uuid= UUID.fastUUID().toString();
|
||||||
|
File tempFile = File.createTempFile(inputBatch, suffix); |
||||||
|
//MultipartFile 转换为 File
|
||||||
|
file.transferTo(tempFile); |
||||||
|
URL url =null; |
||||||
|
try { |
||||||
|
//文件地址
|
||||||
|
inputStream = new FileInputStream(tempFile); |
||||||
|
String fileName="device/"+inputBatch+"."+suffix; |
||||||
|
PutObjectRequest putObjectRequest = new PutObjectRequest(OssClientConstants.BUCKET_NAME, fileName, inputStream); |
||||||
|
//上传到OSS,第一个参数为存储空间名,第二个为对象名,唯一值
|
||||||
|
ossClient.putObject(putObjectRequest); |
||||||
|
// 设置URL过期时间为100年,默认这里是int型,转换为long型即可
|
||||||
|
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100); |
||||||
|
// 生成URL
|
||||||
|
url= ossClient.generatePresignedUrl(OssClientConstants.BUCKET_NAME, fileName, expiration); |
||||||
|
System.out.println("url:"+url); |
||||||
|
} catch (FileNotFoundException e) { |
||||||
|
throw new ServiceException(e.getMessage()); |
||||||
|
}finally { |
||||||
|
ossClient.shutdown(); |
||||||
|
} |
||||||
|
|
||||||
|
return url.toString(); |
||||||
|
// 关闭OSSClient。
|
||||||
|
// ossClient.shutdown();
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 上传excel |
||||||
|
* |
||||||
|
* @param workbook |
||||||
|
* @param excelName 文件名 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public String uploadThree(Workbook workbook, String excelName) { |
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
||||||
|
try { |
||||||
|
workbook.write(bos); |
||||||
|
} catch (IOException e) { |
||||||
|
} finally { |
||||||
|
try { |
||||||
|
bos.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
} |
||||||
|
} |
||||||
|
byte[] brray = bos.toByteArray(); |
||||||
|
InputStream is = new ByteArrayInputStream(brray); |
||||||
|
OSS ossClient = new OSSClientBuilder().build(OssClientConstants.ENDPOINT, OssClientConstants.ACCESS_KEY_ID, OssClientConstants.ACCESS_KEY_SECRET); |
||||||
|
try { |
||||||
|
// 创建PutObjectRequest对象。
|
||||||
|
PutObjectRequest putObjectRequest = new PutObjectRequest(OssClientConstants.BUCKET_NAME, excelName, is); |
||||||
|
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
|
||||||
|
// ObjectMetadata metadata = new ObjectMetadata();
|
||||||
|
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
|
||||||
|
// metadata.setObjectAcl(CannedAccessControlList.Private);
|
||||||
|
// putObjectRequest.setMetadata(metadata);
|
||||||
|
// 上传文件
|
||||||
|
ossClient.putObject(putObjectRequest); |
||||||
|
//设置过期时间
|
||||||
|
LocalDateTime time = LocalDateTime.now().plusDays(36500); |
||||||
|
Date expiration = Date.from(time.atZone(ZoneId.systemDefault()).toInstant()); |
||||||
|
return ossClient.generatePresignedUrl(OssClientConstants.BUCKET_NAME, "device" + "/" + excelName, expiration).toString(); |
||||||
|
} catch (OSSException oe) { |
||||||
|
throw new ServiceException(oe.getMessage()); |
||||||
|
} catch (ClientException ce) { |
||||||
|
throw new ServiceException(ce.getMessage()); |
||||||
|
} finally { |
||||||
|
if (ossClient != null) { |
||||||
|
ossClient.shutdown(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取文件名后缀 |
||||||
|
* @Title: UploadFileUtil |
||||||
|
* @Author: liy |
||||||
|
* @Date: 2022/7/13 17:35 |
||||||
|
* @Description: |
||||||
|
* @Version:1.0 |
||||||
|
*/ |
||||||
|
public static String getSuffix(MultipartFile file){ |
||||||
|
String originalFilename = file.getOriginalFilename(); |
||||||
|
assert originalFilename != null; |
||||||
|
return originalFilename.substring(originalFilename.lastIndexOf(".") + 1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取文件名称 |
||||||
|
* @param file |
||||||
|
* @param inputBatch |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getMultipartFileName(MultipartFile file,String inputBatch){ |
||||||
|
|
||||||
|
String originalFilename = file.getOriginalFilename(); |
||||||
|
assert originalFilename != null; |
||||||
|
String s= originalFilename.substring(originalFilename.lastIndexOf(".") + 1); |
||||||
|
String fileName="device"+inputBatch+"."+s; |
||||||
|
return fileName; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue