Empiece desde cero, cree una plataforma de compras sencilla (10)

Desde cero, cree una plataforma de compras simple (9):
https://blog.csdn.net/time_____/article/details/105465499
Código fuente del proyecto (actualización continua): https://gitee.com/DieHunter/myCode/ Tree / master / shopping se ha
retrasado durante mucho tiempo. Perdóneme por el período pico de proyectos de la empresa en los últimos meses.

Este artículo describe principalmente parte del nuevo módulo de pedidos del sistema de gestión de back-end (el front-end se modifica ligeramente en el plan anterior, presentando la función de pedido, pero no incluye la función de pago), porque es ligeramente diferente de la gestión de usuarios y la gestión de productos. , Así que sácalo e introdúcelo por separado

Efecto frontal:

Para el módulo de pedidos, las funciones principales incluyen la visualización de la lista de pedidos, la modificación del estado del pedido (que no involucre otra modificación de datos que no sea el estado del pedido), eliminar pedidos y agregar nuevos pedidos (para nuevos pedidos, solo agréguelos a través del índice de nombre del producto, considerando que La adición de pedidos del sistema de administración no es la función principal y es casi inútil, por lo que no hay una función detallada.) Este artículo presenta principalmente la implementación de la administración de pedidos de back-end y el acoplamiento de interfaces.

Servidor:

  • Primero, necesitamos configurar la estructura de la tabla de la base de datos en el servidor, que contiene principalmente los siguientes campos
        Order: {
          modelName: "orders",
          data: {
            orderId: {
              // 订单号
              type: String,
              required: true,
            },
            username: {
              //用户名
              type: String,
              required: true,
            },
            phoneNum: {
              //手机号
              type: String,
              required: true,
            },
            address: {
              //具体地址
              type: String,
              required: true,
            },
            orderState: {
              //订单状态
              type: String,
              required: true,
            },
            orderPrice: {
              // 订单总价
              type: String,
              required: true,
            },
            shopList: {
              //商品列表
              type: Array,
              required: true,
            },
            orderTime: {
              //订单创建时间
              type: String,
              required: true,
            },
          },
        },

     

  • Use npm start para iniciar el servidor
  • Luego cree una carpeta de pedidos en el directorio del controlador bajo el directorio src para la interfaz de pedidos y la implementación lógica. El archivo mod es el mismo que antes, y se crea la nueva tabla de pedidos.
  • Introduzca el paquete de dependencia en el pedido. Cabe señalar que agregar un nuevo pedido no solo requiere una tabla de pedidos, sino que también debe estar vinculado con las tablas de usuario y de compras. Por lo tanto, necesitamos llamar a métodos en otra lógica de interfaz. Los nombres de los paquetes importados son los siguientes
    const router = require("express").Router();//路由
    const UserMod = require("../user/mod");//user表联动
    const ShopMod = require("../shopList/mod");//shop表联动
    const Mod = require("./mod");//order表
    const Util = require("../../../utils/utils");//工具类
    const Config = require("../../../config/config");//配置文件
    const Bussiness = require("../../bussiness/bussiness");//接口逻辑
    const { addData, updateData, findData } = require("../../command/command");//数据库操作

     

  •  La primera es la nueva interfaz de pedidos, esta interfaz es también el lugar que necesita atención y más pits, la siguiente es para detectar la existencia de usuarios, direcciones de usuarios y productos.

    let userFindRes = await Bussiness.hasUser(req, res, UserMod);//检测用户及地址是否存在
      if (!userFindRes) {
        return;
      }
      if (!userFindRes[0].alladdress || !userFindRes[0].address) {
        res.send({
          result: -1,
          msg: "添加失败,请完善收货地址",
        });
        return;
      }
      let shopFindRes = await findData(ShopMod, {//检测商品是否存在
        shopName: {
          $in: res._data.shopList.map((item) => {
            return item.shopName;
          }),
        },
      });
      if (
        !shopFindRes ||
        !shopFindRes.length ||
        shopFindRes.length != res._data.shopList.length
      ) {
        res.send({
          result: -2,
          msg: "有商品不存在",
        });
        return;
      }

    En el siguiente paso, se recuperará la información de la base de datos (nota: la información de la base de datos es de solo lectura y solo se puede modificar con los comandos de la base de datos, por lo que no se puede utilizar el acceso a la memoria del montón convencional y se requiere una copia de la variable del montón)

    static deepCopy(org) {
        //简单的对象复制
        return JSON.parse(JSON.stringify(org));
      }

    Utilice la función de copia para sacar la información de la base de datos y realizar modificaciones posteriores

    let _shopFindRes = Util.deepCopy(shopFindRes); //解决数据库对象只读属性

    Antes de regresar a la parte delantera, calcule el precio total y el tiempo de adición del pedido.

    let _orderPrice;//初始化商品总价
      let _shopFindRes = Util.deepCopy(shopFindRes); //解决数据库对象只读属性
      _shopFindRes.forEach((item, index) => {//合计总费用
        if (index == 0) {
          _orderPrice = 0;
        }
        _shopFindRes[index].shopCount = res._data.shopList[index].shopCount;
        _orderPrice +=
          _shopFindRes[index].shopCount * _shopFindRes[index].shopPrice;
      });
    
      res._data = {
        ...res._data,
        username: userFindRes[0].username,
        phoneNum: userFindRes[0].phoneNum,
        address: userFindRes[0].alladdress.join("") + userFindRes[0].address,
        orderId: Util.createOrderNo(),
        orderTime: Util.joinDate(),
        shopList: _shopFindRes,
        orderPrice: _orderPrice,
      };
      let addRes = await addData(Mod, res._data);
      if (!addRes || !addRes.length) {
        res.send({
          result: 0,
          msg: "添加失败",
        });
        return;
      }
      res.send({
        result: 1,
        msg: "添加成功",
        orderId: res._data.orderId,
      });

     

  •  En comparación con la consulta, eliminación y modificación de pedidos, agregar un pedido es una función lógicamente diferente. Hay menos lugares donde se puede reutilizar el código. Las otras tres funciones se pueden implementar imitando el producto y la escritura de la interfaz de usuario.

  • Obtener lista de pedidos

    router.get(Config.ServerApi.orderList, Util.checkToken, async (req, res) => {
      Bussiness.findInfo(
        req,
        res,
        Mod,
        {
          orderTime: res._data.sort,//时间排序
        },
        {
          orderId: new RegExp(res._data.orderId, "i"),//orderId(订单号)模糊过滤
          username: new RegExp(res._data.keyWord, "i"),//订单用户名模糊过滤
          orderState: new RegExp(res._data.orderState, "i"),//订单状态模糊过滤
        }
      );
    });

     

  •  

    Eliminar orden

     

    router.get(Config.ServerApi.delOrder, Util.checkToken, async (req, res) => {
      if (!Bussiness.isAdmin(res)) {
        return;
      }
      Bussiness.delInfo(req, res, Mod);
    });

     

  •  

    Modificar el estado de la orden

    router.post(Config.ServerApi.updateOrder, Util.checkToken, async (req, res) => {
      let updateRes = await updateData(Mod, res._data._id, res._data);
      if (updateRes) {
        res.send({
          result: 1,
          msg: "修改成功",
        });
        return;
      }
      res.send({
        result: 0,
        msg: "修改失败",
      });
    });

    Lo anterior es la interfaz del servidor de gestión de pedidos y la parte lógica.

para resumir:

Al escribir código orientado a objetos e implementar sus funciones, minimice el acoplamiento entre funciones (la conexión entre funciones y funciones) para mejorar la reutilización y ahorrar en gran medida la eficiencia del desarrollo

Supongo que te gusta

Origin blog.csdn.net/time_____/article/details/108442619
Recomendado
Clasificación