add batch create agent

This commit is contained in:
Shaun Chyxion 2021-11-17 01:01:43 +08:00
parent 8533faf904
commit 3e1f16dea5
6 changed files with 80 additions and 22 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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));
} }

View File

@ -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,

View File

@ -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
}
},
}); });

View File

@ -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}}