diff --git a/campaign/pom.xml b/campaign/pom.xml
new file mode 100644
index 00000000..9ace46fd
--- /dev/null
+++ b/campaign/pom.xml
@@ -0,0 +1,89 @@
+
+
+ 4.0.0
+ yo-campaign
+ 0.0.1-RELEASE
+ Yo Campaign
+ Yo Campaign
+ jar
+
+
+ com.pudonghot.yo
+ yo
+ 0.0.1-SNAPSHOT
+ ../
+
+
+
+ com.pudonghot.yo.campaign.YoCampaign
+
+
+
+
+ com.pudonghot.yo
+ yo-fsagent-api
+
+
+ com.pudonghot.yo
+ yo-openapi-dto
+
+
+ com.pudonghot.yo
+ yo-service-common
+
+
+ com.wacai.tigon
+ tigon-common
+
+
+ com.pudonghot.yo
+ yo-web-common
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+
+
+ org.apache.dubbo
+ dubbo-dependencies-zookeeper
+ pom
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ false
+ true
+
+
+
+ pl.project13.maven
+ git-commit-id-plugin
+
+
+
+
diff --git a/campaign/src/main/java/com/pudonghot/yo/campaign/YoCampaign.java b/campaign/src/main/java/com/pudonghot/yo/campaign/YoCampaign.java
new file mode 100644
index 00000000..647ee098
--- /dev/null
+++ b/campaign/src/main/java/com/pudonghot/yo/campaign/YoCampaign.java
@@ -0,0 +1,21 @@
+package com.pudonghot.yo.campaign;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author Donghuang
+ * @date Jul 18, 2020 17:25:36
+ */
+@SpringBootApplication
+public class YoCampaign {
+
+ /**
+ * main
+ *
+ * @param args args
+ */
+ public static void main(final String[] args) {
+ SpringApplication.run(YoCampaign.class, args);
+ }
+}
diff --git a/campaign/src/main/java/com/pudonghot/yo/campaign/controller/SiteController.java b/campaign/src/main/java/com/pudonghot/yo/campaign/controller/SiteController.java
new file mode 100644
index 00000000..cbd42728
--- /dev/null
+++ b/campaign/src/main/java/com/pudonghot/yo/campaign/controller/SiteController.java
@@ -0,0 +1,16 @@
+package com.pudonghot.yo.campaign.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * @author Donghuang
+ * @date Jul 18, 2020 17:24:13
+ */
+@Controller
+public class SiteController {
+
+ @GetMapping("/")
+ public void index() {
+ }
+}
diff --git a/campaign/src/main/java/com/pudonghot/yo/campaign/service/CampaignService.java b/campaign/src/main/java/com/pudonghot/yo/campaign/service/CampaignService.java
new file mode 100644
index 00000000..a09dc644
--- /dev/null
+++ b/campaign/src/main/java/com/pudonghot/yo/campaign/service/CampaignService.java
@@ -0,0 +1,8 @@
+package com.pudonghot.yo.campaign.service;
+
+/**
+ * @author Donghuang
+ * @date Jul 18, 2020 17:24:50
+ */
+public interface CampaignService {
+}
diff --git a/campaign/src/main/java/com/pudonghot/yo/campaign/service/impl/CampaignServiceImpl.java b/campaign/src/main/java/com/pudonghot/yo/campaign/service/impl/CampaignServiceImpl.java
new file mode 100644
index 00000000..d891b9cd
--- /dev/null
+++ b/campaign/src/main/java/com/pudonghot/yo/campaign/service/impl/CampaignServiceImpl.java
@@ -0,0 +1,12 @@
+package com.pudonghot.yo.campaign.service.impl;
+
+import org.springframework.stereotype.Service;
+import com.pudonghot.yo.campaign.service.CampaignService;
+
+/**
+ * @author Donghuang
+ * @date Jul 18, 2020 17:25:17
+ */
+@Service
+public class CampaignServiceImpl implements CampaignService {
+}
diff --git a/campaign/src/main/resources/application-test.properties b/campaign/src/main/resources/application-test.properties
new file mode 100644
index 00000000..b0c6bb6b
--- /dev/null
+++ b/campaign/src/main/resources/application-test.properties
@@ -0,0 +1,26 @@
+# Yo Campaign
+server.port=8085
+spring.application.name=yo-campaign
+spring.jackson.time-zone=GMT+8
+spring.jackson.serialization.write-dates-as-timestamps=true
+spring.jackson.serialization.fail-on-empty-beans=false
+spring.servlet.multipart.max-file-size=256MB
+spring.servlet.multipart.max-request-size=256MB
+site.context-path=
+
+tigon.query-service.scan.page-size=512
+
+# Datasource Yo
+yo.datasource.url=jdbc:mysql://localhost/callcenter?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.datasource.username=yo
+yo.datasource.password=yo_query!
+
+# Datasource FreeSWITCH
+yo.fs.datasource.url=jdbc:mysql://localhost/freeswitch?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.fs.datasource.username=freeswitch
+yo.fs.datasource.password=RR!h5IpirsnJ
+
+# Redis
+spring.redis.host=localhost
+spring.redis.port=6379
+# spring.redis.password=123456
diff --git a/campaign/src/main/resources/application.properties b/campaign/src/main/resources/application.properties
new file mode 100644
index 00000000..fd14a56c
--- /dev/null
+++ b/campaign/src/main/resources/application.properties
@@ -0,0 +1,23 @@
+server.port=8087
+spring.application.name=yo-campaign
+spring.jackson.time-zone=GMT+8
+spring.jackson.serialization.write-dates-as-timestamps=true
+spring.jackson.serialization.fail-on-empty-beans=false
+
+tigon.query-service.scan.page-size=512
+
+# Datasource
+yo.datasource.url=jdbc:mysql://172.18.4.35/yoqw?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.datasource.username=yoqw
+yo.datasource.password=yoqw_query!
+
+# Datasource FreeSWITCH
+yo.fs.datasource.url=jdbc:mysql://172.18.4.35/fs_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.fs.datasource.username=freeswitch
+yo.fs.datasource.password=RR!h5IpirsnJ
+
+# Redis
+spring.redis.host=172.18.4.35
+spring.redis.port=6379
+spring.redis.password=123456
+
diff --git a/campaign/src/main/resources/logback.xml b/campaign/src/main/resources/logback.xml
new file mode 100644
index 00000000..2f84c827
--- /dev/null
+++ b/campaign/src/main/resources/logback.xml
@@ -0,0 +1,37 @@
+
+>
+
+
+
+
+
+ true
+
+ %magenta(%d{"yyyy-MM-dd HH:mm:ss,SSS"}) [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n
+
+
+
+
+ ${log.dir}/${project.artifactId}.log
+
+ %d{"yyyy-MM-dd HH:mm:ss,SSS"} [%thread] %-5level %logger{15} %msg %n
+
+
+ ${log.dir}/%d{yyyy-MM, aux}/${project.artifactId}-%d{yyyy-MM-dd}.%i.log
+
+ 32MB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/campaign/src/main/resources/spring/spring-yo-campaign.xml b/campaign/src/main/resources/spring/spring-yo-campaign.xml
new file mode 100644
index 00000000..3cad6df1
--- /dev/null
+++ b/campaign/src/main/resources/spring/spring-yo-campaign.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/campaign/src/main/resources/static/check_backend_active.html b/campaign/src/main/resources/static/check_backend_active.html
new file mode 100644
index 00000000..a0aba931
--- /dev/null
+++ b/campaign/src/main/resources/static/check_backend_active.html
@@ -0,0 +1 @@
+OK
\ No newline at end of file
diff --git a/campaign/src/test/java/com/pudonghot/yo/campaign/TestDriver.java b/campaign/src/test/java/com/pudonghot/yo/campaign/TestDriver.java
new file mode 100644
index 00000000..321204c7
--- /dev/null
+++ b/campaign/src/test/java/com/pudonghot/yo/campaign/TestDriver.java
@@ -0,0 +1,17 @@
+package com.pudonghot.yo.campaign;
+
+import org.junit.Test;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author Donghuang
+ * @date Jul 18, 2020 17:23:28
+ */
+@Slf4j
+public class TestDriver {
+
+ @Test
+ public void run() {
+ log.info("Test run.");
+ }
+}
diff --git a/campaign/src/test/resources/spring/spring-test.xml b/campaign/src/test/resources/spring/spring-test.xml
new file mode 100644
index 00000000..e569cc31
--- /dev/null
+++ b/campaign/src/test/resources/spring/spring-test.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/cms/src/main/resources/application.properties b/cms/src/main/resources/application.properties
index 17622470..382ba369 100644
--- a/cms/src/main/resources/application.properties
+++ b/cms/src/main/resources/application.properties
@@ -17,7 +17,7 @@ yo.datasource.username=yoqw
yo.datasource.password=yoqw_query!
# Datasource
-yo.fs.datasource.url=jdbc:mysql://172.18.4.35/freeswitch?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.fs.datasource.url=jdbc:mysql://172.18.4.35/fs_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
yo.fs.datasource.username=freeswitch
yo.fs.datasource.password=RR!h5IpirsnJ
diff --git a/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelAnswer.java b/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelAnswer.java
index c78aa503..d49d5897 100644
--- a/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelAnswer.java
+++ b/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelAnswer.java
@@ -53,7 +53,7 @@ public class ChannelAnswer {
null));
final Map eventData = new HashMap<>(8);
- eventData.put("callid", event.getHeader("variable_x_conn_id"));
+ eventData.put("callid", event.getConnId());
if (EslEventUtils.isCaller(event)) {
// feature:0普通呼入,7普通外呼, 51内部求助
eventData.put("feature", "7");
diff --git a/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelDestroy.java b/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelDestroy.java
index 3a146666..ffb7c4ea 100644
--- a/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelDestroy.java
+++ b/fsagent/src/main/java/com/pudonghot/yo/fsagent/listener/ChannelDestroy.java
@@ -49,7 +49,7 @@ public class ChannelDestroy {
final String callUuid = event.getCallUuid();
final String channelName = event.getChannelName();
log.info("On channel [{}][{}] destroy event.", channelName, callUuid);
- final ChannelInfo channelInfo = CallStrUtils.parseChannelName(channelName);
+ final ChannelInfo channelInfo = CallStrUtils.getChannelInfo(event);
if (channelInfo.isAgent()) {
diff --git a/fsagent/src/main/java/com/pudonghot/yo/fsagent/service/dialplan/impl/BaseDialplanService.java b/fsagent/src/main/java/com/pudonghot/yo/fsagent/service/dialplan/impl/BaseDialplanService.java
index 97e1d6a0..8aac5e69 100644
--- a/fsagent/src/main/java/com/pudonghot/yo/fsagent/service/dialplan/impl/BaseDialplanService.java
+++ b/fsagent/src/main/java/com/pudonghot/yo/fsagent/service/dialplan/impl/BaseDialplanService.java
@@ -4,11 +4,11 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import java.util.function.Function;
import java.util.function.Supplier;
-
import com.wacai.tigon.mybatis.Search;
import com.pudonghot.yo.model.domain.*;
import com.pudonghot.yo.fsagent.service.*;
import com.wacai.tigon.sequence.IdSequence;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.util.DigestUtils;
import com.pudonghot.yo.fsagent.util.CallStrUtils;
@@ -63,12 +63,33 @@ public abstract class BaseDialplanService implements DialplanService {
return find(call);
}
+ protected String getParam(final Map params, final String name, final String... names) {
+
+ String val = params.get(name);
+ if (StringUtils.isNotBlank(val)) {
+ return val;
+ }
+
+ for (String n : names) {
+ val = params.get(n);
+ if (StringUtils.isNotBlank(val)) {
+ return val;
+ }
+ }
+
+ return null;
+ }
+
protected String getChannelName(final Map params) {
- return params.get("Channel-Name");
+ return getParam(params, "Channel-Name", "variable_channel_name");
+ }
+
+ public String getPresenceId(final Map params) {
+ return getParam(params, "Channel-Presence-ID", "variable_presence_id");
}
protected ChannelInfo getChannelInfo(final Map params) {
- return CallStrUtils.parseChannelName(getChannelName(params));
+ return CallStrUtils.parseChannelName(getChannelName(params), getPresenceId(params));
}
protected DialplanConfig onCallerAgent(final Call call, final Function consumer) {
@@ -105,10 +126,6 @@ public abstract class BaseDialplanService implements DialplanService {
return call.getParams().get("variable_x_called_number");
}
- protected boolean calledNumberEquals(final Map params, final String target) {
- return target.equals(getCalledNumber(params));
- }
-
protected boolean calledNumberEquals(final Call call, final String target) {
return target.equals(call.getCalledNumber());
}
diff --git a/fsagent/src/main/java/com/pudonghot/yo/fsagent/util/CallStrUtils.java b/fsagent/src/main/java/com/pudonghot/yo/fsagent/util/CallStrUtils.java
index b89cdedd..888b2a89 100644
--- a/fsagent/src/main/java/com/pudonghot/yo/fsagent/util/CallStrUtils.java
+++ b/fsagent/src/main/java/com/pudonghot/yo/fsagent/util/CallStrUtils.java
@@ -6,6 +6,7 @@ import lombok.ToString;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
import org.freeswitch.esl.client.transport.event.Event;
/**
@@ -14,7 +15,7 @@ import org.freeswitch.esl.client.transport.event.Event;
*/
public class CallStrUtils {
public static final Pattern PATTERN_USER_AND_DOMAIN =
- Pattern.compile("^sofia/internal/([^@]+)@(.+)$");
+ Pattern.compile("^sofia/internal/([^@]+)@([^\\:]+)(?:\\:\\d+)?$");
public static final Pattern PATTERN_EXTERNAL_NUMBER =
Pattern.compile("^sofia/external/(\\w+)$");
@@ -28,7 +29,24 @@ public class CallStrUtils {
* @return channel info
*/
public static ChannelInfo getChannelInfo(final Event event) {
- return parseChannelName(event.getChannelName());
+ return parseChannelName(event.getChannelName(), event.getPresenceId());
+ }
+
+ /**
+ * get channel info by presence id and channel name
+ *
+ * @param presenceId presence id
+ * @param channelName channel name
+ * @return channel info
+ */
+ public static ChannelInfo parseChannelName(final String channelName, final String presenceId) {
+ if (StringUtils.isNotBlank(presenceId)) {
+ final String[] presence = presenceId.split("@");
+ if (presence.length == 2) {
+ return new ChannelInfo(presence[0], presence[1], true);
+ }
+ }
+ return parseChannelName(channelName);
}
/**
@@ -37,7 +55,7 @@ public class CallStrUtils {
* @param channelName channel name
* @return channel info
*/
- public static ChannelInfo parseChannelName(final String channelName) {
+ static ChannelInfo parseChannelName(final String channelName) {
Matcher m = PATTERN_USER_AND_DOMAIN.matcher(channelName);
if (m.find()) {
return new ChannelInfo(m.group(1), m.group(2), true);
diff --git a/fsagent/src/test/java/com/pudonghot/yo/fsagent/CallStrUtilsTest.java b/fsagent/src/test/java/com/pudonghot/yo/fsagent/util/CallStrUtilsTest.java
similarity index 69%
rename from fsagent/src/test/java/com/pudonghot/yo/fsagent/CallStrUtilsTest.java
rename to fsagent/src/test/java/com/pudonghot/yo/fsagent/util/CallStrUtilsTest.java
index 201b0c6d..af5170a9 100644
--- a/fsagent/src/test/java/com/pudonghot/yo/fsagent/CallStrUtilsTest.java
+++ b/fsagent/src/test/java/com/pudonghot/yo/fsagent/util/CallStrUtilsTest.java
@@ -1,8 +1,7 @@
-package com.pudonghot.yo.fsagent;
+package com.pudonghot.yo.fsagent.util;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;
-import com.pudonghot.yo.fsagent.util.CallStrUtils;
/**
* @author Donghuang
@@ -14,7 +13,9 @@ public class CallStrUtilsTest {
@Test
public void testParse() {
log.info("User and domain [{}]", CallStrUtils.parseChannelName("sofia/internal/700001@d1.wacai.info"));
+ log.info("User and domain [{}]", CallStrUtils.parseChannelName("sofia/internal/700002@d1.wacai.info:5060"));
log.info("External number [{}]", CallStrUtils.parseChannelName("sofia/external/013764268709"));
+ log.info("External number [{}]", CallStrUtils.parseChannelName("sofia/external/013764268709", "donghuang@d1.wacia.info"));
log.info("Dial target [{}]", CallStrUtils.parseDialTarget("4.Q"));
log.info("Dial target [{}]", CallStrUtils.parseDialTarget("1.A"));
log.info("Dial target [{}]", CallStrUtils.parseDialTarget("4.AG"));
diff --git a/lib/fsesl-api/src/main/java/org/freeswitch/esl/client/transport/event/Event.java b/lib/fsesl-api/src/main/java/org/freeswitch/esl/client/transport/event/Event.java
index 332528d4..a51a86c7 100644
--- a/lib/fsesl-api/src/main/java/org/freeswitch/esl/client/transport/event/Event.java
+++ b/lib/fsesl-api/src/main/java/org/freeswitch/esl/client/transport/event/Event.java
@@ -90,9 +90,22 @@ public class Event {
* @param name header name
* @return header value
*/
- public String getHeader(final String name) {
- return headers.get(name);
- }
+ public String getHeader(String name, String... names) {
+
+ String val = headers.get(name);
+ if (StringUtils.isNotBlank(val)) {
+ return val;
+ }
+
+ for (String n : names) {
+ val = headers.get(n);
+ if (StringUtils.isNotBlank(val)) {
+ return val;
+ }
+ }
+
+ return null;
+ }
/**
* Convenience method.
@@ -101,7 +114,11 @@ public class Event {
* @return channel name
*/
public String getChannelName() {
- return getHeader("variable_channel_name");
+ return getHeader("Channel-Name", "variable_channel_name");
+ }
+
+ public String getPresenceId() {
+ return getHeader("Channel-Presence-ID", "variable_presence_id");
}
/**
@@ -251,4 +268,5 @@ public class Event {
mapToString.put("body", body.size() + " lines");
return mapToString.toString();
}
+
}
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 63b565fb..8334670b 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
@@ -37,8 +37,6 @@ public class AgentStatus extends TenantDomain {
public enum State {
IDLE,
- WAITING,
- RECEIVING,
IN_A_CALL,
ACW
}
diff --git a/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonAgentStatusServiceImpl.java b/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonAgentStatusServiceImpl.java
index 3555d27b..475cdddd 100644
--- a/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonAgentStatusServiceImpl.java
+++ b/lib/service-common/src/main/java/com/pudonghot/yo/service/impl/CommonAgentStatusServiceImpl.java
@@ -7,10 +7,12 @@ import com.wacai.tigon.mybatis.Search;
import com.pudonghot.yo.mapper.AgentMapper;
import com.wacai.tigon.sequence.IdSequence;
import com.pudonghot.yo.model.domain.Agent;
+import com.pudonghot.yo.fs.model.domain.Channel;
import com.pudonghot.yo.mapper.AgentStatusMapper;
import com.pudonghot.yo.model.domain.AgentStatus;
import com.pudonghot.yo.model.exception.ErrorCode;
import com.pudonghot.yo.model.exception.AssertUtils;
+import com.pudonghot.yo.service.CommonChannelService;
import com.pudonghot.yo.service.CommonDelayScheduleService;
import com.pudonghot.yo.service.CommonAgentStatusService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +34,8 @@ public class CommonAgentStatusServiceImpl
private IdSequence idSeq;
@Setter(onMethod_ = {@Autowired})
private CommonDelayScheduleService delayScheduleService;
+ @Setter(onMethod_ = {@Autowired})
+ private CommonChannelService commonChannelService;
/**
* {@inheritDoc}
@@ -65,13 +69,14 @@ public class CommonAgentStatusServiceImpl
agentStatus.setRegistered(true);
agentStatus.setStatus(AgentStatus.Status.OFFLINE);
agentStatus.setState(AgentStatus.State.IDLE);
+
agentStatusMapper.insert(agentStatus);
}
else {
agentStatus.setRegistered(true);
agentStatus.setCheckRegKey(null);
- agentStatus.setState(AgentStatus.State.IDLE);
clear(agentStatus);
+ setState(agent, agentStatus);
agentStatusMapper.update(agentStatus);
}
}
@@ -93,8 +98,8 @@ public class CommonAgentStatusServiceImpl
log.info("Unregister agent [{}]. ", agent);
final AgentStatus agentStatus = findValidAgentStatus(agent);
agentStatus.setRegistered(false);
- agentStatus.setState(AgentStatus.State.IDLE);
clear(agentStatus);
+ setState(agent, agentStatus);
agentStatusMapper.update(agentStatus);
}
@@ -225,7 +230,7 @@ public class CommonAgentStatusServiceImpl
delayScheduleService.acw(agent);
}
else {
- agentStatus.setState(AgentStatus.State.IDLE);
+ setState(agent, agentStatus);
}
log.info("Update agent status [{}].", agentStatus);
@@ -258,7 +263,7 @@ public class CommonAgentStatusServiceImpl
AssertUtils.state(agentStatus.getState() == AgentStatus.State.ACW,
AGENT_UPDATE_STATUS_FAIL);
clear(agentStatus);
- agentStatus.setState(AgentStatus.State.IDLE);
+ setState(agent, agentStatus);
agentStatus.setAcwTime(null);
log.info("Update agent status [{}].", agentStatus);
agentStatusMapper.update(agentStatus);
@@ -281,7 +286,7 @@ public class CommonAgentStatusServiceImpl
final AgentStatus agentStatus = findValidAgentStatus(agent);
clear(agentStatus);
- agentStatus.setState(AgentStatus.State.IDLE);
+ setState(agent, agentStatus);
log.info("Update agent status [{}].", agentStatus);
agentStatusMapper.update(agentStatus);
@@ -311,4 +316,11 @@ public class CommonAgentStatusServiceImpl
agentStatus.setAcwTime(null);
agentStatus.setUpdatedTime(new Date());
}
+
+ private void setState(final Agent agent, final AgentStatus agentStatus) {
+ final Channel channel = commonChannelService.find(agent);
+ agentStatus.setState(channel != null ?
+ AgentStatus.State.IN_A_CALL :
+ AgentStatus.State.IDLE);
+ }
}
diff --git a/lib/service-common/src/test/java/com/pudonghot/yo/service/CommonAgentStatusServiceTest.java b/lib/service-common/src/test/java/com/pudonghot/yo/service/CommonAgentStatusServiceTest.java
index f0202a49..084851be 100644
--- a/lib/service-common/src/test/java/com/pudonghot/yo/service/CommonAgentStatusServiceTest.java
+++ b/lib/service-common/src/test/java/com/pudonghot/yo/service/CommonAgentStatusServiceTest.java
@@ -1,5 +1,7 @@
package com.pudonghot.yo.service;
+import com.pudonghot.yo.mapper.AgentMapper;
+import com.pudonghot.yo.model.domain.Agent;
import org.junit.Test;
import org.junit.runner.RunWith;
import lombok.extern.slf4j.Slf4j;
@@ -15,11 +17,13 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@SpringBootTest(classes = TestDriver.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class CommonAgentStatusServiceTest {
+ @Autowired
+ private AgentMapper agentMapper;
@Autowired
private CommonAgentStatusService agentStatusService;
@Test
public void testRun() {
- log.info("Run.");
+ log.info("Agent status [{}].", agentStatusService.findValidAgentStatus(agentMapper.find(1)));
}
}
diff --git a/openapi/src/main/java/com/pudonghot/yo/openapi/controller/CallController.java b/openapi/src/main/java/com/pudonghot/yo/openapi/controller/CallController.java
index 4f83132f..bd7919d0 100644
--- a/openapi/src/main/java/com/pudonghot/yo/openapi/controller/CallController.java
+++ b/openapi/src/main/java/com/pudonghot/yo/openapi/controller/CallController.java
@@ -120,7 +120,6 @@ public class CallController implements SessionAbility {
dialService.unhold(StringUtils.defaultIfBlank(callId, channel.getUuid()));
}
-
@RequestMapping(value = "/transfer", params = {
"devicetype=3",
"transtype=custConfirm",
diff --git a/openapi/src/main/resources/application.properties b/openapi/src/main/resources/application.properties
index 0f8be7ab..7a11dac0 100644
--- a/openapi/src/main/resources/application.properties
+++ b/openapi/src/main/resources/application.properties
@@ -16,7 +16,7 @@ yo.datasource.username=yoqw
yo.datasource.password=yoqw_query!
# Datasource FreeSWITCH
-yo.fs.datasource.url=jdbc:mysql://172.18.4.35/freeswitch?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.fs.datasource.url=jdbc:mysql://172.18.4.35/fs_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
yo.fs.datasource.username=freeswitch
yo.fs.datasource.password=RR!h5IpirsnJ
@@ -25,6 +25,9 @@ spring.redis.host=172.18.4.35
spring.redis.port=6379
spring.redis.password=123456
+# Tenant
+yo.openapi.default-tenant=GOBLIN
+
# Dubbo
## Dubbo Registry
diff --git a/openapi/src/main/resources/spring/spring-yo-openapi.xml b/openapi/src/main/resources/spring/spring-yo-openapi.xml
index bb35005e..8c92d0a6 100644
--- a/openapi/src/main/resources/spring/spring-yo-openapi.xml
+++ b/openapi/src/main/resources/spring/spring-yo-openapi.xml
@@ -20,5 +20,9 @@
+ version="${yo.fsagent.dubbo.service.version}" />
+
+
diff --git a/pom.xml b/pom.xml
index ffda5f88..56a2a5bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
state
cms
openapi
+ campaign
diff --git a/state/src/main/java/com/pudonghot/yo/state/YoState.java b/state/src/main/java/com/pudonghot/yo/state/YoState.java
index 3dd8ec7d..a012c6ce 100644
--- a/state/src/main/java/com/pudonghot/yo/state/YoState.java
+++ b/state/src/main/java/com/pudonghot/yo/state/YoState.java
@@ -1,24 +1,14 @@
package com.pudonghot.yo.state;
import org.springframework.boot.SpringApplication;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
/**
* @author Donghuang
* Oct 26, 2019 15:56:08
*/
@SpringBootApplication
-public class YoState implements WebMvcConfigurer {
-
- @Autowired
- private ThreadPoolTaskExecutor executor;
- @Value("${yo.openapi.web-async-timeout:50000}")
- private Long webAsyncTimeout;
+public class YoState {
/**
* main
@@ -28,13 +18,4 @@ public class YoState implements WebMvcConfigurer {
public static void main(final String[] args) {
SpringApplication.run(YoState.class, args);
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
- configurer.setDefaultTimeout(webAsyncTimeout);
- configurer.setTaskExecutor(executor);
- }
}
diff --git a/state/src/main/resources/application-test.properties b/state/src/main/resources/application-test.properties
index 6d1092b1..e9f7cfb4 100644
--- a/state/src/main/resources/application-test.properties
+++ b/state/src/main/resources/application-test.properties
@@ -1,4 +1,4 @@
-# Yo OpenAPI
+# Yo State
server.port=8085
spring.application.name=yo-state
spring.jackson.time-zone=GMT+8
diff --git a/state/src/main/resources/application.properties b/state/src/main/resources/application.properties
index 8343ee9f..a0b7d59c 100644
--- a/state/src/main/resources/application.properties
+++ b/state/src/main/resources/application.properties
@@ -12,7 +12,7 @@ yo.datasource.username=yoqw
yo.datasource.password=yoqw_query!
# Datasource FreeSWITCH
-yo.fs.datasource.url=jdbc:mysql://172.18.4.35/freeswitch?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+yo.fs.datasource.url=jdbc:mysql://172.18.4.35/fs_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
yo.fs.datasource.username=freeswitch
yo.fs.datasource.password=RR!h5IpirsnJ