diff --git a/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateBatchFormAgent.java b/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateBatchFormAgent.java index 5fa89f64..1c9d5d45 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateBatchFormAgent.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateBatchFormAgent.java @@ -25,7 +25,7 @@ public class CreateBatchFormAgent extends BaseCreateForm implements TaggableForm private Boolean webrtc; @Trim @NotBlank - private String accounts; + private String agents; @Trim @EmptyToNull private String password; diff --git a/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateFormAgent.java b/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateFormAgent.java index 68b23242..7dab75c6 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateFormAgent.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/form/create/CreateFormAgent.java @@ -2,12 +2,12 @@ package com.pudonghot.yo.cms.form.create; import lombok.Getter; import lombok.Setter; +import javax.validation.constraints.*; 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.pudonghot.yo.cms.form.TaggableForm; import com.pudonghot.yo.cms.form.BaseCreateForm; +import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Range; import com.wacai.tigon.format.annotation.EmptyToNull; @@ -28,9 +28,15 @@ public class CreateFormAgent extends BaseCreateForm implements TaggableForm { private String name; @Trim @NotBlank + @Length(min = 4, max = 32) + @Pattern(regexp = "^\\w+$") private String account; @Trim @EmptyToNull + @Pattern(regexp = "^[1-9]+\\d*$") + private String agent; + @Trim + @EmptyToNull private String password; @Range(min = 0, max = 240000) private Integer wrapUpTime; 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 07b0c855..6261ab5e 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 @@ -120,39 +120,49 @@ public class AgentServiceImpl private Pair, List> batchCreateValidate( final CreateBatchFormAgent form) { - val accounts = form.getAccounts().split("\n"); - val agentsCreate = new ArrayList(accounts.length); - val agentsUpdate = new ArrayList(accounts.length); + val agents = form.getAgents().split("\\s*\n\\s*"); + val agentsCreate = new ArrayList(agents.length); + val agentsUpdate = new ArrayList(agents.length); - - for (val line : accounts) { + for (val line : agents) { if (StringUtils.isNotBlank(line)) { log.info("Create agent [{}].", line); - val agentData = line.split("\\s\\+"); - Assert.state(agentData.length < 3, () -> "Agent info [" + agentData + "] is not valid"); + val agentData = line.split("[\\s,;]+"); + Assert.state(agentData.length < 4, + () -> "Agent info [" + agentData + "] is not valid"); 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]+$"), - "Agent [" + line + "] account [" + account + "] is not valid"); + Assert.state(account.matches("^\\w+$"), + () -> "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) { Assert.state(form.getUpdateExisted(), () -> "Agent [" + account + "] existed"); - val formUpdate = jsonService.convert(form, UpdateFormAgent.class); + val formUpdate = jsonService.convert( + form, UpdateFormAgent.class); formUpdate.setId(agentExisted.getId()); formUpdate.setName(name); agentsUpdate.add(formUpdate); continue; } - val formCreate = jsonService.convert(form, CreateFormAgent.class); + val formCreate = jsonService.convert( + form, CreateFormAgent.class); formCreate.setName(name); formCreate.setAccount(account); + formCreate.setAgent(account); agentsCreate.add(formCreate); } } @@ -242,6 +252,7 @@ public class AgentServiceImpl @Override protected void beforeInsert(final Agent model) { super.beforeInsert(model); + if (StringUtils.isBlank(model.getAgent())) { model.setAgent(seqService.nextValStr(model.getTenantId(), seqName)); } diff --git a/web/cms/app/routes/agent/create.js b/web/cms/app/routes/agent/create.js index ca019b32..b6128a67 100644 --- a/web/cms/app/routes/agent/create.js +++ b/web/cms/app/routes/agent/create.js @@ -8,6 +8,7 @@ export default BaseRoute.extend({ const store = this.get('store'); const queryParams = this.get('activeListQueryParams'); return RSVP.hash({ + batch: false, wrapUpTime: 24000, active: true, trunkDialAllowed: false, diff --git a/web/cms/app/services/agent/service.js b/web/cms/app/services/agent/service.js index 7d084ecb..758814ad 100644 --- a/web/cms/app/services/agent/service.js +++ b/web/cms/app/services/agent/service.js @@ -1,4 +1,5 @@ import Service from '../service'; +import { isBlank } from '@ember/utils'; export default Service.extend({ modelName: 'Agent', @@ -16,8 +17,32 @@ export default Service.extend({ account: { presence: true, length: { - minimum: 1, + minimum: 4, 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: { @@ -46,5 +71,10 @@ export default Service.extend({ greaterThan: -1 } } - } + }, + createBatchConstraints: { + agents: { + presence: true + } + }, }); diff --git a/web/cms/app/templates/agent/create.hbs b/web/cms/app/templates/agent/create.hbs index 2884c161..6bb2b6c7 100644 --- a/web/cms/app/templates/agent/create.hbs +++ b/web/cms/app/templates/agent/create.hbs @@ -1,5 +1,6 @@ {{#form-content}}
+ {{form-input-checkbox name='batch' label='单条/批量'}} {{form-input-select name='groupId' label='坐席组' @@ -8,8 +9,16 @@ text-field='name' 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 readonly=true name='type' @@ -25,7 +34,7 @@ {{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='internalDialAllowed' label='允许拨打分机'}} - {{form-input-select + {{!form-input-select multiple=true name='queues' label='队列' @@ -46,6 +55,7 @@ {{form-input name='note' label='备注'}}
- {{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}} {{outlet}}