Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程...
在上篇随笔《Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示》中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的《winform开发框架》的基础上进行CRM系统模块的开发工作,希望对大家在系统模块开发有所启示或者帮助。
在我整个开发框架的体系结构中,我都希望开发的业务模块尽可能重用,因此遵循这个要求,所有的模块除了一些基础模块外,尽可能和其他业务模块没有任何耦合关系,同时也可以动态对模块进行加载使用,和我在《Winform开发框架之插件化应用框架实现》的思想一样,各个模块之间可以动态组合起来,实现更多的业务整合。
1、CRM系统的工程项目介绍
本客户关系管理系统,也是基于这个目的和基础上进行模块开发,在整个项目模块开发过程中,将会利用到整个Winform开发框架的相关组件模块,包括基础界面模块、程序启动模块、权限管理模块、字典管理模块、分页控件、公用类库、附件管理等公用模块。
整个CRM系统的界面效果如下所示。
首先我们来看看CRM系统主要项目工程的布局和说明。
设计好CRM的相关数据库表后,利用C#代码生成工具Database2Sharp生成框架各层的代码,模块开始开发的时候,可以一次性把所有业务表的代码一次性生成,然后在整个新的解决方案(.sln)上进行递增式完善即可,如果是后续模块的开发,则需要增量把生成的代码,复制到相关的框架目录即可,整理后的业务逻辑层代码结构如下所示
这个时候,我们生成了界面层以下的所有分层代码,整个代码生成后,一次性即可编译通过,界面层我们另外建立一个Winform项目工程WHC.CRM.UIDx ,然后添加相关的界面引用程序集(如DevExpress的相关界面程序集)。处理完这些后,我们又可以利用C#代码生成工具Database2Sharp来实现界面的快速开发工作了,代码生成工具生成界面的操作界面如下所示,具体生成界面的操作可以参考随笔《利用代码生成工具Database2Sharp设计数据编辑界面》进行了解。
最后得到类似项目目录结构的CRM系统界面模块工程。
由于整个CRM系统包含很多界面元素,因此以上模块的界面部分只是其中一部分,如果内容较多,可以建立目录进行分类管理,这样会更加清晰。
2、CRM系统的界面层代码分析
利用C#代码生成工具Database2Sharp,可以快速生成所需要的框架界面代码,包括集成各种已有模块的界面基类、导入导出模块支持、高级查询能功能模块,各种实体类对应关系等内容,这些如果利用手工操作,效率非常低下,而且容易出错。即使利用一些代码生成工具,如果没有和现成的界面模块进行很好的整合,也需要花费大量的时间进行整理,下面通过几个界面代码的展示进行大致的了解。
1)列表显示界面的集成和分页整合
2)字典模块的整合处理(通过扩展类方法实现)
3)导入导出模块的整合
private string moduleName = "客户合同信息";/// <summary>/// 导入Excel的操作/// </summary> private void btnImport_Click(object sender, EventArgs e){string templateFile = string.Format("{0}-模板.xls", moduleName);FrmImportExcelData dlg = new FrmImportExcelData();dlg.SetTemplate(templateFile, System.IO.Path.Combine(Application.StartupPath, templateFile));dlg.OnDataSave += new FrmImportExcelData.SaveDataHandler(ExcelData_OnDataSave);dlg.OnRefreshData += new EventHandler(ExcelData_OnRefreshData);dlg.ShowDialog();}void ExcelData_OnRefreshData(object sender, EventArgs e){BindData();}bool ExcelData_OnDataSave(DataRow dr){string customerName = dr["客户名称"].ToString();if (string.IsNullOrEmpty(customerName))return false;CustomerInfo customerInfo = BLLFactory<Customer>.Instance.FindByName(customerName);if (customerInfo == null){throw new ArgumentException(string.Format("客户名称【{0}】不存在,记录已跳过", customerName));}bool success = false;bool converted = false;DateTime dtDefault = Convert.ToDateTime("1900-01-01");DateTime dt;ContractInfo info = new ContractInfo();info.Customer_ID = customerInfo.ID;//客户IDinfo.HandNo = dr["合同编号"].ToString();info.ExpenditureType = dr["收支类型"].ToString();info.ContractType = dr["合同类型"].ToString();info.ContractName = dr["合同名称"].ToString();info.ContractMoney = dr["合同金额"].ToString().ToDecimal();converted = DateTime.TryParse(dr["签约日期"].ToString(), out dt);if (converted && dt > dtDefault){info.SignDate = dt;} ........................................success = BLLFactory<Contract>.Instance.Insert(info);return success;}/// <summary>/// 导出Excel的操作/// </summary>private void btnExport_Click(object sender, EventArgs e){string file = FileDialogHelper.SaveExcel(string.Format("{0}.xls", moduleName));if (!string.IsNullOrEmpty(file)){string where = GetConditionSql();List<ContractInfo> list = BLLFactory<Contract>.Instance.Find(where);DataTable dtNew = DataTableHelper.CreateTable("序号|int,客户名称,合同编号,收支类型,合同类型,合同名称,合同金额,公司签约人,客户签约人,签约日期,签约地点,乙方名称,合同开始日期,合同结束日期,结算情况,合同状态,关联项目,联系人,联系人电话,联系人手机,合同内容,备注说明,经办人");DataRow dr;int j = 1;for (int i = 0; i < list.Count; i++){dr = dtNew.NewRow();dr["序号"] = j++;dr["客户名称"] = BLLFactory<Customer>.Instance.GetCustomerName(list[i].Customer_ID);//转义为客户名称dr["合同编号"] = list[i].HandNo;dr["收支类型"] = list[i].ExpenditureType;dr["合同类型"] = list[i].ContractType; ......................................dr["经办人"] = list[i].Operator;dtNew.Rows.Add(dr);}try{string error = "";AsposeExcelTools.DataTableToExcel2(dtNew, file, out error);if (!string.IsNullOrEmpty(error)){MessageDxUtil.ShowError(string.Format("导出Excel出现错误:{0}", error));}else{if (MessageDxUtil.ShowYesNoAndTips("导出成功,是否打开文件?") == System.Windows.Forms.DialogResult.Yes){System.Diagnostics.Process.Start(file);}}}catch (Exception ex){LogTextHelper.Error(ex);MessageDxUtil.ShowError(ex.Message);}}}
4)高级查询模块的整合
private FrmAdvanceSearch dlg;private void btnAdvanceSearch_Click(object sender, EventArgs e){if (dlg == null){dlg = new FrmAdvanceSearch();dlg.FieldTypeTable = BLLFactory<Contract>.Instance.GetFieldTypeList();dlg.ColumnNameAlias = BLLFactory<Contract>.Instance.GetColumnNameAlias();dlg.DisplayColumns = "Customer_ID,HandNo,ExpenditureType,ContractType,ContractName,ContractMoney,CompanySigner,CustomerSigner,SignDate,SignLocation,PartyBName,StartDate,EndDate,Settlement,Status,RelatedItems,Contact,ContactPhone,ContactMobile,Content,Note,Operator";#region 下拉列表数据//dlg.AddColumnListItem("UserType", Portal.gc.GetDictData("人员类型"));//字典列表//dlg.AddColumnListItem("Sex", "男,女");//固定列表//dlg.AddColumnListItem("Credit", BLLFactory<Contract>.Instance.GetFieldList("Credit"));//动态列表#endregiondlg.ConditionChanged += new FrmAdvanceSearch.ConditionChangedEventHandler(dlg_ConditionChanged);}dlg.ShowDialog();}void dlg_ConditionChanged(SearchCondition condition){advanceCondition = condition;BindData();}
5)编辑界面的基类继承
3、CRM系统的界面层的用户及权限信息传递
我们知道,每个业务模块都可能需要获取当前登录的一些用户信息和权限信息,以便达到更好的控制和数据的显示,如某些模块,可能只需要显示当前用户的数据,由于CRM系统的界面是独立开发,不整合在启动界面模块里面,那么如何获得用户和权限控制信息呢?例如下面的CRM模块里面的界面,需要根据当前用户获取到客户的分组列表的。
首先我们可以在界面基类中实现一个接口,以便传递相关的用户和权限信息。
namespace WHC.Framework.BaseUI {public partial class BaseForm : DevExpress.XtraEditors.XtraForm, IFunction{
其中IFunction的定义如下所示。
namespace WHC.Framework.BaseUI {/// <summary>/// 父窗体实现的权限控制接口/// </summary>public interface IFunction{/// <summary>/// 初始化权限控制信息/// </summary>void InitFunction(LoginUserInfo userInfo, Dictionary<string, string> functionDict);/// <summary>/// 是否具有访问指定控制ID的权限/// </summary>/// <param name="controlId">功能控制ID</param>/// <returns></returns>bool HasFunction(string controlId);/// <summary>/// 登陆用户基础信息/// </summary>LoginUserInfo LoginUserInfo { get; set; }/// <summary>/// 登录用户具有的功能字典集合/// </summary>Dictionary<string, string> FunctionDict { get; set; }/// <summary>/// 应用程序基础信息/// </summary>AppInfo AppInfo { get; set; }} }
其中就定义了接口进行用户和权限信息的赋值。在界面按钮构建相关模块的功能界面窗体的时候,我们可以为这些传递传递相关的对象信息。
private void barCRMContact_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e){ChildWinManagement.LoadMdiForm(this, typeof(FrmCustomerContact));}private void barCRMCustomer_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e){ChildWinManagement.LoadMdiForm(this, typeof(FrmCustomerManage));}
tableForm = (Form) Activator.CreateInstance(formType);tableForm.MdiParent = mainDialog;//如果窗体集成了IFunction接口(第一次创建需要设置)IFunction function = tableForm as IFunction;if (function != null){//初始化权限控制信息 function.InitFunction(Portal.gc.LoginUserInfo, Portal.gc.FunctionDict);//记录程序的相关信息function.AppInfo = new AppInfo(Portal.gc.AppUnit, Portal.gc.AppName, Portal.gc.AppWholeName, Portal.gc.SystemType);}
通过在构造窗体的时候,传入相关的用户和权限对象属性即可实现这些信息的传递和使用。
另外,为了更加方便信息的传递,我们也可以在用户登陆的时候,把这些信息通过Cache对象把它缓存起来,类似Web开发里面的Session功能。
我的该CRM系统系列的几篇随笔链接如下,供阅读。
Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示
Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程
Winform开发框架之客户关系管理系统(CRM)的开发总结系列3-客户分类和配置管理实现
Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
本文转自博客园伍华聪的博客,原文链接:Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程,如需转载请自行联系原博主。
相关文章
- 布局组件
1.Grid Layout Group(网格布局) 1.网格布局:可以使所有的子物体进行网格样式的布局 Padding:内间距:子物体距离父物体边缘的距离;在设置内间距的距离的时候,需要根据Start Corner来进行设定 Sta…...
2023/5/28 20:55:40 - Application类
using System.Collections; using System.Collections.Generic; using UnityEngine;using System.IO; using UnityEngine.SceneManagement;public class Scripts : MonoBehaviour {// Use this for initializationvoid Start () {// Application 应用程序// 设置应用程序能否后…...
2023/5/28 20:55:39 - 抽象方法与抽象类
关键字:abstract 抽象方法: 使用abstract关键字修饰的方法就是抽象方法, 抽象方法只有方法声明,没有方法实现, 实现抽象方法需要重写 抽象方法只能写在抽象类中 抽象类: 使用abstract修饰的类就是抽象类 抽…...
2023/5/28 20:55:38 - 命名空间
命名空间:类似于文件夹;作用是为了归类和接口的 命名空间中只能写类、结构体、接口、枚举和委托 命名空间是可以重名的,相同名字的命名空间是同一个命名空间 关键字:namespace namespace A {class Person { }namespace AA{class A…...
2023/5/28 20:55:32 - ref和out
ref关键字: 是用来修饰形参的,可以将值类型当做引用类型来使用 ref修饰的形参,在方法内部修改的时候,会影响实参的值 ref修饰的形参,在传参的时候,实参的值可以带入方法中 ref修饰的形参,在方法…...
2023/5/28 20:55:31 - 委托与Lambda表达式
// 声明一个委托 // 委托就是一个类型 // Add: 委托类型的变量 // 类型: double(int, int) // 是一个方法类型,返回值类型是double,参数类型是(int, int) delegate double Add(int a, int b);class Program {public static void Main(string[] arg…...
2023/5/28 20:55:29 - Unity中的四个路径
Application.database:当前工程的Assets文件夹(编辑器) Application.StreamingAssets:IO流路径 当前工程的StreamingAssets文件夹(编辑器) 程序源下的一个文件夹(其他平台) Applicat…...
2023/5/28 20:55:28 - U3D中的一些方法和属性
string.Format();//拼接字符串的方法,里面可用占位符,方法内部为string Destroy(Object obj);//立刻销毁(游戏对象,组件或者asset) Destroy(Object obj, float timer);//过timer的时间后销毁 Cursor.visibleture;鼠标是…...
2023/5/28 20:55:25 - U3D组件------CharacterController(角色控制器)
角色控制器中有碰撞体和刚体的属性 Slope Limit:角色能爬的斜坡的坡度限制 Step Offset:角色走台阶的高度 Skin Width:当场景里面出现多个角色控制器的时候,两个对象在接触的时候会有碰撞效果,防止抖动,可以调节皮肤宽度 Min Move Distance:最…...
2023/5/28 20:55:24 - U3D框架—单例框架
写程序应遵循的原则:高内聚(内容的聚合),低耦合(功能与功能之间的联系) 代码里尽量不要有冗余:既重复,没有用的代码 using System.Collections; using System.Collections.Generic; …...
2023/5/28 20:55:21 - 数据持久化PlayerPrefs
1、Unity3D中的数据持久化是以键值对的形式存储的,可以看作是一个字典 2、Unity3D中的值是通过键名来读取的,当值不存在时,返回默认值 3、在Unity中只支持int、float、string这三种数据类型的读取,因此可以使用这三种数据类型来存…...
2023/5/28 20:55:18 - SVN常用命令
http://www.cnblogs.com/liwanggui/archive/2016/06/28/5624147.html...
2023/5/28 20:55:17 - 关于U3D图片的压缩格式
http://blog.sina.com.cn/s/blog_930ffa0b0102vass.html...
2023/5/28 20:55:16 - unity延时方法
http://www.cnblogs.com/louissong/p/3832960.html 借鉴上面的博客中的内容: Invoke(methodName: string, time: float): void; methodName:方法名 time:多少秒后执行 InvokeRepeating InvokeRepeating(methodName: string , time: float , repeatRate: float ):…...
2023/5/28 20:55:15 - unity中Android环境变量配置
http://www.cnblogs.com/windytrees/p/7533477.html...
2023/5/28 20:55:14 - Opengl库函数列表
http://www.cnblogs.com/GameDeveloper/archive/2012/01/07/2315867.html...
2023/5/28 20:55:13 - Unity3D中的Quality
Quality Level:质量等级,默认为打包最低的那个等级 Name:质量级别的名称 Pixel Light Count:像素灯数量(前向渲染使用的像素灯的最大数量) Texture Quality:纹理质量(可以设置最大分…...
2023/5/28 20:55:12 - 浅谈优化
UI的拼接要讲究章法,根据一定的效率流程去走,会提高效率,还需要遵守原则,提高性能 流程如下: 1、原画师提供效果图 原画师一般会先给一张效果图,表示这个界面风格会做成什么样的,基本功能都会展…...
2023/5/28 20:55:10 - C#之代码优化
1、if和swith: 区别:1、if语句会执行多次判断,增加CPU的消耗,效率较低;switch只判断一次,效率较高 2、if表示的是一个范围,switch表示一个点 2、for和foreach foreach:每变量一次就会…...
2023/5/28 20:55:09 - uniy中所有的特殊文件夹
http://www.xuanyusong.com/archives/3229...
2023/5/28 20:55:08 - Unity之AssetBundle打包
AssetBundle Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resources文件夹在真机上最大只有2G的内存(专业版会增大内存) AssetBu…...
2023/5/28 20:55:07 - Params关键字
https://www.cnblogs.com/gjhjoy/p/3573330.html...
2023/5/28 20:55:04 - 关于博客的更新问题
...
2023/5/28 20:55:03 - 设计模式原则
设计模式: 定义:设计可以反复使用的,可以解决特定问题的设计方法 作用:解决同一类型的问题,设计模式可以让代码结构更加清晰 面向对象设计中常见的设计原则: 原则的作用:让自己设计实现出来的软…...
2023/5/28 20:55:02 - VS2015秘钥
Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2015简体中文版(企业版)KEY:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV...
2023/5/28 20:55:00 - UGUI中Text的换行
通过代码中的\n可以直接执行换行效果,但是我们在平常的工作中一般都是读表,既在Inspector面板中的Text组件中输入同样的内容就达不到换行效果; 其实unity把\n转变成了\\n,我们只需要变回来就可以了,代码如下 string Ge…...
2023/5/28 20:54:59 - Unity中的点击,长按,划动
public void GetClickType() {if(Input.GetMouseButtonDown(0)){if(isGetBeginPos){beginPosition Input.mousePosition;isGetBeginPos false;}if(isCheckCollider){//检测碰撞体isCheckCollider false; } }if(Input.GetMouseButton(0)){timer Time.deltaTime;curPosit…...
2023/5/28 20:54:56 - 碰撞体速度过快穿透的问题
问题:假设现在A物体以非常高的速度移动,而unity每一帧的检测时间大概是0.02秒,也就是说如果物体A速度过快, 在不用0.02秒的时间就已经穿过了其他物体,那么这个时候是无法检测A与其他物体之间的碰撞信息的 主要原因是&a…...
2023/5/28 20:54:53 - UGUI脚本添加Btn回调的方法
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;//对添加这个脚本的对象添加EventTrigger组件 [RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))] public class Bt…...
2023/5/28 20:54:52 - unity中给图片换颜色
slot边框.color new Color32 (93,165,255,255);...
2023/5/28 20:54:50
最新文章
- 布局组件
1.Grid Layout Group(网格布局) 1.网格布局:可以使所有的子物体进行网格样式的布局 Padding:内间距:子物体距离父物体边缘的距离;在设置内间距的距离的时候,需要根据Start Corner来进行设定 Sta…...
2023/5/28 20:55:40 - Application类
using System.Collections; using System.Collections.Generic; using UnityEngine;using System.IO; using UnityEngine.SceneManagement;public class Scripts : MonoBehaviour {// Use this for initializationvoid Start () {// Application 应用程序// 设置应用程序能否后…...
2023/5/28 20:55:39 - 抽象方法与抽象类
关键字:abstract 抽象方法: 使用abstract关键字修饰的方法就是抽象方法, 抽象方法只有方法声明,没有方法实现, 实现抽象方法需要重写 抽象方法只能写在抽象类中 抽象类: 使用abstract修饰的类就是抽象类 抽…...
2023/5/28 20:55:38 - 命名空间
命名空间:类似于文件夹;作用是为了归类和接口的 命名空间中只能写类、结构体、接口、枚举和委托 命名空间是可以重名的,相同名字的命名空间是同一个命名空间 关键字:namespace namespace A {class Person { }namespace AA{class A…...
2023/5/28 20:55:32 - ref和out
ref关键字: 是用来修饰形参的,可以将值类型当做引用类型来使用 ref修饰的形参,在方法内部修改的时候,会影响实参的值 ref修饰的形参,在传参的时候,实参的值可以带入方法中 ref修饰的形参,在方法…...
2023/5/28 20:55:31 - 委托与Lambda表达式
// 声明一个委托 // 委托就是一个类型 // Add: 委托类型的变量 // 类型: double(int, int) // 是一个方法类型,返回值类型是double,参数类型是(int, int) delegate double Add(int a, int b);class Program {public static void Main(string[] arg…...
2023/5/28 20:55:29 - Unity中的四个路径
Application.database:当前工程的Assets文件夹(编辑器) Application.StreamingAssets:IO流路径 当前工程的StreamingAssets文件夹(编辑器) 程序源下的一个文件夹(其他平台) Applicat…...
2023/5/28 20:55:28 - U3D中的一些方法和属性
string.Format();//拼接字符串的方法,里面可用占位符,方法内部为string Destroy(Object obj);//立刻销毁(游戏对象,组件或者asset) Destroy(Object obj, float timer);//过timer的时间后销毁 Cursor.visibleture;鼠标是…...
2023/5/28 20:55:25 - U3D组件------CharacterController(角色控制器)
角色控制器中有碰撞体和刚体的属性 Slope Limit:角色能爬的斜坡的坡度限制 Step Offset:角色走台阶的高度 Skin Width:当场景里面出现多个角色控制器的时候,两个对象在接触的时候会有碰撞效果,防止抖动,可以调节皮肤宽度 Min Move Distance:最…...
2023/5/28 20:55:24 - U3D框架—单例框架
写程序应遵循的原则:高内聚(内容的聚合),低耦合(功能与功能之间的联系) 代码里尽量不要有冗余:既重复,没有用的代码 using System.Collections; using System.Collections.Generic; …...
2023/5/28 20:55:21 - 数据持久化PlayerPrefs
1、Unity3D中的数据持久化是以键值对的形式存储的,可以看作是一个字典 2、Unity3D中的值是通过键名来读取的,当值不存在时,返回默认值 3、在Unity中只支持int、float、string这三种数据类型的读取,因此可以使用这三种数据类型来存…...
2023/5/28 20:55:18 - SVN常用命令
http://www.cnblogs.com/liwanggui/archive/2016/06/28/5624147.html...
2023/5/28 20:55:17 - 关于U3D图片的压缩格式
http://blog.sina.com.cn/s/blog_930ffa0b0102vass.html...
2023/5/28 20:55:16 - unity延时方法
http://www.cnblogs.com/louissong/p/3832960.html 借鉴上面的博客中的内容: Invoke(methodName: string, time: float): void; methodName:方法名 time:多少秒后执行 InvokeRepeating InvokeRepeating(methodName: string , time: float , repeatRate: float ):…...
2023/5/28 20:55:15 - unity中Android环境变量配置
http://www.cnblogs.com/windytrees/p/7533477.html...
2023/5/28 20:55:14 - Opengl库函数列表
http://www.cnblogs.com/GameDeveloper/archive/2012/01/07/2315867.html...
2023/5/28 20:55:13 - Unity3D中的Quality
Quality Level:质量等级,默认为打包最低的那个等级 Name:质量级别的名称 Pixel Light Count:像素灯数量(前向渲染使用的像素灯的最大数量) Texture Quality:纹理质量(可以设置最大分…...
2023/5/28 20:55:12 - 浅谈优化
UI的拼接要讲究章法,根据一定的效率流程去走,会提高效率,还需要遵守原则,提高性能 流程如下: 1、原画师提供效果图 原画师一般会先给一张效果图,表示这个界面风格会做成什么样的,基本功能都会展…...
2023/5/28 20:55:10 - C#之代码优化
1、if和swith: 区别:1、if语句会执行多次判断,增加CPU的消耗,效率较低;switch只判断一次,效率较高 2、if表示的是一个范围,switch表示一个点 2、for和foreach foreach:每变量一次就会…...
2023/5/28 20:55:09 - uniy中所有的特殊文件夹
http://www.xuanyusong.com/archives/3229...
2023/5/28 20:55:08 - Unity之AssetBundle打包
AssetBundle Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resources文件夹在真机上最大只有2G的内存(专业版会增大内存) AssetBu…...
2023/5/28 20:55:07 - Params关键字
https://www.cnblogs.com/gjhjoy/p/3573330.html...
2023/5/28 20:55:04 - 关于博客的更新问题
...
2023/5/28 20:55:03 - 设计模式原则
设计模式: 定义:设计可以反复使用的,可以解决特定问题的设计方法 作用:解决同一类型的问题,设计模式可以让代码结构更加清晰 面向对象设计中常见的设计原则: 原则的作用:让自己设计实现出来的软…...
2023/5/28 20:55:02 - VS2015秘钥
Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2015简体中文版(企业版)KEY:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV...
2023/5/28 20:55:00 - UGUI中Text的换行
通过代码中的\n可以直接执行换行效果,但是我们在平常的工作中一般都是读表,既在Inspector面板中的Text组件中输入同样的内容就达不到换行效果; 其实unity把\n转变成了\\n,我们只需要变回来就可以了,代码如下 string Ge…...
2023/5/28 20:54:59 - Unity中的点击,长按,划动
public void GetClickType() {if(Input.GetMouseButtonDown(0)){if(isGetBeginPos){beginPosition Input.mousePosition;isGetBeginPos false;}if(isCheckCollider){//检测碰撞体isCheckCollider false; } }if(Input.GetMouseButton(0)){timer Time.deltaTime;curPosit…...
2023/5/28 20:54:56 - 碰撞体速度过快穿透的问题
问题:假设现在A物体以非常高的速度移动,而unity每一帧的检测时间大概是0.02秒,也就是说如果物体A速度过快, 在不用0.02秒的时间就已经穿过了其他物体,那么这个时候是无法检测A与其他物体之间的碰撞信息的 主要原因是&a…...
2023/5/28 20:54:53 - UGUI脚本添加Btn回调的方法
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;//对添加这个脚本的对象添加EventTrigger组件 [RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))] public class Bt…...
2023/5/28 20:54:52 - unity中给图片换颜色
slot边框.color new Color32 (93,165,255,255);...
2023/5/28 20:54:50 - 【ChatGPT】从零开始构建基于ChatGPT的嵌入式(Embedding) 本地(Local) 智能客服问答机器人模型
目录 方案流程 1. Embeddings 介绍 术语:微调 vs 嵌入 一句话理解便是:embedding model 可以将文本转换为固定长度的连续向量。 架构流程图 3、Qdrant云数据库的搭建 3.1、初识Qdrant 3.2、创建云数据库 3.3、通过curl 接口访问 4、写入测试数…...
2023/5/28 17:16:05 - 【ChatGPT】在20分钟内使用 LangChain + Ray构建自托管问答服务
This is part 3 of a blog series. In this blog, we’ll show you how to build an LLM question and answering service. In future parts, we will optimize the code and measure performance: cost, latency and throughput. 这是博客系列的第 3 部分。在本博客中,我们将…...
2023/5/28 15:14:53 - 【ChatGPT】Turbocharge LangChain: guide to 20x faster embedding | LangChain: 嵌入速度提高 20 倍的指南
目录 Why do I need to parallelize this?为什么我需要并行化它? Stages of our Data Pipeline 数据管道的各个阶段 Execution...
2023/5/28 15:06:52 - 最新ChatGPT GPT-4 相似匹配Embedding技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(一)
目录 前言最新ChatGPT GPT-4 相似匹配Embedding技术详解1. 何为Embedding2. 相关API2.1 LMAS Embedding API2.2 ChatGPT Style 3. Embedding应用3.1 QA3.2 聚类3.3 推荐 相关文献 参考资料其它资料下载 前言 如果您想提高ChatGPT中文本处理的效率和精度,那么Embedd…...
2023/5/28 12:45:09 - ChatGPT的access_token获取(最新!!!)
ChatGPT的access_token获取(最新!!!) 序言 最近在搞移动应用开发,心血来潮写了个chatGPT的app,但是接口只能用官网提供的,我自己的号没有免费额度,朋友的号也就5$的额度…...
2023/5/28 12:19:58 - 【ChatGPT】ChatGPT 在智能客服产品如何落地?
目录 简介 智能客服产品的典型特征 人力密集: 数据密集: 流程可定义:...
2023/5/28 12:15:11 - 【ChatGPT】ChatGPT使用指南——句词分类
目录 ChatGPT使用指南——句词分类 1. NLU基础 1.1 句子级别的分类 1.2 Token级别的分类 2. 相关API...
2023/5/28 11:56:24 - 【ChatGPT】技术原理:ChatGPT怎么工作?
目录 简介:ChatGPT的工作原理概述 Transformer 架构原理...
2023/5/28 10:39:46 - 【ChatGPT】ChatGPT基础科普——知其一点所以然
目录 ChatGPT基础科普——知其一点所以然 语言的本质 从图灵测试到ChatGPT 1. LM 2. Transformer 3. GPT...
2023/5/28 10:09:26 - ChatGPT使用指南——相似匹配
目录 ChatGPT使用指南——相似匹配 1. 何为Embedding 2. 相关API 2.1 LMAS Embedding API 2.2 ChatGPT Style 3. Embedding应用...
2023/5/28 8:55:00 - 【ChatGPT】使用 LangChain 和 Ray 实现 100 行代码构建 LLM 开源搜索引擎【1】
目录 Introduction Building the index 构建索引 Accelerating indexing using Ray 使用 Ray 加速索引编制 Serving Conclusion...
2023/5/28 8:53:34 - 【ChatGPT】ChatGPT使用指南——文本生成
目录 ChatGPT使用指南——文本生成 1 引言 2 文本摘要任务 2.1 什么是文本摘要? 2.2 常见的文本摘要技术 2.3 基于OpenAI接口的文本摘要实验 3 文本纠错任务 3.1 什么是文本纠错? 3.2 常见的文本纠错技术 3.3 基于OpenAI接口的文本纠错实验 4…...
2023/5/28 8:24:05 - ChatGPT商业应用——LLM是星辰大海
目录 ChatGPT商业应用——LLM是星辰大海 1. 研究背景 1.1 研究背景 1.2 研究方法...
2023/5/28 7:59:04 - 国内可直接访问ChatGPT体验站,已稳定2个月 (域名被拦截解决方案)
新体验地址:https://zizhu888.cn/chatgpt/index.html ChatGPT体验站3月初上线,上线后,PV最高时3000,UV2000,付费用户有小300个 上线后,前前后后遇到了不少坑爹问题,下面是最近PV访问曲线图&am…...
2023/5/28 7:33:09 - AIGC——使用Cursor对比直接使用chatGPT有哪些技巧
Cursor对比直接使用chatGPT有哪些优势 1. 聊聊it团队经常面临的问题2. 试想一些AI辅助的应用场景3. 看回现实可用的工具及其使用3.1 加载文件作为对话上下文3.2 源码工程辅助阅读3.3 批量文件式输入口3.4 规范核查工具 4 通用思路4.1 提供解决方案思路4.2 借助chatGPT构建全流程…...
2023/5/28 4:27:19 - ChatGPT中文版Prompt提示工程超详细指南《提示工程高级技巧与技术》Github最新破万星项目Meta AI前工程师解密百万年薪提示工程师GPT-4模型优化利器(二)不定期更新
提示工程高级技巧与技术 前言Introduction 导言零样本提示少样本提示少样本提示的限制 Chain-of-Thought Prompting 链式思考(CoT)提示零样本COT提示 Zero-shot COT 自我一致性生成知识提示自动提示工程师(APE)Active-Prompt方向性…...
2023/5/28 0:42:10 - 【ChatGPT】ChatGPT使用指南——文本推理
目录 ChatGPT使用指南——文本推理 1. 什么是推理(Reasoning)? 2. 导入ChatGPT 3. 测试ChatGPT的推理能力...
2023/5/27 23:40:23 - ChatGPT免费使用的方法有哪些?
目录 一、ChatGpt是什么? 二、ChatGPT国内免费使用的方法: 第一点:电脑端 第二点:手机端 三、结语: 一、ChatGpt是什么? ChatGPt是美国OpenAI [1] 研发的聊天机器人程序 。更是人工智能技术驱动的自然语…...
2023/5/27 23:37:06 - 用ChatGPT辅助处理Excel
在日常工作中,我们经常需要处理大量的Excel表格,而在处理Excel表格时,常常会遇到重复、冗余、不清晰的数据等问题,导致我们耗费大量的时间和精力。 在这种情况下,现代技术的应用提供了更加高效的解决方案,…...
2023/5/27 18:32:31 - Pycharm安装ChatGPT插件
文章目录 前言一、安装ChatGPT插件二、使用步骤1.打开NexChatGPT2.发送请求 总结 前言 通过安装ChatGPT插件,您可以在PyCharm中更轻松、高效地使用ChatGPT模型进行开发,从而提高您的工作效率和准确性。 一、安装ChatGPT插件 打开PyCharm,单…...
2023/5/27 17:28:47 - 它来了!ios版ChatGPT
ChatGPT 的 iOS 版终于来了,不过目前只支持 iOS 美丽国区,你需要使用美丽国区账号才能下载使用。 目录 前提使用总结 前提 一部苹果手机一个美丽国苹果账号一个可以正常访问ChatGPT网页版的网络环境一个ChatGPT账号 使用 登录准备好的美丽国苹果账号。…...
2023/5/27 10:28:02 - 好用的IntelliJ IDEA ChatGPT插件:NexChatGPT
随着ChatGPT的爆火,ChatGPT给我们的生产生活带来一定的影响,ChatGPT相关的工具插件潮水般的涌现。ChatGPT对IT的影响也不小,尤其是自动化编程,今天介绍几款IntelliJ IDEA中ChatGPT插件。 一、NexChatGPT NexChatGPT是一款开箱即…...
2023/5/27 0:48:49 - 2023小狐狸ChatGPT源码1.9小程序 带绘画 带分销流量主系统智能客服AI源码+教程
2023全开源ChatGPT微信小程序,狐狸版本1.9,5.12已更新,增加绘画功能,带流量主带付费购买次数,可邀请好友获得问答次数 看广告获得问答次数 付费购买获得问答次数 狐狸版号1.9(最 新版)…...
2023/5/26 17:51:14 - 【国内chatgpt使用方法合集】(5月26日已更新)
写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正࿰…...
2023/5/26 17:44:47 - 【ChatGPT】GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI
GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI 文章目录 GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI第一:扩展多模式理解。第二:交互式多媒体。第三:为具备一般能力的机器人提供动力。第四:自主人工智能模型开发。第五:…...
2023/5/26 11:55:09 - 玩转ChatGPT:论文辅助写作(附Claude测评)
一、写在前面 嘿!嘿!嘿!大家好,今天我们来聊一下使用GPT们进行论文辅助写作。不过,我要先交代一下,GPT的使用门槛比较高,不少童鞋都用不上。所以,我极力推荐一个平替产品——Claude…...
2023/5/26 11:26:08 - [持续更新]使用chatgpt的几种方法~
1. monica 使用edge浏览器或者chrome浏览器,直接在官网下载即可,网址直通: bing: https://www.microsoft.com/zh-cn/edge/download?formMA13FJ google: Google Chrome 网络浏览器 备注:你需要先搭上梯子哈 安装打…...
2023/5/26 10:39:41 - 苹果手机爽了!一招搞定ChatGPT Plus,超级稳!
大家好,我是五竹。 昨天用苹果手机尝试了一下,借助App Store(苹果应用商店)升级 Plus,成功了!一共升级了三个号!有两个一气呵成,轻松搞定。最后一个可能触发风控了,但第…...
2023/5/26 9:58:09 - ChatGPT账号注册,为什么总是提示Access Denied you do not have acces
问题:提示Access denied 无法登录登录的时候,提示Access denied,You do not have access to chat.openai.com.原因登录出现这个界面,说明你的IP被OpenAI拉黑了,OpenAI对比较频繁访问的云主机商屏蔽了相关的IP出口段,所…...
2023/5/26 9:00:56 - ChatGPT 的 AskYourPDF 插件所需链接如何获取?
一、背景 目前 ChatGPT 主要有两款 PDF 对话插件,一个是 AskYourPDF 一个是 ChatWithPDF(需 ChatGPT Plus),他们都可以实现给一个公共的PDF 链接,然后进行持续对话,对读论文,阅读 PDF 格式的文…...
2023/5/26 8:27:01