add batch create agent
This commit is contained in:
parent
8533faf904
commit
3e1f16dea5
@ -25,7 +25,7 @@ public class CreateBatchFormAgent extends BaseCreateForm implements TaggableForm
|
|||||||
private Boolean webrtc;
|
private Boolean webrtc;
|
||||||
@Trim
|
@Trim
|
||||||
@NotBlank
|
@NotBlank
|
||||||
private String accounts;
|
private String agents;
|
||||||
@Trim
|
@Trim
|
||||||
@EmptyToNull
|
@EmptyToNull
|
||||||
private String password;
|
private String password;
|
||||||
|
@ -2,12 +2,12 @@ package com.pudonghot.yo.cms.form.create;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
import com.pudonghot.yo.model.domain.Agent;
|
import com.pudonghot.yo.model.domain.Agent;
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
import javax.validation.constraints.NotBlank;
|
|
||||||
import com.wacai.tigon.format.annotation.Trim;
|
import com.wacai.tigon.format.annotation.Trim;
|
||||||
import com.pudonghot.yo.cms.form.TaggableForm;
|
import com.pudonghot.yo.cms.form.TaggableForm;
|
||||||
import com.pudonghot.yo.cms.form.BaseCreateForm;
|
import com.pudonghot.yo.cms.form.BaseCreateForm;
|
||||||
|
import org.hibernate.validator.constraints.Length;
|
||||||
import org.hibernate.validator.constraints.Range;
|
import org.hibernate.validator.constraints.Range;
|
||||||
import com.wacai.tigon.format.annotation.EmptyToNull;
|
import com.wacai.tigon.format.annotation.EmptyToNull;
|
||||||
|
|
||||||
@ -28,9 +28,15 @@ public class CreateFormAgent extends BaseCreateForm implements TaggableForm {
|
|||||||
private String name;
|
private String name;
|
||||||
@Trim
|
@Trim
|
||||||
@NotBlank
|
@NotBlank
|
||||||
|
@Length(min = 4, max = 32)
|
||||||
|
@Pattern(regexp = "^\\w+$")
|
||||||
private String account;
|
private String account;
|
||||||
@Trim
|
@Trim
|
||||||
@EmptyToNull
|
@EmptyToNull
|
||||||
|
@Pattern(regexp = "^[1-9]+\\d*$")
|
||||||
|
private String agent;
|
||||||
|
@Trim
|
||||||
|
@EmptyToNull
|
||||||
private String password;
|
private String password;
|
||||||
@Range(min = 0, max = 240000)
|
@Range(min = 0, max = 240000)
|
||||||
private Integer wrapUpTime;
|
private Integer wrapUpTime;
|
||||||
|
@ -120,39 +120,49 @@ public class AgentServiceImpl
|
|||||||
private Pair<List<CreateFormAgent>, List<UpdateFormAgent>> batchCreateValidate(
|
private Pair<List<CreateFormAgent>, List<UpdateFormAgent>> batchCreateValidate(
|
||||||
final CreateBatchFormAgent form) {
|
final CreateBatchFormAgent form) {
|
||||||
|
|
||||||
val accounts = form.getAccounts().split("\n");
|
val agents = form.getAgents().split("\\s*\n\\s*");
|
||||||
val agentsCreate = new ArrayList<CreateFormAgent>(accounts.length);
|
val agentsCreate = new ArrayList<CreateFormAgent>(agents.length);
|
||||||
val agentsUpdate = new ArrayList<UpdateFormAgent>(accounts.length);
|
val agentsUpdate = new ArrayList<UpdateFormAgent>(agents.length);
|
||||||
|
|
||||||
|
for (val line : agents) {
|
||||||
for (val line : accounts) {
|
|
||||||
if (StringUtils.isNotBlank(line)) {
|
if (StringUtils.isNotBlank(line)) {
|
||||||
log.info("Create agent [{}].", line);
|
log.info("Create agent [{}].", line);
|
||||||
val agentData = line.split("\\s\\+");
|
val agentData = line.split("[\\s,;]+");
|
||||||
Assert.state(agentData.length < 3, () -> "Agent info [" + agentData + "] is not valid");
|
Assert.state(agentData.length < 4,
|
||||||
|
() -> "Agent info [" + agentData + "] is not valid");
|
||||||
|
|
||||||
val name = agentData[0];
|
val name = agentData[0];
|
||||||
val account = agentData.length == 2 ? agentData[1] : agentData[0];
|
val account = agentData.length > 1 ?
|
||||||
|
agentData[1] : agentData[0];
|
||||||
|
|
||||||
Assert.state(account.matches("^[_a-zA-Z]+[_a-zA-z0-9]+$"),
|
Assert.state(account.matches("^\\w+$"),
|
||||||
"Agent [" + line + "] account [" + account + "] is not valid");
|
() -> "Agent data [" + line + "] account [" + account + "] is not valid");
|
||||||
|
val agent = agentData.length == 3 ? agentData[2] : null;
|
||||||
|
if (agent != null) {
|
||||||
|
Assert.state(agent.matches("^[1-9]+\\d*$"),
|
||||||
|
() -> "Agent data [" + line + "] number [" + agent + "] is not valid");
|
||||||
|
}
|
||||||
|
|
||||||
val agentExisted = mapper.find(new Search(Agent.ACCOUNT, account));
|
val agentExisted = mapper.find(
|
||||||
|
new Search(Agent.ACCOUNT, account));
|
||||||
|
|
||||||
if (agentExisted != null) {
|
if (agentExisted != null) {
|
||||||
Assert.state(form.getUpdateExisted(),
|
Assert.state(form.getUpdateExisted(),
|
||||||
() -> "Agent [" + account + "] existed");
|
() -> "Agent [" + account + "] existed");
|
||||||
|
|
||||||
val formUpdate = jsonService.convert(form, UpdateFormAgent.class);
|
val formUpdate = jsonService.convert(
|
||||||
|
form, UpdateFormAgent.class);
|
||||||
formUpdate.setId(agentExisted.getId());
|
formUpdate.setId(agentExisted.getId());
|
||||||
formUpdate.setName(name);
|
formUpdate.setName(name);
|
||||||
agentsUpdate.add(formUpdate);
|
agentsUpdate.add(formUpdate);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
val formCreate = jsonService.convert(form, CreateFormAgent.class);
|
val formCreate = jsonService.convert(
|
||||||
|
form, CreateFormAgent.class);
|
||||||
formCreate.setName(name);
|
formCreate.setName(name);
|
||||||
formCreate.setAccount(account);
|
formCreate.setAccount(account);
|
||||||
|
formCreate.setAgent(account);
|
||||||
agentsCreate.add(formCreate);
|
agentsCreate.add(formCreate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -242,6 +252,7 @@ public class AgentServiceImpl
|
|||||||
@Override
|
@Override
|
||||||
protected void beforeInsert(final Agent model) {
|
protected void beforeInsert(final Agent model) {
|
||||||
super.beforeInsert(model);
|
super.beforeInsert(model);
|
||||||
|
|
||||||
if (StringUtils.isBlank(model.getAgent())) {
|
if (StringUtils.isBlank(model.getAgent())) {
|
||||||
model.setAgent(seqService.nextValStr(model.getTenantId(), seqName));
|
model.setAgent(seqService.nextValStr(model.getTenantId(), seqName));
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ export default BaseRoute.extend({
|
|||||||
const store = this.get('store');
|
const store = this.get('store');
|
||||||
const queryParams = this.get('activeListQueryParams');
|
const queryParams = this.get('activeListQueryParams');
|
||||||
return RSVP.hash({
|
return RSVP.hash({
|
||||||
|
batch: false,
|
||||||
wrapUpTime: 24000,
|
wrapUpTime: 24000,
|
||||||
active: true,
|
active: true,
|
||||||
trunkDialAllowed: false,
|
trunkDialAllowed: false,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import Service from '../service';
|
import Service from '../service';
|
||||||
|
import { isBlank } from '@ember/utils';
|
||||||
|
|
||||||
export default Service.extend({
|
export default Service.extend({
|
||||||
modelName: 'Agent',
|
modelName: 'Agent',
|
||||||
@ -16,8 +17,32 @@ export default Service.extend({
|
|||||||
account: {
|
account: {
|
||||||
presence: true,
|
presence: true,
|
||||||
length: {
|
length: {
|
||||||
minimum: 1,
|
minimum: 4,
|
||||||
maximum: 36
|
maximum: 36
|
||||||
|
},
|
||||||
|
format: {
|
||||||
|
pattern: /^\w+$/,
|
||||||
|
message: '仅允许字母数字'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
agent: {
|
||||||
|
length: function(value) {
|
||||||
|
if (isBlank(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
minimum: 4,
|
||||||
|
maximum: 36
|
||||||
|
};
|
||||||
|
},
|
||||||
|
format: function(value) {
|
||||||
|
if (isBlank(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
pattern: /^[1-9]+\d*$/,
|
||||||
|
message: '仅允许数字'
|
||||||
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
wrapUpTime: {
|
wrapUpTime: {
|
||||||
@ -46,5 +71,10 @@ export default Service.extend({
|
|||||||
greaterThan: -1
|
greaterThan: -1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
createBatchConstraints: {
|
||||||
|
agents: {
|
||||||
|
presence: true
|
||||||
|
}
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{{#form-content}}
|
{{#form-content}}
|
||||||
<hr />
|
<hr />
|
||||||
|
{{form-input-checkbox name='batch' label='单条/批量'}}
|
||||||
{{form-input-select
|
{{form-input-select
|
||||||
name='groupId'
|
name='groupId'
|
||||||
label='坐席组'
|
label='坐席组'
|
||||||
@ -8,8 +9,16 @@
|
|||||||
text-field='name'
|
text-field='name'
|
||||||
enabled-field='active'
|
enabled-field='active'
|
||||||
}}
|
}}
|
||||||
{{form-input name='name' label='名称'}}
|
|
||||||
{{form-input name='account' label='账户'}}
|
{{#if model.batch}}
|
||||||
|
{{form-input type='textarea' name='agents' label='坐席' placeholder='坐席数据[姓名 账户 分机号],支持多行,其中账户必选,姓名分机号可选,如:东皇 donghuang 700002'}}
|
||||||
|
{{form-input-checkbox name='updateExisted' label='更新已存在'}}
|
||||||
|
{{else}}
|
||||||
|
{{form-input name='name' label='名称'}}
|
||||||
|
{{form-input name='account' label='账户'}}
|
||||||
|
{{form-input name='agent' label='分机号' placeholder='数字分机号,空则自动生成'}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{form-input-select
|
{{form-input-select
|
||||||
readonly=true
|
readonly=true
|
||||||
name='type'
|
name='type'
|
||||||
@ -25,7 +34,7 @@
|
|||||||
{{form-input type='number' min=0 max=24000 step=1 name='wrapUpTime' label='Wrap up time'}}
|
{{form-input type='number' min=0 max=24000 step=1 name='wrapUpTime' label='Wrap up time'}}
|
||||||
{{form-input-checkbox name='trunkDialAllowed' label='允许手拨外呼'}}
|
{{form-input-checkbox name='trunkDialAllowed' label='允许手拨外呼'}}
|
||||||
{{form-input-checkbox name='internalDialAllowed' label='允许拨打分机'}}
|
{{form-input-checkbox name='internalDialAllowed' label='允许拨打分机'}}
|
||||||
{{form-input-select
|
{{!form-input-select
|
||||||
multiple=true
|
multiple=true
|
||||||
name='queues'
|
name='queues'
|
||||||
label='队列'
|
label='队列'
|
||||||
@ -46,6 +55,7 @@
|
|||||||
|
|
||||||
{{form-input name='note' label='备注'}}
|
{{form-input name='note' label='备注'}}
|
||||||
<hr />
|
<hr />
|
||||||
{{form-footer-buttons type='create'}}
|
{{form-footer-buttons type=(if model.batch 'createBatch' 'create')
|
||||||
|
post-url=(if model.batch 'agent/create-batch') success-message='创建成功'}}
|
||||||
{{/form-content}}
|
{{/form-content}}
|
||||||
{{outlet}}
|
{{outlet}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user