From 69d01daaf51ce9c7bdd1de79c6ce310976c943bd Mon Sep 17 00:00:00 2001 From: jianjun Date: Thu, 18 Jun 2020 20:23:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A3=E4=BC=A0=E8=83=BD=E5=8A=9B=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stats/ArticleGridPublishedSummaryDTO.java | 5 +- .../com/epmet/dao/stats/DimAgencyDao.java | 25 ++++--- .../FactArticlePublishedAgencyDailyDao.java | 10 ++- .../impl/StatsPublicityServiceImpl.java | 75 +++++++++++++++---- .../epmet/service/stats/DimAgencyService.java | 10 +++ ...actArticlePublishedAgencyDailyService.java | 13 ++++ .../stats/impl/DimAgencyServiceImpl.java | 14 +++- ...rticlePublishedAgencyDailyServiceImpl.java | 13 +++- .../epmet/service/voice/ArticleService.java | 16 +++- .../voice/impl/ArticleServiceImpl.java | 18 ++++- .../resources/mapper/stats/DimAgencyDao.xml | 12 +++ .../FactArticlePublishedAgencyDailyDao.xml | 3 + 12 files changed, 182 insertions(+), 32 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/stats/ArticleGridPublishedSummaryDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/stats/ArticleGridPublishedSummaryDTO.java index 301099d52b..c1bd1e7043 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/stats/ArticleGridPublishedSummaryDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/stats/ArticleGridPublishedSummaryDTO.java @@ -23,7 +23,10 @@ public class ArticleGridPublishedSummaryDTO implements Serializable { * 客户id */ private String customerId; - + /** + * 上级机关id,顶级为"0" + */ + private String pid; /** * 机关id */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimAgencyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimAgencyDao.java index 056c65bace..493fade14e 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimAgencyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimAgencyDao.java @@ -47,29 +47,36 @@ public interface DimAgencyDao extends BaseDao { List selectDimAgencyList(DimAgencyDTO dto); /** - * @Description 获取所有机关 * @param - * @return List + * @return List + * @Description 获取所有机关 * @author wangc * @date 2020.06.18 09:26 - **/ + **/ List selectAllAgency(); /** - * @Description 根据PID获取下级机关 * @param pid - * @return List + * @return List + * @Description 根据PID获取下级机关 * @author wangc * @date 2020.06.18 09:26 - **/ - List selectSubAgencyByPid(@Param("pid")String pid); + **/ + List selectSubAgencyByPid(@Param("pid") String pid); /** - * @Description 获取顶层级机关机关 * @param - * @return List + * @return List + * @Description 获取顶层级机关机关 * @author wangc * @date 2020.06.18 09:26 **/ List selectTopAgency(); + + /** + * desc:根据客户id 获取机关列表 + * @param customerId + * @return + */ + List getAgencyListByCustomerId(@Param("customerId") String customerId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactArticlePublishedAgencyDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactArticlePublishedAgencyDailyDao.java index ee299f316c..5a7e9dbfc7 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactArticlePublishedAgencyDailyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactArticlePublishedAgencyDailyDao.java @@ -20,6 +20,7 @@ package com.epmet.dao.stats; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.entity.stats.FactArticlePublishedAgencyDailyEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 文章发布数量【机关】日统计表 @@ -29,5 +30,12 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface FactArticlePublishedAgencyDailyDao extends BaseDao { - + /** + * desc:删除数据 + * + * @param customerId + * @param dateId + * @return + */ + int deleteByDateId(@Param("customerId") String customerId, @Param("dateId") String dateId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsPublicityServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsPublicityServiceImpl.java index 8dab26fefe..452d484077 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsPublicityServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsPublicityServiceImpl.java @@ -1,12 +1,10 @@ package com.epmet.service.impl; +import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.dto.stats.ArticleGridPublishedSummaryDTO; -import com.epmet.entity.stats.DimDepartmentEntity; -import com.epmet.entity.stats.DimGridEntity; -import com.epmet.entity.stats.FactArticlePublishedDepartmentDailyEntity; -import com.epmet.entity.stats.FactArticlePublishedGridDailyEntity; +import com.epmet.entity.stats.*; import com.epmet.service.StatsPublicityService; import com.epmet.service.stats.*; import com.epmet.service.voice.ArticlePublishRangeService; @@ -60,6 +58,9 @@ public class StatsPublicityServiceImpl implements StatsPublicityService { private FactArticlePublishedGridDailyService factArticlePublishedGridDailyService; @Autowired private FactArticlePublishedDepartmentDailyService factArticlePublishedDepartmentDailyService; + @Autowired + private FactArticlePublishedAgencyDailyService factArticlePublishedAgencyDailyService; + @Autowired private ExecutorService executorService; @@ -101,7 +102,7 @@ public class StatsPublicityServiceImpl implements StatsPublicityService { //转换为 需要插入的Entity Map departmentDailyEntityMap = convertDepartmentDailyEntity(departmentDTOList, dimIdBean); //获取当天的业务数据 - List publishedArticleCount = articleService.getAllPublishedCount(customerId,DateUtils.integrate(statsDate,DateUtils.DATE_PATTERN)); + List publishedArticleCount = articleService.getAllDepartmentPublishedCount(customerId,DateUtils.integrate(statsDate,DateUtils.DATE_PATTERN)); if (!CollectionUtils.isEmpty(publishedArticleCount)) { for (ArticleGridPublishedSummaryDTO summaryDTO : publishedArticleCount) { @@ -162,12 +163,12 @@ public class StatsPublicityServiceImpl implements StatsPublicityService { //转换为 需要插入的Entity Map gridDailyEntityMap = convertGridDailyEntity(gridDTOList, dimIdBean); //获取当天的业务数据 - List publishedArticleCount = articlePublishRangeService.getAllPublishedCount(customerId, statsDate); + List publishedArticleCount = articleService.getAllGridPublishedCount(customerId, statsDate); if (!CollectionUtils.isEmpty(publishedArticleCount)) { for (ArticleGridPublishedSummaryDTO summaryDTO : publishedArticleCount) { FactArticlePublishedGridDailyEntity gridDailyEntities = gridDailyEntityMap.get(summaryDTO.getGridId()); if (gridDailyEntities == null) { - log.error("publicitySummary bizData gridId:{} not exist in dimGrid", summaryDTO.getGridId()); + log.error("publicitySummary getAllGridPublishedCount gridId:{} not exist in dimGrid", summaryDTO.getGridId()); continue; } gridDailyEntities.setArticleTotalCount(summaryDTO.getArticleTotalCount()); @@ -180,20 +181,20 @@ public class StatsPublicityServiceImpl implements StatsPublicityService { } private void statsPublishedAgencyDaily(Date statsDate, DimIdGenerator.DimIdBean dimIdBean, String customerId, Map agencySummaryMap) { - //获取所有客户 - List departmentDTOList = null;//dimAgencyService.getAgencyListByCustomerId(customerId); - if (CollectionUtils.isEmpty(departmentDTOList)) { + //获取所有机关 + List agencyDTOList = dimAgencyService.getAgencyListByCustomerId(customerId); + if (CollectionUtils.isEmpty(agencyDTOList)) { log.warn("publicitySummary getAgencyListByCustomerId return empty,customerId:{}", customerId); return; } //转换为 需要插入的Entity - Map departmentDailyEntityMap = convertDepartmentDailyEntity(departmentDTOList, dimIdBean); + Map agencyDailyEntityMap = convertAgencyDailyEntity(agencyDTOList, dimIdBean); //获取当天的业务数据 - List publishedArticleCount = articleService.getAllPublishedCount(customerId,DateUtils.integrate(statsDate,DateUtils.DATE_PATTERN)); + List publishedArticleCount = articleService.getAllAgencyPublishedCount(customerId,DateUtils.integrate(statsDate,DateUtils.DATE_PATTERN)); if (!CollectionUtils.isEmpty(publishedArticleCount)) { for (ArticleGridPublishedSummaryDTO summaryDTO : publishedArticleCount) { - FactArticlePublishedDepartmentDailyEntity gridDailyEntities = departmentDailyEntityMap.get(summaryDTO.getPublisherId()); + FactArticlePublishedAgencyDailyEntity gridDailyEntities = agencyDailyEntityMap.get(summaryDTO.getPublisherId()); if (gridDailyEntities == null) { log.error("publicitySummary bizData departmentId:{} not exist in dimDepartment", summaryDTO.getGridId()); continue; @@ -204,7 +205,32 @@ public class StatsPublicityServiceImpl implements StatsPublicityService { buildAgencySummaryData(agencySummaryMap, summaryDTO); } } - boolean b = factArticlePublishedDepartmentDailyService.deleteAndInsertBatch(customerId, dimIdBean.getDateId(), departmentDailyEntityMap.values()); + //数据向上级机关添加 + if (!CollectionUtils.isEmpty(agencySummaryMap)){ + for (Map.Entry entry : agencySummaryMap.entrySet()) { + String agencyId = entry.getKey(); + ArticleGridPublishedSummaryDTO summary = entry.getValue(); + FactArticlePublishedAgencyDailyEntity dailyEntity = agencyDailyEntityMap.get(agencyId); + if (dailyEntity == null) { + log.error("publicitySummary bizData agencyId:{} not exist in dimAgency", agencyId); + continue; + } + setData2ParentAgency(agencySummaryMap, summary); + } + } + + boolean b = factArticlePublishedAgencyDailyService.deleteAndInsertBatch(customerId, dimIdBean.getDateId(), agencyDailyEntityMap.values()); + } + + private void setData2ParentAgency(Map agencySummaryMap, ArticleGridPublishedSummaryDTO summary) { + String pid = summary.getPid(); + ArticleGridPublishedSummaryDTO parentAgency = agencySummaryMap.get(pid); + parentAgency.setArticleTotalCount(parentAgency.getArticleTotalCount()+summary.getArticleTotalCount()); + parentAgency.setArticlePublishedCount(parentAgency.getArticlePublishedCount()+summary.getArticlePublishedCount()); + pid = parentAgency.getPid(); + if (!NumConstant.ZERO_STR.equals(pid)){ + setData2ParentAgency(agencySummaryMap,parentAgency); + } } /** @@ -248,4 +274,25 @@ public class StatsPublicityServiceImpl implements StatsPublicityService { }); return result; } + + /** + * desc:将机关卫队对象构建为 agencyDaily 对象 + * + * @param dimDepartmentEntities + * @param dimIdBean + * @return + */ + private Map convertAgencyDailyEntity(List dimDepartmentEntities, DimIdGenerator.DimIdBean dimIdBean) { + Map result = new HashMap<>(); + dimDepartmentEntities.forEach(dimGridEntity -> { + FactArticlePublishedAgencyDailyEntity entity = ConvertUtils.sourceToTarget(dimIdBean, FactArticlePublishedAgencyDailyEntity.class); + entity.setCustomerId(dimGridEntity.getCustomerId()); + entity.setPid(dimGridEntity.getPid()); + entity.setAgencyId(dimGridEntity.getId()); + entity.setArticleTotalCount(0); + entity.setArticlePublishedCount(0); + result.put(dimGridEntity.getId(), entity); + }); + return result; + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DimAgencyService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DimAgencyService.java index 9bb3b433d3..8de5b0045f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DimAgencyService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DimAgencyService.java @@ -122,4 +122,14 @@ public interface DimAgencyService extends BaseService { * @date 2020.06.18 09:45 **/ List getTopAgency(); + + /** + * desc: 根据客户Id 获取机关列表数据 + * + * @param customerId + * @return: + * @date: 2020/6/18 17:54 + * @author: jianjun liu + */ + List getAgencyListByCustomerId(String customerId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactArticlePublishedAgencyDailyService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactArticlePublishedAgencyDailyService.java index b674d6ae3e..dc9d7e3d63 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactArticlePublishedAgencyDailyService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactArticlePublishedAgencyDailyService.java @@ -20,6 +20,8 @@ package com.epmet.service.stats; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.entity.stats.FactArticlePublishedAgencyDailyEntity; +import java.util.Collection; + /** * 文章发布数量【机关】日统计表 * @@ -28,5 +30,16 @@ import com.epmet.entity.stats.FactArticlePublishedAgencyDailyEntity; */ public interface FactArticlePublishedAgencyDailyService extends BaseService { + /** + * desc: 删除并插入数据 + * + * @param customerId + * @param dateId + * @param values + * @return: + * @date: 2020/6/18 18:59 + * @author: jianjun liu + */ + boolean deleteAndInsertBatch(String customerId, String dateId, Collection values); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimAgencyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimAgencyServiceImpl.java index bab14194e3..71b04b1a69 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimAgencyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimAgencyServiceImpl.java @@ -20,9 +20,11 @@ package com.epmet.service.stats.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.dao.stats.DimAgencyDao; import com.epmet.dto.AgencySubTreeDto; import com.epmet.dto.stats.DimAgencyDTO; @@ -30,7 +32,6 @@ import com.epmet.entity.org.CustomerAgencyEntity; import com.epmet.entity.stats.DimAgencyEntity; import com.epmet.service.stats.DimAgencyService; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,7 +39,6 @@ import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * 机关维度 @@ -160,4 +160,12 @@ public class DimAgencyServiceImpl extends BaseServiceImpl getAgencyListByCustomerId(String customerId) { + if (StringUtils.isBlank(customerId)){ + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(),EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); + } + return baseDao.getAgencyListByCustomerId(customerId); + } + } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactArticlePublishedAgencyDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactArticlePublishedAgencyDailyServiceImpl.java index 074d917144..1b7f79a281 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactArticlePublishedAgencyDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactArticlePublishedAgencyDailyServiceImpl.java @@ -21,18 +21,27 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.dao.stats.FactArticlePublishedAgencyDailyDao; import com.epmet.entity.stats.FactArticlePublishedAgencyDailyEntity; import com.epmet.service.stats.FactArticlePublishedAgencyDailyService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.Collection; + /** * 文章发布数量【机关】日统计表 * * @author generator generator@elink-cn.com * @since v1.0.0 2020-06-18 */ +@Slf4j @Service public class FactArticlePublishedAgencyDailyServiceImpl extends BaseServiceImpl implements FactArticlePublishedAgencyDailyService { - - + @Override + public boolean deleteAndInsertBatch(String customerId, String dateId, Collection values) { + int i = baseDao.deleteByDateId(customerId, dateId); + log.debug("deleteAndInsertBatch delete customerId:{},rows:{}", customerId,i); + this.insertBatch(values, 100); + return true; + } } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/ArticleService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/ArticleService.java index 3a1c321c9c..e1aee5a20a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/ArticleService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/ArticleService.java @@ -40,5 +40,19 @@ public interface ArticleService extends BaseService { * @param publishDate * @return */ - List getAllPublishedCount(String customerId, Date publishDate); + List getAllDepartmentPublishedCount(String customerId, Date publishDate); + /** + * desc:根据客户id、发布时间 获取文章总数 + * @param customerId + * @param publishDate + * @return + */ + List getAllAgencyPublishedCount(String customerId, Date publishDate); + /** + * desc:根据客户id、发布时间 获取文章总数 + * @param customerId + * @param publishDate + * @return + */ + List getAllGridPublishedCount(String customerId, Date publishDate); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/impl/ArticleServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/impl/ArticleServiceImpl.java index 27821e8a41..9e9674fbe8 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/impl/ArticleServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/voice/impl/ArticleServiceImpl.java @@ -44,10 +44,26 @@ import java.util.List; public class ArticleServiceImpl extends BaseServiceImpl implements ArticleService { @Override - public List getAllPublishedCount(String customerId, Date publishDate) { + public List getAllDepartmentPublishedCount(String customerId, Date publishDate) { if (StringUtils.isBlank(customerId) || publishDate == null){ throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(),EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); } return baseDao.getAllPublishedCount(customerId,publishDate, ProjectConstant.PUBLISH_TYPE_DEPT); } + + @Override + public List getAllAgencyPublishedCount(String customerId, Date publishDate) { + if (StringUtils.isBlank(customerId) || publishDate == null){ + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(),EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); + } + return baseDao.getAllPublishedCount(customerId,publishDate, ProjectConstant.PUBLISH_TYPE_AGENCY); + } + + @Override + public List getAllGridPublishedCount(String customerId, Date publishDate) { + if (StringUtils.isBlank(customerId) || publishDate == null){ + throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(),EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); + } + return baseDao.getAllPublishedCount(customerId,publishDate, ProjectConstant.PUBLISH_TYPE_GRID); + } } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml index d78bbb4eae..ad8ed78057 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml @@ -103,5 +103,17 @@ agency.CUSTOMER_ID, agency.PID + \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactArticlePublishedAgencyDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactArticlePublishedAgencyDailyDao.xml index 301fb3fe9f..ea4debe1dc 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactArticlePublishedAgencyDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactArticlePublishedAgencyDailyDao.xml @@ -22,6 +22,9 @@ + + DELETE FROM fact_article_published_agency_daily WHERE CUSTOMER_ID = #{customerId,jdbcType=VARCHAR} AND DATE_ID = #{dateId,jdbcType=VARCHAR} + \ No newline at end of file