項目存儲過程記錄

来源:http://www.cnblogs.com/againn/archive/2017/08/14/7359215.html
-Advertisement-
Play Games

CREATE DEFINER=`sas_settle`@`%` PROCEDURE `P_CREATE_ACCOUNT_CARRIER_TASK`() BEGIN DECLARE done INT DEFAULT 0; DECLARE v_flow_id VARCHAR(10); -- 流水號 DE... ...


CREATE DEFINER=`sas_settle`@`%` PROCEDURE `P_CREATE_ACCOUNT_CARRIER_TASK`()
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE v_flow_id VARCHAR(10);                        -- 流水號
    DECLARE v_prefix VARCHAR(10) DEFAULT 'JS'; -- 業務首碼
    
    #賬期任務欄位
    DECLARE v_belong VARCHAR(20);            -- 帳號
    DECLARE v_parent_id VARCHAR(20);    -- 父帳號
    DECLARE v_member_name VARCHAR(50); -- 結算商家
    DECLARE v_title_type INT;    -- 結算類型
    DECLARE v_title VARCHAR(2);            -- 結算日
    DECLARE v_year VARCHAR(4);                -- 年度
    DECLARE v_month VARCHAR(2);    -- 月度
    DECLARE v_set_no_type VARCHAR(2);      -- 賬戶類型(0:鐵運 1:非鐵運)
    DECLARE v_vip_type VARCHAR(2);        -- 用戶類型    1:個人;2:企業
    DECLARE v_start_date DATE DEFAULT NOW(); -- 結算起始日期
    DECLARE v_end_date DATE DEFAULT NOW(); -- 結算結束日期
    DECLARE v_last_period_end DATE ; -- 上期結算結束日期
    DECLARE v_flag INT DEFAULT 0; -- 是否生成任務
    DECLARE v_last_title_type INT;-- 上期任務的結算類型
    DECLARE v_count INT DEFAULT 0; -- 同一個用戶未執行任務存在的數目

    DECLARE y_year VARCHAR(4) DEFAULT YEAR(NOW()); -- 年份
    DECLARE i INT DEFAULT 0; -- 遍歷標識
    #聲明游標:所有年份
        #DECLARE y_cursor CURSOR FOR 
            #SELECT y.`YEAR` FROM sas_year y;
    
    #聲明游標:清算日為當天且未生成任務的用戶
    DECLARE v_cursor CURSOR FOR
        SELECT
            ME.BELONG,
            me.MEMBER_NAME,
            me.PARENT_ID,
            mri.TITLE,
            mri.TITLE_TYPE,
            mri.VIP_TYPE,
            mri.ACCOUNT_TYPE,
            YEAR (NOW()) YY,
            (SELECT tt.PERIOD_END FROM sas_task_carrier_pay_order_period tt 
                WHERE tt.BELONG = me.BELONG 
                ORDER BY tt.CREATE_TIME DESC LIMIT 0,1) last_period_end,
            (SELECT tt.SET_TYPE FROM sas_task_carrier_pay_order_period tt 
                WHERE tt.BELONG = me.BELONG 
                ORDER BY tt.CREATE_TIME DESC LIMIT 0,1) last_title_type
        FROM sas_member ME
        LEFT JOIN sas_member_rule_info mri ON (
            me.PARENT_ID = mri.USER_ID
            OR me.BELONG = mri.USER_ID
        ) AND mri.ENABLE_STATUS = 1
        WHERE me.ENABLE_STATUS = 1 
         AND NOT EXISTS (
            SELECT 1
            FROM sas_task_account_carrier_period t
            WHERE t.BELONG = me.BELONG
            #結算日為當天(月結周結)
            AND CASE WHEN mri.TITLE_TYPE = '10' THEN t.SET_DATE = WEEKDAY(now()) + 1 and t.SET_TYPE=10 and DATE_SUB(str_to_date(NOW(),'%Y-%m-%d'),INTERVAL 1 day) =t.PERIOD_END
            WHEN mri.TITLE_TYPE = '20' THEN t.SET_DATE = DAYOFMONTH(now()) and t.SET_TYPE=20  and DATE_SUB(str_to_date(NOW(),'%Y-%m-%d'),INTERVAL 1 day) =t.PERIOD_END
            #一單一結
            WHEN mri.TITLE_TYPE = '1' THEN t.TASK_STATUS = 0 and t.SET_TYPE=1
            END
        ) AND EXISTS(
            SELECT 1
            FROM sas_order_reports r
            #清算報表存在沒出賬單、未生成賬單,沒生成過賬單,並且是非鐵路的賬單
            WHERE r.belong=me.belong and r.order_set_status ='10' and r.is_create_account='10' and r.have_create_account='10' and r.IS_RAILWAY!='01'
        )    AND CASE WHEN mri.TITLE_TYPE = '10' OR mri.TITLE_TYPE = '20' THEN
            EXISTS(
            SELECT 1
            FROM sas_order_reports r
            #清算報表存在沒出賬單、未生成賬單,沒生成過賬單,並且是非鐵路的賬單
            WHERE r.belong=me.belong and r.order_set_status ='10' and r.is_create_account='10' and r.have_create_account='10' and r.IS_RAILWAY!='01' and r.create_time<=DATE_SUB(str_to_date(NOW(),'%Y-%m-%d'),INTERVAL 1 day)
            ) END;
        
        #如果是一單一結 只生成有賬單,且已審核的,且未生成過付款單的
        /*AND CASE WHEN mri.TITLE_TYPE='1' THEN EXISTS (SELECT id from sas_set_account_carrier_2016 s
            where s.BELONG =me.BELONG AND s.set_status='20' AND s.IS_PAYMENT!='1') END;*/
            
    
    
    /* 聲明Continue Handler: 當游標到達尾部時,mysql自動設置done=1 */     
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
    OPEN v_cursor;
    curLoop:LOOP
        FETCH v_cursor INTO v_belong, v_member_name, v_parent_id, v_title,v_title_type,
        v_vip_type,v_set_no_type,v_year,v_last_period_end,v_last_title_type;
        
        IF done=1 THEN
            LEAVE curLoop;
        END IF;
        SET v_flag = 0;
        #月結
        IF v_title_type IS NOT NULL AND v_title_type = 20 THEN
            
            #賬期為當天
            IF v_title IS NOT NULL AND DAY(NOW()) = v_title THEN
                SET v_flag = 1;
                SET v_start_date = DATE_SUB(NOW(), INTERVAL 1 MONTH);
                SET v_end_date = DATE_SUB(NOW(), INTERVAL 1 DAY);
            
            #當帳期為31日時,當月只有30天情況,則本次帳期預設為30日
            ELSEIF v_title IS NOT NULL AND DAY(NOW()) = DAY(LAST_DAY(now())) AND v_title > DAY(LAST_DAY(now())) THEN
                SET v_flag = 1;
                SET v_title = DAY(LAST_DAY(now()));
                SET v_start_date = DATE_SUB(NOW(), INTERVAL 1 MONTH);
                SET v_end_date = DATE_SUB(NOW(), INTERVAL 1 DAY);
            END IF;

        #周結
        ELSEIF v_title_type IS NOT NULL AND v_title_type = 10 THEN
            #結算日為當天
            IF v_title IS NOT NULL AND v_title = WEEKDAY(NOW()) + 1 THEN
                SET v_flag = 1;
                SET v_end_date = DATE_SUB(NOW(), INTERVAL 1 DAY);
                SET v_start_date = DATE_SUB(NOW(), INTERVAL 1 WEEK);
            END IF;
        
        #一單一結
        ELSEIF v_title_type IS NOT NULL AND v_title_type= 1 THEN 
            #賬期為清算報表的創建時間(後修改為賬期為現在的時間)
            SELECT min(NOW()) INTO v_end_date FROM sas_order_reports r where r.belong=v_belong and r.is_create_account='10' and r.have_create_account='10';
            SET v_start_date=v_end_date;
            SET v_flag=1;
        END IF;


        #如果上期結算結束日期有值,且不是一單一結,則本期賬單開始日期 = 上期結束日期 + 1天
        IF v_last_period_end IS NOT NULL AND v_last_period_end <> '' AND v_last_title_type !=1 THEN
            SET v_start_date = DATE_ADD(v_last_period_end, INTERVAL 1 DAY);
        ELSEIF  v_last_period_end IS NOT NULL AND v_last_period_end <> '' AND v_last_title_type =1 THEN
            SET v_start_date =v_last_period_end;
        END IF;
        
        #如果開始時間大於結束時間,設置開始時間等於結束時間
        IF v_start_date>v_end_date THEN
            SET v_start_date=v_end_date;
        END IF;
        
        #排除帳期為空的數據
        IF v_flag = 1 THEN
        
            #獲取流水號
            CALL P_GET_SEQNO(v_prefix,'4','0','2',v_flow_id);
            SET v_month = MONTH(v_start_date);
            
            #流水號轉換為純數字
            SET v_flow_id=v_flow_id+0;

            #查詢任務重覆的數量
            SELECT COUNT(1) into v_count FROM sas_task_account_carrier_period
            WHERE BELONG = v_belong and TASK_STATUS='0' and DATE_FORMAT(CREATE_TIME,'%Y-%m-%d')=DATE_FORMAT(SYSDATE(),'%Y-%m-%d');
            
            #不存在重覆才生成
            IF v_count=0 THEN
            #生成任務
            INSERT INTO sas_task_account_carrier_period
            ( `YEAR`,
                `MONTH`,
                PERIOD_START,
                PERIOD_END,
                BELONG,
                PARENT_ID,
                MEMBER_NAME,
                SET_TYPE,
                SET_DATE,
                SET_NO_TYPE,
                TASK_STATUS,
                VIP_TYPE,
                CREATE_BY,
                CREATE_TIME,
                LAST_UPDATE_BY,
                LAST_UPDATE_TIME,
                ENABLE_STATUS,
                FLOW_ID
            ) VALUES (    
                v_year,
                v_month,
                v_start_date,
                v_end_date,
                v_belong,
                v_parent_id,
                v_member_name,
                v_title_type,
                v_title,
                v_set_no_type,
                0,
                v_vip_type,
                'system',SYSDATE(),'system',SYSDATE(),1,v_flow_id
            );
            END IF;
        END IF;
    END LOOP curLoop;

    COMMIT;
END
CREATE DEFINER=`sas_settle`@`%` PROCEDURE `P_CREATE_ACCOUNT_CARRIER`(IN p_task_id INT, -- 任務primary key
    IN p_user_id VARCHAR(20), -- 用戶id
    IN p_belong VARCHAR(20), -- 母賬號
    IN p_title_type VARCHAR(2), -- 結算類型:'10'周結,'20'月結,'1'現結
    IN p_title VARCHAR(2), -- 結算日
    IN p_set_start DATETIME, -- 賬單開始日
    IN p_set_end DATETIME, -- 賬單結束日
    IN p_year VARCHAR(4), -- 賬單年份
    IN p_month VARCHAR(2), -- 賬單月份
    IN p_vip_type VARCHAR(2), -- 用戶類型
    IN p_flow_no VARCHAR(10))
BEGIN
    -- 輔助欄位
    DECLARE v_table_c varchar(50) DEFAULT 'sas_not_railway_account_carrier_month_pay'; -- 非鐵路承運商帳單表
    DECLARE v_table_c_com VARCHAR(50) DEFAULT 'sas_not_railway_account_carrier_month_pay_detail'; -- 非鐵路承運商帳單明細表
    DECLARE v_prefix VARCHAR(10) DEFAULT 'JS';-- 業務首碼
    DECLARE v_tmp_count int default 0; -- 臨時表數據量
    DECLARE v_min_id INT DEFAULT 1;
    DECLARE v_max_id INT DEFAULT 1;
    DECLARE v_report_id  INT UNSIGNED; -- 清算報表id
    DECLARE v_exception VARCHAR(10) DEFAULT ''; -- 異常處理
    
-- 表頭數據

    DECLARE v_sys_code VARCHAR(10) DEFAULT '10';-- 系統來源',
    DECLARE v_member_name VARCHAR(50); -- 清算對象
    DECLARE v_pay_way VARCHAR(2) DEFAULT '1'; -- 賬單類型
    DECLARE v_belong VARCHAR(20); -- 用戶ID
    DECLARE v_set_date datetime DEFAULT NOW(); -- 賬單時間
    DECLARE v_audit_time datetime; -- 審核時間
    DECLARE v_set_no  varchar(30); -- 清算賬單號
    -- DECLARE v_p_order_no VARCHAR(30); -- 母訂單號
    -- DECLARE v_order_no VARCHAR(30); -- 子訂單號
    -- DECLARE v_trans_no VARCHAR(64); -- 運單號
    DECLARE v_pay_money NUMERIC(20,2);-- 賬單金額
    DECLARE v_set_status VARCHAR(2) DEFAULT '10'; -- 賬單狀態
    DECLARE v_pay_status VARCHAR(2) DEFAULT '10'; -- 支付狀態
    DECLARE v_is_print_pay VARCHAR(2) DEFAULT '10'; -- 付款單
    DECLARE v_carrier_org_level_code VARCHAR(20) DEFAULT '0001'; -- 承運商組織層級編碼

-- 明細數據
  -- DECLARE v_set_no VARCHAR(30); -- 清算賬單號,
  DECLARE v_order_no VARCHAR(30); -- 子訂單號,
  DECLARE v_trans_no VARCHAR(30); -- 運單號,
  DECLARE v_p_order_no VARCHAR(30); -- 母訂單號,
  DECLARE v_year VARCHAR(4) DEFAULT year(NOW()); -- 會計年度,
  DECLARE v_month VARCHAR(2) DEFAULT month(NOW()); -- 會計月度,
  DECLARE v_order_time datetime; -- 訂單生成時間,
  DECLARE v_order_money NUMERIC(20,2); -- 訂單金額,
  DECLARE v_claiming_value NUMERIC(20,2); -- 聲明價值(元),
  DECLARE v_insurance_fee NUMERIC(20,2); -- 保價費,
  DECLARE v_premium NUMERIC(20,2); -- 保價差額,
  DECLARE v_basic_price NUMERIC(20,2); -- 基本運費,
  DECLARE v_rise_price NUMERIC(20,2); -- 上浮運費,
  DECLARE v_platform_buckle_point NUMERIC(20,3); -- 平臺扣點,
  DECLARE v_platform_buckle_point_fee NUMERIC(20,2); -- 平臺扣點費,
  DECLARE v_rebates_rate NUMERIC(20,3); -- 返點費率,
  DECLARE v_rebates_rate_fee NUMERIC(20,2); -- 返 點 費(母賬號),
  DECLARE v_arbitrage_code VARCHAR(30); -- 仲裁單號,
  DECLARE v_carrier_rec_pay NUMERIC(20,2); -- 承運商收賠費,
  DECLARE v_supply_pay NUMERIC(20,2); -- 發貨方應付,
  DECLARE v_carrier_verification_freight NUMERIC(20,2); -- 已核銷運費(承運商),
  DECLARE v_carrier_denghexiao_money NUMERIC(20,2); -- 等核銷金額(承運商),
  DECLARE v_carrier_com_rec NUMERIC(20,2); -- 公司應收(承運商),
  DECLARE v_reverse_money NUMERIC(20,2) DEFAULT 0; -- 沖銷金額,
  DECLARE v_platform_discount_rate NUMERIC(20,2); -- 平臺扣點折扣率,
  DECLARE v_platform_discount_fee NUMERIC(20,2); -- 平臺扣點折扣費,
  DECLARE v_actual_platform_discount_fee NUMERIC(20,2); -- 實際平臺扣點費,
  DECLARE v_create_by VARCHAR(20) DEFAULT 'system'; -- 創建人
  DECLARE v_create_time DATETIME DEFAULT NOW(); -- 創建時間
  DECLARE v_enable_status INT DEFAULT 1; -- 數據有效性:預設有效
    
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET v_exception = 'error';
  -- 啟動事務
  -- START TRANSACTION; 
  
  -- 創建臨時表,用於臨時存儲承運商賬單明細表數據
  DROP TEMPORARY TABLE IF EXISTS account_detail_tmp;
  CREATE TEMPORARY TABLE account_detail_tmp(
      id INT UNSIGNED NOT NULL AUTO_INCREMENT, -- 自增ID
      belong VARCHAR(20), -- 用戶ID
      member_name VARCHAR(50), -- 清算對象
      -- set_no VARCHAR(30), -- 清算單號,
      order_no VARCHAR(30), -- 子訂單號,
      p_order_no VARCHAR(30), -- 母訂單號,
      trans_no VARCHAR(30), -- 運單號,
      -- year VARCHAR(4), -- 會計年度,
      -- month VARCHAR(2), -- 會計月度,
      order_time datetime, -- 訂單生成時間,
      order_money NUMERIC(20,2), -- 訂單金額,
      claiming_value NUMERIC(20,2), -- 聲明價值(元),
      insurance_fee NUMERIC(20,2), -- 保價費,
      premium NUMERIC(20,2), -- 保價差額,
      basic_price NUMERIC(20,2), -- 基本運費,
      rise_price NUMERIC(20,2), -- 上浮運費,
      platform_buckle_point NUMERIC(20,3), -- 平臺扣點,
      platform_buckle_point_fee NUMERIC(20,2), -- 平臺扣點費,
      rebates_rate NUMERIC(20,3), -- 返點費率,
      rebates_rate_fee NUMERIC(20,2), -- 返 點 費(母賬號),
      arbitrage_code VARCHAR(30), -- 仲裁單號,
      carrier_rec_pay NUMERIC(20,2), -- 承運商收賠費,
      supply_pay NUMERIC(20,2), -- 發貨方應付,
      carrier_verification_freight NUMERIC(20,2), -- 已核銷運費(承運商),
      carrier_denghexiao_money NUMERIC(20,2), -- 等核銷金額(承運商),
      carrier_com_rec NUMERIC(20,2), -- 公司應收(承運商),
      platform_discount_rate NUMERIC(20,2), -- 平臺扣點折扣率,
      platform_discount_fee NUMERIC(20,2), -- 平臺扣點折扣費,
      actual_platform_discount_fee NUMERIC(20,2), -- 實際平臺扣點費,
      report_id  INT , -- 清算報表id
      reverse_money NUMERIC(20,2), -- 沖銷金額,
      -- create_by VARCHAR(20) DEFAULT 'system', -- 創建人
      -- create_time DATETIME DEFAULT NOW(), -- 創建時間
      -- enable_status INT DEFAULT 1, -- 數據有效性:預設有效
      primary key(id)
  );
      
    IF p_belong IS NOT NULL AND p_belong <> '' THEN
        SET v_belong = p_belong;
    ELSEIF p_user_id IS NOT NULL AND p_user_id <> '' THEN
        SET v_belong = p_user_id;
    END IF;
  
    
    #將清算周期內清算報表的數據插入到臨時表
    #為了防止漏單,數據取清算周期最晚時間之前所有沒生成過賬單的清算報表數據,不需區分清算周期(月結、周結、一單一結)
    SET @insert_tmp_table = CONCAT('insert into account_detail_tmp(belong,member_name,order_no,p_order_no,trans_no,',
            ' order_time,order_money,claiming_value,insurance_fee,premium,basic_price,rise_price,platform_buckle_point,',
            ' platform_buckle_point_fee,rebates_rate,rebates_rate_fee,arbitrage_code,carrier_rec_pay,supply_pay,',
            ' carrier_verification_freight,carrier_denghexiao_money,carrier_com_rec,platform_discount_rate,',
            ' platform_discount_fee,actual_platform_discount_fee,report_id,reverse_money) ',
            ' select r.BELONG,',
            ' (select CARRIER_NAME FROM sas_order_reports WHERE BELONG=',v_belong, ' order by id desc limit 1 ),',
            ' r.ORDER_NO,r.P_ORDER_NO,r.WAYBILL_NO,',
            ' r.ORDER_TIME,r.ORDER_MONEY,r.CLAIMING_VALUE,r.INSURANCE_FEE,r.PREMIUM,r.BASIC_PRICE,r.RISE_PRICE,r.PLATFORM_BUCKLE_POINT,',
            ' r.PLATFORM_BUCKLE_POINT_FEE,r.REBATES_RATE,r.REBATES_RATE_FEE,r.ARBITRAGE_CODE,r.CARRIER_REC_PAY,r.SUPPLY_PAY,',
            ' r.CARRIER_VERIFICATION_FREIGHT,r.CARRIER_DENGHEXIAO_MONEY,r.CARRIER_COM_REC,r.PLATFORM_DISCOUNT_RATE,',
            ' r.PLATFORM_DISCOUNT_FEE,r.ACTUAL_PLATFORM_DISCOUNT_FEE,r.ID,r.REVERSE_MONEY from sas_order_reports r where r.belong = ',v_belong,
            ' and r.ORDER_SET_STATUS !=20 and r.IS_CREATE_ACCOUNT !=20 and r.HAVE_CREATE_ACCOUNT!=20 and r.IS_RAILWAY!=\'01\' and ',
            ' str_to_date(r.create_time,\'%Y-%m-%d\') <= str_to_date(\'',p_set_end,'\',\'%Y-%m-%d\') order by r.id');
    PREPARE insert_tmp_table_stmt FROM @insert_tmp_table;
    EXECUTE insert_tmp_table_stmt;
    
    DEALLOCATE PREPARE insert_tmp_table_stmt;
    
    #查詢臨時表數據數量
    SELECT COUNT(1) INTO v_tmp_count FROM account_detail_tmp;
            SELECT v_tmp_count;
    
    #如果臨時表有數據,正常賬單
    IF v_tmp_count>0 THEN
        
        #如果是一單一結那一條賬單對應一條訂單
       

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原生的,也不知道會不會用到,以前的筆記。 文件夾管理 1、拿到文件管理者單例 2、使用管理者創建文件夾 3、創建文件 4、讀取文件信息 5、讀取文件返回的字典信息 6、文件讀取 6-1)、方法1: 6-2)、方法2: 7、文件移動(剪切、重命名) 8、文件複製 9、文件刪除 文件操作 ...
  • iOS雖然也有SQL,不過用得少(至少我目前是這樣)。大數據直接丟給後臺,小的用Plist足矣。 再退一步,有FMDB,原生的也用得少了。 下麵是之前學SQL時候的筆記。 1、創建 1-1)、打開: 資料庫指針、保存地址 1-2)、創建: 資料庫指針、創建指令、錯誤指令 1-3)、關閉: 資料庫指針 ...
  • 另一個大嬸寫的關於抽屜的博文: http://blog.csdn.net/lu1024188315/article/details/73608616 今天參考大灰狼得博客,好好得總結一下navigation得用法。以前總是看官方文檔,但理解得不太透測。 一、開源庫介紹 今年1月份,新開源的React ...
  • 今天在android studio上打包項目時,遇到了Error:Execution failed for task ':app:transformClassesWithDexForRelease這麼個錯誤,記得之前也遇到過這種問題,卻如何想不起怎麼解決的,只好再次在網上查資料,總算是解決了 這個問 ...
  • 對於剛開始學習Android的小白來說,listview,gridview這些控制項是必須熟悉的,但是熟悉熟練的使用這些控制項並不能代表你就可以完成開發,比如列表的展示,使用listview, gridview,RecyclerView都是可以的,那麼他們的區別在哪裡呢?最近自己負責的業務就需要用到列表 ...
  • (1)下載二維碼的庫源碼 鏈接:http://pan.baidu.com/s/1pKQyw2n 密碼:r5bv 下載完成後打開可以看到 libzxing 的文件夾,最後添加進 Android Studio,操作 :File 》New 》Import Moudle (2)按鈕單擊事件為 scanner ...
  • Mysql事務概念:MySQL 事務主要用於處理操作量大,複雜度高的數據。事務特性:Atomicity(原子性)、Consistency(穩定性,一致性)、隔離性(Isolation)和Durability(持續性,可靠性)四個特性講解分析。讀取數據概念從三個方面詳細講解分析。從Mysql事務隔離級... ...
  • 離散查詢select * from car where price=30 or price=40 or price=50 or price=60;select * from car where price in(30,40,50,60)取出數據select * from car where pric ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...