(作者:苦行者;撰写时间:2019年7月24日)
1、这次是自小编第一次开发项目以来最为重大的一次技术突破,然而本人也是非常的激动,毕竟这是一次很难得的开发经验,应用已学的知识,实现一个又一个“零的突破”,这不就是一个IT程序员走向人生巅峰的至上要义吗?
2、废话不多说,下面让我们来看一下本次要跟大家分享的技术到底有什么特别之处。
下面是一个新增床位的模态框。
当我点击“新增床位”按钮的时候,弹出新增床位模态框,选择科室,输入要新增的床位数,然后点击“开始新增”,它就会根据数据库那边已有的床位按照床位号从小到大依次新增;在这里我给它一些限制,限制它一次只能新增五张床,大于五张床就会弹出“每次新增不能超过五张床!”的提示。
听起来好像很简单,刚开始我也这样认为,结果却在新增床位号那里卡死了,因为考虑到这几种情况,比如说,如果在中间有床位断片,或者在中间删除了几张空床,那么我就要先从被删除的那几张床位开始新增,然后才可以继续往后新增,直到新增够床位才停止新增,床位号不允许重复;第二种情况比较简单,假如中间没有断片,后一张床位号比前一张床位号刚好大一,那么就需要采用倒叙排序查询出已有的床位号,再按照最大那张床位号依次新增下去;还有一种情况就是,比如说你新增五张床,中间断了三张,那你得先要把缺少的那三张床新增回来,剩下的两张床再从最大那张床位号开始新增。围绕这三种情况,思路清晰之后才去写代码,才能游刃有余。
3、下面是它的js部分。
根据页面获取到的科室ID以及床位数两个条件到控制器请求数据,基本上增删查改的js代码都是同种“套路”,千篇一律,换汤不换药,就不一句句地详细分解了。
4、关键是C#代码,老实说小编在这里是想破了头脑,测试了几十遍之后才一步步完善代码,最终变成以下这个样子(代码很长,只截取部分经典代码以示参考);
首先声明这几个变量gapCount,OverCount,SaveCounts分别用来记录相差总条数、超出床位数和保存成功条数,另外再声明一个长度为1000的int类型的数组owi,用来记录要新增的床位号。
第一步,根据科室ID查询当前床位数,然后判断新增之后的该科室下的床位数是否小于60(每个科室最大的床位容量为60张床,可以更改),是则进行下一步判断,否则提示用户“已超出该科室最大床位容量OverCount张床,无法新增!”。
第二步,按照床位号正序排序查询床位表,for循环床位总条数,判断它的索引[ i + 1 ]是否小于床位总条数,如果是则可能为第一种情况,也可能是第三种情况,否则为第二种情况;是则进行下一步判断,判断后一张床位号减去前一张床位号是否大于一,也就是判断它中间有没有缺少床位,如果有则拿后一张床位号减去前一张床位号得出空出多少张:gapCount,如果没有则继续循环。
第三步,拿到了它空缺的床位数之后,for循环空缺的床位数减一(gapCount – 1),每循环一遍就让后一张床位号自增得到要新增的空缺的床位号,把后者根据索引封装到事先声明好的int类型的数组owi里面。
第四步,拿到了要新增的空缺的床位号之后,再for循环页面上传过来的床位数BedCount,这一步就是要把已经拿到的空缺的床位号新增回来,新增成功多少张就记录一下,见下图标红色下划线。
第五步,判断新增成功的条数是否等于床位数,是则新增成功,如果新增成功的条数小于床位数则表示还没有新增够,这时就需要继续循环新增,直到新增够为止。
5、下图是第二种和第三种情况才会走进来的判断。
走到这一步之后,首先按照床位号倒序排序查询出所有床位,然后判断还剩下多少张床没有新增,拿到它还需要新增的床位条数;为了避免数据错误,一定要清空一下变量SaveCounts,让它从零开始计算。
因为是倒序排序查询床位,因此第一条为最大床位号,拿到最大那张床的床位号(转换为int类型),for循环剩下需要新增的床位条数,每次循环让最大那张床的床位号自加一得到新的床位号,把它转换为字符串,新增床位,保存,获取床位ID,新增床位明细,保存,每成功保存一条数据,SaveCounts就要自加一,最后再根据SaveCounts来判断是否等于要新增的条数,如果是则返回新增成功,否则继续循环下去,直至成功为止。
6、最后,说说小编个人的心得体会,为了实现“批量新增床位”的这一功能,小编可谓是绞尽脑汁啊,想了好几天,测试了几十遍,尝试过好几种方法,也曾想过要放弃,只是,越是这样就越觉得不甘心不服气,于是硬着头皮坚持下去,果然皇天不负有心人,最终成功实现了这一功能,测试的结果与预期的结果完全一致。所以说,只要有一颗坚持不懈的心,再大的困难也阻止不了你向前的步伐。
技术小突破——批量新增床位
最新推荐文章于 2024-04-05 14:15:19 发布