diff --git a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CallingListServiceImpl.java b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CallingListServiceImpl.java index 7b261da4..9fdc41af 100644 --- a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CallingListServiceImpl.java +++ b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CallingListServiceImpl.java @@ -78,11 +78,17 @@ public class CallingListServiceImpl * {@inheritDoc} */ @Override + @Transactional(rollbackFor = Exception.class) public int redial(final FormRedial form) { val arg = form.copy(new ReqCallingListRedial()); arg.setOperator(form.getAuthUser()); log.info("RedialCallingList|{}", arg); - return mapper.redial(arg); + mapper.redial(arg); + mapper.removeAnswered(arg); + mapper.removeCalled7Times(arg); + mapper.removeCalledTwiceToday(arg); + mapper.removeCalledIn4Hours(arg); + return mapper.readyRedial(arg); } /** diff --git a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.java b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.java index 4b73b603..91345c1c 100644 --- a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.java +++ b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.java @@ -31,6 +31,46 @@ public interface CallingListMapper extends BaseMapper { */ int redial(@Param("arg") ReqCallingListRedial arg); + /** + * 删除接通过 + * + * @param arg arg + * @return update rows + */ + int removeAnswered(@Param("arg") ReqCallingListRedial arg); + + /** + * 删除拨打超过7次 + * + * @param arg arg + * @return update rows + */ + int removeCalled7Times(@Param("arg") ReqCallingListRedial arg); + + /** + * 删除今日拨打超过1次 + * + * @param arg arg + * @return update rows + */ + int removeCalledTwiceToday(@Param("arg") ReqCallingListRedial arg); + + /** + * 删除4小时内拨打过 + * + * @param arg arg + * @return update rows + */ + int removeCalledIn4Hours(@Param("arg") ReqCallingListRedial arg); + + /** + * Ready redial + * + * @param arg arg + * @return update rows + */ + int readyRedial(@Param("arg") ReqCallingListRedial arg); + /** * insert prepared calling list * diff --git a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.xml b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.xml index 95f94c01..ff6c3948 100644 --- a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.xml +++ b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CallingListMapper.xml @@ -81,52 +81,15 @@ - update br_calling_list c + update c - - date(subdate(now(), 21)) - group by called_number - having count(answer_stamp) > 0) t1 - ]]> - on c.phone = t1.called_number - - date(subdate(now(), 21)) - group by called_number - having count(id) > 7) t2 - ]]> - on c.phone = t2.called_number - - date(now()) - group by called_number - having count(id) > 1) t3 - ]]> - on c.phone = t3.called_number - - date(now()) - group by called_number - having max(start_stamp) > now() - interval 4 hour) t4 - ]]> - on c.phone = t4.called_number - - set c.status = 'READY', - c.daily_from = time_to_sec(now()), - c.daily_to = time_to_sec(now() + interval 2 hour), + set c.status = 'REDIAL', c.note = concat('REDIAL_', c.note), - c.updated_by = #{arg.operator} + c.updated_by = #{arg.operator}, + c.updated_time = now() - where c.campaign_id = #{arg.campaignId} + where c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} and c.task_key = #{arg.taskKey} and c.daily_from = #{arg.dailyFrom} and c.daily_to = #{arg.dailyTo} @@ -135,14 +98,244 @@ and c.status = 'CALLED' and c.called_times = 1 and c.last_call_duration = 0 - and last_call_start_time between - now() - interval 12 hour - and now() - interval 4 hour + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + - and t1.called_number is null - and t2.called_number is null - and t3.called_number is null - and t4.called_number is null + + update c + + join ( + select c.phone + from c + + join br_call_detail_record cdr + on c.phone = cdr.called_number + + date(now() - interval 21 day) + and cdr.tenant_id = #{arg.tenantId} + and cdr.answer_stamp is not null + + and c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + group by cdr.called_number + having count(cdr.id) > 0 + ]]> + ) t1 + on c.phone = t1.phone + + set c.active = 0, + c.note = 'Answered', + c.updated_by = #{arg.operator}, + c.updated_time = now() + + where c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + + + + update c + + join ( + select c.phone + from c + + join br_call_detail_record cdr + on c.phone = cdr.called_number + + date(now() - interval 21 day) + and cdr.tenant_id = #{arg.tenantId} + + and c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + group by cdr.called_number + having count(cdr.id) > 7 + ]]> + ) t1 + on c.phone = t1.phone + + set c.active = 0, + c.note = 'Exceed 7 Times', + c.updated_by = #{arg.operator}, + c.updated_time = now() + + where c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + + + + update c + + join ( + select c.phone + from c + + join br_call_detail_record cdr + on c.phone = cdr.called_number + + date(now()) + and cdr.tenant_id = #{arg.tenantId} + + and c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + group by cdr.called_number + having count(cdr.id) > 1 + ]]> + ) t1 + on c.phone = t1.phone + + set c.active = 0, + c.note = 'Exceed 1 Times Today', + c.updated_by = #{arg.operator}, + c.updated_time = now() + + where c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + + + update c + + join ( + select c.phone + from c + + join br_call_detail_record cdr + on c.phone = cdr.called_number + + now() - interval 4 hour + and cdr.tenant_id = #{arg.tenantId} + + and c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) and now() - interval 4 hour + + group by cdr.called_number + having count(cdr.id) > 0 + ]]> + ) t1 + on c.phone = t1.phone + + set c.active = 0, + c.note = 'Called In 4 Hours', + c.updated_by = #{arg.operator}, + c.updated_time = now() + + where c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + date(now()) + and now() - interval 4 hour + + + + update c + + set c.status = 'READY', + c.daily_from = time_to_sec(now()), + c.daily_to = time_to_sec(now() + interval 2 hour), + c.updated_by = #{arg.operator}, + c.updated_time = now() + + where c.tenant_id = #{arg.tenantId} + and c.campaign_id = #{arg.campaignId} + and c.task_key = #{arg.taskKey} + and c.daily_from = #{arg.dailyFrom} + and c.daily_to = #{arg.dailyTo} + and c.type = #{arg.type} + and c.active = 1 + and c.status = 'REDIAL' + and c.called_times = 1 + and c.last_call_duration = 0 + and c.last_call_start_time between + now() - interval 12 hour + and now() - interval 4 hour diff --git a/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CallingListMapperTest.java b/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CallingListMapperTest.java index 14a75967..8906a888 100644 --- a/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CallingListMapperTest.java +++ b/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CallingListMapperTest.java @@ -37,14 +37,16 @@ public class CallingListMapperTest { @Test public void testRedial() { val arg = new ReqCallingListRedial(); + arg.setTenantId(1); arg.setOperator("donghuang"); arg.setCampaignId(6); - arg.setTaskKey("5f72bca1361812638aa13494"); + arg.setTaskKey("43AAAFC1F2B4C09B8DF1AF023458FA8"); arg.setType(CallingList.Type.OLD); - arg.setDailyFrom(new DailyTime(49200)); - arg.setDailyTo(new DailyTime(54000)); + arg.setDailyFrom(new DailyTime(52200)); + arg.setDailyTo(new DailyTime(72000)); val result = mapper.redial(arg); + // val result = mapper.readyRedial(arg); log.info("Redial: {}", result); } diff --git a/lib/model/src/main/java/com/pudonghot/yo/model/domain/CallingList.java b/lib/model/src/main/java/com/pudonghot/yo/model/domain/CallingList.java index 35c89b21..36b87947 100644 --- a/lib/model/src/main/java/com/pudonghot/yo/model/domain/CallingList.java +++ b/lib/model/src/main/java/com/pudonghot/yo/model/domain/CallingList.java @@ -14,7 +14,7 @@ import lombok.experimental.FieldNameConstants; */ @Getter @Setter -@Table("br_calling_list") +@Table("br_calling_list_test") @FieldNameConstants(prefix = "") public class CallingList extends BaseDomain { @NotUpdate @@ -52,7 +52,7 @@ public class CallingList extends BaseDomain { private Date lockTime; public enum Status { - NOT_READY, READY, ACHIEVED, DIALING, CALLED, CANCELED, REVERT, BLOCKED + NOT_READY, READY, ACHIEVED, DIALING, CALLED, CANCELED, REVERT, BLOCKED, REDIAL } public enum Type { diff --git a/lib/model/src/main/java/com/pudonghot/yo/model/request/ReqCallingListRedial.java b/lib/model/src/main/java/com/pudonghot/yo/model/request/ReqCallingListRedial.java index afe43e9f..aedc6cbd 100644 --- a/lib/model/src/main/java/com/pudonghot/yo/model/request/ReqCallingListRedial.java +++ b/lib/model/src/main/java/com/pudonghot/yo/model/request/ReqCallingListRedial.java @@ -17,6 +17,7 @@ import com.pudonghot.yo.model.domain.CallingList; public class ReqCallingListRedial implements Serializable { private static final long serialVersionUID = 1L; + private Integer tenantId; private String operator; private Integer campaignId; private CallingList.Type type;