* 'master' of http://221.0.232.152:9393/ability-center/share-platform: (80 commits)
  1.配置文件修改 2.融合服务bugfix
  1、修改大数据局配置文件,在最后增加了一个同步label标签表的数据库连接 2、简单修改了获取视频资源的部分代码
  1、flyway提交的sql改版本号为4.4
  配置文件修改
  西海岸基础设施视频资源来源修改
  西海岸基础设施视频资源来源修改
  1、增加获取视频资源过程中2张缓存表的定义
  ..
  融合服务完善
  1、代码注释的修改
  ..
  no message
  1、自动获取视频资源部门和通道信息过程中所使用的RestTemplate不使用框架定义的而使用新定义的(主要是重新配置超时时间)
  ..
  1、根据新的流程重新梳理获取视频资源(地区和通道信息)
  西海岸基础设施需求修改
  发送站内信 加点异常日志
  发送站内信There is no session 的处理
  bugfix
  bugfix
  ...

# Conflicts:
#	renren-admin/src/main/java/io/renren/modules/processForm/listener/v2/CorrectionListenerV2.java
#	renren-admin/src/main/java/io/renren/modules/processForm/service/ApiGatewayService.java
#	renren-admin/src/main/resources/application-prod.yml
This commit is contained in:
huangweixiong 2022-08-01 14:33:05 +08:00
commit a4e6dad451
79 changed files with 2237 additions and 745 deletions

View File

@ -0,0 +1,10 @@
ALTER TABLE `tb_fuse`
MODIFY COLUMN `description` varchar(1000) DEFAULT NULL COMMENT '融合服务描述',
DROP COLUMN `dept_user`,
DROP COLUMN `mobile`,
DROP COLUMN `provider`,
DROP COLUMN `provider_user`,
DROP COLUMN `provider_mobile`;
ALTER TABLE `tb_fuse_resource`
ADD COLUMN `type` varchar(128) NULL COMMENT '资源类型';

15
doc/后端开发约定.md Normal file
View File

@ -0,0 +1,15 @@
## 能力超市后端开发约定
### 关于数据库或orm
- 数据库版本管理工具使用flyway请将文件resource目录下对应位置文件名称使用 R__XXX 或 Vn.n__XXX R开头文件表明该文件为可重复执行sql当文件内容更改时该sql文件会在启动时再次执行一次即该文件无版本执行限制常用于数据初始化或数据迁移V开头的文件为版本约束文件常用于数据库表DDL操作使用场景一般为创表、加字段、加索引等ddl操作文件一旦被执行过不会再次重复执行
- 使用flyway管理的ddl语句对表的操作语句不要指定SchemaDatabase防止在不同地区部署的数据库名称不一致导致执行异常
- 使用flyway管理的ddl语句增加表的字段时不要指定新增字段位于已有字段后;防止表内不存在指定表字段导致ddl失败
### 关于编码风格checkstyle
- 使用idea的同事可以安装checkstyle插件对更改的文件内容进行代码格式化
### 关于性能
- 减少使用递归的使用

View File

@ -1,9 +1,7 @@
package io.renren.common.annotation;
import java.lang.annotation.*;
/**
* 流程流转消息通知
*/
@ -14,20 +12,16 @@ public @interface ActivitiNoticeOperation {
/**
* 节点名称
*
* @return
*/
String value() default "";
/**
* 流程名称
*
* @return
*/
String process() default "";
/**
* @return activiti 监听器类型 1:TaskListener 任务监听器; 2:ExecutionListener 执行监听器;
* activiti 监听器类型 1:TaskListener 任务监听器; 2:ExecutionListener 执行监听器;
*/
int type() default 1;
}

View File

@ -1,6 +1,5 @@
package io.renren.common.aspect;
import com.alibaba.fastjson.JSON;
import io.renren.common.annotation.ActivitiNoticeOperation;
import io.renren.modules.notice.dto.SysNoticeDTO;
@ -44,9 +43,9 @@ import java.util.concurrent.Executors;
@Component
public class ActivitiNoticeAspect {
private static final Integer cpuNUm = Runtime.getRuntime().availableProcessors();
private static final ExecutorService executor = Executors.newFixedThreadPool(cpuNUm * 3);
private static final Logger logger = LoggerFactory.getLogger(ActivitiNoticeAspect.class);
private static final Integer CPU_NUM = Runtime.getRuntime().availableProcessors();
private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(CPU_NUM * 3);
private static final Logger LOGGER = LoggerFactory.getLogger(ActivitiNoticeAspect.class);
@Autowired
private SysNoticeService sysNoticeService;
@ -59,7 +58,7 @@ public class ActivitiNoticeAspect {
@Autowired
private SysRoleService sysRoleService;
private Set<String> work_ = new CopyOnWriteArraySet<>();
private Set<String> work = new CopyOnWriteArraySet<>();
@Value("${big_date.name}")
private String bigDateDeptName; // 大数据局名称
@ -67,28 +66,28 @@ public class ActivitiNoticeAspect {
private String roleName; // 具备审批的角色名称
public ActivitiNoticeAspect() {
logger.error("构造ActivitiNoticeAspect");
LOGGER.error("构造ActivitiNoticeAspect");
}
@Pointcut("@annotation(io.renren.common.annotation.ActivitiNoticeOperation)")
public void activitiNoticePointCut() {
logger.error("切面:ActivitiNoticeAspect");
LOGGER.error("切面:ActivitiNoticeAspect");
}
@After(value = "activitiNoticePointCut()")
public void notice(JoinPoint joinPoint) throws NoSuchMethodException {
logger.error("-------------------------------进入流程流转消息切面---------------------------------");
LOGGER.error("-------------------------------进入流程流转消息切面---------------------------------");
long beginTime = System.currentTimeMillis();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes());
final ActivitiNoticeOperation activitiNoticeOperation = method.getAnnotation(ActivitiNoticeOperation.class);
logger.error("切面类型:" + activitiNoticeOperation.type());
LOGGER.error("切面类型:{}", activitiNoticeOperation.type());
switch (activitiNoticeOperation.type()) {
case 1: {
Arrays.asList(joinPoint.getArgs()).stream().findFirst().ifPresent(arg -> {
Arrays.stream(joinPoint.getArgs()).findFirst().ifPresent(arg -> {
final DelegateTask delegateTask = (DelegateTask) arg;
final String eventName = delegateTask.getEventName();
logger.error("任务监听器事件:" + eventName);
LOGGER.error("任务监听器事件:{}", eventName);
switch (eventName) {
case TaskListener.EVENTNAME_ASSIGNMENT: // 节点被委派给某人
assignment_notice(delegateTask, activitiNoticeOperation);
@ -105,20 +104,19 @@ public class ActivitiNoticeAspect {
Arrays.asList(joinPoint.getArgs()).stream().findFirst().ifPresent(arg -> {
final DelegateExecution execution = (DelegateExecution) arg;
final String eventName = execution.getEventName();
logger.error("执行监听器事件:" + eventName);
switch (eventName) {
case ExecutionListener.EVENTNAME_END: // 流程完成
end_notice(execution, activitiNoticeOperation);
break;
default:
LOGGER.error("执行监听器事件:{}", eventName);
if (ExecutionListener.EVENTNAME_END.equals(eventName)) { // 流程完成
end_notice(execution, activitiNoticeOperation);
}
});
} // 执行监听器
break;
default:
break;
}
//执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
logger.error("执行时长{} ms", time);
LOGGER.error("执行时长{} ms", time);
}
/**
@ -129,12 +127,12 @@ public class ActivitiNoticeAspect {
*/
private void task_complete_notice(final DelegateTask delegateTask, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = delegateTask.getVariables();
logger.error("表单:" + JSON.toJSONString(kv));
if (work_.contains(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString())) {
logger.error("------------出现重放------------");
LOGGER.error("表单:" + JSON.toJSONString(kv));
if (work.contains(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString())) {
LOGGER.error("------------出现重放------------");
return;
}
work_.add(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString());
work.add(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString());
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
@ -168,7 +166,7 @@ public class ActivitiNoticeAspect {
Optional<ResourceDTO> resourceDTO = Optional.ofNullable(resourceService.get(resourceId));
kv.get("resourceId");
kv.get("id");
String content = "【通知】" + userDTO.getRealName() + ",您发起的" + (resourceDTO.isPresent() ? resourceDTO.get().getName() : "") + activitiNoticeOperation.process() + " " + activitiNoticeOperation.value() + "节点" + finalResult;
String content = "【通知】" + userDTO.getRealName() + ",您发起的" + activitiNoticeOperation.process() + " " + activitiNoticeOperation.value() + "节点" + finalResult;
SysNoticeDTO dto = new SysNoticeDTO();
dto.setType(2);
dto.setTitle("流程节点系统通知");
@ -182,9 +180,9 @@ public class ActivitiNoticeAspect {
dto.setCreateDate(new Date());
dto.setFrom("通知");
sysNoticeService.save(dto);
}, executor);
}, EXECUTOR);
} catch (Exception e) {
logger.error("发送通知消息异常", e);
LOGGER.error("发送通知消息异常", e);
} finally {
// 防止重放
new Thread(() -> {
@ -193,7 +191,7 @@ public class ActivitiNoticeAspect {
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
work_.remove(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString());
work.remove(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString());
}
}).start();
}
@ -207,12 +205,12 @@ public class ActivitiNoticeAspect {
*/
private void end_notice(final DelegateExecution execution, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = execution.getVariables();
logger.error("表单:" + JSON.toJSONString(kv));
if (work_.contains(ExecutionListener.EVENTNAME_END + kv.get("id").toString())) {
logger.error("------------出现重放------------");
LOGGER.error("表单:" + JSON.toJSONString(kv));
if (work.contains(ExecutionListener.EVENTNAME_END + kv.get("id").toString())) {
LOGGER.error("------------出现重放------------");
return;
}
work_.add(ExecutionListener.EVENTNAME_END + kv.get("id").toString());
work.add(ExecutionListener.EVENTNAME_END + kv.get("id").toString());
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
@ -238,7 +236,7 @@ public class ActivitiNoticeAspect {
Long resourceId = null;
if (kv.containsKey("resourceId") && kv.get("resourceId") != null) {
resourceId = Long.valueOf(kv.get("resourceId").toString());
} else if (kv.containsKey("id") && kv.get("id") != null && kv.containsKey("-")) {
} else if (kv.containsKey("id") && kv.get("id") != null && !kv.get("id").toString().contains("-")) {
resourceId = Long.valueOf(kv.get("id").toString());
} else {
resourceId = 0L;
@ -248,7 +246,7 @@ public class ActivitiNoticeAspect {
SysUserDTO userDTO = sysUserService.get(Long.valueOf(finalCreator));
kv.get("resourceId");
kv.get("id");
String content = "【通知】" + userDTO.getRealName() + ",您发起的" + (resourceDTO.isPresent() ? resourceDTO.get().getName() : "申请摄像头列表") + activitiNoticeOperation.process() + "已完成,审核结果为:" + finalResult;
String content = "【通知】" + userDTO.getRealName() + ",您发起的" + activitiNoticeOperation.process() + "已完成,审核结果为:" + finalResult;
SysNoticeDTO dto = new SysNoticeDTO();
dto.setType(2);
dto.setTitle("流程结束系统通知");
@ -262,19 +260,19 @@ public class ActivitiNoticeAspect {
dto.setCreateDate(new Date());
dto.setFrom("通知");
sysNoticeService.save(dto);
}, executor).thenRunAsync(() -> {
logger.error("大数据局名称:" + bigDateDeptName);
}, EXECUTOR).thenRunAsync(() -> {
LOGGER.error("大数据局名称:" + bigDateDeptName);
SysDeptDTO deptDTO = sysDeptService.getByName(bigDateDeptName);
logger.error("deptDTOId:" + deptDTO.getId());
LOGGER.error("deptDTOId:" + deptDTO.getId());
SysRoleDTO roleDTO = sysRoleService.getByName(roleName);
logger.error("roleDTOId:" + roleDTO.getId());
LOGGER.error("roleDTOId:" + roleDTO.getId());
Optional<SysUserDTO> userDTO = Optional.ofNullable(sysUserService.getByDeptIdAndRoleId(deptDTO.getId(), roleDTO.getId()));
userDTO.ifPresent(user -> {
SysUserDTO creatorDTO = sysUserService.get(Long.valueOf(finalCreator));
SysNoticeDTO dto = new SysNoticeDTO();
dto.setType(2);
dto.setTitle("流程结束系统通知");
String content = "【通知】" + user.getRealName() + "," + creatorDTO.getRealName() + "发起的" + (resourceDTO.isPresent() ? resourceDTO.get().getName() : "") + activitiNoticeOperation.process() + "已完成,审核结果为:" + finalResult;
String content = "【通知】" + user.getRealName() + "," + creatorDTO.getRealName() + "发起的" + activitiNoticeOperation.process() + "已完成,审核结果为:" + finalResult;
dto.setContent(content); // 通知内容
dto.setReceiverType(1);
dto.setReceiverTypeIds(userDTO.get().getId().toString());
@ -286,9 +284,9 @@ public class ActivitiNoticeAspect {
dto.setFrom("通知");
sysNoticeService.save(dto);
});
}, executor);
}, EXECUTOR);
} catch (Exception exception) {
logger.error("发送通知消息异常", exception);
LOGGER.error("发送通知消息异常", exception);
} finally {
// 防止重放
new Thread(() -> {
@ -297,7 +295,7 @@ public class ActivitiNoticeAspect {
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
work_.remove(ExecutionListener.EVENTNAME_END + kv.get("id").toString());
work.remove(ExecutionListener.EVENTNAME_END + kv.get("id").toString());
}
}).start();
}
@ -312,12 +310,12 @@ public class ActivitiNoticeAspect {
*/
private void assignment_notice(final DelegateTask delegateTask, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = delegateTask.getVariables();
logger.error("表单:" + JSON.toJSONString(kv));
if (work_.contains(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString())) {
logger.error("------------出现重放------------");
LOGGER.error("表单:" + JSON.toJSONString(kv));
if (work.contains(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString())) {
LOGGER.error("------------出现重放------------");
return;
}
work_.add(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString());
work.add(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString());
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
@ -332,9 +330,9 @@ public class ActivitiNoticeAspect {
CompletableFuture.runAsync(() -> { // 发起人
try {
SysUserDTO assignee = sysUserService.get(Long.valueOf(delegateTask.getAssignee()));
logger.error("审核人:" + assignee.getId());
LOGGER.error("审核人:" + assignee.getId());
String content = "【通知】您发起的流程 " + activitiNoticeOperation.process() + " 当前审核节点为:" + activitiNoticeOperation.value() + ";当前审核人为:\"" + assignee.getDeptName() + "\"审核负责人\"" + assignee.getRealName() + "\"";
logger.info("通知内容:" + content);
LOGGER.info("通知内容:" + content);
SysNoticeDTO dto = new SysNoticeDTO();
dto.setType(2);
dto.setTitle("流程流转系统通知");
@ -349,12 +347,12 @@ public class ActivitiNoticeAspect {
dto.setFrom("通知");
sysNoticeService.save(dto);
} catch (Exception exception) {
logger.error("通知发起人失败", exception);
LOGGER.error("通知发起人失败", exception);
}
}, executor).thenRunAsync(() -> { // 审批者
}, EXECUTOR).thenRunAsync(() -> { // 审批者
try {
SysUserDTO owner = sysUserService.get(Long.valueOf(finalCreator));
String content = "【通知】" + owner.getRealName() + "发起的流程" + activitiNoticeOperation.process() + "已进入审核节点:" + activitiNoticeOperation.value() + ";当前审核人指派为您";
String content = "【通知】" + owner.getRealName() + "发起的流程" + activitiNoticeOperation.process() + " 已进入审核节点:" + activitiNoticeOperation.value() + ";当前审核人指派为您";
SysNoticeDTO dto = new SysNoticeDTO();
dto.setType(2);
dto.setTitle("流程流转系统通知");
@ -369,16 +367,16 @@ public class ActivitiNoticeAspect {
dto.setFrom("通知");
sysNoticeService.save(dto);
} catch (Exception exception) {
logger.error("通知审批人失败", exception);
LOGGER.error("通知审批人失败", exception);
}
}, executor);
}, EXECUTOR);
} catch (Exception e) {
logger.error("发送通知消息异常", e);
LOGGER.error("发送通知消息异常", e);
} finally {
new Thread(() -> {
try {
Thread.sleep(200);
work_.remove(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString());
work.remove(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString());
} catch (InterruptedException e) {
throw new RuntimeException(e);
}

View File

@ -53,7 +53,7 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("/ability/center/v2")
public class AbilityCenterControllerV2 {
private static final ExecutorService executor = Executors.newCachedThreadPool();
private static final ExecutorService executor = Executors.newWorkStealingPool();
private static final Logger logger = LoggerFactory.getLogger(AbilityCenterController.class);
private static final ObjectMapper oMapper = new ObjectMapper();
@Autowired
@ -108,10 +108,9 @@ public class AbilityCenterControllerV2 {
abilityBatchApplicationDTO.setApplyFlag(applyFlag); // 同一次的申请标识
final Optional<SysDeptDTO> deptDTO = Optional.ofNullable(sysDeptService.getByName(bigDateDeptName));
final UserDetail user = SecurityUser.getUser();
CompletableFuture.runAsync(() -> {
logger.info("处理能力申请!");
executor.execute(() -> {
deal(abilityBatchApplicationDTO, deptDTO, applyFlag, user);
}, executor);
});
return new Result().ok(LocalDateTime.now().toString());
}
@ -132,10 +131,7 @@ public class AbilityCenterControllerV2 {
logger.info("申请入参{}", JSON.toJSONString(abilityBatchApplicationDTO));
final Optional<SysDeptDTO> deptDTO = Optional.ofNullable(sysDeptService.getByName(bigDateDeptName));
final UserDetail user = SecurityUser.getUser();
CompletableFuture.runAsync(() -> {
logger.info("处理能力申请!");
deal(abilityBatchApplicationDTO, deptDTO, applyFlag, user);
}, executor);
deal(abilityBatchApplicationDTO, deptDTO, applyFlag, user);
return new Result().ok(LocalDateTime.now().toString());
}
@ -162,7 +158,7 @@ public class AbilityCenterControllerV2 {
tAbilityApplicationDTO.setApproveStatus("审核中");
tAbilityApplicationDTO.setDelFlag(0);
// v2 新增字段
tAbilityApplicationDTO.setCameraList(index.get("cameraId") == null ? null : JSON.toJSONString(index.get("cameraId")));
tAbilityApplicationDTO.setCameraList(index.get("channelId") == null ? null : JSON.toJSONString(index));
tAbilityApplicationDTO.setTitle(abilityBatchApplicationDTO.getTitle());
tAbilityApplicationDTO.setApplicationBackground(abilityBatchApplicationDTO.getApplicationBackground());
tAbilityApplicationDTO.setApplicationScene(abilityBatchApplicationDTO.getApplicationScene());
@ -217,14 +213,22 @@ public class AbilityCenterControllerV2 {
}, executor);
Boolean basic_facilities = dtoList.stream().map(index -> {
Optional<ResourceDTO> resourceDTOOptional = Optional.ofNullable(resourceService.get(Long.valueOf(index.getResourceId()))); // 从本库内查不到 视为其它平台的基础设施资源
return !resourceDTOOptional.isPresent() || !"基础设施".equals(resourceDTOOptional.get().getType());
}).filter(index -> !index).findAny().orElse(Boolean.TRUE);
Optional<ResourceDTO> resourceDTOOptional = Optional.ofNullable(resourceService.get(Long.valueOf(index.getResourceId())));
if (!resourceDTOOptional.isPresent()) { // 从本库内查不到 视为其它平台的基础设施资源
return true;
}
if ("基础设施".equals(resourceDTOOptional.get().getType())) { // 基础设施
return true;
}
return false;
}).filter(index -> index).findAny().orElse(Boolean.FALSE);
logger.error("--------------------是否全是基础设施{}----------------------------------------------", basic_facilities);
final List<Long> ids = dtoList.stream().map(TAbilityApplicationDTO::getId).collect(Collectors.toList()); // 发起申请的表单id
// 仿照请求接口 /act/running/startOfBusinessKey
ProcessStartDTO processStartDTO = new ProcessStartDTO();
processStartDTO.setBusinessKey(basic_facilities ? tAbilityApplicationDTOList.stream().filter(index -> StringUtils.isNotEmpty(index.getResourceId())).map(TAbilityApplicationDTO::getResourceId).findFirst().orElse(null) : JSON.toJSONString(ids)); // 申请的id列表 json字符 做businesskey
processStartDTO.setBusinessKey(basic_facilities ? tAbilityApplicationDTOList.stream().filter(index -> StringUtils.isNotEmpty(index.getResourceId()))
.map(TAbilityApplicationDTO::getResourceId).findFirst().orElse(null) :
JSON.toJSONString(ids.stream().limit(5).collect(Collectors.toList()))); // 申请的id列表 json字符 做businesskey
processStartDTO.setProcessDefinitionKey(key); //限定
AuditingBaseDTO auditingBaseDTO = new AuditingBaseDTO();
auditingBaseDTO.setCompleteEntry(Boolean.TRUE); // 首次录入
@ -250,11 +254,13 @@ public class AbilityCenterControllerV2 {
// 仿照请求接口 /processForm/tabilityapplication/updateInstanceId
CompletableFuture.runAsync(() -> {
if (dto.getBusinessKey() != null) {
String[] sqls = dtoList.stream().map(i -> String.format("UPDATE t_ability_application SET instance_id = %s WHERE id = %s", dto.getProcessInstanceId(), i.getId())).collect(Collectors.toList()).toArray(new String[dtoList.size()]);
String[] sqls = dtoList.stream().map(i -> String.format("UPDATE t_ability_application SET instance_id = %s WHERE id = %s", dto.getProcessInstanceId(), i.getId()))
.collect(Collectors.toList()).toArray(new String[dtoList.size()]);
jdbcTemplate.batchUpdate(sqls);
}
}, executor);
});
}
}
}

View File

@ -308,7 +308,7 @@ public class CensusController {
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}).reversed().thenComparing(i -> i.toString())
}).reversed().thenComparing(Object::toString)
); // 按应用领域数目逆序排序
return new Result<List<Map<String, Object>>>().ok(result);
}

View File

@ -342,40 +342,36 @@ public class CensusControllerV2 {
List<Map<String, Object>> dbAmount = (List<Map<String, Object>>) map.get("total");
return dbAmount.stream().filter(index -> "基础设施".equals(index.get("type").toString()))
.mapToLong(index -> Long.parseLong(index.get("count").toString())).sum();
}).thenAccept(sum -> {
result.add(new HashMap<String, Object>() {
{
put("amount", sum);
put("type", "视频资源数量");
}
});
});
}).thenAccept(sum -> result.add(new HashMap<String, Object>() {
{
put("amount", sum);
put("type", "视频资源数量");
}
}));
}
break;
case BAOTOU: { // 包头
allAmount = CompletableFuture.supplyAsync(() -> { // 获取平台总基础设施数目
return jdbcTemplate.queryForObject("SELECT COUNT(id) FROM tb_data_resource WHERE type = '基础设施' AND del_flag = 0", Long.class);
}).thenAccept(sum -> {
result.add(new HashMap<String, Object>() {
{
put("amount", sum);
put("type", "视频资源数量");
}
});
});
}).thenAccept(sum -> result.add(new HashMap<String, Object>() {
{
put("amount", sum);
put("type", "视频资源数量");
}
}));
}
break;
case TSINGTAO_XHA: { // 青岛西海岸
allAmount = CompletableFuture.supplyAsync(() -> { // 获取平台总基础设施数目
List<Long> result_ = new CopyOnWriteArrayList<>();
String url = String.format(tsingtao_xhaProperties.getCloudcam(), "", 1, 10);
String url = tsingtao_xhaProperties.getCamCount();
logger.info(url);
Request request = new Request.Builder().url(url).build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
JSONObject jsonObject = JSON.parseObject(response.body().string());
if (jsonObject.containsKey("data")) {
result_.add(jsonObject.getJSONObject("data").getLongValue("total"));
if (jsonObject.containsKey("errorNo") && jsonObject.getLongValue("errorNo") == 200) {
result_.add(jsonObject.getLongValue("body"));
}
} else {
logger.error("青岛西海岸获取失败");
@ -383,15 +379,13 @@ public class CensusControllerV2 {
} catch (Exception exception) {
logger.error("青岛西海岸失败", exception);
}
return result_.stream().filter(index -> index != null).findAny().orElse(0l);
}).thenAccept(sum -> {
result.add(new HashMap<String, Object>() {
{
put("amount", sum);
put("type", "视频资源数量");
}
});
});
return result_.stream().filter(Objects::nonNull).findAny().orElse(0L);
}).thenAccept(sum -> result.add(new HashMap<String, Object>() {
{
put("amount", sum);
put("type", "视频资源数量");
}
}));
}
break;
}
@ -461,19 +455,17 @@ public class CensusControllerV2 {
{
List<Map> lists = (dataResource != null && dataResource.containsKey("data") && dataResource.get("data") != null) ? (List<Map>) dataResource.get("data") : new ArrayList<>();
ArrayList<Map> list = new ArrayList<>();
lists.forEach(item -> {
list.add(new HashMap<String, Object>() {{
put("服务名称", item.get("zyname"));
put("申请次数", item.get("syqk"));
}});
});
lists.forEach(item -> list.add(new HashMap<String, Object>() {{
put("服务名称", item.get("zyname"));
put("申请次数", item.get("syqk"));
}}));
put("resourceTop5", list);
}
});
}
break;
case TSINGTAO_XHA: { // 青岛西海岸
Long total = 0L;
Long total;
Request request = new Request.Builder().url(tsingtao_xhaProperties.getResourcecount()).build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {

View File

@ -153,7 +153,7 @@ public class ResourceMountController {
@PostMapping(value = "/undercarriage")
@ApiOperation("批量进行能力下架申请")
@LogOperation("批量进行能力下架申请")
public Result<List<ProcessInstanceDTO>> undercarriage(@RequestBody TResourceUndercarriageApplyDTO tResourceUndercarriageApplyDTO) {
public Result<Object> undercarriage(@RequestBody TResourceUndercarriageApplyDTO tResourceUndercarriageApplyDTO) {
// 仿照请求接口 /act/process/lastestPage
PageData<Map<String, Object>> page = actProcessService.page(undercarriage_params);
if (page.getTotal() <= 0) { //
@ -175,7 +175,7 @@ public class ResourceMountController {
}
}).filter(index -> index).findAny();
if (undercarriage.isPresent()) {
return new Result<List<ProcessInstanceDTO>>().error("该资源已发起下架");
return new Result<>().ok("该资源已发起下架");
}
return new Result().ok(tResourceUndercarriageApplyDTO.getResource().stream().map(index -> {
List<ProcessInstanceDTO> dtoList = new ArrayList<>();
@ -190,6 +190,7 @@ public class ResourceMountController {
throw new RuntimeException("该资源已发起下架");
}
dto.setUndercarriageReason(tResourceUndercarriageApplyDTO.getReason());
dto.setUndercarriageEnclosure(tResourceUndercarriageApplyDTO.getEnclosure());
dto.setDelFlag(ResourceEntityDelFlag.NORMAL.getFlag()); // 设置为正常
String userId = SecurityUser.getUserId().toString();
Optional<SysUserDTO> userDTO = Optional.ofNullable(sysUserService.get(Long.valueOf(userId)));

View File

@ -1,6 +1,5 @@
package io.renren.common.domain;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
@ -21,4 +20,5 @@ public class Tsingtao_xhaProperties {
private String resourcecount;
private String resourceapplyinfo;
private String sjzy;
private String camCount;
}

View File

@ -105,7 +105,8 @@ public class CodeGenerationUtils {
try {
String finalTableName = tableName;
String finalNo = no;
String[] sqls = id.stream().map(i -> String.format("UPDATE %s SET apply_number = '%s' WHERE id = %s;", finalTableName, finalNo, i)).collect(Collectors.toList()).toArray(new String[id.size()]);
String[] sqls = id.stream().map(i -> String.format("UPDATE %s SET apply_number = '%s' WHERE id = %s;", finalTableName, finalNo, i))
.collect(Collectors.toList()).toArray(new String[id.size()]);
jdbcTemplate.batchUpdate(sqls);
} catch (Exception exception) {
logger.error("流水号写入失败", exception);

View File

@ -11,7 +11,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

View File

@ -14,6 +14,8 @@ import io.renren.modules.demanData.dto.TDemandDataDTO;
import io.renren.modules.demanData.service.TDemandDataService;
import io.renren.modules.processForm.dto.TAbilityApplicationDTO;
import io.renren.modules.processForm.service.TAbilityApplicationService;
import io.renren.modules.resource.dto.ResourceDTO;
import io.renren.modules.resource.service.ResourceService;
import io.renren.modules.resourceMountApply.dto.TResourceMountApplyDTO;
import io.renren.modules.resourceMountApply.service.TResourceMountApplyService;
import io.renren.modules.sys.dto.SysUserDTO;
@ -22,6 +24,12 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricProcessInstanceQuery;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -45,6 +53,9 @@ import java.util.Optional;
@RequestMapping("/act/his")
@Api(tags = "流程历史")
public class HistoryController {
@Autowired
protected HistoryService historyService_;
@Autowired
private ActHistoryService historyService;
@Autowired
@ -58,6 +69,15 @@ public class HistoryController {
private TResourceMountApplyService tResourceMountApplyService;
@Autowired
private TDemandDataService tDemandDataService;
@Autowired
private ResourceService resourceService;
@Autowired
protected TaskService taskService;
@Autowired
protected RepositoryService repositoryService;
@Autowired
protected RuntimeService runtimeService;
@GetMapping("getInstImage")
@ApiOperation(value = "获取流程活动图", produces = "application/octet-stream")
@ -130,11 +150,21 @@ public class HistoryController {
if (params.containsKey("processDefinitionKey") && StringUtils.isNotEmpty(params.get("processDefinitionKey").toString())) {
params.replace("processDefinitionKey", params.get("processDefinitionKey").toString() + "%");
}
params.put("ended", "true");
PageData<ProcessActivityDTO> page = activitiService.getMyProcessInstancePage(params);
setExtraProcessProperties(Optional.ofNullable(page.getList()).orElse(new ArrayList<>()));
return new Result().ok(page);
}
@GetMapping("getVariablesByInstanceId")
@ApiOperation("获取已办任务流程参数")
@LogOperation("获取已办任务流程参数")
public Result getVariablesByInstanceId(String instanceId, String variableName) {
HistoricProcessInstanceQuery query = historyService_.createHistoricProcessInstanceQuery();
Optional<HistoricProcessInstance> processInstance = Optional.ofNullable(query.processInstanceId(instanceId).includeProcessVariables().singleResult());
return new Result().ok(processInstance.get().getProcessVariables().get(variableName));
}
@GetMapping("getDeptHandledInstancePage")
@ApiOperation("已办任务:根据登录账号查询其所在部门的已办任务")
@LogOperation("已办任务:根据登录账号查询其所在部门的已办任务")
@ -174,9 +204,11 @@ public class HistoryController {
abilityApplicationService.getByInstanceId(activityDTO.getProcessInstanceId());
TResourceMountApplyDTO tResourceMountApplyDTO = null;
TDemandDataDTO tDemandDataDTO = null;
ResourceDTO resourceDTO = null;
if (!activityDTO.getBusinessKey().startsWith("[") && !activityDTO.getBusinessKey().startsWith("{")) { // json 内容批量申请
tResourceMountApplyDTO = tResourceMountApplyService.get(Long.valueOf(activityDTO.getBusinessKey()));
tDemandDataDTO = tDemandDataService.get(Long.valueOf(activityDTO.getBusinessKey()));
resourceDTO = resourceService.get(Long.valueOf(activityDTO.getBusinessKey()));
}
if (abilityApplicationDTOS != null && !abilityApplicationDTOS.isEmpty()) {
StringBuffer stringBuffer = new StringBuffer();
@ -190,6 +222,8 @@ public class HistoryController {
activityDTO.setResourceName(tResourceMountApplyDTO.getResourceDTO().getName());
} else if (tDemandDataDTO != null) {
activityDTO.setResourceName(tDemandDataDTO.getDemandSubject());
} else if (resourceDTO != null) {
activityDTO.setResourceName(resourceDTO.getName());
}
}
}

View File

@ -277,12 +277,12 @@ public class ActHistoryService {
for (ProcessInstanceDTO dto : list) {
List<TAbilityApplicationDTO> abilityApplicationDTO = tAbilityApplicationService.getByInstanceId(dto.getProcessInstanceId()); // 获取申请表单
if (abilityApplicationDTO != null && !abilityApplicationDTO.isEmpty()) {
if (abilityApplicationDTO.stream().filter(index -> StringUtils.isNotEmpty(index.getCameraList())).findAny().isPresent()) { // 存在摄像头
if (abilityApplicationDTO.stream().anyMatch(index -> StringUtils.isNotEmpty(index.getCameraList()))) { // 存在摄像头
dto.setName("申请摄像头列表");
dto.setResourceId(null);
} else {
StringBuffer stringBuffer = new StringBuffer();
abilityApplicationDTO.stream().map(TAbilityApplicationDTO::getSystem).filter(index -> StringUtils.isNotEmpty(index)).forEach(index -> {
abilityApplicationDTO.stream().map(TAbilityApplicationDTO::getSystem).filter(StringUtils::isNotEmpty).forEach(index -> {
stringBuffer.append(index);
stringBuffer.append(",");
});

View File

@ -209,8 +209,6 @@ public class ActTaskService extends BaseServiceImpl {
for (Task task : list) {
TaskDTO dto = new TaskDTO();
this.convertTaskInfo(task, dto);
//Optional<SysUserEntity> sysUserEntity = Optional.ofNullable(sysUserService.selectById(dto.getUserId()));
//dto.setUserName(sysUserEntity.get().getRealName());
Map<String, Object> processVariable = new LinkedHashMap<>();
if (dto.getBusinessKey().startsWith("{") || dto.getBusinessKey().startsWith("[")) { // 为json内容 (特殊处理批量)

View File

@ -27,6 +27,7 @@ import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@ -97,10 +98,14 @@ public class TDemandCommentController {
// @RequiresPermissions("demandComment:tdemandcomment:info")
public Result<TDemandCommentDTO> get(@PathVariable("id") Long id) {
TDemandCommentDTO data = tDemandCommentService.get(id);
if (null != data) {
data.setDemandDataDTO(tDemandDataService.get(data.getTargetId()));
return new Result<TDemandCommentDTO>().ok(data);
} else {
return new Result<TDemandCommentDTO>().ok(new TDemandCommentDTO());
}
data.setDemandDataDTO(tDemandDataService.get(data.getTargetId()));
return new Result<TDemandCommentDTO>().ok(data);
}
@PostMapping

View File

@ -49,12 +49,7 @@ public class FuseController {
@ApiImplicitParam(name = "description", value = "融合服务描述", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "type", value = "融合服务类型", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "applicationArea", value = "应用领域", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "deptId", value = "所属部门", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "deptUser", value = "部门联系人", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "mobile", value = "部门联系人电话", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "provider", value = "服务商", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "providerUser", value = "服务商联系人", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "providerMobile", value = "服务商联系人电话", paramType = "query", dataType = "String")
@ApiImplicitParam(name = "deptId", value = "所属部门", paramType = "query", dataType = "int")
})
public Result<PageData<TbFuseDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) {
PageData<TbFuseDTO> page = tbFuseService.page(params);

View File

@ -18,6 +18,4 @@ public interface TbFuseDao extends BaseDao<TbFuseEntity> {
List<TbFuseDTO> getFuseDTOList(Map params);
List<Map<String, Object>> selectGroupByDeptId();
}

View File

@ -29,16 +29,6 @@ public class TbFuseDTO {
private String applicationArea;
@ApiModelProperty(value = "所属部门")
private Long deptId;
@ApiModelProperty(value = "部门联系人")
private String deptUser;
@ApiModelProperty(value = "部门联系人电话")
private String mobile;
@ApiModelProperty(value = "服务商")
private String provider;
@ApiModelProperty(value = "服务商联系人")
private String providerUser;
@ApiModelProperty(value = "服务商联系人电话")
private String providerMobile;
@ApiModelProperty(value = "创建人")
private Long creator;
@ApiModelProperty(value = "创建时间")

View File

@ -1,6 +1,5 @@
package io.renren.modules.fuse.dto;
import io.renren.modules.resource.dto.ResourceDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -24,6 +23,8 @@ public class TbFuseResourceDTO {
@ApiModelProperty(value = "资源挂载顺序")
private String sequence;
@ApiModelProperty(value = "资源")
private ResourceDTO resource;
private Object resource;
@ApiModelProperty(value = "资源类型")
private String type;
}

View File

@ -43,26 +43,6 @@ public class TbFuseEntity extends BaseEntity {
*/
@TableField(fill = FieldFill.INSERT)
private Long deptId;
/**
* 部门联系人
*/
private String deptUser;
/**
* 部门联系人电话
*/
private String mobile;
/**
* 服务商
*/
private String provider;
/**
* 服务商联系人
*/
private String providerUser;
/**
* 服务商联系人电话
*/
private String providerMobile;
/**
* 创建人
*/

View File

@ -32,4 +32,8 @@ public class TbFuseResourceEntity {
* 顺序
*/
private String sequence;
/**
* 资源类型
*/
private String type;
}

View File

@ -21,6 +21,4 @@ public interface TbFuseService extends CrudService<TbFuseEntity, TbFuseDTO> {
Integer deleteFuse(Long id);
Integer count(Map<String, Object> params);
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import io.renren.common.constant.Constant;
import io.renren.common.page.PageData;
import io.renren.common.service.impl.CrudServiceImpl;
import io.renren.common.utils.Result;
import io.renren.modules.fuse.dao.TbFuseAttrDao;
import io.renren.modules.fuse.dao.TbFuseDao;
import io.renren.modules.fuse.dao.TbFuseResourceDao;
@ -16,10 +17,17 @@ import io.renren.modules.fuse.entity.TbFuseAttrEntity;
import io.renren.modules.fuse.entity.TbFuseEntity;
import io.renren.modules.fuse.entity.TbFuseResourceEntity;
import io.renren.modules.fuse.service.TbFuseService;
import io.renren.modules.monitor.mapper.CameraChannelMapper;
import io.renren.modules.resource.dataResource.AbstractDataResourceService;
import io.renren.modules.resource.dataResource.DataResourceFactory;
import io.renren.modules.resource.dto.GetDataResourceListDto;
import io.renren.modules.resource.dto.ResourceDTO;
import io.renren.modules.resource.service.ResourceService;
import io.renren.modules.resource.service.impl.ResourceServiceImpl;
import io.renren.modules.resourceCollection.dao.ResourceCollectionDao;
import io.renren.modules.security.user.SecurityUser;
import io.renren.modules.sys.service.SysDeptService;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@ -50,6 +58,10 @@ public class TbFuseServiceImpl extends CrudServiceImpl<TbFuseDao, TbFuseEntity,
private ResourceService resourceService;
@Autowired
private ResourceCollectionDao resourceCollectionDao;
@Autowired
private CameraChannelMapper cameraChannelMapper;
@Autowired
private SysDeptService sysDeptService;
@Override
public QueryWrapper<TbFuseEntity> getWrapper(Map<String, Object> params) {
@ -71,21 +83,6 @@ public class TbFuseServiceImpl extends CrudServiceImpl<TbFuseDao, TbFuseEntity,
case "deptId":
wrapper.eq(StringUtils.isNotBlank(params.get("deptId").toString()), "dept_id", params.get("deptId").toString());
break;
case "deptUser":
wrapper.like(StringUtils.isNotBlank(params.get("deptUser").toString()), "dept_user", params.get("deptUser").toString());
break;
case "mobile":
wrapper.like(StringUtils.isNotBlank(params.get("mobile").toString()), "mobile", params.get("mobile").toString());
break;
case "provider":
wrapper.like(StringUtils.isNotBlank(params.get("provider").toString()), "provider", params.get("provider").toString());
break;
case "providerUser":
wrapper.like(StringUtils.isNotBlank(params.get("providerUser").toString()), "provider_user", params.get("providerUser").toString());
break;
case "providerMobile":
wrapper.like(StringUtils.isNotBlank(params.get("providerMobile").toString()), "provider_mobile", params.get("providerMobile").toString());
break;
case "creator":
wrapper.eq(StringUtils.isNotBlank(params.get("creator").toString()), "creator", params.get("creator").toString());
break;
@ -115,23 +112,15 @@ public class TbFuseServiceImpl extends CrudServiceImpl<TbFuseDao, TbFuseEntity,
}
params.put("userId", SecurityUser.getUserId());
List<TbFuseDTO> dtoList = baseDao.getFuseDTOList(params);
Map<String, Map<String, Object>> dataResourceList=getDataResource();
dtoList.forEach(dto -> {
dto.setFuseResourceList(getFuseResourceByFuseId(dto.getId()));
dto.setFuseResourceList(getFuseResourceByFuseId(dto.getId(), dataResourceList));
dto.setFuseAttrList(getAttrByFuseId(dto.getId()));
});
List<TbFuseDTO> result = dtoList.stream().skip((curPage - 1) * limit).limit(limit).collect(Collectors.toList());
return new PageData(result, dtoList.size());
}
@Override
public Integer count(Map<String, Object> params) {
if (params != null) {
return baseDao.selectCount(getWrapper(params));
} else {
return baseDao.selectCount(null);
}
}
@Override
public TbFuseDTO getFuseById(Long id) {
TbFuseEntity fuseEntity = fuseDao.selectById(id);
@ -141,7 +130,7 @@ public class TbFuseServiceImpl extends CrudServiceImpl<TbFuseDao, TbFuseEntity,
TbFuseDTO fuseDTO = new TbFuseDTO();
BeanUtils.copyProperties(fuseEntity, fuseDTO);
fuseDTO.setFuseAttrList(getAttrByFuseId(id));
fuseDTO.setFuseResourceList(getFuseResourceByFuseId(id));
fuseDTO.setFuseResourceList(getFuseResourceByFuseId(id, getDataResource()));
setCollection(fuseDTO);
return fuseDTO;
}
@ -166,16 +155,58 @@ public class TbFuseServiceImpl extends CrudServiceImpl<TbFuseDao, TbFuseEntity,
}).collect(Collectors.toList());
}
private List<TbFuseResourceDTO> getFuseResourceByFuseId(Long fuseId) {
private Map<String, Map<String, Object>> getDataResource() {
Map<String, Map<String, Object>> result = new HashMap<>();
Optional<AbstractDataResourceService> factory = DataResourceFactory.build();
if (factory.isPresent()) {
GetDataResourceListDto dto = new GetDataResourceListDto().setPageNum(0).setPageSize(30);
Map<String, Object> dataMap = (Map<String, Object>) factory.get().getDataResource(dto);
if (dataMap != null) {
List<Map<String, Object>> list = (List<Map<String, Object>>) dataMap.get("data");
list.stream().forEach(map -> {
if (map.containsKey("zyname")) {
result.put(map.get("guid").toString(), map);
} else {
result.put(map.get("serviceId").toString(), map);
}
});
}
}
return result;
}
private List<TbFuseResourceDTO> getFuseResourceByFuseId(Long fuseId, Map<String, Map<String, Object>> dataResourceMap) {
List<TbFuseResourceDTO> result = new ArrayList();
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("fuse_id", fuseId);
List<TbFuseResourceEntity> list = fuseResourceDao.selectList(wrapper);
return list.stream().map(attr -> {
TbFuseResourceDTO dto = new TbFuseResourceDTO();
BeanUtils.copyProperties(attr, dto);
dto.setResource(resourceService.get(dto.getResourceId()));
return dto;
}).collect(Collectors.toList());
list.stream().filter(index -> index.getType() != null).collect(Collectors.groupingBy(TbFuseResourceEntity::getType)).forEach((type, value) -> {
if ("组件服务".equals(type)) {
result.addAll(value.stream().map(attr -> {
TbFuseResourceDTO dto = new TbFuseResourceDTO();
BeanUtils.copyProperties(attr, dto);
ResourceDTO resourceDTO=resourceService.get(dto.getResourceId());
resourceDTO.setDeptName(sysDeptService.get(resourceDTO.getDeptId()).getName());
dto.setResource(resourceDTO);
return dto;
}).collect(Collectors.toList()));
} else if ("数据资源".equals(type)) {
result.addAll(value.stream().map(attr -> {
TbFuseResourceDTO dto = new TbFuseResourceDTO();
BeanUtils.copyProperties(attr, dto);
dto.setResource(dataResourceMap.get(dto.getResourceId()));
return dto;
}).collect(Collectors.toList()));
} else if ("基础设施".equals(type)) {
result.addAll(value.stream().map(attr -> {
TbFuseResourceDTO dto = new TbFuseResourceDTO();
BeanUtils.copyProperties(attr, dto);
dto.setResource(cameraChannelMapper.selectById(dto.getResourceId().toString()));
return dto;
}).collect(Collectors.toList()));
}
});
return result;
}
@Override

View File

@ -13,7 +13,7 @@ import java.util.List;
import java.util.Map;
@Service
public class MonitorService {
public class MonitorServiceV2 {
@Value("${hisense.gateway.url}")
private String gatewayDomain;

View File

@ -17,9 +17,9 @@ import java.util.Date;
* 清理操作日志表任务
*/
@Component("clearLogTask")
public class clearLogTask implements ITask {
public class ClearLogTask implements ITask {
private static final Logger logger = LoggerFactory.getLogger(clearLogTask.class);
private static final Logger logger = LoggerFactory.getLogger(ClearLogTask.class);
@Autowired
private SysLogOperationDao sysLogOperationDao;

View File

@ -1,5 +1,6 @@
package io.renren.modules.monitor.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import io.renren.modules.monitor.dto.*;
@ -151,9 +152,7 @@ public class Controller {
List<CameraChannelDto1> list = cameraChannelMapper.selectByChannelCode(channelCode);
Result success = Result.success(list);
return success;
return Result.success(list);
}
@ -170,9 +169,7 @@ public class Controller {
List<CameraChannel> labels = cameraChannelMapper.selectByChannelName(channelName);
Result success = Result.success(labels);
return success;
return Result.success(labels);
}
/**
@ -254,8 +251,7 @@ public class Controller {
public Result selectAllByGps(Double gpsX,Double gpsY,Integer radius){
double[] around = LongLatUtil.getAround(gpsX, gpsY, radius);
List<CameraChannel> c = cameraChannelMapper.selectAllByGps(around[0], around[2], around[1], around[3]);
Result success = Result.success(c);
return success;
return Result.success(c);
}
/**
@ -268,9 +264,7 @@ public class Controller {
List<Label> labels = cameraChannelMapper.selectAllLabel();
Result success = Result.success(labels);
return success;
return Result.success(labels);
}
/**
@ -283,9 +277,7 @@ public class Controller {
List<Label> labels = cameraChannelMapper.selectByLabelCity();
Result success = Result.success(labels);
return success;
return Result.success(labels);
}
/**
* 根据标签名字模糊查询标签
@ -299,9 +291,7 @@ public class Controller {
List<Label> labels = cameraChannelMapper.selectByLabelName(labelName);
Result success = Result.success(labels);
return success;
return Result.success(labels);
}
/**
@ -319,9 +309,7 @@ public class Controller {
List<CameraOrganization> organs = cameraOrgenMapper.selectSubOrganization(parentId);
Result success = Result.success(organs);
return success;
return Result.success(organs);
}
/**
@ -338,24 +326,13 @@ public class Controller {
})
public Result selectNLAll(Integer page,Integer pageSize,String labelCode){
List<CameraChannelNLDto> selectNLAll = cameraChannelMapper.selectNLAll(page,pageSize);
if (labelCode != null && labelCode != ""){
if (labelCode != null && !"".equals(labelCode)){
List<CameraChannelNLDto> dtos = cameraChannelMapper.selectByLabel(page, pageSize);
Result success = Result.success(dtos);
return success;
return Result.success(dtos);
}
Result success = Result.success(selectNLAll);
return success;
return Result.success(selectNLAll);
}
//查询视频点播巡检结果只取异常的
// @RequestMapping("listChannelPlayStates")
// public Result listChannelPlayStates(
// @RequestParam(value="page",required = false,defaultValue = "1") Integer page,
// @RequestParam(value="pageSize",required = false,defaultValue = "20") Integer pageSize
// ){
// return monitorService.listChannelPlayStates();
// }
//道路统计数据与排名
@GetMapping("roadData")
@ApiOperation("道路统计数据与排名根据后台dt调用接口")
@ -450,8 +427,7 @@ public class Controller {
@GetMapping("passengerFlow")
@ApiOperation("获取最新的客流列表,测试接口,调用接口获取")
public List<Map> passengerFlow(){
List<Map> list = passengerFlowService.passengerFlow();
return list;
return passengerFlowService.passengerFlow();
}
//获取最新的实时客流列表从表获取
@ -459,15 +435,13 @@ public class Controller {
@ApiOperation("获取最新的实时客流列表,从表获取,热力图")
@ApiImplicitParam(name="timeId",value = "时间点",required = false,paramType = "query",dataType = "string")
public List<PassengerFlow> listPassengerFlow(@RequestParam(value="timeId",required = false,defaultValue = "1970000000") String timeId){
List<PassengerFlow> list = passengerFlowService.listPassengerFlow(timeId);
return list;
return passengerFlowService.listPassengerFlow(timeId);
}
//从表中获取最新的客流列表并筛选出all_nums >=5000的
@GetMapping("listPassengerFlowByAllNums")
@ApiOperation("从表中获取最新的客流列表并筛选出all_nums >=5000的")
public List<PassengerFlow> listPassengerFlowByAllNums(){
List<PassengerFlow> list = passengerFlowService.listPassengerFlowByAllNums();
return list;
return passengerFlowService.listPassengerFlowByAllNums();
}
//获取实时客流并保存到表t_passenger_flow
@ -567,7 +541,7 @@ public class Controller {
@ApiImplicitParam(name="longitude",value = "经度",paramType = "query",required = true,dataType = "double")
})
public Result listBuildingSiteByPoints(double longitude,double latitude,Integer radius){
List<BuildingSite> list = new ArrayList<>();
List<BuildingSite> list;
list = buildingSitrService.listBuildingSiteByPoints(longitude,latitude,radius);
return Result.success(list);
}
@ -580,8 +554,7 @@ public class Controller {
@ApiOperation("查询全部工地信息")
public Result selectBuildSite(){
List<BuildingSite> buildingSites = buildingSiteMapper.selectBuildSite();
Result success = Result.success(buildingSites);
return success;
return Result.success(buildingSites);
}
/******************************2022/07/13 ytl修改视频资源 start********************************************/
@ -598,13 +571,9 @@ public class Controller {
if (parentId == null){
parentId = "";
}
//List<CameraOrganization> organs = cameraOrgenMapper.selectSubOrganization(parentId);
List<Map> maps = monitorService.selectSubOrganizationNew(parentId);
Result success = Result.success(maps);
return success;
return Result.success(maps);
}
/**
@ -640,23 +609,19 @@ public class Controller {
list1 = Arrays.asList(labelCodes);
}
//查询当前地区及下级地区的id,组成list,2022-07-14,ytl
List<Map> orgenIds = new ArrayList<>();
String path = "";
if(queryMap.get("parentId") != null && StringUtils.isNotBlank(queryMap.get("parentId").toString())){
//根据parentId获取地区表中的path
Map parentId = cameraOrgenMapper.selectOrgenizationById(queryMap.get("parentId").toString());
path = parentId.get("path").toString();
}
List<Map> list = cameraChannelMapper.selectByParentIdNew(queryMap, list1,path);
Result success = Result.success(list);
success.setCount(cameraChannelMapper.selectByParentIdCountNew(queryMap, list1,path));
return success;
}
/**
* 摄像头按照市区进行聚合查询
*/
@ -670,29 +635,32 @@ public class Controller {
* 保存区域信息
*/
@GetMapping("/saveOrgenization")
public Result saveOrgenization() throws Exception{
List<JSONObject> orgenizationByPage = monitorService.getOrgenization(new ArrayList<JSONObject>());
List<Map> maps = JSONObject.parseArray(JSONObject.toJSONString(orgenizationByPage), Map.class);
if(maps.size() > 0){
public Result saveOrgenization() {
List<JSONObject> orgenizationByPage = monitorService.getOrgenization(new ArrayList<>());
List<Map> maps = JSON.parseArray(JSON.toJSONString(orgenizationByPage), Map.class);
if(!maps.isEmpty()){
List<List<Map>> lists = Lists.partition(maps,100);
lists.forEach(list->{
cameraOrgenMapper.batchSaveOrgenization(list);
});
lists.forEach(list-> cameraOrgenMapper.batchSaveOrgenization(list));
//修改path 信息
List<Map> maps2 = cameraOrgenMapper.testAll();
maps2.forEach(map->{
monitorService.setOrganizationPath(map,map.get("parent_id").toString());
});
maps2.forEach(map-> monitorService.setOrganizationPath(map,map.get("parent_id").toString()));
maps2.forEach(m->{
cameraOrgenMapper.updateOrganizationPaht(m.get("path").toString(),m.get("id").toString());
});
maps2.forEach(m-> cameraOrgenMapper.updateOrganizationPaht(m.get("path").toString(),m.get("id").toString()));
}
return Result.success();
}
/**
* 事件版的保存区域组织信息
*/
@GetMapping("/saveOrgenizationEvent")
public Result saveOrgenizationEvent() throws Exception{
monitorService.getAndSaveOrgenization();
return Result.success();
}
/**
* 保存通道信息多线程版
* @return
@ -703,5 +671,14 @@ public class Controller {
return Result.success("成功收到指令,请耐心等待");
}
/******************************2022/07/13 ytl修改视频资源 end********************************************/
/**
* 07-25增加的判断视频资源是否在库中
* 以后可以删除直接调用cameraChannelServicecheckCameraIfExists即可
* @param list
* @return
*/
@GetMapping("/checkCameraIfExists")
public Result checkCameraIfExists(@RequestParam List<String> list){
return cameraChannelService.checkCameraIfExists(list);
}
}

View File

@ -0,0 +1,62 @@
package io.renren.modules.monitor.eventListen;
import io.renren.modules.monitor.eventListen.saveCameraChannelEndEvent.SaveCameraChannelEndEvent;
import io.renren.modules.monitor.eventListen.saveOrgenizationEndEvent.SaveOrgenizationEndEvent;
import io.renren.modules.monitor.mapper.CameraOrgenizationMapper;
import io.renren.modules.monitor.service.MonitorService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* 关于获取视频通道相关信息的监听器
* @author ytl
* @Date 2022/7/27 15:17
**/
@Component
@Log4j2
public class GetAboutCameraChannelEventListener {
@Autowired
private MonitorService monitorService;
@Autowired
private CameraOrgenizationMapper cameraOrgenMapper;
@Async
@Order(value = 1)//值越小越优先执行
@EventListener(SaveOrgenizationEndEvent.class)
public void listenOrgenizationEvent(SaveOrgenizationEndEvent event) throws Exception{
boolean msg = event.getMsg();
log.info("开始处理SaveOrgenizationEndEvent 消息事件。。。。"+msg);
//......处理流程代码
if(msg){
monitorService.saveChannelInfoAsync();
}
}
@Async
@Order(value = 2)//值越小越优先执行
@EventListener(SaveCameraChannelEndEvent.class)
public void listenChannelEvent(SaveCameraChannelEndEvent event) throws Exception{
boolean msg = event.getMsg();
log.info("开始处理SaveCameraChannelEndEvent 消息事件。。。。"+msg);
if(msg){
//保存cache表信息到正式表
monitorService.insertChannelCacheToCameraChannel();
//更新t_region的channelcount
cameraOrgenMapper.updateRegionChannelCount();
log.info("获取视频资源的组织和通道新消息流程结束。。。。。。");
//更新武伟达的标签表
monitorService.synchronizeMtmLabel();
}
}
}

View File

@ -0,0 +1,24 @@
package io.renren.modules.monitor.eventListen.saveCameraChannelEndEvent;
import org.springframework.context.ApplicationEvent;
/**
* @author ytl
* @Date 2022/7/28 10:24
**/
public class SaveCameraChannelEndEvent extends ApplicationEvent {
private boolean msg;
public SaveCameraChannelEndEvent(Object source,boolean msg) {
super(source);
this.msg = msg;
}
public boolean getMsg(){
return msg;
}
public void setMsg(boolean msg){
this.msg = msg;
}
}

View File

@ -0,0 +1,24 @@
package io.renren.modules.monitor.eventListen.saveOrgenizationEndEvent;
import lombok.extern.log4j.Log4j2;
import org.springframework.context.ApplicationEvent;
/**
* @author ytl
* @Date 2022/7/27 15:13
**/
public class SaveOrgenizationEndEvent extends ApplicationEvent {
private boolean msg;
public SaveOrgenizationEndEvent(Object source,boolean msg) {
super(source);
this.msg = msg;
}
public boolean getMsg(){
return msg;
}
public void setMsg(boolean msg){
this.msg = msg;
}
}

View File

@ -7,9 +7,11 @@ import io.renren.modules.monitor.dto.CameraChannelNLDto;
import io.renren.modules.monitor.dto.ChannelLabelDto;
import io.renren.modules.monitor.entity.CameraChannel;
import io.renren.modules.monitor.entity.Label;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.security.core.parameters.P;
import java.util.List;
import java.util.Map;
@ -71,4 +73,17 @@ public interface CameraChannelMapper extends BaseDao<CameraChannel> {
List<Map> selectChannelNumByRegion();
void batchSaveMtmLabel(@Param("list") List<Map<String,Object>> list);
@Delete("delete from t_camera_channel_cache where gps_x is null or gps_y is null or gps_x = '' or gps_y = '' ")
void deleteByNonPlace();
Map selectCameraChannelById(@Param("channelId") String channelId);
List<Map> selectCameraChannelByPid(@Param("parentId") String parentId);
void batchSaveCameraChannel(@Param("list") List<Map> list);
void insertChannelCacheToCameraChannel();
void batchSaveLabel(@Param("list") List<Map<String,Object>> list);
}

View File

@ -25,44 +25,47 @@ public interface CameraOrgenizationMapper extends BaseDao<CameraOrganization> {
void batchSaveOrgenization(List<Map> list);
@Select("SELECT name,parent_id,id,path FROM t_camera_organization WHERE id = #{id}")
@Select("SELECT name,parent_id,id,path FROM t_camera_organization_cache WHERE id = #{id}")
Map selectOrgenizationById(@Param("id") String id);
@Update("UPDATE t_camera_organization SET path = TRIM( TRAILING '->' FROM #{path}) where id = #{id}")
void updateOrganizationPaht(@Param("path") String path,@Param("id") String id);
void updateOrganizationPath(@Param("path") String path,@Param("id") String id);
@Select(" SELECT id FROM t_camera_organization")
List<Map> listOrgenization();
@Select(" SELECT name FROM t_camera_organization where substring(id,5) = #{idPart} and left(id,3) = '006'")
String getNameByidPart(@Param("idPart")String idPart);
@Update("UPDATE t_camera_organization SET COUNT = COUNT + 1 WHERE id = #{id}")
void updateOrganizationCount(@Param("id") String id);
// @Update("UPDATE t_camera_organization SET COUNT = COUNT + 1 WHERE id = #{id}")
// void updateOrganizationCount(@Param("id") String id);
void batchSaveCameraChannel(List<Map> list);
@Select("select * from t_camera_organization")
List<Map> testAll();
List<Map> selectAll();
@Update("truncate table ${tableName}")
void truncate(@Param("tableName") String tableName) ;
@Select("select orgaid,id,name,path from t_camera_organization order by orgaid")
@Select("select orgaid,id,name,path from t_camera_organization_cache order by orgaid")
List<Map> selectAllSubOrganizationMap();
@Update("UPDATE t_camera_organization SET channelCount = #{channelCount} where orgaid = #{orgaId}")
@Update("UPDATE t_camera_organization_cache SET channelCount = #{channelCount} where orgaid = #{orgaId}")
void editChannelCount(@Param("channelCount") Integer channelCount,@Param("orgaId") Integer orgaId);
@Update(" UPDATE t_region a inner join \n" +
" (SELECT COUNT(idt_camera_channel) AS channel_count,region_code FROM t_camera_channel GROUP BY region_code) b\n" +
" ON a.region_code = b.region_code set a.channel_count = b.channel_count")
void updateRegionChannelCount();
@Select(" SELECT id FROM t_camera_organization WHERE orgaid >(SELECT a.orgaid FROM t_camera_organization a INNER JOIN \n" +
"\t(\n" +
"\t\tSELECT parent_id FROM t_camera_channel ORDER BY idt_camera_channel desc LIMIT 1\n" +
"\t) b ON a.id = b.parent_id \n" +
") ORDER BY orgaid ASC ")
List<Map> listOrgenization2();
// @Select(" SELECT id FROM t_camera_organization WHERE orgaid >(SELECT a.orgaid FROM t_camera_organization a INNER JOIN \n" +
// "\t(\n" +
// "\t\tSELECT parent_id FROM t_camera_channel ORDER BY idt_camera_channel desc LIMIT 1\n" +
// "\t) b ON a.id = b.parent_id \n" +
// ") ORDER BY orgaid ASC ")
// List<Map> listOrgenization2();
void insertOrganizationCacheToCameraOrganization();
}

View File

@ -2,6 +2,7 @@ package io.renren.modules.monitor.service;
import com.alibaba.fastjson.JSONObject;
import io.renren.modules.monitor.dto.CameraChannelDto;
import io.renren.modules.monitor.entity.Result;
import io.renren.modules.monitor.mapper.CameraChannelMapper;
import io.renren.modules.monitor.utils.EhcacheUtil;
import org.springframework.beans.factory.annotation.Autowired;
@ -9,7 +10,7 @@ import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.*;
/**
* @author admin
@ -38,4 +39,25 @@ public class CameraChannelService {
return list;
}
//根据输入的channel_id的列表查询到系统中存在的cameraChannel信息
public Result checkCameraIfExists(List<String> channelList){
List<Map> exists = new ArrayList<>();
Iterator<String> iterator = channelList.iterator();
while(iterator.hasNext()){
String s = iterator.next();
Map map = cameraChannelMapper.selectCameraChannelById(s);
if(map != null && !map.isEmpty()){
exists.add(map);
iterator.remove();
}
}
Map<String,Object> result = new HashMap<>();
result.put("exists",exists);
result.put("nonExists",channelList);
return Result.success(result);
}
}

View File

@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import io.renren.modules.monitor.dto.ChannelLabelDto;
import io.renren.modules.monitor.entity.*;
import io.renren.modules.monitor.eventListen.saveCameraChannelEndEvent.SaveCameraChannelEndEvent;
import io.renren.modules.monitor.eventListen.saveOrgenizationEndEvent.SaveOrgenizationEndEvent;
import io.renren.modules.monitor.mapper.*;
import lombok.extern.log4j.Log4j2;
import org.bytedeco.javacv.FFmpegFrameGrabber;
@ -15,12 +17,16 @@ import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.*;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Base64Utils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
@ -35,6 +41,7 @@ import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@ -44,6 +51,7 @@ import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
@Service
@Log4j2
@ -51,6 +59,9 @@ public class MonitorService {
private static Integer cpuNUm = Runtime.getRuntime().availableProcessors();
private static final ExecutorService executor = Executors.newFixedThreadPool(cpuNUm);
@Autowired
private ApplicationEventPublisher publisher;
@Autowired
private RestTemplate restTemplate;
@ -1129,24 +1140,73 @@ public class MonitorService {
return Result.success(maps);
}
public List<JSONObject> getOrgenization(List<JSONObject> list){
try {
List<JSONObject> list1 = this.getOrgenizationRoot();
list.addAll(list1);
list1.forEach(a->{
if(a.getBooleanValue("isParent")){
getOrgenizationByParent(list,a.getString("id"));
}
});
return list;
}catch (Exception e){
log.info(e.getMessage());
return null;
//以此作为获取视频资源的开始获取地区和组织信息
public void getAndSaveOrgenization(){
List<JSONObject> orgenizationByPage = this.getOrgenization(new ArrayList<JSONObject>(10000));
if(orgenizationByPage != null && orgenizationByPage.size() > 0){
cameraOrgenMapper.truncate("t_camera_organization_cache");
List<Map> maps = JSONObject.parseArray(JSONObject.toJSONString(orgenizationByPage), Map.class);
if(maps.size() > 0){
List<List<Map>> lists = Lists.partition(maps,100);
lists.forEach(list->{
cameraOrgenMapper.batchSaveOrgenization(list);
});
//修改path 信息
List<Map> maps2 = cameraOrgenMapper.selectAll();
maps2.forEach(map->{
this.setOrganizationPath(map,map.get("parent_id").toString());
});
maps2.forEach(m->{
cameraOrgenMapper.updateOrganizationPath(m.get("path").toString(),m.get("id").toString());
});
//发布事件
publisher.publishEvent(new SaveOrgenizationEndEvent(this,true));
}
}
}
public List<JSONObject> getOrgenization(List<JSONObject> list) {
RestTemplate template = this.getRestTemplate();
int count = 0;
boolean flag = true;
while(flag){
if(count >= 9){
flag = false;
}
count ++;
try {
List<JSONObject> list1 = this.getOrgenizationRoot(template);
list.addAll(list1);
list1.forEach(a->{
if(a.getBooleanValue("isParent")){
getOrgenizationByParent(list,a.getString("id"),template);
}
});
flag = false;
return list;
}catch (Exception e){
log.error("第{}次获取视频通道组织信息失败,错误是:{}",count,e.getMessage());
if(count >= 10){
log.error("获取视频通道组织信息失败,失败原因:{}",e.getMessage());
return new ArrayList<JSONObject>();
}
list.clear();
try {
Thread.sleep(1000);
} catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
}
continue;
}
}
return list;
}
//获取根组织
public List<JSONObject> getOrgenizationRoot() throws Exception{
public List<JSONObject> getOrgenizationRoot(RestTemplate restTemplate){
List<JSONObject> list = new ArrayList<>();
String url = monitorDomain + "/videoService/devicesManager/deviceTree?id=&nodeType=1&typeCode=01&page=1&pageSize=3000";
HttpHeaders headers = new HttpHeaders();
@ -1161,7 +1221,7 @@ public class MonitorService {
}
//组织递归根据父ID查,简化了分页
public List<JSONObject> getOrgenizationByParent(List<JSONObject> list,String id){
public List<JSONObject> getOrgenizationByParent(List<JSONObject> list,String id,RestTemplate restTemplate) {
HttpHeaders headers = new HttpHeaders();
headers.add("X-Subject-Token",token);
String url;
@ -1175,13 +1235,14 @@ public class MonitorService {
responseEntity = restTemplate.exchange(url, HttpMethod.GET,httpEntity,JSONObject.class);
JSONObject re = responseEntity.getBody();
if(re.getIntValue("totalCount")>0){
JSONArray results = re.getJSONArray("results");
List<JSONObject> jsonObjects = results.toJavaList(JSONObject.class);
list.addAll(jsonObjects);
jsonObjects.forEach(js->{
if(js.getBooleanValue("isParent")){
getOrgenizationByParent(list,js.getString("id"));
getOrgenizationByParent(list, js.getString("id"), restTemplate);
}
});
}
@ -1200,48 +1261,122 @@ public class MonitorService {
}
//保存通道信息
public Result saveChannelInfo() throws Exception {
List<Map> orgenList = cameraOrgenMapper.listOrgenization();
for(Map m:orgenList){
List<Map> cameChannels = getChannelInfo(m.get("id").toString());
List<Map> needSave = new ArrayList<>();
if(cameChannels.size() > 0){
boolean flag = false;
for(Map j:cameChannels){
if(Integer.parseInt(j.get("nodeType").toString()) ==3){
flag = true;
String channelSn = j.get("channelSn").toString();
String channelOrngin = channelSn.substring(0,6);
String deptName = cameraOrgenMapper.getNameByidPart(channelOrngin);
j.put("regionName",deptName);
j.put("regionCode",channelOrngin);
j.put("parentId",m.get("id").toString());
j.put("nodeName","");
needSave.add(j);
}
}
if(!flag){//更新count字段
cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
}
}else{//更新count字段
cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
}
// public Result saveChannelInfo() throws Exception {
// List<Map> orgenList = cameraOrgenMapper.listOrgenization();
// for(Map m:orgenList){
// List<Map> cameChannels = getChannelInfo(m.get("id").toString());
// List<Map> needSave = new ArrayList<>();
// if(cameChannels.size() > 0){
// boolean flag = false;
// for(Map j:cameChannels){
// if(Integer.parseInt(j.get("nodeType").toString()) ==3){
// flag = true;
// String channelSn = j.get("channelSn").toString();
// String channelOrngin = channelSn.substring(0,6);
// String deptName = cameraOrgenMapper.getNameByidPart(channelOrngin);
// j.put("regionName",deptName);
// j.put("regionCode",channelOrngin);
// j.put("parentId",m.get("id").toString());
// j.put("nodeName","");
// needSave.add(j);
// }
// }
// if(!flag){//更新count字段
// cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
// }
// }else{//更新count字段
// cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
// }
//
// needSave.forEach(map->setNodeName(map,map.get("parentId").toString()));
// //保存并更新count字段
// if(needSave.size() > 0){
// List<List<Map>> partition = Lists.partition(needSave, 100);
// partition.forEach(list->{
// cameraOrgenMapper.batchSaveCameraChannel(list);
// });
// cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
// }
// }
// return Result.success();
// }
needSave.forEach(map->setNodeName(map,map.get("parentId").toString()));
//保存并更新count字段
if(needSave.size() > 0){
List<List<Map>> partition = Lists.partition(needSave, 100);
partition.forEach(list->{
cameraOrgenMapper.batchSaveCameraChannel(list);
});
cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
}
//2获取视频通道信息并保存,多线程版
public void saveChannelInfoAsync() throws Exception {
RestTemplate restTemplate = this.getRestTemplate();
AtomicInteger faulseCount = new AtomicInteger();//失败的次数
//1-清空t_camera_channel
cameraOrgenMapper.truncate("t_camera_channel_cache");
Thread.sleep(1500);
//2-查询全部地区
//List<Map> maps = cameraOrgenMapper.testAll();
List<Map> maps = cameraOrgenMapper.selectAll();
if (maps != null && maps.size() > 0){
List<List<Map>> lists = Lists.partition(maps, 1000);
//3-创建线程池
ExecutorService executorService;
executorService = Executors.newFixedThreadPool(lists.size() + 1);
List<CompletableFuture> completableFutureLis = new ArrayList<>();
lists.forEach(l->{
completableFutureLis.add(
CompletableFuture.runAsync(()->{
l.forEach(m->{
boolean flag = true;
int tryCount = 0;//每个地区重试10次去获取该地区下视频通道信息
while(flag){
if(tryCount >= 9){
flag = false;
}
tryCount++;
//4-根据地区id去查询视频通道信息
List<Map> cameraChannels = new ArrayList<>();
try {
cameraChannels = getChannelInfo(m.get("id").toString(),restTemplate);
}catch (Exception e){
log.info("根据组织id:{}查询视频通道失败,这是第{}次重试",m.get("id").toString(),tryCount);
if(tryCount >= 10){
faulseCount.incrementAndGet();
log.error("根据组织id:{},查询视频通道失败,超出重试次数。将去正式表中查询",m.get("id").toString());
//去t_camera_channel查询相关信息并保存
cameraChannels = cameraChannelMapper.selectCameraChannelByPid(m.get("id").toString());
if(cameraChannels.size() > 0){
List<List<Map>> channelList = Lists.partition(cameraChannels,100);
for(List<Map> ll:channelList){
cameraChannelMapper.batchSaveCameraChannel(ll);
}
} else {
log.error("根据组织id:{},从正式表中查询视频通道失败,不存在该部门数据",m.get("id").toString());
}
}
continue;
}
//5-保存视频通道信息
batchSaveChannelInfos(cameraChannels,m.get("id").toString());
flag = false;
}
});
},executorService)
);
});
executorService.shutdown();
CompletableFuture.allOf(completableFutureLis.toArray(new CompletableFuture[completableFutureLis.size()])).join();
//6-更新完通道信息后,删除经度或纬度为空的视频通道信息
cameraChannelMapper.deleteByNonPlace();
//7-查询地区下通道的数量并更新到地区cache表中
editChannelCount();
//发布事件
publisher.publishEvent(new SaveCameraChannelEndEvent(this,true));
}
return Result.success();
}
//根据组织id获取通道信息
public List<Map> getChannelInfo(String orgenId) throws Exception{
public List<Map> getChannelInfo(String orgenId,RestTemplate restTemplate) throws Exception{
String url = monitorDomain +"/videoService/devicesManager/deviceTree?nodeType=1&typeCode=01;0;ALL;ALL&page=1&pageSize=3000&id="+orgenId;
HttpHeaders headers = new HttpHeaders();
headers.add("X-Subject-Token",token);
@ -1250,7 +1385,12 @@ public class MonitorService {
HttpEntity<Map> httpEntity = new HttpEntity<>(null, headers);
responseEntity = restTemplate.exchange(url, HttpMethod.GET,httpEntity,JSONObject.class);
JSONObject re = responseEntity.getBody();
List<Map> results = re.getJSONArray("results").toJavaList(Map.class);
List<Map> results = new ArrayList<>();
if(re.getJSONArray("results") != null){
results = re.getJSONArray("results").toJavaList(Map.class);
}else{
log.info("根据组织id:{}获取摄像头信息失败,失败原因:{}",orgenId,re.toJSONString());
}
return results;
}
@ -1265,82 +1405,6 @@ public class MonitorService {
}
}
//2获取视频通道信息并保存,多线程版
@Async
public void saveChannelInfoAsync() throws Exception {
//1-清空t_camera_channel
cameraOrgenMapper.truncate("t_camera_channel");
//2-创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(20);//20个线程足够
//3-查询全部地区
List<Map> maps = cameraOrgenMapper.testAll();
List<List<Map>> lists = Lists.partition(maps, 1000);
List<CompletableFuture> completableFutureLis = new ArrayList<>();
lists.forEach(l->{
completableFutureLis.add(
CompletableFuture.runAsync(()->{
l.forEach(m->{
boolean flag = true;
int tryCount = 0;//每个地区重试10次去获取该地区下视频通道信息
while(flag){
if(tryCount >= 9){
flag = false;
}
tryCount++;
//4-根据地区id去查询视频通道信息
List<Map> cameraChannels = new ArrayList<>();
try {
cameraChannels = getChannelInfo(m.get("id").toString());
}catch (Exception e){
log.info("根据地区id:{}查询视频通道失败,这是第{}次重试",m.get("id").toString(),tryCount);
continue;
}
//5-保存视频通道信息
batchSaveChannelInfos(cameraChannels,m.get("id").toString());
//6-更新地区表的count
cameraOrgenMapper.updateOrganizationCount(m.get("id").toString());
flag = false;
}
});
},executorService)
);
});
CompletableFuture.allOf(completableFutureLis.toArray(new CompletableFuture[completableFutureLis.size()])).join();
//6-更新完通道信息后查询地区下通道的数量并更新到地区表和市区表中
editChannelCount();
//7-同步武伟达的t_channel_mtm_label数据
synchronizeMtmLabel();
}
//同步武伟达的t_channel_mtm_label数据
public void synchronizeMtmLabel(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(jdbcUrl);
druidDataSource.setDriverClassName(jdbcDriverClassName);
druidDataSource.setUsername(jdbcUserName);
druidDataSource.setPassword(jdbcPassWord);
jdbcTemplate.setDataSource(druidDataSource);
List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_channel_mtm_label");
if(maps.size() > 0){
//清空t_channel_mtm_label
cameraOrgenMapper.truncate("t_channel_mtm_label");
List<List<Map<String, Object>>> partition = Lists.partition(maps, 200);
partition.forEach(list->{
cameraChannelMapper.batchSaveMtmLabel(list);
});
}
}
//单独保存视频通道信息
public void batchSaveChannelInfos(List<Map> list,String parentId){
List<Map> needSave = new ArrayList<>();
@ -1360,25 +1424,22 @@ public class MonitorService {
needSave.add(j);
}
}
}else{//更新count字段
cameraOrgenMapper.updateOrganizationCount(parentId);
}
//修改nodeName
needSave.forEach(map->setNodeName(map,map.get("parentId").toString()));
//保存并更新count字段
//保存
if(needSave.size() > 0){
List<List<Map>> partition = Lists.partition(needSave, 100);
partition.forEach(l->{
cameraOrgenMapper.batchSaveCameraChannel(l);
});
cameraOrgenMapper.updateOrganizationCount(parentId);
}
}
//更新完通道信息后查询地区下通道的数量并更新到地区表中和市区表中
//更新完通道信息后查询组织下通道的数量并更新到组织表中
public void editChannelCount() throws Exception{
//1-更新地区表中的每个地区下channelCount
//更新地区表中的每个地区下channelCount
List<Map> maps = cameraOrgenMapper.selectAllSubOrganizationMap();
if(maps.size() > 0){
for(int i=0;i< maps.size();i++){
@ -1388,10 +1449,60 @@ public class MonitorService {
cameraOrgenMapper.editChannelCount(count,orgaid);
};
}
//2-更新市区表t_region表中的channelCount
cameraOrgenMapper.updateRegionChannelCount();
}
//将t_camera_organization_cache和camera_channel_cache表数据保存到相应的主表中
@Transactional(rollbackFor = Exception.class)
public void insertChannelCacheToCameraChannel(){
cameraOrgenMapper.truncate("t_camera_organization");
cameraOrgenMapper.insertOrganizationCacheToCameraOrganization();
cameraOrgenMapper.truncate("t_camera_channel");
cameraChannelMapper.insertChannelCacheToCameraChannel();
}
//同步武伟达的t_channel_mtm_label数据
@Transactional(rollbackFor = Exception.class)
public void synchronizeMtmLabel(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(jdbcUrl);
druidDataSource.setDriverClassName(jdbcDriverClassName);
druidDataSource.setUsername(jdbcUserName);
druidDataSource.setPassword(jdbcPassWord);
jdbcTemplate.setDataSource(druidDataSource);
List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_channel_mtm_label");
if (maps.size() > 0){
//清空t_channel_mtm_label
cameraOrgenMapper.truncate("t_channel_mtm_label");
List<List<Map<String, Object>>> partition = Lists.partition(maps, 200);
partition.forEach(list->{
cameraChannelMapper.batchSaveMtmLabel(list);
});
}
List<Map<String, Object>> labelMaps = jdbcTemplate.queryForList("select * from t_label");
if (labelMaps.size() > 0){
//清空t_label
cameraOrgenMapper.truncate("t_label");
List<List<Map<String, Object>>> partition = Lists.partition(maps, 200);
partition.forEach(list->{
cameraChannelMapper.batchSaveLabel(list);
});
}
}
public RestTemplate getRestTemplate(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(30000);//单位为ms
factory.setConnectTimeout(10000);//单位为ms
factory.setOutputStreaming(false);
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate;
}
//测试用的
public List<Map> listChildOrgenIds(String id){
Map orgenNow = cameraOrgenMapper.selectOrgenizationById(id);
List<Map> childs = new ArrayList<>();
@ -1399,7 +1510,6 @@ public class MonitorService {
String path = orgenNow.get("path").toString();
childs = cameraOrgenMapper.selectSubOrganizationMapByPath(id);
}
return childs;
}
}

View File

@ -0,0 +1,24 @@
package io.renren.modules.monitor.task;
import io.renren.modules.job.task.ITask;
import io.renren.modules.monitor.service.MonitorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 定时获取视频资源的部门信息
* @author ytl
* @Date 2022/7/29 9:45
**/
@Component("getAndSaveOrgenizationTask")
public class GetAndSaveOrgenizationTask implements ITask {
@Autowired
private MonitorService monitorService;
@Override
public void run(String params) {
monitorService.getAndSaveOrgenization();
}
}

View File

@ -26,9 +26,9 @@ import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
/**
* 通知管理
*
@ -49,10 +49,10 @@ public class SysNoticeController {
@GetMapping("page")
@ApiOperation("分页")
@ApiImplicitParams({
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码从1开始", paramType = "query", required = true, dataType = "int"),
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"),
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String")
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码从1开始", paramType = "query", required = true, dataType = "int"),
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"),
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String")
})
// @RequiresPermissions("sys:notice:all")
public Result<PageData<SysNoticeDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) {
@ -141,7 +141,8 @@ public class SysNoticeController {
public Result save(@RequestBody SysNoticeDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
dto.setCreator(SecurityUser.getUser().getId());
dto.setCreateDate(new Date());
sysNoticeService.save(dto);
return new Result();
@ -163,7 +164,7 @@ public class SysNoticeController {
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
// @RequiresPermissions("sys:notice:all")
//@RequiresPermissions("sys:notice:all")
public Result delete(@RequestBody Long[] ids) {
//效验数据
AssertUtils.isArrayEmpty(ids, "id");

View File

@ -1,8 +1,9 @@
package io.renren.modules.notice.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.renren.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -14,9 +15,26 @@ import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sys_notice")
public class SysNoticeEntity extends BaseEntity {
public class SysNoticeEntity {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId
private Long id;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long creator;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createDate;
/**
* 通知类型
*/

View File

@ -1,5 +1,6 @@
package io.renren.modules.notice.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.renren.common.constant.Constant;
@ -21,7 +22,11 @@ import io.renren.modules.sys.service.SysUserService;
import io.renren.websocket.WebSocketServer;
import io.renren.websocket.data.MessageData;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.session.UnknownSessionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -29,18 +34,25 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 通知管理
*/
@Service
public class SysNoticeServiceImpl extends CrudServiceImpl<SysNoticeDao, SysNoticeEntity, SysNoticeDTO> implements SysNoticeService {
private static final ExecutorService executor = Executors.newWorkStealingPool();
private static final Logger logger = LoggerFactory.getLogger(SysNoticeServiceImpl.class);
@Autowired
private SysNoticeUserService sysNoticeUserService;
@Autowired
private SysUserService sysUserService;
@Autowired
private WebSocketServer webSocketServer;
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public QueryWrapper<SysNoticeEntity> getWrapper(Map<String, Object> params) {
@ -86,21 +98,33 @@ public class SysNoticeServiceImpl extends CrudServiceImpl<SysNoticeDao, SysNotic
@Transactional(rollbackFor = Exception.class)
public void save(SysNoticeDTO dto) {
SysNoticeEntity entity = ConvertUtils.sourceToTarget(dto, SysNoticeEntity.class);
if (StringUtils.isEmpty(entity.getFrom())) {
entity.setFrom("其它"); // 站内信通知来源 (通知评论其它)
try {
if (StringUtils.isEmpty(entity.getFrom())) {
entity.setFrom("其它"); // 站内信通知来源 (通知评论其它)
}
if (entity.getCreator() == null) {
entity.setCreator(0L);
}
//更新发送者信息
if (dto.getStatus() == NoticeStatusEnum.SEND.value() && StringUtils.isEmpty(dto.getSenderName())) {
entity.setSenderName(SecurityUser.getUser().getRealName());
entity.setSenderDate(new Date());
}
try {
baseDao.insert(entity);
} catch (UnknownSessionException unknownSessionException) {
logger.info("发送站内信shiro异常 " + JSON.toJSONString(entity), unknownSessionException);
}
//发送通知
dto.setId(entity.getId());
sendNotice(dto);
} catch (Exception exception) {
logger.error("发送站内信异常 " + JSON.toJSONString(entity), exception);
}
//更新发送者信息
if (dto.getStatus() == NoticeStatusEnum.SEND.value() && StringUtils.isEmpty(dto.getSenderName())) {
entity.setSenderName(SecurityUser.getUser().getRealName());
entity.setSenderDate(new Date());
}
baseDao.insert(entity);
//发送通知
dto.setId(entity.getId());
sendNotice(dto);
}
@Override
@ -131,12 +155,14 @@ public class SysNoticeServiceImpl extends CrudServiceImpl<SysNoticeDao, SysNotic
//全部用户
if (notice.getReceiverType() == ReceiverTypeEnum.ALL.value()) {
//发送给全部用户
sendAllUser(notice);
//通过WebSocket提示全部用户有新通知
MessageData<String> message = new MessageData<String>().msg(notice.getTitle());
webSocketServer.sendMessageAll(message);
CompletableFuture.runAsync(() -> {
//发送给全部用户
sendAllUser(notice);
}, executor).thenRunAsync(() -> {
//通过WebSocket提示全部用户有新通知
MessageData<String> message = new MessageData<String>().msg(notice.getTitle());
webSocketServer.sendMessageAll(message);
}, executor);
} else { //选中用户
List<Long> userIdList = new ArrayList<>();
@ -152,12 +178,14 @@ public class SysNoticeServiceImpl extends CrudServiceImpl<SysNoticeDao, SysNotic
return;
}
//发送给选中用户
sendUser(notice, userIdList);
//通过WebSocket提示选中用户有新通知
MessageData<String> message = new MessageData<String>().msg(notice.getTitle());
webSocketServer.sendMessage(userIdList, message);
List<Long> finalUserIdList = userIdList;
CompletableFuture.runAsync(() -> {
sendUser(notice, finalUserIdList);
}, executor).thenRunAsync(() -> {
//通过WebSocket提示选中用户有新通知
MessageData<String> message = new MessageData<String>().msg(notice.getTitle());
webSocketServer.sendMessage(finalUserIdList, message);
}, executor);
}
}

View File

@ -93,7 +93,7 @@ public class TAbilityApplicationController {
@ApiImplicitParam(name = "resourceId", value = "资源id", paramType = "query", dataType = "String")
}
)
public Result<PageData<TAbilityApplicationDTO>> resourceInUse(Map<String, Object> params) {
public Result<PageData<TAbilityApplicationDTO>> resourceInUse(@ApiIgnore @RequestParam Map<String, Object> params) {
PageData<TAbilityApplicationDTO> page = tAbilityApplicationService.page(params);
return new Result<PageData<TAbilityApplicationDTO>>().ok(page);
}
@ -225,10 +225,12 @@ public class TAbilityApplicationController {
if (StringUtils.isEmpty(index_.getCameraList())) {
return;
}
List<CameraChannelDto1> channelDto1s = cameraChannelMapper.selectByChannelCode(index_.getCameraList().replaceAll("\"", ""));
if (!channelDto1s.isEmpty()) {
cameraList.add(channelDto1s.get(0));
}
cameraList.add(JSON.parseObject(index_.getCameraList()));
//
//List<CameraChannelDto1> channelDto1s = cameraChannelMapper.selectByChannelCode(index_.getCameraList().replaceAll("\"", ""));
//if (!channelDto1s.isEmpty()) {
// cameraList.add(channelDto1s.get(0));
//}
});
camera = cameraList;
@ -238,12 +240,13 @@ public class TAbilityApplicationController {
put("instanceId", tAbilityApplicationDTOList.get(0).getInstanceId()); // 流程id
put("resourceOwnerDept", tAbilityApplicationDTOList.get(0).getResourceOwnerDept()); // 资源所属部门信息
put("resources", resourceDTOS);//申请的该部门的能力资源
if (tAbilityApplicationDTOList.get(0).getApplyFlag().equals("通过")) {
put("ended", true);
} else {
if (tAbilityApplicationDTOList.get(0).getApproveStatus().equals("审核中")) {
put("ended", false);
} else {
put("ended", true);
}
put("taskHandleDetailInfo", taskHandleDetailInfo); // 流程详情
put("approveStatus", tAbilityApplicationDTOList.get(0).getApproveStatus());
if (!finalCamera.isEmpty()) {
put("camera", finalCamera); // 流程详情
}
@ -258,6 +261,10 @@ public class TAbilityApplicationController {
return sysDeptDTO.getName();
}
}));
tAbilityApplicationV2DTO.setEnded(re.keySet().stream().map(index -> {
List<Map<String, Object>> index_ = re.get(index);
return index_.stream().map(temp -> !(Boolean) temp.get("ended")).filter(i -> i).findAny().orElse(Boolean.FALSE); // 存在未完成流程
}).filter(index -> index).map(index -> !index).findAny().orElse(Boolean.TRUE));
tAbilityApplicationV2DTO.setResourceApplication(re);
return new Result<TAbilityApplicationV2DTO>().ok(tAbilityApplicationV2DTO);
}

View File

@ -24,6 +24,7 @@ import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.*;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -266,10 +267,11 @@ public class CorrectionListener implements TaskListener, ExecutionListener, Acti
logger.info("-------能力申请code-------");
ResourceEntity resourceEntity = resourceService.selectById(abilityApplicationDTO.getResourceId());
//没有groupid当做没有接口直接跳过
if (resourceEntity.getGroupId() == null)
return;
if (ObjectUtils.allNotNull(resourceEntity)) {
//没有groupid当做没有接口直接跳过
if (resourceEntity.getGroupId() == null)
return;
}
String code = UUID.randomUUID().toString();
apiGatewayService.subscribeCode(String.valueOf(abilityApplicationDTO.getId()), code);

View File

@ -120,7 +120,7 @@ public class CorrectionListenerV2 implements TaskListener, ExecutionListener, Ac
/**
* 结束审批
*
* @param kv
* @param delegateExecution
*/
private void endTake(DelegateExecution delegateExecution) { // 进入最后结束节点
Map<String, Object> kv = delegateExecution.getVariables();
@ -146,7 +146,11 @@ public class CorrectionListenerV2 implements TaskListener, ExecutionListener, Ac
jdbcTemplate.batchUpdate(sqls);
if (auditingBaseDTO.getReject() == null || auditingBaseDTO.getReject() != Boolean.TRUE) { // 都是同意
batchApplyCode(delegateExecution, dtoList);
try {
batchApplyCode(delegateExecution, dtoList);
} catch (Exception exception) {
logger.error("上架网关失败", exception);
}
}
}
@ -298,7 +302,9 @@ public class CorrectionListenerV2 implements TaskListener, ExecutionListener, Ac
boolean hasData = false;
for (TAbilityApplicationDTO abilityApplicationDTO : dtoList) {
ResourceEntity resourceEntity = resourceService.selectById(abilityApplicationDTO.getResourceId());
if (resourceEntity == null) {
continue;
}
//没有groupid当做没有接口直接跳过
if (resourceEntity == null || resourceEntity.getGroupId() == null)
continue;

View File

@ -128,7 +128,7 @@ public class DataCenterListenerV2 implements TaskListener, ExecutionListener, Ac
if (resourceDTOOptional.isPresent()) {
return !StringUtils.contains(resourceDTOOptional.get().getShareCondition(), "免批"); // 存在非免批
} else {
return false;
return true; // 摄像头非免批
}
}).findAny();
if (!tAbilityApplicationDTO.isPresent()) { // 全是免批

View File

@ -61,13 +61,17 @@ public class ApiGatewayService {
throw new IllegalArgumentException(String.format("未找到对应的资源id:%s", resourceId));
}
String apiUrl = resourceEntity.getApiUrl();
String methods = resourceEntity.getApiMethodType().toUpperCase();
String methods = "";
if (resourceEntity.getApiMethodType() != null) {
methods = resourceEntity.getApiMethodType().toUpperCase();
}
Long deptId = resourceEntity.getDeptId();
HashSet supportMethod = Sets.newHashSet("POST", "GET");
if (StringUtils.isBlank(apiUrl) || deptId == null || deptId == 0 || StringUtils.isBlank(methods) || !supportMethod.contains(methods)){
String msg = String.format("注册api参数为空跳过 apiUrl:%s, deptId:%ld methods:%s, resourceId:%s", apiUrl, deptId, methods, resourceId);
//重要参数没有当成不需要注册
log.info(msg);
return;

View File

@ -59,6 +59,8 @@ public class TAbilityApplicationServiceImpl extends CrudServiceImpl<TAbilityAppl
});
if (params.containsKey("abilityprocess_v2")) {
wrapper.orderByDesc("apply_number"); // 流程排序
} else {
wrapper.orderByDesc("create_date"); // 创建时间逆序
}
return wrapper;
}

View File

@ -21,6 +21,7 @@ import io.renren.modules.resource.videoPreview.VideoPreviewFactory;
import io.renren.modules.sys.dto.SysDeptDTO;
import io.renren.modules.sys.service.SysDeptService;
import io.swagger.annotations.*;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -129,7 +130,13 @@ public class ResourceController {
})
public Result<PageData<ResourceDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) {
PageData<ResourceDTO> page = resourceService.page(params);
page.getList().forEach(item -> item.setInfoList(resourceService.selectAttrsByResourceId(item.getId())));
page.getList().forEach(item -> {
item.setInfoList(resourceService.selectAttrsByResourceId(item.getId()));
if (item.getDeptId() != null) {
String deptName = sysDeptService.get(item.getDeptId()).getName();
item.setDeptName(StringUtils.isNotBlank(deptName) ? deptName : "--");
}
});
return new Result<PageData<ResourceDTO>>().ok(page);
}
@ -230,7 +237,7 @@ public class ResourceController {
//@RequiresPermissions("resource:resource:save")
public Result save(@RequestBody ResourceDTO dto, @RequestParam String source) {
// 效验数据
logger.info("source:" + source);
logger.info("source:{}", source);
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
if ("f".equals(source)) {
dto.setDelFlag(2); // 来自前端页面 走审批流程
@ -250,7 +257,7 @@ public class ResourceController {
public Result importResource(@RequestParam("file") MultipartFile uploadFile, HttpServletRequest request) {
List<Map<String, Object>> dept =
jdbcTemplate.queryForList("SELECT id,`name` FROM sys_dept");
logger.info("上传文件:" + uploadFile.getOriginalFilename());
logger.info("上传文件:{}" , uploadFile.getOriginalFilename());
String format = sdf.format(new Date());
File folder = new File(uploadPath + "upload" + File.separator + format);
logger.info(folder.getPath());
@ -259,29 +266,20 @@ public class ResourceController {
}
// 对上传的文件重命名避免文件重名
String oldName = uploadFile.getOriginalFilename();
String newName = UUID.randomUUID().toString()
+ oldName.substring(oldName.lastIndexOf("."));
String newName = UUID.randomUUID() + oldName.substring(oldName.lastIndexOf("."));
try {
// 文件保存
File file = new File(folder, newName);
uploadFile.transferTo(file);
Optional<SysDeptDTO> deptDTO = Optional.ofNullable(sysDeptService.getByName(bigDateDeptName));
CompletableFuture.runAsync(() -> {
EasyExcel.read(file, new ResourceExcelImportListener(0, dept, resourceService, deptDTO.get().getId())).sheet(0).headRowNumber(1).doReadSync();
}, executor);
CompletableFuture.runAsync(() -> {
EasyExcel.read(file, new ResourceExcelImportListener(1, dept, resourceService, deptDTO.get().getId())).sheet(1).headRowNumber(1).doReadSync();
}, executor);
CompletableFuture.runAsync(() -> {
EasyExcel.read(file, new ResourceExcelImportListener(2, dept, resourceService, deptDTO.get().getId())).sheet(2).headRowNumber(1).doReadSync();
}, executor);
CompletableFuture.runAsync(() -> {
EasyExcel.read(file, new ResourceExcelImportListener(3, dept, resourceService, deptDTO.get().getId())).sheet(3).headRowNumber(1).doReadSync();
}, executor);
CompletableFuture.runAsync(() -> EasyExcel.read(file, new ResourceExcelImportListener(0, dept, resourceService, deptDTO.get().getId())).sheet(0).headRowNumber(1).doReadSync(), executor);
CompletableFuture.runAsync(() -> EasyExcel.read(file, new ResourceExcelImportListener(1, dept, resourceService, deptDTO.get().getId())).sheet(1).headRowNumber(1).doReadSync(), executor);
CompletableFuture.runAsync(() -> EasyExcel.read(file, new ResourceExcelImportListener(2, dept, resourceService, deptDTO.get().getId())).sheet(2).headRowNumber(1).doReadSync(), executor);
CompletableFuture.runAsync(() -> EasyExcel.read(file, new ResourceExcelImportListener(3, dept, resourceService, deptDTO.get().getId())).sheet(3).headRowNumber(1).doReadSync(), executor);
} catch (IOException e) {
return new Result<String>().error(e.getMessage());
}
return new Result().ok(LocalDateTime.now().toString());
return new Result<String>().ok(LocalDateTime.now().toString());
}
@PutMapping("/update")
@ -311,7 +309,7 @@ public class ResourceController {
@LogOperation("资源转发")
public Result ZywMessage() {
String url = "http://15.72.158.81/zyjk/ZywMessage.asmx";
String parame = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
String param = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
" <soap:Body>\n" +
" </soap:Body>\n" +
@ -319,11 +317,11 @@ public class ResourceController {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("SOAPAction", "http://tempuri.org/ZywMessagePort");
requestHeaders.setContentType(MediaType.TEXT_XML);
HttpEntity<String> requestEntity = new HttpEntity(parame, requestHeaders);
HttpEntity<String> requestEntity = new HttpEntity<>(param, requestHeaders);
try {
String body = restTemplate.postForEntity(url, requestEntity, String.class).getBody();
String json = body.substring(body.indexOf("{"), body.indexOf("}") + 1);
HashMap map = JSONObject.parseObject(json, HashMap.class);
HashMap map = JSON.parseObject(json, HashMap.class);
return new Result().ok(map);
} catch (Exception e) {
return new Result().ok(new HashMap<String, Object>() {{
@ -365,13 +363,13 @@ public class ResourceController {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("SOAPAction", "http://tempuri.org/ZWCJ_mainPort");
requestHeaders.setContentType(new MediaType("text", "xml", Charset.forName("utf-8")));
HttpEntity<String> requestEntity = new HttpEntity(parame, requestHeaders);
HttpEntity<String> requestEntity = new HttpEntity<>(parame, requestHeaders);
try {
String body = restTemplate.postForEntity(url, requestEntity, String.class).getBody();
String startTag = "<ZWCJ_mainPortResult>";
String endTag = "</ZWCJ_mainPortResult>";
String json = body.substring(body.indexOf(startTag) + startTag.length(), body.indexOf(endTag));
HashMap result = JSONObject.parseObject(json, HashMap.class);
HashMap result = JSON.parseObject(json, HashMap.class);
List<Map> rows = (List<Map>) result.get("data");
List<Object> objects = rows.stream()
@ -513,8 +511,8 @@ public class ResourceController {
@GetMapping("/selectTotalByDept")
@ApiOperation("按照资源类型统计本部门发布的资源")
@LogOperation("按照资源类型统计本部门发布的资源")
public Result selectTotalByDept() {
return new Result().ok(resourceService.selectTotalByDept());
public Result<Map<String, Object>> selectTotalByDept() {
return new Result<Map<String, Object>>().ok(resourceService.selectTotalByDept());
}
@GetMapping("/getApplyByDept")
@ -553,13 +551,6 @@ public class ResourceController {
return new Result().ok(resourceService.selectInfrastructureList());
}
@GetMapping("/list")
@ApiOperation("能力查询")
@LogOperation("能力查询")
public Result list(@ApiIgnore @RequestParam Map<String, Object> params){
return new Result<>().ok(resourceService.list(params));
}
@GetMapping("/selectDevelopDoc")
@ApiOperation("查询能力开发文档目录")
@LogOperation("查询能力开发文档目录")

View File

@ -92,6 +92,10 @@ public class ResourceDTO extends AuditingBaseDTO implements Serializable {
private String applyCount;
@ApiModelProperty(value = "部门ID集合")
private List<Long> deptIds;
@ApiModelProperty(value = "是否在申购车内")
private Boolean isInShoppingCart;
@ApiModelProperty(value = "审核状态:通过,不通过")
private String approveStatus;
@ApiModelProperty(value = "属性信息")
@ -103,6 +107,8 @@ public class ResourceDTO extends AuditingBaseDTO implements Serializable {
private String undercarriageReason;
@ApiModelProperty(value = "提起下架人员姓名")
private String undercarriageUserName;
@ApiModelProperty(value = "下架附件")
private String undercarriageEnclosure;
@ApiModelProperty(value = "总体评价")
private Integer total;

View File

@ -134,6 +134,12 @@ public class ResourceEntity extends BaseEntity {
*/
private String undercarriageUserName;
/**
* 下架附件
*/
private String undercarriageEnclosure;
@TableField(value = "info_list", typeHandler = FastjsonTypeHandler.class)
private List<AttrEntity> infoList;

View File

@ -32,10 +32,18 @@ public enum ResourceEntityDelFlag {
* 已下架
*/
UNDERCARRIAGE(5, "已下架"),
/**
* 上架被拒绝
*/
REJECT_REVIEW(6, "上架被拒绝"),
/**
* 其他
*/
OTHER(9, "其他"),
/**
* 未知
*/

View File

@ -7,6 +7,7 @@ import io.renren.modules.resource.dto.ResourceDTO;
import io.renren.modules.resource.entity.AttrEntity;
import io.renren.modules.resource.entity.ResourceEntity;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -111,7 +112,7 @@ public interface ResourceService extends CrudService<ResourceEntity, ResourceDTO
Object getByDept(Map<String, Object> params);
Object selectTotalByDept();
HashMap<String, Object> selectTotalByDept();
Object getApplyByDept(Map<String, Object> params);

View File

@ -15,7 +15,6 @@ import io.renren.common.domain.Tsingtao_xhaProperties;
import io.renren.common.page.PageData;
import io.renren.common.service.impl.CrudServiceImpl;
import io.renren.common.utils.DateUtils;
import io.renren.common.utils.Result;
import io.renren.modules.monitor.dto.CameraChannelDto1;
import io.renren.modules.monitor.entity.CameraChannel;
import io.renren.modules.monitor.mapper.CameraChannelMapper;
@ -51,6 +50,7 @@ import okhttp3.*;
import org.activiti.engine.HistoryService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricProcessInstanceQuery;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@ -81,8 +81,8 @@ import java.util.stream.Collectors;
*/
@Service
public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEntity, ResourceDTO> implements ResourceService {
private static final Integer cpuNUm = Runtime.getRuntime().availableProcessors();
private static final ExecutorService executor = Executors.newWorkStealingPool(cpuNUm * 3);
private static final Integer CPU_NUM = Runtime.getRuntime().availableProcessors();
private static final ExecutorService executor = Executors.newWorkStealingPool(CPU_NUM * 3);
/**
* 公共http客户端
@ -90,14 +90,14 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
private static final OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.connectionPool(new ConnectionPool(cpuNUm * 2, 2, TimeUnit.MINUTES))
.connectionPool(new ConnectionPool(CPU_NUM * 2, 2, TimeUnit.MINUTES))
.retryOnConnectionFailure(false)
.build();
private static final Logger logger = LoggerFactory.getLogger(ResourceServiceImpl.class);
private static final String selectDeptListKey = "selectDeptList";
private static final String selectDTOPageSpecilTotalKey = "selectDTOPageSpecilTotal";
private static final String SELECT_DEPT_LIST_KEY = "selectDeptList";
private static final String SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY = "selectDTOPageSpecilTotal";
@Value("${system.startDay}")
private String systemDay;
@ -201,6 +201,8 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
case "creator":
wrapper.eq(StringUtils.isNotBlank(params.get("creator").toString()), "creator", params.get("creator").toString());
break;
default:
break;
}
});
if (params.containsKey("selectType") && "1".equals(params.get("selectType").toString())) { // 创建者查询时
@ -218,7 +220,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
@Transactional
@CacheEvict(cacheNames = {selectDeptListKey, selectDTOPageSpecilTotalKey}, allEntries = true)
@CacheEvict(cacheNames = {SELECT_DEPT_LIST_KEY, SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY}, allEntries = true)
public void insertWithAttrs(ResourceDTO dto) {
ResourceEntity resourceEntity = new ResourceEntity();
BeanUtils.copyProperties(dto, resourceEntity);
@ -282,7 +284,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
@Transactional
@CacheEvict(cacheNames = {selectDeptListKey, selectDTOPageSpecilTotalKey}, allEntries = true)
@CacheEvict(cacheNames = {SELECT_DEPT_LIST_KEY, SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY}, allEntries = true)
public void createMixAbility(ResourceDTO dto) {
ResourceEntity resourceEntity = new ResourceEntity();
BeanUtils.copyProperties(dto, resourceEntity);
@ -326,7 +328,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
@Transactional
@CacheEvict(cacheNames = {selectDeptListKey, selectDTOPageSpecilTotalKey}, allEntries = true)
@CacheEvict(cacheNames = {SELECT_DEPT_LIST_KEY, SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY}, allEntries = true)
public void deleteWithAttrs(JSONObject jsonObject) {
JSONArray jsonArray = jsonObject.getJSONArray("ids");
List<Long> idList = jsonArray.toJavaList(Long.class);
@ -340,7 +342,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
@Transactional
@CacheEvict(cacheNames = {selectDeptListKey, selectDTOPageSpecilTotalKey}, allEntries = true)
@CacheEvict(cacheNames = {SELECT_DEPT_LIST_KEY, SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY}, allEntries = true)
public void updateWithAttrs(ResourceDTO dto) {
ResourceEntity resourceEntity = new ResourceEntity();
BeanUtils.copyProperties(dto, resourceEntity);
@ -451,9 +453,6 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
/**
* 从本库内查询
*
* @param resultPage
* @return
*/
private Page<ResourceDTO> common(Page<ResourceDTO> resultPage, List<Map> selectDTOPageSpecilTotal, ResourceDTO resourceDTO, String orderField, String orderType, Integer pageNum, Integer pageSize) {
if (resourceDTO.getInfoList().isEmpty()) {
@ -499,11 +498,11 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
resultPage.setRecords(resourceDTOS);
resultPage.setTotal(resourceDao.selectDTOPageCount(resourceDTO));
} else {
logger.info("orderField:{} orderType:{}", orderField, orderType);
logger.info("排序要求 orderField:{} orderType:{}", orderField, orderType);
List<ResourceDTO> resourceDTOS = resourceDao.selectWithAttrs(resourceDTO, orderField, orderType);
int j = Math.min(pageNum * pageSize, resourceDTOS.size());
if (resourceDTOS.isEmpty()) {
resultPage.setRecords(null);
resultPage.setRecords(new ArrayList<>());
resultPage.setTotal(0);
} else {
List<ResourceDTO> recordLists = resourceDTOS.stream()
@ -533,25 +532,20 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
public Object selectTotal() {
HashMap<String, Object> resultMap = new HashMap<>();
List<Map> re = resourceDao.selectTypeCount(null);
//2022-07-05,ytl修改 start
re.removeIf(r -> {
return org.apache.commons.lang3.StringUtils.equals(r.get("type").toString(), "基础设施");
});
//2022-07-05,ytl修改 end
switch (Constant.ProjectPlace.getByFlag(projectPlace)) {
case TSINGTAO_XHA: { // 青岛西海岸
CompletableFuture allAmount = CompletableFuture.supplyAsync(() -> { // 获取平台总基础设施数目
List<Long> result_ = new CopyOnWriteArrayList<>();
List<Long> result = new CopyOnWriteArrayList<>();
CompletableFuture cloud =
CompletableFuture.runAsync(() -> { // 云脑专网
String url = String.format(tsingtao_xhaProperties.getCloudcam(), "", 1, 10);
String url = tsingtao_xhaProperties.getCamCount();
logger.info(url);
Request request = new Request.Builder().url(url).build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
JSONObject jsonObject = JSON.parseObject(response.body().string());
if (jsonObject.containsKey("data")) {
result_.add(jsonObject.getJSONObject("data").getLongValue("total"));
if (jsonObject.containsKey("errorNo") && jsonObject.getLongValue("errorNo") == 200) {
result.add(jsonObject.getLongValue("body"));
}
} else {
logger.error("青岛西海岸获取失败");
@ -562,14 +556,14 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}, executor);
CompletableFuture local =
CompletableFuture.runAsync(() -> { // 金宏网
String url = String.format(tsingtao_xhaProperties.getLocalcam(), "", 1, 10);
String url = tsingtao_xhaProperties.getLocalcam();
logger.info(url);
Request request = new Request.Builder().url(url).build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
JSONObject jsonObject = JSON.parseObject(response.body().string());
if (jsonObject.containsKey("data")) {
result_.add(jsonObject.getJSONObject("data").getLongValue("total"));
if (jsonObject.containsKey("errorNo") && jsonObject.getLongValue("errorNo") == 200) {
result.add(jsonObject.getLongValue("body"));
}
} else {
logger.error("青岛西海岸获取失败");
@ -580,16 +574,14 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}, executor);
CompletableFuture all = CompletableFuture.allOf(cloud, local);
all.join();
return result_.stream().filter(Objects::nonNull).findAny().orElse(0l);
}).thenAccept(sum -> {
re.add(new HashMap<String, Object>() {
{
put("count", sum + "");
put("type", "基础设施");
}
});
});
Long total = 0L;
return result.stream().filter(Objects::nonNull).findAny().orElse(0L);
}).thenAccept(sum -> re.add(new HashMap<String, Object>() {
{
put("count", sum + "");
put("type", "基础设施");
}
}));
Long total;
Request request = new Request.Builder().url(tsingtao_xhaProperties.getResourcecount()).build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
@ -639,6 +631,8 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
break;
default:
break;
}
List<String> temp = new ArrayList<>();
re.forEach(map -> temp.add(map.get("type").toString()));
@ -702,13 +696,13 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
Long userId = SecurityUser.getUser().getId();
//根据用户收藏和申请数据查出应用领域排名再根据应用领域查询热门能力推荐给用户
List<Map> applyAreaList = resourceDao.selectApplyArea(userId);
//没有收藏和申请过按最热能力选取,否则根据应用领域最多类型推荐
JSONObject object = new JSONObject();
object.put("pageNum", 0);
object.put("pageSize", 9);
object.put("orderFiled", "total");
object.put("orderType", "DESC");
Page<ResourceDTO> resultPage = (Page<ResourceDTO>) this.selectMostPopular(object);
//根据收藏和申请的资源所属应用领域最多类型推荐若没有收藏和申请数据或者查询出来的数据不足9条按最热能力选取不重复的补足
if (!applyAreaList.isEmpty()) {
ResourceDTO resourceDTO = new ResourceDTO();
ArrayList<AttrEntity> list = new ArrayList<>();
@ -725,18 +719,27 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
Page<ResourceDTO> page = (Page<ResourceDTO>) this.pageWithAttrs(jsonObject, selectDTOPageSpecilTotal);
//若查出数据不足9条则在热门能力补充缺少的数量
if (page.getRecords().size() < 9) {
for (int i = 0; page.getRecords().size() < 9; i++) {
for (int j = 0; j < page.getRecords().size(); j++) {
if (!page.getRecords().get(j).getId().equals(resultPage.getRecords().get(i).getId())) {
page.getRecords().add(resultPage.getRecords().get(i));
break;
Page<ResourceDTO> resultPage = (Page<ResourceDTO>) this.selectMostPopular(object);
do {
resultPage.getRecords().forEach(p -> {
//如果集合中不存在则进行添加
if (!page.getRecords().contains(p)) {
page.getRecords().add(p);
}
}
}
});
} while (page.getRecords().size() < 9);
//for (int i = 0; page.getRecords().size() < 9; i++) {
// for (int j = 0; j < page.getRecords().size(); j++) {
// if (!page.getRecords().get(j).getId().equals(resultPage.getRecords().get(i).getId())) {
// page.getRecords().add(resultPage.getRecords().get(i));
// break;
// }
// }
//}
}
return page;
} else {
return resultPage;
return this.selectMostPopular(object);
}
}
@ -751,7 +754,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
@Override
@Cacheable(value = selectDeptListKey, key = "#p1")
@Cacheable(value = SELECT_DEPT_LIST_KEY, key = "#p1")
public Object selectDeptList(JSONObject jsonObject, String type) {
List<Map> resultList = new CopyOnWriteArrayList<>();
HashMap<String, Object> resourceMap = new HashMap<>();
@ -971,10 +974,10 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
if (maxTypeCount[0] > 0) {
maxdeptMap.put("typeName", maxTypeString[0]);
if ("基础设施".equals(maxTypeString[0])) {
List <Map> resourceList = new ArrayList<>();
List<Map> resourceList = new ArrayList<>();
Map<String, Object> infrastructureList = (Map<String, Object>) this.selectInfrastructureList();
infrastructureList.forEach((k,v) -> {
resourceList.add(new HashMap(){{
infrastructureList.forEach((k, v) -> {
resourceList.add(new HashMap() {{
put("id", k + v + "");
put("name", k + v + "");
}});
@ -986,11 +989,11 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
dto.setPageSize(30);
Optional<AbstractDataResourceService> factory = DataResourceFactory.build();
if (factory.isPresent()) {
List <Map> resourceList = new ArrayList<>();
List<Map> resourceList = new ArrayList<>();
Map<String, Object> dataResource = (Map<String, Object>) factory.get().getDataResource(dto);
if (!dataResource.isEmpty()) {
List<Map<String, Object>> list = (List<Map<String, Object>>) dataResource.get("data");
list.forEach(map -> resourceList.add(new HashMap(){{
list.forEach(map -> resourceList.add(new HashMap() {{
if (map.containsKey("zyname")) {
put("id", map.get("guid"));
put("name", map.get("zyname"));
@ -1002,7 +1005,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
maxdeptMap.put("resourceList", resourceList);
}
}else {
} else {
List<Map> resourceList = resourceDao.selectByType(maxTypeString[0]);
maxdeptMap.put("resourceList", resourceList);
}
@ -1042,7 +1045,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
@Override
@Cacheable(value = selectDTOPageSpecilTotalKey, key = "#p0")
@Cacheable(value = SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY, key = "#p0")
public List<Map> selectDTOPageSpecilTotal(ResourceDTO resourceDTO) {
return resourceDao.selectDTOPageSpecilTotal(resourceDTO);
}
@ -1055,9 +1058,10 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
List<TAbilityApplicationEntity> applicationEntities = tAbilityApplicationDao.selectList(queryWrapper);
ArrayList cameraList = new ArrayList();
applicationEntities.forEach(index -> {
List<CameraChannelDto1> channelDto1s = cameraChannelMapper.selectByChannelCode(index.getCameraList().replaceAll("\"", ""));
if (!channelDto1s.isEmpty()) {
cameraList.add(channelDto1s.get(0));
//List<CameraChannelDto1> channelDto1s = cameraChannelMapper.selectByChannelCode(index.getCameraList().replaceAll("\"", ""));
CameraChannelDto1 channelDto1s = JSON.toJavaObject(JSON.parseObject(index.getCameraList()), CameraChannelDto1.class);
if (ObjectUtils.allNotNull(channelDto1s)) {
cameraList.add(channelDto1s);
}
});
return cameraList;
@ -1066,10 +1070,10 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
public Object selectResourceListByType(String type) {
if ("基础设施".equals(type)) {
List <Map> resourceList = new ArrayList<>();
List<Map> resourceList = new ArrayList<>();
Map<String, Object> infrastructureList = (Map<String, Object>) this.selectInfrastructureList();
infrastructureList.forEach((k,v) -> {
resourceList.add(new HashMap(){{
infrastructureList.forEach((k, v) -> {
resourceList.add(new HashMap() {{
put("id", k + v + "");
put("name", k + v + "");
}});
@ -1077,15 +1081,15 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
return resourceList;
} else if ("数据资源".equals(type)) {
GetDataResourceListDto dto = new GetDataResourceListDto();
dto.setPageNum(0);
dto.setPageNum(1);
dto.setPageSize(30);
Optional<AbstractDataResourceService> factory = DataResourceFactory.build();
if (factory.isPresent()) {
List <Map> resourceList = new ArrayList<>();
List<Map> resourceList = new ArrayList<>();
Map<String, Object> dataResource = (Map<String, Object>) factory.get().getDataResource(dto);
if ( dataResource != null && !dataResource.isEmpty()) {
if (dataResource != null && !dataResource.isEmpty()) {
List<Map<String, Object>> list = (List<Map<String, Object>>) dataResource.get("data");
list.forEach(map -> resourceList.add(new HashMap(){{
list.forEach(map -> resourceList.add(new HashMap() {{
if (map.containsKey("zyname")) {
put("id", map.get("guid"));
put("name", map.get("zyname"));
@ -1099,7 +1103,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
} else {
return new ArrayList<>();
}
}else {
} else {
return resourceDao.selectByType(type);
}
}
@ -1113,12 +1117,12 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
* 同步知识库
*/
@Override
@CacheEvict(cacheNames = {selectDeptListKey, selectDTOPageSpecilTotalKey}, allEntries = true)
@CacheEvict(cacheNames = {SELECT_DEPT_LIST_KEY, SELECT_DTO_PAGE_SPECIAL_TOTAL_KEY}, allEntries = true)
public void KnowledgeBase() {
final List<String> knowledgeUUID = jdbcTemplate.queryForList("SELECT note1 FROM tb_data_resource WHERE type ='知识库' AND note1 IS NOT NULL FOR UPDATE;", String.class).stream().distinct().collect(Collectors.toList());
final int pageSize = cpuNUm * 10;
final int pageSize = CPU_NUM * 10;
Arrays.stream(catalogIds).map(index -> {
logger.info("处理:" + index);
logger.info("处理:{}", index);
CopyOnWriteArrayList<CompletableFuture> task = new CopyOnWriteArrayList<>();
AtomicBoolean end = new AtomicBoolean(true);
AtomicInteger pageIndex = new AtomicInteger(1);
@ -1126,33 +1130,39 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
do {
final long timestamp = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
int page = pageIndex.getAndIncrement();
logger.info("处理:" + index + " 分页{}", page);
logger.info("处理:{}分页{}", index, page);
task.add(CompletableFuture.supplyAsync(() -> {
try {
logger.info("分页任务处理:" + index + " 分页{} 时间 -->" + timestamp, page);
logger.info("分页任务处理:{}分页{} 时间--> {}", index, page, timestamp);
JSONObject bizContentParam = new JSONObject();
bizContentParam.put("appkey", appKey);
bizContentParam.put("catalogId", index);
bizContentParam.put("pageIndex", page);
bizContentParam.put("pageSize", pageSize);
String bizContent_ = bizContentParam.toJSONString();
logger.info("biz_content参数{}", bizContent_);
String bizContent = bizContentParam.toJSONString();
logger.info("biz_content参数{}", bizContent);
// 通过FormBody对象构建Builder来添加表单参数
FormBody.Builder signFormBody = new FormBody.Builder().add("app_id", appId).add("interface_id", methodId).add("version", version).add("timestamp", String.valueOf(timestamp)).add("origin", origin).add("charset", charset).add("biz_content", bizContent_);
logger.info(index + "分页{}对接知识库数据请求参数:" + signFormBody.build().contentType().toString(), page);
FormBody.Builder signFormBody = new FormBody.Builder().add("app_id", appId)
.add("interface_id", methodId).
add("version", version).
add("timestamp", String.valueOf(timestamp)).
add("origin", origin).
add("charset", charset).
add("biz_content", bizContent);
logger.info("{}分页{}对接知识库数据请求参数:{}", index, page, signFormBody.build().contentType().toString());
Request signRequest = new Request.Builder().url(sign).post(signFormBody.build()).build();
Response signResponse = client.newCall(signRequest).execute();
String signResult = signResponse.body().string();
logger.info("{}分页signResult数据" + signResult, page);
logger.info("{}分页signResult数据{}", page, signResult);
JSONObject signJsonObject = JSON.parseObject(signResult);
if (!signJsonObject.containsKey("data")) {
logger.info("获取sign异常" + signResult);
logger.info("获取sign异常{}", signResult);
end.set(false);
throw new RuntimeException("获取sign异常");
}
if (signJsonObject.get("data") == null) {
logger.info("获取sign异常" + signResult);
logger.info("获取sign异常{}", signResult);
end.set(false);
throw new RuntimeException("获取sign异常");
}
@ -1234,7 +1244,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
infoList.add(attrEntity);
dto.setInfoList(infoList);
this.insertWithAttrs(dto);
logger.info("插入:" + dto.getName());
logger.info("插入:{}", dto.getName());
});
}, executor));
try {
@ -1418,12 +1428,12 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
public PageData<Map<String, Object>> resourceInfrastructureDetails(Map<String, Object> params) {
List<Map<String, Object>> result = new CopyOnWriteArrayList<>();
List<Map<String, Object>> result;
Integer page = Integer.parseInt(params.get("page").toString()) - 1;
Integer pageSize = Integer.parseInt(params.get("limit").toString());
Object[] pas = {params.get("id"), params.get("id")};
List<Map<String, Object>> result2 = new ArrayList<>();
List<Map<String, Object>> result2;
if (Long.parseLong(params.get("id").toString()) == 0) {
result2 = jdbcTemplate.queryForList("SELECT COUNT(a.id) AS resourceNum,a.dept_id AS deptId,b.name AS deptName\n" +
"FROM tb_data_resource a INNER JOIN sys_dept b ON a.dept_id = b.id\n" +
@ -1439,11 +1449,11 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
"ORDER BY a.dept_id,b.name\n", pas);
}
if (result2.size() > 0) {
if (!result2.isEmpty()) {
List<List<Map<String, Object>>> partition = Lists.partition(result2, pageSize);
result.addAll(partition.get(page));
result = new CopyOnWriteArrayList<>(partition.get(page));
} else {
return new PageData<>(result2, result2.size());
return new PageData<>(result2, 0);
}
CompletableFuture<Void> resourceCollectionNum01 = CompletableFuture.runAsync(() -> {//被申请数量 resourceCarNum
@ -1470,8 +1480,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
CompletableFuture<Void> all = CompletableFuture.allOf(resourceCollectionNum01, resourceCollectionNum02, resourceCollectionNum03);
all.join();
PageData<Map<String, Object>> pageData = new PageData<>(result, result2.size());
return pageData;
return new PageData<>(result, result2.size());
}
@Override
@ -1481,7 +1490,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
Integer pageSize = Integer.parseInt(params.get("limit").toString());
Object[] pas = {params.get("id"), params.get("id")};
List<Map<String, Object>> result2 = new ArrayList<>();
List<Map<String, Object>> result2;
if (Long.parseLong(params.get("id").toString()) == 0) {
result2 = jdbcTemplate.queryForList("SELECT COUNT(a.id) AS resourceNum,a.dept_id AS deptId,b.name AS deptName\n" +
"FROM tb_data_resource a INNER JOIN sys_dept b ON a.dept_id = b.id\n" +
@ -1498,7 +1507,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
if (result2.size() > 0) {
if (!result2.isEmpty()) {
List<List<Map<String, Object>>> partition = Lists.partition(result2, pageSize);
result.addAll(partition.get(page));
} else {
@ -1529,13 +1538,12 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
CompletableFuture<Void> all = CompletableFuture.allOf(resourceCarNum, resourceBrowseNum, resourceCollectionNum);
all.join();
PageData<Map<String, Object>> pageData = new PageData<>(result, result2.size());
return pageData;
return new PageData<>(result, result2.size());
}
@Override
public PageData<Map<String, Object>> resourceKnowledgeDetails(Map<String, Object> params) {
List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> result;
Integer page = Integer.parseInt(params.get("page").toString()) - 1;
Integer pageSize = Integer.parseInt(params.get("limit").toString());
Object[] pas = {params.get("id"), params.get("id")};
@ -1558,100 +1566,77 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
List<List<Map<String, Object>>> partition = Lists.partition(result, pageSize);
if (result.size() > 0) {
PageData<Map<String, Object>> pageData = new PageData<>(partition.get(page), result.size());
return pageData;
if (!result.isEmpty()) {
return new PageData<>(partition.get(page), result.size());
} else {
return new PageData<>(result, result.size());
return new PageData<>(result, 0);
}
}
@Override
public PageData<Map<String, Object>> resourceBusinessUseDetails(Map<String, Object> params) {
List<Map<String, Object>> maps = new CopyOnWriteArrayList<>();
List<Map<String, Object>> maps;
Integer page = Integer.parseInt(params.get("page").toString()) - 1;
Integer pageSize = Integer.parseInt(params.get("limit").toString());
Object[] ps = {params.get("id"), params.get("id")};
//获取部门列表
List<Map<String, Object>> list = new ArrayList<>();
List<Map<String, Object>> list;
if (Long.parseLong(params.get("id").toString()) == 0) {
list = jdbcTemplate.queryForList("SELECT id as deptId,name AS deptName FROM sys_dept");
list = jdbcTemplate.queryForList("SELECT id AS deptId,name AS deptName FROM sys_dept");
} else {
list = jdbcTemplate.queryForList("SELECT id as deptId,name AS deptName FROM sys_dept WHERE id = ? OR INSTR(pids,?)", ps);
list = jdbcTemplate.queryForList("SELECT id AS deptId,name AS deptName FROM sys_dept WHERE id = ? OR INSTR(pids,?)", ps);
}
if (list.size() > 0) {
if (!list.isEmpty()) {
List<List<Map<String, Object>>> partition = Lists.partition(list, pageSize);
maps.addAll(partition.get(page));
maps = new CopyOnWriteArrayList<>(partition.get(page));
} else {
return new PageData<>(list, list.size());
return new PageData<>(list, 0);
}
Map<String, Object> paraMap = new ConcurrentHashMap<>();
paraMap.put("resourceType", params.get("resourceType"));
//分别根据部门获取组件使用总数和调用数
//申请数
// CompletableFuture<Void> voidCompletableFuture01 = CompletableFuture.runAsync(() -> {
// maps.forEach(m -> {
// paraMap.put("id", m.get("deptId"));
// Map<String, Object> maps1 = new HashMap<>();
// maps1 = baseDao.assemblyCarByDept(paraMap);
// if (maps1 == null) {
// m.put("resourceCarNum", 0);
// } else {
// m.put("resourceCarNum", maps1.get("carNum") == null ? 0 : maps1.get("carNum"));
// }
// });
// });
//本部门的应用关联的组件数量
CompletableFuture<Void> voidCompletableFuture02 = CompletableFuture.runAsync(() -> {
maps.forEach(m -> {
paraMap.put("id", m.get("deptId"));
Map<String, Object> maps2 = new HashMap<>();
maps2 = baseDao.assemblyUseByDept(paraMap);
if (maps2 == null) {
m.put("resourceUseNum", 0);
} else {
m.put("resourceUseNum", maps2.get("useNum") == null ? 0 : maps2.get("useNum"));
}
});
}, executor);
CompletableFuture<Void> voidCompletableFuture02 = CompletableFuture.runAsync(() -> maps.forEach(m -> {
paraMap.put("id", m.get("deptId"));
Map<String, Object> maps2 = new HashMap<>();
maps2 = baseDao.assemblyUseByDept(paraMap);
if (maps2 == null) {
m.put("resourceUseNum", 0);
} else {
m.put("resourceUseNum", maps2.get("useNum") == null ? 0 : maps2.get("useNum"));
}
}), executor);
//还缺少组件调用数,这先用假数据代替
CompletableFuture<Void> voidCompletableFuture01 = CompletableFuture.runAsync(() -> {
maps.forEach(m -> {
m.put("resourceCallNum", 0);
});
}, executor);
CompletableFuture<Void> voidCompletableFuture01 = CompletableFuture.runAsync(() -> maps.forEach(m -> m.put("resourceCallNum", 0)), executor);
CompletableFuture<Void> all = CompletableFuture.allOf(voidCompletableFuture01, voidCompletableFuture02);
all.join();
PageData<Map<String, Object>> pageData = new PageData<>(maps, list.size());
return pageData;
return new PageData<>(maps, list.size());
}
@Override
public PageData<Map<String, Object>> resourceDatasUseDetails(Map<String, Object> params) {
List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> result;
Integer page = Integer.parseInt(params.get("page").toString()) - 1;
Integer pageSize = Integer.parseInt(params.get("limit").toString());
//查询部门列表
Object[] ps = {params.get("id"), params.get("id")};
List<Map<String, Object>> list = new ArrayList<>();
List<Map<String, Object>> list;
if (Long.parseLong(params.get("id").toString()) == 0) {
list = jdbcTemplate.queryForList("SELECT id AS deptId,name AS deptName FROM sys_dept ");
} else {
list = jdbcTemplate.queryForList("SELECT id AS deptId,name AS deptName FROM sys_dept WHERE id = ? OR INSTR(pids,?) ", ps);
}
if (list.size() > 0) {
if (!list.isEmpty()) {
List<List<Map<String, Object>>> partition = Lists.partition(list, pageSize);
result.addAll(partition.get(page));
result = new ArrayList<>(partition.get(page));
} else {
return new PageData<>(list, list.size());
return new PageData<>(list, 0);
}
ConcurrentHashMap map = new ConcurrentHashMap();
map.put("resourceType", params.get("resourceType"));
@ -1666,13 +1651,12 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
});
PageData<Map<String, Object>> pageData = new PageData<>(result, list.size());
return pageData;
return new PageData<>(result, list.size());
}
@Override
public List<Map<String, Object>> assemblerCarDetail(Map<String, Object> params) {
List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> result;
Object[] ps = {params.get("resourceType"), params.get("id"), (Integer.parseInt(params.get("page").toString()) - 1) * Integer.parseInt(params.get("limit").toString()), Integer.parseInt(params.get("limit").toString())};
result = jdbcTemplate.queryForList("SELECT a.* FROM tb_resource_car a INNER JOIN sys_user b ON a.creator = b.id " +
"INNER JOIN tb_data_resource d ON a.resource_id = d.id WHERE a.del_flag = 0 AND d.type = ? AND " +
@ -1711,7 +1695,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
@Override
public Object selectTotalByDept() {
public HashMap<String, Object> selectTotalByDept() {
HashMap<String, Object> resultMap = new HashMap<>();
Long deptId = SecurityUser.getUser().getDeptId();
List<Long> deptList = null;
@ -1733,7 +1717,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
limit = Integer.parseInt((String) params.get(Constant.LIMIT));
}
List<SysUserDTO> sysUserList = sysUserService.list(new HashMap());
List<ResourceDTO> result = resourceDao.selectUsersApplyAndCount(sysUserList.stream().map(dto -> dto.getId()).collect(Collectors.toList()));
List<ResourceDTO> result = resourceDao.selectUsersApplyAndCount(sysUserList.stream().map(SysUserDTO::getId).collect(Collectors.toList()));
int j = Math.min(curPage * limit, result.size());
ArrayList<ResourceDTO> recordLists = new ArrayList<>();
for (int i = (curPage - 1) * limit; i < j; i++) {
@ -1842,17 +1826,17 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
public Object selectInfrastructureList() {
return new HashMap<String, Object>() {{
Map map = (Map) selectTotal();
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("total");
list.forEach(index -> {
if ("基础设施".equals(index.get("type").toString())) {
put("视频资源", Integer.parseInt(index.get("count").toString()));
}
});
put("感知资源", 0);
put("云资源", 0);
}};
HashMap<String, Object> resultMap = new HashMap<>();
Map map = (Map) selectTotal();
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("total");
list.forEach(index -> {
if ("基础设施".equals(index.get("type").toString())) {
resultMap.put("视频资源", Integer.parseInt(index.get("count").toString()));
}
});
resultMap.put("感知资源", 0);
resultMap.put("云资源", 0);
return resultMap;
}
private List<Long> getSourceIdsByProcess(List<HistoricProcessInstance> list) {
@ -1890,6 +1874,44 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
@Override
public List<Map> selectDevelopDoc() {
//List<Map> result = new ArrayList<>();
//List<Map<String, Object>> dtoMaps = baseDao.selectDevelopDocResource();
//Map<String, List<Map<String, Object>>> resourceTypeMap = dtoMaps.stream().collect(Collectors.groupingBy(m -> m.get("type").toString()));
//resourceTypeMap.forEach((key, value) -> {
// if (!"组件服务".equals(key)) {
// Map<String, Object> map = new HashMap<>();
// map.put("title", key);
// map.put("children", value);
// result.add(map);
// }
//});
//if (resourceTypeMap.get("组件服务") != null) {
// Map componentMap = new HashMap();
// componentMap.put("title", "组件服务");
// Map<String, List> map = new ConcurrentHashMap<>();
// CompletableFuture.allOf(resourceTypeMap.get("组件服务").stream()
// .map(it -> CompletableFuture.runAsync(() -> selectAttrsByResourceId(Long.parseLong(it.get("id").toString()))
// .stream()
// .filter(temp -> "组件类型".equals(temp.getAttrType()))
// .forEach(attr -> {
// if (map.get(attr.getAttrValue()) != null) {
// map.get(attr.getAttrValue()).add(it);
// } else {
// map.put(attr.getAttrValue(), Collections.synchronizedList(new ArrayList() {{
// add(it);
// }}));
// }
// }), executor))
// .collect(Collectors.toList())
// .toArray(new CompletableFuture[resourceTypeMap.get("组件服务").size()]))
// .join();
// componentMap.put("children", map.entrySet().stream().map(it -> new HashMap() {{
// put("title", it.getKey());
// put("children", it.getValue());
// }}).collect(Collectors.toList()));
// result.add(componentMap);
//}
//return result;
List<Map> result = new ArrayList<>();
List<Map<String, Object>> dtoMaps = baseDao.selectDevelopDocResource();
Map<String, List<Map<String, Object>>> resourceTypeMap = dtoMaps.stream().collect(Collectors.groupingBy(m -> m.get("type").toString()));
@ -1927,6 +1949,8 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
result.add(componentMap);
}
return result;
}
}

View File

@ -5,8 +5,6 @@ import io.renren.modules.resource.videoPreview.AbstractVideoPreviewService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
/**
* 青岛市局预览
*/
@ -29,7 +27,7 @@ public class TsingtaoVideoPreviewService extends AbstractVideoPreviewService {
public String getHls(String key) {
try {
return monitorService.fileCode(key);
} catch (IOException e) {
} catch (Exception e) {
logger.error("青岛市局获取预览地址失败", e);
return null;
}

View File

@ -24,4 +24,6 @@ public class TResourceUndercarriageApplyDTO extends AuditingBaseDTO implements S
private List<Map<String, String>> resource;
@ApiModelProperty(value = "下架原因")
private String reason;
@ApiModelProperty(value = "下架附件")
private String enclosure;
}

View File

@ -130,16 +130,31 @@ public class ResourceOwnerListener implements TaskListener, ExecutionListener, A
JsonElement jsonElement = gson.toJsonTree(kv);
TResourceMountApplyDTO resourceMountApplyDTO = gson.fromJson(jsonElement, TResourceMountApplyDTO.class);
ResourceDTO re = resourceService.get(resourceMountApplyDTO.getResourceId());
if (re != null) {
re.setDelFlag(ResourceEntityDelFlag.NORMAL.getFlag());
resourceService.update(re);
logger.error("审批通过资源id:" + re.getId());
try {
apiGatewayService.registerApi2Gateway(String.valueOf(re.getId())); // 发布到应用网关
} catch (Exception exception) {
logger.error("发布到应用网关", exception);
if (resourceMountApplyDTO != null) {
if (resourceMountApplyDTO.getReject() != null && resourceMountApplyDTO.getReject() == Boolean.TRUE) { // 存在被拒绝的节点
if (re != null) {
re.setDelFlag(ResourceEntityDelFlag.REJECT_REVIEW.getFlag());
resourceService.update(re);
logger.error("审批未通过资源id:" + re.getId());
}
return;
}
if (resourceMountApplyDTO.getReject() == null || resourceMountApplyDTO.getReject() != Boolean.TRUE) { // 都是同意
if (re != null) {
re.setDelFlag(ResourceEntityDelFlag.NORMAL.getFlag());
resourceService.update(re);
logger.error("审批通过资源id:" + re.getId());
try {
apiGatewayService.registerApi2Gateway(String.valueOf(re.getId())); // 发布到应用网关
} catch (Exception exception) {
logger.error("发布到应用网关", exception);
}
}
return;
}
}
}
/**

View File

@ -2,6 +2,7 @@ package io.renren.modules.security.config;
import io.renren.modules.security.oauth2.Oauth2Filter;
import io.renren.modules.security.oauth2.Oauth2Realm;
import io.renren.modules.security.oauth2.ShiroSessionManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
@ -9,6 +10,7 @@ import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSource
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -26,12 +28,22 @@ public class ShiroConfig {
// @Autowired
// private Oauth2Filter oauth2Filter;
//@Autowired
//private ShiroSessionManager shiroSessionManager;
//@Bean
//public DefaultWebSessionManager sessionManager() {
// DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// sessionManager.setSessionValidationSchedulerEnabled(false);
// sessionManager.setSessionIdUrlRewritingEnabled(false);
// sessionManager.setGlobalSessionTimeout(-1000l);
// return sessionManager;
//}
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setSessionValidationSchedulerEnabled(false);
sessionManager.setSessionIdUrlRewritingEnabled(false);
ShiroSessionManager sessionManager = new ShiroSessionManager();
sessionManager.setGlobalSessionTimeout(-1000L);
return sessionManager;
}
@ -77,6 +89,9 @@ public class ShiroConfig {
filterMap.put("/bsabilityrecord/**", "anon");
filterMap.put("/act/his/getInstImage", "anon");
filterMap.put("/resource/getApplyCameraList/**", "anon");
filterMap.put("/resource/hls/getHls", "anon");
/**
* 资源上传
*/

View File

@ -14,7 +14,6 @@ import io.renren.modules.log.service.SysLogLoginService;
import io.renren.modules.security.dto.LoginDTO;
import io.renren.modules.security.oauth2.Oauth2Filter;
import io.renren.modules.security.oauth2.SSOValidator;
import io.renren.modules.security.oauth2.YaWeiCookieManage;
import io.renren.modules.security.password.PasswordUtils;
import io.renren.modules.security.service.CaptchaService;
import io.renren.modules.security.service.SysUserTokenService;
@ -28,6 +27,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -45,6 +45,8 @@ import java.io.IOException;
import java.util.Date;
import java.util.Map;
import static org.apache.shiro.SecurityUtils.getSubject;
/**
* 登录
*/
@ -188,6 +190,9 @@ public class LoginController {
response.addHeader("REDIRECT", ssoValidator.getLogoutUrl());
}
Subject subject = getSubject();
subject.logout();
return new Result();
}

View File

@ -1,6 +1,5 @@
package io.renren.modules.security.oauth2;
import cn.hutool.core.util.URLUtil;
import org.apache.commons.lang3.StringUtils;
import org.jasig.cas.client.validation.Assertion;
import org.jasig.cas.client.validation.TicketValidationException;

View File

@ -1,7 +1,5 @@
package io.renren.modules.security.oauth2;
import javax.servlet.http.HttpServletRequest;
public interface SSOValidator {
String validatePrincipal(String requestURL);

View File

@ -0,0 +1,82 @@
package io.renren.modules.security.oauth2;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.SessionContext;
import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.apache.shiro.web.util.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
//@Component
public class ShiroSessionManager extends DefaultWebSessionManager {
/**
* 返回客户端的
*/
public final String TOKEN_NAME = "token";
/**
* 这个是客户端请求给服务端带的header
*/
public final static String HEADER_TOKEN_NAME = "token";
public final static Logger log = LoggerFactory.getLogger(ShiroSessionManager.class);
private static final String REFERENCED_SESSION_ID_SOURCE = "Stateless request";
/**
* 重写getSessionId,分析请求头中的指定参数做用户凭证sessionId
*/
@Override
protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
String sessionId = WebUtils.toHttp(request).getHeader(HEADER_TOKEN_NAME);
log.info("获取的sessionId为" + sessionId);
if (StringUtils.isEmpty(sessionId)) {
return super.getSessionId(request, response);
} else {
//如果请求头中有 token 则其值为sessionId
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE, REFERENCED_SESSION_ID_SOURCE);
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, sessionId);
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE);
return sessionId;
}
}
/*@Override
protected void onStart(Session session, SessionContext context) {
log.info("执行onStart");
if (!WebUtils.isHttp(context)) {
log.debug("SessionContext argument is not HTTP compatible or does not have an HTTP request/response pair. No session ID cookie will be set.");
} else {
HttpServletRequest request = WebUtils.getHttpRequest(context);
HttpServletResponse response = WebUtils.getHttpResponse(context);
Serializable sessionId = session.getId();
this.storeSessionId(sessionId, request, response);
request.removeAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE);
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_IS_NEW, Boolean.TRUE);
}
}
*//**
* 把sessionId 放入 response header
* onStart时调用
* 没有sessionid时 会产生sessionid 并放入 response header中
*//*
private void storeSessionId(Serializable currentId, HttpServletRequest ignored, HttpServletResponse response) {
if (currentId == null) {
String msg = "sessionId cannot be null when persisting for subsequent requests.";
throw new IllegalArgumentException(msg);
} else {
String idString = currentId.toString();
response.setHeader(this.TOKEN_NAME, idString);
log.info("Set session ID header for session with id {}", idString);
log.trace("Set session ID header for session with id {}", idString);
}
}*/
}

View File

@ -38,7 +38,6 @@ public class SysUserTokenServiceImpl extends BaseServiceImpl<SysUserTokenDao, Sy
token = TokenGenerator.generateValue();
SysUserTokenEntity tokenEntity = new SysUserTokenEntity();
tokenEntity = new SysUserTokenEntity();
tokenEntity.setUserId(userId);
tokenEntity.setToken(token);
tokenEntity.setUpdateDate(now);

View File

@ -38,7 +38,6 @@ public class WebSocketServer {
@OnOpen
public void open(Session session) {
Long userId = (Long) session.getUserProperties().get(Constant.USER_KEY);
servers.put(session.getId(), new WebSocketData(userId, session));
}
@ -46,7 +45,7 @@ public class WebSocketServer {
public void onClose(Session session) {
//客户端断开连接
servers.remove(session.getId());
log.debug("websocket close, session id" + session.getId());
log.info("websocket close, session id" + session.getId());
}
@OnError
@ -57,7 +56,7 @@ public class WebSocketServer {
@OnMessage
public void onMessage(Session session, String msg) {
log.info("session id: " + session.getId() + "userId{} message" + msg, servers.get(session.getId()).getUserId());
log.info("session id: " + session.getId() + " userId{} message" + msg, servers.get(session.getId()).getUserId());
}
/**
@ -77,11 +76,11 @@ public class WebSocketServer {
* @param message 消息内容
*/
public void sendMessage(Long userId, MessageData<?> message) {
servers.values().forEach(info -> {
if (userId.equals(info.getUserId())) {
sendMessage(info.getSession(), message);
}
});
servers.values().stream()
.filter(index -> userId.equals(index.getUserId()))
.forEach(index -> {
sendMessage(index.getSession(), message);
});
}
/**
@ -90,7 +89,9 @@ public class WebSocketServer {
* @param message 消息内容
*/
public void sendMessageAll(MessageData<?> message) {
servers.values().forEach(info -> sendMessage(info.getSession(), message));
servers.values().forEach(info ->
sendMessage(info.getSession(), message)
);
}
public void sendMessage(Session session, MessageData<?> message) {
@ -100,4 +101,8 @@ public class WebSocketServer {
log.error("send message error" + e.getMessage(), e);
}
}
public static Map<String, WebSocketData> getServers() {
return servers;
}
}

View File

@ -0,0 +1,41 @@
package io.renren.websocket.task;
import io.renren.modules.job.task.ITask;
import io.renren.websocket.WebSocketServer;
import io.renren.websocket.data.MessageData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 与websocket客户端定时心跳
*/
@Component("heartRateTask")
public class HeartRateTask implements ITask {
private static final Logger logger = LoggerFactory.getLogger(HeartRateTask.class);
@Autowired
private WebSocketServer webSocketServer;
/**
* 执行定时任务接口
*
* @param params 参数多参数使用JSON数据
*/
@Override
public void run(String params) {
try {
if (webSocketServer.getServers().isEmpty()) {
return;
}
MessageData<String> message = new MessageData<String>().msg("heartRate:" + LocalDateTime.now());
webSocketServer.sendMessageAll(message);
} catch (Exception exception) {
logger.error("websocket客户端心跳失败", exception);
}
}
}

View File

@ -6,8 +6,7 @@ spring:
#MySQL
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://15.2.21.238:3310/share_platform?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
#url: jdbc:mysql://15.2.21.221:3306/share_platform?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
url: jdbc:mysql://192.168.124.236:3306/share_platform?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
username: root
password: Hisense2019
#Hisense2019
@ -62,7 +61,7 @@ spring:
out-of-order: true
#上传的静态资源配置
resource:
root_url: 15.2.21.238
root_url: 192.168.124.236
pic-host: http://${resource.root_url}:${server.port}${server.servlet.context-path}
path: /home/yth/files/
devModelFilePath: /home/yth/files/devModelFile

View File

@ -11,7 +11,7 @@ spring:
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 100
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
@ -37,7 +37,6 @@ spring:
# 生产环境默认关掉flyway
flyway:
enabled: false
validate-on-migrate: false
#上传的静态资源配置
resource:
root_url: 15.72.183.90
@ -51,8 +50,15 @@ big_date:
hisense:
gateway:
url: http://15.72.184.3:31230
url: http://15.72.184.7:8080
qdyjj:
ipAndPort: 15.72.178.136:9494
#同步摄像头标签表t_channel_mtm_label需要链接的数据库配置
synchro:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://15.72.183.91:3306/monitor_manage?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
username: root
password: w@CmM1mBVQkPhdrc

View File

@ -5,7 +5,7 @@ spring:
druid:
#MySQL
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://15.2.21.238:3310/share_platform_show?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
url: jdbc:mysql://192.168.124.236:3310/share_platform_show?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=false
username: root
password: Hisense2019
# #Oracle
@ -52,7 +52,7 @@ spring:
#上传的静态资源配置
resource:
root_url: 15.2.21.238
root_url: 192.168.124.236
path: /home/yth/files/
devModelFilePath: /home/yth/files/devModelFile
# 大数据部门相关配置

View File

@ -5,9 +5,9 @@ spring:
druid:
#MySQL
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://15.2.21.238:3310/share_platform?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
url: jdbc:mysql://192.168.124.243:3306/share_platform?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
username: root
password: Hisense2019
password: Liwen073898!
initial-size: 10
max-active: 100
min-idle: 10
@ -37,7 +37,7 @@ spring:
#上传的静态资源配置
resource:
root_url: 15.2.21.238
root_url: 192.168.124.243
path: /home/yth/files/
devModelFilePath: /home/yth/files/devModelFile
# 大数据部门相关配置

View File

@ -63,7 +63,12 @@ spring:
baseline-on-migrate: true
baseline-version: 0
validate-on-migrate: true
jackson:
parser:
# 允许出现特殊字符和转义符
allow_unquoted_control_chars: true
#允许出现单引号
allow_single_quotes: true
fdfs:
so-timeout: 600000

View File

@ -0,0 +1,723 @@
-- 涉及到的表sys_menusys_language
-- 表数据有更新时直接从Navicat选择转储SQL文件替换文件内容
-- 替换前建议备份
-- 注意更新时间
/*
Date: 20/07/2022 16:15:01
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_language
-- ----------------------------
DROP TABLE IF EXISTS `sys_language`;
CREATE TABLE `sys_language` (
`table_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表名',
`table_id` bigint(20) NOT NULL COMMENT '表主键',
`field_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字段名',
`field_value` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字段值',
`language` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '语言',
PRIMARY KEY (`table_name`, `table_id`, `field_name`, `language`) USING BTREE,
INDEX `idx_table_id`(`table_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '国际化' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_language
-- ----------------------------
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000002, 'name', 'Authority Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000002, 'name', '权限管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000002, 'name', '權限管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000003, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000003, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000003, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000004, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000004, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000004, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000005, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000005, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000005, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000006, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000006, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000006, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000007, 'name', 'Role Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000007, 'name', '角色管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000007, 'name', '角色管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000008, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000008, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000008, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000009, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000009, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000009, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000010, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000010, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000010, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000011, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000011, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000011, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000012, 'name', 'Department Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000012, 'name', '部门管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000012, 'name', '部門管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000014, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000014, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000014, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000015, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000015, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000015, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000016, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000016, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000016, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000017, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000017, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000017, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000018, 'name', 'Process Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000018, 'name', '流程管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000018, 'name', '流程管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000019, 'name', 'Model Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000019, 'name', '模型管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000019, 'name', '模型管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000020, 'name', 'Running Process', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000020, 'name', '运行中的流程', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000020, 'name', '運行中的流程', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000021, 'name', 'SMS Service', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000021, 'name', '短信服务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000021, 'name', '短信服務', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000022, 'name', 'Mail Template', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000022, 'name', '邮件模板', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000022, 'name', '郵件模板', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000023, 'name', 'Mail Log', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000023, 'name', '邮件发送记录', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000023, 'name', '郵件發送記錄', 'zh-TW ');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000024, 'name', 'Message Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000024, 'name', '消息管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000024, 'name', '消息管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000025, 'name', 'Menu Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000025, 'name', '菜单管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000025, 'name', '菜單管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000026, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000026, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000026, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000027, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000027, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000027, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000028, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000028, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000028, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000029, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000029, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000029, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000030, 'name', 'Timed Task', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000030, 'name', '定时任务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000030, 'name', '定時任務', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000031, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000031, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000031, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000032, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000032, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000032, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000033, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000033, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000033, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000034, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000034, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000034, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000035, 'name', 'Setting', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000035, 'name', '系统设置', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000035, 'name', '系統設置', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000036, 'name', 'Pause', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000036, 'name', '暂停', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000036, 'name', '暫停', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000037, 'name', 'Resume', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000037, 'name', '恢复', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000037, 'name', '恢復', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000038, 'name', 'Execute', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000038, 'name', '立即执行', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000038, 'name', '立即執行', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000039, 'name', 'Log List', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000039, 'name', '日志列表', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000039, 'name', '日誌列表', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000040, 'name', 'Parameter Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000040, 'name', '参数管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000040, 'name', '參數管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000041, 'name', 'Dict Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000041, 'name', '字典管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000041, 'name', '字典管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000042, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000042, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000042, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000043, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000043, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000043, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000044, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000044, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000044, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000045, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000045, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000045, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000046, 'name', 'Log Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000046, 'name', '日志管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000046, 'name', '日誌管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000047, 'name', 'File Upload', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000047, 'name', '文件上传', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000047, 'name', '文件上傳', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000048, 'name', 'Login Log', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000048, 'name', '登录日志', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000048, 'name', '登錄日誌', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000049, 'name', 'Operation Log', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000049, 'name', '用户行为日志', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000049, 'name', '操作日誌', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000050, 'name', 'Error Log', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000050, 'name', '异常日志', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000050, 'name', '異常日誌', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000051, 'name', 'SQL Monitoring', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000051, 'name', 'SQL监控', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000051, 'name', 'SQL監控', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000052, 'name', 'News Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000052, 'name', '新闻管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000052, 'name', '新聞管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000053, 'name', 'System Monitoring', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000053, 'name', '系统监控', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000053, 'name', '系統監控', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000054, 'name', 'Demo', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000054, 'name', '功能示例', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000054, 'name', '功能示例', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000055, 'name', 'User Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000055, 'name', '用户管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000055, 'name', '用戶管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000056, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000056, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000056, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000057, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000057, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000057, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000058, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000058, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000058, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000059, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000059, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000059, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000060, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000060, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000060, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000061, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000061, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000061, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000300, 'name', 'Station Notice', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000300, 'name', '站内通知', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000300, 'name', '站內通知', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000301, 'name', 'Notice Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000301, 'name', '通知管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000301, 'name', '通知管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000302, 'name', 'My Notice', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000302, 'name', '我的通知', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000302, 'name', '我的通知', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000303, 'name', 'SMS History', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000303, 'name', '短信发送记录', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1067246875800000303, 'name', '短信發送記錄', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150940491508928513, 'name', 'Process Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150940491508928513, 'name', '流程管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150940491508928513, 'name', '流程管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941310262235138, 'name', 'Personal Office', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941310262235138, 'name', '个人办公', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941310262235138, 'name', '個人辦公', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941384811794433, 'name', 'My To-do', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941384811794433, 'name', '我的待办', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941384811794433, 'name', '我的待辦', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941447038488577, 'name', 'Task Already', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941447038488577, 'name', '已办任务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941447038488577, 'name', '已辦任務', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941506626965506, 'name', 'Initiation Process', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941506626965506, 'name', '发起流程', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941506626965506, 'name', '發起流程', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941588046794754, 'name', 'My Application', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941588046794754, 'name', '我的申请', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1150941588046794754, 'name', '我的申請', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1151384841607028738, 'name', 'To Be Signed', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1151384841607028738, 'name', '待签收任务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1151384841607028738, 'name', '待簽收任務', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1156748733921165314, 'name', 'Interface Document', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1156748733921165314, 'name', '接口文档', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1156748733921165314, 'name', '接口文檔', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842114, 'name', 'Correction Request', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842114, 'name', '转正申请', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842114, 'name', '轉正申請', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842115, 'name', 'Administrative Regions', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842115, 'name', '行政区域', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842115, 'name', '行政區域', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842116, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842116, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842116, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842117, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842117, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842117, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842118, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842118, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842118, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842119, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842119, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1158267114314842119, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501825, 'name', 'Master And Child', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501825, 'name', '主子表演示', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501825, 'name', '主子表演示', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501826, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501826, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501826, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501827, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501827, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501827, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501828, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501828, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501828, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501829, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501829, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1270380959719501829, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300278047072649217, 'name', 'Report Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300278047072649217, 'name', '报表管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300278047072649217, 'name', '報表管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300278435729440769, 'name', 'Report Design', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300278435729440769, 'name', '报表设计器', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300278435729440769, 'name', '報表設計器', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300381796852060161, 'name', 'Report List', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300381796852060161, 'name', '报表列表', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1300381796852060161, 'name', '報表列表', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302850622416084993, 'name', 'DevTools', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302850622416084993, 'name', '开发者工具', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302850622416084993, 'name', '開發者工具', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302850783288614913, 'name', 'DataSource', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302850783288614913, 'name', '数据源管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302850783288614913, 'name', '數據源管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302862890696564738, 'name', 'Field Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302862890696564738, 'name', '字段管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302862890696564738, 'name', '字段管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302874751835848705, 'name', 'BaseClass', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302874751835848705, 'name', '基类管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1302874751835848705, 'name', '基類管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1304081184014635010, 'name', 'Template', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1304081184014635010, 'name', '模板管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1304081184014635010, 'name', '模板管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1304802103569809410, 'name', 'Code Generation', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1304802103569809410, 'name', '代码生成工具', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1304802103569809410, 'name', '代碼生成工具', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1305513187675144193, 'name', 'Parameter Config', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1305513187675144193, 'name', '参数配置', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1305513187675144193, 'name', '參數配置', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1305532398162145281, 'name', 'Config Info', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1305532398162145281, 'name', '配置信息', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1305532398162145281, 'name', '配置信息', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1340949288542347266, 'name', 'Page Design', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1340949288542347266, 'name', '页面表单设计', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1340949288542347266, 'name', '頁面表單設計', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622612987906, 'name', 'Job Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622612987906, 'name', '岗位管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622612987906, 'name', '崗位管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622688485377, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622688485377, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622688485377, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622755594242, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622755594242, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622755594242, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622835286018, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622835286018, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622835286018, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622902394881, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622902394881, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341596622902394881, 'name', '刪除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341659662599495681, 'name', 'Online User', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341659662599495681, 'name', '在线用户', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341659662599495681, 'name', '在線用戶', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341676084016852994, 'name', 'Excel Demo', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341676084016852994, 'name', 'Excel导入演示', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1341676084016852994, 'name', 'Excel導入演示', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074487777677313, 'name', 'Pay Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074487777677313, 'name', '支付管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074487777677313, 'name', '支付管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074685589442561, 'name', 'Order Management', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074685589442561, 'name', '订单管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074685589442561, 'name', '訂單管理', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074794440019970, 'name', 'AliPay Log', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074794440019970, 'name', '支付宝回调日志', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1343074794440019970, 'name', '支付寶回調日誌', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479714171727732737, 'name', '能力目录(编目)管理(普通)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479714553140961281, 'name', '能力挂接(普通)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716355429195777, 'name', '能力需求管理(普通)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716765099450370, 'name', '能力目录列表', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716765099450370, 'name', '能力目录列表', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716765099450370, 'name', '能力目录列表', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716767699918849, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716767699918849, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716767699918849, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716769545412609, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716769545412609, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716769545412609, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716771990691841, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716771990691841, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716771990691841, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716772791803905, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716772791803905, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716772791803905, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716915775627265, 'name', '能力目录审核', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716915775627265, 'name', '能力目录审核', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716915775627265, 'name', '能力目录审核', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916153114625, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916153114625, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916153114625, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916518019073, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916518019073, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916518019073, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916891312129, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916891312129, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716916891312129, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716917260410882, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716917260410882, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716917260410882, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716917616926721, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716917616926721, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479716917616926721, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717972316610562, 'name', '服务', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717972316610562, 'name', '应用资源', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717972316610562, 'name', '服务', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717972710875138, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717972710875138, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717972710875138, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717973096751106, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717973096751106, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717973096751106, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717973830754305, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717973830754305, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717973830754305, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717974791249922, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717974791249922, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717974791249922, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717975143571457, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717975143571457, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479717975143571457, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718134397100033, 'name', 'AI算法', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718134397100033, 'name', '组件服务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718134397100033, 'name', 'AI算法', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718135307264002, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718135307264002, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718135307264002, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718136649441281, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718136649441281, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718136649441281, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718137043705858, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718137043705858, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718137043705858, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718137433776130, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718137433776130, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718137433776130, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718139103109121, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718139103109121, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718139103109121, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718537687818241, 'name', '我的需求', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718537687818241, 'name', '我的需求', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718537687818241, 'name', '我的需求', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538073694209, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538073694209, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538073694209, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538446987266, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538446987266, 'name', '新增1', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538446987266, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538824474626, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538824474626, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718538824474626, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718539201961985, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718539201961985, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718539201961985, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718539579449345, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718539579449345, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718539579449345, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718596517126145, 'name', '需求审核', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718596517126145, 'name', '需求审核', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718596517126145, 'name', '需求审核', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718596907196417, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718596907196417, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718596907196417, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718597293072385, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718597293072385, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718597293072385, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718597674754049, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718597674754049, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718597674754049, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718598052241410, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718598052241410, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718598052241410, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718598442311682, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718598442311682, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1479718598442311682, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481106341655306242, 'name', '能力调用情况分析(超管)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481130021655502850, 'name', '审核', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481151514917556226, 'name', '审核', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481184238046834690, 'name', '能力目录(编目)管理(超管)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481184729887698946, 'name', '能力需求管理(超管)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447555369881602, 'name', '审核记录', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447555369881602, 'name', '审核记录(超管)', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447555369881602, 'name', '审核记录', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447555726397442, 'name', 'View', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447555726397442, 'name', '查看', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447555726397442, 'name', '查看', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556078718977, 'name', 'Add', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556078718977, 'name', '新增', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556078718977, 'name', '新增', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556422651905, 'name', 'Edit', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556422651905, 'name', '修改', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556422651905, 'name', '修改', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556770779137, 'name', 'Delete', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556770779137, 'name', '删除', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447556770779137, 'name', '删除', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447557123100673, 'name', 'Export', 'en-US');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447557123100673, 'name', '导出', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1481447557123100673, 'name', '導出', 'zh-TW');
INSERT INTO `sys_language` VALUES ('sys_menu', 1513775256278900737, 'name', '转正表单', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1513797246491648001, 'name', '融合服务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1514156880712777730, 'name', '能力申请表单', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1523928422334148609, 'name', '工作动态', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1526084841978781697, 'name', '算法仓管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1526085998621024257, 'name', '算法管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1526087445634932737, 'name', '告警展示', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1526087790134091777, 'name', '任务监控', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1538710711974182913, 'name', '资源导入', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539127096390934529, 'name', '项目管理', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539128432322826241, 'name', '项目列表', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539136487160696834, 'name', '项目贡献能力明细', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539136757919797249, 'name', '项目使用能力明细', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539155687929511937, 'name', '赋能案例', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539159216605782017, 'name', '赋能案例', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539421305375272962, 'name', '基础设施', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1539422109297520641, 'name', '数据资源', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1541049688748081153, 'name', '能力统计', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1541249771661844482, 'name', '工作台', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1541261628388888578, 'name', '我的待办', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1541261780432408577, 'name', '能力申请', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1541982817671380994, 'name', '能力运行监控', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545238019690090497, 'name', '已办任务', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545239930820513793, 'name', '能力申请', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545252736160636929, 'name', '能力资源上架', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545253936767574018, 'name', '能力需求申请', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545254965168971778, 'name', '能力资源下架', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545290496837820418, 'name', '评论审核', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545292602084827138, 'name', '能力资源上架', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545312045695377410, 'name', '能力需求申请', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545313018614521857, 'name', '能力资源下架', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1545313754106699777, 'name', '评论审核', 'zh-CN');
INSERT INTO `sys_language` VALUES ('sys_menu', 1546381109252136961, 'name', '数据修改日志', 'zh-CN');
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`id` bigint(20) NOT NULL COMMENT 'id',
`pid` bigint(20) NULL DEFAULT NULL COMMENT '上级ID一级菜单为0',
`url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单URL',
`permissions` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权(多个用逗号分隔sys:user:list,sys:user:save)',
`type` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '类型 0菜单 1按钮',
`icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标',
`sort` int(11) NULL DEFAULT NULL COMMENT '排序',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者',
`create_date` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`update_date` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_pid`(`pid`) USING BTREE,
INDEX `idx_sort`(`sort`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单管理' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES (1067246875800000002, 0, NULL, NULL, 0, 'icon-safetycertificate', 0, 1067246875800000001, '2022-01-08 09:18:30', 1067246875800000001, '2022-01-08 09:18:30');
INSERT INTO `sys_menu` VALUES (1067246875800000003, 1067246875800000055, NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:30', 1067246875800000001, '2022-01-08 09:18:30');
INSERT INTO `sys_menu` VALUES (1067246875800000004, 1067246875800000055, NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:30', 1067246875800000001, '2022-01-08 09:18:30');
INSERT INTO `sys_menu` VALUES (1067246875800000005, 1067246875800000055, NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:30', 1067246875800000001, '2022-01-08 09:18:30');
INSERT INTO `sys_menu` VALUES (1067246875800000006, 1067246875800000055, NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 09:18:30', 1067246875800000001, '2022-01-08 09:18:30');
INSERT INTO `sys_menu` VALUES (1067246875800000007, 1067246875800000002, 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000008, 1067246875800000007, NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000009, 1067246875800000007, NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000010, 1067246875800000007, NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000011, 1067246875800000007, NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000012, 1067246875800000002, 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000014, 1067246875800000012, NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000015, 1067246875800000012, NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000016, 1067246875800000012, NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000017, 1067246875800000012, NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000018, 1150940491508928513, 'activiti/process', 'sys:process:all', 0, 'icon-detail', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000019, 1150940491508928513, 'activiti/model', 'sys:model:all', 0, 'icon-appstore-fill', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000020, 1150940491508928513, 'activiti/running', 'sys:running:all', 0, 'icon-play-square', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000021, 1067246875800000024, 'message/sms', 'sys:sms:all', 0, 'icon-message-fill', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000022, 1067246875800000024, 'message/mail_template', 'sys:mail:all', 0, 'icon-mail', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000023, 1067246875800000024, 'message/mail_log', 'sys:mail:log', 0, 'icon-detail-fill', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000024, 0, NULL, NULL, 0, 'icon-message', 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000025, 1067246875800000035, 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000026, 1067246875800000025, NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000027, 1067246875800000025, NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000028, 1067246875800000025, NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000029, 1067246875800000025, NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000030, 1067246875800000035, 'job/schedule', NULL, 0, 'icon-dashboard', 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000031, 1067246875800000030, NULL, 'sys:schedule:page,sys:schedule:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000032, 1067246875800000030, NULL, 'sys:schedule:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000033, 1067246875800000030, NULL, 'sys:schedule:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000034, 1067246875800000030, NULL, 'sys:schedule:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000035, 0, NULL, NULL, 0, 'icon-setting', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000036, 1067246875800000030, NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000037, 1067246875800000030, NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000038, 1067246875800000030, NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000039, 1067246875800000030, NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000040, 1067246875800000035, 'sys/params', '', 0, 'icon-fileprotect', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000041, 1067246875800000035, 'sys/dict-type', NULL, 0, 'icon-golden-fill', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000042, 1067246875800000041, NULL, 'sys:dict:page,sys:dict:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000043, 1067246875800000041, NULL, 'sys:dict:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000044, 1067246875800000041, NULL, 'sys:dict:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000045, 1067246875800000041, NULL, 'sys:dict:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000046, 0, NULL, NULL, 0, 'icon-container', 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000047, 1067246875800000035, 'oss/oss', 'sys:oss:all', 0, 'icon-upload', 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000048, 1067246875800000046, 'sys/log-login', 'sys:log:login', 0, 'icon-filedone', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-07-11 15:38:10');
INSERT INTO `sys_menu` VALUES (1067246875800000049, 1067246875800000046, 'sys/log-operation', 'sys:log:operation', 0, 'icon-solution', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-07-11 15:36:37');
INSERT INTO `sys_menu` VALUES (1067246875800000050, 1067246875800000046, 'sys/log-error', 'sys:log:error', 0, 'icon-file-exception', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000051, 1067246875800000053, '{{ window.SITE_CONFIG[\"apiURL\"] }}/druid/sql.html', NULL, 0, 'icon-database', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000052, 1067246875800000054, 'demo/news', 'demo:news:all', 0, 'icon-file-word', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000053, 0, NULL, NULL, 0, 'icon-desktop', 5, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000054, 0, NULL, NULL, 0, 'icon-windows', 6, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000055, 1067246875800000002, 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000056, 1067246875800000055, NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000057, 1067246875800000040, NULL, 'sys:params:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000058, 1067246875800000040, NULL, 'sys:params:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000059, 1067246875800000040, '', 'sys:params:page,sys:params:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000060, 1067246875800000040, NULL, 'sys:params:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000061, 1067246875800000040, '', 'sys:params:delete', 1, '', 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000300, 0, NULL, NULL, 0, 'icon-bell', 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000301, 1067246875800000300, 'notice/notice', 'sys:notice:all', 0, 'icon-bell', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000302, 1067246875800000300, 'notice/notice-user', 'sys:notice:all', 0, 'icon-notification', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1067246875800000303, 1067246875800000024, 'message/sms-log', 'sys:smslog:all', 0, 'icon-unorderedlist', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1150940491508928513, 0, NULL, NULL, 0, 'icon-reloadtime', 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1150941310262235138, 0, NULL, NULL, 0, 'icon-user', 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1150941384811794433, 1150941310262235138, 'activiti/my-todo-task', 'sys:correction:all,sys:process:all,sys:running:all,sys:task:all', 0, 'icon-dashboard', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1150941447038488577, 1150941310262235138, 'activiti/my-join-task', 'sys:his:all', 0, 'icon-check-square', 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1150941506626965506, 1150940491508928513, 'activiti/process-initiation', 'sys:process:all', 0, 'icon-play-square', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1150941588046794754, 1150941310262235138, 'activiti/my-apply', 'sys:correction:all,sys:process:all,sys:running:all,sys:task:all', 0, 'icon-edit-square', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1151384841607028738, 1150941310262235138, 'activiti/my-todo-task-pool', 'sys:correction:all,sys:process:all,sys:running:all,sys:task:all', 0, 'icon-interation', 5, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1156748733921165314, 1067246875800000053, '{{ window.SITE_CONFIG[\"apiURL\"] }}/doc.html', '', 0, 'icon-file-word', 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1158267114314842114, 1150941310262235138, 'activiti/demo/correction', 'sys:correction:all,sys:process:all,sys:running:all,sys:task:all', 0, 'icon-issuesclose', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1158267114314842115, 1067246875800000035, 'sys/region', NULL, 0, 'icon-location', 4, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1158267114314842116, 1158267114314842115, NULL, 'sys:region:list,sys:region:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1158267114314842117, 1158267114314842115, NULL, 'sys:region:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1158267114314842118, 1158267114314842115, NULL, 'sys:region:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1158267114314842119, 1158267114314842115, NULL, 'sys:region:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1270380959719501825, 1067246875800000054, 'demo/product', NULL, 0, 'icon-tag', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1270380959719501826, 1270380959719501825, NULL, 'demo:product:page,demo:product:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1270380959719501827, 1270380959719501825, NULL, 'demo:product:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1270380959719501828, 1270380959719501825, NULL, 'demo:product:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1270380959719501829, 1270380959719501825, NULL, 'demo:product:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1300278047072649217, 0, '', '', 0, 'icon-filesearch', 3, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1300278435729440769, 1300278047072649217, '{{ window.SITE_CONFIG[\"apiURL\"] }}/ureport/designer', '', 0, 'icon-book', 0, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1300381796852060161, 1300278047072649217, 'ureport/ureport', 'sys:ureport:all', 0, 'icon-up-circle', 1, 1067246875800000001, '2022-01-08 09:18:31', 1067246875800000001, '2022-01-08 09:18:31');
INSERT INTO `sys_menu` VALUES (1302850622416084993, 0, '', '', 0, 'icon-rocket', 3, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1302850783288614913, 1305532398162145281, 'devtools/datasource', '', 0, 'icon-sync', 0, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1302862890696564738, 1305532398162145281, 'devtools/fieldtype', '', 0, 'icon-eye', 1, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1302874751835848705, 1305532398162145281, 'devtools/baseclass', '', 0, 'icon-info-circle', 3, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1304081184014635010, 1305532398162145281, 'devtools/template', '', 0, 'icon-up-circle', 3, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1304802103569809410, 1302850622416084993, 'devtools/generator', '', 0, 'icon-tags', 0, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1305513187675144193, 1305532398162145281, 'devtools/param', '', 0, 'icon-setting', 5, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1305532398162145281, 1302850622416084993, '', '', 0, 'icon-setting', 3, 1067246875800000001, '2022-01-08 14:48:03', 1067246875800000001, '2022-01-08 14:48:03');
INSERT INTO `sys_menu` VALUES (1340949288542347266, 1302850622416084993, 'form-generator/form', '', 0, 'icon-edit-square', 0, 1067246875800000001, '2022-01-08 14:48:04', 1067246875800000001, '2022-01-08 14:48:04');
INSERT INTO `sys_menu` VALUES (1341596622612987906, 1067246875800000002, 'sys/post', NULL, 0, 'icon-pic-left', 1, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1341596622688485377, 1341596622612987906, NULL, 'sys:post:page,sys:post:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1341596622755594242, 1341596622612987906, NULL, 'sys:post:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1341596622835286018, 1341596622612987906, NULL, 'sys:post:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1341596622902394881, 1341596622612987906, NULL, 'sys:post:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1341659662599495681, 1067246875800000053, 'sys/online', 'sys:online:all', 0, 'icon-team', 1, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1341676084016852994, 1067246875800000054, 'demo/excel', 'demo:excel:all', 0, 'icon-table', 1, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1343074487777677313, 0, '', '', 0, 'icon-Dollar', 3, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1343074685589442561, 1343074487777677313, 'pay/order', 'pay:order:all', 0, 'icon-unorderedlist', 0, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1343074794440019970, 1343074487777677313, 'pay/alipaynotifylog', 'pay:alipayNotifyLog:all', 0, 'icon-filedone', 1, 1067246875800000001, '2022-01-08 09:18:35', 1067246875800000001, '2022-01-08 09:18:35');
INSERT INTO `sys_menu` VALUES (1479714171727732737, 0, '', '', 0, 'icon-laptop', 3, 1067246875800000001, '2022-01-08 15:18:45', 1067246875800000001, '2022-01-14 15:34:22');
INSERT INTO `sys_menu` VALUES (1479714553140961281, 0, '', '', 0, 'icon-codelibrary', 5, 1067246875800000001, '2022-01-08 15:20:16', 1067246875800000001, '2022-01-13 18:10:50');
INSERT INTO `sys_menu` VALUES (1479716355429195777, 0, '', '', 0, 'icon-save', 0, 1067246875800000001, '2022-01-08 15:27:26', 1067246875800000001, '2022-01-13 18:09:55');
INSERT INTO `sys_menu` VALUES (1479716765099450370, 1479714171727732737, '/bscatalogue/bscatalogue', NULL, 0, 'icon-up-circle', 0, 1067246875800000001, '2022-01-08 15:29:03', 1067246875800000001, '2022-01-11 19:44:43');
INSERT INTO `sys_menu` VALUES (1479716767699918849, 1479716765099450370, '/bscatalogue', 'bscatalogue:bscatalogue:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 15:29:03', 1067246875800000001, '2022-01-11 19:56:32');
INSERT INTO `sys_menu` VALUES (1479716769545412609, 1479716765099450370, '/bscatalogue', 'bscatalogue:bscatalogue:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 15:29:03', 1067246875800000001, '2022-01-11 19:55:19');
INSERT INTO `sys_menu` VALUES (1479716771990691841, 1479716765099450370, '/bscatalogue', 'bscatalogue:bscatalogue:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 15:29:03', 1067246875800000001, '2022-01-11 19:56:53');
INSERT INTO `sys_menu` VALUES (1479716772791803905, 1479716765099450370, '/bscatalogue', 'bscatalogue:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 15:29:03', 1067246875800000001, '2022-01-08 15:29:03');
INSERT INTO `sys_menu` VALUES (1479716915775627265, 1481184238046834690, '/bscatalogue/bscatalogueExamine', NULL, 0, 'icon-undo', 0, 1067246875800000001, '2022-01-08 15:29:39', 1067246875800000001, '2022-01-12 16:57:32');
INSERT INTO `sys_menu` VALUES (1479716916153114625, 1479716915775627265, '/bscatalogue', 'bscatalogue:page,bscatalogue:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 15:29:39', 1067246875800000001, '2022-01-08 15:29:39');
INSERT INTO `sys_menu` VALUES (1479716916518019073, 1479716915775627265, '/bscatalogue', 'bscatalogue:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 15:29:39', 1067246875800000001, '2022-01-08 15:29:39');
INSERT INTO `sys_menu` VALUES (1479716916891312129, 1479716915775627265, '/bscatalogue', 'bscatalogue:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 15:29:39', 1067246875800000001, '2022-01-08 15:29:39');
INSERT INTO `sys_menu` VALUES (1479716917260410882, 1479716915775627265, '/bscatalogue', 'bscatalogue:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 15:29:39', 1067246875800000001, '2022-01-08 15:29:39');
INSERT INTO `sys_menu` VALUES (1479716917616926721, 1479716915775627265, '/bscatalogue', 'bscatalogue:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 15:29:39', 1067246875800000001, '2022-01-08 15:29:39');
INSERT INTO `sys_menu` VALUES (1479717972316610562, 1479714553140961281, '/ability/bsabilityservice', NULL, 0, 'icon-CodeSandbox', 4, 1067246875800000001, '2022-01-08 15:33:51', 1513433270406643713, '2022-06-20 10:37:06');
INSERT INTO `sys_menu` VALUES (1479717972710875138, 1479717972316610562, '/ability/bsabilityservice', 'ability:bsabilityservice:page,ability:bsabilityservice:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 15:33:51', 1067246875800000001, '2022-01-08 15:33:51');
INSERT INTO `sys_menu` VALUES (1479717973096751106, 1479717972316610562, '/ability/bsabilityservice', 'ability:bsabilityservice:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 15:33:51', 1067246875800000001, '2022-01-08 15:33:51');
INSERT INTO `sys_menu` VALUES (1479717973830754305, 1479717972316610562, '/ability/bsabilityservice', 'ability:bsabilityservice:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 15:33:51', 1067246875800000001, '2022-01-08 15:33:51');
INSERT INTO `sys_menu` VALUES (1479717974791249922, 1479717972316610562, '/ability/bsabilityservice', 'ability:bsabilityservice:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 15:33:51', 1067246875800000001, '2022-01-08 15:33:51');
INSERT INTO `sys_menu` VALUES (1479717975143571457, 1479717972316610562, '/ability/bsabilityservice', 'ability:bsabilityservice:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 15:33:51', 1067246875800000001, '2022-01-08 15:33:51');
INSERT INTO `sys_menu` VALUES (1479718134397100033, 1479714553140961281, '/ability/bsabilityai', NULL, 0, 'icon-Batchfolding', 3, 1067246875800000001, '2022-01-08 15:34:30', 1513433270406643713, '2022-06-20 10:38:05');
INSERT INTO `sys_menu` VALUES (1479718135307264002, 1479718134397100033, '/ability/bsabilityai', 'ability:bsabilityai:page,ability:bsabilityai:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 15:34:30', 1067246875800000001, '2022-01-08 15:34:30');
INSERT INTO `sys_menu` VALUES (1479718136649441281, 1479718134397100033, '/ability/bsabilityai', 'ability:bsabilityai:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 15:34:30', 1067246875800000001, '2022-01-08 15:34:30');
INSERT INTO `sys_menu` VALUES (1479718137043705858, 1479718134397100033, '/ability/bsabilityai', 'ability:bsabilityai:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 15:34:30', 1067246875800000001, '2022-01-08 15:34:30');
INSERT INTO `sys_menu` VALUES (1479718137433776130, 1479718134397100033, '/ability/bsabilityai', 'ability:bsabilityai:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 15:34:30', 1067246875800000001, '2022-01-08 15:34:30');
INSERT INTO `sys_menu` VALUES (1479718139103109121, 1479718134397100033, '/ability/bsabilityai', 'ability:bsabilityai:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 15:34:30', 1067246875800000001, '2022-01-08 15:34:30');
INSERT INTO `sys_menu` VALUES (1479718537687818241, 1479716355429195777, '/demand/bsdemand', NULL, 0, '', 0, 1067246875800000001, '2022-01-08 15:36:06', 1067246875800000001, '2022-01-11 17:15:19');
INSERT INTO `sys_menu` VALUES (1479718538073694209, 1479718537687818241, '/demand/bsdemand', 'bsdemand:page,bsdemand:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 15:36:06', 1067246875800000001, '2022-01-08 15:36:06');
INSERT INTO `sys_menu` VALUES (1479718538446987266, 1479718537687818241, '/demand/bsdemand', 'demand:bsdemand:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 15:36:06', 1067246875800000001, '2022-01-11 17:18:45');
INSERT INTO `sys_menu` VALUES (1479718538824474626, 1479718537687818241, '/demand/bsdemand', 'bsdemand:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 15:36:06', 1067246875800000001, '2022-01-12 13:37:31');
INSERT INTO `sys_menu` VALUES (1479718539201961985, 1479718537687818241, '/demand/bsdemand', 'bsdemand:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 15:36:06', 1067246875800000001, '2022-01-08 15:36:06');
INSERT INTO `sys_menu` VALUES (1479718539579449345, 1479718537687818241, '/demand/bsdemand', 'bsdemand:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 15:36:06', 1067246875800000001, '2022-01-08 15:36:06');
INSERT INTO `sys_menu` VALUES (1479718596517126145, 1481184729887698946, '/demand/deman', NULL, 0, '', 0, 1067246875800000001, '2022-01-08 15:36:20', 1067246875800000001, '2022-01-12 16:57:49');
INSERT INTO `sys_menu` VALUES (1479718596907196417, 1479718596517126145, '/demand/bsdemand', 'bsdemand:page,bsdemand:info', 1, NULL, 0, 1067246875800000001, '2022-01-08 15:36:20', 1067246875800000001, '2022-01-08 15:36:20');
INSERT INTO `sys_menu` VALUES (1479718597293072385, 1479718596517126145, '/demand/bsdemand', 'bsdemand:save', 1, NULL, 1, 1067246875800000001, '2022-01-08 15:36:20', 1067246875800000001, '2022-01-11 17:13:45');
INSERT INTO `sys_menu` VALUES (1479718597674754049, 1479718596517126145, '/demand/bsdemand', 'bsdemand:update', 1, NULL, 2, 1067246875800000001, '2022-01-08 15:36:20', 1067246875800000001, '2022-01-08 15:36:20');
INSERT INTO `sys_menu` VALUES (1479718598052241410, 1479718596517126145, '/demand/bsdemand', 'bsdemand:delete', 1, NULL, 3, 1067246875800000001, '2022-01-08 15:36:20', 1067246875800000001, '2022-01-08 15:36:20');
INSERT INTO `sys_menu` VALUES (1479718598442311682, 1479718596517126145, '/demand/bsdemand', 'bsdemand:export', 1, NULL, 4, 1067246875800000001, '2022-01-08 15:36:20', 1067246875800000001, '2022-01-08 15:36:20');
INSERT INTO `sys_menu` VALUES (1481106341655306242, 0, '/ability/analysis', '', 0, 'icon-project', 6, 1067246875800000001, '2022-01-12 11:30:44', 1067246875800000001, '2022-01-14 15:42:40');
INSERT INTO `sys_menu` VALUES (1481130021655502850, 1479718596517126145, '/demand/bsdemand', 'bsdemand:examine', 1, NULL, 0, 1067246875800000001, '2022-01-12 13:04:50', 1067246875800000001, '2022-01-12 13:58:58');
INSERT INTO `sys_menu` VALUES (1481151514917556226, 1479716915775627265, '', 'bscatalogue:examine', 1, '', 0, 1067246875800000001, '2022-01-12 14:30:14', 1067246875800000001, '2022-01-12 14:30:47');
INSERT INTO `sys_menu` VALUES (1481184238046834690, 0, '/bscatalogue/bscatalogueExamine', '', 0, 'icon-trademark', 4, 1067246875800000001, '2022-01-12 16:40:16', 1067246875800000001, '2022-01-14 15:34:32');
INSERT INTO `sys_menu` VALUES (1481184729887698946, 0, '', '', 0, 'icon-trademark', 1, 1067246875800000001, '2022-01-12 16:42:13', 1067246875800000001, '2022-01-13 18:10:09');
INSERT INTO `sys_menu` VALUES (1481447555369881602, 0, 'comment/bscomment', NULL, 0, 'icon-date', 2, 1067246875800000001, '2022-01-13 10:06:36', 1067246875800000001, '2022-01-13 11:08:51');
INSERT INTO `sys_menu` VALUES (1481447555726397442, 1481447555369881602, 'comment/bscomment', 'comment:bscomment:page,comment:bscomment:info', 1, NULL, 0, 1067246875800000001, '2022-01-13 10:06:36', 1067246875800000001, '2022-01-13 10:06:36');
INSERT INTO `sys_menu` VALUES (1481447556078718977, 1481447555369881602, 'comment/bscomment', 'comment:bscomment:save', 1, NULL, 1, 1067246875800000001, '2022-01-13 10:06:36', 1067246875800000001, '2022-01-13 10:06:36');
INSERT INTO `sys_menu` VALUES (1481447556422651905, 1481447555369881602, 'comment/bscomment', 'comment:bscomment:update', 1, NULL, 2, 1067246875800000001, '2022-01-13 10:06:36', 1067246875800000001, '2022-01-13 10:06:36');
INSERT INTO `sys_menu` VALUES (1481447556770779137, 1481447555369881602, 'comment/bscomment', 'comment:bscomment:delete', 1, NULL, 3, 1067246875800000001, '2022-01-13 10:06:36', 1067246875800000001, '2022-01-13 10:06:36');
INSERT INTO `sys_menu` VALUES (1481447557123100673, 1481447555369881602, 'comment/bscomment', 'comment:bscomment:export', 1, NULL, 4, 1067246875800000001, '2022-01-13 10:06:36', 1067246875800000001, '2022-01-13 10:06:36');
INSERT INTO `sys_menu` VALUES (1513775256278900737, 1150941310262235138, 'activiti/demo/correction-process', '', 0, 'icon-check-circle', 0, 1067246875800000001, '2022-04-12 15:05:20', 1067246875800000001, '2022-04-12 15:08:24');
INSERT INTO `sys_menu` VALUES (1513797246491648001, 0, '/ability/IntegratedServices', '', 0, 'icon-medicinebox-fill', 10, 1067246875800000001, '2022-04-12 16:32:43', 1067246875800000001, '2022-07-14 10:04:35');
INSERT INTO `sys_menu` VALUES (1514156880712777730, 1150941310262235138, 'activiti/demo/correction-process2', '', 0, 'icon-meh', 0, 1513435534798127105, '2022-04-13 16:21:47', 1513435534798127105, '2022-04-13 16:22:11');
INSERT INTO `sys_menu` VALUES (1523928422334148609, 1150941310262235138, 'activiti/my-work-dynamics', 'sys:correction:all,sys:process:all,sys:running:all,sys:task:all', 0, 'icon-carryout', 6, 1067246875800000001, '2022-05-10 15:30:24', 1067246875800000001, '2022-05-10 15:30:45');
INSERT INTO `sys_menu` VALUES (1526084841978781697, 0, '', '', 0, 'icon-edit-square', 4, 1067246875800000001, '2022-05-16 14:19:14', 1067246875800000001, '2022-05-16 14:27:13');
INSERT INTO `sys_menu` VALUES (1526085998621024257, 1526084841978781697, 'algorithm/algorithm-management', '', 0, 'icon-number', 1, 1523593620618321921, '2022-05-16 14:23:50', 1523593620618321921, '2022-05-16 15:10:31');
INSERT INTO `sys_menu` VALUES (1526087445634932737, 1526084841978781697, 'algorithm/alarm-display.vue', '', 0, 'icon-stop', 3, 1067246875800000001, '2022-05-16 14:29:35', 1523593620618321921, '2022-05-16 16:05:25');
INSERT INTO `sys_menu` VALUES (1526087790134091777, 1526084841978781697, 'algorithm/task-monitoring.vue', '', 0, 'icon-earth', 2, 1067246875800000001, '2022-05-16 14:30:57', 1523593620618321921, '2022-05-16 15:10:44');
INSERT INTO `sys_menu` VALUES (1538710711974182913, 1479714553140961281, '/ability/bsabilityimport', '', 0, 'icon-file-fill', 1, 1515973081575276545, '2022-06-20 10:29:56', 1067246875800000001, '2022-06-20 10:38:51');
INSERT INTO `sys_menu` VALUES (1539127096390934529, 0, '', '', 0, 'icon-reconciliation', 0, 1067246875800000001, '2022-06-21 14:04:30', 1067246875800000001, '2022-06-21 14:04:30');
INSERT INTO `sys_menu` VALUES (1539128432322826241, 1539127096390934529, 'project/list', '0', 0, 'icon-database', 0, 1067246875800000001, '2022-06-21 14:09:49', 1067246875800000001, '2022-06-21 14:09:49');
INSERT INTO `sys_menu` VALUES (1539136487160696834, 1539127096390934529, 'project/contribute', '', 0, 'icon-orderedlist', 0, 1067246875800000001, '2022-06-21 14:41:49', 1067246875800000001, '2022-06-21 14:41:49');
INSERT INTO `sys_menu` VALUES (1539136757919797249, 1539127096390934529, 'project/use', '', 0, 'icon-detail', 0, 1067246875800000001, '2022-06-21 14:42:54', 1067246875800000001, '2022-06-21 14:42:54');
INSERT INTO `sys_menu` VALUES (1539155687929511937, 0, '', '', 0, 'icon-earth', 5, 1513437369940344833, '2022-06-21 15:58:07', 1513437369940344833, '2022-06-21 16:25:10');
INSERT INTO `sys_menu` VALUES (1539159216605782017, 1539155687929511937, '/canassigncase/index', '', 0, 'icon-message', 0, 1513437369940344833, '2022-06-21 16:12:08', 1513437369940344833, '2022-06-21 16:12:08');
INSERT INTO `sys_menu` VALUES (1539421305375272962, 1479714553140961281, '/ability/bsinfrastructure', '', 0, 'icon-layout-fill', 0, 1538070668834201602, '2022-06-22 09:33:35', 1538070668834201602, '2022-06-22 09:34:08');
INSERT INTO `sys_menu` VALUES (1539422109297520641, 1479714553140961281, '/ability/bsdataresources', '', 0, 'icon-diff-fill', 0, 1538070668834201602, '2022-06-22 09:36:47', 1538070668834201602, '2022-06-22 09:36:47');
INSERT INTO `sys_menu` VALUES (1541049688748081153, 0, '/abilityStatistics/index', '', 0, 'icon-appstore', 0, 1067246875800000001, '2022-06-26 21:24:12', 1067246875800000001, '2022-06-26 21:24:31');
INSERT INTO `sys_menu` VALUES (1541249771661844482, 0, '/workBench/workBench', '', 0, 'icon-project', 0, 1517033347649310722, '2022-06-27 10:39:15', 1517397484770328578, '2022-06-29 12:54:06');
INSERT INTO `sys_menu` VALUES (1541261628388888578, 0, '', '', 0, 'icon-user', 4, 1513433709613187073, '2022-06-27 11:26:22', 1067246875800000001, '2022-06-30 14:58:42');
INSERT INTO `sys_menu` VALUES (1541261780432408577, 1541261628388888578, '/myAgent/CompetencyApplication', '', 0, 'icon-file-copy', 0, 1513433709613187073, '2022-06-27 11:26:58', 1067246875800000001, '2022-07-08 14:51:32');
INSERT INTO `sys_menu` VALUES (1541982817671380994, 1067246875800000002, 'sys/CapabilityOperationMonitoring/index.vue', '', 0, 'icon-earth', 0, 1067246875800000001, '2022-06-29 11:12:07', 1067246875800000001, '2022-06-29 11:12:56');
INSERT INTO `sys_menu` VALUES (1545238019690090497, 0, '', '', 0, 'icon-minus-circle', 4, 1067246875800000001, '2022-07-08 10:47:08', 1067246875800000001, '2022-07-08 10:47:08');
INSERT INTO `sys_menu` VALUES (1545239930820513793, 1545238019690090497, '/hasToDoTasks/CompetencyApplication', '', 0, 'icon-eye', 0, 1067246875800000001, '2022-07-08 10:54:43', 1067246875800000001, '2022-07-08 11:49:03');
INSERT INTO `sys_menu` VALUES (1545252736160636929, 1545238019690090497, '/hasToDoTasks/AbilityResourceShelf', '', 0, 'icon-earth', 1, 1067246875800000001, '2022-07-08 11:45:36', 1067246875800000001, '2022-07-08 11:57:37');
INSERT INTO `sys_menu` VALUES (1545253936767574018, 1545238019690090497, '/hasToDoTasks/ApplicationForCompetencyRequirements', '', 0, 'icon-filedone', 2, 1067246875800000001, '2022-07-08 11:50:23', 1067246875800000001, '2022-07-08 11:50:23');
INSERT INTO `sys_menu` VALUES (1545254965168971778, 1545238019690090497, '/hasToDoTasks/AbilityResourcesRemoved', '', 0, 'icon-aliwangwang', 3, 1067246875800000001, '2022-07-08 11:54:28', 1067246875800000001, '2022-07-08 11:55:20');
INSERT INTO `sys_menu` VALUES (1545290496837820418, 1545238019690090497, '/hasToDoTasks/CommentModeration', '', 0, 'icon-message', 4, 1067246875800000001, '2022-07-08 14:15:39', 1067246875800000001, '2022-07-08 14:15:39');
INSERT INTO `sys_menu` VALUES (1545292602084827138, 1541261628388888578, '/myAgent/AbilityResourceShelf', '', 0, 'icon-message', 1, 1067246875800000001, '2022-07-08 14:24:01', 1067246875800000001, '2022-07-08 14:24:51');
INSERT INTO `sys_menu` VALUES (1545312045695377410, 1541261628388888578, '/myAgent/ApplicationforCompetencyRequirements', '', 0, 'icon-copyright', 2, 1067246875800000001, '2022-07-08 15:41:17', 1067246875800000001, '2022-07-08 15:41:17');
INSERT INTO `sys_menu` VALUES (1545313018614521857, 1541261628388888578, '/myAgent/AbilityResourcesRemoved', '', 0, 'icon-logout', 3, 1067246875800000001, '2022-07-08 15:45:09', 1067246875800000001, '2022-07-08 15:45:09');
INSERT INTO `sys_menu` VALUES (1545313754106699777, 1541261628388888578, '/myAgent/CommentModeration', '', 0, 'icon-reloadtime', 4, 1067246875800000001, '2022-07-08 15:48:04', 1067246875800000001, '2022-07-08 15:48:04');
INSERT INTO `sys_menu` VALUES (1546381109252136961, 1067246875800000046, 'sys/log-data-modification-log', '', 0, 'icon-reloadtime', 3, 1067246875800000001, '2022-07-11 14:29:21', 1067246875800000001, '2022-07-11 15:38:19');
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -1,8 +1,9 @@
-- 涉及到的表tb_data_category
-- 表数据有更新时直接从Navicat选择转储SQL文件替换文件内容
-- 替换前建议备份
-- 注意更新时间
/*
Date: 19/07/2022 10:55:51
Date: 21/07/2022 09:49:36
*/
SET NAMES utf8mb4;
@ -525,20 +526,20 @@ INSERT INTO `tb_data_category` VALUES (1541958011009875969, '数据范围', '组
INSERT INTO `tb_data_category` VALUES (1541958848058736642, '样式服务地址', '组件服务一', '1539529687759314945', 'true', 'input', 'false', 'false', '', 4, 0, 1524924140178481154, '2022-06-29 09:36:52', 1524924140178481154, '2022-06-29 09:36:52', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542755260526624769, '能力类型', '组件服务一', '1534718048405012481', 'true', 'AbilityType', 'false', 'false', '', 1, 0, 1524924140178481154, '2022-07-01 14:21:32', 1524924140178481154, '2022-07-01 14:21:32', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542755491007823873, '组件类型', '组件服务一', '1534718048405012481', 'true', 'ComponentType', 'false', 'false', '', 2, 0, 1524924140178481154, '2022-07-01 14:22:27', 1524924140178481154, '2022-07-01 14:22:27', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542759999255478274, '来源应用', '组件服务一', '1534718048405012481', 'true', 'AssociatedApplication', 'false', 'false', '', 19, 0, 1524924140178481154, '2022-07-01 14:40:22', 1524924140178481154, '2022-07-01 14:40:22', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542759999255478274, '来源应用', '组件服务一', '1534718048405012481', 'true', 'select', 'false', 'false', '', 19, 0, 1524924140178481154, '2022-07-01 14:40:22', 1524924140178481154, '2022-07-01 14:40:22', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542768397682466818, '服务商', '组件服务一', '1534718048405012481', 'true', 'input', 'false', 'false', '', 13, 0, 1524924140178481154, '2022-07-01 15:13:44', 1524924140178481154, '2022-07-01 15:13:44', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542768571779637250, '服务商联系人', '组件服务一', '1534718048405012481', 'true', 'input', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 15:14:25', 1524924140178481154, '2022-07-01 15:14:25', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542768616788713473, '服务商联系电话', '组件服务一', '1534718048405012481', 'true', 'input', 'false', 'false', '', 15, 0, 1524924140178481154, '2022-07-01 15:14:36', 1524924140178481154, '2022-07-01 15:14:36', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542769943472234498, '能力类型', '组件服务一', '1538797032767987714', 'true', 'AbilityType', 'false', 'false', '', 1, 0, 1524924140178481154, '2022-07-01 15:19:52', 1524924140178481154, '2022-07-01 15:19:52', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542770087471079426, '组件类型', '组件服务一', '1538797032767987714', 'true', 'ComponentType', 'false', 'false', '', 2, 0, 1524924140178481154, '2022-07-01 15:20:27', 1524924140178481154, '2022-07-01 15:20:27', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542773599965798402, '来源应用', '组件服务一', '1538797032767987714', 'true', 'AssociatedApplication', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 15:34:24', 1524924140178481154, '2022-07-01 15:34:24', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542773599965798402, '来源应用', '组件服务一', '1538797032767987714', 'true', 'select', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 15:34:24', 1524924140178481154, '2022-07-01 15:34:24', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542775012120846337, '能力类型', '基础设施', '1538705458625228801', 'true', 'AbilityType', 'false', 'false', '', 1, 0, 1524924140178481154, '2022-07-01 15:40:01', 1524924140178481154, '2022-07-01 15:40:01', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542775091430940674, '组件类型', '基础设施', '1538705458625228801', 'true', 'ComponentType', 'false', 'false', '', 2, 0, 1524924140178481154, '2022-07-01 15:40:20', 1524924140178481154, '2022-07-01 15:40:20', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542775245986848770, '来源应用', '基础设施', '1538705458625228801', 'true', 'AssociatedApplication', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 15:40:57', 1524924140178481154, '2022-07-01 15:40:57', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542775245986848770, '来源应用', '基础设施', '1538705458625228801', 'true', 'select', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 15:40:57', 1524924140178481154, '2022-07-01 15:40:57', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542777726523400194, '试用地址', '组件服务一', '1539529687759314945', 'true', 'input', 'false', 'false', '', 8, 1, 1524924140178481154, '2022-07-01 15:50:48', 1524924140178481154, '2022-07-16 12:22:57', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542778864555515905, '能力类型', '基础设施', '1539536463208636417', 'true', 'AbilityType', 'false', 'false', '', 1, 0, 1524924140178481154, '2022-07-01 15:55:19', 1524924140178481154, '2022-07-01 15:55:19', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542779816926765057, '组件类型', '组件服务一', '1539536463208636417', 'true', 'ComponentType', 'false', 'false', '', 2, 0, 1524924140178481154, '2022-07-01 15:59:06', 1524924140178481154, '2022-07-01 15:59:06', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542780090865147905, '来源应用', '组件服务一', '1539536463208636417', 'true', 'AssociatedApplication', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 16:00:12', 1524924140178481154, '2022-07-01 16:00:12', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542780090865147905, '来源应用', '组件服务一', '1539536463208636417', 'true', 'select', 'false', 'false', '', 14, 0, 1524924140178481154, '2022-07-01 16:00:12', 1524924140178481154, '2022-07-01 16:00:12', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1542785872524468225, '能力类型', '应用资源一', '1534472573403713538', 'true', 'AbilityType', 'false', 'false', '', 1, 0, 1524924140178481154, '2022-07-01 16:23:10', 1524924140178481154, '2022-07-01 16:23:10', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1543894205352337409, '关联组件信息', '应用资源一', '1534472573403713538', 'true', 'AssociatedComponents', 'false', 'false', '', 13, 0, 1524924140178481154, '2022-07-04 17:47:17', 1524924140178481154, '2022-07-04 17:47:17', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `tb_data_category` VALUES (1544995280897658882, '1', '组件服务一', '1534472573403713538', 'true', 'input', 'false', 'false', '', 14, 1, 1513433709613187073, '2022-07-07 18:42:34', 1513433709613187073, '2022-07-07 18:42:51', NULL, NULL, NULL, NULL, NULL);
@ -577,4 +578,3 @@ INSERT INTO `tb_data_category` VALUES (1548962613546627073, '部门联系人电
INSERT INTO `tb_data_category` VALUES (1548980404643405825, '使用方式', '组件服务', '1531208527270404097', 'true', 'input', 'true', 'true', '1513714027213660162', 8, 1, 1524924140178481154, '2022-07-18 18:38:02', 1524924140178481154, '2022-07-18 18:43:36', NULL, NULL, NULL, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -0,0 +1,2 @@
-- 用于摄像头加申购车和申请使用所属部门字段根据各个地方自己修改dept_id字段即可
REPLACE INTO `tb_data_resource`(`id`, `type`, `name`, `description`, `link`, `api_method_type`, `api_url`, `group_id`, `dept_id`, `dept_contacts`, `dept_phone`, `share_type`, `share_mode`, `share_condition`, `district_id`, `visits`, `del_flag`, `creator`, `create_date`, `updater`, `update_date`, `note1`, `note2`, `note3`, `note4`, `note5`, `enclosure`, `undercarriage_reason`, `undercarriage_user_name`, `info_list`, `total`, `visitor`, `apply_number`, `undercarriage_enclosure`) VALUES (8888888880000000001, '基础设施', '申请摄像头', NULL, '', NULL, NULL, NULL, 1067246875800000066, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 9, NULL, NULL, NULL, '2022-07-04 18:23:47', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '[]', 13, 5, NULL, NULL);

View File

@ -0,0 +1,5 @@
-- 公共定时任务
SET FOREIGN_KEY_CHECKS = 0;
REPLACE INTO `schedule_job` (`id`, `bean_name`, `params`, `cron_expression`, `status`, `remark`, `creator`, `create_date`, `updater`, `update_date`) VALUES (1551845641938800641, 'clearLogTask', '7', '5 5 0 * * ? *', 1, '定期清理操作日志', 1067246875800000001, NOW(), 1067246875800000001, NOW());
REPLACE INTO `schedule_job` (`id`, `bean_name`, `params`, `cron_expression`, `status`, `remark`, `creator`, `create_date`, `updater`, `update_date`) VALUES (1551856342346502145, 'heartRateTask', '', '0 * * * * ? *', 1, 'websocket客户端定时心跳', 1067246875800000001, NOW(), 1067246875800000001, NOW());
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -0,0 +1 @@
alter table `tb_data_resource` ADD COLUMN `undercarriage_enclosure` longtext NULL comment '下架附件';

View File

@ -0,0 +1,25 @@
DROP TABLE IF EXISTS `t_region`;
CREATE TABLE `t_region` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`region_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`region_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`channel_count` int(0) NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_region
-- ----------------------------
INSERT INTO `t_region` VALUES (1, '市南区', '370202', 4367);
INSERT INTO `t_region` VALUES (2, '市北区', '370203', 7193);
INSERT INTO `t_region` VALUES (3, '西海岸新区', '370211', 41402);
INSERT INTO `t_region` VALUES (4, '崂山区', '370212', 19573);
INSERT INTO `t_region` VALUES (5, '李沧区', '370213', 5702);
INSERT INTO `t_region` VALUES (6, '城阳区', '370214', 14565);
INSERT INTO `t_region` VALUES (7, '即墨区', '370215', 13794);
INSERT INTO `t_region` VALUES (8, '高新区', '370271', 0);
INSERT INTO `t_region` VALUES (9, '胶州市', '370281', 14874);
INSERT INTO `t_region` VALUES (10, '平度市', '370283', 16383);
INSERT INTO `t_region` VALUES (11, '莱西市', '370285', 10046);
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -0,0 +1,10 @@
ALTER TABLE `tb_fuse`
MODIFY COLUMN `description` varchar(1000) DEFAULT NULL COMMENT '融合服务描述',
DROP COLUMN `dept_user`,
DROP COLUMN `mobile`,
DROP COLUMN `provider`,
DROP COLUMN `provider_user`,
DROP COLUMN `provider_mobile`;
ALTER TABLE `tb_fuse_resource`
ADD COLUMN `type` varchar(128) NULL COMMENT '资源类型';

View File

@ -0,0 +1,35 @@
DROP TABLE IF EXISTS `t_camera_channel_cache`;
CREATE TABLE `t_camera_channel_cache` (
`idt_camera_channel` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`channel_code` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`channel_id` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`channel_name` varchar(999) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '摄像头id',
`gps_x` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '经度',
`gps_y` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '纬度',
`status` int(0) NULL DEFAULT NULL COMMENT '1在线0离线',
`parent_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织id',
`region_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`region_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`node_name` varchar(999) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`check_status` int(0) NULL DEFAULT 0,
PRIMARY KEY (`idt_camera_channel`, `channel_code`) USING BTREE,
INDEX `gps_x`(`gps_x`) USING BTREE,
INDEX `gps_y`(`gps_y`) USING BTREE,
INDEX `channel_code`(`channel_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 134450 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '通道表' ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `t_camera_organization_cache`;
CREATE TABLE `t_camera_organization_cache` (
`id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`parent_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sort` int(0) NULL DEFAULT NULL,
`subCount` int(0) NULL DEFAULT NULL,
`count` int(0) NULL DEFAULT 0 COMMENT '这个是统计该区域下的摄像头数据同步的次数,没太大作用',
`is_parent` int(0) NULL DEFAULT NULL COMMENT '是否有子节点',
`path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`is_root` int(0) NULL DEFAULT 0 COMMENT '是否是根节点',
`orgaid` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '作为主键',
`channelCount` int(0) NULL DEFAULT 0,
PRIMARY KEY (`orgaid`, `id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8868 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

View File

@ -4,4 +4,5 @@ tsingtao-xha.cloudcam=http://10.10.30.9:8001/hx-weather-warning/camera/getCamera
tsingtao-xha.localcam=http://10.134.135.9:8001/hx-weather-warning/camera/getCameraListByName?name=%s&pageNo=%d&pageSize=%d
tsingtao-xha.resourcecount=http://10.10.30.24:30090/api/share-portal/platform/catalogue/query?catalogueId=&departmentId=&serviceName=&type=&orderField=requestNum&orderType=desc&pageNum=1&pageSize=10&serviceType=data&rq=1655106309671.43
tsingtao-xha.resourceapplyinfo=http://10.10.30.24:30058/share-portal/platform/index/abilityMarket/count
tsingtao-xha.sjzy=http://10.10.30.24:30090/api/share-portal/platform/catalogue/query?catalogueId=&departmentId=&serviceName=%s&type=&orderField=%s&orderType=%s&pageNum=%s&pageSize=%s&serviceType=data&rq=1655106309671.43
tsingtao-xha.sjzy=http://10.10.30.24:30090/api/share-portal/platform/catalogue/query?catalogueId=&departmentId=&serviceName=%s&type=&orderField=%s&orderType=%s&pageNum=%s&pageSize=%s&serviceType=data&rq=1655106309671.43
tsingtao-xha.camCount=http://10.10.30.57:9537/data_service/getCamera/getCameraCount

View File

@ -56,6 +56,9 @@
<if test="processDefinitionKey != null">
and aht.PROC_DEF_ID_ LIKE #{processDefinitionKey}
</if>
<if test="ended != null">
and ahp.END_TIME_ IS NOT NULL
</if>
ORDER BY
ahp.START_TIME_ DESC
</select>

View File

@ -38,6 +38,9 @@
<if test="deptId != null and deptId != ''">
and deptId = #{deptId}
</if>
<if test="type != null and type != ''">
and type = #{type}
</if>
<if test="deptUser != null and deptUser != ''">
and dept_user like concat('%', #{deptUser}, '%')
</if>
@ -69,17 +72,4 @@
ORDER BY ${orderField} ${orderType}
</select>
<select id="selectGroupByDeptId" resultType="java.util.Map">
SELECT ( CASE sd.type WHEN 1 THEN '省级' WHEN 2 THEN '市级' WHEN 3 THEN '区级' WHEN 4 THEN '企业' ELSE '其他' END ) AS "type",
sd.NAME AS "deptName",
count(tdr.id) AS "deptCount",
sd.id AS "deptId",
sr.name AS "districtName",
sr.id AS "districtId"
FROM sys_dept sd
inner join tb_fuse tdr on sd.id=tdr.dept_id
left join sys_region sr on sr.id=sd.district
group by sd.id
</select>
</mapper>

View File

@ -117,7 +117,7 @@
</select>
<select id="selectChannelCounts" parameterType="java.lang.String" resultType="integer">
SELECT COUNT(a.idt_camera_channel) FROM t_camera_channel a inner join t_camera_organization b on a.parent_id = b.id
SELECT COUNT(a.idt_camera_channel) FROM t_camera_channel_cache a inner join t_camera_organization_cache b on a.parent_id = b.id
WHERE b.path like concat(#{path},'%')
</select>
@ -145,7 +145,9 @@
AND tcc.node_name LIKE CONCAT(#{path},'%')
</if>
AND tcc.check_status IN (${map.checkStatus})
<if test = "map.checkStatus != null and map.checkStatus != ''">
AND tcc.check_status IN (${map.checkStatus})
</if>
AND tcc.gps_x != ''
AND tcc.gps_y != ''
AND tcc.gps_x IS NOT NULL
@ -193,9 +195,13 @@
AND tcc.node_name LIKE CONCAT(#{path},'%')
</if>
AND tcc.check_status IN (${map.checkStatus})
<if test = "map.checkStatus != null and map.checkStatus != ''">
AND tcc.check_status IN (${map.checkStatus})
</if>
AND tcc.gps_x != ''
AND tcc.gps_y != ''
AND tcc.gps_x IS NOT NULL
AND tcc.gps_y IS NOT NULL
<if test = "map.cameraName != null and map.cameraName != ''">
AND tcc.channel_name LIKE CONCAT('%',#{map.cameraName},'%')
</if>
@ -215,7 +221,11 @@
<select id="selectChannelNumByRegion" resultType="java.util.Map">
SELECT ROUND(COUNT(idt_camera_channel) /10000,1) AS channelCount,region_code,region_name FROM t_camera_channel WHERE region_name is not null GROUP BY region_code,region_name
SELECT ROUND(COUNT(a.idt_camera_channel) /10000,1) AS channelCount,b.region_code,b.region_name
FROM t_camera_channel a INNER JOIN t_region b
ON a.region_code = b.region_code
WHERE a.region_name is not null or a.region_name != ''
GROUP BY b.region_code,b.region_name
</select>
<insert id="batchSaveMtmLabel" parameterType="java.util.List">
@ -227,4 +237,53 @@
(#{item.channel_code},#{item.label_code})
</foreach>
</insert>
<select id="selectCameraChannelById" parameterType="java.lang.String" resultType="java.util.Map">
SELECT channel_id AS channelId,channel_name AS channelName FROM t_camera_channel
WHERE channel_id = #{channelId} LIMIT 1
</select>
<select id="selectCameraChannelByPid" parameterType="java.lang.String" resultType="java.util.Map">
SELECT channel_code AS channelCode,channel_id AS channelId,channel_name AS channelName,gps_x AS gpsX,
gps_y AS gpsY,status,parent_id AS parentId,region_code AS regionCode,region_name AS regionName,
node_name AS nodeName
FROM t_camera_channel
WHERE parent_id = #{parentId}
</select>
<insert id="batchSaveCameraChannel" parameterType="java.util.List">
INSERT INTO t_camera_channel_cache
(
channel_code,channel_id,channel_name,gps_x,gps_y,status,
parent_id,region_code,region_name,node_name
)
VALUES
<foreach collection="list" item="item" separator="," >
(
#{item.channelCode},#{item.channelId},#{item.channelName},#{item.gpsX},#{item.gpsY},#{item.status},
#{item.parentId},#{item.regionCode},#{item.regionName},#{item.nodeName}
)
</foreach>
</insert>
<insert id="insertChannelCacheToCameraChannel">
INSERT INTO t_camera_channel
(
channel_code,channel_id,channel_name,gps_x,gps_y,status,
parent_id,region_code,region_name,node_name,check_status
)
SELECT channel_code,channel_id,channel_name,gps_x,gps_y,status,
parent_id,region_code,region_name,node_name,check_status
FROM t_camera_channel_cache
</insert>
<insert id="batchSaveLabel" parameterType="java.util.List">
INSERT INTO t_label (
label_code,label_name,capture_patternn,city
)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.label_code},#{item.label_name},#{item.capture_patternn},#{item.city})
</foreach>
</insert>
</mapper>

View File

@ -3,7 +3,7 @@
<mapper namespace="io.renren.modules.monitor.mapper.CameraOrgenizationMapper">
<insert id="batchSaveOrgenization" parameterType="java.util.List">
INSERT INTO t_camera_organization (
INSERT INTO t_camera_organization_cache (
id,name,parent_id,sort,subCount,path,is_parent,is_root
) VALUES
<foreach collection="list" item="item" separator="," >
@ -15,7 +15,7 @@
<insert id="batchSaveCameraChannel" parameterType="java.util.List">
INSERT INTO t_camera_channel
INSERT INTO t_camera_channel_cache
(
channel_code,channel_id,channel_name,gps_x,gps_y,status,
parent_id,region_code,region_name,node_name
@ -29,4 +29,40 @@
)
</foreach>
</insert>
<update id="updateRegionChannelCount">
UPDATE t_region a
INNER JOIN
(
SELECT COUNT(idt_camera_channel) AS channel_count,region_code FROM t_camera_channel GROUP BY region_code
) b
ON a.region_code = b.region_code
SET a.channel_count = b.channel_count
</update>
<!-- <select id="listOrgenization2" resultType="java.util.Map">-->
<!-- SELECT id FROM t_camera_organization-->
<!-- WHERE orgaid &gt;-->
<!-- (SELECT a.orgaid FROM t_camera_organization a INNER JOIN-->
<!-- (-->
<!-- SELECT parent_id FROM t_camera_channel ORDER BY idt_camera_channel desc LIMIT 1-->
<!-- ) b-->
<!-- ON a.id = b.parent_id-->
<!-- ) ORDER BY orgaid ASC-->
<!-- </select>-->
<select id="selectAll" resultType="java.util.Map">
select * from t_camera_organization_cache
</select>
<update id="updateOrganizationPath" parameterType="java.lang.String">
UPDATE t_camera_organization_cache SET path = TRIM( TRAILING '->' FROM #{path}) where id = #{id}
</update>
<insert id="insertOrganizationCacheToCameraOrganization">
INSERT INTO t_camera_organization
(
id,name,parent_id,sort,subCount,is_parent,path,is_root,channelCount,count
)
SELECT id,name,parent_id,sort,subCount,is_parent,path,is_root,channelCount,count FROM t_camera_organization_cache
</insert>
</mapper>

View File

@ -33,6 +33,7 @@
<result property="enclosure" column="enclosure"/>
<result property="undercarriageReason" column="undercarriage_reason"/>
<result property="undercarriageUserName" column="undercarriage_user_name"/>
<result property="undercarriageEnclosure" column="undercarriage_enclosure"/>
<result property="infoList" column="info_list"
typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
<result property="applyNumber" column="apply_number"/>
@ -68,6 +69,7 @@
<result property="enclosure" column="enclosure"/>
<result property="undercarriageReason" column="undercarriage_reason"/>
<result property="undercarriageUserName" column="undercarriage_user_name"/>
<result property="undercarriageEnclosure" column="undercarriage_enclosure"/>
<!-- 自定义字段 -->
<result property="deptName" column="deptName"/>
<result property="isCollect" column="isCollect"/>
@ -104,12 +106,16 @@
IFNULL(sd.name, '暂无部门单位信息') AS "deptName",
IFNULL(trc2.isCollect, 'false') AS "isCollect",
(IFNULL(tdr.visits / 100, 0) + IFNULL(trs.score, 0) + IFNULL(taa.applyCount, 0)+ IFNULL(trc.collectCount, 0)) AS
total
total,
IF ( IFNULL( trcar.car, 0 ) &gt; 0, TRUE, FALSE ) AS "isInShoppingCart"
FROM
tb_data_resource tdr
LEFT JOIN tb_data_attr tda ON tdr.id = tda.data_resource_id
LEFT JOIN ( SELECT resource_id, AVG(score) AS "score" FROM tb_resource_score WHERE 1 = 1 AND del_flag = 0 GROUP
BY resource_id ) trs ON tdr.id = trs.resource_id
LEFT JOIN ( SELECT resource_id, COUNT( id ) AS "car" FROM tb_resource_car WHERE 1 = 1 AND del_flag = 0 AND
user_id = #{dto.creator} GROUP BY resource_id ) trcar
ON tdr.id = trcar.resource_id
LEFT JOIN ( SELECT resource_id, COUNT(id) AS "applyCount" FROM t_ability_application WHERE 1 = 1 AND del_flag =
0 GROUP BY resource_id ) taa ON tdr.id = taa.resource_id
LEFT JOIN ( SELECT resource_id, COUNT(id) AS "collectCount" FROM tb_resource_collection WHERE 1 = 1 AND del_flag
@ -149,7 +155,7 @@
</if>
<!-- 按申请量和收藏量查询时排除知识库数据-->
<if test="orderField != null and orderField != '' and (orderField = 'applyCount' or orderField = 'collectCount')">
<if test="orderField != null and orderField != '' and (orderField == 'applyCount' or orderField == 'collectCount')">
AND tdr.type != '知识库'
</if>
@ -289,7 +295,9 @@
IFNULL( trc.collectCount, 0 ) AS "collectCount",
sd.NAME AS "deptName",
IFNULL( trc2.isCollect, 'false' ) AS "isCollect",
IF( IFNULL(taa2.approve_status, 0) &lt; 1, '未申请', '已申请' ) AS "applyState"
IF( IFNULL(taa2.approve_status, 0) &lt; 1, '未申请', '已申请' ) AS "applyState",
IF ( IFNULL( trcar.car, 0 ) &gt; 0, TRUE, FALSE ) AS "isInShoppingCart",
IF( IFNULL(taa3.approve_status, 0) &lt; 1, '未通过', '通过' ) AS "approveStatus"
FROM
tb_data_resource tdr
LEFT JOIN ( SELECT resource_id, AVG( score ) AS "score" FROM tb_resource_score WHERE 1 = 1 AND del_flag = 0
@ -298,6 +306,9 @@
= 0 GROUP BY resource_id ) taa ON tdr.id = taa.resource_id
LEFT JOIN ( SELECT resource_id, COUNT( id ) AS "collectCount" FROM tb_resource_collection WHERE 1 = 1 AND
del_flag = 0 GROUP BY resource_id ) trc ON tdr.id = trc.resource_id
LEFT JOIN ( SELECT resource_id, COUNT( id ) AS "car" FROM tb_resource_car WHERE 1 = 1 AND del_flag = 0 AND
user_id = #{userId} GROUP BY resource_id ) trcar
ON tdr.id = trcar.resource_id
LEFT JOIN (
SELECT
resource_id,
@ -314,6 +325,9 @@
) trc2 ON tdr.id = trc2.resource_id
LEFT JOIN ( SELECT resource_id, COUNT( approve_status ) approve_status FROM t_ability_application WHERE 1 = 1
AND del_flag = 0 AND user_id = #{userId} GROUP BY resource_id ) taa2 ON tdr.id = taa2.resource_id
LEFT JOIN ( SELECT resource_id, COUNT( approve_status ) approve_status FROM t_ability_application WHERE 1 = 1
AND del_flag = 0 AND user_id = #{userId} AND approve_status = '通过' GROUP BY resource_id ) taa3 ON tdr.id =
taa3.resource_id
LEFT JOIN sys_dept sd ON tdr.dept_id = sd.id
WHERE
1 = 1
@ -358,11 +372,15 @@
IFNULL(trc.collectCount, 0) AS "collectCount",
sd.name AS "deptName",
IFNULL(trc2.isCollect, 'false') AS "isCollect",
IFNULL(taa2.approve_status, '未申请') AS "applyState"
IFNULL(taa2.approve_status, '未申请') AS "applyState",
IF ( IFNULL( trcar.car, 0 ) &gt; 0, TRUE, FALSE ) AS "isInShoppingCart"
FROM
tb_data_resource tdr
LEFT JOIN ( SELECT resource_id, AVG(score) AS "score" FROM tb_resource_score WHERE 1 = 1 AND del_flag = 0 GROUP
BY resource_id ) trs ON tdr.id = trs.resource_id
LEFT JOIN ( SELECT resource_id, COUNT( id ) AS "car" FROM tb_resource_car WHERE 1 = 1 AND del_flag = 0 AND
user_id = #{dto.creator} GROUP BY resource_id ) trcar
ON tdr.id = trcar.resource_id
LEFT JOIN ( SELECT resource_id, COUNT(id) AS "applyCount" FROM t_ability_application WHERE 1 = 1 AND del_flag =
0 GROUP BY resource_id ) taa ON tdr.id = taa.resource_id
LEFT JOIN ( SELECT resource_id, COUNT(id) AS "collectCount" FROM tb_resource_collection WHERE 1 = 1 AND del_flag
@ -464,7 +482,6 @@
AND tdr.del_flag = 0
<if test="dto.name != null and dto.name != ''">
AND MATCH (tdr.name) AGAINST ( #{dto.name} IN BOOLEAN MODE)
<!--AND tdr.name LIKE CONCAT('%',#{dto.name},'%') -->
</if>
<if test="dto.type != null and dto.type != ''">
AND tdr.type = #{dto.type}
@ -534,11 +551,9 @@
<select id="countAllDept" resultType="java.lang.Long">
SELECT
COUNT( DISTINCT dept_id )
COUNT(id)
FROM
tb_data_resource
WHERE
del_flag = 0
sys_dept
</select>
<select id="selectGroupByDeptId" resultType="java.util.Map">
@ -789,6 +804,7 @@
WHERE 1 = 1
AND del_flag = 0
AND dept_id = #{deptId}
LIMIT 30
</select>
<select id="selectDeptCountList" resultType="java.util.Map">
@ -855,6 +871,7 @@
AND su.id = taa.user_id
AND taa.resource_id = tdr.id
AND su.dept_id = #{deptId}
LIMIT 30
</select>
<select id="selectApplyDeptCountList" resultType="java.util.Map">
@ -1302,9 +1319,9 @@
a.del_flag = 0
AND
d.del_flag = 0
group by
GROUP BY
c.name,c.id
order by
ORDER BY
c.name,c.id
LIMIT ${pageNum}, ${pageSize}
</select>
@ -1371,7 +1388,7 @@
#{deptId}
</foreach>
</if>
group by tdr.id order by count desc
GROUP BY tdr.id ORDER BY count desc
</select>
<select id="selectUsersApplyAndCount" resultMap="resourceDTO">
@ -1380,13 +1397,13 @@
WHERE
1 = 1
AND tdr.del_flag = 0
<if test="null != userIds">
<if test="null != userIds and userIds.size > 0">
and taa.user_id in
<foreach item="userId" collection="userIds" open="(" separator="," close=")">
#{userId}
</foreach>
</if>
group by tdr.id order by applyCount desc
GROUP BY tdr.id ORDER BY applyCount desc
</select>
<select id="trafficDeptResource" resultType="java.util.Map">
@ -1436,7 +1453,8 @@
</select>
<select id="selectDevelopDocResource" resultType="java.util.Map">
SELECT tdr.id, tdr.name as title, tdr.type, tda.attr_value as doc FROM tb_data_resource tdr right join tb_data_attr tda on tdr.id=tda.data_resource_id
SELECT tdr.id, tdr.name as title, tdr.type, tda.attr_value as doc FROM tb_data_resource tdr right join
tb_data_attr tda on tdr.id=tda.data_resource_id
where tdr.del_flag != 1 and tda.attr_type='技术文档'
</select>