低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

软件开发其实并不难,今天我们来在低代码开发平台开发一个最小功能的库存管理,这一版本是单用户,多用户SaaS模式下一篇文章再写——先吃饭哦。

第一步、简单设计

需求场景:

小型个体商户、门店库存管理。

功能需求:

门店信息、商品分类、商品管理、出库管理、入库管理、库存盘点。

应用模式:

SaaS多客户服务系统。

数据库:有效云平台内置SQLite库

第二步、创建应用

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

创建一个新应用

第三步、创建数据库

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

建库

创建完第一个表感觉还是写SQL语句吧。

DROP TABLE IF EXISTS "tb_shop";-- 店铺信息CREATE TABLE "tb_shop" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" TEXT(60), "mobile" TEXT(21), "manager" TEXT(60), "address" TEXT(255), "email" TEXT(255), "logtime" TEXT(24), "state" INTEGER DEFAULT 0 );-- 商品分类CREATE TABLE "tb_goods_type" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "pid" INTEGER, "name" TEXT(60), "pic" TEXT(255), "memo" TEXT(500), "state" INTEGER DEFAULT 0 );-- 商品信息CREATE TABLE "tb_goods" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "type_pid" INTEGER, "type_id" INTEGER, "name" TEXT(120), "alias" TEXT(60), "price" REAL, "unit" TEXT(20), "pic" TEXT(255), "code" TEXT(60), "memo" TEXT(500), "state" INTEGER DEFAULT 0 );-- 库存信息CREATE TABLE "tb_store" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "type_pid" INTEGER, "type_id" INTEGER, "goods_id" INTEGER, "goods_count" INTEGER, "memo" TEXT(500), "logtime" TEXT(24) );-- 入库日志CREATE TABLE "tb_store_in" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "type_pid" INTEGER, "type_id" INTEGER, "goods_id" INTEGER, "goods_count" INTEGER, "goods_unit" TEXT(20), "uid" INTEGER, "uname" TEXT(60), "memo" TEXT(500), "logtime" TEXT(24) );-- 出库日志CREATE TABLE "tb_store_out" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "type_pid" INTEGER, "type_id" INTEGER, "goods_id" INTEGER, "goods_count" INTEGER, "goods_unit" TEXT(20), "uid" INTEGER, "uname" TEXT(60), "memo" TEXT(500), "logtime" TEXT(24) );

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

建库完毕

还是语句效率高,同时有了版本控制的SQL脚本。

第四步、创建应用模块

从左侧菜单栏选择【模块管理】,工具栏【新建】:店铺管理、商品分类管理、商品管理、库存管理、入库管理几个模块——先不创建出库模块

模块数据库选择【应用库】,表选择相应的数据表,创建模块时增加一个模块分类<库管>,创建完后如下:

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

选入字段

此时,开发的模块已经可以进行单元测试预览了,点选工具栏【预览】按钮:

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

单元预览

这就是用户使用时的界面了,可以看到字段除了名称外,其他字段都是英文,而且列宽很宽,接下来我们就对前端样式进行设置:

选中模块,点选工具栏【表单】,修改各项参数——可视化设置,无需代码编写。

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

店铺信息管理

设置后,点击【预览】再点<店铺管理>的【新建】,如上所示。

无需一行代码一个模块基本管理功能完备,其中填写项名称前带有 * 的为必填项。按照设计,逐一对各模块进行设置,根据业务逻辑,设置各字段对应的组件类型,是否必填等。

都设置好后,是否还记得还有一个模块没有创建——出库管理,现在选中入库管理,点击工具栏【复制】,确定保存,编辑修改模块名称,表名选择:tb_store_out,出库模块OK!

程序员怎么能不编写代码呢?下面用到模块的两个编程接口:按钮事件和模块扩展。

第五步、业务逻辑处理

(1)、前端设置

给【库存管理】模块增加三个工具栏按钮:【商品管理】、【入库】【出库】并分别设置链接参数为:

  商品管理:/adm/d/{{APPID}}/list/zli2ezvtsv  入库:/adm/d/{{APPID}}/add/zidrti9cmyin  出库:/adm/d/{{APPID}}/add/zidrti9cmyout

(2)、数据库处理

设置好前端,我们开始编写业务数据处理的代码:

【入库管理】模块,增加一个<新建><提交后>的SQL_execute扩展:

-- 该系统使用了SQLite 数据库表联合操作略显复杂。-- 如果库存表无当前入库商品,自动创建insert into tb_store(type_pid,type_id,goods_id,goods_count,memo,logtime) select type_pid,type_id,goods_id,0,memo,logtime from tb_store_in where not exists( select id from tb_store where goods_id = {{.goods_id}} ) and id ={{.id}};-- 更新库存中当前入库商品数量、更新事件、及操作人员相关信息。update tb_store set goods_count = ifnull(goods_count,0) (select tb_store_in.goods_count from tb_store_in where tb_store.goods_id=tb_store_in.goods_id and tb_store_in.id={{.id}}),memo = (select tb_store_in.uid || '-' || tb_store_in.uname || '-' || tb_store_in.goods_count from tb_store_in where tb_store.goods_id=tb_store_in.goods_id and tb_store_in.id={{.id}}),logtime=(select tb_store_in.logtime from tb_store_in where tb_store.goods_id=tb_store_in.goods_id and tb_store_in.id={{.id}})where goods_id={{.goods_id}} ;-- 同步入库记录中单位信息,设计时数据冗余了该字段,可以采用表联合查询方式,省去该字段。update tb_store_in set goods_unit = (select unit from tb_goods where tb_store_in.goods_id=tb_goods.id) where id = {{.id}};

【出库管理】模块,增加一个<新建><提交后>的SQL_execute扩展:

-- 没有入库必然不能有出库,所以直接更新库存数量update tb_store set goods_count = goods_count - (select goods_count from tb_store_out where tb_store.goods_id=tb_store_out.goods_id and tb_store_out.id={{.id}}),memo = (select uid || '-' || uname || '-' || goods_count from tb_store_out where tb_store.goods_id=tb_store_out.goods_id and tb_store_out.id={{.id}}),logtime=(select logtime from tb_store_out where tb_store.goods_id=tb_store_out.goods_id and tb_store_out.id={{.id}}) where goods_id={{.goods_id}}; update tb_store_out set goods_unit = (select unit from tb_goods where tb_store_out.goods_id=tb_goods.id) and id = {{.id}};

(3)、出库商品选择

出库操作时,只显示库存商品大于0的商品,出库商品选择下拉框绑定SQL设置如下:

select b.id ,b.name as val from tb_store a,tb_goods b where a.goods_id=b.id and a.goods_count > 0

当商品库存量小于出库数时是不能出库的,负库存暂不允许哦,继续代码实现,先创建一个接口:/storeapp/getstorecount:

//定义参数 goods_id,必填,不能小于零//定义参数 r,用来获取商品库存,SQL如下:select goods_id,goods_count from tb_store where goods_id={{.goods_id}} limit 1;//接口定义:{{if .r}}{ "code": 100, "goods_id":"{{.r.goods_id}}", "goods_count":"{{.r.goods_count}}", "msg": "ok", "extra": "", "result": [] }{{else}}{ "code": 104, "msg": "查询失败", "extra": "系统异常,未能获得库存数量", "result": [] }{{end}}

模块【出库管理】增加<表单事件> 校验库存, 字段选择:<出库数量> ;范围选择:PC端;事件选择:blur ——当出库数量输入框失去焦点时,代码如下:

here = this;if(here.form["goods_id"]!="" && here.form["goods_count"]!=""){ var data=new FormData(); data.append("goods_id",here.form["goods_id"]); axios.post('/api/{{APPID}}/storeapp/getstorecount',data).then(function (res) { if(res.data.code==100){ var out_count=parseInt(here.form["goods_count"]); var store_count=parseInt(res.data.goods_count); //console.log("出库数量out_count:",out_count); //console.log("库存数量goods_count:",store_count); if( out_count > store_count ){ here.form["goods_count"] = ""; window.top.vm.$message.error('当前库存不足,请重新输入出库数量!'); } }else{ window.top.vm.$message.error('商品库存校验失败,请人工核验当前库存!'); } }).catch(function (error) {});}


到此,开发的主要工作完成,打开【菜单管理】为新开发的模块创建用户访问菜单:

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

创建菜单

从集成开发环境右上角头像下拉菜单选择:【登录预览】,先通过超级管理员设置角色账号:创建:库管、入库员、出库员,分别指定不用的菜单访问权限:

低代码,开发一个最小的库存管理应用(一)(库存管理最小可用单元)

设置角色

单用户功能开发结束!

整个开发过程所有编码都是实现核心功能的,没有任何冗余存在。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月16日 上午11:35
下一篇 2024年5月16日 上午11:47

相关推荐

  • 建设单位合同管理

    建设单位合同管理 建设单位作为项目开发过程中的关键环节之一,其合同管理对于项目的成功实施至关重要。合同管理不仅仅是合同的签订和履行,还包括对合同的审查、监督、执行和结算等方面的管理…

    科研百科 2024年8月28日
    44
  • 泰安项目任务管理系统

    泰安项目任务管理系统 泰安项目任务管理系统是一种用于管理项目任务和进度的软件系统,可以帮助项目经理和团队成员更好地协作和完成任务。泰安项目任务管理系统的优点包括: 1. 任务分配和…

    科研百科 2024年12月13日
    0
  • 教育科研课题的选题与申报(教育科研课题立项申请书范文)

    人民网成都4月2日电 近日,由成都市双流区教育局指导,四川省双流建设职业技术学校(简称双流建校)承担的课题《基于中职学生德行养成的国学经典诵读实践研究》顺利通过评审,成功结题。 近…

    科研百科 2022年5月6日
    417
  • 小程序微商城如何开发?(小程序微商城如何开发的)

    小程序微商城分销系统开发步骤知多少 程序微分销商城,就是将微分销模式嵌入到小程序当中的一种微信商城。那么我们应该怎么开发分销小程序呢?下面就由软程科技为大家带来小程序微商城分销系统…

    科研百科 2023年4月5日
    125
  • 低代码平台运营

    低代码平台运营是指利用低代码开发工具和平台,通过简化开发流程和提高开发效率,实现快速构建和部署应用程序的过程。随着数字化转型的加速和企业对技术解决方案的需求不断增长,低代码平台运营…

    科研百科 2024年3月1日
    164
  • 工程项目管理的理解

    工程项目管理是指在规定的时间、预算和质量要求下,对工程项目进行规划、执行、监督和控制的过程。在这个过程中,项目经理需要协调各种资源,管理项目团队,确保项目按时完成,达到预期的成果和…

    科研百科 2024年5月26日
    117
  • 探访中车四方所:为轨道车辆装上“动力心脏”和“智慧大脑”(中车四方轨道车辆有限公司)

    高铁是中国装备制造一张亮丽名片,而牵引系统是它的“发动机”,制动系统是它的“安全阀”,列车运行系统是它的“大脑”……为中国数量庞大的高铁、城轨等轨道交通车辆提供核心系统和关键产品、…

    科研百科 2022年8月18日
    329
  • 江山信息系统项目管理师

    江山信息系统项目管理师 随着信息技术的快速发展,江山信息系统项目管理师这个职位也逐渐成为了行业热门。作为一个重要的职业,江山信息系统项目管理师需要具备深厚的技术功底和丰富的项目管理…

    科研百科 2024年5月29日
    84
  • 科研项目怎么过得经费

    科研项目如何过得经费 科研项目是科学家们追求真理和推动科技进步的重要途径。但是,科研项目的经费是衡量项目是否能够成功的关键之一。因此,如何过得经费成为科研项目中一个重要的问题。本文…

    科研百科 2025年3月5日
    0
  • 事业单位竟然签合同?那还是不是铁饭碗了?(事业单位签订合同吗)

    告别了学生的身份,走出大学校园就要迈入职场的毕业生们来讲,最重要的肯定就是就业的问题了,这也是考大学还是考研一个共同奔着的目标。公务员、事业编和国企都是大家最理想的工作选项了。 很…

    科研百科 2022年8月10日
    230