.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 后面接用户组的 ...
随机推荐
- MongoDB自动递增序列
MongoDB没有像SQL数据库外开箱即用自动递增功能.默认情况下,它采用了12字节的ObjectId为_id字段作为主键来唯一地标识文档.然而,可能存在的情况,我们可能希望_id字段有一些其它的自动 ...
- BZOJ1485: [HNOI2009]有趣的数列(Catalan数,质因数分解求组合数)
题意 挺简洁的. 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…<a ...
- C 函数库 (libc,glibc,uClibc,newlib)
glibc glibc和libc都是Linux下的C函数库,libc是Linux下的ANSI C的函数库:glibc是Linux下的GUN C的函数库:GNU C是一种ANSI C的扩展实现.ANSI ...
- codevs 4165 高精度求阶乘
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 白银 Silver 题目描述 Description 用高精度计算出S=n! 其中"!"表示阶乘,例如:5!= ...
- 使用JDK自带的jmap和jhat监控处于运行状态的Java进程
对于处于运行状态中的Java进程,JDK自带了很多工具,允许Java开发人员监控运行进程中的各种状态,比如该进程内部创建了多少个对象实例,消耗了多少内存,等等. 本文基于JDK1.8而写成. 我下面写 ...
- 使用python查询天气
python主代码 weather.py import urllib2 import json from city import city cityname = raw_input('你想查哪个城市的 ...
- crontab 应用
可以用crontab -e 添加要执行的命令. 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户. 添加的命令必须以如下格式: * * * * * /co ...
- CAD控件的超链接事件(网页版)
_DMxDrawXEvents::HyperlinkClick 有超连接的实体被点击了. 参数 说明 IDispatch* pEntity IMxDrawEntity,被点击的实体 DOUBLE dX ...
- redux是全局状态(数据)的管理机制,局部数据没有意义
redux是全局状态(数据)的管理机制,局部数据没有意义
- spring boot 下 dataTable|pagehelper 组合进行分页 筛选 排序
1)Js 需提前引用 jquery.dataTables $(function () { //提示信息 初始化设置 一般不需要改 var lang = { "sProcessing" ...