Тысячи вставок и я с дублирующимися значениями, почему? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть приложение, которое представляет собой систему парковки, мои клиенты часто используют его для отправки в мою базу данных данных с автомобиля.

вот код для отправки на мой сервер:

 public void sendEntradaRotativaDataToServer(String url){

    pDialog = new ProgressDialog(getActivity());
    pDialog.setMessage("Processando entrada..");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    pDialog.show();

    JsonObject json = new JsonObject();
    json.addProperty("placa",  entradaObj.getPlaca());
    json.addProperty("dataemissao",  entradaObj.getDataemissao());
    json.addProperty("tipo",   entradaObj.getTipo());
    json.addProperty("valor",  entradaObj.getValor());
    json.addProperty("area",   entradaObj.getArea().getId());
    json.addProperty("observacao",  entradaObj.getObservacao());
    json.addProperty("user_id",  entradaObj.getUser_id());

    Ion.with(getActivity())
            .load(url)
            .setTimeout(5000)
            .setJsonObjectBody(json)
            .asJsonObject()
            .setCallback(new FutureCallback<JsonObject>() {
                @Override
                public void onCompleted(Exception e, JsonObject result) {

                    if (e != null) {

                        newMsgWarn("Atenção","Não foi possível fazer uma conexão por favor tente novamente");

                        if(pDialog != null && pDialog.isShowing()){
                            pDialog.dismiss();
                        }

                    } else {

                        success   = result.get(TAG_SUCCESS).getAsInt();
                        message   = result.get(TAG_MESSAGE).getAsString();

                        entradaObj.set_id(result.get("entradaid").getAsString());

                        (new SyncEntrada()).execute(new String[0]);

                        if(pDialog != null && pDialog.isShowing()){
                            pDialog.dismiss();
                        }

                    }

                }


            });

}

это простой почтовый запрос с библиотекой Ion, и это код на сервере (я использую laravel в проекте):

public function insertDataRotativa(Request $request) {


    if(isset($request)) {

        $dataentradaini = Carbon::parse($request->input('dataemissao'));           
        $evento   = $this->mdUtil->getEventByDataEmissao($dataentradaini);

        if (!empty($evento)) {

          foreach ($evento as $value) {  

              $this->mdEntrada                 = new Entrada; 
              $this->mdEntrada->placa          = $request->input('placa');
              $this->mdEntrada->created_at     = $dataentradaini;
              $this->mdEntrada->updated_at     = $dataentradaini;
              $this->mdEntrada->tipo           = $request->input('tipo');
              $this->mdEntrada->valor          = $request->input('valor');
              $this->mdEntrada->area           = $request->input('area');
              $this->mdEntrada->observacao     = $request->input('observacao');
              $this->mdEntrada->user_id        = $request->input('user_id');
              $this->mdEntrada->evento_id      = $value->id;    
              $this->mdEntrada->flag           = "U";                  
              $this->mdEntrada->save();

          }             

       }else {


              $this->mdEntrada                 = new Entrada; 
              $this->mdEntrada->placa          = $request->input('placa');
              $this->mdEntrada->created_at     = $dataentradaini;
              $this->mdEntrada->updated_at     = $dataentradaini;
              $this->mdEntrada->tipo           = $request->input('tipo');
              $this->mdEntrada->valor          = $request->input('valor');
              $this->mdEntrada->area           = $request->input('area');
              $this->mdEntrada->observacao     = $request->input('observacao');
              $this->mdEntrada->user_id        = $request->input('user_id');                 
              $this->mdEntrada->flag           = "U";                  
              $this->mdEntrada->save();


       }    

        $response["success"]             = 1;
        $response["message"]             = "Entrada efetuada com sucesso.TIPO:1";
        $response["entradaid"]           = $this->mdEntrada->id;

        return $response;       

}

Я предполагаю, что это пользователь, который столько раз нажимает кнопку для отправки, но я установил время для включения и не включения кнопки, которая не будет выполнять много запросов одновременно, вот код для кнопка:

 sendButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {


            YoYo.with(Techniques.BounceIn)
                    .duration(500)
                    .playOn(v.findViewById(R.id.entradabt));


            if (SystemClock.elapsedRealtime() - mLastClickTime < 3000){
                return;
            }
            mLastClickTime = SystemClock.elapsedRealtime();
            enviarEntrada();

        }
    });

Почему у меня такие дубликаты? Любые советы?

here is the new image from database

Вот моя схема

my schema

1 Ответ

0 голосов
/ 03 сентября 2018

unique_key

Добавление уникального ключа для Created_at, updated_at и Placa. Возможно, это уникальный идентификатор для этой таблицы. Это предотвращает в то же время вставки.

Также проверьте , если один запрос отправляет один и тот же запрос несколько раз, и отфильтруйте их по PLACA (carplate?) (В одном запросе может быть отправлено только 1 место).

Может быть пригодится? Если тот же PLACA отправляет в течение 1 минуты после оплаты того же запроса, игнорируйте его. (Фильтр SQL-запросов, запросите все транзакции за последнюю минуту и ​​проверьте, есть ли (carplate) placa). result = SQL Query select all where placa is within 1 and or 2 min; if(result is same PLACA as request){ return; and ignore request)

Бит псевдокода, чтобы помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...