Commit ed8fc845 authored by ='s avatar =

Merge remote-tracking branch 'origin/master'

parents d42969f6 b7ca4979
No preview for this file type
log4j.rootLogger=INFO, R, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=[%t] %d{dd/MM/yyyy HH:mm:ss} %5p %c{1}: (%L) : %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.File=log/campaign.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%t] %d{dd/MM/yyyy HH:mm:ss} %5p %c{1}: (%L) : %m%n
\ No newline at end of file
[main] 19/08/2019 17:50:53 INFO RedisUtil: (38) : Start connect Redis: 10.60.156.82:8011,10.60.156.82:8012,10.60.156.82:8013,10.60.156.82:8014,10.60.156.82:8015,10.60.156.82:8016
[main] 19/08/2019 17:53:34 INFO RedisUtil: (38) : Start connect Redis: 10.60.156.82:8011,10.60.156.82:8012,10.60.156.82:8013,10.60.156.82:8014,10.60.156.82:8015,10.60.156.82:8016
...@@ -127,11 +127,6 @@ ...@@ -127,11 +127,6 @@
<artifactId>poi-ooxml</artifactId> <artifactId>poi-ooxml</artifactId>
<version>3.17</version> <version>3.17</version>
</dependency> </dependency>
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>9.0.1</version>
</dependency>
<dependency> <dependency>
<groupId>org.quartz-scheduler</groupId> <groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId> <artifactId>quartz</artifactId>
...@@ -153,45 +148,8 @@ ...@@ -153,45 +148,8 @@
</dependencies> </dependencies>
<!--<dependencyManagement>-->
<!--<dependencies>-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-dependencies</artifactId>-->
<!--<version>${spring-cloud.version}</version>-->
<!--<type>pom</type>-->
<!--<scope>import</scope>-->
<!--</dependency>-->
<!--</dependencies>-->
<!--</dependencyManagement>-->
<build> <build>
<plugins> <plugins>
<!--<plugin>-->
<!--<groupId>org.asciidoctor</groupId>-->
<!--<artifactId>asciidoctor-maven-plugin</artifactId>-->
<!--<version>1.5.3</version>-->
<!--<executions>-->
<!--<execution>-->
<!--<id>generate-docs</id>-->
<!--<phase>prepare-package</phase>-->
<!--<goals>-->
<!--<goal>process-asciidoc</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<backend>html</backend>-->
<!--<doctype>book</doctype>-->
<!--</configuration>-->
<!--</execution>-->
<!--</executions>-->
<!--<dependencies>-->
<!--<dependency>-->
<!--<groupId>org.springframework.restdocs</groupId>-->
<!--<artifactId>spring-restdocs-asciidoctor</artifactId>-->
<!--<version>${spring-restdocs.version}</version>-->
<!--</dependency>-->
<!--</dependencies>-->
<!--</plugin>-->
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
......
package com.viettel.campaign.config; package com.viettel.campaign.config;
//import com.viettel.campaign.job.CampaignJob; //import com.viettel.campaign.job.CampaignJob;
import com.viettel.campaign.job.CampaignJob; import com.viettel.campaign.job.CampaignJob;
import com.viettel.campaign.service.ApParamService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger; import org.springframework.scheduling.support.CronTrigger;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
......
...@@ -31,27 +31,27 @@ public class CorsFilter implements Filter { ...@@ -31,27 +31,27 @@ public class CorsFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest request = (HttpServletRequest) req;
chain.doFilter(req, resp); // chain.doFilter(req, resp);
// if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
// chain.doFilter(req, resp); chain.doFilter(req, resp);
// return; return;
// } }
// if ("/".equals(request.getRequestURI())) { if ("/".equals(request.getRequestURI())) {
// chain.doFilter(req, resp); chain.doFilter(req, resp);
// return; return;
// } }
// String xAuthToken = request.getHeader("X-Auth-Token"); String xAuthToken = request.getHeader("X-Auth-Token");
// if (xAuthToken == null || "".equals(xAuthToken)) { if (xAuthToken == null || "".equals(xAuthToken)) {
// response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null."); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is null.");
// return; return;
// } }
// Object obj = RedisUtil.getInstance().get(xAuthToken); Object obj = RedisUtil.getInstance().get(xAuthToken);
// if (obj instanceof UserSession) { if (obj instanceof UserSession) {
// chain.doFilter(req, resp); chain.doFilter(req, resp);
// } else { } else {
// response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid."); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "The token is invalid.");
// } }
} }
@Override @Override
......
...@@ -16,7 +16,7 @@ import java.util.List; ...@@ -16,7 +16,7 @@ import java.util.List;
@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); List<ScenarioAnswer> findByScenarioQuestionIdAndCompanySiteIdAndStatusOrderByOrderIndex(Long scenarioQuestionId, Long companySiteId, Short status);
@Query(value="SELECT MAX(orderIndex) FROM ScenarioAnswer WHERE scenarioQuestionId = :scenarioQuestionId AND companySiteId = :companySiteId AND status = 1") @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); Long getMaxAnswerOrderId(@Param("scenarioQuestionId") Long scenarioQuestionId, @Param("companySiteId") Long companySiteId);
......
package com.viettel.campaign.repository.ccms_full; package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
public interface ScenarioQuestionRepositoryCustom { public interface ScenarioQuestionRepositoryCustom {
Integer countDuplicateQuestionCode(ScenarioQuestionDTO questionDTO);
} }
package com.viettel.campaign.repository.ccms_full.impl; package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepositoryCustom; import com.viettel.campaign.repository.ccms_full.ScenarioQuestionRepositoryCustom;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.web.dto.ScenarioQuestionDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.List;
/** /**
* @author anhvd_itsol * @author anhvd_itsol
*/ */
@Repository @Repository
public class ScenarioQuestionRepositoryImpl implements ScenarioQuestionRepositoryCustom { public class ScenarioQuestionRepositoryImpl implements ScenarioQuestionRepositoryCustom {
private static final Logger logger = LogManager.getLogger(ScenarioQuestionRepositoryImpl.class);
@Override
public Integer countDuplicateQuestionCode(ScenarioQuestionDTO questionDTO) {
logger.info("Start search duplicate quest code row::");
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Integer count = null;
try {
StringBuilder sb = new StringBuilder();
//SELECT COUNT(1) FROM ScenarioQuestion WHERE code = :code AND scenarioId = :scenarioId AND campaignId = :campaignId AND companySiteId = :companySiteId AND status = 1"
sb.append("SELECT COUNT(1) FROM SCENARIO_QUESTION WHERE 1 = 1 AND STATUS = 1 ");
if (questionDTO.getScenarioQuestionId() != null) {
sb.append(" AND SCENARIO_QUESTION_ID <> :p_question_id ");
}
if (questionDTO.getCode() != null) {
sb.append(" AND CODE = :p_code ");
}
if (questionDTO.getCampaignId() != null) {
sb.append(" AND CAMPAIGN_ID = :p_campaign_id");
}
if (questionDTO.getCompanySiteId() != null) {
sb.append(" AND COMPANY_SITE_ID = :p_site_id");
}
SQLQuery query = session.createSQLQuery(sb.toString());
if (questionDTO.getScenarioQuestionId() != null) {
query.setParameter("p_question_id", questionDTO.getScenarioQuestionId());
}
if (questionDTO.getCode() != null) {
query.setParameter("p_code", questionDTO.getCode());
}
if (questionDTO.getCampaignId() != null) {
query.setParameter("p_campaign_id", questionDTO.getCampaignId());
}
if (questionDTO.getCompanySiteId() != null) {
query.setParameter("p_site_id", questionDTO.getCompanySiteId());
}
final List<BigDecimal> obj = query.list();
for (BigDecimal i : obj) {
if (i != null) {
count = i.intValue();
}
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return count;
}
} }
...@@ -14,7 +14,10 @@ public interface ScenarioQuestionService { ...@@ -14,7 +14,10 @@ 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(ScenarioQuestionDTO questionDTO);
ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO); ResultDTO delete(ScenarioQuestionDTO scenarioQuestionDTO);
ResultDTO update(ScenarioQuestionDTO scenarioQuestionDTO);
} }
...@@ -43,7 +43,7 @@ public class ScenarioAnswerServiceImpl implements ScenarioAnswerService { ...@@ -43,7 +43,7 @@ public class ScenarioAnswerServiceImpl implements ScenarioAnswerService {
public ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId) { public ResultDTO findByScenarioQuestionCompany(Long scenarioQuestionId, Long companySiteId) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
List<ScenarioAnswer> lst = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatus(scenarioQuestionId, companySiteId, (short) 1); List<ScenarioAnswer> lst = scenarioAnswerRepository.findByScenarioQuestionIdAndCompanySiteIdAndStatusOrderByOrderIndex(scenarioQuestionId, 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);
......
...@@ -79,6 +79,7 @@ public class ScenarioServiceImpl implements ScenarioService { ...@@ -79,6 +79,7 @@ public class ScenarioServiceImpl implements ScenarioService {
} }
@Override @Override
@Transactional(DataSourceQualify.CCMS_FULL)
public ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO) { public ResultDTO sortQuestionAndAnswer(ScenarioDTO scenarioDTO) {
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
try { try {
......
package com.viettel.campaign.utils; package com.viettel.campaign.utils;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormat;
import org.quartz.CronExpression; import org.quartz.CronExpression;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.Date; import java.util.Date;
import java.util.Optional;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import static com.cronutils.model.CronType.QUARTZ;
import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS;
...@@ -29,11 +20,24 @@ import static java.util.concurrent.TimeUnit.NANOSECONDS; ...@@ -29,11 +20,24 @@ import static java.util.concurrent.TimeUnit.NANOSECONDS;
@Slf4j @Slf4j
public final class DateTimeUtil { public final class DateTimeUtil {
public static final long DAY_IN_MILLIS = 86400000L; public static final long DAY_IN_MILLIS = 86400000L;
public static interface DateTimeProvider { long now(); }
public static interface DateTimeProvider {
long now();
}
private static final AtomicReference<DateTimeProvider> PROVIDER = new AtomicReference<DateTimeProvider>(); private static final AtomicReference<DateTimeProvider> PROVIDER = new AtomicReference<DateTimeProvider>();
public static final DateTimeProvider getProvider() { return PROVIDER.get(); }
public static final DateTimeProvider getProvider() {
return PROVIDER.get();
}
static { static {
PROVIDER.set(new DateTimeProvider() { @Override public long now() { return System.currentTimeMillis(); } }); PROVIDER.set(new DateTimeProvider() {
@Override
public long now() {
return System.currentTimeMillis();
}
});
} }
public static Date currentTime() { public static Date currentTime() {
...@@ -47,7 +51,8 @@ public final class DateTimeUtil { ...@@ -47,7 +51,8 @@ public final class DateTimeUtil {
public static final Date date(final long millis) { public static final Date date(final long millis) {
final int offset = getTimeZoneOffset(millis); final int offset = getTimeZoneOffset(millis);
long t = millis - ((t = (millis + offset) % DAY_IN_MILLIS) < 0 ? DAY_IN_MILLIS + t : t); long t = millis - ((t = (millis + offset) % DAY_IN_MILLIS) < 0 ? DAY_IN_MILLIS + t : t);
t = t + (offset - getTimeZoneOffset(t)); return new Date(t); t = t + (offset - getTimeZoneOffset(t));
return new Date(t);
} }
public static int getTimeZoneOffset(long millis) { public static int getTimeZoneOffset(long millis) {
...@@ -74,8 +79,8 @@ public final class DateTimeUtil { ...@@ -74,8 +79,8 @@ public final class DateTimeUtil {
} }
public static String format(String pattern, Date date, String defaultValue) { public static String format(String pattern, Date date, String defaultValue) {
if(date == null) return defaultValue; if (date == null) return defaultValue;
return format(pattern ,date.getTime()); return format(pattern, date.getTime());
} }
/** /**
...@@ -84,6 +89,7 @@ public final class DateTimeUtil { ...@@ -84,6 +89,7 @@ public final class DateTimeUtil {
public static boolean isValid(final long millis) { public static boolean isValid(final long millis) {
return millis > 0L; return millis > 0L;
} }
/** /**
* *
*/ */
...@@ -99,9 +105,9 @@ public final class DateTimeUtil { ...@@ -99,9 +105,9 @@ public final class DateTimeUtil {
* *
*/ */
public static boolean isRun(String cron, Date lastCheck){ public static boolean isRun(String cron, Date lastCheck) {
boolean isOk = false; boolean isOk = false;
String format="dd-MMM-YYYY hh:mm:ss"; String format = "dd-MMM-YYYY hh:mm:ss";
// String cronExpression="* * 12 ? * FRI *"; // String cronExpression="* * 12 ? * FRI *";
SimpleDateFormat sdf = new SimpleDateFormat(format); SimpleDateFormat sdf = new SimpleDateFormat(format);
CronExpression expression = null; CronExpression expression = null;
...@@ -110,14 +116,14 @@ public final class DateTimeUtil { ...@@ -110,14 +116,14 @@ public final class DateTimeUtil {
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
Date currentDate = new Date(); Date currentDate = new Date();
assert expression != null; assert expression != null;
Date lastDate = expression.getNextValidTimeAfter(lastCheck); Date lastDate = expression.getNextValidTimeAfter(lastCheck);
long interval = lastDate.getTime() - currentDate.getTime(); long interval = lastDate.getTime() - currentDate.getTime();
if(interval <= 0){ if (interval <= 0) {
isOk = true; isOk = true;
} }
return isOk; return isOk;
} }
} }
...@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping("/ipcc/campaign/scenario-question") @RequestMapping("/ipcc/campaign/scenario-question")
@CrossOrigin @CrossOrigin("*")
public class ScenarioQuestionController { public class ScenarioQuestionController {
@Autowired @Autowired
ScenarioQuestionService scenarioQuestionService; ScenarioQuestionService scenarioQuestionService;
...@@ -39,8 +39,21 @@ public class ScenarioQuestionController { ...@@ -39,8 +39,21 @@ public class ScenarioQuestionController {
return scenarioQuestionService.getMaxOrderId(scenarioId, campaignId, companySiteId); return scenarioQuestionService.getMaxOrderId(scenarioId, campaignId, companySiteId);
} }
@RequestMapping(value = "/count-duplicate-question-code", method = RequestMethod.GET) @RequestMapping(value = "/count-duplicate-question-code", method = RequestMethod.POST)
public Integer countDuplicateQuestionCode(@RequestParam String code, @RequestParam Long scenarioId, @RequestParam Long campaignId, @RequestParam Long companySiteId) { public Integer countDuplicateQuestionCode(@RequestBody ScenarioQuestionDTO questionDTO) {
return scenarioQuestionService.countDuplicateQuestionCode(code, scenarioId, campaignId, companySiteId); return scenarioQuestionService.countDuplicateQuestionCode(questionDTO);
} }
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> deleteQuestion(@RequestBody ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = scenarioQuestionService.delete(scenarioQuestionDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
@RequestMapping(value="/update", method = RequestMethod.PUT)
public ResponseEntity<ResultDTO> update(@RequestBody ScenarioQuestionDTO scenarioQuestionDTO) {
ResultDTO resultDTO = scenarioQuestionService.update(scenarioQuestionDTO);
return new ResponseEntity<>(resultDTO, HttpStatus.OK);
}
} }
package com.viettel.econtact;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceCampaignApplicationTests {
@Test
public void contextLoads() {
}
}
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