.NET重构(六):删除用户和结账的理解
导读:这是第二回机房了,第一回不明不白,不清不楚的就过去了(相对),这一回,有了新的发现。就是在用户删除的时候,涉及到的一些逻辑问题,以及结账时的数据来源问题。
一、用户删除
问题:第一次机房,包括重构。我觉得很多人都会在删除用户的时候,毫不犹豫的就将用户给删了,最多判断一下是不是系统管理员,是不是正在登录使用的用户。从功能上来看,这很合理,并没有任何差错。但结合整个系统来看,这个问题就大了。
原因:目前做的系统,在结账的时候,是遍历所有操作员。这时候问题就有了,如果在删除用户的时候,直接把操作员给删了,而没有判断是否有未结账的,那么,在结账的时候,那个被删掉的操作员将再也无法结账。也就是说系统会有一部分的账目不知所踪。这是不合理的。
解决办法:1,在删除用户的时候,对用户的结账状态进行判断,如果存在未结账的,就不允许删除,提醒管理员首先对该操作员的账目进行结算。
2,在删除用户的时候,并不真正的删除用户(PS:原则上,数据库中的表数据也是不允许删除的),而是将状态改为未使用(类似学生的上机卡)。那么在这个时候,就必须在UserInfo表里增添一个字段,记录其的使用状态。
个人观点:我比较支持第二种方法。首先,如果我作为一个管理员,我要删除那个用户,又各种原因不让删,然后还要先结账。我会觉得麻烦。如果,采取第二种方案,那么我就不必想结账的问题,直接删除,然后将状态改为未使用。如果真要删除,可以在结完账之后,删除那些未使用的用户(存储过程,一点都不麻烦)。
以上是自己在重构的过程中,关于用户删除的一些理解。
二、操作员结账
关于操作员结账,我想说明的只有一个数据:消费金额。当时和师傅存在争议,但最终我采取了自己的那种方案,因为如果我是系统的使用者,我不认为师傅说的那个数据更有参考价值。
算法分歧:
1,师傅的意见:消费金额就是结账当天的上机消费金额。也就是直接去上机表里查当天的上机记录,然后循环相加消费金额。
2,我的意见:消费金额=上期卡内余额+应收金额(充值金额—退卡金额)—本期卡内余额
直接结果:
1,照师傅的意见,得到的消费金额,永远都是正的,就是说永远都在盈利,都在进账赚钱。
2,照我的算法,有时候消费金额会存在负值。而导致负值是一个什么原因,并不是那天没有人上机消费,而只能说明一个问题:当天,会员的退卡量很多。也就是说我的机房锐减了很多消费者。
结论:如果我是一个机房的所有者,我会更愿意采取第二种方案。消费金额是用来干嘛的,我需要从消费金额,来看我的机房的运营情况。当然也有人说需要通过消费金额来看盈利情况,但我更侧重通过应收金额(也就是实际收到的钱)来看盈利情况。我认为,这样的算法得到的数据才是更有价值的。当我发现那天的消费金额很低,或者成负数。但那天又有很多人来上网。那时候,我不应该感到高兴,而是感到危机:因为,我的会员人数在减少。这个信号说明:我需要想办法去挽救我的既有客户,以及争取新的客户。如果永远看到的只有正值的消费金额,那么会有一种错觉,永远都在赚钱。可事实呢?
另外,还有人说:本期余额=应收金额+消费金额(上机记录统计的金额)。其实,我也不明白为什么要这样算,这样算会有一部分的钱,被重复计算。因为:应收金额=充值金额—退卡金额,这是真正得到的钱。而前面算的本期余额中,消费金额其实就是充值金额之内的。他将充值金额重复计算,会造成盈利丰厚的错觉。而且很可能账目会出现混乱。因为按数据统计的余额有很多,但实际上的余额,是没有那么多的。
好了,这就是我关于删除用户,以及结账数据的理解。
三、个人感受
那天算了一天的钱,感觉怎么算怎么不对。不过,我第一次算的那个肯定不对。但,我觉得,统计的数据必须要有实际意义实际价值。当然,这也可能是需求的分析出现了分歧。额,我只能说,了解用户的真正需求,真的很重要!
PS:我是持不了家的,就我榆木的脑袋,算钱的本事。唉!
请大家多多指教啦,谢谢!
.NET重构(六):删除用户和结账的理解的更多相关文章
- 【转载】MySQL5.7 添加用户、删除用户与授权
mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...
- MySQL5.7 添加用户、删除用户与授权
mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...
- MySQL5.7 添加、删除用户与授权
mysql -uroot -proot 例子: 创建用户mysql> CREATE USER 'xiaoyaoji'@'%' IDENTIFIED BY 'xiaoyaoji';Query OK ...
- MySQL 添加用户、删除用户与授权
mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...
- mysql5.7创建用户授权删除用户撤销授权
一, 创建用户: 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - ...
- linux用户管理(1)----创建用户(adduser和useradd)和删除用户(userdel)
一.常用命令: (1)创建用户命令两条: adduser useradd (2)用户删除命令: userdel 二.两个用户创建命令之间的区别 adduser: 会自动为创建的用户指定主目录.系统sh ...
- Linux运维六:用户管理及用户权限设置
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...
- linux用户管理之创建用户和删除用户
一.常用命令: (1)创建用户命令两条: adduser useradd (2)用户删除命令: userdel 二.两个用户创建命令之间的区别 adduser: 会自动为创建的用户指定主目录.系统sh ...
- linux新增用户和删除用户
新增用户 新增用户命令:useradd 参数: 参数 说明 -u 指定UID,也就是自定义UID -g 知道GID,也就是初始化用户组,/etc/passwd文件中的第四个字段. -G 后面接用户组的 ...
随机推荐
- andorid 向上滑动控制标题栏显示
要实现这样的功能,原理不难,监听滑动距离再设置标题栏的透明度 下面是监听一个带头view的list实现核心代码: mbar是标题栏 mListView.setOnScrollListener(new ...
- ASP.NET MVC执行流程图
- (四)maven之查找jar包坐标,选择jar包版本
① 先访问http://www.mvnrepository.com/ ,这个地址是maven的公共库. ② 以spring core的jar包为例.在页面的最上方的中间,输入spring ...
- ubuntu 14.04 安装npm
1. 安装 sudo apt install nodejs-legacy sudo apt install npm
- HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法
思路 标记最小的最后的位置 放在第一位 标记位置之前按left值小的左方大的右方 标记位置之后按顺序放在最后 不多说先贴上销毁内存的wa代码 销毁内存的wa代码 #include<cstdio ...
- JS中的delete操作符
首先,delete删除成功返回true,失败返回false. js代码: function wxCount ($element) { this.init($element); } wxCount.pr ...
- 生成随机ID且唯一
var T = [ {P:11,G:2}, {P:101,G:7}, {P:1009,G:26}, {P:10007,G:59}, {P:100003,G:242}, {P:1000003,G:568 ...
- HTML5开发手机应用--viewport的作用--20150216
在用HTML5开发手机应用或手机网页时,<head>部分总会有如下一段代码,这段代码到底什么意思呢.在网上,大家会得到很多答案.我从网上搜集了部分介绍,整理一下,以留备用. <met ...
- sessionStorage 的数据会在同一网站的多个标签页之间共享吗?这取决于标签页如何打开
一直以来,我所以为的 sessionStorage 的生命周期是这样的:在 sessionStorage 中存储的数据会在当前浏览器的同一网站的多个标签页中共享,并在此网站的最后一个标签页被关闭后清除 ...
- 初涉DSU on tree
早先以为莫队是个顶有用的东西,不过好像树上莫队(不带修)被dsu碾压? dsu one tree起源 dsu on tree是有人在cf上blog上首发的一种基于轻重链剖分的算法,然后好像由因为这个人 ...