摘要:
目的:生成器的目的是将复杂对象的创建过程(流程)进行抽象,生成器表现为接口的形式。 如果对象有复杂的继承树,理论上创建对象的生成器也同样具有复杂的继承树。 传进来一个生成器, 我调用这个生成器来生成我所需要的汽车,这就是生成器模式的核心.这个生成器Builder是个接口,把复杂对象的创建过程进行抽象
阅读全文
posted @ 2020-10-13 15:59
唯一客服系统开发笔记
阅读(155)
推荐(0)
摘要:
支付宝小程序的开发管理里 > 服务器域名白名单添加 自己的主域名 , 所有二级域不需要都加上 js文件里直接使用网络API my.request({ url: 'https://gofly.sopans.com/visitors_online', method: 'GET', success: fu
阅读全文
posted @ 2020-10-13 14:26
唯一客服系统开发笔记
阅读(316)
推荐(0)
摘要:
抽象工厂:在不指定具体类的情况下创建一系列相关或从属对象。最重要的特征就是抽象类的组合.通常,创建的类都实现相同的接口。抽象工厂的客户端并不关心这些对象的创建方式,只是知道它们如何组合在一起。 三个抽象类 interface WriterFactory{ public function create
阅读全文
posted @ 2020-10-13 13:24
唯一客服系统开发笔记
阅读(141)
推荐(0)
摘要:
作为一个平台型服务,提供给用户管理自己的个人设置,以及可以管理邮箱的webmail系统 , 登录验证部分是要求比较多的 1. 第一个难点是安全性 , 验证密码后 , 如果企业开启了高安全等级 , 那么用户必须验证手机号 。没有绑定手机号的需要先绑定后验证。 当用户开启了密码失效功能后,如果当前密码过
阅读全文
posted @ 2020-10-09 17:35
唯一客服系统开发笔记
阅读(340)
推荐(0)
摘要:
使用这个GoAdminGroup/go-admin框架的最简单的例子就可以把项目运行起来 , go-admin 是以扩展库的形式使用的. 建一个main.go package main import ( "io/ioutil" "log" "os" "os/signal" _ "github.com
阅读全文
posted @ 2020-09-29 13:50
唯一客服系统开发笔记
阅读(1416)
推荐(0)
摘要:
在开启了go module情况下 , 也就是执行了 go env -w GO111MODULE=on 再执行go get xxxxx 文件会存放在$GOPATH/pkg/mod 下 并且目录名里的大写字母会转成小写字母 , 前面加一个! 例如: go get github.com/GoAdminGr
阅读全文
posted @ 2020-09-29 11:55
唯一客服系统开发笔记
阅读(1898)
推荐(0)
摘要:
当我执行go install github.com/xxxxx 时候 , 报错: can't load package: cannot find module providing package github.com/xxx: working directory is not part of a m
阅读全文
posted @ 2020-09-29 11:27
唯一客服系统开发笔记
阅读(6592)
推荐(0)
摘要:
go-fly 基于GO语言实现的web客服即时通讯与客服管理系统。非常适合给自己的网站增加在线客服功能,代码简单也适合学习。 Github地址:https://github.com/taoshihan1991/go-fly 后台管理地址: https://gofly.sopans.com/login
阅读全文
posted @ 2020-09-26 03:37
唯一客服系统开发笔记
阅读(2508)
推荐(0)
摘要:
在这个目录下建立shell文件 /home/ubuntu/shell_script/backup_db_gofly.sh #!/bin/base #定义备份文件路径 backupFilePath="/home/ubuntu/database/"; #定义备份文件名称 currentDate=`dat
阅读全文
posted @ 2020-09-24 19:08
唯一客服系统开发笔记
阅读(299)
推荐(0)
摘要:
获取到当前用户的IP以后想把它转换成中国的城市 , 可以使用下面这个库 ipdb-go gin的入口代码 func PostVisitorLogin(c *gin.Context) { ipcity:=tools.ParseIp(c.ClientIP()) ipcity.CountryName+ip
阅读全文
posted @ 2020-09-23 23:09
唯一客服系统开发笔记
阅读(411)
推荐(0)
摘要:
监听事件 mounted() { document.addEventListener('paste', this.onPasteUpload) } 粘贴的时候组装formData , 下面代码中的文件域name属性是 imagefile ,,然后调用jquery的ajax方法传过去 , 后端和普通文
阅读全文
posted @ 2020-09-22 21:10
唯一客服系统开发笔记
阅读(1685)
推荐(0)
摘要:
突然多了很多访客 , 有个访客告诉我被公众号推荐了 , 我才看到了 , 本来一个简单的练习项目 ,得到大家的认可也是开心的 大家也可以关注下"转角遇到GitHub " 原文地址: https://mp.weixin.qq.com/s/QhOsBV2y5DXeC7yCCxH-uA
阅读全文
posted @ 2020-09-21 13:28
唯一客服系统开发笔记
阅读(236)
推荐(0)
摘要:
案例大部分都是用npm模式的,现在这个是使用cdn模式的更符合后端开发 html部分 , 注意template标签 ,定义上的id <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="ht
阅读全文
posted @ 2020-09-17 16:33
唯一客服系统开发笔记
阅读(2013)
推荐(0)
摘要:
使用标准库http来实现 package tools import ( "io/ioutil" "net/http" ) func Get(url string)string{ res, err :=http.Get(url) if err != nil { return "" } robots,
阅读全文
posted @ 2020-09-15 19:13
唯一客服系统开发笔记
阅读(5698)
推荐(0)
摘要:
字段类型是: `enterpriseId` int(10) unsigned DEFAULT NULL, `email` char(255) NOT NULL DEFAULT '',表的索引是: UNIQUE KEY `emailent` (`email`,`enterpriseId`), KEY
阅读全文
posted @ 2020-09-14 17:27
唯一客服系统开发笔记
阅读(775)
推荐(0)
摘要:
在开发GO小程序或者公众号接口的时候,需要对接微信消息的token签名验证 , 这时候需要开发者验证来自微信 , 并返回指定的字符串 微信文档里给的是PHP版本的代码 , 下面这个是go版本的代码 , 使用的gin框架 这个是入口的路由 ,根据自己的代码来写就可以 , 注意发来的是GET请求 pac
阅读全文
posted @ 2020-09-14 13:59
唯一客服系统开发笔记
阅读(1440)
推荐(0)
摘要:
分页功能几乎是每个项目里都会使用的功能,在使用gorm的前提下,下面这样实现分页. 前端使用的是elementui , 只需要返回两个参数就可以前端分页了 , 总页数和每页的条数 后端需要知道两个参数, 当前第几页和每页的条数 比如下面的代码: 里面的page是前端传过来的 , pagesize是配
阅读全文
posted @ 2020-09-11 11:55
唯一客服系统开发笔记
阅读(778)
推荐(0)
摘要:
表单中的某个表单域被设定为disabled,则该表单域的值就不会被提交。 但是我们需要提交这个里面的默认值,这个时候需要使用readonly 但是readonly的样式不好看,会不像禁用状态,需要增加下面两个样式就很像了 style="background: #ebebe4;cursor: not-
阅读全文
posted @ 2020-09-10 17:35
唯一客服系统开发笔记
阅读(411)
推荐(0)
摘要:
当初始化项目的时候,之前需要手动导入数据库sql文件,现在可以直接在命令行参数里输入go-fly install ,就可以把数据库文件导进去了 实现方式就是使用gorm执行sql文件里面的每行sql语句 读入sql文件后把字符串按照分号分隔,转成[]string ,然后再循环执行 实例代码是(自行更
阅读全文
posted @ 2020-09-08 21:56
唯一客服系统开发笔记
阅读(914)
推荐(0)
摘要:
最开始的解析命令行参数是使用的标准库里面的flag包,后来想增加新的参数的时候比较复杂和困难,因此使用cobra更加简单一些 比如执行go-fly server port 8081是运行项目 执行go-fly install是导入数据库 目录结构: 增加cmd目录,作为cmd包,代码中直接定义全局变
阅读全文
posted @ 2020-09-08 21:40
唯一客服系统开发笔记
阅读(406)
推荐(0)
摘要:
实现gofly客服的过程中遇到的问题 gorm在插入完成数据后,想要获取插入的自增id ,可以使用Create()方法执行插入,在结构体里直接就能获取到ID 例如下面这个User type User struct { Model Name string `json:"name"` Password
阅读全文
posted @ 2020-09-04 18:08
唯一客服系统开发笔记
阅读(6469)
推荐(1)
摘要:
整体的流程图如下: 访客首次访问是通过websocket ,注册成一个新的用户 ,websocket的连接存储在全局变量clientList这个map里面 , key就是访客id ,value是连接 客服登陆也是通过websocket,把连接存储在全局变量kefuList这个map里 , key是客
阅读全文
posted @ 2020-09-02 14:18
唯一客服系统开发笔记
阅读(693)
推荐(0)
摘要:
在做gofly客服的上传图片部分时,需要在gin框架中实现上传图片,并且限制文件的后缀 上传文件在gin中比较简单,就是在http处理函数里面调用c.SaveUploadedFile()就可以了 需要实现限制文件后缀,自动创建按照月份的上传目录,生成新的文件名字避免冲突被覆盖 完整代码如下 ,上传目
阅读全文
posted @ 2020-08-26 14:58
唯一客服系统开发笔记
阅读(3679)
推荐(0)
摘要:
简单原理: 选择一个值作为最小值,在后面的元素中找比它还小的值进行交换 //选择一个最小值,再寻找比它还小的进行交换 func SelectionSort(arr *[]int){ for i:=0;i<len(*arr);i++{ minIndex:=i for j:=i+1;j<len(*arr
阅读全文
posted @ 2020-08-25 21:56
唯一客服系统开发笔记
阅读(259)
推荐(0)
摘要:
下面代码放在models包下的users.go中 表结构和struct字段是一致的,把表字段的下划线变成首字母大写的驼峰命名 创建,查找,删除,更新用户,见下面的具体方法 package models import ( _ "github.com/jinzhu/gorm/dialects/mysql
阅读全文
posted @ 2020-08-24 18:20
唯一客服系统开发笔记
阅读(647)
推荐(0)
摘要:
登录界面如果要实现响应式 , 需要注意宽度的设置和media query的使用 宽度一般都是按百分比设置,当页面中百分比也满足不了的时候,可以使用media query区分出当前屏幕的宽度 根据不同的屏幕宽度设置不同的css 例如下面gofly的这个登录页 , 访问地址 : https://gofl
阅读全文
posted @ 2020-08-24 16:29
唯一客服系统开发笔记
阅读(649)
推荐(0)
摘要:
核心思路: 将数组分成已排序和待排序两部分,将一个元素从待排序插入到有序数组的适当位置,直到所有待排序都插入完成 把第一个元素作为已排序数组,将后面的元素依次与已排序元素从后往前进行比较,如果当前元素小于有序数组元素,有序数组元素往后挪1位,直到大于了就插入到有序数组元素后面 //插入排序 func
阅读全文
posted @ 2020-08-22 13:06
唯一客服系统开发笔记
阅读(455)
推荐(0)
摘要:
核心原理: 比较相邻的两个元素,较大的一个交换移动到右边 优化: 已经排好序的元素不再进行比较,减少比较次数 下面函数的变量flag 用于判断后续元素有无发生交换,没有发生交换的直接停止遍历 变量lastSwapIndex ,记录最后一次发生交换的位置,后续元素不再进行比较 //冒泡排序 func
阅读全文
posted @ 2020-08-22 12:59
唯一客服系统开发笔记
阅读(510)
推荐(0)
摘要:
原理很简单,就是用php输出一个header头,可以直接让浏览器下载文件 单元格内容用英文逗号分隔, 其中为了防止乱码,汉字部分会进行一个转码操作,从utf8转为gbk 为了使单元格看起来直观一点,会增加个\t ,这样就不会看的时候出现######### 比如下面这个把moveusers数组作为cs
阅读全文
posted @ 2020-08-21 16:25
唯一客服系统开发笔记
阅读(1744)
推荐(0)
摘要:
快速排序思路: 1. 第一个数作为基准数,找到所有比基准数小的放在左边 ,找所有比基准数大的放右边 2.两个指针 ,一个从前往后 i,一个从后往前 j,i找到比基准数大的停下 , j找到比基准数小的停下 , 两个数调换位置,直到两数相遇 3.调换基准数与i/j位置 4.递归 , 从0到基准数位置 ,
阅读全文
posted @ 2020-08-20 21:51
唯一客服系统开发笔记
阅读(418)
推荐(0)
摘要:
在使用长连接的过程中,如果有的长连接一直连着,想要杀掉这条连接可以使用tcpkill命令 安装tcpkill , tcpkill使用dsniff的一个小工具 apt install dsniff 使用过程: 比如连接服务端8082端口的这条连接 杀掉连接, 过滤规则类似tcpdump tcpkill
阅读全文
posted @ 2020-08-20 19:08
唯一客服系统开发笔记
阅读(5496)
推荐(0)
摘要:
结论:count(*)>count(1)>count(主键id)>count(字段) 原因:count(*)单独做过优化,只扫描普通索引树,并且不会取值,按行累加count(1)遍历表放一个数字“1”进去,判断是不可能为空的,按行累加count(主键id)遍历表,解析数据把id值取出来,按行累加co
阅读全文
posted @ 2020-08-19 16:16
唯一客服系统开发笔记
阅读(1286)
推荐(0)
摘要:
在执行go test命令的时候,如果是测试同一个包中的函数,需要把所涉及的文件都写在参数部分 例如: 涉及的文件不多,可以把文件都写上一同编译 如果涉及的文件太多,直接在包下执行go test
阅读全文
posted @ 2020-08-17 22:39
唯一客服系统开发笔记
阅读(2371)
推荐(0)
摘要:
快速排序首先选一个基准(你也可以认为是要放到排序后数组正确位置的元素)pivot,然后将数组按照选取的基准 pivot 进行划分。而选取 pivot 的方式又有很多种,所以快速排序具有很多版本。 总是选择第一个元素作为基准 pivot;总是选择最后一个元素作为基准;(本文后续的实现就是依次为例)随机
阅读全文
posted @ 2020-08-17 22:26
唯一客服系统开发笔记
阅读(682)
推荐(0)
摘要:
gofly最近准备完善对外的js引用功能,类似很多知名客服系统那样直接引入js就可以使用,现在只是简单的实现了下 代码在github,可以在页面上看到, gofly地址在这里 https://gofly.sopans.com/ , 开发和部署方式在github的readme.md 首先要申请js权限
阅读全文
posted @ 2020-08-13 14:23
唯一客服系统开发笔记
阅读(496)
推荐(0)
摘要:
当需要实现守护进程 , 以及自己开发的命令自动崩溃重启时,可以使用go版本的supervisord , 比python版本依赖少一些 git clone https://github.com/ochinchina/supervisord.gitenv GOOS=linux GOARCH=amd64
阅读全文
posted @ 2020-08-11 10:18
唯一客服系统开发笔记
阅读(769)
推荐(0)
摘要:
在实现客服系统的过程中,需要有新消息的时候标题栏闪烁提示 因为聊天框是被iframe框进去的页面,所以在聊天框中收到websocket消息以后要把消息发送给父集页面,在父页面中闪烁标题 测试页面地址: https://gofly.sopans.com/ 子页面发送到父页面的实现是,在父页面增加消息监
阅读全文
posted @ 2020-07-28 11:08
唯一客服系统开发笔记
阅读(332)
推荐(0)
摘要:
当我们使用了websocket技术实现了实时的推送访客来到消息,但是我们只能随时看着页面不离开才能知道有访客来到 现在增加浏览器的通知消息,就可以只要打开着界面,不用一直盯着,干别的事去就可以了,有新消息会从右下角弹出来 测试地址如下,当有访客点击咨询按钮时,客服后台会弹出提示: https://g
阅读全文
posted @ 2020-07-27 15:51
唯一客服系统开发笔记
阅读(530)
推荐(0)
摘要:
我的域名是在阿里云万网上购买的,服务器是部署在腾讯云上,可以按照下面的步骤配置https 首先登陆阿里云网站控制台,申请免费证书,免费证书只能单一域名。测试地址如:https://gofly.sopans.com/ 申请稍等几分钟就能通过 把证书下载到本地,然后上传到腾讯云的服务器上,配置nginx
阅读全文
posted @ 2020-07-26 12:19
唯一客服系统开发笔记
阅读(702)
推荐(0)
摘要:
如果项目中需要有多语言的展示,类似网站中英文切换,可以使用下面这个方法来实现 主要思路就是,页面html内容展示的时候,不能固定写死在页面上,需要从控制器部分分配过来变量,展示输出这个变量 这个变量的内容来自一个结构体的成员,该结构体在创建实例的时候,可以根据传递参数的不同,实例的成员内容不同 实际
阅读全文
posted @ 2020-07-25 15:33
唯一客服系统开发笔记
阅读(1121)
推荐(0)