试题的顺序

解决方法

一、关于试卷展示试题的顺序引发的问题
关于新增数据时数据顺序的问题引发的理解list、map是否是有序的查询及新增数据时id自增和uuid的是否是按照顺序存储的问题
1、查询:
List是有序查询的,hashMap是无序的,linkedHashMap是有序的。
2、新增:
自增是可以依次按照传入数据是顺序新增每条数据,UUID的形式是无法按照顺序依次新增的。
3、解决办法:由于自定义表单是封装的未通过实体形式新增数据,所以单独接口的编写是通过jdbc的形式编写的,根据同事的帮助有三种解决办法
(1)查询时通过试题序号order by 排序。
(2)新增时不使用UUID 使用自增的id进行保存,但由于框架封装的原因,暂不考虑。
(3)根据创建时间查询,但由于创建时间会出现并发的问题,不考虑。
4、代码部分:

js传参

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

逻辑层

	@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;
    }

保存表单方法

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值