Commit 6aa92f53 authored by đinh thị đầm's avatar đinh thị đầm

Merge branch 'master' of http://git.myitsol.com/hanv/service-campaign

# Conflicts:
#	src/main/java/com/viettel/campaign/repository/ccms_full/CampaignCustomerRepository.java
#	src/main/java/com/viettel/campaign/service/impl/CustomerServiceImpl.java
#	src/main/java/com/viettel/campaign/web/rest/CustomerController.java
parents 0a2fe6a7 dfc637fe
...@@ -49,8 +49,8 @@ ...@@ -49,8 +49,8 @@
<dependency> <dependency>
<groupId>com.oracle</groupId> <groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId> <artifactId>ojdbc7</artifactId>
<scope>system</scope> <!-- <scope>system</scope>-->
<systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath> <!-- <systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>-->
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -2,31 +2,21 @@ package com.viettel.campaign.mapper; ...@@ -2,31 +2,21 @@ package com.viettel.campaign.mapper;
import com.viettel.campaign.model.ccms_full.CampaignAgent; import com.viettel.campaign.model.ccms_full.CampaignAgent;
import com.viettel.campaign.web.dto.CampaignAgentDTO; import com.viettel.campaign.web.dto.CampaignAgentDTO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
public class CampaignAgentMapper extends BaseMapper<CampaignAgent, CampaignAgentDTO> { public class CampaignAgentMapper extends BaseMapper<CampaignAgent, CampaignAgentDTO> {
@Autowired
ModelMapper modelMapper;
@Override @Override
public CampaignAgentDTO toDtoBean(CampaignAgent campaignAgent) { public CampaignAgentDTO toDtoBean(CampaignAgent campaignAgent) {
CampaignAgentDTO obj = new CampaignAgentDTO(); return modelMapper.map(campaignAgent, CampaignAgentDTO.class);
obj.setAgentId(campaignAgent.getAgentId());
obj.setCampaignAgentId(campaignAgent.getCampaignAgentId());
obj.setCampaignId(campaignAgent.getCampaignId());
obj.setCompanySiteId(campaignAgent.getCompanySiteId());
obj.setFilterType(campaignAgent.getFilterType());
obj.setReSchedule(campaignAgent.getReSchedule());
obj.setStatus(campaignAgent.getStatus());
return obj;
} }
@Override @Override
public CampaignAgent toPersistenceBean(CampaignAgentDTO dtoBean) { public CampaignAgent toPersistenceBean(CampaignAgentDTO dtoBean) {
CampaignAgent obj = new CampaignAgent(); return modelMapper.map(dtoBean, CampaignAgent.class);
obj.setAgentId(dtoBean.getAgentId());
obj.setCampaignAgentId(dtoBean.getCampaignAgentId());
obj.setCampaignId(dtoBean.getCampaignId());
obj.setCompanySiteId(dtoBean.getCompanySiteId());
obj.setFilterType(dtoBean.getFilterType());
obj.setReSchedule(dtoBean.getReSchedule());
obj.setStatus(dtoBean.getStatus());
return obj;
} }
} }
...@@ -12,11 +12,14 @@ import java.util.Date; ...@@ -12,11 +12,14 @@ import java.util.Date;
@Getter @Getter
@Setter @Setter
public class CampaignCustomer { public class CampaignCustomer {
@Id @Id
@GeneratedValue(generator = "CAMPAIGN_CUSTOMER_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUSTOMER_SEQ", sequenceName = "CAMPAIGN_CUSTOMER_SEQ", allocationSize = 1)
@Basic(optional = false) @Basic(optional = false)
@NotNull @NotNull
@Column(name = "CAMPAIGN_CUSTOMERLIST_ID") @Column(name = "CAMPAIGN_CUSTOMER_ID")
private Long campaignCustomerListId; private Long campaignCustomerId;
@Column(name = "CAMPAIGN_ID") @Column(name = "CAMPAIGN_ID")
private Long campaignId; private Long campaignId;
@Column(name = "CUSTOMER_ID") @Column(name = "CUSTOMER_ID")
......
package com.viettel.campaign.model.ccms_full;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
@Entity
@Table(name = "CAMPAIGN_CUSTOMERLIST_COLUMN")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class CampaignCustomerListColumn implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "CAMPAIGN_CUS_LIST_COLUMN_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUS_LIST_COLUMN_SEQ", sequenceName = "CAMPAIGN_CUS_LIST_COLUMN_SEQ", allocationSize = 1)
@NotNull
@Column(name = "CAMPAIGN_CUS_LIST_COLUMN_ID")
private Long campaignCusListColId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Size(max = 200)
@Column(name = "COLUMN_NAME")
private String columnName;
@Column(name = "ORDER_INDEX")
private Long orderIndex;
@Column(name = "CUSTOMIZE_FIELD_ID")
private Long customizeFieldId;
@Size(max = 200)
@Column(name = "CUSTOMIZE_FIELD_TITLE")
private String customizeFieldTitle;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "CONTACT_CUST_RESULT")
@Getter
@Setter
public class ContactCustResult implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "CONTACT_CUST_RESULT_SEQ")
@SequenceGenerator(name = "CONTACT_CUST_RESULT_SEQ", sequenceName = "CONTACT_CUST_RESULT_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "CONTACT_CUST_RESULT_ID")
private Long contactCustResultId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CALL_STATUS")
private Short callStatus;
@Column(name = "CONTACT_STATUS")
@NotNull
private Short contactStatus;
@Column(name = "STATUS")
private Short status;
@Column(name = "SATISFACTION")
private Integer satisfaction;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "CREATE_TIME")
@NotNull
private Date createTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "UPDATE_TIME")
private Date updateTime;
@Column(name = "UPDATE_BY")
private Long updateBy;
@Column(name = "CAMPAIGN_ID")
@NotNull
private Long campaignId;
@Column(name = "OLD_CONTACT_CUST_RESULT_ID")
private Long oldContactCustResultId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "DURATION_CALL")
private Long durationCall;
@Column(name = "START_CALL")
private Date startCall;
@Column(name = "RECEIVE_CUST_LOG_ID")
@NotNull
private Long receiveCustLogId;
@Column(name = "IPCC_CALL_STATUS")
private Short ipccCallStatus;
@Column(name = "CALL_ID")
private String callId;
@Column(name = "PHONE_NUMBER")
@NotNull
private String phoneNumber;
@Column(name = "RECEIVE_TIME")
@NotNull
private Date receiveTime;
@Column(name = "PRE_END_TIME")
private Date preEndTime;
@Column(name = "URL_CALL")
private String urlCall;
@Column(name = "TRANSACTION_ID")
private String transactionId;
@Column(name = "RECALL_TIME")
private Date recallTime;
@Column(name = "IS_FINAL_RECALL")
private Short isFinalRecall;
@Column(name = "IS_SEND_EMAIL")
private Short isSendEmail = 0;
@Column(name = "SALED_ON_TPIN")
private Long saledOnTpin;
@Column(name = "END_TIME")
private Date endTime;
@Column(name = "WAIT_TIME")
private Long waitTime;
@Column(name = "DIAL_MODE")
private String dialMode;
@Column(name = "WRAPUP_TIME")
private Long wrapupTime;
@Column(name = "TIME_MAKE_CALL")
private Long timeMakeCall = 0L;
@Column(name = "TIME_RECEIVE_CUST")
private Long timeReceiveCust = 0L;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Entity
@Table(name = "CONTACT_QUEST_RESULT")
@Getter
@Setter
public class ContactQuestResult implements Serializable {
@Id
@Column(name = "CONTACT_QUEST_RESULT_ID")
@NotNull
private Long contactQuestResultId;
@Column(name = "CONTACT_CUST_RESULT_ID")
@NotNull
private Long contactCustResultId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "SCENARIO_QUESTION_ID")
@NotNull
private Long scenarioQuestionId;
@Column(name = "OTHER_OPINION")
private String otherOpinion;
@Column(name = "SCENARIO_ANSWER_ID")
private Long scenarioAnswerId;
@Column(name = "STATUS")
private Short status;
@Column(name = "OLD_CONTACT_CUST_RESULT_ID")
private Long oldContactCustResultId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "CAMPAIGN_ID")
@NotNull
private Long campaignId;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "RECEIVE_CUST_LOG")
@Getter
@Setter
public class ReceiveCustLog implements Serializable {
@Id
@GeneratedValue(generator = "RECEIVE_CUST_LOG_SEQ")
@SequenceGenerator(name = "RECEIVE_CUST_LOG_SEQ", sequenceName = "RECEIVE_CUST_LOG_SEQ", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "RECEIVE_CUST_LOG_ID")
private Long receiveCustLogId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "START_TIME")
@Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date startTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "END_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date endTime;
}
...@@ -3,6 +3,9 @@ package com.viettel.campaign.repository.acd_full; ...@@ -3,6 +3,9 @@ package com.viettel.campaign.repository.acd_full;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.acd_full.Agents; import com.viettel.campaign.model.acd_full.Agents;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -11,4 +14,8 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -11,4 +14,8 @@ import org.springframework.transaction.annotation.Transactional;
public interface AgentsRepository extends JpaRepository<Agents, String> { public interface AgentsRepository extends JpaRepository<Agents, String> {
Agents findByAgentId(String agentId); Agents findByAgentId(String agentId);
@Modifying
@Query(value = "UPDATE Agents SET campaignSystemStatus = :campaignSystemStatus WHERE agentId = :agentId")
void updateAgentLogoutFromCampaign(@Param("agentId") Long agentId, @Param("campaignSystemStatus") String campaignSystemStatus);
} }
...@@ -21,6 +21,6 @@ public interface ApParamRepository extends JpaRepository<ApParam, Long>, ApParam ...@@ -21,6 +21,6 @@ public interface ApParamRepository extends JpaRepository<ApParam, Long>, ApParam
@Query(value = "SELECT p FROM ApParam p WHERE status = 1 AND parType LIKE concat('%', :parType, '%') ") @Query(value = "SELECT p FROM ApParam p WHERE status = 1 AND parType LIKE concat('%', :parType, '%') ")
List<ApParam> findParamByParType(@Param("parType") String parType); List<ApParam> findParamByParType(@Param("parType") String parType);
@Query(value = "select a from ApParam a WHERE status = 1 AND parType = 'CAMPAIGN_TYPE'") @Query(value = "FROM ApParam WHERE status = 1 AND parType = :parType")
List<ApParam> findAllParam(); List<ApParam> findAllParam(@Param("parType") String parType);
} }
...@@ -2,51 +2,37 @@ package com.viettel.campaign.repository.ccms_full; ...@@ -2,51 +2,37 @@ package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCustomer; import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.model.ccms_full.Customer;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List; import java.util.List;
@Repository
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long> { public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long>, CampaignCustomerRepositoryCustom {
@Query(value = "SELECT COUNT(*) " +
" FROM CAMPAIGN_CUSTOMER CC " +
" JOIN CAMPAIGN C ON CC.CAMPAIGN_ID = C.CAMPAIGN_ID " +
" LEFT JOIN CAMPAIGN_COMPLETE_CODE CCC ON CC.STATUS = CCC.COMPLETE_VALUE" +
" WHERE CC.COMPANY_SITE_ID = :companySiteId " +
" AND CC.AGENT_ID = :agentId" +
" AND C.STATUS = 2 " +
" AND CC.RECALL_TIME <= SYSDATE " +
" AND CCC.IS_RECALL = 1", nativeQuery = true)
Long countRecallCustomer(@Param("companySiteId") Long pCompanySiteId, @Param("agentId") Long agentId);
@Query(value = "SELECT COUNT(*) " + @Query(value = "SELECT COUNT(*) " +
"FROM CAMPAIGN_CUSTOMER CC JOIN CAMPAIGN_COMPLETE_CODE CCC ON CC.CAMPAIGN_ID = CCC.CAMPAIGN_ID " + "FROM CAMPAIGN_CUSTOMER CC JOIN CAMPAIGN_COMPLETE_CODE CCC ON CC.CAMPAIGN_ID = CCC.CAMPAIGN_ID " +
"WHERE CC.STATUS = 3 AND CC.CAMPAIGN_ID = :campaignId AND CC.CUSTOMER_ID = :customerId AND CCC.IS_RECALL = 1 AND CCC.STATUS = 1 ", "WHERE CC.CAMPAIGN_ID = :campaignId " +
nativeQuery = true) "AND CC.CUSTOMER_ID = :customerId " +
"AND CC.STATUS = 3 " +
"AND CCC.IS_RECALL = 1 " +
"AND CCC.STATUS = 1 ", nativeQuery = true)
Long getCustomerRecall(@Param("campaignId") Long campaignId, @Param("customerId") Long customerId); Long getCustomerRecall(@Param("campaignId") Long campaignId, @Param("customerId") Long customerId);
@Query(value = "SELECT cc.customer_id \n" + CampaignCustomer findCampaignCustomerByCampaignCustomerId(Long id);
"FROM campaign_customer cc LEFT JOIN receive_cust_log cl ON cc.customer_id = cl.customer_id\n" +
"WHERE cc.campaign_id = :campaignId \n" +
" AND cc.agent_id = :agentId \n" +
" AND cc.in_campaign_status = 1 \n" +
" AND cl.customer_id IS NULL \n" +
" AND EXISTS(SELECT 1 \n" +
" FROM campaign_complete_code ccc \n" +
" WHERE cc.status = ccc.complete_value \n" +
" AND ccc.status = 1 \n" +
" AND ccc.is_recall = 1 \n" +
" AND ccc.complete_type = 2 \n" +
" AND ccc.company_site_id = :companySiteId) \n" +
" AND cc.recall_time <= SYSDATE\n" +
" AND cc.recall_time + interval :apParam MINUTE >= SYSDATE", nativeQuery = true)
List<CampaignCustomer> getCustomerRecallDate(@Param("campaignId") Long campaignId, @Param("agentId") Long agentId, @Param("companySiteId") Long companySiteId, @Param("apParam") String apParam);
@Query("SELECT c FROM Customer c WHERE (?1 LIKE CONCAT('%', c.customerId, '%') AND ?1 = c.customerId)" +
"AND ?2 LIKE CONCAT('%', c.name, '%')" + "AND ?2 LIKE CONCAT('%', c.companyName, '%')"+ "AND ?3 LIKE CONCAT('%', c.gender, '%')" +
"AND c.status = 1 " + "AND ?4 LIKE CONCAT('%', c.currentAddress, '%')" + "AND ?5 LIKE CONCAT('%', c.placeOfBirth, '%')"
+ "AND ?6 LIKE CONCAT('%', c.dateOfBirth, '%')" + "AND ?8 LIKE CONCAT('%', c.mobileNumber, '%')"
+ "AND ?9 LIKE CONCAT('%', c.email, '%')" + "AND ?10 LIKE CONCAT('%', c.userName, '%')"
+ "AND ?11 LIKE CONCAT('%', c.customerType, '%')"
)
List<Customer> filterCustomer(Long customerId, String name, String companyName, Short gender,
String currentAddress,
String placeOfBirth, Date dateOfBirth, String mobileNumber, String email,
String userName, Long customerType
);
} }
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignCustomerRepositoryCustom {
List<CampaignCustomerDTO> getDataCampaignCustomer(CampaignCustomerDTO dto, String expression);
}
...@@ -22,4 +22,8 @@ public interface CampaignRepositoryCustom { ...@@ -22,4 +22,8 @@ public interface CampaignRepositoryCustom {
ResultDTO findCustomerListReallocation(CampaignRequestDTO dto); ResultDTO findCustomerListReallocation(CampaignRequestDTO dto);
//hungtt //hungtt
ResultDTO reallocationCustomer(CampaignRequestDTO dto); ResultDTO reallocationCustomer(CampaignRequestDTO dto);
//hungtt
ResultDTO getListFieldsNotShow(CampaignRequestDTO dto);
//hungtt
ResultDTO getListFieldsToShow(CampaignRequestDTO dto);
} }
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ContactCustResult;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ContactCustResultRepository extends JpaRepository<ContactCustResult, Long> {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ContactQuestResult;
import com.viettel.campaign.web.dto.ContactQuestResultDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ContactQuestResultRepository extends JpaRepository<ContactQuestResult, Long> {
List<ContactQuestResultDTO> findByCompanySiteIdAndCampaignId(Long companySiteId, Long campaignId);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ReceiveCustLog;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ReceiveCustLogRepository extends JpaRepository<ReceiveCustLog, Long> {
}
...@@ -2,8 +2,12 @@ package com.viettel.campaign.repository.ccms_full; ...@@ -2,8 +2,12 @@ package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer; import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
...@@ -11,4 +15,13 @@ import org.springframework.stereotype.Repository; ...@@ -11,4 +15,13 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface ScenarioAnswerRepository extends JpaRepository<ScenarioAnswer, Long> { public interface ScenarioAnswerRepository extends JpaRepository<ScenarioAnswer, Long> {
List<ScenarioAnswer> findByScenarioQuestionIdAndCompanySiteIdAndStatus(Long scenarioQuestionId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioAnswer WHERE scenarioQuestionId = :scenarioQuestionId AND companySiteId = :companySiteId AND status = 1")
Long getMaxAnswerOrderId(@Param("scenarioQuestionId") Long scenarioQuestionId, @Param("companySiteId") Long companySiteId);
Integer deleteScenarioAnswersByScenarioQuestionId(Long scenarioQuestionId);
ScenarioAnswer findScenarioAnswerByScenarioAnswerId(Long scenarioAnswerId);
} }
...@@ -14,11 +14,13 @@ import java.util.List; ...@@ -14,11 +14,13 @@ import java.util.List;
@Repository @Repository
public interface ScenarioQuestionRepository extends JpaRepository<ScenarioQuestion, Long> { public interface ScenarioQuestionRepository extends JpaRepository<ScenarioQuestion, Long> {
List<ScenarioQuestion> findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatus(Long scenarioId, Long campaignId, Long companySiteId, Short status); List<ScenarioQuestion> findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(Long scenarioId, Long campaignId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioQuestion WHERE scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1") @Query(value="SELECT MAX(orderIndex) FROM ScenarioQuestion WHERE scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1")
Long getMaxOrderId(@Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId); Long getMaxOrderId(@Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
@Query(value = "SELECT COUNT(1) FROM ScenarioQuestion WHERE code = :code AND scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1") @Query(value = "SELECT COUNT(1) FROM ScenarioQuestion WHERE code = :code AND scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1")
Integer countDuplicateQuestionCode(@Param("code") String code, @Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId); Integer countDuplicateQuestionCode(@Param("code") String code, @Param("scenarioId") Long scenarioId, @Param("campaignId") Long campaignId, @Param("companySiteId") Long companySiteId);
ScenarioQuestion findScenarioQuestionByScenarioQuestionId(Long scenarioQuestionId);
} }
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.repository.ccms_full.ApParamRepository;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepositoryCustom;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Transactional(DataSourceQualify.CCMS_FULL)
public class CampaignCustomerRepositoryImpl implements CampaignCustomerRepositoryCustom {
@Autowired
ApParamRepository apParamRepository;
@Autowired
@PersistenceContext(unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
public List<CampaignCustomerDTO> getDataCampaignCustomer(CampaignCustomerDTO customerDTO, String expression) {
List<CampaignCustomerDTO> result = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try {
SQLQuery query = session.createSQLQuery(expression);
query.setParameter("campaignId", customerDTO.getCampaignId());
query.setParameter("companySiteId", customerDTO.getCompanySiteId());
if (expression.contains(":agentId")) {
query.setParameter("agentId", customerDTO.getAgentId());
}
if (expression.contains(":dungSai")) {
List<ApParam> apParam = apParamRepository.findAllParam("DUNG_SAI");
query.setParameter("dungSai", apParam.get(0).getParValue());
}
query.addScalar("customerId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCustomerDTO.class));
result = query.list();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
session.close();
}
return result;
}
}
...@@ -108,213 +108,77 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -108,213 +108,77 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
public ResultDTO getInteractiveResult(CampaignRequestDTO dto) { public ResultDTO getInteractiveResult(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
List<ContactCustResultDTO> list = new ArrayList<>(); List<ContactCustResultDTO> list = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
// try {
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
// sb.append(sql);
StringBuilder sb = new StringBuilder();
sb.append(" select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,");
sb.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and b.campaign_type in (:p_list_compaign_type)");
sb.append(" and to_char(a.customer_id) like :p_customer_id");
sb.append(" and to_char(a.contact_status) in (:p_list_contact_status)");
sb.append(" and to_char(a.call_status) in (:p_list_survey_status)");
sb.append(" and to_char(a.status) in (:p_list_record_status)");
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
sb.append(" and a.phone_number like :p_phone_number");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
sb.append(" and b.campaign_code in (:p_list_campaign_id) ");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
sb.append(" and upper(b.campaign_name) like :p_campaign_name");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sb.append(" and upper(c.user_name) like :p_user_name");
}
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", dto.getCompanySiteId());
query.setParameter("p_customer_id", "%" + dto.getCustomerId()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_date_from", dto.getFromDate());
query.setParameter("p_date_to", dto.getToDate());
query.setParameterList("p_list_compaign_type", dto.getCampaignType().split(","));
query.setParameterList("p_list_contact_status", dto.getContactStatus().split(","));
query.setParameterList("p_list_survey_status", dto.getSurveyStatus().split(","));
query.setParameterList("p_list_record_status", dto.getRecordStatus().split(","));
query.setParameter("p_call_time_from", dto.getCallTimeFrom());
query.setParameter("p_call_time_to", dto.getCallTimeTo());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
}
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
query.setParameter("p_phone_number", "%" + dto.getPhoneNumber()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
query.setParameter("p_campaign_name", "%" + dto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
query.setParameter("p_user_name", "%" + dto.getAgentId().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("userName", new StringType());
query.addScalar("phoneNumber", new StringType());
query.addScalar("customerName", new StringType());
query.addScalar("createTime", new DateType());
query.addScalar("contactStatus", new StringType());
query.addScalar("surveyStatus", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("recordStatus", new ShortType());
query.addScalar("callTime", new LongType());
query.setResultTransformer(Transformers.aliasToBean(ContactCustResultDTO.class));
int count = 0;
list = query.list();
if (list.size() > 0) {
count = list.size();
}
Pageable pageable = SQLBuilder.buildPageable(dto);
if (pageable != null) {
query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
query.setMaxResults(pageable.getPageSize());
}
List<ContactCustResultDTO> data = query.list();
for (ContactCustResultDTO contactCustResultDTO : data) {
if (!"AGENT".equals(dto.getRoleUser())) {
contactCustResultDTO.setEnableEdit(true);
} else {
if (contactCustResultDTO.getRecordStatus() == 2) {
contactCustResultDTO.setEnableEdit(true);
} else if (contactCustResultDTO.getRecordStatus() == 1 && isLower24Hour(contactCustResultDTO.getCreateTime())) {
contactCustResultDTO.setEnableEdit(true);
} else {
contactCustResultDTO.setEnableEdit(false);
}
}
}
Page<ContactCustResultDTO> dataPage = new PageImpl<>(data, pageable, count);
resultDTO.setData(dataPage);
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
try { try {
// String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive"); // String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sb.append("with campaign_type_list as ("); sql.append("with campaign_type_list as (");
sb.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type"); sql.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
sb.append(" from dual"); sql.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_compaign_type, ',') +1"); sql.append(" connect by level <= regexp_count(:p_list_compaign_type, ',') +1");
sb.append(" ),"); sql.append(" ),");
sb.append(" contact_status_list as ("); sql.append(" contact_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status"); sql.append(" select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status");
sb.append(" from dual"); sql.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_contact_status, ',') +1"); sql.append(" connect by level <= regexp_count(:p_list_contact_status, ',') +1");
sb.append(" ),"); sql.append(" ),");
sb.append(" survey_status_list as ("); sql.append(" survey_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status"); sql.append(" select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status");
sb.append(" from dual"); sql.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_survey_status, ',') +1"); sql.append(" connect by level <= regexp_count(:p_list_survey_status, ',') +1");
sb.append(" ),"); sql.append(" ),");
sb.append(" record_status_list as ("); sql.append(" record_status_list as (");
sb.append(" select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status"); sql.append(" select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status");
sb.append(" from dual"); sql.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_record_status, ',') +1"); sql.append(" connect by level <= regexp_count(:p_list_record_status, ',') +1");
sb.append(" ),"); sql.append(" ),");
sb.append(" campaign_id_list as ("); sql.append(" campaign_id_list as (");
sb.append(" select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id"); sql.append(" select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id");
sb.append(" from dual"); sql.append(" from dual");
sb.append(" connect by level <= regexp_count(:p_list_campaign_id, ',') +1"); sql.append(" connect by level <= regexp_count(:p_list_campaign_id, ',') +1");
sb.append(" ),"); sql.append(" ),");
sb.append(" data_temp as ("); sql.append(" data_temp as (");
sb.append(" select b.campaign_code campaignCode,"); sql.append(" select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,"); sql.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,"); sql.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,"); sql.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,"); sql.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,"); sql.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,"); sql.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,"); sql.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,"); sql.append(" g.status status,");
sb.append(" a.status recordStatus,"); sql.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime"); sql.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a"); sql.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id"); sql.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id"); sql.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id"); sql.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value"); sql.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value"); sql.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id"); sql.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0"); sql.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id"); sql.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')"); sql.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')"); sql.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from"); sql.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to"); sql.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and to_char(a.customer_id) like '%'||:p_customer_id||'%'"); sql.append(" and to_char(a.customer_id) like '%'||:p_customer_id||'%'");
sb.append(" and b.campaign_type in (select campaign_type from campaign_type_list)"); sql.append(" and b.campaign_type in (select campaign_type from campaign_type_list)");
sb.append(" and to_char(a.contact_status) in (select contact_status from contact_status_list)"); sql.append(" and to_char(a.contact_status) in (select contact_status from contact_status_list)");
sb.append(" and to_char(a.call_status) in (select survey_status from survey_status_list)"); sql.append(" and to_char(a.call_status) in (select survey_status from survey_status_list)");
sb.append(" and to_char(a.status) in (select record_status from record_status_list)"); sql.append(" and to_char(a.status) in (select record_status from record_status_list)");
sb.append(" and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')"); sql.append(" and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')");
sb.append(" and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))"); sql.append(" and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))");
sb.append(" and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')"); sql.append(" and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')");
sb.append(" and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')"); sql.append(" and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')");
sb.append(" ),"); sql.append(" ),");
sb.append(" data as ("); sql.append(" data as (");
sb.append(" select a.*, rownum row_ from data_temp a"); sql.append(" select a.*, rownum row_ from data_temp a");
sb.append(" )"); sql.append(" )");
sb.append(" select * from data"); sql.append(" select * from data");
sb.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))"); sql.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
params.put("p_company_site_id", dto.getCompanySiteId()); params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId()); params.put("p_customer_id", dto.getCustomerId());
...@@ -327,12 +191,27 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -327,12 +191,27 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
params.put("p_call_time_from", dto.getCallTimeFrom()); params.put("p_call_time_from", dto.getCallTimeFrom());
params.put("p_list_campaign_id", dto.getCallTimeTo()); params.put("p_list_campaign_id", dto.getCallTimeTo());
params.put("p_phone_number", dto.getPhoneNumber()); params.put("p_phone_number", dto.getPhoneNumber());
params.put("p_campaign_name", dto.getCampaignName().toUpperCase()); params.put("p_campaign_name", DataUtil.isNullOrEmpty(dto.getCampaignName()) ? null : dto.getCampaignName().toUpperCase());
params.put("p_user_name", dto.getAgentId().toUpperCase()); params.put("p_user_name", dto.getAgentId().toUpperCase());
params.put("p_page_number", dto.getPage().toString()); params.put("p_page_number", dto.getPage().toString());
params.put("p_page_size", dto.getPageSize().toString()); params.put("p_page_size", dto.getPageSize().toString());
list = namedParameterJdbcTemplate.query(sql.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class)); list = namedParameterJdbcTemplate.query(sql.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
for (ContactCustResultDTO contactCustResultDTO : list) {
if (!"AGENT".equals(dto.getRoleUser())) {
contactCustResultDTO.setEnableEdit(true);
} else {
if (contactCustResultDTO.getRecordStatus() == 2) {
contactCustResultDTO.setEnableEdit(true);
} else if (contactCustResultDTO.getRecordStatus() == 1 && isLower24Hour(contactCustResultDTO.getCreateTime())) {
contactCustResultDTO.setEnableEdit(true);
} else {
contactCustResultDTO.setEnableEdit(false);
}
}
}
resultDTO.setListData(list); resultDTO.setListData(list);
resultDTO.setTotalRow(list.size()); resultDTO.setTotalRow(list.size());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
...@@ -342,132 +221,16 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -342,132 +221,16 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR); resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR); resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
} finally { } finally {
return resultDTO;
} }
// }
return resultDTO;
} }
@Override @Override
public List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto) { public List<ContactCustResultDTO> getExcelInteractiveResult(CampaignRequestDTO dto) {
List<ContactCustResultDTO> list = new ArrayList<>(); List<ContactCustResultDTO> list = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
// try {
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive");
//sb.append(sql);
StringBuilder sb = new StringBuilder();
sb.append("select b.campaign_code campaignCode,");
sb.append(" b.campaign_name campaignName,");
sb.append(" c.user_name userName,");
sb.append(" a.phone_number phoneNumber,");
sb.append(" d.name customerName,");
sb.append(" to_date(a.start_call, 'DD/MM/YYYY') startCall,");
sb.append(" e.complete_name contactStatus,");
sb.append(" f.complete_name surveyStatus,");
sb.append(" g.status status,");
sb.append(" a.status recordStatus,");
sb.append(" (a.end_time - a.start_call)*24*60 callTime");
sb.append(" from contact_cust_result a");
sb.append(" left join campaign b on a.campaign_id = b.campaign_id");
sb.append(" left join vsa_users c on a.agent_id = c.user_id");
sb.append(" left join customer d on a.customer_id = d.customer_id");
sb.append(" left join campaign_complete_code e on a.contact_status = e.complete_value");
sb.append(" left join campaign_complete_code f on a.call_status = e.complete_value");
sb.append(" left join campaign g on a.campaign_id = g.campaign_id");
sb.append(" where a.status <> 0");
sb.append(" and a.company_site_id = :p_company_site_id");
sb.append(" and a.create_time >= to_date(:p_date_from, 'DD/MM/YYYY')");
sb.append(" and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')");
sb.append(" and a.duration_call >= :p_call_time_from");
sb.append(" and a.duration_call <= :p_call_time_to");
sb.append(" and b.campaign_type in (:p_list_compaign_type)");
sb.append(" and to_char(a.customer_id) like :p_customer_id");
sb.append(" and to_char(a.contact_status) in (:p_list_contact_status)");
sb.append(" and to_char(a.call_status) in (:p_list_survey_status)");
sb.append(" and to_char(a.status) in (:p_list_record_status)");
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
sb.append(" and a.phone_number like :p_phone_number");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
sb.append(" and b.campaign_code in (:p_list_campaign_id) ");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
sb.append(" and upper(b.campaign_name) like :p_campaign_name");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
sb.append(" and upper(c.user_name) like :p_user_name");
}
SQLQuery query = session.createSQLQuery(sb.toString());
query.setParameter("p_company_site_id", dto.getCompanySiteId());
query.setParameter("p_customer_id", "%" + dto.getCustomerId()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
query.setParameter("p_date_from", dto.getFromDate());
query.setParameter("p_date_to", dto.getToDate());
query.setParameterList("p_list_compaign_type", dto.getCampaignType().split(","));
query.setParameterList("p_list_contact_status", dto.getContactStatus().split(","));
query.setParameterList("p_list_survey_status", dto.getSurveyStatus().split(","));
query.setParameterList("p_list_record_status", dto.getRecordStatus().split(","));
query.setParameter("p_call_time_from", dto.getCallTimeFrom());
query.setParameter("p_call_time_to", dto.getCallTimeTo());
if (!DataUtil.isNullOrEmpty(dto.getCampaignId())) {
query.setParameterList("p_list_campaign_id", dto.getCampaignId().split(","));
}
if (!DataUtil.isNullOrEmpty(dto.getPhoneNumber())) {
query.setParameter("p_phone_number", "%" + dto.getPhoneNumber()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getCampaignName())) {
query.setParameter("p_campaign_name", "%" + dto.getCampaignName().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
if (!DataUtil.isNullOrEmpty(dto.getAgentId())) {
query.setParameter("p_user_name", "%" + dto.getAgentId().toUpperCase()
.replace("\\", "\\\\")
.replaceAll("%", "\\%")
.replaceAll("_", "\\_")
+ "%");
}
query.addScalar("campaignCode", new StringType());
query.addScalar("campaignName", new StringType());
query.addScalar("userName", new StringType());
query.addScalar("phoneNumber", new StringType());
query.addScalar("customerName", new StringType());
query.addScalar("createTime", new DateType());
query.addScalar("contactStatus", new StringType());
query.addScalar("surveyStatus", new StringType());
query.addScalar("status", new ShortType());
query.addScalar("recordStatus", new ShortType());
query.addScalar("callTime", new LongType());
query.setResultTransformer(Transformers.aliasToBean(ContactCustResultDTO.class));
list = query.list();
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
try { try {
//String sql = SQLBuilder.getSqlQueryById(Constants.SQL_MODULES.MODULE_EXECUTE, "get-execute-interactive"); StringBuilder sb = new StringBuilder();
// BuildMyString.com generated code. Please enjoy your string responsibly.
StringBuilder sb2 = new StringBuilder();
sb.append("with campaign_type_list as ("); sb.append("with campaign_type_list as (");
sb.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type"); sb.append(" select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type");
...@@ -535,7 +298,6 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -535,7 +298,6 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
sb.append(" select * from data"); sb.append(" select * from data");
sb.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))"); sb.append(" where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))");
params.put("p_company_site_id", dto.getCompanySiteId()); params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_customer_id", dto.getCustomerId()); params.put("p_customer_id", dto.getCustomerId());
params.put("p_date_from", dto.getFromDate()); params.put("p_date_from", dto.getFromDate());
...@@ -547,12 +309,12 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository { ...@@ -547,12 +309,12 @@ public class CampaignExecuteRepositoryImp implements CampaignExecuteRepository {
params.put("p_call_time_from", dto.getCallTimeFrom()); params.put("p_call_time_from", dto.getCallTimeFrom());
params.put("p_list_campaign_id", dto.getCallTimeTo()); params.put("p_list_campaign_id", dto.getCallTimeTo());
params.put("p_phone_number", dto.getPhoneNumber()); params.put("p_phone_number", dto.getPhoneNumber());
params.put("p_campaign_name", dto.getCampaignName().toUpperCase()); params.put("p_campaign_name", DataUtil.isNullOrEmpty(dto.getCampaignName()) ? null : dto.getCampaignName().toUpperCase());
params.put("p_user_name", dto.getAgentId().toUpperCase()); params.put("p_user_name", dto.getAgentId().toUpperCase());
params.put("p_page_number", dto.getPage().toString()); params.put("p_page_number", dto.getPage().toString());
params.put("p_page_size", "0"); params.put("p_page_size", "0");
list = namedParameterJdbcTemplate.query(sb2.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class)); list = namedParameterJdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(ContactCustResultDTO.class));
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} finally { } finally {
......
...@@ -2,6 +2,7 @@ package com.viettel.campaign.repository.ccms_full.impl; ...@@ -2,6 +2,7 @@ package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCustomer; import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepositoryCustom; import com.viettel.campaign.repository.ccms_full.CampaignRepositoryCustom;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil; import com.viettel.campaign.utils.DataUtil;
...@@ -9,6 +10,7 @@ import com.viettel.campaign.utils.HibernateUtil; ...@@ -9,6 +10,7 @@ import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder; import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignDTO; import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.CustomerCustomDTO; import com.viettel.campaign.web.dto.CustomerCustomDTO;
import com.viettel.campaign.web.dto.FieldsToShowDTO;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO; import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -45,6 +47,9 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -45,6 +47,9 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL) @Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate; NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Override @Override
public ResultDTO search(CampaignRequestDTO requestDto) { public ResultDTO search(CampaignRequestDTO requestDto) {
logger.info("Start search campaign::"); logger.info("Start search campaign::");
...@@ -154,7 +159,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -154,7 +159,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
sb.append(" AND a.CUSTOMER_NUMBER <= :p_cusNumTo"); sb.append(" AND a.CUSTOMER_NUMBER <= :p_cusNumTo");
} }
sb.append(" ORDER BY a.START_TIME DESC "); sb.append(" ORDER BY a.CREATE_TIME DESC ");
SQLQuery query = session.createSQLQuery(sb.toString()); SQLQuery query = session.createSQLQuery(sb.toString());
if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) { if (!DataUtil.isNullOrEmpty(requestDto.getCampaignCode())) {
...@@ -408,13 +413,162 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom { ...@@ -408,13 +413,162 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCustomerListReallocation(CampaignRequestDTO dto) { public ResultDTO findCustomerListReallocation(CampaignRequestDTO dto) {
return null; ResultDTO resultDTO = new ResultDTO();
List<CustomerCustomDTO> list = new ArrayList<>();
Map<String, String> params = new HashMap<>();
StringBuilder stringBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-customer-reallocation");
stringBuilder.append(" with contact as (");
stringBuilder.append(" select customer_id, contact");
stringBuilder.append(" from (");
stringBuilder.append(" select * from customer_contact");
stringBuilder.append(" where status = 1");
stringBuilder.append(" and contact_type = 5");
stringBuilder.append(" and is_direct_line = 1");
stringBuilder.append(" order by create_date desc");
stringBuilder.append(" )");
stringBuilder.append(" where rownum = 1");
stringBuilder.append(" ),");
stringBuilder.append(" connect_status as (");
stringBuilder.append(" select complete_value, complete_name");
stringBuilder.append(" from campaign_complete_code");
stringBuilder.append(" where company_site_id = :p_company_site_id");
stringBuilder.append(" and complete_type = 1");
stringBuilder.append(" and complete_value <> 1");
stringBuilder.append(" ),");
stringBuilder.append(" connect_status_list as (");
stringBuilder.append(" select trim (regexp_substr(:p_list_connect_status, '[^,]+', 1, level)) connect_status");
stringBuilder.append(" from dual");
stringBuilder.append(" connect by level <= regexp_count(:p_list_connect_status, ',') +1");
stringBuilder.append(" ),");
stringBuilder.append(" data as (");
stringBuilder.append(" select a.campaign_customer_id campaignCustomerId,");
stringBuilder.append(" b.name customerName,");
stringBuilder.append(" c.contact mobileNumber,");
stringBuilder.append(" to_char(a.call_time, 'DD/MM/YYYY HH24:MI:SS') connectTime,");
stringBuilder.append(" d.complete_name connectStatus");
stringBuilder.append(" from campaign_customer a");
stringBuilder.append(" left join customer b on a.customer_id = b.customer_id");
stringBuilder.append(" left join contact c on a.customer_id = c.customer_id");
stringBuilder.append(" left join connect_status d on d.complete_value = a.status");
stringBuilder.append(" where a.campaign_id = :p_campaign_id");
stringBuilder.append(" and a.in_campaign_status = 1");
stringBuilder.append(" and a.status in (select connect_status from connect_status_list)");
stringBuilder.append(" order by connectTime desc, customerName");
stringBuilder.append(" ),");
stringBuilder.append(" final_data as (");
stringBuilder.append(" select a.*, rownum row_ from data a");
stringBuilder.append(" )");
stringBuilder.append(" select * from final_data");
stringBuilder.append(" where row_ >= ((:p_page_number - 1) * :p_page_size + 1)");
stringBuilder.append(" and row_ < (:p_page_number * :p_page_size + 1)");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_campaign_id", dto.getCampaignId());
params.put("p_list_connect_status", dto.getConnectStatus());
params.put("p_page_size", dto.getPageSize().toString());
params.put("p_page_number", dto.getPage().toString());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(CustomerCustomDTO.class));
resultDTO.setListData(list);
resultDTO.setTotalRow(list.size());
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO reallocationCustomer(CampaignRequestDTO dto) { public ResultDTO reallocationCustomer(CampaignRequestDTO dto) {
return null; ResultDTO resultDTO = new ResultDTO();
try {
List<CustomerCustomDTO> list = dto.getCustomerCustomDTOList();
for (CustomerCustomDTO customerCustomDTO: list) {
CampaignCustomer campaignCustomer = campaignCustomerRepository.findCampaignCustomerByCampaignCustomerId(customerCustomDTO.getCampaignCustomerId());
campaignCustomer.setStatus((short) 0);
campaignCustomer.setCallStatus(null);
campaignCustomer.setRedistribute((short) 1);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsNotShow(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-fields-not-show");
stringBuilder.append(" with column_name_temp as (");
stringBuilder.append(" select column_name columnName, 1 isFix from user_tab_columns, dual");
stringBuilder.append(" where table_name = 'CUSTOMER'");
stringBuilder.append(" )");
stringBuilder.append(" select * from column_name_temp");
stringBuilder.append(" where columnName not in (select column_name from campaign_customerlist_column)");
stringBuilder.append(" union all");
stringBuilder.append(" select title columnName, 0 isFix ");
stringBuilder.append(" from customize_fields, dual");
stringBuilder.append(" where function_code = 'CUSTOMER'");
stringBuilder.append(" and site_id = :p_company_site_id");
stringBuilder.append(" and customize_field_id not in (select customize_field_id");
stringBuilder.append(" from campaign_customerlist_column");
stringBuilder.append(" where campaign_customerlist_column.campaign_id = :p_campaign_id)");
params.put("p_company_site_id", dto.getCompanySiteId());
params.put("p_campaign_id", dto.getCampaignId());
list = namedParameterJdbcTemplate.query(stringBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsToShow(CampaignRequestDTO dto) {
ResultDTO resultDTO = new ResultDTO();
Map<String, String> params = new HashMap<>();
List<FieldsToShowDTO> list = new ArrayList<>();
StringBuilder sqlBuilder = new StringBuilder();
try {
// String sql = SQLBuilder.getSqlQueryById(SQLBuilder.SQL_MODULE_CAMPAIGN_MNG, "get-list-fields-to-show");
sqlBuilder.append(" select to_char(column_name) columnName, 1 isFix");
sqlBuilder.append(" from campaign_customerlist_column, dual");
sqlBuilder.append(" where campaign_id = :p_campaign_id");
sqlBuilder.append(" union all");
sqlBuilder.append(" select customize_field_title columnName, 0 isFix");
sqlBuilder.append(" from campaign_customerlist_column");
sqlBuilder.append(" where campaign_id = :p_campaign_id");
params.put("p_campaign_id", dto.getCampaignId());
list = namedParameterJdbcTemplate.query(sqlBuilder.toString(), params, BeanPropertyRowMapper.newInstance(FieldsToShowDTO.class));
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setListData(list);
} catch (Exception e) {
logger.error(e.getMessage(), e);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
} }
} }
package com.viettel.campaign.service; package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO; import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ReceiveCustLogDTO;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO; import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
...@@ -22,9 +24,19 @@ public interface CampaignExecuteService { ...@@ -22,9 +24,19 @@ public interface CampaignExecuteService {
List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto); List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto);
//</editor-fold> //</editor-fold>
ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto); ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto, String xAuthToken);
ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto); ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto);
ResultDTO getCall(CampaignRequestDTO dto); ResultDTO getCall(CampaignCustomerDTO dto);
ResultDTO getCallLog(ReceiveCustLogDTO dto);
ResultDTO getAgentLogout(CampaignRequestDTO dto);
ResultDTO callCustomer(ContactCustResultDTO dto);
ResultDTO countRecallCustomer(Long companySiteId, Long agentId);
ResultDTO getCustomerRecall(Long campaignId, Long customerId);
} }
...@@ -30,8 +30,6 @@ public interface CampaignService { ...@@ -30,8 +30,6 @@ public interface CampaignService {
ResultDTO addNewCampaign(CampaignDTO campaignDTO); ResultDTO addNewCampaign(CampaignDTO campaignDTO);
Map countRecallCustomer(Long companySiteId, Long agentId);
ResultDTO findCampaignById(Long campaignId); ResultDTO findCampaignById(Long campaignId);
ResultDTO changeCampaignStatus(CampaignDTO dto); ResultDTO changeCampaignStatus(CampaignDTO dto);
...@@ -52,5 +50,10 @@ public interface CampaignService { ...@@ -52,5 +50,10 @@ public interface CampaignService {
ResultDTO findCustomerListReallocation(CampaignRequestDTO dto); ResultDTO findCustomerListReallocation(CampaignRequestDTO dto);
ResultDTO reallocationCustomer(CampaignRequestDTO dto); ResultDTO reallocationCustomer(CampaignRequestDTO dto);
ResultDTO getListFieldsNotShow(CampaignRequestDTO dto);
ResultDTO getListFieldsToShow(CampaignRequestDTO dto);
//</editor-fold> //</editor-fold>
} }
...@@ -33,7 +33,7 @@ public interface CustomerService { ...@@ -33,7 +33,7 @@ public interface CustomerService {
ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId); ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId);
ResultDTO createCustomerList(CustomerListDTO customerListDTO); ResultDTO createCustomerList(CustomerListDTO customerListDTO, String userName);
ResultDTO updateCustomerList(CustomerListDTO customerListDTO); ResultDTO updateCustomerList(CustomerListDTO customerListDTO);
......
package com.viettel.campaign.service; package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
public interface ScenarioAnswerService { public interface ScenarioAnswerService {
ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId);
Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId);
ResultDTO delete(ScenarioAnswerDTO scenarioAnswerDTO);
} }
...@@ -15,4 +15,6 @@ public interface ScenarioQuestionService { ...@@ -15,4 +15,6 @@ public interface ScenarioQuestionService {
Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId); Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId);
Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId); Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId);
ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO);
} }
...@@ -2,7 +2,11 @@ package com.viettel.campaign.service; ...@@ -2,7 +2,11 @@ package com.viettel.campaign.service;
import com.viettel.campaign.model.ccms_full.Scenario; import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioDTO; import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
...@@ -11,4 +15,6 @@ import com.viettel.campaign.web.dto.ScenarioDTO; ...@@ -11,4 +15,6 @@ import com.viettel.campaign.web.dto.ScenarioDTO;
public interface ScenarioService { public interface ScenarioService {
Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId); Scenario findScenarioByCampaignIdAndCompanySiteId(Long campaignId, Long companySiteId);
ResultDTO update(ScenarioDTO scenario); ResultDTO update(ScenarioDTO scenario);
ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO);
} }
...@@ -92,7 +92,7 @@ public class ApParamServiceImpl implements ApParamService { ...@@ -92,7 +92,7 @@ public class ApParamServiceImpl implements ApParamService {
@Override @Override
public List<ApParam> findAllParam() { public List<ApParam> findAllParam() {
return apParamRepository.findAllParam() ; return apParamRepository.findAllParam("CAMPAIGN_TYPE") ;
} }
......
...@@ -3,21 +3,21 @@ package com.viettel.campaign.service.impl; ...@@ -3,21 +3,21 @@ package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.acd_full.Agents; import com.viettel.campaign.model.acd_full.Agents;
import com.viettel.campaign.model.ccms_full.CampaignCustomer; import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode; import com.viettel.campaign.model.ccms_full.ContactCustResult;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import com.viettel.campaign.repository.acd_full.AgentsRepository; import com.viettel.campaign.repository.acd_full.AgentsRepository;
import com.viettel.campaign.repository.ccms_full.*; import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CampaignExecuteService; import com.viettel.campaign.service.CampaignExecuteService;
import com.viettel.campaign.utils.BundleUtils; import com.viettel.campaign.utils.BundleUtils;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.utils.SQLBuilder; import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.ApParamDTO; import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO; import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.modelmapper.ModelMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -33,6 +33,15 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -33,6 +33,15 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
private static final Logger logger = LoggerFactory.getLogger(CampaignExecuteServiceImp.class); private static final Logger logger = LoggerFactory.getLogger(CampaignExecuteServiceImp.class);
private SimpleDateFormat formatter = new SimpleDateFormat(Constants.DATE_FORMAT.FOMART_DATE_TYPE_1); private SimpleDateFormat formatter = new SimpleDateFormat(Constants.DATE_FORMAT.FOMART_DATE_TYPE_1);
@Autowired
ModelMapper modelMapper;
@Autowired
ContactCustResultRepository ccResultRepository;
@Autowired
ReceiveCustLogRepository custLogRepository;
@Autowired @Autowired
CampaignRepositoryCustom campaignRepositoryCustom; CampaignRepositoryCustom campaignRepositoryCustom;
...@@ -218,9 +227,10 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -218,9 +227,10 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
//</editor-fold: hungtt> //</editor-fold: hungtt>
@Override @Override
public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto) { public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto, String xAuthToken) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
Map data = new HashMap(); Map data = new HashMap();
UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken);
Integer count = campaignExecuteRepository.searchCampaignExecute(requestDto, null).size(); Integer count = campaignExecuteRepository.searchCampaignExecute(requestDto, null).size();
...@@ -278,14 +288,159 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -278,14 +288,159 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
} }
@Override @Override
public ResultDTO getCall(CampaignRequestDTO dto) { public ResultDTO getCall(CampaignCustomerDTO dto) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
//Agents agents = agentsRepository.findByAgentId(dto.getAgentId()); //Agents agents = agentsRepository.findByAgentId(dto.getAgentId());
//TimeZoneDialMode zoneDialMode = zoneDialModeRepository.findDialModeAtCurrent(Long.parseLong(dto.getCampaignId()), Long.parseLong(dto.getCompanySiteId())); //TimeZoneDialMode zoneDialMode = zoneDialModeRepository.findDialModeAtCurrent(Long.parseLong(dto.getCampaignId()), Long.parseLong(dto.getCompanySiteId()));
//TimeRangeDialMode rangeDialMode = rangeDialModeRepository.findDialModeAtCurrent(Long.parseLong(dto.getCampaignId()), Long.parseLong(dto.getCompanySiteId())); //TimeRangeDialMode rangeDialMode = rangeDialModeRepository.findDialModeAtCurrent(Long.parseLong(dto.getCampaignId()), Long.parseLong(dto.getCompanySiteId()));
List<CampaignCustomerDTO> lst = new ArrayList<>();
StringBuilder sb = new StringBuilder();
sb.append("SELECT CC.CUSTOMER_ID AS customerId");
sb.append(" FROM CAMPAIGN_CUSTOMER CC");
sb.append(" LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb.append(" AND CL.CUSTOMER_ID IS NULL");
sb.append(" AND CL.END_TIME IS NULL");
sb.append(" AND EXISTS(SELECT 1");
sb.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb.append(" AND STATUS = 1");
sb.append(" AND IS_RECALL = 1");
sb.append(" AND COMPLETE_TYPE = 2");
sb.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb.append(" AND CC.RECALL_TIME <= SYSDATE");
sb.append(" AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') >= SYSDATE");
sb.append(" AND CC.AGENT_ID = :agentId");
StringBuilder sb2 = new StringBuilder();
sb2.append("SELECT CC.CUSTOMER_ID AS customerId");
sb2.append(" FROM CCMS_FULL.CAMPAIGN_CUSTOMER CC");
sb2.append(" LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb2.append(" LEFT JOIN ACD_FULL.AGENTS AG ON CC.AGENT_ID = AG.AGENT_ID AND CC.CAMPAIGN_ID = AG.CURRENT_CAMPAIGN_ID");
sb2.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb2.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb2.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb2.append(" AND CL.CUSTOMER_ID IS NULL");
sb2.append(" AND CL.END_TIME IS NULL");
sb2.append(" AND EXISTS(SELECT 1");
sb2.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb2.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb2.append(" AND STATUS = 1");
sb2.append(" AND IS_RECALL = 1");
sb2.append(" AND COMPLETE_TYPE = 2");
sb2.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb2.append(" AND CC.RECALL_TIME <= SYSDATE");
sb2.append(" AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') >= SYSDATE");
sb2.append(" AND (AG.CAMPAIGN_SYSTEM_STATUS IS NULL OR AG.CAMPAIGN_SYSTEM_STATUS <> 'AVAILABLE')");
StringBuilder sb3 = new StringBuilder();
sb3.append("SELECT CC.CUSTOMER_ID AS customerId");
sb3.append(" FROM CAMPAIGN_CUSTOMER CC");
sb3.append(" LEFT JOIN RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb3.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb3.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb3.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb3.append(" AND CL.CUSTOMER_ID IS NULL");
sb3.append(" AND CL.END_TIME IS NULL");
sb3.append(" AND EXISTS(SELECT 1");
sb3.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb3.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb3.append(" AND STATUS = 1");
sb3.append(" AND IS_RECALL = 1");
sb3.append(" AND COMPLETE_TYPE = 2");
sb3.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb3.append(" AND CC.RECALL_TIME + NUMTODSINTERVAL(:dungSai, 'MINUTE') <= SYSDATE");
StringBuilder sb4 = new StringBuilder();
sb4.append("SELECT CC.CUSTOMER_ID AS customerId ");
sb4.append(" FROM CAMPAIGN_CUSTOMER CC");
sb4.append(" INNER JOIN CUSTOMER C ON CC.CUSTOMER_ID = C.CUSTOMER_ID");
sb4.append(" LEFT JOIN RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb4.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb4.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb4.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb4.append(" AND CL.CUSTOMER_ID IS NULL");
sb4.append(" AND CL.END_TIME IS NULL");
sb4.append(" AND CC.STATUS = 0");
sb4.append(" AND C.STATUS = 1");
sb4.append(" AND C.CALL_ALLOWED = 1");
sb4.append(" AND C.IPCC_STATUS = 'active'");
StringBuilder sb5 = new StringBuilder();
sb5.append("SELECT CC.CUSTOMER_ID AS customerId");
sb5.append(" FROM CAMPAIGN_CUSTOMER CC");
sb5.append(" LEFT JOIN CCMS_FULL.RECEIVE_CUST_LOG CL ON CC.CUSTOMER_ID = CL.CUSTOMER_ID");
sb5.append(" WHERE CC.CAMPAIGN_ID = :campaignId");
sb5.append(" AND CC.COMPANY_SITE_ID = :companySiteId");
sb5.append(" AND CC.IN_CAMPAIGN_STATUS = 1");
sb5.append(" AND CL.CUSTOMER_ID IS NULL");
sb5.append(" AND CL.END_TIME IS NULL");
sb5.append(" AND EXISTS(SELECT 1");
sb5.append(" FROM CCMS_FULL.CAMPAIGN_COMPLETE_CODE CCC");
sb5.append(" WHERE CC.STATUS = CCC.COMPLETE_VALUE");
sb5.append(" AND STATUS = 1");
sb5.append(" AND IS_FINISH = 0");
sb5.append(" AND COMPLETE_TYPE = 1");
sb5.append(" AND COMPANY_SITE_ID = :companySiteId)");
sb5.append(" AND CC.RECALL_COUNT < C.MAX_RECALL");
sb5.append(" AND C.STATUS = 1");
sb5.append(" AND C.CALL_ALLOWED = 1");
sb5.append(" AND C.IPCC_STATUS = 'active'");
String getExecuteCus1Str = sb.toString();
String getExecuteCus2Str = sb2.toString();
String getExecuteCus3Str = sb3.toString();
String getExecuteCus4Str = sb4.toString();
String getExecuteCus5Str = sb5.toString();
// Khách hàng đến thời điểm hẹn gọi lại và là khách hàng mà chính NSD hẹn gọi lại
List<CampaignCustomerDTO> lst1 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus1Str);
if (lst1.size() > 0) {
lst = lst1;
} else {
// Khách hàng đến thời điểm hẹn gọi lại và không là khách hàng mà NSD dùng hẹn gọi lại nhưng TVV hẹn gọi lại không đăng nhập hoặc không thực hiện chiến dịch hiện tại
List<CampaignCustomerDTO> lst2 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus2Str);
if (lst2.size() > 0) {
lst = lst2;
} else {
// Khách hàng là khách hàng hẹn gọi lại nhưng thời gian hẹn gọi lại đã quá thời gian hẹn gọi lại + dung sai
List<CampaignCustomerDTO> lst3 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus3Str);
if (lst3.size() > 0) {
lst = lst3;
} else {
// Khách hàng mới
List<CampaignCustomerDTO> lst4 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus4Str);
if (lst4.size() > 0) {
lst = lst4;
} else {
// Khách hàng không liên lạc được nhưng chưa phải là cuộc gọi kết thúc và có số lần đã gọi < Số lần gọi tối đa được cấu hình và khoảng cách giữa 2 lần gọi < thời gian tương tác giữa 2 lần gọi được cấu hình
List<CampaignCustomerDTO> lst5 = campaignCustomerRepository.getDataCampaignCustomer(dto, getExecuteCus5Str);
lst = lst5;
}
}
}
}
if (lst != null) {
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setListData(lst);
//result.setData(data);
} else {
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
public ResultDTO getCallLog(ReceiveCustLogDTO dto) {
ResultDTO result = new ResultDTO();
List<CampaignCustomer> lst = null;//campaignCustomerRepository.getCustomerRecallDate(dto.getCampaignId(), dto.getAgentId(), dto.getCompanySiteId(), ); List<CampaignCustomer> lst = null;//campaignCustomerRepository.getCustomerRecallDate(dto.getCampaignId(), dto.getAgentId(), dto.getCompanySiteId(), );
...@@ -302,4 +457,76 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService { ...@@ -302,4 +457,76 @@ public class CampaignExecuteServiceImp implements CampaignExecuteService {
return result; return result;
} }
@Override
public ResultDTO getAgentLogout(CampaignRequestDTO dto) {
ResultDTO result = new ResultDTO();
try {
agentsRepository.updateAgentLogoutFromCampaign(Long.parseLong(dto.getAgentId()), "LOGOUT");
campaignAgentRepository.updateCampaignAgentSetStatus(Long.parseLong(dto.getAgentId()), Long.parseLong(dto.getCampaignId()), 0);
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception e) {
e.printStackTrace();
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Override
public ResultDTO callCustomer(ContactCustResultDTO dto) {
ResultDTO result = new ResultDTO();
try {
ContactCustResult ccr = ccResultRepository.save(modelMapper.map(dto, ContactCustResult.class));
result.setErrorCode(Constants.ApiErrorCode.SUCCESS);
result.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.setData(ccr);
} catch (Exception e) {
e.printStackTrace();
result.setErrorCode(Constants.ApiErrorCode.ERROR);
result.setDescription(Constants.ApiErrorDesc.ERROR);
}
return result;
}
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO countRecallCustomer(Long companySiteId, Long agentId) {
Long count = campaignCustomerRepository.countRecallCustomer(companySiteId, agentId);
ResultDTO resultDTO = new ResultDTO();
if (count != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(count);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
resultDTO.setData(0);
}
return resultDTO;
}
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getCustomerRecall(Long campaignId, Long customerId) {
Long count = campaignCustomerRepository.getCustomerRecall(campaignId, customerId);
ResultDTO resultDTO = new ResultDTO();
if (count != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(count);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
resultDTO.setData(0);
}
return resultDTO;
}
} }
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam; import com.viettel.campaign.model.ccms_full.*;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
//import com.viettel.campaign.model.UserActionLog; //import com.viettel.campaign.model.UserActionLog;
import com.viettel.campaign.repository.ccms_full.*; import com.viettel.campaign.repository.ccms_full.*;
//import com.viettel.campaign.repository.UserActionLogRepository; //import com.viettel.campaign.repository.UserActionLogRepository;
...@@ -61,6 +58,9 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -61,6 +58,9 @@ public class CampaignServiceImpl implements CampaignService {
@Autowired @Autowired
ApParamRepository apParamRepository; ApParamRepository apParamRepository;
@Autowired
ScenarioRepository scenarioRepository;
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO search(CampaignRequestDTO requestDto) { public ResultDTO search(CampaignRequestDTO requestDto) {
...@@ -151,6 +151,14 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -151,6 +151,14 @@ public class CampaignServiceImpl implements CampaignService {
}); });
timeZoneDialModeRepository.saveAll(lstTimeZoneModeToInser); timeZoneDialModeRepository.saveAll(lstTimeZoneModeToInser);
} }
Scenario scenario = new Scenario();
scenario.setCampaignId(campaignId);
scenario.setCode(campaignId + "_" + "01");
scenario.setCreateTime(new Date());
scenario.setCompanySiteId(campaign.getCompanySiteId());
scenarioRepository.save(scenario);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS); resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(campaignResult); resultDTO.setData(campaignResult);
...@@ -162,26 +170,6 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -162,26 +170,6 @@ public class CampaignServiceImpl implements CampaignService {
return resultDTO; return resultDTO;
} }
@Transactional(DataSourceQualify.CCMS_FULL)
public Map countRecallCustomer(Long companySiteId, Long agentId) {
Map result = new HashMap();
Long count = campaignRepository.countRecallCustomer(companySiteId, agentId);
ResultDTO resultDTO = new ResultDTO();
if (count != null) {
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
result.put("info", resultDTO);
result.put("result", count);
} else {
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
result.put("info", resultDTO);
result.put("result", 0);
}
return result;
}
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findCampaignById(Long campaignId) { public ResultDTO findCampaignById(Long campaignId) {
...@@ -382,9 +370,9 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -382,9 +370,9 @@ public class CampaignServiceImpl implements CampaignService {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
List<TimeZoneDialModeDTO> lstTimeZone = dto.getLstTimeZone(); List<TimeZoneDialModeDTO> lstTimeZone = dto.getLstTimeZone();
List<TimeRangeDialModeDTO> lstTimeRange = dto.getLstTimeRange(); List<TimeRangeDialModeDTO> lstTimeRange = dto.getLstTimeRange();
// Campaign campaignEntity = modelMapper.map(dto, Campaign.class);
Campaign campaignEntity = new Campaign(); Campaign campaignEntity = new Campaign();
campaignEntity.setCampaignId(dto.getCampaignId()); campaignEntity.setCampaignId(dto.getCampaignId());
campaignEntity.setCampaignCode(dto.getCampaignCode());
campaignEntity.setContent(dto.getContent()); campaignEntity.setContent(dto.getContent());
campaignEntity.setCustomerNumber(dto.getCustomerNumber()); campaignEntity.setCustomerNumber(dto.getCustomerNumber());
campaignEntity.setStartTime(dto.getStartTime()); campaignEntity.setStartTime(dto.getStartTime());
...@@ -450,6 +438,74 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -450,6 +438,74 @@ public class CampaignServiceImpl implements CampaignService {
return campaignRepositoryCustom.reallocationCustomer(dto); return campaignRepositoryCustom.reallocationCustomer(dto);
} }
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsNotShow(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
Map<String, String> mapColumn = new HashMap<>();
mapColumn = setMapData(mapColumn, locale);
ResultDTO resultDTO = campaignRepositoryCustom.getListFieldsNotShow(dto);
List<FieldsToShowDTO> list = (List<FieldsToShowDTO>)resultDTO.getListData();
for (FieldsToShowDTO fieldsToShowDTO : list) {
if (fieldsToShowDTO.getIsFix()) {
fieldsToShowDTO.setColumnTitle(mapColumn.get(fieldsToShowDTO.getColumnName()));
} else {
fieldsToShowDTO.setColumnTitle(fieldsToShowDTO.getColumnName());
}
}
resultDTO.setListData(list);
return resultDTO;
}
// hungtt
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO getListFieldsToShow(CampaignRequestDTO dto) {
Locale locale = Locale.forLanguageTag("vi");
Map<String, String> mapColumn = new HashMap<>();
mapColumn = setMapData(mapColumn, locale);
ResultDTO resultDTO = campaignRepositoryCustom.getListFieldsToShow(dto);
List<FieldsToShowDTO> list = (List<FieldsToShowDTO>)resultDTO.getListData();
for (FieldsToShowDTO fieldsToShowDTO : list) {
if (fieldsToShowDTO.getIsFix()) {
fieldsToShowDTO.setColumnTitle(mapColumn.get(fieldsToShowDTO.getColumnName()));
} else {
fieldsToShowDTO.setColumnTitle(fieldsToShowDTO.getColumnName());
}
}
resultDTO.setListData(list);
return resultDTO;
}
// hungtt
private Map<String, String> setMapData(Map<String, String> mapColumn, Locale locale) {
mapColumn.put("CUSTOMER_ID", BundleUtils.getLangString("CUSTOMER_ID", locale));
mapColumn.put("CODE", BundleUtils.getLangString("CODE", locale));
mapColumn.put("NAME", BundleUtils.getLangString("NAME", locale));
mapColumn.put("DESCRIPTION", BundleUtils.getLangString("DESCRIPTION", locale));
mapColumn.put("COMPANY_NAME", BundleUtils.getLangString("COMPANY_NAME", locale));
mapColumn.put("CUSTOMER_IMG", BundleUtils.getLangString("CUSTOMER_IMG", locale));
mapColumn.put("CREATE_DATE", BundleUtils.getLangString("CREATE_DATE", locale));
mapColumn.put("UPDATE_DATE", BundleUtils.getLangString("UPDATE_DATE", locale));
mapColumn.put("STATUS", BundleUtils.getLangString("STATUS", locale));
mapColumn.put("CREATE_BY", BundleUtils.getLangString("CREATE_BY", locale));
mapColumn.put("UPDATE_BY", BundleUtils.getLangString("UPDATE_BY", locale));
mapColumn.put("SITE_ID", BundleUtils.getLangString("SITE_ID", locale));
mapColumn.put("GENDER", BundleUtils.getLangString("GENDER", locale));
mapColumn.put("CURRENT_ADDRESS", BundleUtils.getLangString("CURRENT_ADDRESS", locale));
mapColumn.put("PLACE_OF_BIRTH", BundleUtils.getLangString("PLACE_OF_BIRTH", locale));
mapColumn.put("DATE_OF_BIRTH", BundleUtils.getLangString("DATE_OF_BIRTH", locale));
mapColumn.put("MOBILE_NUMBER", BundleUtils.getLangString("MOBILE_NUMBER", locale));
mapColumn.put("USERNAME", BundleUtils.getLangString("USERNAME", locale));
mapColumn.put("AREA_CODE", BundleUtils.getLangString("AREA_CODE", locale));
mapColumn.put("CALL_ALLOWED", BundleUtils.getLangString("CALL_ALLOWED", locale));
mapColumn.put("EMAIL_ALLOWED", BundleUtils.getLangString("EMAIL_ALLOWED", locale));
mapColumn.put("SMS_ALLOWED", BundleUtils.getLangString("SMS_ALLOWED", locale));
mapColumn.put("IPCC_STATUS", BundleUtils.getLangString("IPCC_STATUS", locale));
return mapColumn;
}
private String generateCampaignCode(String campaignType, Short chanel) { private String generateCampaignCode(String campaignType, Short chanel) {
int year = Calendar.getInstance().get(Calendar.YEAR); int year = Calendar.getInstance().get(Calendar.YEAR);
String maxIndexStr = campaignRepositoryCustom.getMaxCampaignIndex(); String maxIndexStr = campaignRepositoryCustom.getMaxCampaignIndex();
......
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.mapper.CustomerListMapper; import com.viettel.campaign.mapper.CustomerListMapper;
import com.viettel.campaign.mapper.CustomerMapper; import com.viettel.campaign.mapper.CustomerMapper;
...@@ -9,18 +8,16 @@ import com.viettel.campaign.model.ccms_full.CustomerContact; ...@@ -9,18 +8,16 @@ import com.viettel.campaign.model.ccms_full.CustomerContact;
import com.viettel.campaign.model.ccms_full.CustomerList; import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.repository.ccms_full.*; import com.viettel.campaign.repository.ccms_full.*;
import com.viettel.campaign.service.CustomerService; import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.*;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.*; import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerDetailRequestDTO; import com.viettel.campaign.web.dto.request_dto.CustomerDetailRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import cz.jirutka.rsql.parser.ast.RSQLVisitor; import com.viettel.econtact.filter.UserSession;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.jetty.client.HttpRequest;
import org.hibernate.SQLQuery; import org.hibernate.SQLQuery;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
...@@ -41,29 +38,14 @@ import org.springframework.util.ResourceUtils; ...@@ -41,29 +38,14 @@ import org.springframework.util.ResourceUtils;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery; import javax.servlet.http.HttpServletRequest;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.util.*; import java.util.*;
import com.github.tennaito.rsql.jpa.JpaCriteriaCountQueryVisitor;
import com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor;
import cz.jirutka.rsql.parser.RSQLParser;
import cz.jirutka.rsql.parser.ast.Node;
import cz.jirutka.rsql.parser.ast.RSQLVisitor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;
import java.util.Collections;
import java.util.List;
import java.util.List;
@Service @Service
public class CustomerServiceImpl implements CustomerService { public class CustomerServiceImpl implements CustomerService {
;
@Autowired @Autowired
@PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL) @PersistenceContext( unitName= DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager; EntityManager entityManager;
...@@ -597,15 +579,18 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -597,15 +579,18 @@ public class CustomerServiceImpl implements CustomerService {
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO createCustomerList(CustomerListDTO customerListDTO) { public ResultDTO createCustomerList(CustomerListDTO customerListDTO, String userName) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
CustomerListMapper customerListMapper = new CustomerListMapper(); CustomerListMapper customerListMapper = new CustomerListMapper();
CustomerList customerList = new CustomerList(); CustomerList customerList = new CustomerList();
try { try {
if (customerListDTO != null) { if (customerListDTO != null) {
// insert // insert
CustomerList findCustomer = customerListRepository.findByCustomerListCode(customerListDTO.getCustomerListCode()); CustomerList findCustomer = customerListRepository.findByCustomerListCode(customerListDTO.getCustomerListCode());
if (findCustomer == null) { if (findCustomer == null) {
customerListDTO.setCreateBy(userName);
customerList = customerListMapper.toPersistenceBean(customerListDTO); customerList = customerListMapper.toPersistenceBean(customerListDTO);
customerListRepository.save(customerList); customerListRepository.save(customerList);
...@@ -973,8 +958,6 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -973,8 +958,6 @@ public class CustomerServiceImpl implements CustomerService {
return customizeFieldDTOList; return customizeFieldDTOList;
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public List<CustomerListDTO> getCustomerListInfo(CampaignCustomerDTO campaignCustomerDTO) { public List<CustomerListDTO> getCustomerListInfo(CampaignCustomerDTO campaignCustomerDTO) {
...@@ -1110,38 +1093,4 @@ public class CustomerServiceImpl implements CustomerService { ...@@ -1110,38 +1093,4 @@ public class CustomerServiceImpl implements CustomerService {
public Customer update(Customer c) { public Customer update(Customer c) {
return customerRepository.save(c); return customerRepository.save(c);
} }
//--------search customer -----//
@Override
public List<Customer> searchByQuery(String queryString) {
RSQLVisitor<CriteriaQuery<Customer>, EntityManager> visitor = new JpaCriteriaQueryVisitor<>();
CriteriaQuery<Customer> query;
query = getCriteriaQuery(queryString, visitor);
List<Customer> resultList = entityManager.createQuery(query).getResultList();
if (resultList == null || resultList.isEmpty()){
return Collections.emptyList();
}
return resultList;
}
@Override
public Long countByQuery(String queryString) {
RSQLVisitor<CriteriaQuery<Long>, EntityManager> visitor = new JpaCriteriaCountQueryVisitor<Customer>();
CriteriaQuery<Long> query;
query = getCriteriaQuery(queryString, visitor);
return entityManager.createQuery(query).getSingleResult();
}
private <T> CriteriaQuery<T> getCriteriaQuery(String queryString, RSQLVisitor<CriteriaQuery<T>, EntityManager> visitor) {
Node rootNode;
CriteriaQuery<T> query;
try {
rootNode = new RSQLParser().parse(queryString);
query = rootNode.accept(visitor, entityManager);
} catch (Exception e){
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
return query;
}
} }
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.Campaign;
import com.viettel.campaign.model.ccms_full.CampaignLog;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import com.viettel.campaign.repository.ccms_full.CampaignLogRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.service.ScenarioAnswerService; import com.viettel.campaign.service.ScenarioAnswerService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
@Service @Service
@Transactional(rollbackFor = Exception.class)
public class ScenarioAnswerServiceImpl implements ScenarioAnswerService { public class ScenarioAnswerServiceImpl implements ScenarioAnswerService {
private static final Logger logger = LogManager.getLogger(ScenarioQuestionServiceImpl.class);
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
CampaignRepository campaignRepository;
@Autowired
CampaignLogRepository campaignLogRepository;
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioAnswer> lst = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestionId, companySiteId, (short) 1);
resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch(Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public Long getMaxAnswerOrderId(Long scenarioQuestionId, Long companySiteId) {
try {
return scenarioAnswerRepository.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO delete(ScenarioAnswerDTO scenarioAnswerDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignLog campaignLog;
try {
//find campaign
Campaign campaign = campaignRepository.findByCampaignId(scenarioAnswerDTO.getCampaignId());
if(campaign != null) {
if (campaign.getStatus() == 0L || campaign.getStatus() == 1L) {
scenarioAnswerRepository.deleteById(scenarioAnswerDTO.scenarioAnswerId);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioAnswerDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Xoa cau tra loi");
campaignLog.setCampaignId(scenarioAnswerDTO.getCampaignId());
campaignLog.setCustomerId(scenarioAnswerDTO.getScenarioAnswerId());
campaignLogRepository.save(campaignLog);
}
else {
ScenarioAnswer answer = scenarioAnswerRepository.findScenarioAnswerByScenarioAnswerId(scenarioAnswerDTO.getScenarioAnswerId());
answer.setStatus((short) 0);
answer.setDeleteTime(new Date());
scenarioAnswerRepository.save(answer);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioAnswerDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setAgentId(null);
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Chinh sua tra loi");
campaignLog.setCampaignId(scenarioAnswerDTO.getCampaignId());
campaignLog.setCustomerId(scenarioAnswerDTO.getScenarioAnswerId());
campaignLogRepository.save(campaignLog);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
} }
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignLog; import com.viettel.campaign.model.ccms_full.*;
import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.model.ccms_full.ScenarioQuestion;
import com.viettel.campaign.repository.ccms_full.CampaignLogRepository; import com.viettel.campaign.repository.ccms_full.CampaignLogRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository; import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository;
import com.viettel.campaign.service.ScenarioQuestionService; import com.viettel.campaign.service.ScenarioQuestionService;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO; import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
...@@ -17,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -17,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -35,6 +37,12 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -35,6 +37,12 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Autowired @Autowired
CampaignLogRepository campaignLogRepository; CampaignLogRepository campaignLogRepository;
@Autowired
ScenarioAnswerRepository scenarioAnswerRepository;
@Autowired
CampaignRepository campaignRepository;
@Autowired @Autowired
ModelMapper modelMapper; ModelMapper modelMapper;
...@@ -43,7 +51,7 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -43,7 +51,7 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
public ResultDTO findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId) { public ResultDTO findByScenarioIdAndCampaignIdAndCompanySiteId(Long scenarioId, Long campaignId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatus(scenarioId, campaignId, companySiteId, (short)1); List<ScenarioQuestion> lst = scenarioQuestionRepository.findScenarioQuestionsByScenarioIdAndCampaignIdAndCompanySiteIdAndStatusOrderByOrderIndex(scenarioId, campaignId, companySiteId, (short) 1);
resultDTO.setData(lst); resultDTO.setData(lst);
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS); resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS); resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
...@@ -59,12 +67,39 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -59,12 +67,39 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO add(ScenarioQuestionDTO scenarioQuestionDTO) { public ResultDTO add(ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
List<ScenarioAnswerDTO> lstAnswers = new ArrayList<>();
List<ScenarioAnswer> lstAnswersToInsert = new ArrayList<>();
try { try {
ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class); ScenarioQuestion scenarioQuestion = modelMapper.map(scenarioQuestionDTO, ScenarioQuestion.class);
scenarioQuestion.setCreateTime(new Date()); scenarioQuestion.setCreateTime(new Date());
scenarioQuestion.setStatus((short) 1); scenarioQuestion.setStatus((short) 1);
scenarioQuestionRepository.save(scenarioQuestion); scenarioQuestionRepository.save(scenarioQuestion);
if (scenarioQuestionDTO.getLstAnswers().size() > 0) {
lstAnswers = scenarioQuestionDTO.getLstAnswers();
lstAnswers.forEach(item -> {
item.setCode(scenarioQuestion.getScenarioQuestionId() + "_" + item.getOrderIndex());
item.setScenarioQuestionId(scenarioQuestion.getScenarioQuestionId());
item.setCreateTime(new Date());
item.setStatus((short) 1);
ScenarioAnswer answer = modelMapper.map(item, ScenarioAnswer.class);
lstAnswersToInsert.add(answer);
});
scenarioAnswerRepository.saveAll(lstAnswersToInsert);
CampaignLog campaignLogAnswer = new CampaignLog();
campaignLogAnswer.setCompanySiteId(scenarioQuestion.getCompanySiteId());
campaignLogAnswer.setCreateTime(new Date());
campaignLogAnswer.setAgentId(null);
campaignLogAnswer.setTableName("SCENARIO_ANSWER");
campaignLogAnswer.setColumnName(null);
campaignLogAnswer.setPreValue(null);
campaignLogAnswer.setPostValue(null);
campaignLogAnswer.setDescription("Them moi cau tra loi rieng le");
campaignLogAnswer.setCampaignId(scenarioQuestion.getCampaignId());
campaignLogAnswer.setCustomerId(scenarioQuestion.getScenarioQuestionId());
campaignLogRepository.save(campaignLogAnswer);
}
CampaignLog campaignLog = new CampaignLog(); CampaignLog campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestion.getCompanySiteId()); campaignLog.setCompanySiteId(scenarioQuestion.getCompanySiteId());
campaignLog.setCreateTime(new Date()); campaignLog.setCreateTime(new Date());
...@@ -92,7 +127,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -92,7 +127,8 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
@Transactional(DataSourceQualify.CCMS_FULL) @Transactional(DataSourceQualify.CCMS_FULL)
public Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId) { public Long getMaxOrderId(Long scenarioId, Long campaignId, Long companySiteId) {
try { try {
return scenarioQuestionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId); Long index = scenarioQuestionRepository.getMaxOrderId(scenarioId, campaignId, companySiteId);
if(index == null) return 0L; else return index;
}catch (Exception ex) { }catch (Exception ex) {
logger.error(ex.getMessage(), ex); logger.error(ex.getMessage(), ex);
} }
...@@ -104,9 +140,86 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService { ...@@ -104,9 +140,86 @@ public class ScenarioQuestionServiceImpl implements ScenarioQuestionService {
public Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId) { public Integer countDuplicateQuestionCode(String code, Long scenarioId, Long campaignId, Long companySiteId) {
try { try {
return scenarioQuestionRepository.countDuplicateQuestionCode(code, scenarioId, campaignId, companySiteId); return scenarioQuestionRepository.countDuplicateQuestionCode(code, scenarioId, campaignId, companySiteId);
}catch (Exception ex) { } catch (Exception ex) {
logger.error(ex.getMessage(), ex); logger.error(ex.getMessage(), ex);
} }
return null; return null;
} }
@Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = new ResultDTO();
CampaignLog campaignLog;
try {
//find campaign
Campaign campaign = campaignRepository.findByCampaignId(scenarioQuestionDTO.getCampaignId());
if (campaign != null) {
if (campaign.getStatus() == 0L || campaign.getStatus() == 1L) {
//delete question by questionId
scenarioQuestionRepository.deleteById(scenarioQuestionDTO.getScenarioQuestionId());
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setDescription("Xoa cau hoi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
//delete answer by questionId
scenarioAnswerRepository.deleteScenarioAnswersByScenarioQuestionId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_ANSWER");
campaignLog.setDescription("Xoa cau tra loi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
} else {
//get and update status question
ScenarioQuestion scenarioQuestion = scenarioQuestionRepository.findScenarioQuestionByScenarioQuestionId(scenarioQuestionDTO.getScenarioQuestionId());
scenarioQuestion.setStatus((short) 0);
scenarioQuestion.setDeleteTime(new Date());
scenarioQuestionRepository.save(scenarioQuestion);
campaignLog = new CampaignLog();
campaignLog.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
campaignLog.setCreateTime(new Date());
campaignLog.setTableName("SCENARIO_QUESTION");
campaignLog.setDescription("Chinh sua cau hoi");
campaignLog.setCampaignId(scenarioQuestionDTO.getCampaignId());
campaignLog.setCustomerId(scenarioQuestionDTO.getScenarioQuestionId());
campaignLogRepository.save(campaignLog);
List<ScenarioAnswer> lstAnswer = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestion.getScenarioQuestionId(),
scenarioQuestion.getCompanySiteId(), (short) 1);
if(lstAnswer.size() > 0) {
lstAnswer.forEach(answer -> {
answer.setStatus((short) 0);
answer.setDeleteTime(new Date());
CampaignLog log = new CampaignLog();
log.setCompanySiteId(scenarioQuestionDTO.getCompanySiteId());
log.setCreateTime(new Date());
log.setTableName("SCENARIO_ANSWER");
log.setDescription("Chinh sua cau tra loi");
log.setCampaignId(scenarioQuestionDTO.getCampaignId());
log.setCustomerId(answer.getScenarioAnswerId());
campaignLogRepository.save(log);
});
}
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
} }
...@@ -2,11 +2,17 @@ package com.viettel.campaign.service.impl; ...@@ -2,11 +2,17 @@ package com.viettel.campaign.service.impl;
import com.viettel.campaign.config.DataSourceQualify; import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.Scenario; import com.viettel.campaign.model.ccms_full.Scenario;
import com.viettel.campaign.model.ccms_full.ScenarioAnswer;
import com.viettel.campaign.model.ccms_full.ScenarioQuestion;
import com.viettel.campaign.repository.ccms_full.ScenarioAnswerRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepository;
import com.viettel.campaign.repository.ccms_full.ScenarioRepository; import com.viettel.campaign.repository.ccms_full.ScenarioRepository;
import com.viettel.campaign.service.ScenarioService; import com.viettel.campaign.service.ScenarioService;
import com.viettel.campaign.utils.Constants; import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.ResultDTO; import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import com.viettel.campaign.web.dto.ScenarioDTO; import com.viettel.campaign.web.dto.ScenarioDTO;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -15,7 +21,9 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -15,7 +21,9 @@ import org.springframework.transaction.annotation.Transactional;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
...@@ -29,6 +37,12 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -29,6 +37,12 @@ public class ScenarioServiceImpl implements ScenarioService {
@Autowired @Autowired
ScenarioRepository scenarioRepository; ScenarioRepository scenarioRepository;
@Autowired
ScenarioQuestionRepository questionRepository;
@Autowired
ScenarioAnswerRepository answerRepository;
@Autowired @Autowired
ModelMapper modelMapper; ModelMapper modelMapper;
...@@ -63,4 +77,43 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -63,4 +77,43 @@ public class ScenarioServiceImpl implements ScenarioService {
} }
return resultDTO; return resultDTO;
} }
@Override
public ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = new ResultDTO();
try {
List<ScenarioQuestionDTO> lstQuestion = scenarioDTO.getLstQuestion();
List<ScenarioAnswerDTO> lstAnswer = scenarioDTO.getLstAnswer();
List<ScenarioQuestion> questionsToSort = new ArrayList<>();
List<ScenarioAnswer> answersToSort = new ArrayList<>();
if (lstQuestion.size() > 0) {
lstQuestion.forEach(item -> {
ScenarioQuestion question = questionRepository.findScenarioQuestionByScenarioQuestionId(item.getScenarioQuestionId());
if (question != null) {
question.setOrderIndex(item.getOrderIndex());
questionsToSort.add(question);
}
});
questionRepository.saveAll(questionsToSort);
}
if (lstAnswer.size() > 0) {
lstAnswer.forEach(item -> {
ScenarioAnswer answer = answerRepository.findScenarioAnswerByScenarioAnswerId(item.getScenarioAnswerId());
if (answer != null) {
answer.setOrderIndex(item.getOrderIndex());
answersToSort.add(answer);
}
});
answerRepository.saveAll(answersToSort);
}
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setDescription(Constants.ApiErrorDesc.SUCCESS);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setDescription(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
} }
package com.viettel.campaign.utils; package com.viettel.campaign.utils;
//import com.viettel.security.PassTranformer; import com.viettel.security.PassTranformer;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.io.File; import java.io.File;
......
...@@ -18,23 +18,23 @@ public class SQLBuilder { ...@@ -18,23 +18,23 @@ public class SQLBuilder {
public static final String SQL_MODULE_CAMPAIGN_STATUS_MNG = "campaign-status-mng"; public static final String SQL_MODULE_CAMPAIGN_STATUS_MNG = "campaign-status-mng";
public static final String SQL_MODULE_CAMPAIGN_CUSTOMER_MNG = "campaign-customer-mng"; public static final String SQL_MODULE_CAMPAIGN_CUSTOMER_MNG = "campaign-customer-mng";
// public static String getSqlQueryById(String module, public static String getSqlQueryById(String module,
// String queryId) { String queryId) {
// File folder = null; File folder = null;
// try { try {
// folder = new ClassPathResource( folder = new ClassPathResource(
// "sql" + File.separator + module + File.separator + queryId + ".sql").getFile(); "sql" + File.separator + module + File.separator + queryId + ".sql").getFile();
//
// // Read file // Read file
// if (folder.isFile()) { if (folder.isFile()) {
// String sql = new String(Files.readAllBytes(Paths.get(folder.getAbsolutePath()))); String sql = new String(Files.readAllBytes(Paths.get(folder.getAbsolutePath())));
// return sql; return sql;
// } }
// } catch (IOException e) { } catch (IOException e) {
// return null; return null;
// } }
// return null; return null;
// } }
public static Pageable buildPageable(BaseDTO obj) { public static Pageable buildPageable(BaseDTO obj) {
Pageable pageable = null; Pageable pageable = null;
......
...@@ -10,27 +10,47 @@ import java.util.Date; ...@@ -10,27 +10,47 @@ import java.util.Date;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
public class ContactCustResultDTO extends BaseDTO{ public class ContactCustResultDTO extends BaseDTO{
private Long contactCustResultId;
private Long contacCustResultId;
private Long companySiteId; private Long companySiteId;
private Short callStatus; private Short callStatus;
private Short recordStatus; private Short contactStatus;
private Short status;
private Integer satisfaction;
private String description; private String description;
private Date createTime; private Date createTime;
private Long callTime;
private Long agentId; private Long agentId;
private Date updateTime;
private Long updateBy;
private Long campaignId; private Long campaignId;
private String campaignName; private Long oldContactCustResultId;
private Long customerId;
private Long durationCall;
private Date startCall;
private Long receiveCustLogId;
private Short ipccCallStatus;
private String callId;
private String phoneNumber; private String phoneNumber;
private Date receiveTime;
private Date preEndTime;
private String urlCall;
private String transactionId;
private Date recallTime;
private Short isFinalRecall;
private Short isSendEmail = 0;
private Long saledOnTpin;
private Date endTime;
private Long waitTime;
private String dialMode;
private Long wrapupTime;
private Long timeMakeCall = 0L;
private Long timeReceiveCust = 0L;
private Short recordStatus;
private Long callTime;
private String campaignName;
private String customerName; private String customerName;
private Long customerId;
private String contactStatus;
private String campaignCode; private String campaignCode;
private String userName; private String userName;
private String surveyStatus; private String surveyStatus;
private Short status;
private Boolean enableEdit; private Boolean enableEdit;
} }
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ContactQuestResultDTO extends BaseDTO {
private Long contactQuestResultId;
private Long contactCustResultId;
private Long companySiteId;
private Long scenarioQuestionId;
private String otherOpinion;
private Long scenarioAnswerId;
private Short status;
private Long oldContactCustResultId;
private Long customerId;
private Long campaignId;
}
...@@ -21,4 +21,8 @@ public class CustomerCustomDTO { ...@@ -21,4 +21,8 @@ public class CustomerCustomDTO {
String ipccStatus; String ipccStatus;
String mobileNumber; String mobileNumber;
String email; String email;
String connectStatus;
String connectTime;
String customerName;
Long campaignCustomerId;
} }
package com.viettel.campaign.web.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class FieldsToShowDTO extends BaseDTO implements Serializable {
private Long campaignCusListColId;
private Long companySiteId;
private Long campaignId;
private String columnName;
private String columnTitle;
private Long orderIndex;
private Long customizeFieldId;
private String customizeFieldTitle;
private Boolean isFix;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class ReceiveCustLogDTO {
private Long receiveCustLogId;
private Long companySiteId;
private Long customerId;
private Date startTime;
private Long agentId;
private Long campaignId;
private Date endTime;
}
...@@ -3,6 +3,7 @@ package com.viettel.campaign.web.dto; ...@@ -3,6 +3,7 @@ package com.viettel.campaign.web.dto;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
...@@ -11,7 +12,7 @@ import java.util.Date; ...@@ -11,7 +12,7 @@ import java.util.Date;
@Getter @Getter
@Setter @Setter
public class ScenarioAnswerDTO { public class ScenarioAnswerDTO implements Serializable {
public Long scenarioAnswerId; public Long scenarioAnswerId;
public Long companySiteId; public Long companySiteId;
public Long scenarioQuestionId; public Long scenarioQuestionId;
...@@ -23,4 +24,5 @@ public class ScenarioAnswerDTO { ...@@ -23,4 +24,5 @@ public class ScenarioAnswerDTO {
public Date createTime; public Date createTime;
public Date deleteTime; public Date deleteTime;
public Long mappingQuestionId; public Long mappingQuestionId;
public Long campaignId;
} }
...@@ -4,6 +4,7 @@ import lombok.Getter; ...@@ -4,6 +4,7 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
...@@ -21,5 +22,7 @@ public class ScenarioDTO { ...@@ -21,5 +22,7 @@ public class ScenarioDTO {
private Date createTime; private Date createTime;
private Long updateBy; private Long updateBy;
private Date updateTime; private Date updateTime;
private List<ScenarioQuestionDTO> lstQuestion;
private List<ScenarioAnswerDTO> lstAnswer;
} }
...@@ -3,7 +3,9 @@ package com.viettel.campaign.web.dto; ...@@ -3,7 +3,9 @@ package com.viettel.campaign.web.dto;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
...@@ -11,7 +13,7 @@ import java.util.Date; ...@@ -11,7 +13,7 @@ import java.util.Date;
@Getter @Getter
@Setter @Setter
public class ScenarioQuestionDTO { public class ScenarioQuestionDTO implements Serializable {
private Long scenarioQuestionId; private Long scenarioQuestionId;
private Long companySiteId; private Long companySiteId;
private Long campaignId; private Long campaignId;
...@@ -26,4 +28,5 @@ public class ScenarioQuestionDTO { ...@@ -26,4 +28,5 @@ public class ScenarioQuestionDTO {
private Short isRequire; private Short isRequire;
private Short isDefault; private Short isDefault;
private Short answerIndex; private Short answerIndex;
private List<ScenarioAnswerDTO> lstAnswers;
} }
package com.viettel.campaign.web.dto.request_dto; package com.viettel.campaign.web.dto.request_dto;
import com.viettel.campaign.web.dto.BaseDTO; import com.viettel.campaign.web.dto.BaseDTO;
import com.viettel.campaign.web.dto.CustomerCustomDTO;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
...@@ -42,4 +45,6 @@ public class CampaignRequestDTO extends BaseDTO { ...@@ -42,4 +45,6 @@ public class CampaignRequestDTO extends BaseDTO {
String surveyStatus; String surveyStatus;
String roleUser; String roleUser;
String contactCustId; String contactCustId;
List<CustomerCustomDTO> customerCustomDTOList;
} }
...@@ -4,8 +4,7 @@ import com.viettel.campaign.model.ccms_full.TimeRangeDialMode; ...@@ -4,8 +4,7 @@ import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode; import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import com.viettel.campaign.service.CampaignExecuteService; import com.viettel.campaign.service.CampaignExecuteService;
import com.viettel.campaign.service.CampaignService; import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.CampaignDTO; import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO; import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -40,8 +39,9 @@ public class CampaignController { ...@@ -40,8 +39,9 @@ public class CampaignController {
@PostMapping("/searchCampaignExecute") @PostMapping("/searchCampaignExecute")
@ResponseBody @ResponseBody
public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto) { public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto, HttpServletRequest request) {
ResultDTO result = campaignExecuteService.searchCampaignExecute(requestDto); String xAuthToken = request.getHeader("X-Auth-Token");
ResultDTO result = campaignExecuteService.searchCampaignExecute(requestDto, xAuthToken);
return new ResponseEntity<>(result, HttpStatus.OK); return new ResponseEntity<>(result, HttpStatus.OK);
} }
...@@ -54,11 +54,32 @@ public class CampaignController { ...@@ -54,11 +54,32 @@ public class CampaignController {
@PostMapping("/getCall") @PostMapping("/getCall")
@ResponseBody @ResponseBody
public ResponseEntity<ResultDTO> getCall(@RequestBody CampaignRequestDTO requestDto) { public ResponseEntity<ResultDTO> getCall(@RequestBody CampaignCustomerDTO requestDto) {
ResultDTO result = campaignExecuteService.getCall(requestDto); ResultDTO result = campaignExecuteService.getCall(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK); return new ResponseEntity<>(result, HttpStatus.OK);
} }
@PostMapping("/getCallLog")
@ResponseBody
public ResponseEntity<ResultDTO> getCallLog(@RequestBody ReceiveCustLogDTO requestDto) {
ResultDTO result = campaignExecuteService.getCallLog(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/callCustomer")
@ResponseBody
public ResponseEntity<ResultDTO> callCustomer(@RequestBody ContactCustResultDTO requestDto) {
ResultDTO result = campaignExecuteService.callCustomer(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getAgentLogout")
@ResponseBody
public ResponseEntity<ResultDTO> getAgentLogout(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignExecuteService.getAgentLogout(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "/search", method = RequestMethod.POST) @RequestMapping(value = "/search", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> search(@RequestBody CampaignRequestDTO requestDto) { public ResponseEntity<ResultDTO> search(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignService.search(requestDto); ResultDTO result = campaignService.search(requestDto);
...@@ -75,13 +96,6 @@ public class CampaignController { ...@@ -75,13 +96,6 @@ public class CampaignController {
return campaignService.addNewCampaign(dto); return campaignService.addNewCampaign(dto);
} }
@GetMapping("/countRecallCustomer")
@ResponseBody
public ResponseEntity countRecallCustomer(@RequestParam("companySiteId") Long companySiteId, @RequestParam("agentId") Long agentId) {
Map result = campaignService.countRecallCustomer(companySiteId, agentId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/findByCampaignId") @GetMapping("/findByCampaignId")
@ResponseBody @ResponseBody
public ResponseEntity findByCampaignId(@RequestParam("campaignId") Long campaignId) { public ResponseEntity findByCampaignId(@RequestParam("campaignId") Long campaignId) {
...@@ -142,7 +156,7 @@ public class CampaignController { ...@@ -142,7 +156,7 @@ public class CampaignController {
return new ResponseEntity<byte[]>(contentReturn, headers, HttpStatus.OK); return new ResponseEntity<byte[]>(contentReturn, headers, HttpStatus.OK);
} }
@RequestMapping(value = "/changeCampaignStatus", method = RequestMethod.PUT) @RequestMapping(value = "/changeCampaignStatus", method = RequestMethod.POST)
public ResultDTO changeCampaignStatus(@RequestBody CampaignDTO dto, HttpServletRequest request) { public ResultDTO changeCampaignStatus(@RequestBody CampaignDTO dto, HttpServletRequest request) {
dto.setSessionId(request.getSession().getId()); dto.setSessionId(request.getSession().getId());
return campaignService.changeCampaignStatus(dto); return campaignService.changeCampaignStatus(dto);
...@@ -191,4 +205,46 @@ public class CampaignController { ...@@ -191,4 +205,46 @@ public class CampaignController {
ResultDTO resultDTO = campaignService.updateCampaign(dto); ResultDTO resultDTO = campaignService.updateCampaign(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK); return new ResponseEntity<>(resultDTO, HttpStatus.OK);
} }
@PostMapping("/findCustomerListReallocation")
@ResponseBody
public ResponseEntity<?> findCustomerListReallocation(@RequestBody CampaignRequestDTO dto) {
ResultDTO result = campaignService.findCustomerListReallocation(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/reallocationCustomer")
@ResponseBody
public ResponseEntity<?> reallocationCustomer(@RequestBody CampaignRequestDTO dto) {
ResultDTO result = campaignService.reallocationCustomer(dto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getListFieldsNotShow")
@ResponseBody
public ResponseEntity<?> getListFieldsNotShow(@RequestBody CampaignRequestDTO dto) {
ResultDTO resultDTO = campaignService.getListFieldsNotShow(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@PostMapping("/getListFieldsToShow")
@ResponseBody
public ResponseEntity<?> getListFieldsToShow(@RequestBody CampaignRequestDTO dto) {
ResultDTO resultDTO = campaignService.getListFieldsToShow(dto);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@GetMapping("/countRecallCustomer")
@ResponseBody
public ResponseEntity countRecallCustomer(@RequestParam("companySiteId") Long companySiteId, @RequestParam("agentId") Long agentId) {
ResultDTO result = campaignExecuteService.countRecallCustomer(companySiteId, agentId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping("/getCustomerRecall")
@ResponseBody
public ResponseEntity getCustomerRecall(@RequestParam("campaignId") Long campaignId, @RequestParam("customerId") Long customerId) {
ResultDTO result = campaignExecuteService.getCustomerRecall(campaignId, customerId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
} }
package com.viettel.campaign.web.rest; package com.viettel.campaign.web.rest;
import com.viettel.campaign.model.ccms_full.Customer; import com.viettel.campaign.utils.RedisUtil;
import com.viettel.campaign.web.dto.*; import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.service.CustomerService; import com.viettel.campaign.service.CustomerService;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO; import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.econtact.filter.UserSession;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders; import org.springframework.http.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils; import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.File; import java.io.File;
import java.nio.file.Files; import java.nio.file.Files;
...@@ -60,18 +59,7 @@ public class CustomerController { ...@@ -60,18 +59,7 @@ public class CustomerController {
@ResponseBody @ResponseBody
public ResultDTO createCustomer(@RequestBody @Valid CustomerDTO customerDTO) { public ResultDTO createCustomer(@RequestBody @Valid CustomerDTO customerDTO) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil(); result = customerService.createCustomer(customerDTO);
//logUtil.initKpiLog("createCust");
try {
//LOGGER.info("Returning createCustomer: start");
result = customerService.createCustomer(customerDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
}
return result; return result;
} }
...@@ -110,40 +98,21 @@ public class CustomerController { ...@@ -110,40 +98,21 @@ public class CustomerController {
@PostMapping("/createCustomerList") @PostMapping("/createCustomerList")
@ResponseBody @ResponseBody
public ResultDTO createCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) { public ResultDTO createCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO, HttpServletRequest request) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil();
//logUtil.initKpiLog("createCust") String xAuthToken = request.getHeader("X-Auth-Token");
try { UserSession userSession = (UserSession) RedisUtil.getInstance().get(xAuthToken);
//LOGGER.info("Returning createCustomer: start");
result = customerService.createCustomerList(customerListDTO); result = customerService.createCustomerList(customerListDTO, userSession.getUserName());
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
// LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
}
return result; return result;
// return new ResponseEntity<>("", HttpStatus.OK);
} }
@PostMapping("/updateCustomerList") @PostMapping("/updateCustomerList")
@ResponseBody @ResponseBody
public ResultDTO updateCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) { public ResultDTO updateCustomerList(@RequestBody @Valid CustomerListDTO customerListDTO) {
ResultDTO result = new ResultDTO(); ResultDTO result = new ResultDTO();
//LogUtil logUtil = new LogUtil(); result = customerService.updateCustomerList(customerListDTO);
//logUtil.initKpiLog("createCust");
try {
//LOGGER.info("Returning createCustomer: start");
result = customerService.updateCustomerList(customerListDTO);
//LOGGER.info("Returning createCustomer:" + result.getErrorCode());
//logUtil.endKpiLog(customerDTO, 0, result.getErrorCode(), result.getDetail(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
} catch (Exception e) {
result.setErrorCode("-1");
// LOGGER.error(e);
//logUtil.endKpiLog(customerDTO, 1, result.getErrorCode(), e.getMessage(), CustomerController.class, customerDTO.getAgentProcess(), this.serverPort);
}
return result; return result;
} }
...@@ -267,17 +236,4 @@ public class CustomerController { ...@@ -267,17 +236,4 @@ public class CustomerController {
List<CustomizeFieldDTO> data = customerService.getCustomizeField(customerId); List<CustomizeFieldDTO> data = customerService.getCustomizeField(customerId);
return new ResponseEntity<>(data, HttpStatus.OK); return new ResponseEntity<>(data, HttpStatus.OK);
} }
@GetMapping(path = "" , produces = {MediaType.APPLICATION_JSON_VALUE}) }
public ResponseEntity<List<Customer>>query(@RequestParam(value = "search")String query){
List<Customer> result = null;
try {
result= customerService.searchByQuery(query);
}catch (IllegalArgumentException iae){
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body(result);
}
return ResponseEntity.status(HttpStatus.OK)
.body(result);
}
}
package com.viettel.campaign.web.rest; package com.viettel.campaign.web.rest;
import org.springframework.web.bind.annotation.CrossOrigin; import com.viettel.campaign.service.ScenarioAnswerService;
import org.springframework.web.bind.annotation.RequestMapping; import com.viettel.campaign.web.dto.ResultDTO;
import org.springframework.web.bind.annotation.RestController; import com.viettel.campaign.web.dto.ScenarioAnswerDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
...@@ -12,4 +16,25 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -12,4 +16,25 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/ipcc/campaign/scenario-answer") @RequestMapping("/ipcc/campaign/scenario-answer")
@CrossOrigin @CrossOrigin
public class ScenarioAnswerController { public class ScenarioAnswerController {
@Autowired
ScenarioAnswerService scenarioAnswerService;
@RequestMapping(value = "/findByScenarioQuestionCompany", method= RequestMethod.GET)
public ResponseEntity<ResultDTO> findByScenarioQuestionCampaignCompany(@RequestParam Long scenarioQuestionId,
@RequestParam Long companySiteId) {
ResultDTO resultDTO = scenarioAnswerService.findByScenarioQuestionCompany(scenarioQuestionId, companySiteId);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value = "/get-max-orderId", method = RequestMethod.GET)
public Long getMaxOrderId(@RequestParam Long scenarioQuestionId, @RequestParam Long companySiteId)
{
return scenarioAnswerService.getMaxAnswerOrderId(scenarioQuestionId, companySiteId);
}
@RequestMapping(value="/delete", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> deleteQuestion(@RequestBody ScenarioAnswerDTO answerDTO) {
ResultDTO resultDTO = scenarioAnswerService.delete(answerDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
} }
...@@ -33,4 +33,10 @@ public class ScenarioController { ...@@ -33,4 +33,10 @@ public class ScenarioController {
ResultDTO resultDTO = scenarioService.update(scenario); ResultDTO resultDTO = scenarioService.update(scenario);
return new ResponseEntity<>(resultDTO, HttpStatus.OK); return new ResponseEntity<>(resultDTO, HttpStatus.OK);
} }
@RequestMapping(value = "/sort-question-answer", method = RequestMethod.POST)
ResponseEntity<ResultDTO> sortQuestionAndAnswer(@RequestBody ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = scenarioService.sortQuestionAndAnswer(scenarioDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
} }
...@@ -39,3 +39,28 @@ campaign.status.2 = Deploy ...@@ -39,3 +39,28 @@ campaign.status.2 = Deploy
campaign.status.3 = Pause campaign.status.3 = Pause
campaign.status.4 = Finish campaign.status.4 = Finish
campaign.status.5 = Kêt thúc sớm campaign.status.5 = Kêt thúc sớm
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
...@@ -42,4 +42,27 @@ campaign.status.3 = Tạm ngừng ...@@ -42,4 +42,27 @@ campaign.status.3 = Tạm ngừng
campaign.status.4 = Kêt thúc campaign.status.4 = Kêt thúc
campaign.status.5 = Kêt thúc sớm campaign.status.5 = Kêt thúc sớm
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
with campaign_type_list as (
select trim (regexp_substr(:p_list_compaign_type, '[^,]+', 1, level)) campaign_type
from dual
connect by level <= regexp_count(:p_list_compaign_type, ',') +1
),
contact_status_list as (
select trim (regexp_substr(:p_list_contact_status, '[^,]+', 1, level)) contact_status
from dual
connect by level <= regexp_count(:p_list_contact_status, ',') +1
),
survey_status_list as (
select trim (regexp_substr(:p_list_survey_status, '[^,]+', 1, level)) survey_status
from dual
connect by level <= regexp_count(:p_list_survey_status, ',') +1
),
record_status_list as (
select trim (regexp_substr(:p_list_record_status, '[^,]+', 1, level)) record_status
from dual
connect by level <= regexp_count(:p_list_record_status, ',') +1
),
campaign_id_list as (
select trim (regexp_substr(:p_list_campaign_id, '[^,]+', 1, level)) campaign_id
from dual
connect by level <= regexp_count(:p_list_campaign_id, ',') +1
),
data_temp as (
select b.campaign_code campaignCode, select b.campaign_code campaignCode,
b.campaign_name campaignName, b.campaign_name campaignName,
c.user_name userName, c.user_name userName,
...@@ -22,3 +48,18 @@ where a.status <> 0 ...@@ -22,3 +48,18 @@ where a.status <> 0
and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY') and a.create_time <= to_date(:p_date_to, 'DD/MM/YYYY')
and a.duration_call >= :p_call_time_from and a.duration_call >= :p_call_time_from
and a.duration_call <= :p_call_time_to and a.duration_call <= :p_call_time_to
and to_char(a.customer_id) like '%'||:p_customer_id||'%'
and b.campaign_type in (select campaign_type from campaign_type_list)
and to_char(a.contact_status) in (select contact_status from contact_status_list)
and to_char(a.call_status) in (select survey_status from survey_status_list)
and to_char(a.status) in (select record_status from record_status_list)
and (:p_phone_number is null or to_char(a.phone_number) like '%'||:p_phone_number||'%')
and (:p_list_campaign_id is null or b.campaign_code in (select campaign_id from campaign_id_list))
and (:p_campaign_name is null or upper(b.campaign_name) like '%'||:p_campaign_name||'%')
and (:p_user_name is null or upper(c.user_name) like '%'||:p_user_name||'%')
),
data as (
select a.*, rownum row_ from data_temp a
)
select * from data
where :p_page_size = 0 or (row_ >= ((:p_page_number - 1) * :p_page_size + 1) and row_ < (:p_page_number * :p_page_size + 1))
with contact as (
select customer_id, contact
from (
select * from customer_contact
where status = 1
and contact_type = 5
and is_direct_line = 1
order by create_date desc
)
where rownum = 1
),
connect_status as (
select complete_value, complete_name
from campaign_complete_code
where company_site_id = :p_company_site_id
and complete_type = 1
and complete_value <> 1
),
connect_status_list as (
select trim (regexp_substr(:p_list_connect_status, '[^,]+', 1, level)) connect_status
from dual
connect by level <= regexp_count(:p_list_connect_status, ',') +1
),
data as (
select a.campaign_customer_id campaignCustomerId,
b.name customerName,
c.contact mobileNumber,
to_char(a.call_time, 'DD/MM/YYYY HH24:MI:SS') connectTime,
d.complete_name connectStatus
from campaign_customer a
left join customer b on a.customer_id = b.customer_id
left join contact c on a.customer_id = c.customer_id
left join connect_status d on d.complete_value = a.status
where a.campaign_id = :p_campaign_id
and a.in_campaign_status = 1
and a.status in (select connect_status from connect_status_list)
order by connectTime desc, customerName
),
final_data as (
select a.*, rownum row_ from data a
)
select * from final_data
where row_ >= ((:p_page_number - 1) * :p_page_size + 1)
and row_ < (:p_page_number * :p_page_size + 1)
with column_name_temp as (
select column_name columnName, 1 isFix from user_tab_columns, dual
where table_name = 'CUSTOMER'
)
select * from column_name_temp where columnName not in (select column_name from campaign_customerlist_column)
union all
select title columnName, 0 isFix from customize_fields, dual
where function_code = 'CUSTOMER'
and site_id = :p_company_site_id
and customize_field_id not in (select customize_field_id from campaign_customerlist_column where campaign_customerlist_column.campaign_id = :p_campaign_id)
select to_char(column_name) columnName, 1 isFix from campaign_customerlist_column, dual where campaign_id = :p_campaign_id
union all
select customize_field_title columnName, 0 isFix from campaign_customerlist_column where campaign_id = :p_campaign_id
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment