一首小诗
寒蝉凄切,对长亭晚,骤雨初歇。都门帐饮无绪,留恋处,兰舟催发。执手相看泪眼,竟无语凝噎。念去去,千里烟波,暮霭沉沉楚天阔。 多情自古伤离别,更那堪,冷落清秋节!今宵酒醒何处?杨柳岸,晓风残月。此去经年,应是良辰好景虚设。便纵有千种风情,更与何人说?
原创
2022年05月17日 20:09
  • 翟码农
  • php
  • 9
  • 1
  • 0

今天测试“审批流撤销”功能,突然遇到一个奇怪的问题:日志显示新增数据成功,db里却查不到。

代码如下:

try{
$service_document->retreat($workflow_type_id, $doc_manage_id);
$this->requestSuccessResponse();
}catch(\Exception $e){
$service_log = new LogService();
$service_log->createLog($doc_manage_id, LabelService::TEXT_LOG_CATEGORY_DOCUMENT, $e->getMessage());
$this->requestErrorResponse("retreat fail");
}


createLog是添加日志记录的方法。测试功能,提示了retreat fail,但是数据库日志表里却看不到数据。


新增日志的方法,打印出sql以及新增之后的主键ID,都是没问题的。


那问题出在哪儿呢?

问题出在Service里retreat方法上。先上代码:

$res3 = $obj_model->table('tms_new_workflow_process')
->where(array('workflow_type_id' => $type, 'subject_id'=> $doc_manage_id))
->save($process_update);
if(false === $res3){
$obj_model->rollback();
throw new Exception("update workflow process fail!");
}
$obj_model->commit();
原创
2022年05月11日 23:20
  • 翟码农
  • 前端综合
  • 30
  • 0
  • 0
就是下面这段代码:
$("#list_language_file").html(htmlLanguageFile);
在页面里开始有效果,可突然我又发现不起作用了,list_language_file结点里的内容无法显示。

场景:

从文件列表里,点击新增tab页,打开文件详情页,代码大致如下:
$('#mainTab').tabs('add',{
width:$("#mainTab").parent().width() - 180,
title: " Document Detail-" + dataCellClick.doc_name,
iconCls: null,
href: 'Document/documentDetail?doc_manage_id='+dataCellClick.doc_manage_id,
closable: true
});

故障情况:

经过多次测试,发现只有在打开第二个文件的详情页时,上面html方法才没起作用。

问题原因:

tabs打开的页面仍处在同一个html页面里,所以当打开多个文件详情页时,开头id元素重复了。(经过检查,发现html方法作用在第一个详情页里去了)
原创
2022年05月10日 09:37
  • 翟码农
  • 前端综合
  • 20
  • 0
  • 0
<
原创
2022年04月23日 21:36
  • 翟码农
  • mysql
  • 47
  • 0
  • 0

在这篇文章:

laravel 中用group by和order by排序不正确的问题解决

中,提出了如下知识点:

mysql中order by是在group by之后执行的,而group by则是在同一组数据里挑选出id最小的数据记录作为汇总记录

以前的经验,是先在order by的子查询末尾加上:

limit 1000

结果今天发现它不生效。


相关表sql:

CREATE TABLE `tms_doc_manage` (
	`doc_manage_id` INT(11) NOT NULL AUTO_INCREMENT,
	`doc_main_id` INT(11) NOT NULL COMMENT 'doc主表id',
	`section_id` INT(11) NOT NULL DEFAULT '1' COMMENT 'section id',
	`modify_times` TINYINT(2) NOT NULL DEFAULT '0' COMMENT '文件修改次数',
	`status` TINYINT(2) NOT NULL DEFAULT '1' COMMENT '0-delete 1-inactive 2-new 3-submitted 4-processing 5-approve 6-reject',
	`creator_id` INT(11) NULL DEFAULT NULL,
	`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`updater_id` INT(11) NULL DEFAULT NULL,
	`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (`doc_manage_id`)
)
COMMENT='文档管理表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0
;
原创
2020年09月26日 21:57
  • 翟先森
  • Linux
  • 1825
  • 0
  • 0

这周给服务器安装环境,其中一部分是安装神通数据库。由于网上有关神通数据库的资料实在是不多,踩了不少坑,本文现将安装的详细过程及其中遇到的坑记录下来。


备份旧服务器上的神通数据库

开发环境是Windows系统,有安装神通对应的软件工具,其中“DBA管理工具”软件就可以对数据库进行逻辑备份,将数据库导出成osr后缀的文件。


新服务器上安装神通数据库

此次要安装环境的服务器主板是龙芯主板(loongson),神通数据库有对应的源码,可自行下载:各个类型版本的神通数据库下载


下载安装包(假定是shentong.tar.gz),解压后,开始进行安装(假定解压在/opt/shentong目录下)。

1. 全局修改st.propertities文件

修改/opt/shentong/Disk1/InstData/st.propertities文件,将OSRDB全部替换成我们要建的数据库名,例如BLUEZHAI。

:s/OSRDB/BLUEZHAI/g

查了许久资料,也尝试了许久时间,没能找到什么时候可以自行用命令创建数据库,所以只好将默认数据库直接改成我想要的数据库。

要建多个库的话,我这种方式就行不通了。


2.执行安装命令,开始安装神通数据库

原创
2020年09月10日 22:44
  • 翟先森
  • 计算机网络
  • 1613
  • 0
  • 0

最近工作中有一些关于swoole的问题解决不了,所以打算系统的学习一下swoole。


刚开始第一步创建服务端和客户端,就遇到客户端程序始终连不上服务端的问题。


起初提示需安装ext-aysnc扩展错误

起初报如下错误:

PHP Fatal error:  Swoole\Client::__construct(): 
please install the ext-async extension, using Swoole\Async\Client in /opt/study/client.php on line 3

这是因为程序创建的客户端,用了异步参数,而且代码是swoole4.4版本的,说是在swoole4.5版本下异步客户端创建方式有调整,具体调整啥,暂且不管了,先就直接用同步参数了。

$client = new Swoole\Client(SWOOLE_SOCK_TCP);


启动服务程序,端口成功处于监听状态

swoole tcp服务端程序如下:

$serv = new Swoole\Server("127.0.0.1", 6400);
$serv->set([
    'work_num' => 2
]);

//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {
    echo "Client: Connect.\n";
});
原创
2020年09月09日 19:51
  • 翟先森
  • php
  • 1733
  • 2
  • 0

昨天在php-7.2.32环境下,编译安装swoole-4.5.3版本的扩展,尝试重新编译php和swoole好几次,都是报undefined symbol: sapi_globals的错误,整体错误信息如下:

Starting php-fpm [08-Sep-2020 22:12:16] NOTICE: 
PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library 'swoole.so' 
(tried: /opt/software/somodules/swoole.so (/opt/software/somodules/swoole.so: undefined symbol: sapi_globals), 
/opt/software/somodules/swoole.so.so 
(/opt/software/somodules/swoole.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
原创
2020年09月06日 10:57
  • 翟先森
  • 前端综合
  • 1280
  • 0
  • 0

为了让自己的博客文章有更好的阅读体验,昨晚翟码农给博客文章添加了目录导引。



现主要记录下其思想,本文代码为jQuery框架下的,使用vue框架的,或者给博客园、wordpress博客文章添加目录的,原理都相似,对代码稍稍调整即可。


要实现文章目录索引效果,主要实现以下3个任务:

1.假定博客里标题固定为h3、h4格式,先将这些标题内容获取出来,生成目录。

2.点击目录链接,文章滚动到指定位置。

3.滚动文章,对应目录的链接样式能高亮显示


如果想直接看全部代码的,就直接拉到文章末尾。实现效果,尝试点击本文章里目录或者滚滚文章试试吧。


获取文章标题内容,生成目录

用jQuery实现也很简单,用如下一行代码就可以获取文章里所有用h3和h4格式的标题。

let titles = document.querySelectorAll(".box-content h3,h4");

.box-content是翟码农博客文章div的class,大家根据自己实际情况修改即可。


在文章页面添加好如下div,用来展示目录:

文章大纲


再遍历上面获取的标题,将其塞进上面目录div里。

titles.forEach((element, index) => {
    var linkItem = document.createElement('a');
    linkItem.innerHTML = element.innerHTML;
    linkItem.setAttribute('id', 'anchor_'+index);
    linkItem.setAttribute('class', 'link-index');
    linkItem.href = 'javascript:void(0)';
    indexBoxItem.append(linkItem);
});
原创
2020年08月25日 00:03
  • 羽由
  • 羽由小说
  • 1285
  • 3
  • 0

天色将晚,我出门看了看镜子,忽然感觉是时候要剪个头发了。要说今天与往常有什么不同,不过是晚上将见一个朋友罢了——男的。


暑气阑珊,走在昏黄路灯的街上,呼吸着树林间微风鼓动的气息,仿佛此时此刻才是生活的味道。


理发店离酒店很近,走个七八百米就到了。


门口的白色荧光灯在飞速的转动,我一推开门就朝迎面走来的人说道:“老板,理发多少钱?”

“有38块,也有68块的,看你要剪哪样?”他微笑的回答着我,那笑容看不出一点做作。

“有什么区别么?都是洗剪吹?”

“嗯——没什么区别,只是剪发的人不同”,他继续解释着,“嗯,都是洗剪吹的”。

“嗯,好,那我就剪38块的。”


一说完,人家就招呼一个漂亮的妹子带我洗头去了。


我才躺下,那妹子才刚刚把我头发润湿,就开口问道:“帅哥,看你像第一次来,你是住这附近的么?”

“没有,旅游过来的。”

“北京?”她洗发的动作格外轻柔。

“没有没有,看把你吓得,深圳。”

“深圳是个好城市啊!”


我还没来得及张口,妹子继续笑吟吟的,“哥,你发现没有,你声音好有磁性哦!”

我心里隐隐乐开了花,只是仍然假装不为所动,“有么?”

“真的,我都爱上了。”


沉浸在喜悦里无法自拔,妹子又继续问着我。

“帅哥,我们可以洗脸和肩颈按摩二选一,你要哪个?”

原创
2020年08月14日 22:13
  • 翟先森
  • php
  • 1619
  • 5
  • 0

今天写curl请求时,其中一行要指定post请求的参数。


当请求头部Content-Type为application/json时,post请求参数需要json_encode转换一下,否则就用http_build_query转换一下。


当写到如下判断时,才想到自己对false>=0的情况有点疑惑:

if(strpos(trim(strtolower($header['Content-Type'])), 'application/json') >= 0){
curl_init($ch, CURLOPT_POSTFIELDS, json_encode($post_data) );
}


当下立马去求证了一下:

false>=0的结果为真

所以上面代码判断方式不妥,后面直接改成0 === strpos()这种方式了。