云制造企业后台管理系统开发阶段性小结
距第一阶段小结已经过去了将近一个月了。终于,这个云制造企业后台管理系统大体完工了。
项目介绍
项目主要分为三大部分,制造资源接入模块、制造任务模块和监管模块。
首页
首页利用 ECharts 图表库,实现制造过程数据的可视化。
制造资源接入模块
该模块用于将制造资源接入到云制造平台,其原理参考了编程语言中类和对象的思想。企业管理人员首先添加制造资源类型信息,即创建“类”,其次对该类型创建制造资源实例,即创建“对象”。通过该方法可实现对制造资源属性的自定义。
制造任务模块
该模块用于查看待接受、正在加工、已完成的制造任务。待接受页面中,企业管理人员可进行接受或拒绝任务的操作。正在加工页面中,可查看当前加工进度等信息。已完成页面中,可查看合格率和发货信息。
监管模块
该模块用于实时监管制造资源。可查看制造资源当前状态和当前任务信息,并且可以实时监控每个制造资源的能耗分析、负载状态等详细信息。
项目开发与部署
前端:Vue
前端模板:Vue-Element-Admin
后端:Java
后端框架:SpringBoot + MyBatis
部署地址:云制造企业后台管理系统
ECharts初体验及Footprint上线
ECharts
前两天开始做云平台的监管模块了,就是一大堆的图表。vue-element-admin 这个模板提供了很多图表的案例,都是基于 ECharts.js 开发的。
ECharts 是百度公司开发的一个基于 JavaScript 的开源可视化图表库,目前正在 Apache 开源基金会孵化中。Apache ECharts
ECharts 的功能非常强大,几乎可以用它制作任意类型的图表,甚至还能用来创建三维模型。3D 地球
而我只是用它来画一些折线图、柱状图、饼图什么的,虽然看似简单,但还是有好多 API 要学。
Footprint
工作之余的摸鱼时间,我想起了之前一直想做的旅行地图。最初是在别人的博客里看到的,看着挺炫酷的,想自己也整一个。
翻了好久别人的博客,终于找到了,审查元素一看,用的是一个叫 jvectormap 的 js 地图插件,最开始还以为一个 Vue 的插件。上它官网一看,发现是一个很老的地图插件了,官方文档也只有英文的,就没用它。
后来想起来之前云平台用的 ECharts 不就可以用来做地图吗,一查果然有用它来做足迹的案例,就照着教程开始做。下了 echart ...
第一个 Vue + Spring Boot 前后端分离项目开发第一阶段小结
前言
研一开学就说要做的工业互联网云制造平台终于动工了。
首先简单介绍一下云平台的功能,平台主要参照速加网的模式,为制造商和客户提供服务,制造商接入制造资源,用户发布制造任务,平台则提供资源管理、需求估价、任务匹配等服务。
我负责开发的是制造商的后台管理部分。现在暂且定了三大内容,第一、制造资源的接入模块;第二、加工任务模块;第三、制造资源的监管模块。
第一块内容学姐已经做完了,但是是基于 JS 开发的,而整个云平台要求用 Vue + SpringBoot 开发,所以需要修改项目框架,花了一周时间,完成了整个项目的复现。
第一次用 Vue + SpringBoot 开发,还是遇到了很多问题,所以做个小结。
前端
之前只是学习了一些 Vue 的基础知识,并没有实际试着写页面,也没感受过它的特别之处。
模块化开发
做完平台的第一部分,明白了模块化开发的精髓,一个页面中包含多个模块,开发时只需要考虑本模块实现的功能,并且数据和路由全部封装在模块里,大大降低了耦合性。
数据
前端数据不再直接死板,从后端接收的数据以变量的形式储存下来,必要时还能进行修改,像后端发送的数据也不局限于表单内容 ...
古鸡鸣寺最后的樱花。
鸡鸣寺的樱花已经开了半个月了。
上周就说要去鸡鸣寺了,但是下雨就一直没有去。
趁着这周天气好,旷工出去春游。
工作日的午后,人也不是很多。
彩虹喷射机。
近日工作。
最近开始忙起来了。
五月一号前要做完云平台的大体框架,我主要负责制造商的后台管理模块,用到的技术是 Vue + SpringBoot 前后端分离的开发方式,java 后端的业务实现没有什么大问题,毕竟之前已经做过好几个 springboot 的 web 应用了,现在无非就是把 Controller 改为 RestController,这就涉及到与前端的一些数据交互,前端的 vue 和 js 还不太熟悉,页面模版用的是 vue-element-admin 今天学了一天,大概熟悉了他的目录结构,已经可以在他的基础上改出自己想要的内容了,但要实现一些自定义的功能还有点麻烦,还要再学习 vue 和 js 的内容,现在暂且做完了登陆模块和制造资源类型模块的查询功能,还剩下制造资源类型的增删改、制造资源实例模块、任务模块和监管模块。
除了这个工作还有教材和专利,头都大了。
谷歌入门题——翻转二叉树
原题
翻转一棵二叉树。
示例:
12输入: root = [4,2,7,1,3,6,9]输出: [4,7,2,9,6,3,1]
梗
众所周知,字越少,事越大。题越短,梗越大。
翻转一棵二叉树。一看题目就知道是一道非常经典的题了。
为什么说梗越大呢。Max Howell 大神在推特上吐槽自己因为没写出翻转二叉树,被谷歌拒了。
而就在第二天 LeetCode 就加入了这道题,并把难度定位 Easy。
解题思路
递归法。
自顶向下
自底向上
递归的题只可意会,不可言传,看代码就完了。
代码
自顶向下
123456789101112131415161718public static TreeNode invertTree(TreeNode root) { // 递归触底返回 null if (root == null) { return null; } // 若无子节点 无需交换 直接返回本身(这步可省) if (root.left == null && root.right == null) ...
第一次参加 LeetCode 竞赛有感。
前言
其实上周末就想玩玩竞赛了,看看自己能写出几道题,但是忘记时间给错过了……
这个礼拜周赛和双周赛一起开,也差一点就忘记参加了,周末玩得太上头了,好在洗澡的时候想起来了。
嗯。提前十五分钟入场,盯着屏幕的倒计时,看着前几期的大佬们十几分钟就 AC 了四道题,我内心忐忑。
第一题
给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。
混合字符串 由小写英文字母和数字组成。
作为热身题当然是一道简单题,我的思路是遍历一遍字符串,把数字筛选出来放到 HashSet 里,然后再转到 ArrayList 里调用 sort() 排序,返回出第二大的值,之所以不自己写排序的原因是想节省时间。
然而由于自己对于 sort() 函数的不熟悉,导致搞不对语法好久,甚至还百度了函数的用法。不过还算顺利,15 分钟完成 AC。但是我刚出来准备去写下一题的时候,瞟了一眼排行榜,发现第一的大佬 12 分钟的时候就全部完成四道题了,HP-1。不慌,我写好自己的就行了,下一题。
第二题
你需要设计一个包含验证码的验证系统。每一次验证中,用户会收到一个新的验证码 ...
今日春分。
春分了,白天开始比夜晚长了。
上周南京下了一礼拜的雨,而接下去的一周都会是好天气,气温也开始慢慢上升了,终于可以脱掉冬天厚重的衣服了。
其实到了春分,春天就已经过去一半了,但似乎并没有感受到春天的到来。冬天和夏天的界限本来就很分明,好像昨天还是冬天,明天就到夏天了。
昨天杭州的一声春雷上了热搜,春雷一响,万物生长。比起冬天的沉寂,我还是更喜欢夏天的嘈杂,比起在空调里看外面下雪,我更喜欢在空调里看外面烈日炎炎。
梦想开始的地方——滑动窗口模板
前言
之所以说这是梦想开始的地方,是因为这是我一个月前在 LeetCode 上刷的第一道算法题。
这是 LeetCode 上 2 月 19 日的每日一题,当时对算法的技巧一窍不通的我点开了他,思考了五分钟,发现似乎无法用暴力方法解决它。
当我点开解答时,惊呆了,怎么会有这么巧妙的方法,而且还给出了同类题目的解体模板,我简直是小刀划屁屁——开了眼了。
由于前几天一直忙于教研室的工作和博客网页的优化,所以没有刷题,现在忙得也差不多了,可以重新开始 LeetCode 之旅了,就想再感受一次当初的那份惊艳。
原题
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
示例 1:
12345输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]下标为 5,10 的数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
12345输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = ...
哨兵节点——标准工具人
原题
这还是一道链表题,原题如下:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。
示例 1:
12输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]
示例 2:
12输入:head = [], val = 1输出:[]
示例 3:
12输入:head = [7,7,7,7], val = 7输出:[]
解题思路
常规解法
如果删除的节点是中间的节点,则问题似乎非常简单:
选择要删除节点的前一个结点 prev。
将 prev 的 next 设置为要删除结点的 next。
当要删除的一个或多个节点位于链表的头部时,事情会变得复杂。
首先要用一个 while 循环对头节点进行判断,删除所有头部要删除的节点,在按上述方法删除中间的节点。具体代码如下:
1234567891011121314151617181920public static ListNode myRemoveElements(ListNode head, int val) ...