package com.product.administration.service;
|
|
import com.product.administration.config.SystemCode;
|
import com.product.administration.config.CmnConst;
|
import com.product.administration.service.ide.IQuestionnaireService;
|
import com.product.common.lang.StringUtils;
|
import com.product.core.config.CoreConst;
|
import com.product.core.dao.BaseDao;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldSetEntity;
|
import com.product.core.exception.BaseException;
|
import com.product.core.permission.PermissionService;
|
import com.product.core.service.support.AbstractBaseService;
|
import com.product.core.service.support.QueryFilterService;
|
import com.product.core.spring.context.SpringMVCContextHolder;
|
import com.product.core.transfer.Transactional;
|
import com.product.core.websocket.service.WebsocketMesssageServiceThread;
|
import com.product.util.BaseUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Service;
|
|
import java.text.NumberFormat;
|
import java.util.Date;
|
|
/**
|
* Copyright LX
|
* @Title: QuestionnaireService
|
* @Project: product-server
|
* @date: 2021年04月22日 16:51
|
* @author: ZhouJie
|
* @Description: 问卷管理
|
*/
|
@Component
|
@Service
|
public class QuestionnaireService extends AbstractBaseService implements IQuestionnaireService {
|
@Autowired
|
public BaseDao baseDao;
|
@Autowired
|
PermissionService permissionService;
|
@Autowired
|
QueryFilterService queryFilterService;
|
/**
|
* @Date: 2021-04-22 17:25
|
* @Author: ZhouJie
|
* @Description: 保存问卷调查
|
*/
|
@Override
|
@Transactional
|
public String saveQuestionnaire(FieldSetEntity fs) throws BaseException {
|
FieldSetEntity fss = new FieldSetEntity();
|
fss.setTableName(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE);
|
fss.setValue("voting_status",1);
|
if(StringUtils.isEmpty(fs.getString(CmnConst.UUID))){
|
fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fs.setValue("created_utc_datetime",new Date());
|
String uuid= baseDao.add(fs,false);
|
if(!StringUtils.isEmpty(uuid)){
|
DataTableEntity dt = fs.getSubDataTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB);
|
if(dt != null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fsub = dt.getFieldSetEntity(i);
|
fsub.setValue("questionnaire_uuid",fs.getString("uuid"));
|
baseDao.add(fsub);
|
}
|
}
|
// baseDao.add(dt);
|
}
|
return uuid;
|
} else {
|
fs.setValue("updated_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fs.setValue("updated_utc_datetime",new Date());
|
baseDao.delete(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB,"questionnaire_uuid=?",new Object[]{fs.getString("uuid")});
|
DataTableEntity dt = fs.getSubDataTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB);
|
if(dt != null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fsub = dt.getFieldSetEntity(i);
|
fsub.setValue("questionnaire_uuid",fs.getString("uuid"));
|
fsub.remove("id");
|
fsub.remove("uuid");
|
DataTableEntity dtt = fsub.getSubDataTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB_OPTION);
|
if(dtt != null && dtt.getRows()>0){
|
for (int j = 0; j < dtt.getRows(); j++) {
|
FieldSetEntity fssub = dtt.getFieldSetEntity(j);
|
fssub.remove("id");
|
fssub.remove("uuid");
|
}
|
}
|
baseDao.add(fsub);
|
}
|
}
|
baseDao.update(fs);
|
// baseDao.add(dt);
|
return fs.getString(CmnConst.UUID);
|
}
|
}
|
/**
|
* @description: 修改问卷详情
|
* @author: ZhouJie
|
* @date: 2021-05-21 13:54
|
*/
|
public FieldSetEntity QuestionnaireUpdateInfo(FieldSetEntity fs) throws BaseException {
|
FieldSetEntity fss = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_QUESTIONNAIRE,fs.getUUID(),true);
|
DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB," questionnaire_uuid =? ",new Object[]{ fs.getUUID() },null,null,100,1,true);
|
fss.addSubDataTable(dt);
|
return fss;
|
}
|
|
/**
|
* @description: 修改问卷子表
|
* @author: ZhouJie
|
* @date: 2021-05-21 13:54
|
*/
|
@Override
|
@Transactional
|
public boolean questionnaireUpdateSub(FieldSetEntity fs) throws BaseException {
|
fs.setValue("updated_by",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fs.setValue("updated_utc_datetime",new Date());
|
return baseDao.update(fs);
|
}
|
|
/**
|
* @Date: 2021-04-22 17:51
|
* @Author: ZhouJie
|
* @Description: 删除问卷调查
|
*/
|
@Override
|
@Transactional
|
public boolean deleteQuestionnaire(FieldSetEntity fs) throws BaseException {
|
String uuid = fs.getString(CmnConst.UUID);
|
String[] uuids = uuid.split(",");
|
baseDao.delete(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE,BaseUtil.buildQuestionMarkFilter("questionnaire_uuid",uuids.length,true),uuids);
|
baseDao.delete(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB,BaseUtil.buildQuestionMarkFilter("questionnaire_uuid",uuids.length,true),uuids);
|
return baseDao.delete(CmnConst.PRODUCT_OA_QUESTIONNAIRE,BaseUtil.buildQuestionMarkFilter(CmnConst.UUID,uuids.length,true),uuids);
|
}
|
/**
|
* @Date: 2021-04-22 17:51
|
* @Author: 郑盟
|
* @Description: 验证问卷调查接口权限
|
*/
|
public boolean verificationGetResults(FieldSetEntity fs) throws BaseException {
|
int id = SpringMVCContextHolder.getCurrentUser().getUser_id();
|
String user_id = String.valueOf(id);
|
String publisher_save_value = fs.getString("publisher_save_value");
|
if (user_id.equals(publisher_save_value)) {
|
return true;
|
}else {
|
String voters_save_value = ","+fs.getString("result_viewer_save_value")+",";
|
return voters_save_value.contains(","+user_id+",");
|
}
|
|
}
|
/**
|
* @Date: 2021-04-23 09:43
|
* @Author: ZhouJie
|
* @Description: 问卷调查列表
|
*/
|
public DataTableEntity Questionnairelist(FieldSetEntity fs) {
|
String queryFilter;
|
DataTableEntity subDataTable = fs.getSubDataTable("systemSeniorQueryString");
|
if(BaseUtil.dataTableIsEmpty(fs.getSubDataTable("systemSeniorQueryString"))){
|
queryFilter = "";
|
}else {
|
queryFilter = queryFilterService.getQueryFilter(fs) + " and ";
|
}
|
String filter = queryFilter + " created_by=? ";
|
int user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
|
DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE,filter,new Object[]{user_id},null,"created_utc_datetime desc",fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE));
|
baseDao.loadPromptData(dt);
|
return dt;
|
}
|
|
/**
|
* @Date: 2021-04-23 10:51
|
* @Author: ZhouJie
|
* @Description: 查看问卷调查详情
|
*/
|
public FieldSetEntity QuestionnaireInfo(FieldSetEntity fs) throws BaseException {
|
String uuid = fs.getUUID();
|
int user = SpringMVCContextHolder.getCurrentUser().getUser_id();
|
FieldSetEntity fsop = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE," questionnaire_uuid =? and vote_user=? ",new Object[]{uuid,user},false);
|
FieldSetEntity fss = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_QUESTIONNAIRE,fs.getUUID(),true);
|
if(fsop!=null){
|
fss.setValue("is_vote",1);
|
fss.setValue("is_vote_save_value","已投");
|
}else{
|
fss.setValue("is_vote",0);
|
fss.setValue("is_vote_save_value","未投");
|
}
|
DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB," questionnaire_uuid =? ",new Object[]{ fs.getUUID() },null,null,25,1,true);
|
fss.addSubDataTable(dt);
|
DataTableEntity dtnew = new DataTableEntity();
|
dtnew.addFieldSetEntity(fss);
|
baseDao.loadPromptData(dtnew);
|
return dtnew.getFieldSetEntity(0);
|
}
|
/**
|
* @Date: 2021-04-23 17:51
|
* @Author: ZhouJie
|
* @Description: 问卷调查发布
|
*/
|
@Override
|
@Transactional
|
public boolean releaseQuestionnaire(FieldSetEntity fs) {
|
FieldSetEntity fss = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_QUESTIONNAIRE, fs.getUUID(), false);
|
if("1".equals(fs.getString("type"))){
|
fs.setValue("is_publish",1);
|
fs.setValue("publisher",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fs.setValue("pubdate",new Date());
|
saveQuestionnaire(fs);
|
WebsocketMesssageServiceThread.getInstance().appendMessage(
|
fs.getString("voters"),
|
fs.getString("questionnaire_title"),
|
fs.getString("questionnaire_title"),
|
SpringMVCContextHolder.getCurrentUser().getUser_id(),
|
CoreConst.SYSTEM_MESSAGE_TYPE_DEALT+"",
|
CmnConst.PRODUCT_OA_QUESTIONNAIRE_URL+"?"+ CmnConst.UUID+"="+fs.getString(CoreConst.UUID),
|
CmnConst.PRODUCT_OA_QUESTIONNAIRE,
|
fs.getUUID(),
|
SpringMVCContextHolder.getCurrentUser().getUser_id(),
|
0,
|
0
|
);
|
return true;
|
}else {
|
String uuid = fs.getString(CmnConst.UUID);
|
String[] uuids = uuid.split(",");
|
DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE,BaseUtil.buildQuestionMarkFilter(CmnConst.UUID,uuids.length,true),uuids);
|
if(dt!=null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fsl = dt.getFieldSetEntity(i);
|
fsl.setValue("is_publish",1);
|
fsl.setValue("publisher",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fsl.setValue("pubdate",new Date());
|
baseDao.update(fsl);
|
}
|
}
|
WebsocketMesssageServiceThread.getInstance().appendMessage(
|
fss.getString("voters"),
|
fss.getString("questionnaire_title"),
|
fss.getString("questionnaire_title"),
|
SpringMVCContextHolder.getCurrentUser().getUser_id(),
|
CoreConst.SYSTEM_MESSAGE_TYPE_DEALT+"",
|
CmnConst.PRODUCT_OA_QUESTIONNAIRE_URL+"?"+ CmnConst.UUID+"="+fss.getString(CoreConst.UUID),
|
CmnConst.PRODUCT_OA_QUESTIONNAIRE,
|
fss.getUUID(),
|
fss.getInteger(CoreConst.CREATED_BY),
|
0,
|
0
|
);
|
return true;
|
}
|
}
|
/**
|
* @description: 问卷撤销发布
|
* @author: ZhouJie
|
* @date: 2021-05-13 17:22
|
*/
|
@Override
|
@Transactional
|
public boolean unreleaseQuestionnaire(FieldSetEntity fs) {
|
String uuid = fs.getString(CmnConst.UUID);
|
String[] uuids = uuid.split(",");
|
DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE,BaseUtil.buildQuestionMarkFilter(CmnConst.UUID,uuids.length,true),uuids);
|
if(dt!=null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fsl = dt.getFieldSetEntity(i);
|
fsl.setValue("is_publish",0);
|
fsl.setValue("publisher",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fsl.setValue("pubdate",new Date());
|
baseDao.update(fsl);
|
baseDao.delete(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE," questionnaire_uuid=? ",new Object[]{fsl.getUUID()});
|
}
|
}
|
return true;
|
}
|
/**
|
* @Date: 2021-04-25 16:43
|
* @Author: ZhouJie
|
* @Description: 我的投票问卷列表
|
*/
|
public DataTableEntity QuestionnaireMinelist(FieldSetEntity fs) {
|
String queryFilter;
|
if(BaseUtil.dataTableIsEmpty(fs.getSubDataTable("systemSeniorQueryString"))){
|
queryFilter = "";
|
}else {
|
queryFilter = " and " + queryFilterService.getQueryFilter(fs);
|
}
|
StringBuffer sql = new StringBuffer();
|
sql.append(" SELECT * from product_oa_questionnaire where CONCAT(',',voters,',') LIKE ? and is_publish=1 ");
|
sql.append(queryFilter);
|
sql.append(" ORDER BY pubdate desc ");
|
String id ="%"+SpringMVCContextHolder.getCurrentUser().getUser_id()+"%";
|
DataTableEntity dt = baseDao.listTable(sql.toString(),new Object[]{ id },fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE));
|
if(dt!=null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fss = dt.getFieldSetEntity(i);
|
DataTableEntity dtt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE," questionnaire_uuid =? and vote_user=? ",new Object[]{fss.getUUID(),SpringMVCContextHolder.getCurrentUser().getUser_id()});
|
if(dtt!=null && dtt.getRows()>0){
|
fss.setValue("is_vote",1);
|
fss.setValue("is_vote_save_value","已投");
|
}else{
|
fss.setValue("is_vote",0);
|
fss.setValue("is_vote_save_value","未投");
|
}
|
}
|
}
|
baseDao.loadPromptData(dt);
|
return dt;
|
}
|
/**
|
* @Date: 2021-04-25 16:58
|
* @Author: ZhouJie
|
* @Description: 我的投票问卷结果
|
*/
|
public FieldSetEntity QuestionnaireMineInfo(FieldSetEntity fs) throws BaseException {
|
FieldSetEntity fss = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_QUESTIONNAIRE,fs.getUUID(),true);
|
FieldSetEntity fsop = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE," questionnaire_uuid =? and vote_user=? ",new Object[]{fs.getUUID(),SpringMVCContextHolder.getCurrentUser().getUser_id()},false);
|
if(fsop!=null){
|
fss.setValue("is_vote",1);
|
fss.setValue("is_vote_save_value","已投");
|
}else{
|
fss.setValue("is_vote",0);
|
fss.setValue("is_vote_save_value","未投");
|
}
|
String voters = fss.getString("voters");
|
String[] split = voters.split(",");
|
int count = split.length;
|
DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB," questionnaire_uuid =? ",new Object[]{ fs.getUUID() },null,null,25,1,true);
|
if(dt!=null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fsub = dt.getFieldSetEntity(i);
|
int respondents = 0;//回答本题人数
|
String percentage = "";//选择题回答百分比
|
DataTableEntity dtmine = null;
|
if(fsub.getInteger("content_type")==1 || fsub.getInteger("content_type")==2){
|
DataTableEntity dtsubop = fsub.getSubDataTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB_OPTION);
|
if(dtsubop!=null && dtsubop.getRows()>0){
|
for (int j = 0; j < dtsubop.getRows(); j++) {
|
FieldSetEntity fsubop = dtsubop.getFieldSetEntity(j);
|
dtmine = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE," questionnaire_uuid=? and subject_uuid=? and option_answer_uuid=?",new Object[]{fsub.getString("questionnaire_uuid"),fsub.getUUID(),fsubop.getUUID()});
|
respondents = dtmine.getRows();
|
NumberFormat nf = NumberFormat.getPercentInstance();
|
nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点
|
percentage = nf.format(Double.valueOf(respondents)/Double.valueOf(count));
|
fsubop.setValue("count",count);
|
fsubop.setValue("respondents",respondents);
|
fsubop.setValue("percentage",percentage);
|
}
|
}
|
}else{
|
dtmine = baseDao.listTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE," questionnaire_uuid=? and subject_uuid=?",new Object[]{fsub.getString("questionnaire_uuid"),fsub.getUUID()});
|
respondents = dtmine.getRows();
|
fsub.setValue("count",count);
|
fsub.setValue("respondents",respondents);
|
fsub.setValue("percentage",percentage);
|
}
|
}
|
}
|
fss.addSubDataTable(dt);
|
DataTableEntity dtnew = new DataTableEntity();
|
dtnew.addFieldSetEntity(fss);
|
String questionnaireMineInfo = "QuestionnaireMineInfo";
|
if(fss==null){
|
throw new BaseException(SystemCode.SYSTEM_DELETE_QUESTIONNAIRE_MINE_INFO_FAIL.getValue(), SystemCode.SYSTEM_DELETE_QUESTIONNAIRE_MINE_INFO_FAIL.getText(), this.getClass(), questionnaireMineInfo);
|
}
|
baseDao.loadPromptData(dtnew);
|
return dtnew.getFieldSetEntity(0);
|
}
|
|
/**
|
* @description: 结果详情界面 具体答题人详情
|
* @author: ZhouJie
|
* @date: 2021-05-19 16:04
|
*/
|
public DataTableEntity QuestionnaireMineGetinfo(FieldSetEntity fs) throws BaseException {
|
String questionnaire_uuid = fs.getString("questionnaire_uuid");
|
String subject_uuid = fs.getString("subject_uuid");
|
String option_answer_uuid = fs.getString("option_answer_uuid");
|
String vote_user = fs.getString("vote_user");
|
String vote_user_selectString="";
|
System.out.println(vote_user);
|
if (!StringUtils.isEmpty(vote_user)) {
|
vote_user_selectString="and show_name='"+vote_user+"'";
|
}
|
StringBuffer str = new StringBuffer();
|
DataTableEntity dt = null;
|
if(!StringUtils.isEmpty(option_answer_uuid)){
|
str.append(" select case when lq.is_anonymous=1 then '匿名' else lm.show_name end vote_user,lop.option_num vote_contents,lm.voting_time vote_time from ");
|
str.append(" (select a.*,b.show_name from product_oa_questionnaire_mine a LEFT JOIN product_sys_staffs b on a.vote_user =b.user_id) lm,product_oa_questionnaire_sub_option lop,product_oa_questionnaire lq where ");
|
str.append(" lm.questionnaire_uuid=? and lm.subject_uuid=? and lm.option_answer_uuid=? and lop.uuid=? and lq.uuid=? "+vote_user_selectString);
|
dt = baseDao.listTable(str.toString(),new Object[]{questionnaire_uuid,subject_uuid,option_answer_uuid,option_answer_uuid,questionnaire_uuid},fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE));
|
}else{
|
str.append(" select case when lq.is_anonymous=1 then '匿名' else b.show_name end vote_user,a.answer_contents vote_contents,a.voting_time from product_oa_questionnaire_mine a LEFT JOIN product_sys_staffs b on a.vote_user =b.user_id ");
|
str.append(" ,product_oa_questionnaire lq where ");
|
str.append(" a.questionnaire_uuid=? and a.subject_uuid=? and lq.uuid=? "+vote_user_selectString);
|
dt = baseDao.listTable(str.toString(),new Object[]{questionnaire_uuid,subject_uuid,questionnaire_uuid},fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE));
|
}
|
baseDao.loadPromptData(dt);
|
return dt;
|
}
|
|
/**
|
* @description: 提交问卷
|
* @author: ZhouJie
|
* @date: 2021-05-12 14:14
|
*/
|
@Override
|
@Transactional
|
public String saveQuestionnairemine(FieldSetEntity fs) throws BaseException {
|
DataTableEntity dt = fs.getSubDataTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB);
|
if(dt != null && dt.getRows()>0){
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fsub = dt.getFieldSetEntity(i);
|
FieldSetEntity mine = new FieldSetEntity();
|
mine.setTableName(CmnConst.PRODUCT_OA_QUESTIONNAIRE_MINE);
|
if(fsub.getInteger("content_type")==1 || fsub.getInteger("content_type")==2){
|
DataTableEntity dtt = fsub.getSubDataTable(CmnConst.PRODUCT_OA_QUESTIONNAIRE_SUB_OPTION);
|
if(dtt != null && dtt.getRows()>0){
|
for (int j = 0; j < dtt.getRows(); j++) {
|
FieldSetEntity fsubop = dtt.getFieldSetEntity(j);
|
if(!StringUtils.isEmpty(fsub.getString("select_uuid")) && (fsub.getString("select_uuid")).indexOf((fsubop.getUUID()))!=-1){
|
mine.setValue("subject_uuid",fsubop.getString("parent_uuid"));
|
mine.setValue("questionnaire_uuid",fsub.getString("questionnaire_uuid"));
|
mine.setValue("option_answer_uuid",fsubop.getUUID());
|
mine.setValue("other_comments",fsubop.getString("write_content"));
|
mine.setValue("answer_contents",fsubop.getString("answer_contents"));
|
mine.setValue("vote_user",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
mine.setValue("voting_time",new Date());
|
baseDao.add(mine);
|
}
|
}
|
}
|
}else{
|
mine.setValue("subject_uuid",fsub.getUUID());
|
mine.setValue("questionnaire_uuid",fsub.getString("questionnaire_uuid"));
|
mine.setValue("answer_contents",fsub.getString("answer_content"));
|
mine.setValue("vote_user",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
mine.setValue("voting_time",new Date());
|
baseDao.add(mine);
|
}
|
}
|
}
|
return fs.getUUID();
|
}
|
|
|
}
|