Commit dfcbb9b1 by lijingjing

添加满意度调查相关查询和数据统计;

parent 3404cf37
package com.patzn.cloud.service.lims.hmhj.controller;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.entity.Questionnaire;
import com.patzn.cloud.service.hmhj.vo.QuestionnaireVO;
import com.patzn.cloud.service.lims.hmhj.service.IQuestionnaireService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 满意度调查表 前端控制器
*
* @author meazty
* @since 2021-07-11
*/
@Api(tags = "满意度调查表")
@RestController
@RequestMapping("/v1/questionnaire")
public class QuestionnaireController extends ServiceController {
@Autowired
private IQuestionnaireService questionnaireService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<Questionnaire>> getPage(QuestionnaireVO questionnaire) {
return success(questionnaireService.page(getPage(), questionnaire));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@GetMapping("/{id}")
public RestResult<Questionnaire> get(@PathVariable("id") Long id) {
return success(questionnaireService.getById(id));
}
@ApiOperation("根据 id 修改信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@PutMapping("/{id}")
public RestResult<Boolean> edit(@PathVariable("id") Long id, Questionnaire questionnaire) {
questionnaire.setId(id);
return success(questionnaireService.updateById(questionnaire));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(Questionnaire questionnaire) {
return success(questionnaireService.save(questionnaire));
}
@ApiOperation("添加或修改调查表")
@PostMapping("/addOrUpdate")
public RestResult<Boolean> addQuestionnaire(Questionnaire questionnaire) {
return success(questionnaireService.saveOrUpdate(questionnaire, getAccount()));
}
@ApiOperation("根据 ids 删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "主键列表", required = true, paramType = "query", allowMultiple = true, dataTypeClass = Long.class),
})
@DeleteMapping("/")
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(questionnaireService.deleteByIds(ids));
}
@ApiOperation("提交满意度调查")
@PostMapping("/submit")
public RestResult<Boolean> submit(@RequestParam("id") Long id) {
return success(questionnaireService.submitQuestionnaire(id, getAccount()));
}
@ApiOperation("导出Excel")
@GetMapping("/export")
public void export(@RequestParam("ids") Long[] ids, HttpServletResponse response) {
questionnaireService.exportExcel(ids, response, getAccount());
}
@ApiOperation("导出统计Excel")
@GetMapping("/exportStatusExcel")
public void exportStatusExcel(@RequestParam("ids") Long[] ids, HttpServletResponse response) {
questionnaireService.exportStatusExcel(ids, response, getAccount());
}
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.entity.Questionnaire;
import com.patzn.cloud.service.hmhj.vo.QuestionnaireStatsVO;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 满意度调查表 Mapper 接口
* </p>
*
* @author meazty
* @since 2021-07-11
*/
public interface QuestionnaireMapper extends BatchMapper<Questionnaire> {
QuestionnaireStatsVO selectStatsList(@Param("ids") Long[] ids);
}
package com.patzn.cloud.service.lims.hmhj.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.entity.Questionnaire;
import com.patzn.cloud.service.hmhj.vo.QuestionnaireVO;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 满意度调查表 服务类
*
* @author meazty
* @since 2021-07-11
*/
public interface IQuestionnaireService extends IBaseService<Questionnaire> {
Page<Questionnaire> page(Page<Questionnaire> page, QuestionnaireVO questionnaireVO);
boolean saveOrUpdate(Questionnaire questionnaire, Account account);
boolean removeByIds(List<Long> ids);
boolean submitQuestionnaire(Long id, Account account);
void exportExcel(Long[] ids, HttpServletResponse response, Account account);
void exportStatusExcel(Long[] ids, HttpServletResponse response, Account account);
boolean deleteByIds(List<Long> ids);
}
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.ArrayUtils;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.toolkit.StringUtils;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.feign.base.client.SysUserClient;
import com.patzn.cloud.feign.lims.base.client.LmsBaseDictClient;
import com.patzn.cloud.service.base.vo.SysUserOrgVO;
import com.patzn.cloud.service.hmhj.entity.Questionnaire;
import com.patzn.cloud.service.hmhj.vo.QuestionnaireStatsVO;
import com.patzn.cloud.service.hmhj.vo.QuestionnaireVO;
import com.patzn.cloud.service.lims.base.entity.LmsBaseDict;
import com.patzn.cloud.service.lims.common.service.IExportService;
import com.patzn.cloud.service.lims.hmhj.handler.QuestionnaireExportHandler;
import com.patzn.cloud.service.lims.hmhj.mapper.QuestionnaireMapper;
import com.patzn.cloud.service.lims.hmhj.service.IQuestionnaireService;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 满意度调查表 服务实现类
*
* @author meazty
* @since 2021-07-11
*/
@Service
public class QuestionnaireServiceImpl extends BaseServiceImpl<QuestionnaireMapper, Questionnaire> implements IQuestionnaireService {
private static final String DICT_TYPE = "满意度间隔时间";
@Autowired
private LmsBaseDictClient lmsBaseDictClient;
@Autowired
private SysUserClient sysUserClient;
@Autowired
private IExportService exportService;
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveOrUpdate(Questionnaire questionnaire, Account account) {
calcScore(questionnaire);
List<SysUserOrgVO> list = sysUserClient.getUserOrg(Arrays.asList(account.getUserId())).serviceData();
SysUserOrgVO sysUserOrgVO = list.get(0);
questionnaire.setOrgName(sysUserOrgVO.getOrgName());
questionnaire.setLid(account.getUserId());
if (null != questionnaire.getStatus() && 1 == questionnaire.getStatus().intValue()) {
questionnaire.setSubmitTime(new Date());
questionnaire.setCreator(account.getUserName());
submitHandler(questionnaire, account);
}
if (null == questionnaire.getId()) {
return save(questionnaire);
}
return updateById(questionnaire);
}
@Override
public Page<Questionnaire> page(Page<Questionnaire> page, QuestionnaireVO questionnaireVO) {
Wrapper wrapper = new EntityWrapper<>(new Questionnaire());
if (StringUtils.isNotEmpty(questionnaireVO.getCreator())) {
wrapper.like("creator", questionnaireVO.getCreator());
}
if (null != questionnaireVO.getTimeS()) {
wrapper.ge("submit_time", questionnaireVO.getTimeS());
}
if (null != questionnaireVO.getTimeE()) {
wrapper.le("submit_time", questionnaireVO.getTimeE());
}
if (null != questionnaireVO.getStatus()) {
wrapper.eq("status", questionnaireVO.getStatus());
}
wrapper.orderBy("ctime", false);
return this.page(page, wrapper);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean submitQuestionnaire(Long id, Account account) {
RestAssert.fail(null == id, "满意度调查表不能为空");
Questionnaire questionnaire = getById(id);
RestAssert.fail(null == questionnaire, "满意度调查表不能为空");
calcScore(questionnaire);
questionnaire.setSubmitTime(new Date());
submitHandler(questionnaire, account);
questionnaire.setStatus(1);
questionnaire.setCreator(account.getUserName());
return updateById(questionnaire);
}
private void submitHandler(Questionnaire questionnaire, Account account) {
LmsBaseDict baseDict = lmsBaseDictClient.getByType(DICT_TYPE, account.getCompanyId()).getData();
RestAssert.fail(null == baseDict, "未配置满意度调查间隔时间,请先配置默认间隔时间");
Integer seqDays = Integer.parseInt(baseDict.getCode());
// 提交时间与当前时间比较,若提交时间满足 + seqDays > new Date(),那么可以继续提交
RestAssert.fail(DateUtils.dateAddDays(questionnaire.getSubmitTime(), seqDays).after(new Date()), String.format("未满 %d 个月,无法继续提交满意度调查表。", seqDays / 30));
}
private void calcScore(Questionnaire questionnaire) {
RestAssert.fail(null == questionnaire.getAccuracy() || null == questionnaire.getClarity()
|| null == questionnaire.getCoordination() || null == questionnaire.getServiceAttitude()
|| null == questionnaire.getTimeliness(), "满意度调查表分数不能为空");
BigDecimal accuracy = questionnaire.getAccuracy();
BigDecimal clarity = questionnaire.getClarity();
BigDecimal coordination = questionnaire.getCoordination();
BigDecimal serviceAttitude = questionnaire.getServiceAttitude();
BigDecimal timeliness = questionnaire.getTimeliness();
BigDecimal score = accuracy.add(clarity).add(coordination).add(serviceAttitude).add(timeliness);
questionnaire.setScore(score);
}
@Override
public void exportExcel(Long[] ids, HttpServletResponse response, Account account) {
RestAssert.fail(ArrayUtils.isEmpty(ids), "请选择要导出的调查表");
List<Questionnaire> questionnaireList = getBatchIds(Arrays.asList(ids));
RestAssert.fail(CollectionUtils.isEmpty(questionnaireList), "请选择要导出的调查表");
new QuestionnaireExportHandler(questionnaireList).generater(response);
}
@Override
public void exportStatusExcel(Long[] ids, HttpServletResponse response, Account account) {
RestAssert.fail(ArrayUtils.isEmpty(ids), "请选择要导出的调查表");
QuestionnaireStatsVO questionnaireVO = baseMapper.selectStatsList(ids);
RestAssert.fail(null == questionnaireVO, "请选择要导出的调查表");
XSSFWorkbook xssfWorkbook = exportService.getXSSFWorkbook("QuestionnaireStatsExport.xlsx");
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
Integer numTotal = questionnaireVO.getNumTotal();
for (int i = 1; i < 7; i++) {
XSSFRow row = sheet.getRow(i);
double sumValue = 0.0, avgValue = 0.0;
switch (i) {
case 1:
sumValue = questionnaireVO.getFwtdSum();
avgValue = questionnaireVO.getFwtdAvg();
break;
case 2:
sumValue = questionnaireVO.getXtgtSum();
avgValue = questionnaireVO.getXtgtAvg();
break;
case 3:
sumValue = questionnaireVO.getRjsxSum();
avgValue = questionnaireVO.getRjsxAvg();
break;
case 4:
sumValue = questionnaireVO.getRzqxSum();
avgValue = questionnaireVO.getRzqxAvg();
break;
case 5:
sumValue = questionnaireVO.getQxzjSum();
avgValue = questionnaireVO.getQxzjAvg();
break;
case 6:
sumValue = questionnaireVO.getSumTotal();
avgValue = questionnaireVO.getAvgTotal();
break;
}
row.getCell(1).setCellValue(sumValue);
row.getCell(2).setCellValue(numTotal);
row.getCell(3).setCellValue(avgValue);
}
String fileName = null;
try {
fileName = java.net.URLEncoder.encode("客户满意度调查表", "UTF-8");
} catch (UnsupportedEncodingException e) {
fileName = "questionnaireExcel";
}
exportService.downloadXlsx(response, fileName + ".xlsx", xssfWorkbook);
}
@Override
public boolean deleteByIds(List<Long> ids) {
List list = list(Condition.create().in("id", ids).eq("status", 1).eq("deleted", 0));
RestAssert.fail(CollectionUtils.isNotEmpty(list), "已提交的调查表不能删除!");
return removeByIds(ids);
}
}
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