Commit f78a24ce by manxiaoqiang

new

parent f4d3b89d
1. install nodejs installed version
2. install the ruby (苹果电脑有,不需要安装)
3. gem install compass
4. gem install sass
cd src\main\webapp
5. npm install -g grunt grunt-cli bower
6. npm install
7. bower install
exec below cmd and enjoy ....
8. grunt serve
linux系统中:
yum install -y nodejs
npm install -g grunt-cli
#前端开发人员注意事项
1、新加菜单 需要在ToolService.js最上面menu字典表加上 =>否则埋点会unknow
2、需要获取用户属性,但是当前cookie里面没有存储的,从ToolService.js的getUser方法获取用户对象,从对象中获取该属性
This diff is collapsed. Click to expand it.
{
"name": "square",
"version": "2.0.1",
"devDependencies": {
"connect-livereload": "~0.5.2",
"grunt": "~0.4.5",
"grunt-autoprefixer": "~3.0.0",
"grunt-cli": "^0.1.13",
"grunt-concurrent": "~2.0.0",
"grunt-connect-proxy": "^0.2.0",
"grunt-contrib-clean": "~0.6.0",
"grunt-contrib-compass": "~1.0.0",
"grunt-contrib-concat": "~0.5.0",
"grunt-contrib-connect": "~0.10.0",
"grunt-contrib-copy": "~0.8.0",
"grunt-contrib-cssmin": "~0.14.0",
"grunt-contrib-htmlmin": "~0.5.0",
"grunt-contrib-jshint": "~0.11.0",
"grunt-contrib-uglify": "~0.9.0",
"grunt-contrib-watch": "~0.6.1",
"grunt-injector": "^0.6.0",
"grunt-open": "~0.2.3",
"grunt-restful-mock-mayiuu": "^0.1.22",
"grunt-usemin": "~3.1.0",
"jshint-stylish": "^2.0.0",
"load-grunt-tasks": "~3.3.0",
"time-grunt": "~1.2.0",
"grunt-filerev": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
}
This diff is collapsed. Click to expand it.
package com.reyun.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by nolan on 06/06/2017.
* description:
*/
@Controller
@RequestMapping("index")
public class IndexController {
}
package com.reyun.controller;
import com.reyun.model.Account;
import com.reyun.model.IntelligentPath;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.IntelligentPathService;
import com.reyun.util.ResultModel;
import com.reyun.util.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
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 javax.servlet.http.HttpServletRequest;
/**
* Created by sunhao on 17/7/18.
* desc:智能路径controller
*/
@Controller
@RequestMapping("/intelligentpath")
public class IntelligentPathController {
private final static String UNDEFINED = "undefined";
@Autowired
private IntelligentPathService intelligentPathService;
@RequestMapping(value = "{appId}/query", method = RequestMethod.GET)
@ResponseBody
public ResultModel queryIntelligentPath(HttpServletRequest httpServletRequest, @CurrentAccount Account loginAccount, @PathVariable Long appId) {
String startDate = httpServletRequest.getParameter("startdate");
String endDate = httpServletRequest.getParameter("enddate");
String eventCondition = httpServletRequest.getParameter("eventCondition");
String events = httpServletRequest.getParameter("events");
String targetEvent = httpServletRequest.getParameter("targetEvent");
Boolean startOrEnd = Boolean.valueOf(httpServletRequest.getParameter("startOrEnd"));
String session = httpServletRequest.getParameter("session");
String sessionUnit = httpServletRequest.getParameter("sessionUnit");
String userGroup = httpServletRequest.getParameter("userGroup");
//参数校验
if (StringUtils.isEmpty(startDate) || UNDEFINED.equals(startDate)
|| StringUtils.isEmpty(endDate) || UNDEFINED.equals(endDate)
|| StringUtils.isEmpty(eventCondition) || UNDEFINED.equals(eventCondition)
|| StringUtils.isEmpty(events) || UNDEFINED.equals(events)
|| StringUtils.isEmpty(targetEvent) || UNDEFINED.equals(targetEvent)
|| StringUtils.isEmpty(startOrEnd)
|| StringUtils.isEmpty(session) || UNDEFINED.equals(session)
|| StringUtils.isEmpty(sessionUnit) || UNDEFINED.equals(sessionUnit)) {
return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
}
IntelligentPath intelligentPath = new IntelligentPath(appId, events, startOrEnd, targetEvent, Long.parseLong(session), Long.parseLong(sessionUnit), eventCondition, startDate, endDate);
//用户分群
if (!StringUtils.isEmpty(userGroup)) {
intelligentPath.setUserGroup(Long.parseLong(userGroup));
}
return ResultModel.OK(intelligentPathService.queryIntelligentPath(loginAccount, intelligentPath));
}
}
package com.reyun.controller;
import com.google.common.collect.Maps;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.RoleEnumType;
import com.reyun.model.*;
import com.reyun.repository.*;
import com.reyun.security.RedisLoginStatusManager;
import com.reyun.security.TokenManager;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.security.interceptor.AuthorizationInterceptor;
import com.reyun.service.*;
import com.reyun.util.CipherUtil;
import com.reyun.util.Constant;
import com.reyun.util.DateUtil;
import com.reyun.util.ResultModel;
import com.reyun.util.StringUtil;
import com.reyun.util.ValidateCodeUtil;
import com.reyun.util.ValidateUtil;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("login")
public class LoginController
{
protected Logger logger = LoggerFactory.getLogger(LoginController.class);
@Autowired
LoginService loginService;
@Autowired
TokenManager tokenManager;
@Autowired
AccountRepository accountRepository;
@Autowired
UserLogService userLogService;
@Autowired
ConfigParamService configParamService;
@Autowired
RedisLoginStatusManager redisLoginStatusManager;
@Autowired
BussinessManRepository bussinessManRepository;
@Autowired
AuthService authService;
@Autowired
PackageTypeRepository packageTypeRepository;
@RequestMapping(value = "loginweb", method = RequestMethod.GET)
@ResponseBody
public ResultModel login(HttpServletRequest request, HttpServletResponse response, @RequestParam String email,
@RequestParam String password, @RequestParam Boolean isrember, @RequestParam Boolean autologin)
{
Map<String, Object> rtnMap = Maps.newHashMap();
Account account = loginService.login(email, password);
if (account != null) {
if (!account.getIsSuperUser()) {
//子账号
if (account.getStatus() == 0) {
// 子账号禁用
rtnMap.put("msg", "子账号禁用");
rtnMap.put("code", 203);
return ResultModel.OK(rtnMap);
}
//没有控制权限AuthStr没有授权
if (!account.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) {
if (!ValidateUtil.isValid(account.getAuthStr()) || !ValidateUtil.isValid(JSONObject.fromObject(account.getAuthStr()))) {
rtnMap.put("msg", "没有产品权限");
rtnMap.put("code", 202);
return ResultModel.OK(rtnMap);
}
}
}
//存储token
String token = tokenManager.createToken(String.valueOf(account.getId()));
//存储登陆密码
redisLoginStatusManager.createLoginStatus(token, account.getIsMasterLogin() ? CipherUtil.generatePassword(configParamService.generateMasterPwd()) : account.getPassword());
if (isrember) {
Cookie cookie = new Cookie("ryioUpass", password);
cookie.setPath("/");
cookie.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(cookie);
}
else {
Cookie cookie = new Cookie("ryioUpass", "");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
//自动登录
Cookie cookie = new Cookie("TOKEN", token);
cookie.setPath("/");
cookie.setMaxAge(autologin ? 60 * 60 * 24 * 7 : 60 * 30);
response.addCookie(cookie);
rtnMap.put("code", 200);
rtnMap.put("token", token);
rtnMap.put("account", account);
try {
userLogService.insertLog(account, LogEnumType.LOGIN.getCode(), LogEnumType.LOGIN.getName() + account.getEmail(), account, null, null, request);
}
catch (Exception e) {
logger.error("fail to parse ip," + e.getMessage());
}
return ResultModel.OK(rtnMap);
}
else {
// 没有此账号
rtnMap.put("code", 205);
rtnMap.put("msg", "用户名或密码不正确");
return ResultModel.OK(rtnMap);
}
}
/**
* 获取用户付费等级的各个指标限制
*/
@RequestMapping(value = "limit", method = RequestMethod.GET)
@ResponseBody
public ResultModel getLevelLimit(@CurrentAccount Account loginAccount)
{
Long level = loginAccount.getPricelevel();
//EditionPricingLevel levelObject = levelRepository.findOne(level);
PackageType levelObject = packageTypeRepository.findOne(level);
EditionPricingLevel4Web webLevel = new EditionPricingLevel4Web(levelObject);
return ResultModel.OK(webLevel);
}
@RequestMapping(value = "logout", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> logout(HttpServletRequest request, HttpServletResponse response, @CurrentAccount Account loginAccount)
{
if (loginAccount != null) {
String token = request.getHeader(AuthorizationInterceptor.httpHeaderName);
//删除session,token
request.getSession().removeAttribute(Constant.CURRENT_ACCOUNT);
tokenManager.delRelationshipByToken(token);
redisLoginStatusManager.deleteLoginStatus(token);
Cookie cookie = new Cookie("TOKEN", null);
cookie.setDomain("trackingio.com");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
Map<String, Object> result = new HashMap<>();
result.put("status", 1);
userLogService.insertLog(loginAccount, LogEnumType.LOGOUT.getCode(), LogEnumType.LOGOUT.getName() + loginAccount.getEmail(), loginAccount, null, null, request);
return result;
}
@RequestMapping(value = "getvalidcode", method = RequestMethod.GET)
@ResponseBody
public void getValidateCode(HttpServletRequest request, HttpServletResponse response)
{
// 设置响应的类型格式为图片格式
response.setContentType("image/jpeg");
// 禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
String code = request.getParameter("code");
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60);
ValidateCodeUtil vCode = new ValidateCodeUtil(100, 40, 4, 50, code);
session.setAttribute("code", vCode.getCode());
try {
vCode.write(response.getOutputStream());
}
catch (IOException e) {
logger.error(e.getMessage());
}
}
}
package com.reyun.controller;
import com.reyun.model.Account;
import com.reyun.model.UserNoticeLog;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.NoticeService;
import com.reyun.util.ResultModel;
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.util.Date;
/**
* Created by sunhao on 17/3/1.
* description:公告查询
*/
@Controller
@RequestMapping("notice")
public class NoticeController {
@Autowired
private NoticeService noticeService;
@RequestMapping(value = "findDeploy", method = RequestMethod.GET)
@ResponseBody
public ResultModel listRecentDeployNotice(@CurrentAccount Account account) {
return ResultModel.OK(noticeService.listRecentDeployNotice(account.getId()));
}
@RequestMapping(value = "saveReadLog/{noticeId}", method = RequestMethod.POST)
@ResponseBody
public ResultModel saveUserNoticeReadLog(@PathVariable Long noticeId, @CurrentAccount Account account) {
return ResultModel.OK(noticeService.saveReadLog(new UserNoticeLog(noticeId, account.getId(), new Date())));
}
}
package com.reyun.controller;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 com.reyun.service.ProfileService;
import com.reyun.util.ResultModel;
@Controller
@RequestMapping("/{appid}/profile")
public class ProfileController {
protected Logger logger = LoggerFactory.getLogger(ProfileController.class);
@Autowired
ProfileService profileService;
@RequestMapping(value = "/find", method = RequestMethod.GET)
@ResponseBody
public ResultModel findAll(HttpServletRequest request,
@PathVariable Long appid) {
return ResultModel.OK(this.profileService.listAllByAppkey(appid));
}
}
package com.reyun.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/report/{appid}")
public class ReportController
{
}
package com.reyun.controller.manage;
import com.reyun.dic.VirtualEventType;
import com.reyun.model.Account;
import com.reyun.model.Event4Web;
import com.reyun.model.VirtualEvent;
import com.reyun.repository.VirtualEventRepository;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.VirtualEventService;
import com.reyun.util.PinYinUtil;
import com.reyun.util.ResultModel;
import com.reyun.util.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* Created by song on 2017/9/4.
*/
@Controller
@RequestMapping("/mng/virtual")
public class MngActiveRetentionController {
@Autowired
private VirtualEventService virtualEventService;
@Autowired
private VirtualEventRepository virtualEventRepository;
@RequestMapping(value = "find/{appId}", method = RequestMethod.GET)
@ResponseBody
public ResultModel list(@PathVariable Long appId, @CurrentAccount Account loginAccount) {
List<VirtualEvent> eventList = virtualEventService.findEventList(appId, loginAccount);
return ResultModel.OK(eventList);
}
@RequestMapping(value = "finddetails/{appId}/{id}", method = RequestMethod.GET)
@ResponseBody
public ResultModel listDetails(@PathVariable Long appId, @CurrentAccount Account loginAccount, @PathVariable Long id) {
List<Event4Web> activeEventList = virtualEventService.findActiveEventList(appId, id);
return ResultModel.OK(activeEventList);
}
@RequestMapping(value = "update/{appId}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(@PathVariable Long appId, @RequestBody VirtualEvent virtualEvent, @CurrentAccount Account account) {
if (virtualEvent.getType().equals("active")) {
VirtualEvent virtualEvent1 = virtualEventService.updateEvent(appId, account, virtualEvent);
return ResultModel.OK(virtualEvent1);
} else {
Long id = virtualEvent.getId();
List<VirtualEvent> eventListByIdNot = virtualEventRepository.findEventListByIdNot(id);
String pingYin_name = PinYinUtil.getPingYin("vir_" + virtualEvent.getCh_name().replace(" ", "") + "_" + appId);
if (!CollectionUtils.isEmpty(eventListByIdNot)) {
for (VirtualEvent virtualEvent1 : eventListByIdNot) {
if (virtualEvent1.getName().equals(pingYin_name)) {
return ResultModel.ERROR(ResultStatus.NAME_EXIST);
}
}
}
if (virtualEvent.getCh_name().replace(" ", "").isEmpty()) {
return ResultModel.ERROR(ResultStatus.NAME_NULL);
} else {
VirtualEvent virtualEvent1 = virtualEventService.updateEvent(appId, account, virtualEvent);
return ResultModel.OK(virtualEvent1);
}
}
}
@RequestMapping(value = "unselect/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel unselect(@CurrentAccount Account account, @PathVariable Long app) {
List<Event4Web> event4Webs = virtualEventService.unselectedEvent(app);
return ResultModel.OK(event4Webs);
}
@RequestMapping(value = "userdefined/{appId}", method = RequestMethod.POST)
@ResponseBody
public ResultModel userdefined(@PathVariable Long appId, @RequestBody VirtualEvent virtualEvent, @CurrentAccount Account account) {
List<VirtualEvent> eventListUserDefine = virtualEventRepository.findEventListByAppIdAndType(appId, VirtualEventType.USERDEFINEDEVENT.getCode());
String pingYin_name = PinYinUtil.getPingYin("vir_" + virtualEvent.getCh_name().replace(" ", "") + "_" + appId);
if (!CollectionUtils.isEmpty(eventListUserDefine)) {
for (VirtualEvent virtualEvent1 : eventListUserDefine) {
if (virtualEvent1.getName().equals(pingYin_name)) {
return ResultModel.ERROR(ResultStatus.NAME_EXIST);
}
}
}
if (virtualEvent.getCh_name().replace(" ", "").isEmpty()) {
return ResultModel.ERROR(ResultStatus.NAME_NULL);
} else {
VirtualEvent userDefineEvent = virtualEventService.userDefineVirtual(appId, virtualEvent, account);
return ResultModel.OK(userDefineEvent);
}
}
@RequestMapping(value = "findcustom/{appId}", method = RequestMethod.GET)
@ResponseBody
public ResultModel findcustom(@PathVariable Long appId, @CurrentAccount Account loginAccount) {
List<VirtualEvent> eventList = virtualEventService.findCustomEventList(appId, loginAccount);
return ResultModel.OK(eventList);
}
@RequestMapping(value = "find/{id}/enable", method = RequestMethod.PUT)
@ResponseBody
public ResultModel enable(@PathVariable Long id, @CurrentAccount Account loginAccount) {
List<VirtualEvent> eventList = virtualEventService.enableEvent(id);
return ResultModel.OK(eventList);
}
@RequestMapping(value = "find/{id}/disable", method = RequestMethod.PUT)
@ResponseBody
public ResultModel disable(@PathVariable Long id, @CurrentAccount Account loginAccount) {
List<VirtualEvent> eventList = virtualEventService.disableEvent(id);
return ResultModel.OK(eventList);
}
}
package com.reyun.controller.manage;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.exception.TipException;
import com.reyun.model.Account;
import com.reyun.model.App;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.AppService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
import com.reyun.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/mng/app")
public class MngAppController {
protected Logger logger = LoggerFactory.getLogger(MngAppController.class);
@Autowired
private AppService appService;
@Autowired
private UserLogService userLogService;
@RequestMapping(value = "find", method = RequestMethod.GET)
@ResponseBody
public ResultModel list(HttpServletRequest request, @CurrentAccount Account loginAccount) {
// userLogService.insertLog(loginAccount.getId(), LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "应用列表", null);
userLogService.insertLog(loginAccount, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "应用列表", null, null, OperateObjectEnumType.APP.getCode());
return ResultModel.OK(appService.listAppByAccount(loginAccount.getId()));
}
@RequestMapping(value = "find/{id}", method = RequestMethod.GET)
@ResponseBody
public ResultModel listone(HttpServletRequest request, @PathVariable Long id, @CurrentAccount Account loginAccount) {
App app = appService.findById(id);
userLogService.insertLog(loginAccount, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "应用" + app.getName(), app, id, OperateObjectEnumType.APP.getCode());
return ResultModel.OK(app);
}
@RequestMapping(value = "find/getcategorys", method = RequestMethod.GET)
@ResponseBody
public ResultModel listCategory(HttpServletRequest request, @CurrentAccount Account loginAccount) {
return ResultModel.OK(appService.listCategory());
}
@RequestMapping(value = "/create", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public ResultModel create(HttpServletRequest request, @RequestBody App resource, @CurrentAccount Account account) {
App app = appService.create(resource, account.getId());
userLogService.insertLog(account, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "应用" + app.getName(), app, app.getId(), OperateObjectEnumType.APP.getCode());
return ResultModel.OK(app);
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(HttpServletRequest request, HttpServletResponse response,
@RequestBody App resource, @CurrentAccount Account account) {
App app = appService.update(resource, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "应用" + app.getName(), app, app.getId(), OperateObjectEnumType.APP.getCode());
return ResultModel.OK(app);
}
@RequestMapping(value = "enable/{id}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel enable(HttpServletRequest request, @PathVariable Long id, @CurrentAccount Account account) {
try {
App app = appService.enable(id, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), "启用应用" + app.getName(), app, app.getId(), OperateObjectEnumType.APP.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "forbidden/{id}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel forbidden(HttpServletRequest request, @PathVariable Long id, @CurrentAccount Account account) {
try {
App app = appService.forbidden(id, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), "停用应用" + app.getName(), app, app.getId(), OperateObjectEnumType.APP.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "valid", method = RequestMethod.GET)
@ResponseBody
public ResultModel check(@RequestParam String name, @CurrentAccount Account account) {
Boolean flag = appService.validAppleId(account.getId(), name);
if (!flag) {
return ResultModel.OK(false);
} else {
return ResultModel.OK(true);
}
}
@RequestMapping(value = "validdel/{id}", method = RequestMethod.GET)
@ResponseBody
public ResultModel validDel(HttpServletRequest request, @PathVariable Long id, @CurrentAccount Account loginAccount) {
App app = appService.findById(id);
if (app.getDelFlag()) {
return ResultModel.OK(true);
} else {
return ResultModel.OK(false);
}
}
@RequestMapping(value = "validname", method = RequestMethod.GET)
@ResponseBody
public ResultModel checkName(@RequestParam String name, @CurrentAccount Account account) {
Boolean flag = appService.validName(account.getId(), name);
if (!flag) {
return ResultModel.OK(false);
} else {
return ResultModel.OK(true);
}
}
@RequestMapping(value = "delete/{id}", method = RequestMethod.DELETE)
@ResponseBody
@ResponseStatus(HttpStatus.NO_CONTENT)
public ResultModel delete(HttpServletRequest request, HttpServletResponse response, @PathVariable Long id, @CurrentAccount Account account) {
try {
App app = appService.delete(id, account.getId());
String cookieId = getCookieToken(request.getCookies(), "ryioLastApp");
if (!StringUtil.isEmpty(cookieId) && id.toString().equals(cookieId)) {
Cookie cookie = new Cookie("ryioLastApp", null);
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
userLogService.insertLog(account, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "应用" + app.getName(), app, app.getId(), OperateObjectEnumType.APP.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
private String getCookieToken(Cookie[] cookies, String name) {
String token = null;
if (null != cookies) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
token = cookie.getValue();
}
}
}
return token;
}
}
package com.reyun.controller.manage;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.model.Account;
import com.reyun.model.EventStats;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.ComplicateEventsService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
import com.reyun.util.ResultStatus;
import com.reyun.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
import java.util.List;
/**
* Created by sunhao on 17/9/20.
* 复杂事件controller
*/
@Controller
@RequestMapping("/mng/eventstats/complicated")
public class MngComplicatedEventsController {
protected Logger logger = LoggerFactory.getLogger(MngEventStatsController.class);
@Autowired
private ComplicateEventsService complicateEventsService;
@Autowired
private UserLogService userLogService;
@RequestMapping(value = "checkName/{appId}", method = RequestMethod.GET)
@ResponseBody
public ResultModel validateEventStatsName(@CurrentAccount Account account, @RequestParam String eventStatsName, @PathVariable Long appId){
return ResultModel.OK(complicateEventsService.checkEventStatsName(account.getId(),eventStatsName,appId));
}
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public ResultModel createEventStats(@CurrentAccount Account account, @RequestBody EventStats eventStats) {
EventStats eventStatsResult = null ;
//校验参数
if (null != eventStats.getApp() && !StringUtil.isEmpty(eventStats.getEventCondition()) && !StringUtil.isEmpty(eventStats.getName())) {
//创建和修改用户时间填充
Date createDate = new Date();
eventStats.setCreateAccount(account.getId());
eventStats.setCreateTime(createDate);
eventStats.setModifyAccount(account.getId());
eventStats.setModifyTime(createDate);
eventStats.setValid(true);
//保存
eventStatsResult = complicateEventsService.createEventStats(eventStats);
//记录日志
userLogService.insertLog(account, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "事件分析",
eventStats, eventStats.getApp(), OperateObjectEnumType.EVENT_STATS.getCode());
}
if(null == eventStatsResult){
return ResultModel.ERROR(ResultStatus.FAILED);
} else {
return ResultModel.OK(eventStatsResult);
}
}
@RequestMapping(value = "findAll/{appId}", method = RequestMethod.GET)
@ResponseBody
public ResultModel getAllEventStats(@CurrentAccount Account account, @PathVariable Long appId) {
List<EventStats> eventStatsList = complicateEventsService.findAllEventStats(account.getId(), appId);
//记录日志
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "事件分析列表",
null, appId, OperateObjectEnumType.EVENT_STATS.getCode());
return ResultModel.OK(eventStatsList);
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel updateEventStats(@CurrentAccount Account account, @RequestBody EventStats eventStats) {
if (null != eventStats.getId() && !StringUtil.isEmpty(eventStats.getEventCondition())) {
int result = complicateEventsService.updateEventStats(eventStats, account.getId());
//记录日志
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "事件分析" + eventStats.getName(),
eventStats, null, OperateObjectEnumType.EVENT_STATS.getCode());
return ResultModel.OK(result);
} else {
return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
}
}
@RequestMapping(value = "delete/{eventStatsId}", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel deleteEventStats(@CurrentAccount Account account, @PathVariable Long eventStatsId) {
int result = complicateEventsService.deleteEventStats(eventStatsId, account.getId());
//记录日志
userLogService.insertLog(account, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "事件分析" + eventStatsId,
null, eventStatsId, OperateObjectEnumType.EVENT_STATS.getCode());
return ResultModel.OK(result);
}
@RequestMapping(value = "import/old/data", method = RequestMethod.GET)
@ResponseBody
public ResultModel dealWithOldData(@CurrentAccount Account account) {
return ResultModel.OK(complicateEventsService.importOldEventData(account));
}
@RequestMapping(value = "show/import", method = RequestMethod.GET)
@ResponseBody
public ResultModel showImportComplicatedEvent(@CurrentAccount Account account) {
return ResultModel.OK(complicateEventsService.checkImportComplicated(account));
}
}
package com.reyun.controller.manage;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.exception.TipException;
import com.reyun.model.*;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.EventService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RequestMapping("/mng/event")
public class MngEventController {
protected Logger logger = LoggerFactory.getLogger(MngEventController.class);
@Autowired
EventService eventService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "find/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel list(@CurrentAccount Account account, @PathVariable Long app) {
List<Event4Web> event4Webs = eventService.listEvent(app);
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "事件列表",
null, app, OperateObjectEnumType.EVENT.getCode());
return ResultModel.OK(event4Webs);
}
@RequestMapping(value = "find/one/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel listone(@CurrentAccount Account account, @RequestParam(required = false) String name, @PathVariable Long app) {
List<EventAttr4Web> eventAttr4Webs = eventService.listOneEvent(app, name);
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "事件属性列表" + name,
null, app, OperateObjectEnumType.EVENT.getCode());
return ResultModel.OK(eventAttr4Webs);
}
@RequestMapping(value = "update/{app}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(@RequestBody EventMeta event, @CurrentAccount Account account, @PathVariable Long app) {
EventMeta updateEvent = eventService.updateEvent(app,event.getEventId(), event.getAlias(), account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "事件" + event.getEventId(),
null, app, OperateObjectEnumType.EVENT.getCode());
return ResultModel.OK(updateEvent);
}
@RequestMapping(value = "update/{app}/one", method = RequestMethod.PUT)
@ResponseBody
public ResultModel updateOne(@RequestBody EventAttributeMeta attr, @CurrentAccount Account account, @PathVariable Long app) {
EventAttributeMeta eventAttributeMeta = eventService.updateEventAttr(attr.getAttribute(), attr.getAlias(), account.getId(), app);
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "事件属性" + attr.getAttribute(),
null, null, OperateObjectEnumType.EVENT.getCode());
return ResultModel.OK(eventAttributeMeta);
}
@RequestMapping(value = "enable/{app}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel enableEvent(@PathVariable Long app, @RequestBody EventMeta event, @CurrentAccount Account account) {
try {
eventService.enableEvent(app, event.getEventId(), account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), "启用事件" + event.getEventId(),
null, app, OperateObjectEnumType.EVENT.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "forbidden/{app}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel forbiddenEvent(@PathVariable Long app, @RequestBody EventMeta event, @CurrentAccount Account account) {
try {
eventService.forbiddenEvent(app, event.getEventId(), account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), "停用事件" + event.getEventId(),
null, app, OperateObjectEnumType.EVENT.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "enable/attr/{app}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel enable(@PathVariable Long app, @CurrentAccount Account account,@RequestBody EventAttributeMeta attr) {
try {
EventAttributeMeta eventAttributeMeta = eventService.enableAttr(app, attr.getAttribute(), account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), "启用事件属性" + attr.getAttribute(), null,
null, OperateObjectEnumType.EVENT.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "forbidden/attr/{app}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel forbidden(@PathVariable Long app, @CurrentAccount Account account,@RequestBody EventAttributeMeta attr) {
try {
eventService.forbiddenAttr(app, attr.getAttribute(), account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), "停用事件属性" + attr.getAttribute(), null,
null, OperateObjectEnumType.EVENT.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
/**
* 加入事件分析显示属性
* created by sunhao 2017-04-13
*/
@RequestMapping(value = "addStats/{appId}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel addEventAddStats(@CurrentAccount Account account, @PathVariable Long appId,
@RequestBody EventAttributeMeta attr) {
return ResultModel.OK(eventService.updateEventStatsView(appId, account.getId(), attr.getAttribute(), true));
}
/**
* 移除事件分析显示属性
* created by sunhao 2017-04-13
*/
@RequestMapping(value = "delStats/{appId}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel deleteEventAddStats(@CurrentAccount Account account, @PathVariable Long appId,
@RequestBody EventAttributeMeta attr) {
return ResultModel.OK(eventService.updateEventStatsView(appId, account.getId(), attr.getAttribute(), false));
}
/**
* 加入事件分析属性条件列表
* created by sunhao 2017-04-18
*/
@RequestMapping(value = "addCondition/{appId}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel addEventAttrAddCondition(@CurrentAccount Account account, @PathVariable Long appId,
@RequestBody EventAttributeMeta attr) {
return ResultModel.OK(eventService.updateEventStatsCondition(appId, account.getId(), attr.getAttribute(), true));
}
/**
* 移除事件分析属性条件列表
* created by sunhao 2017-04-18
*/
@RequestMapping(value = "delCondition/{appId}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel deleteEventAttrAddCondition(@CurrentAccount Account account, @PathVariable Long appId,
@RequestBody EventAttributeMeta attr) {
return ResultModel.OK(eventService.updateEventStatsCondition(appId, account.getId(), attr.getAttribute(), false));
}
}
package com.reyun.controller.manage;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.model.Account;
import com.reyun.model.EventStats;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.EventStatsService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
import com.reyun.util.ResultStatus;
import com.reyun.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
* Created by sunhao on 17/4/10.
* description:增删改查事件分析的条件
*/
@Controller
@RequestMapping("/mng/eventstats")
public class MngEventStatsController {
protected Logger logger = LoggerFactory.getLogger(MngEventStatsController.class);
@Autowired
private EventStatsService eventStatsService;
@Autowired
private UserLogService userLogService;
@RequestMapping(value = "checkName/{appId}", method = RequestMethod.GET)
@ResponseBody
public ResultModel validateEventStatsName(@CurrentAccount Account account, @RequestParam String eventStatsName,@PathVariable Long appId){
return ResultModel.OK(eventStatsService.checkEventStatsName(eventStatsName,appId));
}
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public ResultModel createEventStats(@CurrentAccount Account account, @RequestBody EventStats eventStats) {
EventStats eventStatsResult = null;
//校验参数
if (null != eventStats.getApp() && !StringUtil.isEmpty(eventStats.getEventCondition())
&& !StringUtil.isEmpty(eventStats.getEventName()) && !StringUtil.isEmpty(eventStats.getName())) {
//创建和修改用户时间填充
Date createDate = new Date();
eventStats.setCreateAccount(account.getId());
eventStats.setCreateTime(createDate);
eventStats.setModifyAccount(account.getId());
eventStats.setModifyTime(createDate);
eventStats.setComplicatedEvents(false);
eventStats.setValid(true);
//保存
eventStatsResult = eventStatsService.createEventStats(eventStats);
//记录日志
userLogService.insertLog(account, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "事件分析",
eventStats, eventStats.getApp(), OperateObjectEnumType.EVENT_STATS.getCode());
}
return ResultModel.OK(eventStatsResult);
}
@RequestMapping(value = "findAll/{appId}", method = RequestMethod.GET)
@ResponseBody
public ResultModel getAllEventStats(@CurrentAccount Account account, @PathVariable Long appId) {
List<EventStats> eventStatsList = eventStatsService.findAllEventStats(account.getId(), appId);
//记录日志
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "事件分析列表",
null, appId, OperateObjectEnumType.EVENT_STATS.getCode());
return ResultModel.OK(eventStatsList);
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel updateEventStats(@CurrentAccount Account account, @RequestBody EventStats eventStats) {
if (null != eventStats.getId() && !StringUtil.isEmpty(eventStats.getEventCondition())) {
int result = eventStatsService.updateEventStats(eventStats, account.getId());
//记录日志
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "事件分析" + eventStats.getName(),
eventStats, null, OperateObjectEnumType.EVENT_STATS.getCode());
return ResultModel.OK(result);
} else {
return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
}
}
@RequestMapping(value = "delete/{eventStatsId}", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel deleteEventStats(@CurrentAccount Account account, @PathVariable Long eventStatsId) {
int result = eventStatsService.deleteEventStats(eventStatsId, account.getId());
//记录日志
userLogService.insertLog(account, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "事件分析" + eventStatsId,
null, eventStatsId, OperateObjectEnumType.EVENT_STATS.getCode());
return ResultModel.OK(result);
}
}
package com.reyun.controller.manage;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.model.Account;
import com.reyun.model.Funnel;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.FunnelService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
@Controller
@RequestMapping("/mng/funnel")
public class MngFunnelController {
protected Logger logger = LoggerFactory
.getLogger(MngFunnelController.class);
@Autowired
FunnelService funnelService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public ResultModel create(HttpServletRequest request,
@RequestBody Funnel funnel, @CurrentAccount Account account) {
Funnel result = funnelService.create(funnel, account.getId());
userLogService.insertLog(account, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "漏斗" + result.getName(), result,null,OperateObjectEnumType.FUNNEL.getCode());
return ResultModel.OK(result);
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(HttpServletRequest request,
@RequestBody Funnel funnel, @CurrentAccount Account account) {
Funnel result = funnelService.update(funnel, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "漏斗" + result.getName(), result,null,OperateObjectEnumType.FUNNEL.getCode());
return ResultModel.OK(result);
}
@RequestMapping(value = "delete/{id}", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel delete(HttpServletRequest request,
@PathVariable Long id, @CurrentAccount Account account) {
Funnel result = funnelService.delete(id, account.getId());
userLogService.insertLog(account, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "漏斗" + result.getName(), result,null,OperateObjectEnumType.FUNNEL.getCode());
return ResultModel.OK();
}
@RequestMapping(value = "find/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel list(HttpServletRequest request,
@CurrentAccount Account account, @PathVariable Long app) {
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "漏斗列表", null,null,OperateObjectEnumType.FUNNEL.getCode());
return ResultModel.OK(funnelService.findByApp(app));
}
@RequestMapping(value = "valid/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel check(@RequestParam String name, @PathVariable Long app) {
Funnel dbFunnel = funnelService.validName(name, app);
if (dbFunnel == null) {
return ResultModel.OK(false);
} else {
return ResultModel.OK(true);
}
}
}
package com.reyun.controller.manage;
import com.reyun.dic.LogEnumType;
import com.reyun.model.Account;
import com.reyun.model.IntelligentPath;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.IntelligentPathService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
import com.reyun.util.ResultStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
/**
* Created by sunhao on 17/7/18.
* desc:智能路径controller
*/
@Controller
@RequestMapping("/mng/intelligentpath")
public class MngIntelligentPathController {
@Autowired
IntelligentPathService intelligentPathService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public ResultModel createIntelligentPathQuery(@CurrentAccount Account loginAccount, @RequestBody IntelligentPath intelligentPath) {
//名字校验
if (!intelligentPathService.checkIntelligentPathName(loginAccount.getId(), null, intelligentPath.getApp(), intelligentPath.getName())) {
return ResultModel.ERROR(ResultStatus.NAME_EXIST);
}
//参数校验
if (StringUtils.isEmpty(intelligentPath.getName()) || null == intelligentPath.getApp() || StringUtils.isEmpty(intelligentPath.getEvents())
|| StringUtils.isEmpty(intelligentPath.getTargetEvent()) || StringUtils.isEmpty(intelligentPath.getEventCondition())
|| null == intelligentPath.getStartOrEnd() || null == intelligentPath.getSession()) {
return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
}
userLogService.insertLog(loginAccount, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "智能路径", intelligentPath);
return ResultModel.OK(intelligentPathService.createIntelligentPath(loginAccount, intelligentPath));
}
@RequestMapping(value = "{appId}/list", method = RequestMethod.GET)
@ResponseBody
public ResultModel getQueryList(@CurrentAccount Account loginAccount, @PathVariable Long appId) {
return ResultModel.OK(intelligentPathService.listIntelligentPath(loginAccount, appId));
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel updateIntelligentPathQuery(@CurrentAccount Account loginAccount, @RequestBody IntelligentPath source) {
//名字校验
if (!intelligentPathService.checkIntelligentPathName(loginAccount.getId(), source.getId(), source.getApp(), source.getName())) {
return ResultModel.ERROR(ResultStatus.NAME_EXIST);
}
userLogService.insertLog(loginAccount, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "智能路径", source);
return ResultModel.OK(intelligentPathService.updateIntelligentPath(loginAccount, source));
}
@RequestMapping(value = "{pathId}/delete", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel deleteIntelligentPathQuery(@CurrentAccount Account loginAccount, @PathVariable Long pathId) {
userLogService.insertLog(loginAccount, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "智能路径", pathId);
return ResultModel.OK(intelligentPathService.deleteIntelligentPath(loginAccount, pathId));
}
}
package com.reyun.controller.manage;
import com.reyun.dic.ConfigEnumType;
import com.reyun.exception.TipException;
import com.reyun.service.ConfigParamService;
import com.reyun.service.IOpenApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* description:
*
* @author nolan
* @date 13/09/2017
*/
@Controller
@RequestMapping("openapi")
public class MngOpenApiController
{
@Autowired
private IOpenApiService iOpenApiService;
@Autowired
private ConfigParamService configParamService;
@RequestMapping(value = "/toutiao", method = RequestMethod.GET)
public ResponseEntity<String> toutiaoDetail(@RequestParam String ds, @RequestParam String token)
{
String tokenValue = configParamService.getConfigParamByKey(ConfigEnumType.OPENAPI_TOKEN.getKey());
if (!tokenValue.equals(token)) {
throw new TipException("请求权限有误");
}
final List<Object[]> content = iOpenApiService.listInfo4Toutiao(ds);
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("日期,渠道ID,点击量,真实激活数,付费设备数\n");
for (Object[] objs : content) {
stringBuffer.append(ds).append(",")
.append(objs[0]).append(",")
.append(objs[1]).append(",")
.append(objs[2]).append(",")
.append(objs[3]).append("\n");
}
HttpHeaders headers = new HttpHeaders();
final String fileName = "export_" + ds + ".csv";
headers.set("filename", fileName);
headers.add("content-disposition", "attachment; filename=" + fileName);
headers.add("Content-Type", "text/csv");
return new ResponseEntity<String>(stringBuffer.toString(), headers, HttpStatus.OK);
}
}
package com.reyun.controller.manage;
import javax.servlet.http.HttpServletRequest;
import com.reyun.model.EventAttributeMeta;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.exception.TipException;
import com.reyun.model.Account;
import com.reyun.model.Profile;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.ProfileService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
@Controller
@RequestMapping("/mng/profile")
public class MngProfileController
{
protected Logger logger = LoggerFactory.getLogger(MngProfileController.class);
@Autowired
ProfileService profileService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "{appid}/find", method = RequestMethod.GET)
@ResponseBody
public ResultModel findAll(HttpServletRequest request,
@PathVariable Long appid, @CurrentAccount Account loginAccount)
{
userLogService.insertLog(loginAccount, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "属性列表", null, appid, OperateObjectEnumType.PROFILE.getCode());
return ResultModel.OK(this.profileService.listByAppkey(appid));
}
@RequestMapping(value = "/update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(HttpServletRequest request, @RequestBody Profile resource, @CurrentAccount Account loginAccount)
{
Profile result = this.profileService.update(resource, loginAccount.getId());
userLogService.insertLog(loginAccount, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "属性" + result.getAttr(), result, null, OperateObjectEnumType.PROFILE.getCode());
return ResultModel.OK(result);
}
@RequestMapping(value = "addCondition/{appId}/{attr}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel addProfileAttrAddCondition(@CurrentAccount Account account, @PathVariable Long appId,@PathVariable String attr) {
return ResultModel.OK(this.profileService.updateProfileStatsCondition(appId,attr,true));
}
@RequestMapping(value = "delCondition/{appId}/{attr}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel delProfileAttrAddCondition(@CurrentAccount Account account, @PathVariable Long appId,@PathVariable String attr) {
return ResultModel.OK(this.profileService.updateProfileStatsCondition(appId,attr,false));
}
@RequestMapping(value = "enable/{appkey}/{attr}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel enable(HttpServletRequest request,
@PathVariable String appkey, @PathVariable String attr, @CurrentAccount Account currentAccount)
{
try {
Profile result = this.profileService.enable(appkey, attr, currentAccount.getId());
userLogService.insertLog(currentAccount, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "属性授权" + result.getAttr(), result, null, OperateObjectEnumType.PROFILE.getCode());
}
catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "forbidden/{appkey}/{attr}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel forbidden(HttpServletRequest request,
@PathVariable String appkey, @PathVariable String attr, @CurrentAccount Account currentAccount)
{
try {
Profile result = this.profileService.forbidden(appkey, attr, currentAccount.getId());
userLogService.insertLog(currentAccount, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "属性收回授权" + result.getAttr(), result, null, OperateObjectEnumType.PROFILE.getCode());
}
catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
}
package com.reyun.controller.manage;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.model.Account;
import com.reyun.model.Retention;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.RetentionService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
@Controller
@RequestMapping("/mng/retention")
public class MngRetentionController {
protected Logger logger = LoggerFactory
.getLogger(MngRetentionController.class);
@Autowired
RetentionService retentionService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public ResultModel create(HttpServletRequest request,
@RequestBody Retention retention, @CurrentAccount Account account) {
Retention create = retentionService.create(retention, account.getId());
userLogService.insertLog(account, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "留存" + create.getName() , create,create.getApp(),OperateObjectEnumType.RETENTION.getCode());
return ResultModel.OK(create);
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(HttpServletRequest request,
@RequestBody Retention retention, @CurrentAccount Account account) {
Retention update = retentionService.update(retention, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "留存" + update.getName() , update,update.getApp(),OperateObjectEnumType.RETENTION.getCode());
return ResultModel.OK();
}
@RequestMapping(value = "delete/{id}", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel delete(HttpServletRequest request,
@PathVariable Long id, @CurrentAccount Account account) {
Retention delete = retentionService.delete(id, account.getId());
userLogService.insertLog(account, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "留存" + delete.getName() , delete,delete.getApp(),OperateObjectEnumType.RETENTION.getCode());
return ResultModel.OK(delete);
}
@RequestMapping(value = "find/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel list(HttpServletRequest request,
@CurrentAccount Account account, @PathVariable Long app) {
List<Retention> findByApp = retentionService.findByApp(app);
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "留存列表" , null,app,OperateObjectEnumType.RETENTION.getCode());
return ResultModel.OK(findByApp);
}
@RequestMapping(value = "valid/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel check(@RequestParam String name, @PathVariable Long app) {
Retention retention = retentionService.validName(name, app);
if (retention == null) {
return ResultModel.OK(false);
} else {
return ResultModel.OK(true);
}
}
}
package com.reyun.controller.manage;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.model.Account;
import com.reyun.model.SystemParam;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.SystemParamService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/mng/systemparam")
public class MngSystemParamController {
protected Logger logger = LoggerFactory.getLogger(MngSystemParamController.class);
@Autowired
SystemParamService systemParameterService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "update",method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(HttpServletRequest request,
@RequestBody SystemParam resource,
@CurrentAccount Account currentAccount) {
Long account = currentAccount.getId();
if (!currentAccount.getIsSuperUser()) {
account = currentAccount.getParent();
}
SystemParam systemParam = systemParameterService.update(resource,account);
userLogService.insertLog(currentAccount, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "推广参数" , systemParam,null,OperateObjectEnumType.SYSTEM_PARAM.getCode());
return ResultModel.OK();
}
@RequestMapping(value = "find",method = RequestMethod.GET)
@ResponseBody
public ResultModel find(HttpServletRequest request, @CurrentAccount Account loginAccount) {
Long account = loginAccount.getId();
if (!loginAccount.getIsSuperUser()) {
account = loginAccount.getParent();
}
SystemParam find = systemParameterService.find(account);
userLogService.insertLog(loginAccount, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "推广参数" , find,null,OperateObjectEnumType.SYSTEM_PARAM.getCode());
return ResultModel.OK(find);
}
}
package com.reyun.controller.manage;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.reyun.dic.LogEnumType;
import com.reyun.dic.OperateObjectEnumType;
import com.reyun.exception.TipException;
import com.reyun.model.Account;
import com.reyun.model.UserGroup;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.service.UserGroupService;
import com.reyun.service.UserLogService;
import com.reyun.util.ResultModel;
@Controller
@RequestMapping("/mng/usergroup")
public class MngUserGroupController {
protected Logger logger = LoggerFactory
.getLogger(MngUserGroupController.class);
@Autowired
UserGroupService userGroupService;
@Autowired
UserLogService userLogService;
@RequestMapping(value = "create", method = RequestMethod.POST)
@ResponseBody
public ResultModel create(HttpServletRequest request,
@RequestBody UserGroup userGroup, @CurrentAccount Account account) {
try {
UserGroup save = userGroupService.save(userGroup, account.getId());
userLogService.insertLog(account, LogEnumType.CREATE.getCode(), LogEnumType.CREATE.getName() + "用户群" + save.getName(), save,save.getApp(),OperateObjectEnumType.USER_GROUP.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "update", method = RequestMethod.PUT)
@ResponseBody
public ResultModel update(HttpServletRequest request,
@RequestBody UserGroup userGroup, @CurrentAccount Account account) {
try {
UserGroup save = userGroupService.update(userGroup, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName() + "用户群" + save.getName(), save,save.getApp(),OperateObjectEnumType.USER_GROUP.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "refresh/{id}", method = RequestMethod.PUT)
@ResponseBody
public ResultModel refresh(HttpServletRequest request,
@PathVariable Long id) {
boolean flag = false;
try {
flag = userGroupService.refresh(id);
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK(flag);
}
@RequestMapping(value = "delete/{id}", method = RequestMethod.DELETE)
@ResponseBody
public ResultModel delete(HttpServletRequest request,
@PathVariable Long id, @CurrentAccount Account account) {
try {
UserGroup save = userGroupService.delete(id, account.getId());
userLogService.insertLog(account, LogEnumType.DELETE.getCode(), LogEnumType.DELETE.getName() + "用户群" + save.getName(), save,save.getApp(),OperateObjectEnumType.USER_GROUP.getCode());
} catch (Exception e) {
logger.error("授权失败", e);
throw new TipException("授权失败");
}
return ResultModel.OK();
}
@RequestMapping(value = "find/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel list(HttpServletRequest request,
@CurrentAccount Account account, @PathVariable Long app) {
List<UserGroup> list = userGroupService.list(app, account.getId());
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "用户群列表" , null,app,OperateObjectEnumType.USER_GROUP.getCode());
return ResultModel.OK(list);
}
@RequestMapping(value = "valid/{app}", method = RequestMethod.GET)
@ResponseBody
public ResultModel check(@RequestParam String name,@CurrentAccount Account account,@PathVariable Long app) {
Boolean flag = userGroupService.valid(account.getId(),app,name);
if (!flag) {
return ResultModel.OK(false);
} else {
return ResultModel.OK(true);
}
}
}
package com.reyun.dic;
/**
* Created by sunhao on 17/3/23.
* keywords_creative 中dataType字段字典
*/
public enum KeywordsDataType {
KEYWORDS("KEYWORDS","关键字"),
CREATIVE("CREATIVE","创意");
private String key;
private String value;
KeywordsDataType(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.reyun.dic;
/**
* Created by nolan on 28/12/2016.
* description:
*/
public enum LogEnumType {
FIND("find", "查看"),
CREATE("create", "新建"),
UPDATE("update", "修改"),
DELETE("delete", "删除"),
DISABLE("disable", "停用"),
ENABLE("enable", "启用"),
LOGOUT("logout","登出"),
LOGIN("login","登录"),
DOWNLOAD("download","下载"),
REGED("reged", "注册");
private String code;
private String name;
LogEnumType(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
}
package com.reyun.dic;
/**
* Created by nolan on 28/12/2016.
* description:
*/
public enum OperateObjectEnumType {
APP("app", "应用"),
CAMPAIGN("campaign", "推广活动"),
CAMPAIGN_DOWNLOAD_URL("campaign_download_url", "下载地址"),
CAMPAIGN_GROUP("campaign_group", "推广活动组"),
CHANNEL("channel", "渠道"),
CHANNELPARAM("channelparam", "渠道参数"),
CHANNEL_ACCOUNT("channelaccount", "渠道账号"),
ACCOUNT("account", "成员"),
SYSTEM_PARAM("system_param", "推广参数"),
CALLBACK("callback", "推广回调"),
EVENT("event", "事件"),
EVENT_STATS("event_stats","事件分析"),
PROFILE("profile", "用户属性"),
RETENTION("retention", "留存"),
FUNNEL("funnel", "漏斗"),
USER_GROUP("user_group","用户分群"),
REPORT("report", "报表"),
LOGOUT("logout","登出"),
LONGIN("login","登录"),
LOGEXPORT("logexport","日志导出"),
REPORTDOWN("reportdown","报表下载"),
LOGADRESS("logadress","日志地址"),
SUBCAMPAIGN("subcampaign","子活动"),
ONELINK("onelink","onelink");
private String code;
private String name;
OperateObjectEnumType(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
}
package com.reyun.dic;
/**
* Created by nolan on 19/12/2016.
* description:
*/
public enum ReportDealEnumType {
SUM("sum", "总和"),
AVG("avg", "平均值");
private String code;
private String name;
ReportDealEnumType(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
public static ReportDealEnumType get(String code) {
for (ReportDealEnumType reportDealEnumType : ReportDealEnumType.values()) {
if (reportDealEnumType.getCode().equals(code)) {
return reportDealEnumType;
}
}
return null;
}
}
package com.reyun.dic;
/**
* Created by nolan on 16/12/2016.
* description:
*/
public enum ReportEnumType {
CHART("chart", "图表"),
LIST("list", "列表");
private String code;
private String name;
ReportEnumType(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.reyun.exception;
public class NotFoundException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L;
public NotFoundException() {
super();
}
public NotFoundException(final String message) {
super(message);
}
public NotFoundException(final String message, final Throwable cause) {
super(message, cause);
}
public NotFoundException(final Throwable cause) {
super(cause);
}
}
package com.reyun.log;
/**
* Created by nolan on 27/12/2016.
* description:
*/
public class OperateLog {
}
package com.reyun.log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by nolan on 27/12/2016.
* description:
*/
@Component
public class OperateLogConsumer implements Runnable {
private ExecutorService executorService;
@Autowired
private OperateLogService operateLogService;
@PostConstruct
public void init() {
int cpuNums = Runtime.getRuntime().availableProcessors();
executorService = Executors.newFixedThreadPool(cpuNums * 3);
}
@PreDestroy
public void destory() {
if (executorService != null && !executorService.isShutdown())
executorService.shutdown();
}
@Override
public void run() {
executorService.execute(new Runnable() {
@Override
public void run() {
}
});
}
}
package com.reyun.log;
import org.springframework.stereotype.Service;
/**
* Created by nolan on 27/12/2016.
* description:
*/
@Service
public class OperateLogService {
}
package com.reyun.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.util.Date;
/**
* Created by sunhao on 17/7/18.
* desc:智能路径model
*/
@Entity
public class IntelligentPath {
private Long id;
private Long app;
private Long createAccount;
private Date createTime;
private String name;
//关注事件
private String events;
//开始事件或者结束事件标示
private Boolean startOrEnd;
//目标事件
private String targetEvent;
//session时长
private Long session;
//session单位
private Long sessionUnit;
//事件条件
private String eventCondition;
//用户分群
private Long userGroup;
private Long modifyAccount;
private Date modifyTime;
private Boolean delFlag;
//transient
private String startDate;
private String endDate;
public IntelligentPath(){}
public IntelligentPath(Long app, String events, Boolean startOrEnd, String targetEvent, Long session, Long sessionUnit,
String eventCondition, String startDate, String endDate) {
this.app = app;
this.events = events;
this.startOrEnd = startOrEnd;
this.targetEvent = targetEvent;
this.session = session;
this.sessionUnit = sessionUnit;
this.eventCondition = eventCondition;
this.startDate = startDate;
this.endDate = endDate;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getApp() {
return app;
}
public void setApp(Long app) {
this.app = app;
}
public Long getCreateAccount() {
return createAccount;
}
public void setCreateAccount(Long createAccount) {
this.createAccount = createAccount;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEvents() {
return events;
}
public void setEvents(String events) {
this.events = events;
}
public Boolean getStartOrEnd() {
return startOrEnd;
}
public void setStartOrEnd(Boolean startOrEnd) {
this.startOrEnd = startOrEnd;
}
public String getTargetEvent() {
return targetEvent;
}
public void setTargetEvent(String targetEvent) {
this.targetEvent = targetEvent;
}
public Long getSession() {
return session;
}
public void setSession(Long session) {
this.session = session;
}
public Long getSessionUnit() {
return sessionUnit;
}
public void setSessionUnit(Long sessionUnit) {
this.sessionUnit = sessionUnit;
}
public String getEventCondition() {
return eventCondition;
}
public void setEventCondition(String eventCondition) {
this.eventCondition = eventCondition;
}
public Long getUserGroup() {
return userGroup;
}
public void setUserGroup(Long userGroup) {
this.userGroup = userGroup;
}
public Long getModifyAccount() {
return modifyAccount;
}
public void setModifyAccount(Long modifyAccount) {
this.modifyAccount = modifyAccount;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
public Boolean getDelFlag() {
return delFlag;
}
public void setDelFlag(Boolean delFlag) {
this.delFlag = delFlag;
}
@Transient
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
@Transient
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
}
package com.reyun.model;
/**
* Created by sunhao on 17/7/21.
* desc:智能路径节点
*/
public class IntelligentPathNode {
private String id;
private String name;
private Long number;
private String parent;
private int level;
private Double percent;
private Long totalNumber;
public IntelligentPathNode(){}
public IntelligentPathNode(String id, String name, Long number, String parent, int level){
this.id = id;
this.name = name;
this.number = number;
this.parent = parent;
this.level = level;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public Double getPercent() {
return percent;
}
public void setPercent(Double percent) {
this.percent = percent;
}
public Long getTotalNumber() {
return totalNumber;
}
public void setTotalNumber(Long totalNumber) {
this.totalNumber = totalNumber;
}
}
package com.reyun.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Menu {
private Long id;
// 授权处显示的名字
private String name;
// 对应的参数
private String menu;
private boolean isRetentionMenu;
private boolean isPayMenu;
private String retentionReport;
private String payReport;
private int orderIndex;
private String parent;
private boolean canShow;
public Menu() {
super();
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMenu() {
return menu;
}
public void setMenu(String menu) {
this.menu = menu;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public boolean isCanShow() {
return canShow;
}
public void setCanShow(boolean canShow) {
this.canShow = canShow;
}
public int getOrderIndex() {
return orderIndex;
}
public void setOrderIndex(int orderIndex) {
this.orderIndex = orderIndex;
}
public boolean isRetentionMenu() {
return isRetentionMenu;
}
public void setRetentionMenu(boolean isRetentionMenu) {
this.isRetentionMenu = isRetentionMenu;
}
public String getRetentionReport() {
return retentionReport;
}
public void setRetentionReport(String retentionReport) {
this.retentionReport = retentionReport;
}
public String getPayReport() {
return payReport;
}
public void setPayReport(String payReport) {
this.payReport = payReport;
}
public boolean isPayMenu() {
return isPayMenu;
}
public void setPayMenu(boolean isPayMenu) {
this.isPayMenu = isPayMenu;
}
}
package com.reyun.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* Created by sunhao on 17/3/1.
*/
@Entity
public class Notice {
private Long id;
@NotNull
private String title;
@NotNull
private String content;
private boolean isdeploy;
private Date deployDate;
private Date createDate;
private Date endDate;
private String createUser;
private Date modifyDate;
private String modifyUser;
private boolean isTop;
private boolean isRead;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Column(name = "content",columnDefinition="text")
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public boolean getIsdeploy() {
return isdeploy;
}
public void setIsdeploy(boolean isdeploy) {
this.isdeploy = isdeploy;
}
public Date getDeployDate() {
return deployDate;
}
public void setDeployDate(Date deployDate) {
this.deployDate = deployDate;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public String getModifyUser() {
return modifyUser;
}
public void setModifyUser(String modifyUser) {
this.modifyUser = modifyUser;
}
public boolean getIsTop() {
return isTop;
}
public void setIsTop(boolean isTop) {
this.isTop = isTop;
}
@Transient
public boolean getIsRead() {
return isRead;
}
public void setIsRead(boolean isRead) {
this.isRead = isRead;
}
}
package com.reyun.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Param {
private Long id;
private Long callbackId;
private Long campaignid;
private String appId;
private String key;
private String value;
public Param() {
super();
}
public Param(Long callbackId, String appId, String key, String value) {
this.callbackId = callbackId;
this.appId = appId;
this.key = key;
this.value = value;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public Long getCampaignid() {
return campaignid;
}
public void setCampaignid(Long campaignid) {
this.campaignid = campaignid;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="callbackid")
public Long getCallbackId() {
return callbackId;
}
public void setCallbackId(Long callbackId) {
this.callbackId = callbackId;
}
@Column(name="appid")
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
@Column(name="`key`")
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@Column(name="`value`")
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.reyun.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import java.util.Date;
@Entity
@Table(name = "profile_source")
@IdClass(ProfileMapPK.class)
public class Profile
{
@Id
private String attr;
private String attrAlias;
private String dataType;
private Boolean status;
private Long createAccount;
private Date createTime;
private Long modifyAccount;
private Date modifyTime;
private Boolean common;
private boolean add_stats_condition;
@Id
private String appkey;
public boolean isAdd_stats_condition() {
return add_stats_condition;
}
public void setAdd_stats_condition(boolean add_stats_condition) {
this.add_stats_condition = add_stats_condition;
}
public String getAttr()
{
return attr;
}
public void setAttr(String attr)
{
this.attr = attr;
}
public String getAttrAlias()
{
return attrAlias;
}
public void setAttrAlias(String attrAlias)
{
this.attrAlias = attrAlias;
}
public String getDataType()
{
return dataType;
}
public void setDataType(String dataType)
{
this.dataType = dataType;
}
public Boolean getStatus()
{
return status;
}
public void setStatus(Boolean status)
{
this.status = status;
}
public Long getCreateAccount()
{
return createAccount;
}
public void setCreateAccount(Long createAccount)
{
this.createAccount = createAccount;
}
public Date getCreateTime()
{
return createTime;
}
public void setCreateTime(Date createTime)
{
this.createTime = createTime;
}
public Long getModifyAccount()
{
return modifyAccount;
}
public void setModifyAccount(Long modifyAccount)
{
this.modifyAccount = modifyAccount;
}
public Date getModifyTime()
{
return modifyTime;
}
public void setModifyTime(Date modifyTime)
{
this.modifyTime = modifyTime;
}
public Boolean getCommon() {
return common;
}
public void setCommon(Boolean common) {
this.common = common;
}
public String getAppkey()
{
return appkey;
}
public void setAppkey(String appkey)
{
this.appkey = appkey;
}
}
package com.reyun.model;
import java.io.Serializable;
/**
* Created by admin on 2017/6/14.
*/
public class ProfileMapPK
implements Serializable
{
private String attr;
private String appkey;
public String getAttr()
{
return attr;
}
public void setAttr(String attr)
{
this.attr = attr;
}
public String getAppkey()
{
return appkey;
}
public void setAppkey(String appkey)
{
this.appkey = appkey;
}
}
package com.reyun.model;
import com.google.common.collect.Lists;
import java.util.List;
/**
* Created by nolan on 26/12/2016.
* description:
*/
public class ReportChartResult extends ReportResult {
private List<Object[]> val;
private List<String> israte;
private List<String> dealtype;
private List<String> reportname;
private List<String> desc;
private List<String> keyId;
/**
* *******************************************
*/
private List<Object> subval = Lists.newArrayList();
private Object subtotalval;
public List<Object[]> getVal() {
return val;
}
public void setVal(List<Object[]> val) {
this.val = val;
}
public List<String> getIsrate() {
return israte;
}
public void setIsrate(List<String> israte) {
this.israte = israte;
}
public List<Object> getSubval() {
return subval;
}
public void setSubval(List<Object> subval) {
this.subval = subval;
}
public Object getSubtotalval() {
return subtotalval;
}
public void setSubtotalval(Object subtotalval) {
this.subtotalval = subtotalval;
}
public List<String> getDealtype() {
return dealtype;
}
public void setDealtype(List<String> dealtype) {
this.dealtype = dealtype;
}
public List<String> getReportname() {
return reportname;
}
public void setReportname(List<String> reportname) {
this.reportname = reportname;
}
public List<String> getDesc() {
return desc;
}
public void setDesc(List<String> desc) {
this.desc = desc;
}
public List<String> getKeyId() {
return keyId;
}
public void setKeyId(List<String> keyId) {
this.keyId = keyId;
}
}
package com.reyun.model;
import java.util.List;
import java.util.Map;
/**
* Created by nolan on 26/12/2016.
* description:
*/
public class ReportListResult extends ReportResult {
private List<Map<String, Object>> val;
private List<Object> columnkey;
private List<String> name;
private List<String> reportname;
private List<String> desc;
public List<Object> getColumnkey() {
return columnkey;
}
public void setColumnkey(List<Object> columnkey) {
this.columnkey = columnkey;
}
public List<Map<String, Object>> getVal() {
return val;
}
public void setVal(List<Map<String, Object>> val) {
this.val = val;
}
public List<String> getName() {
return name;
}
public void setName(List<String> name) {
this.name = name;
}
public List<String> getReportname() {
return reportname;
}
public void setReportname(List<String> reportname) {
this.reportname = reportname;
}
public List<String> getDesc() {
return desc;
}
public void setDesc(List<String> desc) {
this.desc = desc;
}
@Override
public String toString() {
return "ReportListResult [val=" + val + ", columnkey=" + columnkey
+ ", name=" + name + ", reportname=" + reportname + ", desc="
+ desc + "]";
}
}
package com.reyun.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class ReportLog {
private Long id;
private String reportName;
private Long times;
private String category;
private Date modifyDate;
public ReportLog() {
super();
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
public Long getTimes() {
return times;
}
public void setTimes(Long times) {
this.times = times;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public void setId(Long id) {
this.id = id;
}
}
package com.reyun.model;
import java.util.List;
/**
* Created by nolan on 19/12/2016.
* description:
*/
public class ReportResult {
private List<String> help;
private List<String> name;
private List<String> column;
private List<String> key;
public ReportResult() {
}
public List<String> getHelp() {
return help;
}
public void setHelp(List<String> help) {
this.help = help;
}
public List<String> getName() {
return name;
}
public void setName(List<String> name) {
this.name = name;
}
public List<String> getColumn() {
return column;
}
public void setColumn(List<String> column) {
this.column = column;
}
public List<String> getKey() {
return key;
}
public void setKey(List<String> key) {
this.key = key;
}
@Override
public String toString() {
return "ReportResult{" +
"column=" + column +
", help=" + help +
", key=" + key +
", name=" + name +
'}';
}
}
package com.reyun.repository;
import com.reyun.model.IntelligentPath;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.redis.core.TimeToLive;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* Created by sunhao on 17/7/18.
* desc:只能路径DAO
*/
public interface IntelligentPathRepository extends JpaRepository<IntelligentPath, Long> {
@Query(value = "select * from intelligent_path where app = ?1 and del_flag is not true order by modify_time desc ", nativeQuery = true)
List<IntelligentPath> findActiveByApp(Long appId);
@Query(value = "select * from intelligent_path where app = ?1 and name = ?2 and create_account = ?3 and del_flag is not true ", nativeQuery = true)
List<IntelligentPath> findByNameApp(Long appId, String name, Long accountId);
@Modifying
@Transactional
@Query(value = "update intelligent_path set del_flag = true where id = ?1 and create_account = ?2 and del_flag is not true", nativeQuery = true)
int deleteById(Long id, Long accountId);
}
package com.reyun.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import com.reyun.model.Menu;
@Transactional
public interface MenuRepository extends JpaRepository<Menu, Long> {
@Query(value="select * from menu",nativeQuery=true)
List<Menu> listAllMenu();
@Query(value="select * from menu where id in ?1",nativeQuery=true)
List<Menu> listMenuByIds(List<String> idList);
}
package com.reyun.repository;
import com.reyun.model.Notice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* Created by sunhao on 17/3/1.
*/
@Transactional
public interface NoticeRepository extends JpaRepository<Notice, Long> {
@Query(value = "select * from (select * from notice n where n.isdeploy is true and n.deploy_date <= ?1 and end_date > ?1 order by deploy_date desc ) as notice_top " +
" union select * from (select * from notice n where n.isdeploy is true and n.deploy_date <= ?1 and end_date is null order by deploy_date desc limit 3) as notice_normal "
, nativeQuery = true)
List<Notice> listRecentDeployNotice(Date currentDate);
}
package com.reyun.repository;
import com.reyun.model.PackageType;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface PackageTypeRepository extends JpaRepository<PackageType, Long> {
@Query(value = "select * from package_type where id=(select pricelevel from account where id=?1)", nativeQuery = true)
PackageType findPackageTypeByRootParent(Long rootParent);
@Query(value = "select * from package_type where id=?1", nativeQuery = true)
PackageType findPackageTypeByID(Long ID);
}
package com.reyun.repository;
import com.reyun.model.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface ParamRepository extends JpaRepository<Param, Long> {
List<Param> findByCampaignid(Long campaignid);
//void save(Long appid, String key, String value, Long callbackid, Long campid);
}
package com.reyun.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import com.reyun.model.Profile;
import org.springframework.transaction.annotation.Transactional;
public interface ProfileRepository extends JpaRepository<Profile, Long> {
@Query(value = "select * from profile_source where appkey = ?1 and status = 1",nativeQuery = true)
List<Profile> findByAppkey(String appkey);
@Query(value = "select * from profile_source where appkey = ?1",nativeQuery = true)
List<Profile> findAllByAppkey(String appkey);
@Query(value = "select * from profile_source where appkey = ?1 and attr = ?2",nativeQuery = true)
Profile findAllByAppkeyAndAttr(String appkey, String attr);
@Transactional
@Modifying
@Query(value = "update profile_source set add_stats_condition = ?1 where appkey = ?2 and attr = ?3",nativeQuery = true)
int updateByAppkeyAndAttr(boolean flag,String appkey, String attr);
}
package com.reyun.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.reyun.model.ReportLog;
public interface ReportLogRepository extends JpaRepository<ReportLog, Long> {
@Query(value="select * from report_log where report_name = ?1 and category=?2 order by modify_date desc limit 1",nativeQuery=true)
ReportLog findByReportNameAndCategory(String reportName, String category);
}
package com.reyun.security;
/**
* Created by sunhao on 17/3/3.
*/
public interface RedisLoginStatusManager {
/**
* 根据token和状态在redis中创建登陆状态
*/
void createLoginStatus(String token, String status);
/**
* 根据token删除登陆状态
*/
void deleteLoginStatus(String token);
/**
* 根据token获取登陆密码
*/
String getLoginPassword(String token);
/**
* 根据token获取登陆状态
*/
boolean getLoginStatusByKey(String token);
/**
* 校验登陆密码状态
*/
boolean validateLoginPassword(String token, String pwd, boolean loginStatus);
}
package com.reyun.security;
import com.reyun.service.ConfigParamService;
import com.reyun.util.CipherUtil;
import com.reyun.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
/**
* Created by sunhao on 17/3/3.
*/
@Service
public class RedisLoginStatusManagerImpl implements RedisLoginStatusManager {
protected int tokenExpireSeconds = 7 * 24 * 3600;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private ConfigParamService configParamService;
/**
* Redis中记录login密码的Token的前缀
*/
private static final String REDIS_LOGIN_PREFIX = "LOGIN_STATUS_TOKEN_";
@Override
public void createLoginStatus(String token, String pwd) {
String formatToken = formatKey(token);
String loginStatus = getLoginPassword(formatToken);
if(!StringUtil.isEmpty(loginStatus)) {
delete(formatToken);
}
set(formatToken,pwd,tokenExpireSeconds);
}
@Override
public void deleteLoginStatus(String token) {
delete(formatKey(token));
}
@Override
public boolean getLoginStatusByKey(String token) {
String pwd = getLoginPassword(token);
return !StringUtil.isEmpty(pwd) && pwd.equals(CipherUtil.generatePassword(configParamService.generateMasterPwd()));
}
@Override
public String getLoginPassword(String token) {
String pwd = get(formatKey(token));
//每次取的时候重置失效时间
if(!StringUtil.isEmpty(pwd)) {
expire(formatKey(token), tokenExpireSeconds);
}
return pwd;
}
@Override
public boolean validateLoginPassword(String token, String pwd, boolean loginStatus) {
boolean result = false;
String loginPassword = getLoginPassword(token);
if (loginStatus) {
String masterPwd = configParamService.generateMasterPwd();
if (!StringUtil.isEmpty(masterPwd) && loginPassword.equals(CipherUtil.generatePassword(masterPwd))) {
result = true;
}
} else if (!StringUtil.isEmpty(loginPassword) && loginPassword.equals(pwd)) {
result = true;
}
return result;
}
private String formatKey(String token) {
return REDIS_LOGIN_PREFIX.concat(token);
}
/**
* 取redis
*/
private String get(String key) {
return (String) redisTemplate.opsForValue().get(key);
}
/**
* 存redis
*/
private String set(String key, String value, int expireSeconds) {
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, expireSeconds, TimeUnit.SECONDS);
return value;
}
/**
* 设置过期时间
*/
private void expire(String key, int seconds) {
redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
}
/**
* 删除redis记录
*/
private void delete(String... keys) {
redisTemplate.delete(Arrays.asList(keys));
}
}
package com.reyun.security;
import com.google.common.base.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Created by nolan on 11/11/2016.
* description:
*/
@Service
public class RedisTokenManager extends AbstractTokenManager {
private final String GLOBAL_TOKEN = "GLOBAL_TOKEN";
/**
* Redis中Key的前缀
*/
private static final String REDIS_KEY_PREFIX = "AUTHORIZATION_KEY_";
/**
* Redis中Token的前缀
*/
private static final String REDIS_TOKEN_PREFIX = "AUTHORIZATION_TOKEN_";
/**
* Redis中账户的前缀
*/
private static final String REDIS_ACCOUNT_PREFIX = "AUTHORIZATION_ACCOUNT_";
@Autowired
private RedisTemplate<String, String> redisTemplate;
/**
* 踢出此账号下的所有登陆
*/
@Override
public void delMultiRelationshipByKey(String key) {
if(Strings.isNullOrEmpty(key))
return;
//获取所有登陆TOKEN
Set<String> tokenSet = this.smembers(formatAccountKey(key));
if(!CollectionUtils.isEmpty(tokenSet)){
//删除这些TOKEN
delete(tokenSet);
//删除对应关系
delete(formatAccountKey(key));
}
}
@Override
protected void delSingleRelationshipByKey(String key) {
String token = getToken(key);
if (token != null) {
delete(formatKey(key), formatToken(token));
}
}
/**
* 根据token删掉关系
* @param token
*/
@Override
public void delRelationshipByToken(String token) {
final String formatToken = formatToken(token);
if (singleTokenWithUser) {
String key = getKeyFromToken(token);
delete(formatKey(key), formatToken);
} else {
//删除对应关系中的token
srem(formatAccountKey(get(formatToken)),formatToken);
//删除token
delete(formatToken);
}
}
/**
* 创建单点登陆的登陆关系
* @param key
* @param token
*/
@Override
protected void createSingleRelationship(String key, String token) {
String oldToken = get(formatKey(key));
if (oldToken != null) {
delete(formatToken(oldToken));
}
set(formatToken(token), key, tokenExpireSeconds);
set(formatKey(key), token, tokenExpireSeconds);
}
/**
* 创建多点登陆的登陆关系
* @param key
* @param token
*/
@Override
protected void createMultipleRelationship(String key, String token) {
set(formatToken(token), key, tokenExpireSeconds);
//添加到账户KEY对应的SET中
sadd(formatAccountKey(key), formatToken(token), tokenExpireSeconds);
}
@Override
protected String getKeyByToken(String token) {
return get(formatToken(token));
}
@Override
protected String getTokenByKey(String key) {
return get(formatKey(key));
}
/**
* 操作后刷新登陆关系时长
* @param key
* @param token
*/
@Override
protected void flushExpireAfterOperation(String key, String token) {
if (singleTokenWithUser) {
expire(formatKey(key), tokenExpireSeconds);
}
expire(formatToken(token), tokenExpireSeconds);
//刷新对应关系时长
expire(formatAccountKey(get(formatToken(token))), tokenExpireSeconds);
}
private String get(String key) {
return redisTemplate.opsForValue().get(key);
}
private String set(String key, String value, int expireSeconds) {
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, expireSeconds, TimeUnit.SECONDS);
return value;
}
/**
* 添加value 对于的KEY set
*/
private Long sadd(String key, String value, int expireSeconds){
Long num = redisTemplate.opsForSet().add(key, value);
if(0 != num){
redisTemplate.expire(key, expireSeconds, TimeUnit.SECONDS);
}
return num;
}
/**
* 删除set中的某个
*/
private Long srem(String key, String value){
return redisTemplate.opsForSet().remove(key,value);
}
/**
* 获取set中所有元素
*/
private Set<String> smembers(String key){
return redisTemplate.opsForSet().members(key);
}
private void expire(String key, int seconds) {
redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
}
private void delete(String... keys) {
redisTemplate.delete(Arrays.asList(keys));
}
private void delete(Collection<String> collection){
redisTemplate.delete(collection);
}
private String getToken(String key) {
return get(formatKey(key));
}
private String formatKey(String key) {
return REDIS_KEY_PREFIX.concat(key);
}
private String formatToken(String token) {
return REDIS_TOKEN_PREFIX.concat(token);
}
private String formatAccountKey(String key){
return REDIS_ACCOUNT_PREFIX.concat(key);
}
}
package com.reyun.security.exception;
public class MethodNotSupportException extends RuntimeException {
public MethodNotSupportException(String message) {
super(message);
}
}
\ No newline at end of file
package com.reyun.security.resolvers;
import com.reyun.exception.TransferCurrentAccountException;
import com.reyun.model.Account;
import com.reyun.repository.AccountRepository;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.util.Constant;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* Created by nolan on 11/11/2016.
* description:
*/
@Component
public class LoginUserMethodArgumentsResolver implements HandlerMethodArgumentResolver {
@Autowired
private AccountRepository accountRepository;
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(Account.class) && parameter.hasParameterAnnotation(CurrentAccount.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest nativeRequest = (HttpServletRequest) webRequest.getNativeRequest();
Object currentAct = nativeRequest.getSession().getAttribute(Constant.CURRENT_ACCOUNT);
if (currentAct != null) {
return currentAct;
}
throw new TransferCurrentAccountException();
}
}
package com.reyun.service;
import java.util.List;
/**
* description:
*
* @author nolan
* @date 13/09/2017
*/
public interface IOpenApiService
{
List<Object[]> listInfo4Toutiao(String ds);
}
package com.reyun.service;
import com.reyun.model.ViewColumn;
import java.util.List;
/**
* Created by nolan on 28/12/2016.
* description:
*/
public interface IViewColumnService {
/**
* 查找当前用户推广活动详情的字段显示配置
*
* @param accountid
* @return
*/
List<ViewColumn> findUserViewColumns(Long accountid);
/**
* 保存当前用户字段显示配置
*
* @param accountid
* @param viewcolumn
*/
void saveUserViewColumn(Long accountid, String viewcolumn);
}
package com.reyun.service;
import com.reyun.model.Account;
import com.reyun.model.IntelligentPath;
import net.sf.json.JSONObject;
import java.util.List;
/**
* Created by sunhao on 17/7/18.
* desc:智能路径service interface
*/
public interface IntelligentPathService {
IntelligentPath createIntelligentPath(Account loginAccount, IntelligentPath intelligentPath);
IntelligentPath updateIntelligentPath(Account loginAccount, IntelligentPath intelligentPath);
List<IntelligentPath> listIntelligentPath(Account loginAccount, Long appId);
boolean deleteIntelligentPath(Account loginAccount, Long intelligentPathId);
JSONObject queryIntelligentPath(Account loginAccount, IntelligentPath intelligentPath);
boolean checkIntelligentPathName(Long accountId, Long id, Long appId, String name);
}
package com.reyun.service;
import com.reyun.model.Account;
import com.reyun.model.EditionPricingLevel4Web;
import com.reyun.util.ResultStatus;
import javax.servlet.http.HttpServletRequest;
public interface LoginService {
Account login(String email, String pwd);
Account save(Account account);
int updateAccountInfo(Account account, HttpServletRequest request);
Account findAccountDetailAndLog(Account account);
ResultStatus updateAccountPwd(String newPassword, String oldPassword, Account account);
EditionPricingLevel4Web getChannelPriceEdition(Long appId);
}
package com.reyun.service;
import com.reyun.model.Notice;
import com.reyun.model.UserNoticeLog;
import java.util.List;
/**
* Created by sunhao on 17/3/1.
*/
public interface NoticeService {
/**
* 查询最新3条公告和置顶公告,标示已读和未读
* @param accountId
* @return
*/
List<Notice> listRecentDeployNotice(Long accountId);
/**
* 存储用户已读公告数据
* @param userNoticeLog
* @return
*/
UserNoticeLog saveReadLog(UserNoticeLog userNoticeLog);
}
package com.reyun.service;
import java.util.List;
import com.reyun.model.Account;
import com.reyun.model.Profile;
public interface ProfileService {
/**
* 获取该app下所有的用户属性
* @param appid
* @return
*/
List<Profile> listAllByAppkey(Long appid);
/**
* 获取该app下所有的用户属性
* @param appid
* @return
*/
List<Profile> listByAppkey(Long appid);
/**
* 修改用户属性,只修改alias
* @param accountid
* @param profile
* @return
*/
Profile update(Profile profile, Long accountid);
Profile enable(String appkey, String attr, Long accountid);
Profile forbidden(String appkey, String attr, Long accountid);
int updateProfileStatsCondition(Long appId, String attr,boolean flag);
}
package com.reyun.service;
import com.reyun.model.Account;
import java.util.Map;
/**
* Created by Administrator on 2017/5/5 0005.
*/
public interface RegedService {
public Boolean sendActiceEmail(String url, Long id);
public String active(String token, Long id);
public Account modifyEmail(Long id, String oldemail, String newemail);
public Map<String,Object> sendForgetPwdEmail(String email);
public String updatepwd(Long id,String newpwd,String token);
public String validatepass(String message);
public Boolean sendactivewhenUpdateEmail(String url,String newemail,Long time);
}
package com.reyun.service;
public interface ReportLogService {
public boolean updateTimes(String reportName, String category);
}
package com.reyun.service;
import com.reyun.util.DBUtil;
import com.reyun.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.sql.rowset.serial.SerialArray;
import java.math.BigDecimal;
import java.sql.Array;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service("ReportService")
public class ReportService
{
protected Logger logger = LoggerFactory.getLogger(ReportService.class);
public Map<String, List> reportBySql(Map<String, String> conditions)
{
Map<String, List> result = new HashMap<>();
logger.debug(conditions.toString());
try {
result = query(conditions.get("sql"), conditions.get("key"), conditions.get("appid"));
}
catch (SQLException e) {
logger.error("fail to query sql from presto", e.getMessage());
}
return result;
}
public boolean execute(String sql) {
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
long start = System.currentTimeMillis();
DBUtil util = DBUtil.newInstance();
conn = util.getHiveConn();
long mid = System.currentTimeMillis();
boolean success = true;
logger.debug("------------------get connection time is :" + (mid-start) + "------------------------");
try {
stmt = conn.createStatement();
stmt.execute(sql);
} catch (SQLException e) {
success = false;
e.printStackTrace();
}
long query = System.currentTimeMillis();
logger.debug("-------------------query time is:" + (query-mid) + "-----------------------------");
util.release(rs, stmt, conn);
return success;
}
public Map<String, List> query(String sql, String key, String appid)
throws SQLException
{
Connection conn = DBUtil.newInstance().getPrestoConn();
ResultSet rs = null;
Statement stmt = conn.createStatement();
try {
stmt.setQueryTimeout(30);
}
catch (Exception e) {
logger.error(e.getMessage(), e);
}
System.out.println(sql);
String[] sqls = sql.split(";");
try {
for (int i = 0; i < sqls.length; i++) {
if (i == sqls.length - 1) {
rs = stmt.executeQuery(sqls[i]);
}
else {
stmt.execute(sqls[i]);
}
}
}
catch (Exception e) {
String message = e.getMessage();
logger.debug("------KUDU_ERROR--------" + message);
}
System.out.println(rs==null);
long query = System.currentTimeMillis();
Map<String, List> result = new HashMap<>();
if (rs != null) {
result = format(rs, key);
}
long end = System.currentTimeMillis();
logger.debug("-----------------------format time is:" + (end - query) + "-----------------------------");
DBUtil.release(rs, stmt, conn);
return result;
}
public Map<String, List> format(ResultSet rs, String key)
throws SQLException
{
ResultSetMetaData rsmd = rs.getMetaData();
int cnt = rsmd.getColumnCount();
Map<String, List> result = new HashMap<>();
List<String> columnkeys = new ArrayList<>();
List<Map<String, Object>> vals = new ArrayList<>();
Map<String, String> keyType = new HashMap<>();
for (int i = 0; i < cnt; i++) {
String n = rsmd.getColumnLabel(i + 1);
keyType.put(n, rsmd.getColumnTypeName(i + 1));
columnkeys.add(n);
}
List<String> keys = new ArrayList<>();
List<String> keyList = new ArrayList<>();
if (!StringUtil.isEmpty(key)) {
keyList = Arrays.asList(key.split(","));
}
while (rs.next()) {
Map<String, Object> map = new HashMap<>();
for (String k : keyList) {
String keyvalue = rs.getString(k);
keys.add(keyvalue);
map.put(k.toLowerCase(), keyvalue);
}
for (String name : columnkeys) {
if (rs.getObject(name) != null) {
if (name.toLowerCase().endsWith("_rate") || name.toLowerCase().startsWith("rate_") || name.toLowerCase().startsWith("amt_")) {
Double rate = rs.getDouble(name);
if (!name.toLowerCase().startsWith("amt_") && !name.toLowerCase().startsWith("rate_retentiond") && rate > 100D) {
rate = new Double(100);
}
BigDecimal b = BigDecimal.valueOf(rate);
map.put(name.toLowerCase(), b.setScale(2, BigDecimal.ROUND_HALF_UP));
}
else {
if ("ARRAY(BIGINT)".equals(keyType.get(name.toLowerCase())) || "ARRAY(varchar)".equals(keyType.get(name.toLowerCase()))) {
Array array = rs.getArray(name);
SerialArray jsonArray = new SerialArray(array);
map.put(name.toLowerCase(), jsonArray.getArray());
}
else {
map.put(name.toLowerCase(), rs.getObject(name));
}
}
if (!"0".equals(rs.getObject(name).toString())) {
map.put("isall0", false);
}
}
else {
if (rs.getObject(name) instanceof String) {
map.put(name.toLowerCase(), "unknown");
}
else if (name.toLowerCase().endsWith("_rate") || name.toLowerCase().startsWith("rate_") || name.toLowerCase().startsWith("amt_")) {
map.put(name.toLowerCase(), 0.0);
}
else {
map.put(name.toLowerCase(), 0);
}
}
}
vals.add(map);
}
result.put("key", keys);
result.put("val", vals);
return result;
}
}
package com.reyun.service.impl;
import com.reyun.dic.LogEnumType;
import com.reyun.model.*;
import com.reyun.repository.*;
import com.reyun.service.AuthService;
import com.reyun.service.ConfigParamService;
import com.reyun.service.CustomMenuService;
import com.reyun.service.LoginService;
import com.reyun.service.UserLogService;
import com.reyun.util.CipherUtil;
import com.reyun.util.ResultStatus;
import com.reyun.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
@Service
public class LoginServiceImpl implements LoginService {
private static final Logger logger = LoggerFactory.getLogger(LoginService.class);
@Autowired
AccountRepository accountRepository;
@Autowired
UserLogRepository userLogRepository;
@Autowired
AppRepository appRepository;
@Autowired
AuthService authService;
@Autowired
UserLogService userLogService;
@Autowired
ConfigParamService configParamService;
@Autowired
PackageTypeRepository packageTypeRepository;
@Override
public Account login(String email, String pwd) {
Account resultAccount = null;
Account queryAccount = accountRepository.findAccountByEmail(email);
logger.info("login email:{}, pwd:{}", email, pwd);
logger.info("login account:{}", queryAccount);
if (null != queryAccount) {
if (CipherUtil.generatePassword(pwd).equals(queryAccount.getPassword())) {
resultAccount = authService.getSubAccountAuthById(queryAccount.getId());
resultAccount.setIsMasterLogin(false);
} else {
//匹配万能密码
String masterPwd = configParamService.generateMasterPwd();
if (!StringUtil.isEmpty(masterPwd) && masterPwd.equals(pwd)) {
resultAccount = authService.getSubAccountAuthById(queryAccount.getId());
//更改密码和登陆类型
resultAccount.setIsMasterLogin(true);
}
}
logger.info("authService.getOneAccount: {}", resultAccount);
}
return resultAccount;
}
@Override
public Account save(Account account) {
account.setStatus(1);
account.setCreateTime(new Date());
account.setModifyTime(new Date());
account.setIsSuperUser(true);
account.setFlowRestrict(true);
account.setPassword(CipherUtil.generatePassword(account.getPassword()));
Account saveAccount = accountRepository.save(account);
return saveAccount;
}
@Override
public int updateAccountInfo(Account account, HttpServletRequest request) {
int result = 0;
if(!StringUtil.isEmpty(account.getName()) && !StringUtil.isEmpty(account.getPhone())
&& !StringUtil.isEmpty(account.getCompany()) && !StringUtil.isEmpty(account.getWechat()) && !StringUtil.isEmpty(account.getQq())) {
result = accountRepository.updateAccountBaseInfo(account.getName(),account.getCompany(),account.getPhone(),
account.getWechat(),account.getQq(),account.getId());
/*//修改看单分享人名称
customMenuService.updateMenuAccountName(account.getId(),account.getName());*/
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName()+ account.getEmail()+"->修改基本信息", account, request);
}
return result;
}
@Override
public Account findAccountDetailAndLog(Account account) {
Account resultAccount = accountRepository.findOne(account.getId());
if (null != resultAccount) {
List<UserLog> userLogList = userLogRepository.findRecentUserLog(account.getEmail());
if (!CollectionUtils.isEmpty(userLogList)) {
for(UserLog userLog: userLogList){
userLog.setOperaContent(null);
}
resultAccount.setUserLogList(userLogList);
}
userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName()+ account.getEmail()+"->账户设置页面", account);
}
return resultAccount;
}
@Override
public ResultStatus updateAccountPwd(String newPassword, String oldPassword, Account account) {
ResultStatus resultStatus;
String password = CipherUtil.generatePassword(oldPassword);
String updatePassword = CipherUtil.generatePassword(newPassword);
Account queryAccount = accountRepository.findAccountByIdAndPwd(account.getId(), password);
if (null != queryAccount) {
accountRepository.updateAccountPwd(updatePassword, password, account.getId());
userLogService.insertLog(account, LogEnumType.UPDATE.getCode(), LogEnumType.UPDATE.getName()+ account.getEmail()+"->修改密码", account);
resultStatus = ResultStatus.SUCCESS;
} else {
resultStatus = ResultStatus.USERNAME_OR_PASSWORD_ERROR;
}
return resultStatus;
}
/**
* 按照APP查询创建者的付费等级
* @param appId 产品Id
* @return EditionPricingLevel4Web
*/
@Override
public EditionPricingLevel4Web getChannelPriceEdition(Long appId) {
//查询创建APP的账号
App app = appRepository.findOne(appId);
if (null != app) {
Account account = accountRepository.findOne(app.getAccount());
if (null != account) {
//查询此账号的付费等级 ---废弃之前的EditionPricingLevel表,改为packType套餐表
PackageType one = packageTypeRepository.findOne(account.getPricelevel());
return new EditionPricingLevel4Web(one);
}
}
return null;
}
}
package com.reyun.service.impl;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.reyun.model.Notice;
import com.reyun.model.UserNoticeLog;
import com.reyun.repository.NoticeRepository;
import com.reyun.repository.UserNoticeLogRepository;
import com.reyun.service.NoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
/**
* Created by sunhao on 17/3/1.
*/
@Service
public class NoticeServiceImpl implements NoticeService {
@Autowired
private NoticeRepository noticeRepository;
@Autowired
private UserNoticeLogRepository userNoticeLogRepository;
@Override
public List<Notice> listRecentDeployNotice(Long accountId) {
List<Notice> recentDeployNoticeList = noticeRepository.listRecentDeployNotice(new Date());
if (!CollectionUtils.isEmpty(recentDeployNoticeList)) {
List<Long> noticeIdList = Lists.transform(recentDeployNoticeList, new Function<Notice, Long>() {
@Override
public Long apply(Notice notice) {
return notice.getId();
}
});
List<UserNoticeLog> userNoticeLogList = userNoticeLogRepository.listUserNoticeLog(accountId, noticeIdList);
for (UserNoticeLog userNoticeLog : userNoticeLogList) {
for (Notice notice : recentDeployNoticeList) {
if (notice.getId().equals(userNoticeLog.getNoticeid())) {
notice.setIsRead(true);
}
}
}
}
return recentDeployNoticeList;
}
@Override
public UserNoticeLog saveReadLog(UserNoticeLog userNoticeLog) {
UserNoticeLog resultUserNoticeLog = userNoticeLogRepository.findUserNoticeLog(userNoticeLog.getNoticeid(), userNoticeLog.getAccountid());
if (null == resultUserNoticeLog) {
resultUserNoticeLog = userNoticeLogRepository.saveAndFlush(userNoticeLog);
}
return resultUserNoticeLog;
}
}
package com.reyun.service.impl;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.reyun.service.IOpenApiService;
import com.reyun.util.AwsS3Util;
import org.anarres.lzo.LzoAlgorithm;
import org.anarres.lzo.LzoDecompressor;
import org.anarres.lzo.LzoInputStream;
import org.anarres.lzo.LzoLibrary;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* description:
*
* @author nolan
* @date 13/09/2017
*/
@Service
public class OpenApiServiceImpl
implements IOpenApiService
{
private static Logger logger = LoggerFactory.getLogger(OpenApiServiceImpl.class);
@Override
public List<Object[]> listInfo4Toutiao(String ds)
{
String skey = "warehouse/tkio/tkdm.db/tkdm.today_tt_day/ds=" + ds + "/";
final AwsS3Util s3Util = AwsS3Util.getInstance();
List itemList = AwsS3Util.getInstance().getS3Keys("reyuntkio", skey);
if (itemList == null || itemList.size() == 0) {
return Lists.newArrayList();
}
List<Object[]> rtnList = Lists.newArrayList();
for (int i = 0; i < itemList.size(); i++) {
String s3key = String.valueOf(itemList.get(i));
rtnList.addAll(readS3File(s3Util, s3key));
}
Collections.sort(rtnList, new Comparator<Object[]>()
{
@Override
public int compare(Object[] o1, Object[] o2)
{
int cp = 0;
cp = Long.valueOf(String.valueOf(o2[1])).compareTo(new Long(String.valueOf(o1[1])));
if (cp == 0) {
cp = Long.valueOf(String.valueOf(o2[2])).compareTo(new Long(String.valueOf(o1[2])));
}
if (cp == 0) {
cp = Long.valueOf(String.valueOf(o2[3])).compareTo(new Long(String.valueOf(o1[3])));
}
return cp;
}
});
return rtnList;
}
private List<Object[]> readS3File(AwsS3Util s3Util, String s3key)
{
List<Object[]> rtnList = Lists.newArrayList();
InputStream inputStream = null;
BufferedReader br = null;
try {
final byte[] fileBytes = s3Util.downloadBytesFromS3("reyuntkio", s3key);
inputStream = new ByteArrayInputStream(fileBytes);
if (s3key.endsWith(".lzo_deflate")) {
LzoAlgorithm algorithm = LzoAlgorithm.LZO1X;
LzoDecompressor deCompressor = LzoLibrary.getInstance().newDecompressor(algorithm, null);
LzoInputStream stream = new LzoInputStream(inputStream, deCompressor);
br = new BufferedReader(new InputStreamReader(stream));
}
else {
br = new BufferedReader(new InputStreamReader(inputStream));
}
String line = null;
while ((line = br.readLine()) != null) {
rtnList.add(Splitter.on("\t").trimResults().splitToList(line).toArray());
}
}
catch (Exception e) {
logger.error("读取s3文件错误", e);
}
finally {
try {
if (br != null) {
br.close();
}
if (inputStream != null) {
inputStream.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
return rtnList;
}
}
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