个人工作知识笔记
主页
Linux运维
Thinkphp相关
功能开发代码
常用工具
低频方案
常用软件
日记流水
账号体系
思考规划
添加内容
记日记
本网站
>
常用功能代码
TP安装及常用命令
TP控制器相关使用
linux常用命令
SQL常用代码
Ajax传输样例
TP6操作手册
TP3.2操作手册
coscmd配置
Ngix配置
WX错误代码
SLL配置
curl命令详解
功能
跳转至前台
数据备份
退出登录
标题
类别
Linux运维
Thinkphp相关
功能开发代码
常用工具
低频方案
是否隐藏
内容详情
<p>问题汇总:</p><p><br></p><p>不能添加订单的根源问题是设计缺陷,其具体原因如下:</p><p>订单号是由16位字符组成,其末尾是按每天的订单数量进行自增1,订单号的前八位是年月日如20220120,完整的订单号如</p><p>LFCY202201190001;</p><p>LFCY202201190002;</p><p>LFCY202201190003;</p><p>具体的运作是截取最后一个订单号的后10为数字进行加1运算,</p><p>如 2201190001+1=2201190002,得出结果后再与字母和拼音进行拼装,如此类推。</p><p>而计算机的世界中,int字段类型的数字最大值是2147483647,所有超过2147483647的数字都会阻断程序运行。</p><p>由此不难看出,如果时间在2022年之前,所有的这种方法产生数字编号都不会超过2147483647,但是到了2022年,其数据起头就会大于这个数字即使1月1日(订单数字部分2201010001)也会大于int最大值,所以这个问题会在2022年暴露出来。</p><p>结觉办法是将原来的dll文件进行反编译,找到对应逻辑部分,把此处的运算方式改掉,然后再编译回去。即,在生成订单号的时候,只截取前一个订单的九位数进行加法运算。如201010001(年的部分只取末位),这样数字会远远小于int的最大值,然后在拼装的时候补齐16位字符。(注:每天的第一个订单号生成原理与第二个之后的原理不同,第一个号不牵扯计算,直接由字母和日期与“0001”字符串进行串联,所以每天的第一个单号不会出问题,都是从第二个单号开始的)。这种处理办法并不能永久不出问题,因为在时间到2030年的时候,年份的末位是0,而正整数的起头不可能是0起头的,但这要等到八年之后才会出现这个问题。现在不用管。</p><p>关于反编译:反编译犹如水泥盖房子,盖完房子后想把房子还原成水泥和砖是一件很困难的事。如果有源代码,直接从新生成一个一摸一样的就行了,但是没有源代码只能利用反编译,反编译出来的代码并不是源代码而是中间语言,中间语言也就是机器码,这中间利用的办法就是开发出一段自己的源代码,编译成机器码,然后把自己的机器码给换到要换的位子上,然后再将机器码编译成dll文件。具体用的工具有三个,Reflector:查看文件原型;ildasm:反编译成li文件的工具,ilasm:将文件编译成dll。具体使用示例: ilasm 1234.il /resource="1234.res" /output=App_Code.dll /dll ,需注意的是resource部分,如果原dll包含资源,在操作的时候一定要带上resource相关参数。</p><p><br></p><p>其他问题:</p><p>到期时间的 加密解密函数如下</p><p><br></p><p> public static string RSAEncrypt(string encryptString)//加密</p><p> {</p><p> string str = "";</p><p> for (int i = 0; i < encryptString.Length; i++)</p><p> {</p><p> str = str + ((char) ((encryptString[i] + '\n') - 2));</p><p> }</p><p> return str;</p><p> }</p><p><br></p><p> public static string RSADecrypt(string encryptString) //解密</p><p> {</p><p> string str = "";</p><p> for (int i = 0; i < encryptString.Length; i++)</p><p> {</p><p> str = str + ((char)((encryptString[i] - '\n') + 2));</p><p> }</p><p> return str;</p><p> }</p><p><br></p><p><br></p><p>其加密部分为cus_customers表的cus_Epxtime字段。 原始值为“:8:=58>59@” ;解密后根据其格式从新设置新值,再加密替换即可。</p>
立即提交