山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(14)

2023-10-31

        我们解决了一个逻辑上的问题:

        1.医院向供货商下单,如果供货商一时不能提供足够的数量,应该怎么办。

        2.科室库向中心库提交申请,如果中心库库存不满足申请的数量,应该怎么办。

        经过一番讨论,对于第一个问题,后端的负责人表示,应该有一个功能,允许供货商分批次配送,每次配送都会修改订单,将所需数量下调(具体数量等于原本需要的量-已配送的量)。而我认为不应该对订单发生修改,否则会引起商业上的问题(既然开了修改的口子,就有可能发生取消订单,转移订单等现象,进而导致损失信任)。最终我们取了一个折衷但是比较合理的方案:允许供货商分批次配送,每次配送后会显示已配送的数量和未配送的数量,直至完全完成订单。

        对于第二个问题,我们一致认为,科室库不应该能够申请超出库存的数量,也就是说当科室库提交申请时会进行检查,如果超出库存则将提示“库存不足”的字样。

        供货商页面显示的操作按钮代码:

<el-table-column label="操作" width="220" align="center">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="primary"
              @click="handleViewOrder(scope.$index, scope.row)"
              v-show="scope.row.orderStatus!=0"
            >查看
            </el-button>
            <el-button
              size="mini"
              type="primary"
              @click="handlePlaceOrder(scope.$index, scope.row)"
              v-show="(scope.row.orderStatus==1 || scope.row.orderStatus==2) && (roleId == 1 || roleId == 5)"
            >配货
            </el-button>
            <el-button
              size="mini"
              type="primary"
              icon="el-icon-edit"
              @click="handleViewOrder(scope.$index, scope.row)"
              v-show="scope.row.orderStatus==0">编辑
            </el-button>
            <el-button
              size="mini"
              type="danger"
              v-show="scope.row.orderStatus==0"
              @click="handleDeleteOrder(scope.$index, scope.row)">删除
            </el-button>
            <el-button
              size="mini"
              type="danger"
              v-show="(roleId == 2 || roleId == 6 || roleId == 1) && (scope.row.orderStatus==1)"
              @click="handleRevoke(scope.$index, scope.row)">撤销
            </el-button>
            <el-button
              size="mini"
              type="danger"
              v-show="(roleId == 2 || roleId == 6 || roleId == 1) && (scope.row.orderStatus==1 || scope.row.orderStatus==2|| scope.row.orderStatus==5)"
              @click="handleClose(scope.$index, scope.row)">关闭
            </el-button>
          </template>
        </el-table-column>
      </el-table>

        点击“配货”按钮后执行的方法:

handlePlaceOrder(index, row) {
      this.$router.push({
        path: '/oms/preInBillAdd',
        query: {orderNo: row.orderNo, supplierShortName: row.supplierShortName, createBy: row.createBy}
      })
    },

        然后是上述方法调用的方法,由于我们采用的代码结构,中间还有不少方法,在此我就不放了。只放一个最终配货的方法。

submitOrder(submitType) {
      this.$refs.form.validate(valid => {
        if (valid) {
          this.loadingbut = true;
          const arr = [];
          this.model.tableData.forEach(item => {
            const obj = {
              code: item.code,
              quantity: item.quantity,
              price: item.price,
              batchNo: item.batchNo,
              expireDate: item.expireDate,
              supplierId: item.supplierId,
              factory: item.factory,
              supplierShortName: item.supplierShortName
            }
            arr.push(obj);
          })
          const isRepeat = this.getNewList(arr);
          let flag = true;
          this.orderInfo.forEach(item => {
            isRepeat.forEach(item1 => {
              if (item.reagentId === parseInt(item1.code, 10) && item1.quantity > item.unsendNum) {
                flag = false;
              }
            })
          })
          //只有配货数量小于等于未发货数量时,才可以配货
          if (flag) {
            console.log('配货数量没问题!');
            let sendData = {
              billType: this.listQuery.billType,
              billStatus: this.listQuery.billStatus,
              preInBillMessList: arr,
              remark: this.listQuery.remark,
              billCreator: this.listQuery.billCreator,
              orderNo: this.$route.query.orderNo
            }
            createPreInBillItem(sendData).then(response => {
              if (response.data > 0) {
                this.loadingbut = false;
                this.$message({
                  message: '提交成功',
                  type: 'success',
                  duration: 1000
                });
                this.$router.push("/oms/preInBill");
              }
            }).catch(error => {
              this.loadingbut = false;
            })
          } else {
            console.log('配货数量超出!');
            this.loadingbut = false;
            this.$message({
              message: '配货数量与订单不符!',
              type: 'warning'
            });
          }
        } else {
          console.log('参数验证不合法!');
          this.loadingbut = false;
          this.$message({
            message: '提交失败!',
            type: 'warning'
          });
          return false
        }
      })
    },

        可见对配货数量也是有比较严格的限定条件。毕竟真要使用系统的话,就不能出逻辑上的问题才对。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(14) 的相关文章

随机推荐

  • 云计算技能大赛 -- openstack私有云环境 第一部分

    原文博客地址 1 配置信息 注 文章中所用 中的内容皆为提示 如 controller AND compute 表示 此命令在两台节点都需要执行 使用 VM 虚拟机进行实验 主机名 IP地址 controller 内网 仅主机模式 192
  • 关于Linux内核,推荐的8本书籍

    推荐几本高质量的Linux内核的书籍 第一本 Linux内核设计与实现 基于Linux 2 6内核介绍了Linux内核的设计与实现 涵盖了从核心内核系统的应用到内核设计与实现等各方面内容 主要内容包括 进程管理 调度 时间管理和定时器 系统
  • 2、认识常见网络设备

    交换机简介 交换机 Switch 是一种基于MAC 网卡的硬件地址 识别 在网络中 交换机是一种硬件设备 用于过滤和转发网络数据包 从一个网络设备 交换机 路由器 计算机 服务器等 到另一个设备 它广泛用于局域网 LAN 通过查看物理设备地
  • leetcode刷题(9)二叉树(3)

    各位朋友们 提前祝大家五一劳动节快乐啊 今天我为大家分享的是关于leetcode刷题二叉树相关的第三篇我文章 让我们一起来看看吧 文章目录 1 二叉树的层序遍历 题目要求 做题思路 代码实现 2 从前序与中序遍历序列构造二叉树 题目要求 做
  • 合并两个有序数组 java_Leetcode.合并两个有序数组(Java实现)

    合并两个有序数组 给定两个有序整数数组 nums1 和 nums2 将 nums2 合并到 nums1 中 使得 num1 成为一个有序数组 说明 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 你可以假设 nums1 有
  • 最强自动化测试框架Playwright(32)-定位器

    定位器是playwright自动等待和重试能力的核心部分 代表了一种随时在页面上查找元素的方法 Locator Playwright Python 方法 all 当locator指向一组元素时 这个方法返回locator对应的数组 指向它们
  • 无刷电机驱动器

    0 0参考 FOC 看这篇文章就够了 志辉君 自制FOC驱动器 深入浅出讲解FOC算法与SVPWM技术 SPWM基本原理详解 图文并茂 公式推导 C程序实现 1 开源的FOC方案 1 SmipleFOC是比较常见的无刷驱动方案 因为其便宜的
  • 我的DDK学习经验(转载)

    这篇文章在无数技术网站都找的到 我在这里发这篇文章的原因 1 这篇文章实在很好 别说作者倾情的介绍了自己的经验和感想 尤其是关于 钱途 的感想 里面介绍的一些书 真够有志开发驱动程序的同志看半辈子了 2 我搜索了文档中心 没有发现这篇文章
  • Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default

    sudo vim etc xorg conf copy Section Monitor Identifier Monitor0 VendorName Monitor Vendor ModelName Monitor Model HorizS
  • Shell脚本攻略:循环语句while、until

    目录 一 理论 1 while 2 until 3 break 4 continue 二 实验 1 实验一 2 实验二 3 实验三 4 实验四 5 实验五 6 实验六 一 理论 1 while 1 while用法 while循环满足条件执行
  • C++ 构造函数初始化调用顺序及类函数内部嵌套函数情况

    一 C 构造函数初始化顺序 C 构造函数按下列顺序被调用 1 2 3 4是按照优先级顺序来的 1 任何虚拟基类的构造函数按照它们被继承的顺序构造 2 任何非虚拟基类的构造函数按照它们被继承的顺序构造 3 任何成员对象的构造函数按照它们声明的
  • Apex类格式

    例子
  • 自动化测试之Selenium

    https www cnblogs com ldd215 p 5549984 html 文章目录 python常用操作 0 1 获取Excel中的数据 0 2 截取图片 第一章 第一讲 自动化测试概述 1 1什么是软件测试 1 2什么是自动
  • 【 力扣(LeetCode)刷题详细介绍】

    转载于 东心十 关于leetcode刷题详细介绍 虽然刷题一直饱受诟病 不过不可否认刷题确实能锻炼我们的编程能力 相信每个认真刷题的人都会有体会 现在提供在线编程评测的平台有很多 比较有名的有 hihocoder LintCode 以及这里
  • Google浏览器安装插件

    以安装 沙拉查词 插件为例 1 先点击Google浏览器右上方三个小点 找到 设置 将搜索引擎改为Bing 2 然后就可以使用新建页面了 在新建页面搜索 极简插件 或 扩展迷 搜索 沙拉查词 并下载 下载下来是一个压缩包 解压之后可以找到里
  • dnf安徒恩服务器不稳定,DNF安徒恩开团后掉线那些事 网友:这时才体会到混子的重要性...

    原标题 DNF安徒恩开团后掉线那些事 网友 这时才体会到混子的重要性 DNF安徒恩副本难度对于目前的玩家来说并不难 所以很多人追求极限人数开团 有时是12人 有时甚至是10人 于是问题来了 有人掉线怎么办 一起来看看大家在安徒恩的遭遇 玩家
  • 华为2018秋招笔试——将一段压缩后的字符串解压缩,并且排序输出

    题目描述 将一段压缩后的字符串解压缩 并且排序输出 解压规则 每个字符串后面跟随一个数字 表示这个字符串的重复次数 例如 a5 解压缩的结果为 aaaaa abc3 解压缩后的结果为 abcabcabc 排序规则 1 根据每个字符串的重复次
  • 详解拷贝构造函数

    基本规则 拷贝构造函数是一种特殊的构造函数 函数的名称必须和类名称一致 它必须的一个参数是本类型的一个引用变量 所以类中可以存在多个拷贝构造函数 编译器会自动生成默认构造函数 这个构造函数很简单 仅仅使用 老对象 的数据成员的值对 新对象
  • PyTorch(Python)训练MNIST模型移动端IOS上使用Swift实时数字识别

    识别手写数字是计算机视觉的基石问题 可以通过神经网络来解决 在此 我不会重复有关模型构建和训练的细节 本文中 我的目的是将经过训练的模型移植到移动环境中 我使用 pytorch 构建模型 因为我想尝试一下 torchscript 对于 io
  • 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(14)

    我们解决了一个逻辑上的问题 1 医院向供货商下单 如果供货商一时不能提供足够的数量 应该怎么办 2 科室库向中心库提交申请 如果中心库库存不满足申请的数量 应该怎么办 经过一番讨论 对于第一个问题 后端的负责人表示 应该有一个功能 允许供货