Lograr el sondeo de los resultados de picos en las páginas frontales

Introduccion

  Después de que la solicitud de pico se coloca en la cola, debido al poder de procesamiento limitado de MySQL, puede llevar un tiempo completar el procesamiento de la solicitud de pico; durante este tiempo, el front end preguntará constantemente el resultado del procesamiento de la solicitud de pico.

1. Defina la función de sondeo en el extremo frontal.

  Cada 50 ms, llame a la interfaz "/ miaosha / getresult", pasando los parámetros bienesId, cuando el pico tiene éxito, le pregunta si desea ver la página de pedido, cuando falla el pico, muestra la información de falla, cuando la solicitud del pico

Cuando todavía se está procesando, espere 50 ms y vuelva a consultar.

1  // Función de sondeo: verifique cada 50 ms para ver si el pico tiene éxito 
2      funciones getResult (goodsId) {
 3          g_showLoading ();
 4          $ .ajax ({
 5              url: "/ miaosha / getresult" ,
 6              tipo: "GET" ,
 7              datos: {
 8                  bienesId: $ ("# bienesId" ) .val (),
 9              },
 10              éxito: función (datos) {
 11                  var result = data.data;
 12                  if (result <0 ) {
 13                      layer. msg ("Lo siento, el pico falló" );
14                  } else  if (result == 0 ) {
 15                      setTimeout (function () {
 16                          getResult (goodsId);
 17                      }, 50 )
 18                  } else {
 19                      layer.confirm ("Felicitaciones, el pico es exitoso. ¿Verifica el pedido?", {btn: ["OK", "Cancelar" ]},
 20                                      funciones () {
 21                                          window.location.href = "/ order_detail.htm? orderId =" + resultado;
 22                                      },
 23                                     function () {
 24                                          layer.closeAll ();
25  
26                                      });
27                  }
 28  
29              },
             error 30  : función () {
 31                  layer.msg (data.msg);
32              }
 33          });
34  
35      }

2. El método getResult de back-end devolverá el resultado del procesamiento de spike

  Correcto: devuelve la identificación del pedido; falla: devuelve -1, lo que indica que no hay stock; en proceso: devuelve 0

  

1  / * 
2      * Función de sondeo: ver el resultado del pico
 3      * * / 
4      @AccessLimit (segundos = 5, maxCount = 5 )
 5      @RequestMapping (value = "/ getresult", method = RequestMethod.GET)
 6      @ResponseBody
 7      public Result <Long> getResult (Modelo modelo, usuario MiaoshaUser, @ RequestParam ("goodsId") long goodsId) { 8          // Juzgue
 el estado actual del pico 
9          long result = miaoshaService.getMiaoshaResult (user.getId (), goodsId);
 10  11          devuelve Result.success (resultado);
 12      }

3. El método getMiaoshaResult () en miaoshaService.java es el método para obtener realmente el resultado de un pico

  Hay dos parámetros para este método, goodsId y userId. Estos dos parámetros se utilizarán para realizar consultas.

  Se hacen dos juicios en este método, la primera vez, si existe el orden de picos correspondiente a goodsId + userId, y se devuelve el número de orden; si no existe, la segunda vez

  La segunda vez, se juzga la situación de reducción de inventario. Si la reducción de inventario falla, el pico será devuelto, y los otros casos serán considerados como procesados.

1  // Determine el estado del pico durante el sondeo 
2      public  long getMiaoshaResult (Long userId, long goodsId) { 3          // 1.Determine
 si el pico es exitoso 
4          OrderInfo orderInfo = orderInfoService.getByUserIdGoodsId (userId, goodsId);
 5          if (orderInfo! = nulo ) {
 6              return orderInfo.getId ();                                                                                    // El ID de la orden 
7          }
 8          // Si el éxito es exitoso, determine si la falla es exitosa o está en progreso 
9          si (! getReduceResult (goodsId)) {
 10             return -1;         // Sin stock, spike kill 
11          } más  return 0;        // En stock, spike kill 
12      }

  En el segundo juicio, debe usar la función getResult (), que es una función para obtener el resultado de inventario reducido, y hay una función setResult () correspondiente para guardar el resultado de inventario reducido.

 

1  privado  void setReduceResult ( largo goodsId, boolean reduceResult) {
 2          redisService.set (ReduceResultPrefix.getReduceResult "" + goodsId, reduceResult);
3      }
 4  
5      privado  booleano getReduceResult ( long goodsId) {
 6          return   redisService.exists (ReduceResultPrefix.getReduceResult, "" + goodsId);
7      }

  Llame al método setReduceResult después de la operación de reducción de inventario para almacenar en caché los resultados de la reducción de inventario en redis.

1  // Tres pasos: reducir el inventario, realizar el pedido, escribir la orden 
de      picos 2 @Transactional
 3      public OrderInfo miaoSha ( long useId, long goodsId) { 4                                                                                                                          // Reducir el
 inventario y establecer el resultado de la reducción del inventario 
5          boolean reduceResult = miaoshaGoodsService. reduceStock (goodsId);
 6          miaoshaGoodsService.reduceFMStock (goodsId);
 7          setReduceResult (goodsId, reduceResult);
 8          if (! reduceResult) {
 9              return  null ;
 10          }

  Entre ellos, miaoshaGoodsService.reduceStock (goodsId); llamará a la operación de actualización del marco ORM para reducir el inventario;

  La operación de actualización devolverá el número de filas afectadas. Si el valor de retorno es 1, significa que la reducción de inventario fue exitosa; el valor de retorno es 0, lo que significa que la reducción de inventario falló.

  En el método miaoshaGoodsService.reduceStock (), 0 y 1 se convertirán en falso y verdadero como valor de retorno, y luego se asignarán a la variable reduceResult.

  Luego, guarde en caché la variable reduceResult en redis.

 

Supongo que te gusta

Origin www.cnblogs.com/deijiawoyu/p/12693824.html
Recomendado
Clasificación