导读:这是第二回机房了,第一回不明不白,不清不楚的就过去了(相对),这一回,有了新的发现。就是在用户删除的时候,涉及到的一些逻辑问题,以及结账时的数据来源问题。

一、用户删除



问题:第一次机房,包括重构。我觉得很多人都会在删除用户的时候,毫不犹豫的就将用户给删了,最多判断一下是不是系统管理员,是不是正在登录使用的用户。从功能上来看,这很合理,并没有任何差错。但结合整个系统来看,这个问题就大了。

原因:目前做的系统,在结账的时候,是遍历所有操作员。这时候问题就有了,如果在删除用户的时候,直接把操作员给删了,而没有判断是否有未结账的,那么,在结账的时候,那个被删掉的操作员将再也无法结账。也就是说系统会有一部分的账目不知所踪。这是不合理的。

解决办法:1,在删除用户的时候,对用户的结账状态进行判断,如果存在未结账的,就不允许删除,提醒管理员首先对该操作员的账目进行结算。

2,在删除用户的时候,并不真正的删除用户(PS:原则上,数据库中的表数据也是不允许删除的),而是将状态改为未使用(类似学生的上机卡)。那么在这个时候,就必须在UserInfo表里增添一个字段,记录其的使用状态。

个人观点:我比较支持第二种方法。首先,如果我作为一个管理员,我要删除那个用户,又各种原因不让删,然后还要先结账。我会觉得麻烦。如果,采取第二种方案,那么我就不必想结账的问题,直接删除,然后将状态改为未使用。如果真要删除,可以在结完账之后,删除那些未使用的用户(存储过程,一点都不麻烦)。

以上是自己在重构的过程中,关于用户删除的一些理解。

二、操作员结账



关于操作员结账,我想说明的只有一个数据:消费金额。当时和师傅存在争议,但最终我采取了自己的那种方案,因为如果我是系统的使用者,我不认为师傅说的那个数据更有参考价值。

算法分歧:

1,师傅的意见:消费金额就是结账当天的上机消费金额。也就是直接去上机表里查当天的上机记录,然后循环相加消费金额。

2,我的意见:消费金额=上期卡内余额+应收金额(充值金额—退卡金额)—本期卡内余额

直接结果:

1,照师傅的意见,得到的消费金额,永远都是正的,就是说永远都在盈利,都在进账赚钱。

2,照我的算法,有时候消费金额会存在负值。而导致负值是一个什么原因,并不是那天没有人上机消费,而只能说明一个问题:当天,会员的退卡量很多。也就是说我的机房锐减了很多消费者。

结论:如果我是一个机房的所有者,我会更愿意采取第二种方案。消费金额是用来干嘛的,我需要从消费金额,来看我的机房的运营情况。当然也有人说需要通过消费金额来看盈利情况,但我更侧重通过应收金额(也就是实际收到的钱)来看盈利情况。我认为,这样的算法得到的数据才是更有价值的。当我发现那天的消费金额很低,或者成负数。但那天又有很多人来上网。那时候,我不应该感到高兴,而是感到危机:因为,我的会员人数在减少。这个信号说明:我需要想办法去挽救我的既有客户,以及争取新的客户。如果永远看到的只有正值的消费金额,那么会有一种错觉,永远都在赚钱。可事实呢?

另外,还有人说:本期余额=应收金额+消费金额(上机记录统计的金额)。其实,我也不明白为什么要这样算,这样算会有一部分的钱,被重复计算。因为:应收金额=充值金额—退卡金额,这是真正得到的钱。而前面算的本期余额中,消费金额其实就是充值金额之内的。他将充值金额重复计算,会造成盈利丰厚的错觉。而且很可能账目会出现混乱。因为按数据统计的余额有很多,但实际上的余额,是没有那么多的。

好了,这就是我关于删除用户,以及结账数据的理解。

三、个人感受

那天算了一天的钱,感觉怎么算怎么不对。不过,我第一次算的那个肯定不对。但,我觉得,统计的数据必须要有实际意义实际价值。当然,这也可能是需求的分析出现了分歧。额,我只能说,了解用户的真正需求,真的很重要!

PS:我是持不了家的,就我榆木的脑袋,算钱的本事。唉!

请大家多多指教啦,谢谢!

.NET重构(六):删除用户和结账的理解的更多相关文章

  1. 【转载】MySQL5.7 添加用户、删除用户与授权

    mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...

  2. MySQL5.7 添加用户、删除用户与授权

    mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...

  3. MySQL5.7 添加、删除用户与授权

    mysql -uroot -proot 例子: 创建用户mysql> CREATE USER 'xiaoyaoji'@'%' IDENTIFIED BY 'xiaoyaoji';Query OK ...

  4. MySQL 添加用户、删除用户与授权

    mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...

  5. mysql5.7创建用户授权删除用户撤销授权

    一, 创建用户: 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - ...

  6. linux用户管理(1)----创建用户(adduser和useradd)和删除用户(userdel)

    一.常用命令: (1)创建用户命令两条: adduser useradd (2)用户删除命令: userdel 二.两个用户创建命令之间的区别 adduser: 会自动为创建的用户指定主目录.系统sh ...

  7. Linux运维六:用户管理及用户权限设置

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...

  8. linux用户管理之创建用户和删除用户

    一.常用命令: (1)创建用户命令两条: adduser useradd (2)用户删除命令: userdel 二.两个用户创建命令之间的区别 adduser: 会自动为创建的用户指定主目录.系统sh ...

  9. linux新增用户和删除用户

    新增用户 新增用户命令:useradd 参数: 参数 说明 -u 指定UID,也就是自定义UID -g 知道GID,也就是初始化用户组,/etc/passwd文件中的第四个字段. -G 后面接用户组的 ...

随机推荐

  1. gin 打linux环境包问题解决

    打window包直接go build一下,完事, 但是,打linux包出现如下错误 ..\github.com\mattn\go-isatty\isatty_linux.go:7:8: cannot ...

  2. vue-quill-editor 富文本编辑器插件介绍

    Iblog项目中博文的文本编辑器采用了vue-quill-editor插件,本文将简单介绍其使用方法. 引入配置 安装模块 npm install vue-quill-editor --save in ...

  3. DVWA之文件包含(File inclusion)

    daFile inclusion的意思就是文件包含,当服务器开启了allow_url_include选项时,就可以通过PHP的某些特征函数 include,require和include_once,r ...

  4. MySQL索引使用等

  5. Python学习日志9月17日 一周总结

    周一,9月11日 这天写的是过去一周的周总结,我从中找出当天的内容. 这天早晨给电脑折腾装机,早晨基本上没有学习,休息了一个早晨. 下午写的上周总结,完事做mooc爬虫课的作业,<Think P ...

  6. CSS的相对定位和绝对定位

     relative的意思就是相对自己的一开始的位置进行的定位.如图: 但是这个元素的本身边距不变,还在原来位置   absolute的意思就是 如果它的父元素设置了除static之外的定位,比如pos ...

  7. Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化

    从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性.创建数组NSArray,哈希表NSDictionary, 数值对象NSNumber时,可以像NSString的初始 ...

  8. OpenWrite方法打开现有文件并进行写入

    实现效果: 知识运用: File类的OpenWrite方法 //实现打开现有文件以进行写入 public static FileStream OpenWrite (string path) Encod ...

  9. 利用java自带的base64实现加密、解密

    package com.stone.util; import java.io.UnsupportedEncodingException; import sun.misc.*; public class ...

  10. 数据库:SQL Server自增长列的编号

    SQL Server表中的自动编号ID重新开始排列 说法一: 有两种方法: 方法1: truncate table 你的表名 --这样不但将数据删除,而且可以重新置位identity属性的字段. 方法 ...