/**
* Copyright 2016 benjobs
* <p>
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.opencron.server.service;
import org.opencron.common.utils.CommonUtils;
import org.opencron.server.dao.QueryDao;
import org.opencron.server.domain.Agent;
import org.opencron.server.domain.Group;
import org.opencron.server.tag.PageBean;
import org.opencron.server.vo.AgentGroupVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.opencron.common.utils.CommonUtils.notEmpty;
@Service
@Transactional
public class GroupService {
@Autowired
private QueryDao queryDao;
public PageBean<Group> getGroupPage(PageBean pageBean) {
return queryDao.getPageBySql(pageBean,Group.class,"SELECT G.*,U.userName FROM T_GROUP AS G INNER JOIN T_USER AS U ON G.userId=u.userId");
}
public List<Group> getAll() {
return queryDao.getAll(Group.class);
}
public List<Group> getGroupforAgent() {
String sql = "SELECT T.groupId,G.groupName,A.agentId,A.`name` AS agentName,A.ip AS agentIp " +
" FROM T_AGENT A " +
" LEFT JOIN T_AGENT_GROUP AS T " +
" ON A.agentId = T.agentId" +
" LEFT JOIN T_GROUP AS G" +
" ON T.groupId = G.groupId" +
" WHERE A.deleted=0 "+
" ORDER BY G.createTime ";
Group noGroup = new Group();
noGroup.setGroupName("未分组");
noGroup.setGroupId(0L);
Map<Long,Group> groupMap = new HashMap<Long, Group>(0);
List<AgentGroupVo> agentGroupVos = queryDao.sqlQuery(AgentGroupVo.class,sql);
if (CommonUtils.notEmpty(agentGroupVos)) {
for(AgentGroupVo agentGroup:agentGroupVos){
Agent agent = new Agent();
agent.setAgentId(agentGroup.getAgentId());
agent.setName(agentGroup.getAgentName());
agent.setIp(agentGroup.getAgentIp());
if (agentGroup.getGroupId()==null) {
noGroup.getAgents().add(agent);
}else {
if (groupMap.get(agentGroup.getGroupId()) == null) {
Group group = new Group();
group.setGroupId(agentGroup.getGroupId());
group.setGroupName(agentGroup.getGroupName());
group.getAgents().add(agent);
groupMap.put(agentGroup.getGroupId(),group);
}else {
groupMap.get(agentGroup.getGroupId()).getAgents().add(agent);
}
}
}
}
List<Group> groups = new ArrayList<Group>(0);
groups.add(noGroup);
for(Map.Entry<Long,Group> entry:groupMap.entrySet()){
groups.add(entry.getValue());
}
return groups;
}
public void merge(Group group) {
queryDao.merge(group);
}
public boolean existsName(Long id, String name) {
String sql = "SELECT COUNT(1) FROM T_GROUP WHERE groupName=? ";
if (notEmpty(id)) {
sql += " AND groupId != " + id;
}
return (queryDao.getCountBySql(sql, name)) > 0L;
}
}