package com.highdatas.mdm.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.highdatas.mdm.entity.*; import com.highdatas.mdm.entity.Character; import com.highdatas.mdm.pojo.CodeMsg; import com.highdatas.mdm.pojo.DispenseField; import com.highdatas.mdm.pojo.Result; import com.highdatas.mdm.pojo.SubscribeEntity; import com.highdatas.mdm.service.*; import com.highdatas.mdm.util.Constant; import com.highdatas.mdm.util.DbUtils; import com.highdatas.mdm.util.RedisClient; import com.highdatas.mdm.util.pool.MqEntity; import com.highdatas.mdm.util.pool.MqMessage; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* @description 分发接口 * @author kimi * @since 2019-12-31 */ @RestController @RequestMapping("/subscribe") public class DispenseController { @Autowired DispenseService dispenseService; @Autowired RedisClient redisClient; @Autowired MasterDataService masterDataService; @Autowired IMasterAuthorService masterAuthorService; @Autowired IMaintainFieldService maintainFieldService; @Autowired IMaintainService maintainService; @Autowired IMenuMappingService menuMappingService; @Autowired IMasterAuthorSubscribeService subscribeService; @Autowired ISysMenuService menuService; @Autowired ISysViewService viewService; @Autowired IMasterAuthorSubscribeService masterAuthorSubscribeService; @Autowired IMasterAuthorUnactiveService masterAuthorUnactiveService; @Autowired ISysDispenseLogsService dispenseLogsService; @Autowired ISysFieldService fieldService; /** * * @description: 页面调用分发接口 * @param userId 分发用户 * @param dataId 分发的dataId * @param type 分发类型, 视图还是主题 * @param increment 增量/全量 * @return: 是否添加到队列 * */ @RequestMapping(value = "/dispense/surface", method = RequestMethod.GET) public Result surface(@RequestParam String userId, @RequestParam String type, @RequestParam String dataId, HttpServletRequest request, HttpServletResponse response) { //类型为 主题的时候需要传分发哪个版本的数据 String versionId = request.getParameter("versionId"); //添加到分发队列 return addPassiveMq(userId, type, dataId, versionId, request, "surface"); } /** * * @description: 获取当前分发任务数据总条数,供外部系统调用 * @param reqObj 参数对象 * token 通过token获取user信息 * type 数据类型 视图,主题 * dataId 分发的dataId * versionId 主题的版本id * increment 增量/全量 * @return: 记录数 * */ @RequestMapping(value = "/api/count", method = RequestMethod.POST) public Result count(@RequestBody JSONObject reqObj) { String token = reqObj.getString("token"); String type = reqObj.getString("type"); String dataId = reqObj.getString("dataId"); String versionId = reqObj.getString("versionId"); String incrementStr = reqObj.getString("increment"); //校验必传字段 if (StringUtils.isEmpty(token) || StringUtils.isEmpty(type) || StringUtils.isEmpty(dataId)) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //获取用户信息 String userId = redisClient.getRedisVal(token); if (StringUtils.isEmpty(userId)) { return Result.error(CodeMsg.ERROR_FIND_TOKEN); } //转换increment类型 boolean increment = true; if (!StringUtils.isEmpty(incrementStr)) { increment = Boolean.valueOf(incrementStr); } if (type.equalsIgnoreCase(Constant.Master)) { //主题 需校验版本字段 if (StringUtils.isEmpty(versionId)) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //获取主题版本信息 Maintain maintain = maintainService.selectById(versionId); if (maintain == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //获取主题信息 SysMenu sysMenu = menuService.selectById(dataId); if (sysMenu == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } //校验是否已经注册 int subscribeCnt = subscribeService.selectCount(new EntityWrapper().eq("menu_id", dataId).eq("user_id", userId)); if (subscribeCnt < 1) { return Result.error(CodeMsg.SUBSCRIBE_UN_ERROR); } //校验是否激活 int i = masterAuthorUnactiveService.selectCount(new EntityWrapper().eq("maintain_id", versionId).eq("user_id", userId)); if (i > 0) { return Result.error(CodeMsg.Active_UN_ERROR); } //获取权限信息 MasterAuthor masterAuthor = new MasterAuthor().setTableName(maintain.getTableName()); TUser user = new TUser().setUserId(userId); //获取理论上的页码数,记录信息 com.highdatas.mdm.pojo.Page initPageInfo = DbUtils.masterAuthorService.getInitPageInfo(masterAuthor, maintain, user, increment); if (initPageInfo != null) { return Result.success(initPageInfo.getRecordCount()); } return Result.success(0); } else if (type.equalsIgnoreCase(Constant.View)) { //获取视图信息 SysView sysView = viewService.selectById(dataId); if (sysView == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } //校验是否激活 Boolean active = sysView.getActive(); if (!active) { return Result.error(CodeMsg.Active_UN_ERROR); } //获取视图记录数 long viewCount = viewService.getViewCount(sysView); return Result.success(viewCount); } else { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } } /** * * @description: 获取当前分发任务数据数据,供外部系统调用 * @param reqObj 参数对象 * token 通过token获取user信息 * beginNo 起始条数 * endNo 结束条数 * type 数据类型 视图,主题 * dataId 分发的dataId * versionId 主题的版本id * increment 增量/全量 * @return: 数据记录 * */ @RequestMapping(value = "/api/data", method = RequestMethod.POST) public Result data(@RequestBody JSONObject reqObj) { //创建分发日志 SysDispenseLogs logs = new SysDispenseLogs().setId(DbUtils.getUUID()).setCreateTime(new Date()); //设置日志类型 logs.setTouchType("rest"); logs.insert(); String token = reqObj.getString("token"); String type = reqObj.getString("type"); String dataId = reqObj.getString("dataId"); String versionId = reqObj.getString("versionId"); String incrementStr = reqObj.getString("increment"); Integer beginNo = reqObj.getInteger("beginNo"); Integer endNo = reqObj.getInteger("endNo"); logs.setTopicId(type).setTagId(dataId).setDataType(type); //beginNo endNo字段 是否合理 if (beginNo == null || endNo == null) { logs.setErrorInfo("beginNo or endNo not exists").setStatus("false").updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } else if (endNo < beginNo) { logs.setErrorInfo("beginNo > endNo ").setStatus("false").updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } if (beginNo < 0 || endNo < 0) { logs.setErrorInfo("beginNo or endNo < 0").setStatus("false").updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //校验必传字段 if (StringUtils.isEmpty(token) || StringUtils.isEmpty(type) || StringUtils.isEmpty(dataId)) { logs.setErrorInfo("token or type or dataId not found").setStatus("false").updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //获取用户信息 String userId = redisClient.getRedisVal(token); if (StringUtils.isEmpty(userId)) { logs.setErrorInfo(CodeMsg.ERROR_FIND_TOKEN.getMsg()).setStatus("false").updateById(); return Result.error(CodeMsg.ERROR_FIND_TOKEN); } TUser userById = DbUtils.getUserById(userId); //更新日志信息 logs.setUserName(userById.getUserName()); logs.setUserId(userId).updateById(); boolean increment = true; if (!StringUtils.isEmpty(incrementStr)) { increment = Boolean.valueOf(incrementStr); } com.highdatas.mdm.pojo.Page initPageInfo = null; if (type.equalsIgnoreCase(Constant.Master)) { //校验版本字段 if (StringUtils.isEmpty(versionId)) { logs.setErrorInfo("versionId not exists").setStatus("false").updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //获取版本信息 Maintain maintain = maintainService.selectById(versionId); if (maintain == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //更新日志信息 logs.setMaintainId(maintain.getId()).setVersion(maintain.getVersion()); logs.updateById(); //获取主题信息 SysMenu sysMenu = menuService.selectById(dataId); if (sysMenu == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } //更新主题信息 logs.setName(sysMenu.getName()); logs.updateById(); //检验是否已注册 int subscribeCnt = subscribeService.selectCount(new EntityWrapper().eq("menu_id", dataId).eq("user_id", userId)); if (subscribeCnt < 1) { logs.setErrorInfo(CodeMsg.SUBSCRIBE_UN_ERROR.getMsg()).updateById(); return Result.error(CodeMsg.SUBSCRIBE_UN_ERROR); } //检验是否已激活 int i = masterAuthorUnactiveService.selectCount(new EntityWrapper().eq("maintain_id", versionId).eq("user_id", userId)); if (i > 0) { logs.setErrorInfo(CodeMsg.Active_UN_ERROR.getMsg()).updateById(); return Result.error(CodeMsg.Active_UN_ERROR); } //获取权限 MasterAuthor masterAuthor = new MasterAuthor().setTableName(maintain.getTableName()); TUser user = new TUser().setUserId(userId); //获取理论上的页数,记录数 initPageInfo = masterAuthorService.getInitPageInfo(masterAuthor, maintain, user, increment); if (initPageInfo == null) { return Result.success(null); } //通过 beginNo,endNo更新page信息 boolean b = refreshInitPage(initPageInfo, beginNo, endNo); if(!b) { return Result.error(CodeMsg.ERROR_SIZE_TOO_LONG); } if (increment) { //获取增量数据 String maintainTableName = maintain.getTableName(); //获取记录表 String tempTableName = maintainTableName + Constant.RECORD; //组装字段 List fieldByMaintain = DbUtils.fieldService.getFieldByMaintain(maintain.getId()); List fieldList = fieldByMaintain.stream().map(sysField -> sysField.getField()).collect(Collectors.toList()); String fields = fieldByMaintain.stream().map(sysField -> sysField.getField()).collect(Collectors.joining(Constant.COMMA)); //组装筛选条件 String filter = DbUtils.masterAuthorService.getFilter(user, maintain.getId()); if (StringUtils.isEmpty(filter)) { filter = Constant.WHERE_DEFAULT; } //获取数据 List> maps = DbUtils.maintainDetailMapper.selectMaintainDetail(fields, tempTableName, maintain.getId(), filter, initPageInfo.getLimitSQL()); //脱敏规则 Map helpfulField = DbUtils.antianaphylaxisClient.getHelpfulField(fields, maintainTableName); //转换为脱敏后的数据 DbUtils.antianaphylaxisClient.fixMasterData(maps,helpfulField); //组装返回结果 JSONObject object = new JSONObject(); object.fluentPut("records", maps); List sysFields = masterAuthorService.getField(user, versionId); List collect = sysFields.stream().map(sysField -> new DispenseField().setField(sysField.getField()).setAlias(sysField.getAlias())).collect(Collectors.toList()); object.fluentPut("fields", collect); long time = new Date().getTime(); logs.setSchedule(time - logs.getCreateTime().getTime()).setStatus("true").setTotal(Long.valueOf(initPageInfo.getRecordCount()).intValue()).updateById(); return Result.success(object); } else { //获取全量数据 Result result = masterDataService.selectListByPageByVersion(user, maintain.getTableName(), null, Constant.WHERE_DEFAULT, null, null, maintain.getVersion(), false, null, initPageInfo); //组装返回结果 Object data = result.getData(); JSONObject masterResult = new JSONObject(); JSONObject dataResult = (JSONObject) JSONObject.toJSON(data); JSONObject grid = dataResult.getJSONObject("grid"); masterResult.fluentPut("records", grid.getJSONArray("record")); JSONArray fields = dataResult.getJSONArray("fields"); ArrayList dispenseFields = new ArrayList<>(); for (Object field : fields) { JSONObject one = (JSONObject) JSONObject.toJSON(field); dispenseFields.add(new DispenseField().setAlias(one.getString("alias")).setField(one.getString("field"))); } grid.remove("record"); masterResult.fluentPut("fields", dispenseFields); //更新执行时间 long time = new Date().getTime(); logs.setSchedule(time - logs.getCreateTime().getTime()).setStatus("true").setTotal(Long.valueOf(initPageInfo.getRecordCount()).intValue()).updateById(); return Result.success(masterResult); } } else if (type.equalsIgnoreCase(Constant.View)) { //获取视图信息 SysView sysView = viewService.selectById(dataId); if (sysView == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } logs.setName(sysView.getName()); logs.updateById(); //检验是否激活 Boolean active = sysView.getActive(); if (!active) { return Result.error(CodeMsg.Active_UN_ERROR); } //获取理论上的记录数 initPageInfo = viewService.getInitPageInfo(sysView.getId()); if (initPageInfo == null) { long time = new Date().getTime(); logs.setSchedule(time - logs.getCreateTime().getTime()).setStatus("true").setTotal(Long.valueOf(initPageInfo.getRecordCount()).intValue()).updateById(); return Result.success(null); } //通过beginNo, endNo更新记录 boolean b = refreshInitPage(initPageInfo, beginNo, endNo); if(!b) { logs.setErrorInfo(CodeMsg.ERROR_SIZE_TOO_LONG.getMsg()).updateById(); return Result.error(CodeMsg.ERROR_SIZE_TOO_LONG); } //获取视图数据 Result viewData = viewService.getViewData(sysView, null, 0, initPageInfo); //更新记录日志 long time = new Date().getTime(); logs.setSchedule(time - logs.getCreateTime().getTime()).setStatus("true").setTotal(Long.valueOf(initPageInfo.getRecordCount()).intValue()).updateById(); return viewData; } else { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } } /** * * @description: 通过biginNo endNo 更新page * @param initPageInfo 页数信息实体 * @param beginNo 开始条数 * @param endNo 结束条数 * @return: 刷新成功/失败 * */ private boolean refreshInitPage(com.highdatas.mdm.pojo.Page initPageInfo, Integer beginNo, Integer endNo) { //每页条数 int size = endNo - beginNo; int pageSize = initPageInfo.getPageSize(); //每页数据过多 不准继续执行 if (pageSize < size) { return false; } //更新page信息 initPageInfo.setBeginNo(beginNo); initPageInfo.setEndNo(endNo); initPageInfo.setPageSize(size); initPageInfo.setRecordCount(size); return true; } /** * * @description: 页面调用分发接口 多选 * @param objectList * userId 分发用户 * datas * [ * dataId 分发的dataId * type 分发类型, 视图还是主题 * increment 增量/全量 * ] * * @return: 是否添加到队列 * */ @RequestMapping(value = "/dispense/surface/muti", method = RequestMethod.POST) public Result surface(@RequestBody JSONObject objectList, HttpServletRequest request, HttpServletResponse response) { //获取用户信息 String userId = objectList.getString("userId"); //多个任务的数据 JSONArray datas = objectList.getJSONArray("datas"); ArrayList results = new ArrayList<>(); for (int i = 0; i < datas.size(); i++) { JSONObject oneRequest = datas.getJSONObject(i); String type = oneRequest.getString("type"); String dataId = oneRequest.getString("dataId"); String versionId = oneRequest.getString("versionId"); //循环加到分发队列里 Result result = addPassiveMq(userId, type, dataId, versionId, request, "muti"); results.add(result); } // 返回每条执行的结果 return Result.success(results); } /** * * @description: 页面调用分发接口 * @param userId 分发用户 * @param dataId 分发的dataId * @param type 分发类型, 视图还是主题 * @param increment 增量/全量 * @param touchType 请求来源的类型 * @return: 是否添加到队列 * */ private Result addPassiveMq(@RequestParam String userId, @RequestParam String type, @RequestParam String dataId, String versionId, HttpServletRequest request, String touchType) { //创建分发日志 SysDispenseLogs logs = new SysDispenseLogs() .setId(DbUtils.getUUID()) .setTouchType(touchType) .setDataType(type) .setCreateTime(new Date()) .setTopicId(type) .setTagId(dataId) .setMaintainId(versionId); logs.insert(); //获取用户信息 TUser user = DbUtils.getUserById(userId); if (user == null) { logs.setResult(CodeMsg.USER_NOT_MATHED.getMsg()).updateById(); return Result.error(CodeMsg.USER_NOT_MATHED); } logs.setUserName(user.getUserName()); logs.updateById(); //是否增量 String incrementStr = request.getParameter("increment"); boolean increment = true; if (!StringUtils.isEmpty(incrementStr)) { increment = Boolean.valueOf(incrementStr); } //创建MQ任务 MqEntity mqEntity = new MqEntity(); mqEntity.setUserId(userId); mqEntity.setIncrement(increment); mqEntity.setMsgTopicName(type); mqEntity.setType(type); mqEntity.setLogId(logs.getId()); mqEntity.setDataId(dataId); if(type.equalsIgnoreCase(Constant.Master)) { //主题的需要检验版本信息 if (StringUtils.isEmpty(versionId)) { logs.setResult(CodeMsg.ERROR_PARAMS_NOT_MATHED.getMsg()).updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //获取版本信息 Maintain maintain = maintainService.selectById(versionId); if (maintain == null) { logs.setResult(CodeMsg.ERROR_PARAMS_NOT_MATHED.getMsg()).updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } logs.setVersion(maintain.getVersion()); logs.updateById(); mqEntity.setMaintainId(versionId); //获取主题信息 SysMenu sysMenu = menuService.selectById(dataId); if (sysMenu == null) { logs.setResult(CodeMsg.SELECT_ERROR_NOTFOUND.getMsg()).updateById(); return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } logs.setName(sysMenu.getName()); logs.updateById(); //校验是否激活 int i = masterAuthorUnactiveService.selectCount(new EntityWrapper().eq("maintain_id", versionId).eq("user_id", userId)); if (i > 0) { logs.setResult(CodeMsg.Active_UN_ERROR.getMsg()).updateById(); return Result.error(CodeMsg.Active_UN_ERROR); } mqEntity.setMsgTagName(sysMenu.getId()); } else if (type.equalsIgnoreCase(Constant.View)) { //获取视图信息 SysView sysView = viewService.selectById(dataId); if (sysView == null) { logs.setResult(CodeMsg.SELECT_ERROR_NOTFOUND.getMsg()).updateById(); return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } logs.setName(sysView.getName()); logs.updateById(); //校验是否激活 Boolean active = sysView.getActive(); if (!active) { logs.setResult(CodeMsg.Active_UN_ERROR.getMsg()).updateById(); return Result.error(CodeMsg.Active_UN_ERROR); } mqEntity.setMsgTagName(sysView.getId()); } else { logs.setResult(CodeMsg.ERROR_PARAMS_NOT_MATHED.getMsg()).updateById(); return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //创建msgKey mqEntity.setMsgKey(DbUtils.getUUID(16)); MqEntity.MsgBodyBean msgBody = mqEntity.getMsgBody(); msgBody.setTo(userId); msgBody.setVersion(versionId); MqMessage mqMessage = new MqMessage(mqEntity); //保存日志id 方便后续获取 mqEntity.setLogId(logs.getId()); //添加到被动分发队列 return dispenseService.pushPassiveMq(mqMessage, touchType, logs);//被动返回 // dispenseService.pushActiveMq(mqMessage); 主动推 } /** * * @description: 外部系统调用分发接口 * @param token 分发用户token * @param dataId 分发的dataId * @param type 分发类型, 视图还是主题 * @param versionId 版本id * @return: 是否添加到队列 * */ @RequestMapping(value = "/dispense/api", method = RequestMethod.GET) public Result api(@RequestParam String token, @RequestParam String type, @RequestParam String dataId, HttpServletRequest request, HttpServletResponse response) { //通过token获取用户信息 String userId = redisClient.getRedisVal(token); if (StringUtils.isEmpty(userId)) { return Result.error(CodeMsg.ERROR_FIND_TOKEN); } //获取版本信息 String versionId = request.getParameter("versionId"); //添加到分发队列 return addPassiveMq(userId, type, dataId, versionId, request, "api"); } /** * * @description: 外部系统调用 注册接口 * @param token 分发用户 * @param dataId 分发的dataId * @param type 分发类型, 视图还是主题 * @return: 是否添加成功 * */ @RequestMapping(value = "/add", method = RequestMethod.GET) public Result add(@RequestParam String token, @RequestParam String type, @RequestParam String dataId) { try{ //获取用户信息 String redisVal = redisClient.getRedisVal(token); if (StringUtils.isEmpty(redisVal)) { return Result.error(CodeMsg.ERROR_FIND_TOKEN); } if(type.equalsIgnoreCase(Constant.Master)) { //获取权限 MasterAuthor masterAuthor = masterAuthorService.selectById(dataId); if (masterAuthor == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //创建注册信息 boolean updated = new MasterAuthorSubscribe().setId(DbUtils.getUUID()).setMenuId(masterAuthor.getId()).setUserId(redisVal).insert(); if (updated) { return Result.success(null); } else { return Result.error(CodeMsg.SUBSCRIBE_SAVE_ERROR); } } else if (type.equalsIgnoreCase(Constant.View)) { //获取视图信息 SysView sysView = viewService.selectById(dataId); if (sysView == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //注册视图 boolean updated = sysView.setSubscribe(true).updateById(); if (updated) { return Result.success(null); } else { return Result.error(CodeMsg.SUBSCRIBE_SAVE_ERROR); } } else { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } } catch (Exception e) { e.printStackTrace(); return Result.error(CodeMsg.ERROR_SAVE_TOKEN); } } /** * * @description: 外部系统调用批量 注册接口 * @param token 分发用户 * @param datalist 分发的dataList * @return: 是否添加成功 * */ @RequestMapping(value = "/refreshList", method = RequestMethod.POST) public Result refreshList(@RequestBody JSONObject requestBody) { //通过token获取用户信息 String token = requestBody.getString(Constant.Token); if (StringUtils.isEmpty(token)) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } try{ String userId = redisClient.getRedisVal(token); if (StringUtils.isEmpty(userId)) { return Result.error(CodeMsg.ERROR_FIND_TOKEN); } //校验datalist JSONArray dataList = requestBody.getJSONArray("dataList"); if (dataList == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //un subscribe //删除当前用户所有的注册信息 List sysViews = viewService.selectList(new EntityWrapper().eq(Constant.USERID, userId)); for (SysView sysView : sysViews) { sysView.setSubscribe(false).updateById(); } masterAuthorSubscribeService.delete(new EntityWrapper().eq(Constant.USERID, userId)); //循环添加新的注册信息 for (int i = 0; i < dataList.size(); i++) { JSONObject oneObj = dataList.getJSONObject(i); String dataId = oneObj.getString("dataId"); String type = oneObj.getString("type"); if (StringUtils.isEmpty(dataId) || StringUtils.isEmpty(type)) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } if(type.equalsIgnoreCase(Constant.Master)) { //校验是否有权限 MasterAuthor masterAuthor = masterAuthorService.selectById(dataId); if (masterAuthor == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //注册主题 boolean updated = new MasterAuthorSubscribe().setId(DbUtils.getUUID()).setMenuId(masterAuthor.getId()).setUserId(userId).insert(); if (updated) { return Result.success(null); } else { return Result.error(CodeMsg.SUBSCRIBE_SAVE_ERROR); } } else if (type.equalsIgnoreCase(Constant.View)) { SysView sysView = viewService.selectById(dataId); if (sysView == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //注册视图 boolean updated = sysView.setSubscribe(true).updateById(); if (updated) { return Result.success(null); } else { return Result.error(CodeMsg.SUBSCRIBE_SAVE_ERROR); } } else { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } } return Result.success(null); } catch (Exception e) { e.printStackTrace(); return Result.error(CodeMsg.ERROR_SAVE_TOKEN); } } /** * * @description: 外部系统调用 删除注册接口 * @param token 分发用户 * @param dataId 分发的dataId * @param type 分发类型, 视图还是主题 * @return: 是否添加成功 * */ @RequestMapping(value = "/delete", method = RequestMethod.GET) public Result delete(@RequestParam String token, @RequestParam String type, @RequestParam String dataId) { try{ //获取用户信息通过token String redisVal = redisClient.getRedisVal(token); if (StringUtils.isEmpty(redisVal)) { return Result.error(CodeMsg.ERROR_FIND_TOKEN); } if(type.equalsIgnoreCase(Constant.Master)) { //校验权限 MasterAuthor masterAuthor = masterAuthorService.selectById(dataId); if (masterAuthor == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //删除注册 boolean updated = masterAuthorSubscribeService.delete(new EntityWrapper().eq("master_author_id", masterAuthor.getId()).eq(Constant.USERID, redisVal)); if (updated) { return Result.success(null); } else { return Result.error(CodeMsg.SUBSCRIBE_SAVE_ERROR); } } else if (type.equalsIgnoreCase(Constant.View)) { SysView sysView = viewService.selectById(dataId); if (sysView == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } //删除视图 boolean updated = sysView.setSubscribe(false).updateById(); if (updated) { return Result.success(null); } else { return Result.error(CodeMsg.SUBSCRIBE_SAVE_ERROR); } } else { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } } catch (Exception e) { e.printStackTrace(); return Result.error(CodeMsg.ERROR_SAVE_TOKEN); } } /** * * @description: 外部系统调用 获取可注册数据列表接口 * @param token 分发用户 * @return: 是否添加成功 * */ @RequestMapping(value = "/authors", method = RequestMethod.GET) public Result authors(@RequestParam String token) { try{ //通过token获取用户信息 String userId = redisClient.getRedisVal(token); if (StringUtils.isEmpty(userId)) { return Result.error(CodeMsg.ERROR_FIND_TOKEN); } TUser user = DbUtils.getUserById(userId); if (user == null) { return Result.error(CodeMsg.USER_NOT_MATHED); } List result = new ArrayList<>(); //获取用户权限 List userAuthor = masterAuthorService.getUserAuthor(userId, null); // author 只有拥有最新权限的才能订阅 userAuthor = userAuthor.stream() .filter(masterAuthor -> !StringUtils.isEmpty(masterAuthor.getMaintainFieldId())) // .filter(masterAuthor -> masterAuthor.getMaintainFieldId().equalsIgnoreCase(Constant.All)) .collect(Collectors.toList()); for (MasterAuthor masterAuthor : userAuthor) { SubscribeEntity subscribeEntity = new SubscribeEntity(); //获取版本list List versionList = maintainFieldService.getMaintainByMaintainField(masterAuthor.getMaintainFieldId(), masterAuthor.getTableName()); if (versionList != null && !versionList.isEmpty()) { //版本排序 倒序 Collections.sort(versionList, new Comparator() { @Override public int compare(Maintain o1, Maintain o2) { return o2.getOrderNo().compareTo(o1.getOrderNo()); } }); ArrayList jsonObjects = new ArrayList<>(); for (Maintain maintain : versionList) { JSONObject object = new JSONObject(); object.fluentPut("id", maintain.getId()); object.fluentPut("version", maintain.getVersion()); jsonObjects.add(object); } //组装返回信息 subscribeEntity.setVersionList(jsonObjects); } //添加当前返回的数据类型为主题 subscribeEntity.setType(Constant.Master); String menuId = masterAuthor.getMenuId(); SysMenu sysMenu = menuService.selectById(menuId); if (sysMenu == null) { continue; } subscribeEntity.setId(sysMenu.getId()); subscribeEntity.setName(sysMenu.getName()); String maintainFieldId = masterAuthor.getMaintainFieldId(); String tableName = masterAuthor.getTableName(); //获取当前版本信息通过权限,主题 Maintain nowVersion = maintainService.getNowVersion(tableName); if (nowVersion == null) { continue; } List maintainByMaintainField = maintainFieldService.getMaintainByMaintainField(maintainFieldId, tableName); //校验权限是否包含最新版本 long count = maintainByMaintainField.stream().filter(maintain -> maintain.getId().equalsIgnoreCase(nowVersion.getId())).count(); if (count == 1) { result.add(subscribeEntity); } } //view 可注册的视图信息 List sysViews = viewService.selectList(new EntityWrapper().eq(Constant.USERID, userId)); List viewList = sysViews.stream() .map(view -> new SubscribeEntity().setId(view.getId()).setName(view.getName()).setType(Constant.View)) .collect(Collectors.toList()); result.addAll(viewList); return Result.success(result); } catch (Exception e) { e.printStackTrace(); return Result.error(CodeMsg.ERROR_SAVE_TOKEN); } } /** * * @description: 外部系统调用 获取token信息 * @return: 是否添加成功 * */ @RequestMapping(value = "/login", method = RequestMethod.GET) public Result login(HttpServletRequest request) { //请求头里获取用户信息 TUser user = DbUtils.getUser(request); String token = DbUtils.getUUID(32); //保存redis内,默认 超时时间30Min boolean b = redisClient.putRedisVal(token, user.getId()); if (b) { return Result.success(token); }else { return Result.success(CodeMsg.ERROR_SAVE_TOKEN); } } /** * * @description: 分页获取日志信息 * @param pageNo 页数 * @param touchType 请求类型 * @param pageSize 每页条数 * @return: 是否添加成功 * */ @RequestMapping(value = "/log/all/{pageNo}", method = RequestMethod.GET) public Result login( @PathVariable int pageNo, HttpServletRequest request) throws ParseException { String pageSizeStr = request.getParameter("pageSize"); String touchType = request.getParameter("touchType"); int pageSize = 15; if (!StringUtils.isEmpty(pageSizeStr)) { pageSize = Integer.valueOf(pageSizeStr); } Wrapper wrapper = new EntityWrapper(); if (!StringUtils.isEmpty(touchType)) { if ("sys".equalsIgnoreCase(touchType)) { //页面点击+系统主动分发的为分发列表 ArrayList strings = new ArrayList<>(); strings.add("muti"); strings.add("sys"); strings.add("surface"); wrapper.in("touch_type", strings); } else { //外部系统调用为调用列表 ArrayList strings = new ArrayList<>(); strings.add("api"); strings.add("rest"); wrapper.in("touch_type", strings); } } //筛选--数据类型 String dataType = request.getParameter("dataType"); if (!StringUtils.isEmpty(dataType)) { wrapper.eq("data_type", dataType); } //筛选--用户 String userId = request.getParameter("userId"); if (!StringUtils.isEmpty(userId)) { wrapper.eq("user_id", userId); } // 筛选-- 主题 String name = request.getParameter("name"); if (!StringUtils.isEmpty(name)) { wrapper.like("name", name); } //筛选-- 主题id或者视图id String tagId = request.getParameter("tagId"); if (!StringUtils.isEmpty(tagId)) { wrapper.eq("tag_id", tagId); } //筛选-- 主题版本 String maintainId = request.getParameter("maintainId"); if (!StringUtils.isEmpty(maintainId)) { wrapper.eq("maintain_id", maintainId); } //筛选--分发状态 String status = request.getParameter("status"); if (!StringUtils.isEmpty(status)) { wrapper.eq("status", status); } //--BY 时间段筛选 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String startTime = request.getParameter("startTime"); if (!StringUtils.isEmpty(startTime)) { Date start = simpleDateFormat.parse(startTime); wrapper.ge("create_time", start); } String endTime = request.getParameter("endTime"); if (!StringUtils.isEmpty(endTime)) { Date end = simpleDateFormat.parse(endTime); wrapper.le("create_time", end); } Page page = new Page<>(pageNo, pageSize); //创建时间倒叙 wrapper.orderBy("create_time desc"); Page sysDispenseLogsPage = dispenseLogsService.selectPage(page, wrapper); return Result.success(sysDispenseLogsPage); } }