diff --git a/cms/src/main/java/com/pudonghot/yo/cms/controller/AgentStatusController.java b/cms/src/main/java/com/pudonghot/yo/cms/controller/AgentStatusController.java index 05f6c6e6..e761ef04 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/controller/AgentStatusController.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/controller/AgentStatusController.java @@ -1,12 +1,22 @@ package com.pudonghot.yo.cms.controller; +import lombok.val; import com.wacai.tigon.form.FormList; +import com.wacai.tigon.model.ViewModel; +import me.chyxion.tigon.mybatis.Search; +import com.wacai.tigon.model.ListResult; +import com.pudonghot.yo.model.domain.Queue; import com.wacai.tigon.web.annotation.ListApi; +import com.wacai.tigon.web.annotation.OrderCol; +import com.wacai.tigon.web.controller.ArgQuery; import com.wacai.tigon.web.annotation.FilterCol; +import com.pudonghot.yo.cms.auth.SessionAbility; +import com.pudonghot.yo.cms.service.QueueService; import com.pudonghot.yo.model.domain.AgentStatus; import org.springframework.stereotype.Controller; import com.pudonghot.yo.cms.annotation.TenantResource; import com.wacai.tigon.web.controller.BaseQueryController; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; /** @@ -22,11 +32,32 @@ filterCols = { @FilterCol(param = AgentStatus.STATUS, type = AgentStatus.Status.class), @FilterCol(param = AgentStatus.STATE, type = AgentStatus.State.class), @FilterCol(param = AgentStatus.REGISTERED, type = boolean.class), + @FilterCol(param = AgentStatus.QUEUE_ID, type = Integer.class, col = "qa.queue_id"), +}, +orderCols = { + @OrderCol(AgentStatus.IDLE_TIME) }) @TenantResource @RequestMapping("/cms/api/agent-status") public class AgentStatusController extends BaseQueryController { + FormList> implements SessionAbility { + + @Autowired + private QueueService queueService; + + /** + * {@inheritDoc} + */ + @Override + protected void after(final ArgQuery arg) { + super.after(arg); + + if (arg.getType() == ArgQuery.Type.LIST) { + val vmList = (ViewModel>) arg.getResult(); + vmList.setAttr("queues", queueService.list( + new Search(Queue.TENANT_ID, getTenantId()))); + } + } } diff --git a/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignController.java b/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignController.java index 8ab3a1d7..b1281c84 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignController.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignController.java @@ -1,5 +1,6 @@ package com.pudonghot.yo.cms.controller; +import lombok.val; import java.util.Arrays; import com.wacai.tigon.form.FormList; import me.chyxion.tigon.mybatis.Search; @@ -79,10 +80,10 @@ public class CampaignController @RequestMapping("/create-data") public ViewModel createData() { - final ArgQuery> argQuery = new ArgQuery<>(); + val argQuery = new ArgQuery>(); argQuery.setController(getClass()); argQuery.setType(ArgQuery.Type.FIND); - final Campaign campaign = new Campaign(); + val campaign = new Campaign(); campaign.setType(Campaign.Type.AGENT); campaign.setTargetType(Campaign.TargetType.QUEUE); campaign.setNumOfChannels(32); @@ -98,7 +99,7 @@ public class CampaignController } private void updateStatus(final Integer id, final Campaign.Status status) { - final Campaign campaign = crudService.find(id); + val campaign = crudService.find(id); Assert.state(campaign != null, () -> "Campaign [" + id + "] not found"); Assert.state(campaign.getActive(), @@ -123,7 +124,7 @@ public class CampaignController super.after(arg); final ViewModel result = arg.getResult(); - final Integer tenantId = getTenantId(); + val tenantId = getTenantId(); result.attr("tagsList", tagService.list( new Search(Tag.TENANT_ID, tenantId))); result.attr("trunkStrategiesList", diff --git a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentServiceImpl.java b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentServiceImpl.java index 0b4107a4..019f64b0 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentServiceImpl.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentServiceImpl.java @@ -1,5 +1,6 @@ package com.pudonghot.yo.cms.service.impl; +import lombok.val; import java.util.Set; import lombok.extern.slf4j.Slf4j; import java.util.stream.Collectors; @@ -144,13 +145,9 @@ public class AgentServiceImpl final Integer queueId, final SessionForm form) { - final QueueAgent arg = new QueueAgent(); - arg.setTenantId(form.getTenantId()); - arg.setTenantCode(form.getTenantCode()); + val arg = new QueueAgent(); arg.setQueueId(queueId); arg.setAgentId(agent.getId()); - arg.setAccount(agent.getAccount()); - arg.setAgent(agent.getAgent()); arg.setCreatedBy(form.getAuthUser()); queueAgentMapper.insert(arg); } diff --git a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentStatusServiceImpl.java b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentStatusServiceImpl.java index f0c12dca..d89e1ec7 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentStatusServiceImpl.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/AgentStatusServiceImpl.java @@ -1,5 +1,9 @@ package com.pudonghot.yo.cms.service.impl; +import lombok.extern.slf4j.Slf4j; +import com.wacai.tigon.model.ViewModel; +import me.chyxion.tigon.mybatis.Search; +import com.wacai.tigon.model.ListResult; import org.springframework.stereotype.Service; import com.pudonghot.yo.mapper.AgentStatusMapper; import com.pudonghot.yo.model.domain.AgentStatus; @@ -10,10 +14,22 @@ import com.wacai.tigon.service.support.BaseQueryServiceSupport; * @author Donghuang
* Dec 24, 2019 16:49:51 */ +@Slf4j @Service public class AgentStatusServiceImpl extends BaseQueryServiceSupport implements AgentStatusService { + + /** + * {@inheritDoc} + */ + @Override + public ListResult> listViewModelsPage(final Search search) { + log.debug("List agent status page by search [{}].", search); + return new ListResult<>( + toViewModel(mapper.cmsList(search)), + mapper.cmsCount(search)); + } } diff --git a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.java b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.java index debae06d..225abec1 100644 --- a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.java +++ b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.java @@ -1,6 +1,7 @@ package com.pudonghot.yo.mapper; import java.util.List; +import me.chyxion.tigon.mybatis.Search; import me.chyxion.tigon.mybatis.BaseMapper; import org.apache.ibatis.annotations.Param; import com.pudonghot.yo.model.domain.AgentStatus; @@ -78,4 +79,20 @@ public interface AgentStatusMapper extends BaseMapper { * @return updated rows */ int acwCleanup(); + + /** + * cms count + * + * @param search search + * @return count + */ + int cmsCount(@Param(PARAM_SEARCH_KEY) Search search); + + /** + * cms list + * + * @param search search + * @return agent list + */ + List cmsList(@Param(PARAM_SEARCH_KEY) Search search); } diff --git a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.xml b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.xml index 8fe33a4c..965a9f8b 100644 --- a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.xml +++ b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/AgentStatusMapper.xml @@ -235,4 +235,21 @@ ) and s.idle_time is not null + + + + + diff --git a/lib/model/src/main/java/com/pudonghot/yo/model/domain/AgentStatus.java b/lib/model/src/main/java/com/pudonghot/yo/model/domain/AgentStatus.java index 0cad38d3..f0734d61 100644 --- a/lib/model/src/main/java/com/pudonghot/yo/model/domain/AgentStatus.java +++ b/lib/model/src/main/java/com/pudonghot/yo/model/domain/AgentStatus.java @@ -5,6 +5,7 @@ import lombok.Setter; import java.util.Date; import me.chyxion.tigon.mybatis.Table; import me.chyxion.tigon.mybatis.NotUpdate; +import me.chyxion.tigon.mybatis.Transient; import lombok.experimental.FieldNameConstants; /** @@ -30,11 +31,18 @@ public class AgentStatus extends TenantDomain { private String eventKey; private String lockKey; private String checkRegKey; + /** * 空闲时间 */ private Date idleTime; + /** + * queue id + */ + @Transient + private Integer queueId; + public enum Status { OFFLINE, READY, diff --git a/lib/model/src/main/java/com/pudonghot/yo/model/domain/QueueAgent.java b/lib/model/src/main/java/com/pudonghot/yo/model/domain/QueueAgent.java index 4685b0b3..3ec6980c 100644 --- a/lib/model/src/main/java/com/pudonghot/yo/model/domain/QueueAgent.java +++ b/lib/model/src/main/java/com/pudonghot/yo/model/domain/QueueAgent.java @@ -15,16 +15,8 @@ import lombok.experimental.FieldNameConstants; @Table("br_queue_agent") @FieldNameConstants(prefix = "") public class QueueAgent extends BaseDomain { - @NotUpdate - private Integer tenantId; - @NotUpdate - private String tenantCode; @NotUpdate private Integer queueId; @NotUpdate private Integer agentId; - @NotUpdate - private String account; - @NotUpdate - private String agent; } diff --git a/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonCampaignServiceImpl.java b/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonCampaignServiceImpl.java index d06b696c..a49003fb 100644 --- a/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonCampaignServiceImpl.java +++ b/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonCampaignServiceImpl.java @@ -68,12 +68,8 @@ public class CommonCampaignServiceImpl } val queueAgent = new QueueAgent(); - queueAgent.setTenantId(agent.getTenantId()); - queueAgent.setTenantCode(agent.getTenantCode()); queueAgent.setQueueId(queueId); queueAgent.setAgentId(agentId); - queueAgent.setAgent(agent.getAgent()); - queueAgent.setAccount(agent.getAccount()); queueAgent.setCreatedBy(agent.getAccount()); queueAgentMapper.insert(queueAgent); return queueId; diff --git a/web/cms/app/templates/agent-status/list.hbs b/web/cms/app/templates/agent-status/list.hbs index 0d7fd6a1..66519488 100644 --- a/web/cms/app/templates/agent-status/list.hbs +++ b/web/cms/app/templates/agent-status/list.hbs @@ -10,9 +10,6 @@ 账户 - - 分机 - {{th-filter name='registered' text='注册状态' @@ -42,6 +39,17 @@ ) }} + {{#sortable-th name='idleTime'}} + 空闲时间 + {{/sortable-th}} + + {{th-filter name='queueId' + text='队列' + options=model.queues + value-field='id' + text-field='name' + }} + 事件Key @@ -51,10 +59,7 @@ {{#each model.data as |it|}} - {{it.account}} - - - {{it.agent}} + {{it.account}}({{it.agent}}) {{status-cell model=it @@ -63,10 +68,21 @@ disabled-text='离线'}} - {{it.status}} + {{option-text (array (hash value='READY' text='就绪') + (hash value='NOT_READY' text='未就绪') + (hash value='OFFLINE' text='离线')) it.status}} - {{it.state}} + {{option-text (array + (hash value='IDLE' text='空闲') + (hash value='IN_A_CALL' text='通话中') + (hash value='ACW' text='话后事务')) it.state}} + + + {{date-cell value=it.idleTime}} + + + {{option-text model.queues it.queueId 'id' 'name'}} {{it.eventKey}}