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(); } }