Commit ed1c6e2d authored by đinh thị đầm's avatar đinh thị đầm
parents b88b5d4e 7cdb69ac
...@@ -208,5 +208,6 @@ ...@@ -208,5 +208,6 @@
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.8" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.8" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.9.9" level="project" /> <orderEntry type="library" name="Maven: joda-time:joda-time:2.9.9" level="project" />
<orderEntry type="library" name="Maven: org.modelmapper:modelmapper:2.3.2" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
...@@ -183,6 +183,12 @@ ...@@ -183,6 +183,12 @@
<groupId>joda-time</groupId> <groupId>joda-time</groupId>
<artifactId>joda-time</artifactId> <artifactId>joda-time</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
......
package com.viettel.campaign.config;
import org.modelmapper.ModelMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author anhvd_itsol
*/
@Configuration
public class ModelMapperConfig {
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
}
package com.viettel.campaign.model;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Entity
@Table(name = "CAMPAIGN_CUSTOMER")
@Getter
@Setter
public class CampaignCustomer {
@Id
@Basic(optional = false)
@NotNull
@Column(name = "CAMPAIGN_CUSTOMERLIST_ID")
private Long campaignCustomerListId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CUSTOMER_ID")
private Long customerId;
@Column(name = "STATUS")
private Short status;
@Column(name = "AGENT_ID")
private Long agentId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "RECALL_TIME")
private Date recallTime;
@Column(name = "RECALL_COUNT")
private Long recallCount = 0L;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CALL_TIME")
private Date callTime;
@Column(name = "CUSTOMER_LIST_ID")
private Long customerListId;
@Column(name = "IN_CAMPAIGN_STATUS")
private Short inCampaignStatus;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "SEND_TIME")
private Date sendTime;
@Column(name = "PROCESS_STATUS")
private Short processStatus = 0;
@Column(name = "CONTACT_STATUS")
private Short contactStatus;
@Column(name = "REDISTRIBUTE")
private Short redistribute;
@Column(name = "SESSION_ID")
private String sessionId;
@Column(name = "CALL_STATUS")
private Long callStatus;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "COMPLAIN_ID")
private Long complainId;
}
package com.viettel.campaign.model;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "TIME_RANGE_DIAL_MODE")
@Getter
@Setter
public class TimeRangeDialMode implements Serializable {
@Id
@NotNull
@Basic(optional = false)
@Column(name = "TIME_RANGE_DIAL_MODE_ID")
private Long timeRangeDialModeId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Temporal(TemporalType.DATE)
@Column(name = "START_TIME")
private Date startTime;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "DIAL_MODE")
private Short dialMode;
@Column(name = "USER_ID")
private Long userId;
}
package com.viettel.campaign.model;
import javax.persistence.Entity;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author anhvd_itsol
*/
@Entity
@Table(name = "TIME_ZONE_DIAL_MODE")
@Getter
@Setter
public class TimeZoneDialMode implements Serializable{
@Id
@NotNull
@Basic(optional = false)
@Column(name = "TIME_ZONE_DIAL_MODE_ID")
private Long timeRangeDialModeId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "HOUR")
private String hour;
@Column(name = "MINUTE")
private String minute;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "DIAL_MODE")
private Short dialMode;
@Column(name = "USER_ID")
private Long userId;
}
...@@ -2,8 +2,18 @@ package com.viettel.campaign.repository; ...@@ -2,8 +2,18 @@ package com.viettel.campaign.repository;
import com.viettel.campaign.model.Campaign; import com.viettel.campaign.model.Campaign;
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;
@Repository @Repository
public interface CampaignRepository extends JpaRepository<Campaign, Long>, CampaignRepositoryCustom { public interface CampaignRepository extends JpaRepository<Campaign, Long>, CampaignRepositoryCustom {
@Query("SELECT COUNT(c.campaignId) " +
" FROM Campaign c JOIN CampaignCustomer cc ON c.campaignId = cc.campaignId " +
" WHERE cc.companySiteId = :pCompanySiteId " +
" AND cc.status = 1 " +
" AND cc.recallTime <= sysdate " +
" AND cc.agentId = :pAgentId")
Long countRecallCustomer(@Param("pCompanySiteId") Long pCompanySiteId, @Param("pAgentId") Long pAgentId);
} }
package com.viettel.campaign.repository; package com.viettel.campaign.repository;
import com.viettel.campaign.web.dto.CampaignDTO;
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.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public interface CampaignRepositoryCustom { public interface CampaignRepositoryCustom {
List<CampaignDTO> searchCampaignExecute(String agentId, Pageable pageable); ResultDTO searchCampaignExecute(CampaignRequestDTO campaignRequestDto);
ResultDTO search(CampaignRequestDTO requestDto); ResultDTO search(CampaignRequestDTO requestDto);
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO); ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
} }
package com.viettel.campaign.service; package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignDTO;
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 java.util.Map; import java.util.Map;
public interface CampaignService { public interface CampaignService {
Map searchCampaignExecute(int page, int pageSize, String sort, String agentId); ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto);
ResultDTO search(CampaignRequestDTO requestDto); ResultDTO search(CampaignRequestDTO requestDto);
ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO); ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO);
ResultDTO addNewCampaign(CampaignDTO campaignDTO);
Map countRecallCustomer(Long companySiteId, Long agentId);
} }
package com.viettel.campaign.service.impl; package com.viettel.campaign.service.impl;
import com.viettel.campaign.model.Campaign;
import com.viettel.campaign.repository.CampaignRepository; import com.viettel.campaign.repository.CampaignRepository;
import com.viettel.campaign.repository.impl.CampaignRepositoryImpl;
import com.viettel.campaign.service.CampaignService; import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.web.dto.CampaignDTO; import com.viettel.campaign.web.dto.CampaignDTO;
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.Logger;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@Transactional(rollbackFor = Exception.class)
public class CampaignServiceImpl implements CampaignService { public class CampaignServiceImpl implements CampaignService {
private static final Logger logger = LogManager.getLogger(CampaignRepositoryImpl.class);
@Autowired @Autowired
CampaignRepository campaignRepository; CampaignRepository campaignRepository;
@Override @Autowired
public Map searchCampaignExecute(int page, int pageSize, String sort, String agentId) { ModelMapper modelMapper;
Map result = new HashMap();
Pageable pageable = PageRequest.of(page, pageSize, Sort.by(sort));
List<CampaignDTO> lst = campaignRepository.searchCampaignExecute(agentId, pageable);
List<CampaignDTO> count = campaignRepository.searchCampaignExecute(agentId, null);
result.put("totalItem", count.size());
result.put("data", lst);
return result; @Override
public ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto) {
return campaignRepository.searchCampaignExecute(requestDto);
} }
@Override @Override
...@@ -44,4 +43,42 @@ public class CampaignServiceImpl implements CampaignService { ...@@ -44,4 +43,42 @@ public class CampaignServiceImpl implements CampaignService {
public ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO) { public ResultDTO findByCampaignCode(CampaignRequestDTO requestDTO) {
return campaignRepository.findByCampaignCode(requestDTO); return campaignRepository.findByCampaignCode(requestDTO);
} }
@Override
public ResultDTO addNewCampaign(CampaignDTO campaignDTO) {
ResultDTO resultDTO = new ResultDTO();
Campaign campaign = modelMapper.map(campaignDTO, Campaign.class);
try {
campaign = campaignRepository.save(campaign);
//insert sub tables
resultDTO.setErrorCode(Constants.ApiErrorCode.SUCCESS);
resultDTO.setErrorCode(Constants.ApiErrorDesc.SUCCESS);
resultDTO.setData(campaign);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
resultDTO.setErrorCode(Constants.ApiErrorCode.ERROR);
resultDTO.setErrorCode(Constants.ApiErrorDesc.ERROR);
}
return resultDTO;
}
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;
}
} }
...@@ -3,7 +3,13 @@ import java.io.File; ...@@ -3,7 +3,13 @@ import java.io.File;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.io.IOException; import java.io.IOException;
import com.viettel.campaign.web.dto.BaseDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
...@@ -30,4 +36,16 @@ public class SQLBuilder { ...@@ -30,4 +36,16 @@ public class SQLBuilder {
} }
return null; return null;
} }
public static Pageable buildPageable(BaseDTO obj) {
Pageable pageable = null;
if (DataUtil.isNullOrEmpty(obj.getSort())) {
pageable = PageRequest.of(obj.getPage(), obj.getPageSize(), null);
} else {
String[] sorts = obj.getSort().split(",");
Sort sort = new Sort(Sort.Direction.fromString(sorts[1]), sorts[0]);
pageable = PageRequest.of(obj.getPage(), obj.getPageSize(), sort);
}
return pageable;
}
} }
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class CampaignCustomerDTO {
private Long campaignCustomerListId;
private Long campaignId;
private Long customerId;
private Short status;
private Long agentId;
private Date recallTime;
private Long recallCount = 0L;
private Date callTime;
private Long customerListId;
private Short inCampaignStatus;
private Date sendTime;
private Short processStatus = 0;
private Short contactStatus;
private Short redistribute;
private String sessionId;
private Long callStatus;
private Long companySiteId;
private Long complainId;
}
...@@ -58,4 +58,6 @@ public class CampaignDTO extends BaseDTO { ...@@ -58,4 +58,6 @@ public class CampaignDTO extends BaseDTO {
private Long numOfNotJoinedCus; private Long numOfNotJoinedCus;
private Long numOfLockCus; private Long numOfLockCus;
private String campaignTypeName; private String campaignTypeName;
} }
...@@ -13,4 +13,5 @@ public class ResultDTO { ...@@ -13,4 +13,5 @@ public class ResultDTO {
private String description; private String description;
private List<?> listData = new ArrayList(); private List<?> listData = new ArrayList();
private Object data; private Object data;
private int totalRow = 0;
} }
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class TimeRangeDialModeDTO {
private Long timeRangeDialModeId;
private Long companySiteId;
private Date startTime;
private Long campaignId;
private Short dialMode;
private Long userId;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
/**
* @author anhvd_itsol
*/
@Getter
@Setter
public class TimeZoneDialModeDTO {
private Long timeRangeDialModeId;
private Long companySiteId;
private String hour;
private String minute;
private Long campaignId;
private Short dialMode;
private Long userId;
}
...@@ -8,7 +8,6 @@ import lombok.Setter; ...@@ -8,7 +8,6 @@ import lombok.Setter;
* @author anhvd_itsol * @author anhvd_itsol
*/ */
@Getter @Getter
@Setter @Setter
public class CampaignRequestDTO extends BaseDTO { public class CampaignRequestDTO extends BaseDTO {
...@@ -24,5 +23,6 @@ public class CampaignRequestDTO extends BaseDTO { ...@@ -24,5 +23,6 @@ public class CampaignRequestDTO extends BaseDTO {
Short type; Short type;
Short chanel; Short chanel;
String companySiteId; String companySiteId;
String agentId;
String types; String types;
} }
...@@ -21,10 +21,10 @@ public class CampaignController { ...@@ -21,10 +21,10 @@ public class CampaignController {
@Autowired @Autowired
CampaignService campaignService; CampaignService campaignService;
@GetMapping("/searchCampaignExecute") @RequestMapping("/searchCampaignExecute")
@ResponseBody @ResponseBody
public ResponseEntity searchCampaignExecute(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam("sort") String sort, @RequestParam("agentId") String agentId) { public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto) {
Map result = campaignService.searchCampaignExecute(page, pageSize, sort, agentId); ResultDTO result = campaignService.searchCampaignExecute(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK); return new ResponseEntity<>(result, HttpStatus.OK);
} }
...@@ -39,4 +39,15 @@ public class CampaignController { ...@@ -39,4 +39,15 @@ public class CampaignController {
return campaignService.findByCampaignCode(dto); return campaignService.findByCampaignCode(dto);
} }
@RequestMapping(method = RequestMethod.POST)
public ResultDTO addNewCampaign(@RequestBody CampaignRequestDTO dto) {
return campaignService.findByCampaignCode(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);
}
} }
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