開發背景:
公司CRM采購了銷幫幫的CRM系統,由於CRM系統不完善,導出功能不能滿足公司對數據進行分析的需求。每次整理數據,分析人員部門等各種情況,再有如果人員重名,銷幫幫不能區分出具體是誰,必須去根據人員或其他數據進行區分。
解決方案:
由於銷幫幫數據的人員是有UserID的,而該UserID對應釘釘的UserID,所以可以根據釘釘提供的API接口輕松的判斷出人員部門、分公司等信息,不用關心人員重名的情況。
開發環境:
軟件使用C#+SQLSERVER進行開發。
使用教程:
開始前先給大家看看軟件的整體界面。
軟件主要包括清空今日數據,采集、數據分析、同步用戶信息、獲取數據 5部分功能。
創建並配置SQLServer數據庫
在安裝好的SQLServer服務器上,創建數據庫,數據庫名稱根據需要定義,此處我定義的數據庫名稱是xbb,如下圖的配置[1],正確配置數據庫連接
獲取銷幫幫的組織編碼和Token
根據銷幫幫提供的網址[https://dingtalk.xbongbong.com/apiSetting/detail.html]獲取對應的組織編碼和token.,如下圖配置[2]配置銷幫幫石葯使用的組織編碼和Token.
創建企業內部應用
在釘釘的【開發者后台】創建企業內部應用。開放查詢部門、人員信息的權限即可。並配置對應的appkey/appsecret到下圖【3】處。
清空今日數據
開始采集前,如果今天的數據已經采集過,請點擊【清空今日數據】,會自動清空今天已經采集的數據,重新開始采集。
采集
點擊【開始】進行數據采集,采集的內容主要包括功能上勾選的數據。等待最下面的狀態欄采集后待處理數據變為0條,則代表采集完成。
數據分析
采集后會把數據統計分配到一張表里,點擊數據分析會自動根據采集到的數據創建表,並把數據插入到對應的表里面。
同步用戶數據
同步用戶數據是為了增量備份釘釘的所有的用戶信息。
獲取數據
點擊【獲取數據】按鈕,自動導出銷幫幫銷售機會、合同、跟進記錄等信息。
備注:如果哪天銷幫幫數據發生變化,可以在軟件的ExecSQL文件夾下修改對應的導出SQL語句,不用修改代碼。
軟件技能更新
dynamic關鍵字
第一次在開發中使用了dynamic關鍵字,通過對Json進行反序列化很好用。減少了很多Model的創建工作,也減少了以前通過正則表達式匹配的方式的工作量。
RichTextBox顏色問題
通過下面的語句修改當前顯示的文字做的顏色。
rtbContent.SelectionColor = Color.Red;
rtbContent.SelectedText = msg+"\r\n";
為了每天備份數據,所有的表都帶有年月日格式
為了備份每天的數據,所有的表都帶上了年月日yyyyMMdd格式結尾。所有的查詢都是通過{Date}關鍵字,用今天的日期替換{Date}關鍵字后形成SQL查詢語句
分頁數據抓取規則
每次抓取分頁數據時,由於是異步的,不能馬上確定是否有下一頁的時候,尤其是抓取第一頁的時候,由於數據分類不同,以前都是根據不同的數據分頁設置一下隊列,然后依次從隊列中進行數據彈出、采集等。現在采用字典Dic<string,ConcurrencyQueye<int>> 可以通過統一的方法,設置不同的關鍵字插入分頁或者彈出分頁。
加密方法
以前的加密方法大多是md5/AES等加密方式,最近大多都在改成sha256,可能與統一的前端架構有關系把。
C#的sha256加密方式:
public static string sha256(string data) { byte[] bytes = Encoding.UTF8.GetBytes(data); byte[] hash = SHA256Managed.Create().ComputeHash(bytes); StringBuilder builder = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { builder.Append(hash[i].ToString("X2")); } return builder.ToString(); }
數據庫處理(Dapper)
以前處理數據庫都是自己手動寫個簡單的DbHelper,由於用不到各種復雜的處理。所以還算夠用。
后來發現通過Dapper可以輕松實現數據的批量處理,而且總體來說效率還可以,畢竟寫的代碼少了,還是很高興的。
輕量級的ORM工具,我選Dapper.。但是ADO.NET原理不能忘。
NPOI導出Excel
NPOI依然是最好的處理Excel的工具
軟件開發思路
不再使用Model,正則表達式,把所有Json格式的數據通過,數據主鍵ID、列名、列值、數據類型 插入到一張表,通過統一的SQL創建插入規則把數據在統一插入到對應的表中,不需要提前知道表的列名。
自動創建、增加列。自動插入數據。