orden de preguntas

Solución

1. Problemas causados ​​por el orden en que
se muestran las preguntas de la prueba en el examen. Los problemas relacionados con el orden de los datos al agregar nuevos datos se deben a la comprensión de si la lista y el mapa son consultas ordenadas y si la identificación se incrementa y el uuid es almacenado en orden al agregar datos
1. Consulta:
la lista es una consulta ordenada, hashMap está desordenado y linkedHashMap está ordenado.
2. Nueva incorporación:
el incremento automático puede agregar cada dato en secuencia de acuerdo con el orden de los datos entrantes. La forma de UUID no se puede agregar en orden.
3. Solución: dado que el formulario personalizado está encapsulado y no agrega datos en forma de entidades, la interfaz separada está escrita en forma de jdbc. Según la ayuda de mis colegas, existen tres soluciones: (1) Realizar pedidos a través de número de serie de la pregunta de prueba al
realizar la consulta (2) No use UUID al agregar, use la identificación incrementada automáticamente para guardar, pero debido a razones de encapsulación del marco, esto no se considerará por el momento. (3) Consulta basada en el tiempo de creación, pero por problema de concurrencia en el tiempo de creación no se considera. 4. Parte del código:


js pasando parámetros

questIds=1,2,3,4,5,3,
questIdsSort =[{
    
    "id":"1","sort":"1"},{
    
    "id":"2","sort":"2"}]

capa lógica

	@Transactional(readOnly = false)
    public String dataAdd(String newTableName,String oldTableName,String taskId,String paperId,String questIds,String questIdsSort){
    
    
        //TODO 记录试卷表新增
        if(Func.isNotEmpty(paperId)){
    
    
            //根据试卷id获取原始试卷表数据
            String paperSql = "select * from "+ oldTableName +" where id = '"
                    +paperId + "' order by create_time" ;
            List<Map<String,Object>> paperMapList = jdbcTemplate.queryForList(paperSql);
            for(Map jData : paperMapList){
    
    
                //任务id
                jData.put("input_124444444444",taskId);
                //试卷id
                jData.put("input_153322222222",paperId);
                Iterator iterator = jData.keySet().iterator();
                while(iterator.hasNext()){
    
    
                    String key = (String)iterator.next();
                    if(key.equals("id")){
    
    
                        iterator.remove();
                    }
                }
                form.setTableName(newTableName);
                iQuestionService.dataAdd(form,jData);
            }
        }
        //TODO 试卷管理及看考试任务都需要传入6个参数 - 记录试题表新增
        if(Func.isNotEmpty(questIds) && Func.isNotEmpty(questIdsSort)){
    
    
            String questSql = "select * from " + oldTableName + " where id IN ( " + questIds + " ) ORDER BY create_time " ;
            //jdbc的queryForLsit方法是无序的
            List<Map<String,Object>> questMapList = jdbcTemplate.queryForList(questSql);
            for(Map jData: questMapList){
    
    
                List<Map<String,Object>> list = (List<Map<String,Object>>) JSONArray.parse(questIdsSort);
                for(Map d : list){
    
    
                    if(jData.get("id").equals(d.get("id")){
    
    
                        jData.put("counter_163627277373",d.get("sort"));
                    }
                }
                //任务id
                jData.put("input_124444444444",taskId);
                //试卷id
                jData.put("input_153322222222",paperId);
                //试题id
                jData.put("input_162122323242",jData.get("id"));
                Iterator iterator = jData.keySet().iterator();
                while(iterator.hasNext()){
    
    
                    String key = (String) iterator.next();
                    if(key.equals("id")){
    
    
                        iterator.remove();
                    }
                }
                form.setTableName(newTableName);
                iQusetionService.dataAdd(form,jData);
            }
        }
        //根据试题ids添加试题答案记录表-新增
        String questOptionSql = "select * from exam_question_option where quest_id IN (" + questIds + ") ordery by create_time ";
        List<Map<String,Object>> questOptionMapList = jdbcTemplate.queryForList(questOptionSql);
        for(Map jData: questOptionMapList){
    
    
            //任务id
            jData.put("input_124444444444",taskId);
            //试卷id
            jData.put("input_153322222222",paperId);
            QuestionOptionRecord questionOptionRecord = JSON.parseObject(JSON.toJSONString(jData),QuestionOptionRecord.Class);
            questionOptionRecord.setId(null);
            questionOptionRecordMapper.insert(questionOptionRecord);
        }
        return taskId;
    }

Guardar método de formulario

 package com.example.demo123.controller;

import com.example.demo123.core.launch.constant.Func;
import com.example.demo123.modules.system.entity.Form;
import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.Map;
import java.util.UUID;

/**
 * @program: demo
 * @description:
 * @author: lxq
 * @create: 2021-05-08 14:07
 * @Version: 1.0
 **/
public class qusetionServiceImpl  {
    
    
    private JdbcTemplate jdbcTemplate;

    @Transactional(readOnly = false)
    public String dataAdd(Form form, Map data){
    
    
        //保存表单数据
        String uuid = "";
        try{
    
    
            if(StringUtils.isNotBlank(form.getTableName())){
    
    
                //遍历参数,组装sql语句
                String insertSql = "INSERT INTO " + form.getTableName() + "(";
                String insertValueSql = " values(";
                Date date = new Date();
                for(Object name : data.keySet()){
    
    
                    insertSql += "" + name + ",";
                    if(name.equals("create_user") || name.equals("create_dept")||name.equals("update_user") || name.equals("status")||name.equals("is_deleted") || name.equals("instance_status")||name.equals("instance_result_state") || name.equals("old_process_state")){
    
    
                        insertValueSql += "" + data.get(name) + ",";
                        continue;
                    }
                    if(name.toString().indexOf("fileupload") != -1){
    
    
                        if(data.get(name).toString().indexOf("[]") != -1){
    
    
                            insertValueSql += "" + null + ",";
                            continue;
                        }
                    }
                    if(name.equals("create_time") || name.equals("update_time")){
    
    
                        insertValueSql = "'" + (date.getTime()) + "',";
//                        insertValueSql = "'" + new Timestamp(date.getTime()) + "',";
                        continue;
                    }
                    if(name.equals("process_instance_id") || name.equals("pid")|| name.equals("old_proc_ins_id")){
    
    
                        insertValueSql += "'" + data.get(name) + "',";
                        continue;
                    }
                    String value = data.get(name) + "";
                    if(name.equals("input") || name.equals("textarea")){
    
    
                        if(value.indexOf("'") != -1){
    
    
                            value = value.replaceAll("'","''");
                        }else if(value.indexOf("\\") != -1){
    
    
                            value = loadValue(value,'\\');
                        }
                    }
                    insertValueSql += "'" + value + "',";
                }
                uuid = uuid();
                insertSql += "id)" +insertValueSql + "'" + uuid + "')";
                data.put("id",uuid);
                jdbcTemplate.execute(insertSql);
            }
        }catch(Exception e){
    
    
            throw new RuntimeException("当前业务数据存在异常,清凉西管理员处理");
        }
        return uuid;
    }

    public String loadValue(String value, char c) {
    
    
        char[] chars = value.toCharArray();
        StringBuilder strValue = new StringBuilder();
        for(char c1 : chars){
    
    
            if(Func.equals(c,c1)){
    
    
                strValue.append('\\').append(c1);
            }else{
    
    
                strValue.append(c1);
            }
        }
        return strValue.toString();
    }

    /**
     * 封装jdk自带的UUID,通过random数字生成,中间无-分割
     * @return
     */
    public static String uuid() {
    
    
        return UUID.randomUUID().toString().replaceAll("-","");
    }
}




Supongo que te gusta

Origin blog.csdn.net/qq_40660283/article/details/116519461
Recomendado
Clasificación