Commit abe3f3bb by zhiwj

咨询建议导出

parent 9f857e2e
......@@ -101,6 +101,7 @@ public class ProblemDTO implements Serializable {
// 回复列表
private List<ProblemReplyDTO> replyList;
private String replyUserContent;
public Integer getProblemId() {
return problemId;
......@@ -261,4 +262,12 @@ public class ProblemDTO implements Serializable {
public void setReplyList(List<ProblemReplyDTO> replyList) {
this.replyList = replyList;
}
public void setReplyUserContent(String replyUserContent) {
this.replyUserContent = replyUserContent;
}
public String getReplyUserContent() {
return replyUserContent;
}
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.gic.evaluate.qo;
import com.gic.enterprise.qo.PageQO;
import java.util.List;
/**
* @author zhiwj
* @Description:
......@@ -10,12 +12,27 @@ import com.gic.enterprise.qo.PageQO;
public class ProblemQO extends PageQO {
private static final long serialVersionUID = 5170848364807420051L;
private Integer enterpriseId;
private String search;
private String startTime;
private String endTime;
private Integer problemStatus;
private Integer sortColumn;
private Integer sortType;
/**
* 门店选择器d
*/
private Integer storeWidgetId;
private List<Integer> storeIdList;
public Integer getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(Integer enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getSearch() {
return search;
......@@ -64,4 +81,20 @@ public class ProblemQO extends PageQO {
public void setSortType(Integer sortType) {
this.sortType = sortType;
}
public Integer getStoreWidgetId() {
return storeWidgetId;
}
public void setStoreWidgetId(Integer storeWidgetId) {
this.storeWidgetId = storeWidgetId;
}
public List<Integer> getStoreIdList() {
return storeIdList;
}
public void setStoreIdList(List<Integer> storeIdList) {
this.storeIdList = storeIdList;
}
}
package com.gic.evaluate.service;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.evaluate.dto.ProblemDTO;
import com.gic.evaluate.dto.ProblemUserReplyDTO;
......@@ -23,7 +24,18 @@ public interface ProblemManageApiService {
* @return com.gic.api.base.commons.ServiceResponse<java.lang.Void>
* @throws
*/
ServiceResponse<List<ProblemDTO>> listProblem(ProblemQO problemQO);
ServiceResponse<Page<ProblemDTO>> listProblem(ProblemQO problemQO);
/**
* 求个数
* @Title: countProblem
* @Description:
* @author zhiwj
* @param problemQO
* @return com.gic.api.base.commons.ServiceResponse<java.lang.Integer>
* @throws
*/
ServiceResponse<Integer> countProblem(ProblemQO problemQO);
/**
* 查详情
......
......@@ -3,6 +3,7 @@ package com.gic.evaluate.dao.mapper;
import com.gic.evaluate.dto.ProblemDTO;
import com.gic.evaluate.entity.TabProblem;
import com.gic.evaluate.qo.ProblemQO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -56,7 +57,9 @@ public interface TabProblemMapper {
*/
int updateByPrimaryKey(TabProblem record);
List<TabProblem> listProblem(ProblemQO problemQO);
Page<TabProblem> listProblem(ProblemQO problemQO);
Integer countProblem(ProblemQO problemQO);
List<ProblemDTO> listProblemByMemberId(@Param("memberId") Long memberId);
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package com.gic.evaluate.service;
import com.gic.evaluate.dto.ProblemDTO;
import com.gic.evaluate.entity.TabProblem;
import com.gic.evaluate.qo.ProblemQO;
import com.github.pagehelper.Page;
import java.util.List;
......@@ -12,7 +13,7 @@ import java.util.List;
* @date 2020-01-02 11:10
*/
public interface ProblemService {
List<TabProblem> listProblem(ProblemQO problemQO);
Page<TabProblem> listProblem(ProblemQO problemQO);
TabProblem getProblem(Integer problemId);
......@@ -23,4 +24,6 @@ public interface ProblemService {
List<ProblemDTO> listProblem(Long memberId);
void endProblem(Integer problemId);
Integer countProblem(ProblemQO problemQO);
}
......@@ -8,6 +8,8 @@ import com.gic.evaluate.dto.ProblemDTO;
import com.gic.evaluate.entity.TabProblem;
import com.gic.evaluate.qo.ProblemQO;
import com.gic.evaluate.service.ProblemService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -26,7 +28,8 @@ public class ProblemServiceImpl implements ProblemService {
private TabProblemMapper tabProblemMapper;
@Override
public List<TabProblem> listProblem(ProblemQO problemQO) {
public Page<TabProblem> listProblem(ProblemQO problemQO) {
PageHelper.startPage(problemQO.getCurrentPage(), problemQO.getPageSize());
return tabProblemMapper.listProblem(problemQO);
}
......@@ -74,4 +77,9 @@ public class ProblemServiceImpl implements ProblemService {
problem.setStatus(2);
tabProblemMapper.updateByPrimaryKeySelective(problem);
}
@Override
public Integer countProblem(ProblemQO problemQO) {
return tabProblemMapper.countProblem(problemQO);
}
}
package com.gic.evaluate.service.outer.impl;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.enterprise.error.ErrorCode;
import com.gic.enterprise.response.EnterpriseServiceResponse;
import com.gic.evaluate.constant.Constants;
......@@ -39,10 +41,16 @@ public class ProblemManageApiServiceImpl implements ProblemManageApiService {
private ProblemReplyService problemReplyService;
@Override
public ServiceResponse<List<ProblemDTO>> listProblem(ProblemQO problemQO) {
List<TabProblem> problemList = problemService.listProblem(problemQO);
List<ProblemDTO> dtoList = EntityUtil.changeEntityListByJSON(ProblemDTO.class, problemList);
return EnterpriseServiceResponse.success(dtoList);
public ServiceResponse<Page<ProblemDTO>> listProblem(ProblemQO problemQO) {
com.github.pagehelper.Page<TabProblem> problemList = problemService.listProblem(problemQO);
Page<ProblemDTO> problemDTOPage = PageHelperUtils.changePageHelperToCurrentPage(problemList, ProblemDTO.class);
return EnterpriseServiceResponse.success(problemDTOPage);
}
@Override
public ServiceResponse<Integer> countProblem(ProblemQO problemQO) {
Integer count = problemService.countProblem(problemQO);
return EnterpriseServiceResponse.success(count);
}
@Override
......
......@@ -229,6 +229,12 @@
<include refid="Base_Column_List" />
from tab_problem
<where>
<if test="null != storeIdList and storeIdList.size > 0">
and store_id in
<foreach collection="storeIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="search != null and search != '' ">
and (
member_name like concat('%', #{search}, '%')
......@@ -246,9 +252,40 @@
<if test="endTime != null and endTime != '' ">
and create_time &lt;= #{endTime}
</if>
</where>
order by create_time desc
</select>
<select id="countProblem" resultType="int">
select
count(*)
from tab_problem
<where>
<if test="null != storeIdList and storeIdList.size > 0">
and store_id in
<foreach collection="storeIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="search != null and search != '' ">
and (
member_name like concat('%', #{search}, '%')
or member_phone like concat('%', #{search}, '%')
or store_name like concat('%', #{search}, '%')
or problem_content like concat('%', #{search}, '%')
)
</if>
<if test="problemStatus != null ">
and problem_status = #{problemStatus}
</if>
<if test="startTime != null and startTime != '' ">
and create_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != '' ">
and create_time &lt;= #{endTime}
</if>
</where>
</select>
<select id="listProblemByMemberId" resultType="com.gic.evaluate.dto.ProblemDTO">
select
t1.problem_id problemId,
......
......@@ -58,7 +58,7 @@ public class EvaluateExportController extends DownloadUtils {
}
@RequestMapping("/export-evaluate")
public RestResponse exportSmsPackageRecord(HttpServletRequest request, EvaluateQO evaluateQO, ExportQO exportQO) {
public RestResponse exportEvaluateRecord(HttpServletRequest request, EvaluateQO evaluateQO, ExportQO exportQO) {
evaluateQO.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
ServiceResponse<Integer> serviceResponse = evaluateManageApiService.countEvaluate(evaluateQO);
......@@ -115,7 +115,7 @@ public class EvaluateExportController extends DownloadUtils {
if (CollectionUtils.isNotEmpty(result.getResult().getResult())) {
for(EvaluateDTO evaluateDTO : result.getResult().getResult()) {
if (hasReplyTime || hasReplyMemberContent || hasReplyUserContent) {
evaluateDTO = evaluateManageApiService.getEvaluate(evaluateDTO.getEnterpriseId(), evaluateDTO.getEnterpriseId()).getResult();
evaluateDTO = evaluateManageApiService.getEvaluate(evaluateDTO.getEnterpriseId(), evaluateDTO.getEvaluateId()).getResult();
}
// todo 追评时间
if (hasReplyTime) {
......
package com.gic.evaluate.web.controller;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.webapi.reponse.RestResponse;
......@@ -10,6 +11,7 @@ import com.gic.evaluate.dto.ProblemUserReplyDTO;
import com.gic.evaluate.qo.ProblemQO;
import com.gic.evaluate.service.ProblemManageApiService;
import com.gic.evaluate.web.vo.ProblemUserReplyVO;
import com.gic.store.service.StoreWidgetApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -27,10 +29,17 @@ public class ProblemController {
@Autowired
private ProblemManageApiService problemManageApiService;
@Autowired
private StoreWidgetApiService storeWidgetApiService;
@RequestMapping("/list-problem")
public RestResponse listProblem(ProblemQO problemQO) {
ServiceResponse<List<ProblemDTO>> serviceResponse = problemManageApiService.listProblem(problemQO);
problemQO.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
if (problemQO.getStoreWidgetId() != null) {
ServiceResponse<List<Integer>> serviceResponse = storeWidgetApiService.listStoreIdByStoreWidgetId(UserDetailUtils.getUserDetail().getEnterpriseId(), problemQO.getStoreWidgetId());
problemQO.setStoreIdList(serviceResponse.getResult());
}
ServiceResponse<Page<ProblemDTO>> serviceResponse = problemManageApiService.listProblem(problemQO);
return ResultControllerUtils.commonResult(serviceResponse);
}
......
package com.gic.evaluate.web.controller;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.download.utils.DataDownloadUtils;
import com.gic.download.utils.DownloadReport;
import com.gic.download.utils.DownloadUtils;
import com.gic.download.utils.ExecutorPoolSingleton;
import com.gic.enterprise.context.RequestContext;
import com.gic.enterprise.utils.UserDetailUtils;
import com.gic.evaluate.constant.ReplyerTypeEnum;
import com.gic.evaluate.dto.ProblemDTO;
import com.gic.evaluate.dto.ProblemReplyDTO;
import com.gic.evaluate.qo.ExportQO;
import com.gic.evaluate.qo.ProblemQO;
import com.gic.evaluate.service.ProblemManageApiService;
import com.gic.evaluate.web.utils.DataContentUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author zhiwj
* @Description:
* @date 2020-01-14 16:47
*/
@RestController
public class ProblemExportController extends DownloadUtils {
@Autowired
private ProblemManageApiService problemManageApiService;
private Logger logger = LogManager.getLogger(ProblemExportController.class);
@RequestMapping("/list-problem-field")
public RestResponse listProblemField() {
ProblemFieldEnum[] values = ProblemFieldEnum.values();
List<Map<String, Object>> arrayList = new ArrayList<>(values.length);
for (ProblemFieldEnum value : values) {
Map<String, Object> hashMap = new HashMap<>(4);
hashMap.put("fieldCode", value.getFieldCode());
hashMap.put("fieldName", value.getFieldName());
hashMap.put("needEncrypt", value.getNeedEncrypt());
arrayList.add(hashMap);
}
return RestResponse.success(arrayList);
}
@RequestMapping("/export-problem")
public RestResponse exportProblemRecord(HttpServletRequest request, ProblemQO problemQO, ExportQO exportQO) {
problemQO.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
ServiceResponse<Integer> serviceResponse = problemManageApiService.countProblem(problemQO);
List<String> fieldCodeList = exportQO.getFieldCodeList();
List<String> fieldNameList = new ArrayList<>(fieldCodeList.size());
for (String fieldCode: fieldCodeList) {
String fieldName = ProblemFieldEnum.valueOf(fieldCode).getFieldName();
fieldNameList.add(fieldName);
}
// 开始下载
String dataContent = DataContentUtils.getDataContent();
// 生成入参数据
DownloadReport report = new DownloadReport();
//申请人ID
report.setApplyUserId(UserDetailUtils.getUserDetail().getUserId());
//数据源(频道页),用 "-" 隔开上级和本级
report.setDataContent(dataContent);
//待下载数据的数据总量
report.setDataCount(serviceResponse.getResult());
//报告类型 1:完整数据, 2:脱敏数据, 3:二维码
report.setDataType(exportQO.getDataType());
//数据源超链接,用于点击跳转对应频道页面
report.setDataUrl((String) RequestContext.getContext().getRequest().getAttribute("moduleMenuUrl"));
report.setEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
//待下载文件名
report.setFileName(exportQO.getFileName());
//待下载数据的结束时间
if (StringUtils.isNotBlank(problemQO.getEndTime())) {
report.setReportEndTime(DateUtil.strToDate(problemQO.getEndTime(), DateUtil.FORMAT_DATETIME_19));
}
//待下载数据的开始时间
if (StringUtils.isNotBlank(problemQO.getStartTime())) {
report.setReportStartTime(DateUtil.strToDate(problemQO.getStartTime(), DateUtil.FORMAT_DATETIME_19));
}
//调用生成方法,获取reportId
Integer reportId = DataDownloadUtils.createDownloadReport(report);
String path = request.getSession().getServletContext().getRealPath("/excel/csv/collaborator/file/");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.FORMAT_DATETIME_19);
ExecutorPoolSingleton.getInstance().executeTask(() -> {
DownloadDataLoader<ProblemDTO> loader = new DownloadDataLoader<ProblemDTO>() {
@Override
protected List<ProblemDTO> getDownloadData(Integer pageNum) throws Exception {
//调用分页查询接口
problemQO.setCurrentPage(pageNum);
problemQO.setPageSize(1000);
ServiceResponse<Page<ProblemDTO>> result = problemManageApiService.listProblem(problemQO);
boolean hasReplyTime = fieldCodeList.contains("replyTime");
boolean hasReplyMemberContent = fieldCodeList.contains("replyMemberContent");
boolean hasReplyUserContent = fieldCodeList.contains("replyUserContent");
if (CollectionUtils.isNotEmpty(result.getResult().getResult())) {
for(ProblemDTO problemDTO : result.getResult().getResult()) {
if (hasReplyTime || hasReplyMemberContent || hasReplyUserContent) {
problemDTO = problemManageApiService.getProblem(problemDTO.getProblemId()).getResult();
}
if (hasReplyMemberContent) {
List<ProblemReplyDTO> replyList = problemDTO.getReplyList();
List<String> replyUserContentList = Optional.ofNullable(replyList).orElse(Collections.emptyList()).stream()
.filter(e -> ReplyerTypeEnum.USER.getCode().equals(e.getReplyerType()))
.map(e -> simpleDateFormat.format(e.getReplyContent()))
.collect(Collectors.toList());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < replyUserContentList.size(); i++) {
sb.append("(").append(i + 1).append(")").append(replyUserContentList.get(i)).append(" ");
}
problemDTO.setReplyUserContent(sb.toString());
}
}
}
return result.getResult().getResult();
}
};
try {
//参数说明:excelExtensionCode,Excel后缀名code ,枚举类:ExcelExtensionEnum, Arrays.asList("phone")这个phone是需要加密的字段
download(path, reportId, exportQO.getFileName(), exportQO.getExcelExtension(), fieldNameList, fieldCodeList, loader, Arrays.asList("memberPhone"), null);
} catch (Exception e) {
logger.warn("下载错误", e);
}
});
return RestResponse.success(reportId);
}
private enum ProblemFieldEnum {
createTime("createTime", "首次评价时间", 0),
memberName("memberName", "会员姓名", 0),
memberPhone("memberPhone", "会员手机号", 1),
problemContent("problemContent", "内容概览", 0),
storeName("storeName", "门店名称", 0),
replyUserContent("replyUserContent", "商家回复", 0),
;
private String fieldCode;
private String fieldName;
private Integer needEncrypt;
ProblemFieldEnum(String fieldCode, String fieldName, Integer needEncrypt) {
this.fieldCode = fieldCode;
this.fieldName = fieldName;
this.needEncrypt = needEncrypt;
}
public String getFieldCode() {
return fieldCode;
}
public String getFieldName() {
return fieldName;
}
public Integer getNeedEncrypt() {
return needEncrypt;
}
}
}
\ No newline at end of file
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