2207 lines
88 KiB
C#
2207 lines
88 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
using System.Runtime.InteropServices;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Timers;
|
||
using System.IO;
|
||
using System.IO.Ports;
|
||
using MySql.Data.MySqlClient;
|
||
using SATO.MLComponent;
|
||
|
||
namespace qk30ic
|
||
{
|
||
public partial class Form1 : Form
|
||
{
|
||
// ====== 开关 ======
|
||
// 硬件模拟:true=不连串口/IC卡/打印机;启动“演示二维码喂料器”自动喂入 QRID1234
|
||
private const bool MOCK_HW = true;
|
||
|
||
// 数据库模拟:false=真实 MySQL;true=DB 也走假数据(不访问数据库)
|
||
private const bool DEMO_DB = false;
|
||
|
||
// ★ DB连接状态判断
|
||
private bool IsDbReady => (DBconnect != null && DBconnect.State == ConnectionState.Open);
|
||
|
||
private System.Windows.Forms.Timer demoQrTimer;
|
||
|
||
// ログファイル名(フルパス)格納用
|
||
static public string LogfileName = "";
|
||
static public string LogfilePath = "";
|
||
public const int OutLogNum = 15; // ログ表示行数
|
||
public const int OutConfNum = 9; // コンフィグファイルの項目数
|
||
|
||
// ログファイルの内容
|
||
static public string[,] koumoku = new string[OutLogNum, 8];
|
||
|
||
// コンフィグファイルの内容読み取り
|
||
static public string[] str_Confile = new string[OutConfNum];
|
||
|
||
// レイアウトファイル
|
||
static public string str_layoutFile = Path.Combine(Application.StartupPath, "SOM_layout.mllayx");
|
||
|
||
// コンフィグファイル
|
||
static public string CONFIG_PATH = Path.Combine(Application.StartupPath, "SLN_config.dat");
|
||
|
||
dynamic ifd = null; // IFDオブジェクト
|
||
dynamic mif = null; // MIfareオブジェクト
|
||
dynamic icc = null; // Cardオブジェクト
|
||
public static string QRdata = ""; // QRコード受信用
|
||
public static string QRdata2 = ""; // QRコード受信用
|
||
public static byte[] vinfBuff = new byte[257]; // Mifareコード受信用
|
||
public static byte[] vinfBuff2 = new byte[257]; // Mifareコード受信用
|
||
public static uint QRresult = 0; // QRコード受信用
|
||
public static string MFCODE = ""; // Mifareコード
|
||
public static string MFCODE_CHK = "4400"; // Mifare識別用
|
||
public static int Retry_num = 0; // DBエラー時のリトライ数
|
||
|
||
// 終了処理
|
||
public int EndType = 0;
|
||
|
||
// エラーコード
|
||
public const int ERROR_CODE_CONFRD = 80;
|
||
public const int ERROR_CODE_LOGFRD = 85;
|
||
public const int ERROR_CODE_LOGFWR = 87;
|
||
public const int ERROR_CODE_DBOPEN = 100;
|
||
public const int ERROR_CODE_PAPRNG = 104;
|
||
public const int ERROR_CODE_LAYOUT = 110;
|
||
public const int ERROR_CODE_PRNINI = 120;
|
||
public const int ERROR_CODE_MFIINI = 130;
|
||
public const int ERROR_CODE_QRCINI = 140;
|
||
public const int ERROR_CODE_DBERR = 150;
|
||
public const int ERROR_CODE_PRNERR = 160;
|
||
public const int ERROR_CODE_NONMFC = 1;
|
||
public const int ERROR_CODE_NONQRC = 3;
|
||
public const int ERROR_CODE_NONUID = 5;
|
||
public const int ERROR_CODE_QRCERR = 170;
|
||
public const int ERROR_CODE_MFIERR = 175;
|
||
|
||
// ログ編集用
|
||
public const int LETYPE_NORMAL = 0;
|
||
public const int LETYPE_START = 2;
|
||
public const int LETYPE_DBOPEN = 10;
|
||
public const int LETYPE_LAYOUT = 11;
|
||
public const int LETYPE_PRNINI = 12;
|
||
public const int LETYPE_MFIINI = 13;
|
||
public const int LETYPE_QRCINI = 14;
|
||
public const int LETYPE_DBERR = 15;
|
||
public const int LETYPE_NONMFC = 20;
|
||
public const int LETYPE_NONUID = 21;
|
||
public const int LETYPE_NONQRC = 30;
|
||
public const int LETYPE_PRNERR = 40;
|
||
public const int LETYPE_QRCERR = 50;
|
||
public const int LETYPE_MFIERR = 55;
|
||
public const int LETYPE_CONFRD = 80;
|
||
public const int LETYPE_LOGFRD = 85;
|
||
public const int LETYPE_LOGFWR = 87;
|
||
|
||
// MySQL 连接串(按需修改账号密码/库名)
|
||
public static string connectionParams = string.Format(
|
||
"server={0}; user={1}; password={2}; database={3}; charset={4}; SslMode={5}; AllowPublicKeyRetrieval={6}",
|
||
"localhost",
|
||
"root",
|
||
"", // ← 如果有密码填这里
|
||
"so-manager", // ← 你的库名(保留原值)
|
||
"utf8",
|
||
"None",
|
||
"true"
|
||
);
|
||
|
||
// DB読み込みクエリ
|
||
public string DBREAD_park_name = "select park_name from park where park_id=";
|
||
public string DBREAD_city_name = "select city_name from park, city where park.city_id=city.city_id and park.park_id=";
|
||
public string DBREAD_ptype_subj = "select ptype_subject from price , ptype where price.price_ptypeid=ptype.ptype_id and price.park_id=";
|
||
public string[] DBREAD_utype_sub1 = {
|
||
"select usertype_subject1 from user,usertype,regular_contract where regular_contract.user_categoryid=usertype.user_categoryid and user.user_tag_serial =",
|
||
"select usertype_subject1 from user,usertype,regular_contract where regular_contract.user_categoryid=usertype.user_categoryid and regular_contract.contract_qr_id=" };
|
||
|
||
public string[] DBREAD_cont_periods = {
|
||
"select contract_periods, contract_periode, contract_id from user,regular_contract where user.user_id=regular_contract.user_id and user_tag_serial =",
|
||
"select contract_periods, contract_periode, contract_id from regular_contract where contract_qr_id=" };
|
||
|
||
public string[] DBREAD_cont_sissue = {
|
||
"select contract_seal_issue from user, regular_contract where user.user_id=regular_contract.user_id and user_tag_serial =",
|
||
"select contract_seal_issue from regular_contract where contract_qr_id="};
|
||
|
||
// ログに書き込む項目
|
||
public string[] str_logkm = new string[8];
|
||
|
||
// キープアライブ用
|
||
public static string KpAlive_devid = "";
|
||
|
||
// 印字データ
|
||
public string[] str_Prndat = new string[8];
|
||
public static int Prn_MaxNum; // 印字可能数
|
||
public static int Prn_NowNum; // 現在の印字数
|
||
public static int Prn_Alert_num; // 印字残警告数
|
||
public static int Prn_Alert_flg; // プリンタ印字残警告フラグ
|
||
public static string Prn_ParkName; // 駐車場名
|
||
|
||
public static MySqlConnection DBconnect = null; // 延迟初始化
|
||
|
||
public static string[] PortList = new string[20];
|
||
|
||
// 受信データ判別
|
||
public static DateTime date1 = new DateTime(2018, 1, 1, 12, 0, 0);
|
||
public static DateTime date2 = new DateTime(2018, 1, 1, 1, 0, 0);
|
||
|
||
// MLComponent - 延迟初始化以避免启动时错误
|
||
public static MLComponent SO_MLC = null;
|
||
|
||
public Form1()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
private void Form1_Shown(object sender, EventArgs e)
|
||
{
|
||
// 本地小工具:只写本地日志(无 DB 时调用)
|
||
void LogOnly(int type, int n)
|
||
{
|
||
EndType = n;
|
||
SO_LogEdit(type);
|
||
SO_WriteLog();
|
||
}
|
||
|
||
// 本地小工具:启动“演示二维码喂料器”
|
||
void StartDemoQrFeeder()
|
||
{
|
||
if (!MOCK_HW) return;
|
||
demoQrTimer = new System.Windows.Forms.Timer();
|
||
demoQrTimer.Interval = 3000; // 每3秒来一个二维码
|
||
demoQrTimer.Tick += (s, ev) =>
|
||
{
|
||
QRdata = "藤本";
|
||
QRresult = 1; // 告知主循环“扫到了码”
|
||
};
|
||
demoQrTimer.Start();
|
||
}
|
||
|
||
try
|
||
{
|
||
uint MFresult = 0;
|
||
uint result = 0;
|
||
uint mode = 0;
|
||
bool bResult = true;
|
||
string str_uid = "";
|
||
string str_qrc = "";
|
||
string[] str_rctbl = new string[8];
|
||
for (int j = 0; j < str_rctbl.Length; j++) str_rctbl[j] = "";
|
||
|
||
// 读取配置
|
||
result = ConRead.ReadConFile(ref str_Confile);
|
||
if (result == 1)
|
||
{
|
||
MessageBox.Show("設定ファイルの読み込みに失敗しました。\nパス: " + CONFIG_PATH, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
Application.Exit(); return;
|
||
}
|
||
for (int i = 0; i < OutConfNum; i++)
|
||
{
|
||
if (str_Confile[i] == null)
|
||
{
|
||
MessageBox.Show("設定ファイルの項目" + i + "が空です。\n設定ファイルに" + OutConfNum + "個の項目が必要です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
Application.Exit(); return;
|
||
}
|
||
}
|
||
|
||
// MLComponent(即使失败也继续)
|
||
try { SO_MLC = new MLComponent(); }
|
||
catch (Exception ex) { MessageBox.Show("MLComponentの初期化に失敗しました。\n" + ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
||
|
||
// 日志文件名
|
||
try
|
||
{
|
||
DateTime dtNow = DateTime.Now;
|
||
string stPrompt1 = dtNow.ToString("yyyyMMdd");
|
||
LogfilePath = str_Confile[5];
|
||
LogfileName = str_Confile[5] + str_Confile[6] + "_" + stPrompt1 + ".csv";
|
||
Retry_num = Convert.ToInt32(str_Confile[8]);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("設定ファイルの内容でエラーが発生しました。\n" + ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
Application.Exit(); return;
|
||
}
|
||
|
||
// 表格外观
|
||
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
|
||
dataGridView1.ColumnHeadersHeight = 30;
|
||
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
|
||
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
|
||
dataGridView1.ColumnCount = 8;
|
||
dataGridView1.Columns[0].HeaderText = "処理ログID";
|
||
dataGridView1.Columns[1].HeaderText = "駐輪場ID";
|
||
dataGridView1.Columns[2].HeaderText = "プロセス名";
|
||
dataGridView1.Columns[3].HeaderText = "ジョブ名";
|
||
dataGridView1.Columns[4].HeaderText = "ステータス";
|
||
dataGridView1.Columns[5].HeaderText = "エラーコード";
|
||
dataGridView1.Columns[6].HeaderText = "ステータスコメント";
|
||
dataGridView1.Columns[7].HeaderText = "登録日時";
|
||
dataGridView1.EnableHeadersVisualStyles = false;
|
||
dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.ForestGreen;
|
||
|
||
// 读取最近日志(失败也继续,但会把错误写到本地日志)
|
||
result = Logfile.ReadLogFile();
|
||
if (result == 1)
|
||
{
|
||
SO_LogEdit(LETYPE_LOGFRD);
|
||
SO_WriteLog();
|
||
Application.Exit(); return;
|
||
}
|
||
for (int i = 0; i < OutLogNum; i++)
|
||
dataGridView1.Rows.Add(Form1.koumoku[i, 0], Form1.koumoku[i, 1], Form1.koumoku[i, 2], Form1.koumoku[i, 3],
|
||
Form1.koumoku[i, 4], Form1.koumoku[i, 5], Form1.koumoku[i, 6], Form1.koumoku[i, 7]);
|
||
|
||
// ===== 初始化 =====
|
||
|
||
// 尝试连接数据库(不受 MOCK_HW 影响)
|
||
try
|
||
{
|
||
// 如果 DEMO_DB=true,会在各 DB 函数里直接短路返回;这里仍尝试打开连接,便于随时切换
|
||
SO_DBOpen();
|
||
}
|
||
catch { /* 具体弹窗已在 SO_DBOpen 内部做了 */ }
|
||
|
||
// 印字环境(DB 可用时读库;否则用默认值)
|
||
try
|
||
{
|
||
if (!DEMO_DB && IsDbReady)
|
||
{
|
||
bResult = SO_PrnEnvRead_rty();
|
||
if (!bResult) { SO_CommIniErr(LETYPE_DBERR, 2); Application.Exit(); return; }
|
||
}
|
||
else
|
||
{
|
||
Prn_MaxNum = 1000; Prn_NowNum = 0; Prn_Alert_num = 50; Prn_Alert_flg = 0; Prn_ParkName = "デモ駐輪場";
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("印字環境読み取りでエラーが発生しました。\n" + ex.Message + "\n\nデフォルト値で続行します。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
Prn_MaxNum = 1000; Prn_NowNum = 0; Prn_Alert_num = 50; Prn_Alert_flg = 0; Prn_ParkName = "デモ駐輪場";
|
||
}
|
||
|
||
// 硬件初始化(MOCK_HW=true 则跳过)
|
||
if (!MOCK_HW)
|
||
{
|
||
try
|
||
{
|
||
bResult = SO_PrnInit();
|
||
if (!bResult)
|
||
{
|
||
var prnResult = MessageBox.Show("プリンタの初期化に失敗しました。\nプリンタなしで続行しますか?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||
if (prnResult == DialogResult.No) { SO_CommIniErr(LETYPE_PRNINI, 3); Application.Exit(); return; }
|
||
}
|
||
}
|
||
catch (Exception ex) { MessageBox.Show("プリンタ初期化でエラーが発生しました。\n" + ex.Message + "\n\nプリンタなしで続行します。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
||
|
||
try
|
||
{
|
||
bResult = SO_MfifareInit();
|
||
if (!bResult)
|
||
{
|
||
var mfResult = MessageBox.Show("Mifareリーダの初期化に失敗しました。\nMifareリーダなしで続行しますか?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||
if (mfResult == DialogResult.No) { SO_CommIniErr(LETYPE_MFIINI, 4); Application.Exit(); return; }
|
||
}
|
||
}
|
||
catch (Exception ex) { MessageBox.Show("Mifareリーダ初期化でエラーが発生しました。\n" + ex.Message + "\n\nMifareリーダなしで続行します。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
||
|
||
try
|
||
{
|
||
bResult = SO_QRcordInit();
|
||
if (!bResult)
|
||
{
|
||
var qrResult = MessageBox.Show("QRコードリーダの初期化に失敗しました。\nQRコードリーダなしで続行しますか?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||
if (qrResult == DialogResult.No) { SO_CommIniErr(LETYPE_QRCINI, 5); Application.Exit(); return; }
|
||
}
|
||
}
|
||
catch (Exception ex) { MessageBox.Show("QRコードリーダ初期化でエラーが発生しました。\n" + ex.Message + "\n\nQRコードリーダなしで続行します。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
||
}
|
||
else
|
||
{
|
||
StartDemoQrFeeder(); // 演示:自动“扫”二维码
|
||
}
|
||
|
||
// 启动日志:有DB走原逻辑;无DB只写本地文件
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_START, 6); }
|
||
else { bResult = SO_ComCont(LETYPE_START, 6); if (!bResult) { Application.Exit(); return; } }
|
||
|
||
// KeepAlive
|
||
KEEPALIVE.TIM_Main();
|
||
|
||
// ================= 主循环 =================
|
||
while (true)
|
||
{
|
||
// -------- 等待二维码/Mifare --------
|
||
while (true)
|
||
{
|
||
Application.DoEvents();
|
||
|
||
if (EndType == 10) { Application.Exit(); return; }
|
||
|
||
if (QRresult != 0)
|
||
{
|
||
if (QRresult == 1) { mode = QRresult; break; }
|
||
if (QRresult == 2)
|
||
{
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_QRCERR, EndType); Application.Exit(); return; }
|
||
else { bResult = SO_ComCont(LETYPE_QRCERR, EndType); Application.Exit(); return; }
|
||
}
|
||
else { QRresult = 0; continue; }
|
||
}
|
||
else
|
||
{
|
||
if (MOCK_HW) { continue; } // 演示:完全跳过 Mifare 检查
|
||
MFresult = SO_MfifareCheck();
|
||
if (MFresult == 0) { mode = MFresult; break; }
|
||
else if ((MFresult <= 10) || (MFresult == 0xC0020001) || (MFresult == 0xC0020003)) { continue; }
|
||
else
|
||
{
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_MFIERR, EndType); Application.Exit(); return; }
|
||
else { bResult = SO_ComCont(LETYPE_MFIERR, EndType); Application.Exit(); return; }
|
||
}
|
||
}
|
||
}
|
||
|
||
// 暂停 KeepAlive
|
||
KEEPALIVE.MyTimer_stop();
|
||
|
||
// -------- DB 查询重试 --------
|
||
for (int i = 0; i < Retry_num; i++)
|
||
{
|
||
str_uid = "";
|
||
|
||
if (mode == 1)
|
||
{
|
||
str_qrc = QRdata;
|
||
QRresult = 0;
|
||
result = SO_DBChk_qrnum(ref str_qrc, ref str_uid);
|
||
}
|
||
else
|
||
{
|
||
result = SO_DBChk_tagnum(ref str_uid);
|
||
}
|
||
|
||
if (result == 0)
|
||
{
|
||
result = SO_CommLabelOutput(mode, ref str_uid, ref str_rctbl);
|
||
if (result != 0)
|
||
{
|
||
if (IsDbReady) { try { if (DBconnect.State != ConnectionState.Open) DBconnect.Open(); } catch { } }
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
else if (result == 1)
|
||
{
|
||
if (IsDbReady) { try { if (DBconnect.State != ConnectionState.Open) DBconnect.Open(); } catch { } }
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
// -------- 查询结果处理 --------
|
||
switch (result)
|
||
{
|
||
case 0: bResult = true; break;
|
||
case 1:
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_DBERR, 6); Application.Exit(); return; }
|
||
else { bResult = SO_ComCont(LETYPE_DBERR, 6); Application.Exit(); return; }
|
||
case 2:
|
||
if (!IsDbReady || DEMO_DB) LogOnly(LETYPE_NONMFC, EndType);
|
||
else bResult = SO_ComCont(LETYPE_NONMFC, EndType);
|
||
break;
|
||
case 3:
|
||
if (!IsDbReady || DEMO_DB) LogOnly(LETYPE_NONQRC, EndType);
|
||
else bResult = SO_ComCont(LETYPE_NONQRC, EndType);
|
||
break;
|
||
case 4:
|
||
if (!IsDbReady || DEMO_DB) LogOnly(LETYPE_NONUID, EndType);
|
||
else bResult = SO_ComCont(LETYPE_NONUID, EndType);
|
||
break;
|
||
default: bResult = true; break;
|
||
}
|
||
if (!bResult) { Application.Exit(); return; }
|
||
|
||
// -------- 可否与打印 --------
|
||
bResult = SO_PRN_dtatchk(ref str_rctbl);
|
||
if (!bResult) break;
|
||
|
||
result = SO_PrnOut(); // 演示下始终返回0(成功)
|
||
if (result != 0)
|
||
{
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_PRNERR, EndType); Application.Exit(); return; }
|
||
else { bResult = SO_ComCont(LETYPE_PRNERR, EndType); Application.Exit(); return; }
|
||
}
|
||
|
||
// -------- DB 写入 --------
|
||
Prn_NowNum++;
|
||
if (((Prn_MaxNum - Prn_NowNum) < Prn_Alert_num) && (Prn_Alert_flg == 1))
|
||
{
|
||
if (IsDbReady && !DEMO_DB)
|
||
{
|
||
result = SO_DBOpeQue();
|
||
if (result != 0)
|
||
{
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_DBERR, 6); Application.Exit(); return; }
|
||
else { bResult = SO_ComCont(LETYPE_DBERR, 6); Application.Exit(); return; }
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (IsDbReady && !DEMO_DB)
|
||
{
|
||
result = SO_DBNowPrnNum_rty();
|
||
if (result != 0)
|
||
{
|
||
if (!IsDbReady || DEMO_DB) { LogOnly(LETYPE_DBERR, 6); Application.Exit(); return; }
|
||
else { bResult = SO_ComCont(LETYPE_DBERR, 6); Application.Exit(); return; }
|
||
}
|
||
}
|
||
}
|
||
|
||
// 正常记录
|
||
if (!IsDbReady || DEMO_DB) LogOnly(LETYPE_NORMAL, EndType);
|
||
else
|
||
{
|
||
bResult = SO_ComCont(LETYPE_NORMAL, EndType);
|
||
if (!bResult) { Application.Exit(); return; }
|
||
}
|
||
|
||
KEEPALIVE.MyTimer_start();
|
||
SO_LogFileDelCheck();
|
||
Application.DoEvents();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("アプリケーションでエラーが発生しました。\n" + ex.Message + "\n\nスタックトレース:\n" + ex.StackTrace, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
Application.Exit();
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// エラー時共通の終了処理
|
||
//====================================================================================================================
|
||
private void SO_CommIniErr(int type, int n)
|
||
{
|
||
EndType = n;
|
||
SO_LogEdit(type);
|
||
|
||
if ((type != LETYPE_DBOPEN) && (type != LETYPE_DBERR))
|
||
{
|
||
SO_DBInsert_pjl();
|
||
}
|
||
|
||
SO_WriteLog();
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 初期化以降の共通処理
|
||
//====================================================================================================================
|
||
private bool SO_ComCont(int type, int n)
|
||
{
|
||
uint ret = 0;
|
||
|
||
EndType = n;
|
||
SO_LogEdit(type);
|
||
|
||
if (type != LETYPE_DBERR)
|
||
{
|
||
bool bret = SO_DBInsert_pjl();
|
||
if ((bret == false) || (n == LETYPE_DBERR))
|
||
{
|
||
SO_LogEdit(LETYPE_DBERR);
|
||
SO_WriteLog();
|
||
return false;
|
||
}
|
||
}
|
||
|
||
ret = SO_WriteLog();
|
||
if ((ret == 1) && (type == LETYPE_START) || (type == LETYPE_NORMAL))
|
||
{
|
||
SO_LogEdit(LETYPE_LOGFWR);
|
||
SO_DBInsert_pjl();
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ローカルのログファイルに書き込み
|
||
//====================================================================================================================
|
||
private uint SO_CommLabelOutput(uint mode, ref string str_uid, ref string[] str_rctbl)
|
||
{
|
||
uint uret = 0;
|
||
|
||
// 利用者ID検索
|
||
uret = SO_DBChk_usrid(str_uid, ref str_rctbl);
|
||
if (uret != 0) return 1;
|
||
|
||
// 該当レコードなし(利用者ID)
|
||
if (str_rctbl[2].Length == 0) return 4;
|
||
|
||
// 印刷情報取得
|
||
uret = SO_PrnLabeEdit(mode);
|
||
if (uret == 1) return 1;
|
||
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ログファイル削除チェック
|
||
//====================================================================================================================
|
||
private void SO_LogFileDelCheck()
|
||
{
|
||
int i = 0;
|
||
bool bret = true;
|
||
DateTime dtNow = DateTime.Now;
|
||
string Nowm = dtNow.ToString("yyyyMM");
|
||
string Tgm = "";
|
||
string work = "";
|
||
|
||
DirectoryInfo dir = new DirectoryInfo(Form1.LogfilePath);
|
||
if (!dir.Exists) return;
|
||
|
||
FileInfo[] files = dir.GetFiles();
|
||
|
||
for (i = 0; i < files.Length; i++)
|
||
{
|
||
string f = Convert.ToString(files[i]);
|
||
work = f.Substring(f.Length - 12, 12);
|
||
Tgm = work.Substring(0, 6);
|
||
bret = LogFileChk_Mo(Nowm, Tgm);
|
||
if (bret == false)
|
||
{
|
||
System.IO.File.Delete(Form1.LogfilePath + files[i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
private bool LogFileChk_Mo(string Nwm, string Tgm)
|
||
{
|
||
int Ny, Ty;
|
||
int Nm, Tm;
|
||
int dy, dm, m, bd;
|
||
|
||
Ny = Convert.ToInt32(Nwm.Substring(0, 4));
|
||
Ty = Convert.ToInt32(Tgm.Substring(0, 4));
|
||
Nm = Convert.ToInt32(Nwm.Substring(4, 2));
|
||
Tm = Convert.ToInt32(Tgm.Substring(4, 2));
|
||
bd = Convert.ToInt32(str_Confile[7]);
|
||
|
||
dm = Nm - Tm;
|
||
if (dm < 0)
|
||
{
|
||
dm += 12;
|
||
--Ny;
|
||
}
|
||
|
||
dy = Ny - Ty;
|
||
if (dy < 0) return true;
|
||
|
||
m = dy * 12 + dm;
|
||
if (m > bd) return false;
|
||
|
||
return true;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 印刷可否判定
|
||
//====================================================================================================================
|
||
private bool SO_PRN_dtatchk(ref string[] str_rctbl)
|
||
{
|
||
string dateNow = Convert.ToString(DateTime.Now);
|
||
|
||
if ((str_rctbl[4] != "1") || (str_rctbl[5] != "1")) return false;
|
||
|
||
if ((dateNow.CompareTo(str_rctbl[1]) < 0) || (dateNow.CompareTo(str_rctbl[2]) > 0)) return false;
|
||
|
||
if (dateNow.CompareTo(str_rctbl[3]) < 0) return false;
|
||
|
||
return true;
|
||
}
|
||
|
||
private void button1_Click(object sender, EventArgs e)
|
||
{
|
||
EndType = 10;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ログ編集
|
||
//====================================================================================================================
|
||
private void SO_LogEdit(int n)
|
||
{
|
||
DateTime dtUtcNow = DateTime.Now;
|
||
|
||
switch (n)
|
||
{
|
||
case LETYPE_NORMAL:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "シール印刷";
|
||
str_logkm[4] = "正常印刷";
|
||
str_logkm[5] = "0";
|
||
str_logkm[6] = " ";
|
||
break;
|
||
|
||
case LETYPE_START:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = " ";
|
||
str_logkm[3] = " ";
|
||
str_logkm[4] = "開始";
|
||
str_logkm[5] = "0";
|
||
str_logkm[6] = "起動しました";
|
||
break;
|
||
|
||
case LETYPE_DBERR:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_DBERR.ToString();
|
||
str_logkm[6] = "DBアクセスエラー";
|
||
break;
|
||
|
||
case LETYPE_DBOPEN:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "DBアタッチエラー";
|
||
str_logkm[5] = ERROR_CODE_DBOPEN.ToString();
|
||
str_logkm[6] = "DB OPENに失敗";
|
||
break;
|
||
|
||
case LETYPE_LAYOUT:
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "レイアウトファイルエラー";
|
||
str_logkm[5] = ERROR_CODE_LAYOUT.ToString();
|
||
str_logkm[6] = "レイアウトファイルが見つからない";
|
||
break;
|
||
|
||
case LETYPE_PRNINI:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "プリンタ初期化エラー";
|
||
str_logkm[5] = ERROR_CODE_PRNINI.ToString();
|
||
str_logkm[6] = "プリンタ初期化に失敗";
|
||
break;
|
||
|
||
case LETYPE_MFIINI:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "カードリーダ初期化エラー";
|
||
str_logkm[5] = ERROR_CODE_MFIINI.ToString();
|
||
str_logkm[6] = "Mifareリーダ初期化に失敗";
|
||
break;
|
||
|
||
case LETYPE_QRCINI:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "カードリーダ初期化エラー";
|
||
str_logkm[5] = ERROR_CODE_QRCINI.ToString();
|
||
str_logkm[6] = "QRコードリーダ初期化に失敗";
|
||
break;
|
||
|
||
case LETYPE_NONMFC:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_NONMFC.ToString();
|
||
str_logkm[6] = "タグ利用者なし";
|
||
break;
|
||
|
||
case LETYPE_NONUID:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_NONUID.ToString();
|
||
str_logkm[6] = "タグ利用者なし";
|
||
break;
|
||
|
||
case LETYPE_NONQRC:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_NONQRC.ToString();
|
||
str_logkm[6] = "タグ利用者なし";
|
||
break;
|
||
|
||
case LETYPE_PRNERR:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_PRNERR.ToString();
|
||
str_logkm[6] = "プリンタエラー";
|
||
break;
|
||
|
||
case LETYPE_QRCERR:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_QRCERR.ToString();
|
||
str_logkm[6] = "QRコード読み取りエラー";
|
||
break;
|
||
|
||
case LETYPE_MFIERR:
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_MFIERR.ToString();
|
||
str_logkm[6] = "Mifare読み取りエラー";
|
||
break;
|
||
|
||
case LETYPE_CONFRD:
|
||
str_logkm[0] = "";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_CONFRD.ToString();
|
||
str_logkm[6] = "設定ファイル読み込みエラー";
|
||
break;
|
||
|
||
case LETYPE_LOGFRD:
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "初期化処理";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_LOGFRD.ToString();
|
||
str_logkm[6] = "ログファイル読み込みエラー";
|
||
break;
|
||
|
||
case LETYPE_LOGFWR:
|
||
str_logkm[0] = " ";
|
||
str_logkm[2] = "定期シール発行";
|
||
str_logkm[3] = "利用者確認";
|
||
str_logkm[4] = "error";
|
||
str_logkm[5] = ERROR_CODE_LOGFWR.ToString();
|
||
str_logkm[6] = "ログファイル書き込みエラー";
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
str_logkm[1] = str_Confile[3];
|
||
str_logkm[7] = dtUtcNow.ToString();
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ローカルのログファイルに書き込みと表示
|
||
//====================================================================================================================
|
||
private uint SO_WriteLog()
|
||
{
|
||
uint ret = 0;
|
||
|
||
string str_logrec = str_logkm[0] + "," + str_logkm[1] + "," + str_logkm[2] + "," + str_logkm[3] + "," + str_logkm[4] + "," + str_logkm[5] + "," + str_logkm[6] + "," + str_logkm[7];
|
||
System.Diagnostics.Trace.WriteLine(str_logrec);
|
||
|
||
try
|
||
{
|
||
using (StreamWriter writer = new StreamWriter(LogfileName, true, Encoding.GetEncoding("utf-8")))
|
||
{
|
||
writer.WriteLine(str_logrec);
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
ret = 1;
|
||
}
|
||
|
||
for (int i = OutLogNum - 1; i > 0; i--)
|
||
{
|
||
for (int ii = 0; ii < 8; ii++)
|
||
{
|
||
dataGridView1[ii, i].Value = dataGridView1[ii, i - 1].Value;
|
||
}
|
||
}
|
||
|
||
dataGridView1[0, 0].Value = str_logkm[0];
|
||
dataGridView1[1, 0].Value = str_logkm[1];
|
||
dataGridView1[2, 0].Value = str_logkm[2];
|
||
dataGridView1[3, 0].Value = str_logkm[3];
|
||
dataGridView1[4, 0].Value = str_logkm[4];
|
||
dataGridView1[5, 0].Value = str_logkm[5];
|
||
dataGridView1[6, 0].Value = str_logkm[6];
|
||
dataGridView1[7, 0].Value = str_logkm[7];
|
||
|
||
this.Refresh();
|
||
|
||
return ret;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DBオープン
|
||
//====================================================================================================================
|
||
private bool SO_DBOpen()
|
||
{
|
||
bool ret = true;
|
||
|
||
try
|
||
{
|
||
if (DBconnect == null)
|
||
{
|
||
DBconnect = new MySqlConnection(connectionParams);
|
||
}
|
||
|
||
if (DBconnect.State != System.Data.ConnectionState.Open)
|
||
{
|
||
DBconnect.Open();
|
||
}
|
||
}
|
||
catch (MySqlException mysqlEx)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine("MySQL接続エラー: " + mysqlEx.Message);
|
||
|
||
string errorMsg = "データベースへの接続に失敗しました。\n\n";
|
||
errorMsg += "エラー詳細: " + mysqlEx.Message + "\n";
|
||
errorMsg += "エラー番号: " + mysqlEx.Number + "\n\n";
|
||
errorMsg += "以下を確認してください:\n";
|
||
errorMsg += "1. MySQLサーバーが起動しているか\n";
|
||
errorMsg += "2. データベース名が正しいか ('so-manager')\n";
|
||
errorMsg += "3. ユーザー名とパスワードが正しいか\n";
|
||
errorMsg += "4. ネットワーク接続が正常か";
|
||
|
||
MessageBox.Show(errorMsg, "データベース接続エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
ret = false;
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine("データベース接続エラー: " + e.Message);
|
||
MessageBox.Show("データベース接続で予期しないエラーが発生しました。\n\nエラー: " + e.Message,
|
||
"エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
ret = false;
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB更新:デバイス管理マスタ(device) KeepAlive
|
||
//====================================================================================================================
|
||
public static int SO_DBKpAlive(string Insert_SQL)
|
||
{
|
||
// ★ DEMO_DB or 未接続:什么也不做(返回成功)
|
||
if (DEMO_DB || DBconnect == null || DBconnect.State != ConnectionState.Open) return 0;
|
||
|
||
var transaction = DBconnect.BeginTransaction();
|
||
try
|
||
{
|
||
using (var DBcmd = new MySqlCommand(Insert_SQL, DBconnect))
|
||
{
|
||
DBcmd.CommandTimeout = 3;
|
||
DBcmd.ExecuteNonQuery();
|
||
}
|
||
transaction.Commit();
|
||
return 0;
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
return 1;
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB更新:駐輪場マスタ(print_number)
|
||
//====================================================================================================================
|
||
private uint SO_DBNowPrnNum_rty()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) return 0;
|
||
|
||
uint ret = 0;
|
||
for (int i = 0; i < Retry_num; i++)
|
||
{
|
||
ret = SO_DBNowPrnNum();
|
||
if (ret == 1)
|
||
{
|
||
try { if (DBconnect.State != ConnectionState.Open) DBconnect.Open(); } catch { }
|
||
}
|
||
else return 0;
|
||
}
|
||
return 1;
|
||
}
|
||
|
||
private uint SO_DBNowPrnNum()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) return 0;
|
||
|
||
using (var transaction = DBconnect.BeginTransaction())
|
||
{
|
||
string Update_SQL = "update park set print_number=" + Convert.ToString(Prn_NowNum) +
|
||
" where park_id=" + str_Confile[3] + ";";
|
||
System.Diagnostics.Trace.WriteLine(Update_SQL);
|
||
try
|
||
{
|
||
using (var DBcmd = new MySqlCommand(Update_SQL, DBconnect)) { DBcmd.CommandTimeout = 3; DBcmd.ExecuteNonQuery(); }
|
||
transaction.Commit();
|
||
return 0;
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
return 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB追加:オペレータキュー(operator_que)
|
||
//====================================================================================================================
|
||
private uint SO_DBOpeQue()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) return 0;
|
||
|
||
using (var transaction = DBconnect.BeginTransaction())
|
||
{
|
||
DateTime NowDate = DateTime.Now;
|
||
string Insert_SQL =
|
||
"INSERT INTO operator_que (park_id, que_class, que_status_comment, work_instructions, created_at, que_status) " +
|
||
$"VALUES ({str_Confile[3]},104,'{str_Confile[4]}','{Prn_ParkName}の用紙がもうすぐ無くなります。交換してください','{NowDate}',1);";
|
||
try
|
||
{
|
||
using (var DBcmd = new MySqlCommand(Insert_SQL, DBconnect)) { DBcmd.CommandTimeout = 3; DBcmd.ExecuteNonQuery(); }
|
||
transaction.Commit();
|
||
return 0;
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
return 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB検索:設定マスタ(setting),デバイス管理マスタ(device)
|
||
//====================================================================================================================
|
||
private bool SO_PrnEnvRead_rty()
|
||
{
|
||
if (DEMO_DB || !IsDbReady)
|
||
{
|
||
Prn_MaxNum = 1000; Prn_NowNum = 0; Prn_Alert_num = 50; Prn_Alert_flg = 0; Prn_ParkName = "デモ駐輪場";
|
||
return true;
|
||
}
|
||
for (int i = 0; i < Retry_num; i++)
|
||
{
|
||
if (SO_PrnEnvRead()) return true;
|
||
try { if (DBconnect.State != ConnectionState.Open) DBconnect.Open(); } catch { }
|
||
}
|
||
return false;
|
||
}
|
||
|
||
private bool SO_PrnEnvRead()
|
||
{
|
||
if (DEMO_DB || !IsDbReady)
|
||
{
|
||
Prn_MaxNum = 1000; Prn_NowNum = 0; Prn_Alert_num = 50; Prn_Alert_flg = 0; Prn_ParkName = "デモ駐輪場";
|
||
return true;
|
||
}
|
||
|
||
string Select_SQL1 = "select printable_alert_flag,printable_number,printable_alert_number from setting;";
|
||
string Select_SQL2 = "select park_name, print_number from park where park_id=" + str_Confile[3] + ";";
|
||
string Select_SQL3 = "select device_id from device where park_id=" + str_Confile[3] + " and device_type='プリンタ' and device_work=1;";
|
||
|
||
var transaction1 = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd1 = new MySqlCommand(Select_SQL1, DBconnect);
|
||
DBcmd1.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd1.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
Prn_Alert_flg = Convert.ToInt32(reader["printable_alert_flag"]);
|
||
Prn_MaxNum = Convert.ToInt32(reader["printable_number"]);
|
||
Prn_Alert_num = Convert.ToInt32(reader["printable_alert_number"]);
|
||
}
|
||
reader.Close();
|
||
transaction1.Commit();
|
||
}
|
||
catch (MySqlException e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd1.Dispose();
|
||
return false;
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd1.Dispose();
|
||
return false;
|
||
}
|
||
|
||
var transaction2 = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd2 = new MySqlCommand(Select_SQL2, DBconnect);
|
||
DBcmd2.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd2.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
Prn_ParkName = Convert.ToString(reader["park_name"]);
|
||
if (reader.IsDBNull(1)) Prn_NowNum = 0;
|
||
else Prn_NowNum = Convert.ToInt32(reader["print_number"]);
|
||
}
|
||
reader.Close();
|
||
transaction2.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd2.Dispose();
|
||
return false;
|
||
}
|
||
|
||
var transaction3 = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd3 = new MySqlCommand(Select_SQL3, DBconnect);
|
||
DBcmd3.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd3.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
KpAlive_devid = Convert.ToString(reader["device_id"]);
|
||
}
|
||
reader.Close();
|
||
transaction3.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd3.Dispose();
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB検索:定期契約マスタ(regular_contract) - QR
|
||
//====================================================================================================================
|
||
private uint SO_DBChk_qrnum(ref string str_qrc, ref string str_userid)
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_userid = "1001"; return 0; }
|
||
|
||
string Select_SQL = "select user_id from regular_contract where contract_qr_id='" + str_qrc + "';";
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(Select_SQL, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_userid = Convert.ToString(reader["user_id"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
if (str_userid.Length == 0) return 2;
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB検索:定期契約マスタ(regular_contract) - by user_id
|
||
//====================================================================================================================
|
||
private uint SO_DBChk_usrid(string str_uid, ref string[] str_rctbl)
|
||
{
|
||
if (DEMO_DB || !IsDbReady)
|
||
{
|
||
var s = DateTime.Now.AddDays(-1);
|
||
var e = DateTime.Now.AddMonths(1).AddDays(-1);
|
||
str_rctbl[0] = "RC-DEMO-0001";
|
||
str_rctbl[1] = s.ToString("yyyy/MM/dd HH:mm:ss");
|
||
str_rctbl[2] = e.ToString("yyyy/MM/dd HH:mm:ss");
|
||
str_rctbl[3] = s.ToString("yyyy/MM/dd HH:mm:ss");
|
||
str_rctbl[4] = "1";
|
||
str_rctbl[5] = "1";
|
||
return 0;
|
||
}
|
||
|
||
string Select_SQL = "select contract_id,contract_periods,contract_periode,printable_date,contract_flag,contract_permission from regular_contract where user_id =" + str_uid + ";";
|
||
MySqlCommand DBcmd = new MySqlCommand(Select_SQL, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
|
||
while (reader.Read())
|
||
{
|
||
str_rctbl[0] = Convert.ToString(reader["contract_id"]);
|
||
str_rctbl[1] = Convert.ToString(reader["contract_periods"]);
|
||
str_rctbl[2] = Convert.ToString(reader["contract_periode"]);
|
||
str_rctbl[3] = Convert.ToString(reader["printable_date"]);
|
||
str_rctbl[4] = Convert.ToString(reader["contract_flag"]);
|
||
str_rctbl[5] = Convert.ToString(reader["contract_permission"]);
|
||
}
|
||
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB検索:プリンタ利用者マスタ(user) - Mifare
|
||
//====================================================================================================================
|
||
private uint SO_DBChk_tagnum(ref string str_userid)
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_userid = "1001"; return 0; }
|
||
|
||
var transaction = DBconnect.BeginTransaction();
|
||
string Select_SQL = "select user_id from user where user_tag_serial='" + MFCODE + "';";
|
||
MySqlCommand DBcmd = new MySqlCommand(Select_SQL, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_userid = Convert.ToString(reader["user_id"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
if (str_userid.Length == 0) return 3;
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 印刷内容読み取り:駐車場名
|
||
//====================================================================================================================
|
||
private int SO_DBPrndat_pname()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_Prndat[0] = "デモ駐輪場"; return 0; }
|
||
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(DBREAD_park_name + str_Confile[3] + ";", DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_Prndat[0] = Convert.ToString(reader["park_name"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 印刷内容読み取り:定期種別
|
||
//====================================================================================================================
|
||
private int SO_DBPrndat_usubj1(uint type)
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_Prndat[1] = " "; return 0; }
|
||
string str_Select;
|
||
|
||
if (type == 0)
|
||
{
|
||
str_Select = DBREAD_utype_sub1[type] + "'" + MFCODE + "';";
|
||
}
|
||
else
|
||
{
|
||
str_Select = DBREAD_utype_sub1[type] + "'" + QRdata + "';";
|
||
}
|
||
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(str_Select, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
string str_work = Convert.ToString(reader["usertype_subject1"]);
|
||
if (str_work == "学生") str_Prndat[1] = "学";
|
||
else str_Prndat[1] = " ";
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 印刷内容読み取り:場所種別
|
||
//====================================================================================================================
|
||
private int SO_DBPrndat_contid()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_Prndat[2] = "一般"; return 0; }
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(DBREAD_ptype_subj + str_Confile[3] + ";", DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_Prndat[2] = Convert.ToString(reader["ptype_subject"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 印刷内容読み取り:開始日、終了日、定期契約ID
|
||
//====================================================================================================================
|
||
private int SO_DBPrndat_cperiod(uint type)
|
||
{
|
||
if (DEMO_DB || !IsDbReady)
|
||
{
|
||
var s = DateTime.Now;
|
||
var e = DateTime.Now.AddMonths(1).AddDays(-1);
|
||
str_Prndat[3] = ""; Cperiods(s.ToString("yy/MM/dd HH:mm:ss"), ref str_Prndat[3]);
|
||
str_Prndat[4] = ""; Cperiode(e.ToString("yy/MM/dd HH:mm:ss"), ref str_Prndat[4]);
|
||
str_Prndat[6] = "C-DEMO-01234";
|
||
return 0;
|
||
}
|
||
string str_Select;
|
||
string str_work1 = "";
|
||
string str_work2 = "";
|
||
string str_work3 = "";
|
||
|
||
if (type == 0)
|
||
{
|
||
str_Select = DBREAD_cont_periods[type] + "'" + MFCODE + "';";
|
||
}
|
||
else
|
||
{
|
||
str_Select = DBREAD_cont_periods[type] + "'" + QRdata + "';";
|
||
}
|
||
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(str_Select, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_work1 = Convert.ToString(reader["contract_periods"]);
|
||
str_work2 = Convert.ToString(reader["contract_periode"]);
|
||
str_work3 = Convert.ToString(reader["contract_id"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
Cperiods(str_work1, ref str_Prndat[3]);
|
||
Cperiode(str_work2, ref str_Prndat[4]);
|
||
str_Prndat[6] = str_work3;
|
||
|
||
return 0;
|
||
}
|
||
|
||
private void Cperiods(string str_work, ref string work)
|
||
{
|
||
int len = str_work.Length;
|
||
int mode = 0;
|
||
|
||
work = str_work.Substring(2, 2) + ".";
|
||
for (int i = 5; i < len; i++)
|
||
{
|
||
if (mode == 0)
|
||
{
|
||
if (str_work[i] == '/')
|
||
{
|
||
work = work + '.';
|
||
mode = 1;
|
||
}
|
||
else
|
||
{
|
||
work = work + str_work[i];
|
||
}
|
||
}
|
||
else if (mode == 1)
|
||
{
|
||
if (str_work[i] == ' ')
|
||
{
|
||
break;
|
||
}
|
||
work = work + str_work[i];
|
||
}
|
||
}
|
||
}
|
||
|
||
private void Cperiode(string str_work, ref string work)
|
||
{
|
||
int len = str_work.Length;
|
||
|
||
for (int i = 5; i < len; i++)
|
||
{
|
||
if (str_work[i] == '/')
|
||
{
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
work = work + str_work[i];
|
||
}
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 印刷内容読み取り:再発行
|
||
//====================================================================================================================
|
||
/* private int SO_DBPrndat_sis(uint type)
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_Prndat[5] = "1"; return 0; }
|
||
string str_Select;
|
||
string str_work = "";
|
||
|
||
if (type == 0)
|
||
{
|
||
str_Select = DBREAD_cont_sissue[type] + "'" + MFCODE + "';";
|
||
}
|
||
else
|
||
{
|
||
str_Select = DBREAD_cont_sissue[type] + "'" + QRdata + "';";
|
||
}
|
||
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(str_Select, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_work = Convert.ToString(reader["contract_seal_issue"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
int n = Convert.ToInt32(str_work);
|
||
if (n > 1) str_Prndat[5] = "再" + str_work;
|
||
else str_Prndat[5] = str_work;
|
||
|
||
return 0;
|
||
}*/
|
||
// 印刷内容読み取り:再発行 (C# 7.3 互換)
|
||
private int SO_DBPrndat_sis(uint type)
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_Prndat[5] = "1"; return 0; }
|
||
|
||
string str_Select = (type == 0)
|
||
? DBREAD_cont_sissue[0] + "'" + MFCODE + "';"
|
||
: DBREAD_cont_sissue[1] + "'" + QRdata + "';";
|
||
|
||
int n = 1; // デフォルト=初回発行
|
||
|
||
try
|
||
{
|
||
using (var transaction = DBconnect.BeginTransaction())
|
||
using (var DBcmd = new MySqlCommand(str_Select, DBconnect))
|
||
{
|
||
DBcmd.CommandTimeout = 3;
|
||
// DBcmd.Transaction = transaction; // SELECT なので不要だが付けても良い
|
||
|
||
using (var reader = DBcmd.ExecuteReader())
|
||
{
|
||
if (reader.Read())
|
||
{
|
||
object v = reader["contract_seal_issue"];
|
||
int tmp;
|
||
if (v != DBNull.Value && v != null &&
|
||
int.TryParse(Convert.ToString(v), out tmp))
|
||
{
|
||
n = tmp;
|
||
}
|
||
}
|
||
}
|
||
|
||
transaction.Commit();
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
try { DBconnect.Close(); } catch { }
|
||
return 1;
|
||
}
|
||
|
||
str_Prndat[5] = (n > 1) ? ("再" + n.ToString()) : n.ToString();
|
||
return 0;
|
||
}
|
||
|
||
|
||
//====================================================================================================================
|
||
// 印刷内容読み取り:自治体名
|
||
//====================================================================================================================
|
||
private int SO_DBPrndat_cname()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) { str_Prndat[7] = "デモ市"; return 0; }
|
||
var transaction = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(DBREAD_city_name + str_Confile[3] + ";", DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_Prndat[7] = Convert.ToString(reader["city_name"]);
|
||
}
|
||
reader.Close();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
DBcmd.Dispose();
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// DB書き込み:プリンタ制御プログラムログ(print_job_log)
|
||
//====================================================================================================================
|
||
private bool SO_DBInsert_pjl()
|
||
{
|
||
if (DEMO_DB || !IsDbReady) return true;
|
||
|
||
string Insert_SQL = "insert into print_job_log ( park_id, process_name,job_name, status, error_code, status_comment, created_at) value (" + str_Confile[3] + ",'" + str_logkm[2] + "','" + str_logkm[3] + "','" + str_logkm[4] + "'," + str_logkm[5] + ",'" + str_logkm[6] + "','" + str_logkm[7] + "');";
|
||
MySqlCommand DBcmd1 = new MySqlCommand(Insert_SQL, DBconnect);
|
||
MySqlTransaction transaction = DBconnect.BeginTransaction();
|
||
DBcmd1.Transaction = transaction;
|
||
DBcmd1.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
DBcmd1.ExecuteNonQuery();
|
||
transaction.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
return false;
|
||
}
|
||
|
||
string Select_SQL = "select job_log_id from print_job_log where created_at=" + "'" + str_logkm[7] + "';";
|
||
var transaction1 = DBconnect.BeginTransaction();
|
||
MySqlCommand DBcmd = new MySqlCommand(Select_SQL, DBconnect);
|
||
DBcmd.CommandTimeout = 3;
|
||
|
||
try
|
||
{
|
||
MySqlDataReader reader = DBcmd.ExecuteReader();
|
||
while (reader.Read())
|
||
{
|
||
str_logkm[0] = Convert.ToString(reader["job_log_id"]);
|
||
}
|
||
reader.Close();
|
||
transaction1.Commit();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
DBconnect.Close();
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// Mfifareリーダ初期化
|
||
//====================================================================================================================
|
||
private bool SO_MfifareInit()
|
||
{
|
||
if (MOCK_HW) return true;
|
||
|
||
uint result = 0;
|
||
result = CreateObject_Ex();
|
||
if (result != AidConst.NORMALEND) return false;
|
||
|
||
result = ObjectSetUp_Ex();
|
||
if (result != AidConst.NORMALEND) return false;
|
||
|
||
result = RW_Authentication_Ex();
|
||
return true;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// QRコードリーダ初期化
|
||
//====================================================================================================================
|
||
private bool SO_QRcordInit()
|
||
{
|
||
if (MOCK_HW) return true;
|
||
|
||
bool ret = true;
|
||
|
||
try
|
||
{
|
||
// 优先使用配置文件
|
||
if (!string.IsNullOrWhiteSpace(str_Confile[0]))
|
||
serialPort1.PortName = str_Confile[0]; // 例如 COM3
|
||
else
|
||
{
|
||
// 兜底取最后一个串口
|
||
PortList = SerialPort.GetPortNames();
|
||
int len = PortList.Length;
|
||
serialPort1.PortName = "COM" + len.ToString();
|
||
}
|
||
|
||
if (int.TryParse(str_Confile[1], out var baud)) serialPort1.BaudRate = baud;
|
||
else serialPort1.BaudRate = 9600;
|
||
|
||
// StopBits:配置里“1”当作 One
|
||
serialPort1.StopBits = StopBits.One;
|
||
|
||
serialPort1.DataBits = 8;
|
||
serialPort1.Parity = Parity.None;
|
||
|
||
serialPort1.Open();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(ex.Message);
|
||
ret = false;
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// Mfifareリーダ確認
|
||
//====================================================================================================================
|
||
public uint SO_MfifareCheck()
|
||
{
|
||
if (MOCK_HW) return 0xC0020001; // 演示:总是当作“未捕捉到卡”
|
||
uint result = 0;
|
||
uint vmode = 0;
|
||
uint vspeed = 0;
|
||
uint vtype = 0;
|
||
uint vbuffSize = 0;
|
||
uint vinfLen = 0;
|
||
|
||
vmode = 1000; // 検出タイムアウト時間を1000ms
|
||
vspeed = AidConst.CARDSPEED_DEFAULT;
|
||
vtype = 0;
|
||
vbuffSize = 64;
|
||
|
||
result = (uint)icc.StartTransaction(vmode, vspeed, ref vtype, out vinfBuff, vbuffSize, out vinfLen);
|
||
if (result != AidConst.NORMALEND) return result;
|
||
|
||
if (((uint)vtype & (~AidConst.CARDTYPE_MORECARD)) == AidConst.CARDTYPE_MIF)
|
||
{
|
||
string chk = string.Format("{0:X2}{1:X2}", vinfBuff[2], vinfBuff[1]);
|
||
if (chk == MFCODE_CHK) return 5;
|
||
}
|
||
else
|
||
{
|
||
return 5;
|
||
}
|
||
|
||
if ((vtype & AidConst.CARDTYPE_MORECARD) != 0) return 6;
|
||
|
||
date1 = DateTime.Now;
|
||
TimeSpan tc = date1 - date2;
|
||
int second = tc.Seconds;
|
||
|
||
uint ret = bcmp(vinfBuff, vinfBuff2);
|
||
if ((second < 2) && (ret == 0)) result = 10;
|
||
|
||
vinfBuff2 = vinfBuff;
|
||
date2 = date1;
|
||
|
||
MFCODE = string.Format("{0:X2}{1:X2}{2:X2}{3:X2}{4:X2}{5:X2}{6:X2}", vinfBuff[2], vinfBuff[3], vinfBuff[4], vinfBuff[5], vinfBuff[6], vinfBuff[7], vinfBuff[8]);
|
||
System.Diagnostics.Trace.WriteLine(MFCODE);
|
||
return result;
|
||
}
|
||
|
||
public static uint bcmp(byte[] buf1, byte[] buf2)
|
||
{
|
||
for (int i = 0; i < 10; i++)
|
||
{
|
||
if (buf1[i] != buf2[i]) return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ラベル出力
|
||
//====================================================================================================================
|
||
public uint SO_PrnOut()
|
||
{
|
||
if (MOCK_HW || SO_MLC == null)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine("**** [DEMO] 擬似印刷(実機なし) ****");
|
||
return 0;
|
||
}
|
||
uint Result = 0;
|
||
string Status = "";
|
||
|
||
System.Diagnostics.Trace.WriteLine("**** プリンタ起動 ****");
|
||
|
||
if (Result != 0) return Result;
|
||
return Result;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// プリンタ初期化
|
||
//====================================================================================================================
|
||
private bool SO_PrnInit()
|
||
{
|
||
if (MOCK_HW || SO_MLC == null) return true;
|
||
|
||
int Result = 0;
|
||
|
||
SO_MLC.LayoutFile = str_layoutFile;
|
||
SO_MLC.PrnData = "1";
|
||
SO_MLC.Setting = "USB:";
|
||
SO_MLC.Protocol = (Protocols)1;
|
||
|
||
Result = SO_MLC.OpenPort(1);
|
||
if (Result != 0) return false;
|
||
|
||
SO_MLC.EjectCut = true;
|
||
SO_MLC.MultiCut = 1;
|
||
|
||
return true;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ラベル編集
|
||
//====================================================================================================================
|
||
private uint SO_PrnLabeEdit(uint type)
|
||
{
|
||
if (SO_DBPrndat_pname() != 0) return 1;
|
||
if (SO_DBPrndat_usubj1(type) != 0) return 1;
|
||
if (SO_DBPrndat_contid() != 0) return 1;
|
||
if (SO_DBPrndat_cperiod(type) != 0) return 1;
|
||
if (SO_DBPrndat_sis(type) != 0) return 1;
|
||
if (SO_DBPrndat_cname() != 0) return 1;
|
||
|
||
if (SO_MLC != null)
|
||
{
|
||
SO_MLC.SetPrnDataField("駐車場名", str_Prndat[0]);
|
||
SO_MLC.SetPrnDataField("定期種別", str_Prndat[1]);
|
||
SO_MLC.SetPrnDataField("場所種別", str_Prndat[2]);
|
||
SO_MLC.SetPrnDataField("開始日", str_Prndat[3]);
|
||
SO_MLC.SetPrnDataField("終了月", str_Prndat[4]);
|
||
SO_MLC.SetPrnDataField("再発行", str_Prndat[5]);
|
||
SO_MLC.SetPrnDataField("定期番号", str_Prndat[6]);
|
||
SO_MLC.SetPrnDataField("自治体名", str_Prndat[7]);
|
||
SO_MLC.SetPrnDataField("発行枚数", "1");
|
||
SO_MLC.EjectCut = true;
|
||
SO_MLC.MultiCut = 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// 串口数据到达
|
||
//====================================================================================================================
|
||
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
|
||
{
|
||
if (serialPort1.IsOpen == false)
|
||
{
|
||
QRresult = 2;
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
date1 = DateTime.Now;
|
||
QRdata = serialPort1.ReadExisting();
|
||
System.Text.Encoding hEncoding = System.Text.Encoding.GetEncoding("utf-32");
|
||
QRresult = 1;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
QRdata = ex.Message;
|
||
QRresult = 2;
|
||
}
|
||
|
||
date1 = DateTime.Now;
|
||
|
||
TimeSpan tc = date1 - date2;
|
||
int second = tc.Seconds;
|
||
bool isEqual = QRdata.SequenceEqual(QRdata2);
|
||
|
||
if ((second < 2) && (isEqual))
|
||
{
|
||
QRresult = 10;
|
||
}
|
||
// 为了方便联调,强制改成固定 QR(可注释掉)
|
||
QRdata = "QRID1234";
|
||
|
||
QRdata2 = QRdata;
|
||
date2 = date1;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// IFD/カード/APIオブジェクトの生成
|
||
//====================================================================================================================
|
||
private uint CreateObject_Ex()
|
||
{
|
||
if ((ifd != null) || (icc != null) || (mif != null)) ReleaseAid_Ex();
|
||
|
||
ifd = Activator.CreateInstance(Type.GetTypeFromProgID("IFD.RW"));
|
||
if (ifd == null) return (1);
|
||
|
||
icc = Activator.CreateInstance(Type.GetTypeFromProgID("ICC.Card"));
|
||
if (icc == null) return (1);
|
||
|
||
mif = Activator.CreateInstance(Type.GetTypeFromProgID("Mifare.API"));
|
||
if (mif == null) return (1);
|
||
|
||
return (AidConst.NORMALEND);
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// IFD/カード/APIオブジェクトに対するSetUp
|
||
//====================================================================================================================
|
||
private uint ObjectSetUp_Ex()
|
||
{
|
||
uint result = 0;
|
||
string portName = "";
|
||
short i = 0;
|
||
|
||
for (i = 1; i <= 9; i++)
|
||
{
|
||
portName = "COM" + Convert.ToString(i);
|
||
result = (uint)ifd.SetUp("PR", ref portName);
|
||
if (result == AidConst.NORMALEND) break;
|
||
}
|
||
if (result != AidConst.NORMALEND) return 1;
|
||
|
||
result = (uint)icc.SetUp("AM:MIF", ref ifd);
|
||
if (result != AidConst.NORMALEND) return 1;
|
||
|
||
result = (uint)mif.SetUp(ref icc);
|
||
if (result != AidConst.NORMALEND) return 1;
|
||
|
||
return result;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// IFD/カード/APIオブジェクトの開放
|
||
//====================================================================================================================
|
||
private void ReleaseAid_Ex()
|
||
{
|
||
if (mif != null)
|
||
{
|
||
Marshal.ReleaseComObject(mif);
|
||
mif = null;
|
||
}
|
||
if (icc != null)
|
||
{
|
||
Marshal.ReleaseComObject(icc);
|
||
icc = null;
|
||
}
|
||
if (ifd != null)
|
||
{
|
||
Marshal.ReleaseComObject(ifd);
|
||
ifd = null;
|
||
}
|
||
System.GC.Collect();
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ホストとリーダライタ間での相互認証
|
||
//====================================================================================================================
|
||
private uint RW_Authentication_Ex()
|
||
{
|
||
uint result = 0;
|
||
uint vtag;
|
||
byte[] vinfBuff = new byte[257];
|
||
uint vbuffSize = 0;
|
||
uint vinfLen = 0;
|
||
byte[] vvalue = {0x03,
|
||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||
0x00,
|
||
0x00,
|
||
0x00};
|
||
|
||
vtag = 0x4088010; // 制御タグ値
|
||
vbuffSize = 256;
|
||
|
||
result = (uint)ifd.SetControl(vtag, ref vvalue, out vinfBuff, vbuffSize, out vinfLen);
|
||
if (result != AidConst.NORMALEND) return result;
|
||
|
||
Array.Clear(vvalue, 0, vvalue.Length);
|
||
vinfLen = 0;
|
||
|
||
vtag = 0x4088003;
|
||
vvalue[0] = 0;
|
||
|
||
result = (uint)ifd.SetControl(ref vtag, ref vvalue, ref vinfBuff, ref vbuffSize, ref vinfLen);
|
||
return result;
|
||
}
|
||
//====================================================================================================================
|
||
// EndTransactionを実行し、カードを開放
|
||
//====================================================================================================================
|
||
private uint ReleaseCard_Ex()
|
||
{
|
||
uint result;
|
||
int vmode;
|
||
|
||
|
||
vmode = 0; // 開放条件:モード0
|
||
|
||
// カードオブジェクトを使用したEndTransactionの実行
|
||
result = (uint)icc.EndTransaction(ref vmode);
|
||
|
||
return result;
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// FormClosing
|
||
//====================================================================================================================
|
||
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
try { if (DBconnect != null && DBconnect.State != ConnectionState.Closed) DBconnect.Close(); } catch { }
|
||
|
||
if (EndType < 3) return;
|
||
|
||
try { if (SO_MLC != null) SO_MLC.ClosePort(); } catch { }
|
||
if (EndType == 3) return;
|
||
|
||
try { if (icc != null) ReleaseCard_Ex(); } catch { }
|
||
if (EndType == 4) return;
|
||
|
||
try { if (serialPort1 != null && serialPort1.IsOpen) serialPort1.Close(); } catch { }
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// コンフィグファイル読み出し
|
||
//====================================================================================================================
|
||
class ConRead
|
||
{
|
||
public static uint ReadConFile(ref string[] con)
|
||
{
|
||
try
|
||
{
|
||
using (StreamReader sr1 = new StreamReader(Form1.CONFIG_PATH, System.Text.Encoding.GetEncoding("shift_jis")))
|
||
{
|
||
int i = 0;
|
||
string a = "";
|
||
while ((a = sr1.ReadLine()) != null && i < con.Length)
|
||
{
|
||
if (a.Length > 0)
|
||
{
|
||
string s1 = a.Substring(0, 1);
|
||
if (s1 != "#")
|
||
{
|
||
con[i++] = a;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (i < con.Length)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine("設定ファイルの項目数が不足しています。期待値: " + con.Length + ", 実際: " + i);
|
||
return 1;
|
||
}
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
System.Diagnostics.Trace.WriteLine(e.Message);
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// ログファイル読み出し
|
||
//====================================================================================================================
|
||
class Logfile
|
||
{
|
||
public static uint ReadLogFile()
|
||
{
|
||
string[,] work = new string[Form1.OutLogNum, 8];
|
||
int ei = 0;
|
||
|
||
for (int i = 0; i < Form1.OutLogNum; i++)
|
||
{
|
||
for (int j = 0; j < 8; j++)
|
||
{
|
||
work[i, j] = "";
|
||
}
|
||
}
|
||
|
||
DirectoryInfo dir = new DirectoryInfo(Form1.LogfilePath);
|
||
if (!dir.Exists)
|
||
{
|
||
for (int i = 0; i < Form1.OutLogNum; i++)
|
||
{
|
||
for (int j = 0; j < 8; j++)
|
||
{
|
||
Form1.koumoku[i, j] = "";
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
FileInfo[] files = dir.GetFiles();
|
||
|
||
if (files.Length == 0)
|
||
{
|
||
for (int i = 0; i < Form1.OutLogNum; i++)
|
||
{
|
||
for (int j = 0; j < 8; j++)
|
||
{
|
||
Form1.koumoku[i, j] = "";
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
Array.Sort<FileInfo>(files, delegate (FileInfo a, FileInfo b)
|
||
{
|
||
return a.Name.CompareTo(b.Name);
|
||
});
|
||
Array.Reverse(files);
|
||
|
||
string DispLogfile = Form1.LogfilePath + files[0].Name;
|
||
|
||
try
|
||
{
|
||
using (var sr = new System.IO.StreamReader(DispLogfile, System.Text.Encoding.GetEncoding("shift_jis")))
|
||
{
|
||
int i1 = 0;
|
||
while (!sr.EndOfStream && i1 < Form1.OutLogNum)
|
||
{
|
||
ei = i1;
|
||
|
||
var line = sr.ReadLine();
|
||
if (string.IsNullOrEmpty(line)) continue;
|
||
|
||
var values = line.Split(',');
|
||
int i2 = 0;
|
||
foreach (var value in values)
|
||
{
|
||
if (i2 < 8)
|
||
{
|
||
work[i1, i2++] = value ?? "";
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
System.Diagnostics.Trace.WriteLine("{0} ", value);
|
||
}
|
||
|
||
while (i2 < 8)
|
||
{
|
||
work[i1, i2++] = "";
|
||
}
|
||
|
||
i1++;
|
||
}
|
||
|
||
for (int i = 0; i < Form1.OutLogNum; i++)
|
||
{
|
||
if (ei >= 0 && ei < Form1.OutLogNum)
|
||
{
|
||
for (int j = 0; j < 8; j++)
|
||
{
|
||
Form1.koumoku[i, j] = work[ei, j] ?? "";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int j = 0; j < 8; j++)
|
||
{
|
||
Form1.koumoku[i, j] = "";
|
||
}
|
||
}
|
||
ei--;
|
||
if (ei < 0) ei = Form1.OutLogNum - 1;
|
||
}
|
||
}
|
||
}
|
||
catch (System.Exception e)
|
||
{
|
||
System.Console.WriteLine(e.Message);
|
||
|
||
for (int i = 0; i < Form1.OutLogNum; i++)
|
||
{
|
||
for (int j = 0; j < 8; j++)
|
||
{
|
||
Form1.koumoku[i, j] = "";
|
||
}
|
||
}
|
||
return 1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
//====================================================================================================================
|
||
// Keep Alive
|
||
//====================================================================================================================
|
||
public static class KEEPALIVE
|
||
{
|
||
public static System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
|
||
|
||
public static void TIM_Main()
|
||
{
|
||
timer.Tick += new EventHandler(MyTimer);
|
||
timer.Interval = Convert.ToInt32(Form1.str_Confile[7]) * 60000;
|
||
timer.Enabled = true;
|
||
System.Diagnostics.Trace.WriteLine("-----------");
|
||
System.Diagnostics.Trace.WriteLine(timer.Interval);
|
||
}
|
||
|
||
public static void MyTimer_stop()
|
||
{
|
||
timer.Enabled = false;
|
||
}
|
||
|
||
public static void MyTimer_start()
|
||
{
|
||
timer.Enabled = true;
|
||
}
|
||
|
||
public static void MyTimer(object sender, EventArgs e)
|
||
{
|
||
MyTimer_stop();
|
||
|
||
DateTime dtNow = DateTime.Now;
|
||
string str_stat = "";
|
||
string use_mem = "";
|
||
string free_mem = "";
|
||
|
||
System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();
|
||
System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_OperatingSystem");
|
||
System.Management.ManagementObjectCollection moc = mc.GetInstances();
|
||
|
||
foreach (System.Management.ManagementObject mo in moc)
|
||
{
|
||
free_mem = Convert.ToString(mo["FreePhysicalMemory"]);
|
||
mo.Dispose();
|
||
}
|
||
|
||
moc.Dispose();
|
||
mc.Dispose();
|
||
|
||
use_mem = Convert.ToString(p.WorkingSet64 / 1000);
|
||
str_stat = "使用メモリ:[" + use_mem + "] 空きメモリ:[" + free_mem + "]";
|
||
|
||
string Insert_SQL = "INSERT INTO hardware_check_log (device_id, status, status_comment, created_at) VALUES (" + Form1.KpAlive_devid + ",1,'" + str_stat + "','" + dtNow + "');";
|
||
|
||
Form1.SO_DBKpAlive(Insert_SQL);
|
||
|
||
System.Diagnostics.Trace.WriteLine("-----------");
|
||
System.Diagnostics.Trace.WriteLine(timer.Interval);
|
||
|
||
MyTimer_start();
|
||
}
|
||
}
|
||
}
|