add campaign service
This commit is contained in:
parent
dfb96334f2
commit
b768f40022
@ -1,5 +1,5 @@
|
||||
# Yo Campaign
|
||||
server.port=8085
|
||||
server.port=8086
|
||||
spring.application.name=yo-campaign
|
||||
spring.jackson.time-zone=GMT+8
|
||||
spring.jackson.serialization.write-dates-as-timestamps=true
|
||||
@ -24,3 +24,13 @@ yo.fs.datasource.password=RR!h5IpirsnJ
|
||||
spring.redis.host=localhost
|
||||
spring.redis.port=6379
|
||||
# spring.redis.password=123456
|
||||
|
||||
# Dubbo
|
||||
dubbo.registry.address=zookeeper://localhost:2181
|
||||
dubbo.registry.file=${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
|
||||
yo.fsagent.dubbo.service.version=1.0.0
|
||||
|
||||
# Calling List
|
||||
yo.campaign.feign.calling-list.base-url=http://localhost:1116
|
||||
yo.campaign.feign.calling-list.channel=campaign.json
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.pudonghot.yo</groupId>
|
||||
<artifactId>yo-openapi-dto</artifactId>
|
||||
<artifactId>yo-service-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.pudonghot.yo</groupId>
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.pudonghot.yo.cms.controller;
|
||||
|
||||
import java.util.Arrays;
|
||||
import org.apache.shiro.util.Assert;
|
||||
import com.wacai.tigon.form.FormList;
|
||||
import com.wacai.tigon.mybatis.Search;
|
||||
import com.wacai.tigon.model.ViewModel;
|
||||
import org.springframework.util.Assert;
|
||||
import com.pudonghot.yo.model.DailyTime;
|
||||
import com.pudonghot.yo.model.domain.Tag;
|
||||
import com.pudonghot.yo.model.domain.Queue;
|
||||
@ -18,7 +18,7 @@ import com.wacai.tigon.web.annotation.FilterCol;
|
||||
import com.pudonghot.yo.cms.annotation.Taggable;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import com.pudonghot.yo.model.domain.TrunkStrategy;
|
||||
import com.pudonghot.yo.cms.service.CampaignService;
|
||||
import com.pudonghot.yo.service.CommonCampaignService;
|
||||
import com.pudonghot.yo.cms.annotation.TenantResource;
|
||||
import com.wacai.tigon.web.controller.BaseCrudController;
|
||||
import com.pudonghot.yo.cms.service.TrunkStrategyService;
|
||||
@ -60,19 +60,21 @@ public class CampaignController
|
||||
private TagService tagService;
|
||||
@Autowired
|
||||
private QueueService queueService;
|
||||
@Autowired
|
||||
private CommonCampaignService commonCampaignService;
|
||||
|
||||
@RequestMapping("/start")
|
||||
public void start(
|
||||
@RequestParam("id")
|
||||
final Integer id) {
|
||||
activity(id, Campaign.Status.RUNNING);
|
||||
updateStatus(id, Campaign.Status.RUNNING);
|
||||
}
|
||||
|
||||
@RequestMapping("/stop")
|
||||
public void stop(
|
||||
@RequestParam("id")
|
||||
final Integer id) {
|
||||
activity(id, Campaign.Status.STOPPED);
|
||||
updateStatus(id, Campaign.Status.STOPPED);
|
||||
}
|
||||
|
||||
@RequestMapping("/create-data")
|
||||
@ -95,12 +97,13 @@ public class CampaignController
|
||||
return argQuery.getResult();
|
||||
}
|
||||
|
||||
private void activity(final Integer id, final Campaign.Status status) {
|
||||
final CampaignService campaignService = ((CampaignService) crudService);
|
||||
final Campaign campaign = campaignService.find(new Search(id).eq(Campaign.ACTIVE, true));
|
||||
Assert.state(campaign != null, "无效的外呼活动");
|
||||
campaign.setStatus(status);
|
||||
campaignService.update(campaign);
|
||||
private void updateStatus(final Integer id, final Campaign.Status status) {
|
||||
final Campaign campaign = crudService.find(id);
|
||||
Assert.state(campaign != null,
|
||||
() -> "Campaign [" + id + "] not found");
|
||||
Assert.state(campaign.getActive(),
|
||||
() -> "Campaign [" + id + "] is not active");
|
||||
commonCampaignService.updateStatus(campaign, status);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,47 @@
|
||||
package com.pudonghot.yo.service;
|
||||
|
||||
import com.pudonghot.yo.model.domain.Agent;
|
||||
import com.pudonghot.yo.model.domain.Campaign;
|
||||
|
||||
/**
|
||||
* @author Donghuang
|
||||
* @date Jul 24, 2020 16:04:44
|
||||
*/
|
||||
public interface CommonCampaignService {
|
||||
|
||||
/**
|
||||
* agent enqueue
|
||||
*
|
||||
* @param campaignKey campaign key
|
||||
* @param agent agent
|
||||
*/
|
||||
void enqueue(String campaignKey, Agent agent);
|
||||
|
||||
/**
|
||||
* agent dequeue
|
||||
* @param agent agent
|
||||
*/
|
||||
void dequeue(Agent agent);
|
||||
|
||||
/**
|
||||
* start campaign
|
||||
*
|
||||
* @param campaignKey campaign key
|
||||
*/
|
||||
void start(String campaignKey);
|
||||
|
||||
/**
|
||||
* start campaign
|
||||
*
|
||||
* @param campaignKey campaign key
|
||||
*/
|
||||
void stop(String campaignKey);
|
||||
|
||||
/**
|
||||
* update campaign status
|
||||
*
|
||||
* @param campaign campaign
|
||||
* @param status status
|
||||
*/
|
||||
void updateStatus(final Campaign campaign, final Campaign.Status status);
|
||||
}
|
@ -0,0 +1,121 @@
|
||||
package com.pudonghot.yo.service.impl;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import com.wacai.tigon.mybatis.Search;
|
||||
import org.springframework.util.Assert;
|
||||
import com.pudonghot.yo.mapper.QueueMapper;
|
||||
import com.pudonghot.yo.model.domain.Agent;
|
||||
import com.pudonghot.yo.model.domain.Queue;
|
||||
import com.pudonghot.yo.mapper.CampaignMapper;
|
||||
import com.pudonghot.yo.model.domain.Campaign;
|
||||
import com.pudonghot.yo.mapper.QueueAgentMapper;
|
||||
import com.pudonghot.yo.model.domain.QueueAgent;
|
||||
import com.pudonghot.yo.service.CommonCallDataService;
|
||||
import com.pudonghot.yo.service.CommonCampaignService;
|
||||
import com.wacai.tigon.service.support.BaseServiceSupport;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
/**
|
||||
* @author Donghuang
|
||||
* @date Jul 24, 2020 16:05:56
|
||||
*/
|
||||
@Slf4j
|
||||
public class CommonCampaignServiceImpl
|
||||
extends BaseServiceSupport<Integer, Campaign, CampaignMapper>
|
||||
implements CommonCampaignService {
|
||||
@Autowired
|
||||
private CommonCallDataService commonCallDataService;
|
||||
@Autowired
|
||||
private QueueMapper queueMapper;
|
||||
@Autowired
|
||||
private QueueAgentMapper queueAgentMapper;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void enqueue(final String campaignKey, final Agent agent) {
|
||||
log.info("Agent [{}] enqueue campaign [{}].", agent, campaignKey);
|
||||
|
||||
final Campaign campaign = findValid(campaignKey);
|
||||
final Integer queueId = campaign.getTargetId();
|
||||
final Queue queue = queueMapper.find(queueId);
|
||||
Assert.state(queue != null,
|
||||
() -> "Campaign [" + campaignKey + "] queue not found");
|
||||
Assert.state(queue.getActive(),
|
||||
() -> "Campaign [" + campaignKey + "] queue is not active");
|
||||
final Integer agentId = agent.getId();
|
||||
final QueueAgent queueAgentExisted =
|
||||
queueAgentMapper.find(
|
||||
new Search(QueueAgent.QUEUE_ID, queueId)
|
||||
.eq(QueueAgent.AGENT_ID, agentId));
|
||||
|
||||
if (queueAgentExisted != null) {
|
||||
log.warn("Agent [{}] exists in queue [{}], ignore enqueue.",
|
||||
agentId, queueId);
|
||||
return;
|
||||
}
|
||||
|
||||
final QueueAgent 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void dequeue(final Agent agent) {
|
||||
log.info("Agent [{}] dequeue.", agent);
|
||||
queueAgentMapper.delete(new Search(QueueAgent.AGENT_ID, agent.getId()));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void start(final String campaignKey) {
|
||||
updateStatus(findValid(campaignKey), Campaign.Status.RUNNING);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void stop(final String campaignKey) {
|
||||
updateStatus(findValid(campaignKey), Campaign.Status.STOPPED);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void updateStatus(final Campaign campaign, final Campaign.Status status) {
|
||||
log.info("Update campaign [{}] status [{}].", campaign, status);
|
||||
campaign.setStatus(status);
|
||||
mapper.update(campaign);
|
||||
resetData(campaign);
|
||||
}
|
||||
|
||||
private Campaign findValid(final String campaignKey) {
|
||||
final Campaign campaign =
|
||||
mapper.find(new Search(Campaign.CAMPAIGN_KEY, campaignKey));
|
||||
Assert.state(campaign != null,
|
||||
() -> "No campaign [" + campaignKey + "] found");
|
||||
Assert.state(campaign.getActive(),
|
||||
() -> "Campaign [" + campaignKey + "] is not active");
|
||||
return campaign;
|
||||
}
|
||||
|
||||
private void resetData(final Campaign campaign) {
|
||||
final Integer campaignId = campaign.getId();
|
||||
commonCallDataService.resetCampaignDailyDialed(campaignId);
|
||||
commonCallDataService.resetCampaignDailyEstablished(campaignId);
|
||||
}
|
||||
}
|
@ -9,4 +9,5 @@
|
||||
<bean class="com.pudonghot.yo.service.impl.CommonAgentEventQueueServiceImpl" />
|
||||
<bean class="com.pudonghot.yo.service.impl.CommonChannelServiceImpl" />
|
||||
<bean class="com.pudonghot.yo.service.impl.CommonCallDataServiceImpl" />
|
||||
<bean class="com.pudonghot.yo.service.impl.CommonCampaignServiceImpl" />
|
||||
</beans>
|
||||
|
@ -5,6 +5,7 @@ import com.pudonghot.yo.model.domain.Agent;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import com.pudonghot.yo.openapi.auth.SessionAbility;
|
||||
import com.pudonghot.yo.openapi.service.AgentService;
|
||||
import com.pudonghot.yo.service.CommonCampaignService;
|
||||
import com.pudonghot.yo.openapi.response.RespAgentReady;
|
||||
import com.pudonghot.yo.service.CommonAgentStatusService;
|
||||
import com.pudonghot.yo.openapi.service.AgentEventService;
|
||||
@ -27,6 +28,8 @@ public class AgentStatusController implements SessionAbility {
|
||||
private CommonAgentStatusService agentStatusService;
|
||||
@Autowired
|
||||
private AgentEventService agentEventService;
|
||||
@Autowired
|
||||
private CommonCampaignService commonCampaignService;
|
||||
|
||||
@RequestMapping({"/", "/forcelogin"})
|
||||
public RespAgentReady signIn(
|
||||
@ -44,6 +47,7 @@ public class AgentStatusController implements SessionAbility {
|
||||
final String account) {
|
||||
final Agent agent = agentService.findValid(getTenantId(), account);
|
||||
agentStatusService.offline(agent);
|
||||
commonCampaignService.dequeue(agent);
|
||||
agentEventService.publish(agent, AgentOther_ShutdownService);
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import org.springframework.stereotype.Controller;
|
||||
import com.pudonghot.yo.openapi.request.ReqCampaign;
|
||||
import com.pudonghot.yo.openapi.auth.SessionAbility;
|
||||
import com.pudonghot.yo.openapi.service.AgentService;
|
||||
import com.pudonghot.yo.service.CommonCampaignService;
|
||||
import com.pudonghot.yo.service.CommonAgentStatusService;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@ -24,6 +25,8 @@ public class CampaignController implements SessionAbility {
|
||||
private AgentService agentService;
|
||||
@Autowired
|
||||
private CommonAgentStatusService agentStatusService;
|
||||
@Autowired
|
||||
private CommonCampaignService commonCampaignService;
|
||||
|
||||
@RequestMapping("/resource/task/{account}")
|
||||
public void addToQueue(
|
||||
@ -33,16 +36,18 @@ public class CampaignController implements SessionAbility {
|
||||
final Agent agent = agentService.findValid(
|
||||
form.getTenantId(), account);
|
||||
agentStatusService.findValidAgentStatus(agent);
|
||||
// TODO Add agent to queue
|
||||
commonCampaignService.enqueue(form.getCampaignKey(), agent);
|
||||
}
|
||||
|
||||
@RequestMapping("/resource/task/start")
|
||||
public void start(@Valid final ReqCampaign form) {
|
||||
// TODO start campaign
|
||||
log.info("Start campaign [{}].", form);
|
||||
commonCampaignService.start(form.getCampaignKey());
|
||||
}
|
||||
|
||||
@RequestMapping("/resource/task/stop")
|
||||
public void stop(@Valid final ReqCampaign form) {
|
||||
// TODO stop campaign
|
||||
log.info("Stop campaign [{}].", form);
|
||||
commonCampaignService.stop(form.getCampaignKey());
|
||||
}
|
||||
}
|
||||
|
@ -17,10 +17,20 @@ public class ReqCampaign extends BaseForm {
|
||||
private String campaignKey;
|
||||
private String campaignName;
|
||||
|
||||
/**
|
||||
* param name alias
|
||||
*
|
||||
* @param taskId
|
||||
*/
|
||||
public void setTaskid(final String taskId) {
|
||||
this.campaignKey = taskId;
|
||||
}
|
||||
|
||||
/**
|
||||
* param name alis
|
||||
*
|
||||
* @param taskName
|
||||
*/
|
||||
public void setTaskname(final String taskName) {
|
||||
this.campaignName = taskName;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user