#define TRACE
#define DEBUG
using Citizen.LayoutUtilities.Printing;
using com.citizen.sdk.LabelPrint;
using MySql.Data.MySqlClient;
using PCSC;
using PCSC.Exceptions;
using PCSC.Iso7816;
using SoM_PrnControl;
using SoM_PrnControl.YoyakuServiceReference;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Printing;
using System.Dynamic;
using System.Globalization;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.NetworkInformation;
using System.Reflection;
using System.Runtime.InteropServices;
using System.ServiceModel;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Xml;


namespace qk30ic;

public class Form1 : Form
{
	public string Tag_LED = "IT0\rID0\r";

	public string Tag_LED_ERR = "IT1\rID4\r";

	public static string LogfileName = "";

	public static string LogfilePath = "";

	public const int OutLogNum = 15;

	public const int OutConfNum = 34;

	public const int RESTART_TIME = 60;

	public static string[,] koumoku = new string[15, 8];

	public static string[] str_Confile = new string[34];

	public static int GIP_NUM = 12;

	public static int MSG_NUM = 13;

	public static string str_layoutFile = "";

	public static string READGIP = "";

	public static string HTTPGIP = "";

	public static string CONFIG_PATH = "SOM_config.dat";

	public static string TESTQR_STRING = "So-Manager TestQR";

	private dynamic ifd = null;

	private dynamic mif = null;

	private dynamic icc = null;

	public static string readerName = "Circle CIR315 CL 0";

	public static string QRdata = "";

	public static string QRdata2 = "";

	public static byte[] vinfBuff = new byte[257];

	public static byte[] vinfBuff2 = new byte[257];

	public static uint QRresult = 0u;

	public static uint MFresult = 10u;

	public static string MFCODE = "";

	public static string MFCODE_CHK = "4400";

	public static int Retry_num = 5;

	public static string DB_PORT_NUMBER;

	public static string DB_NAME;

	public static string ERRORINFO = "";

	public static string DEBUG_MODE = "0";

	public static string BEEP_MODE = "1";

	public static string TodayLogName;

	public static string ReceptionType = "";

	private Form2 form2 = new Form2();

	public int EndType = 0;

	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_PRNPM1 = 50;

	public const int ERROR_CODE_PRNPM2 = 51;

	public const int ERROR_CODE_PRNPM3 = 52;

	public const int ERROR_CODE_PRNPM4 = 53;

	public const int ERROR_CODE_CONFRD = 80;

	public const int ERROR_CODE_LOGFRD = 111;

	public const int ERROR_CODE_LOGFWR = 112;

	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 = 200;

	public const int ERROR_CODE_MFIINI = 300;

	public const int ERROR_CODE_QRCINI = 301;

	public const int ERROR_CODE_DBERR = 113;

	public const int ERROR_CODE_PRNERR = 201;

	public const int ERROR_CODE_QRCERR = 303;

	public const int ERROR_CODE_MFIERR = 302;

	public const int ERROR_CODE_QRTEST = 400;

	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;

	public const int LETYPE_PRNPR1 = 81;

	public const int LETYPE_PRNPR2 = 82;

	public const int LETYPE_PRNPR3 = 83;

	public const int LETYPE_PRNPR4 = 84;

	public const int LETYPE_PRNPR5 = 85;

	public const int LETYPE_PRNPR6 = 86;

	public const int LETYPE_PRNPR7 = 87;

	public const int LETYPE_PRNPR8 = 88;

	public const int LETYPE_QRTEST = 90;

	public const int LETYPE_ISDQRC = 91;

	public const int LETYPE_ISDMFC = 92;

	public const int LETYPE_UNPMFC = 93;

	public const int LETYPE_NWERR = 100;

	public static string connectionParams;

	public static string genmenQR = "Bf7EW8ZMNMCoqaOVA1qyR7pQD03qFRYXKDMIuzDLH3vEhjoQ25rRa0VYBC+SW+JO";

	public string DBREAD_print_layout = "select print_layout from park, city where park.city_id=city.city_id and park.park_id=";

	public string[] DBREAD_Prndat01 = new string[4] { "select distinct ta3.contract_id, ta3.park_id, t1.park_name, t3.ptype_subject, t4.city_name, ta1.user_seq, ta1.user_id, ta2.usertype_subject1, ta3.contract_periods, ta3.contract_periode, ta3.contract_id, ta3.contract_seal_issue, ta3.printable_date, ta3.contract_flag, ta3.contract_permission, ta3.pplace_no, CAST(ta3.tag_qr_flag AS CHAR) AS tag_qr_flag, t5.zone_name from (park t1 ,user ta1) inner join price_a t2 on t1.park_id = t2.park_id inner join ptype t3 on t2.ptype_id = t3.ptype_id inner join city t4 on t1.city_id = t4.city_id inner join regular_contract ta3 on ta1.user_seq = ta3.user_id join usertype ta2 on ta3.user_categoryid = ta2.user_categoryid and ta3.price_parkplaceid = t2.price_parkplaceid left join zone t5 on ta3.zone_id = t5.zone_id where ta3.park_id = t1.park_id and ta3.contract_flag = 1 and ta3.contract_permission = 1 ", "select distinct t1.park_name, t3.ptype_subject, t4.city_name ,ta1.user_seq, ta1.user_id, ta2.usertype_subject1, ta3.contract_periods, ta3.contract_periode, ta3.contract_id, ta3.contract_seal_issue, ta3.printable_date, ta3.contract_flag, ta3.contract_permission, ta3.pplace_no, CAST(ta3.tag_qr_flag AS CHAR) AS tag_qr_flag, ta3.park_id, t5.zone_name from (park t1, user ta1, usertype ta2) inner join price_a t2 on t1.park_id = t2.park_id inner join ptype t3 on t2.ptype_id = t3.ptype_id inner join city t4 on t1.city_id = t4.city_id inner join regular_contract ta3 on ta3.user_categoryid=ta2.user_categoryid and ta3.price_parkplaceid = t2.price_parkplaceid left join zone t5 on ta3.zone_id = t5.zone_id where ta3.park_id = t1.park_id and ta1.user_seq = ta3.user_id and ", "select distinct ta3.contract_id, ta3.park_id, t1.park_name, t3.ptype_subject, t4.city_name, ta1.user_seq, ta1.user_id, ta2.usertype_subject1, ta3.contract_periods, ta3.contract_periode, ta3.contract_id, ta3.contract_seal_issue, ta3.printable_date, ta3.contract_flag, ta3.contract_permission, ta3.pplace_no, ta3.tag_qr_flag, t5.zone_name from (park t1 ,user ta1) inner join price_a t2 on t1.park_id = t2.park_id inner join ptype t3 on t2.ptype_id = t3.ptype_id inner join city t4 on t1.city_id = t4.city_id inner join regular_contract ta3 on ta1.user_seq = ta3.user_id INNER JOIN new_contract ON new_contract.contract_id = ta3.contract_id join usertype ta2 on ta3.user_categoryid = ta2.user_categoryid and ta3.price_parkplaceid = t2.price_parkplaceid left join zone t5 on ta3.zone_id = t5.zone_id where new_contract.type = 1 and new_contract.validity = 1 ", "select distinct ta3.contract_id, ta3.park_id, t1.park_name, t3.ptype_subject, t4.city_name, ta1.user_seq, ta1.user_id, ta2.usertype_subject1, ta3.contract_periods, ta3.contract_periode, ta3.contract_id, ta3.contract_seal_issue, ta3.printable_date, ta3.contract_flag, ta3.contract_permission, ta3.pplace_no, ta3.tag_qr_flag, t5.zone_name from (park t1 ,user ta1) inner join price_a t2 on t1.park_id = t2.park_id inner join ptype t3 on t2.ptype_id = t3.ptype_id inner join city t4 on t1.city_id = t4.city_id inner join regular_contract ta3 on ta1.user_seq = ta3.user_id join usertype ta2 on ta3.user_categoryid = ta2.user_categoryid and ta3.price_parkplaceid = t2.price_parkplaceid left join zone t5 on ta3.zone_id = t5.zone_id where ta3.park_id = t1.park_id " };

	public string[] DBREAD_Prndat02 = new string[4] { " and ta1.user_tag_serial = ", " ta3.contract_qr_id = ", " and ta1.user_tag_serial = ", " and ta1.user_tag_serial = " };

	public string LOC_contract_id = " ";

	public string LOC_park_id = " ";

	public string[] str_logkm = new string[8];

	public static string[] str_rctbl = new string[10];

	public static string KpAlive_devid = "";

	public string[] str_Prndat = new string[13];

	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 string Prn_ParkName_Contract;

	public static string Tag_ParkID;

	public static string vertext;

	public static MySqlConnection DBconnect;

	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);

	public static string str_uid = " ";

	public static string str_park_name = "";

	public static int[] park_id_set = new int[500];

	public static bool test_mode = false;

	public static LabelPrinter printer = new LabelPrinter();
    private EpsonPrinterTMM30Service epsonPrinter;

    public Dictionary<string, string> PrnDataField = new Dictionary<string, string>();

	private string printerPortName = "";

	public string genmenUsercode = "";

	public bool genmenFlg = false;

	public bool genmenFlg_2 = false;

	private static dynamic kessaiYoyakuArray;

	private Button kessaiButton;

	private Label kessaiLabel;

	private static bool view_mode = false;

	public bool waiting = true;

	private string page_name = null;

	private string[,] storeArray = new string[5, 3]
	{
		{ "1", "セブンイレブン", "SRJ" },
		{ "3", "ファミリーマート", "SRI" },
		{ "5", "デイリーヤマザキ", "SRI" },
		{ "2", "ローソン", "SRI" },
		{ "4", "ミニストップ", "SRI" }
	};

	private IContainer components = null;

	private Button button1;

	private SerialPort serialPort1;

	private DataGridView dataGridView1;

	private Label label2;

	private Label label1;
    private bool quitRequested = false;

    public Form1()
	{
		InitializeComponent();
        // 允许点 × 或 Alt+F4 时安全退出
        // 允许 Esc / × / Alt+F4 时安全退出（不做耗时操作）
        this.FormClosing += (s, e) =>
        {
            // 只做“发信号”，不要做耗时清理；清理放到主循环外的 EndProc()
            quitRequested = true;     // 让所有 while(!quitRequested) 失效
            EndType = 10;             // 你的循环里 EndType==10 会触发退出
            genmenFlg_2 = true;       // 让外层分支走到 else
            QRresult = 2;             // 你的代码：QRresult==2 -> SO_ComCont(50, ...) -> break
            MFresult = 11;            // >10 也会触发错误分支并跳出

          

            // 立刻把焦点和消息泵让出来
            BeginInvoke(new Action(() => { /* 空，使关闭事件尽快返回 */ }));
        };
        base.TopMost = false;
	}

	private int CheckNewContractRenewalPeriod(int contract_id)
	{
		string cmdText = "\r\n            SELECT rc.*, p.*\r\n            FROM regular_contract rc\r\n            INNER JOIN park p ON rc.park_id = p.park_id\r\n            WHERE rc.contract_id = @contract_id;";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.Parameters.AddWithValue("@contract_id", contract_id);
		MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
		if (mySqlDataReader.Read())
		{
			DateTime now = DateTime.Now;
			DateTime dateTime = now;
			int num = int.Parse((string)mySqlDataReader["update_grace_period_start_date"]);
			TimeSpan timeSpan = TimeSpan.Parse((string)mySqlDataReader["update_grace_period_start_time"]);
			int num2 = int.Parse((string)mySqlDataReader["update_grace_period_end_date"]);
			TimeSpan timeSpan2 = TimeSpan.Parse((string)mySqlDataReader["update_grace_period_end_time"]);
			DateTime dateTime2;
			if (num > DateTime.DaysInMonth(dateTime.Year, dateTime.Month))
			{
				int day = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
				dateTime2 = new DateTime(dateTime.Year, dateTime.Month, day) + timeSpan;
			}
			else
			{
				dateTime2 = new DateTime(dateTime.Year, dateTime.Month, num) + timeSpan;
			}
			if (dateTime2 > now)
			{
				dateTime = dateTime.AddMonths(-1);
				if (num > DateTime.DaysInMonth(dateTime.Year, dateTime.Month))
				{
					int day2 = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
					dateTime2 = new DateTime(dateTime.Year, dateTime.Month, day2) + timeSpan;
				}
				else
				{
					dateTime2 = new DateTime(dateTime.Year, dateTime.Month, num) + timeSpan;
				}
			}
			if (num2 <= 19)
			{
				dateTime = dateTime.AddMonths(1);
			}
			DateTime dateTime3;
			if (num2 > DateTime.DaysInMonth(dateTime.Year, dateTime.Month))
			{
				int day3 = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
				dateTime3 = new DateTime(dateTime.Year, dateTime.Month, day3) + timeSpan2;
			}
			else
			{
				dateTime3 = new DateTime(dateTime.Year, dateTime.Month, num2) + timeSpan2;
			}
			mySqlDataReader.Close();
			Debug.WriteLine("☆☆現在の日: " + now.ToString("yyyy-MM-dd HH:mm:ss"));
			Debug.WriteLine("☆☆更新期間開始日: " + dateTime2.ToString("yyyy-MM-dd HH:mm:ss"));
			Debug.WriteLine("☆☆更新期間終了日: " + dateTime3.ToString("yyyy-MM-dd HH:mm:ss"));
			if (now >= dateTime2 && now <= dateTime3)
			{
				return 1;
			}
		}
		mySqlDataReader.Close();
		ShowContractRenewalPeriodErr();
		return 0;
	}

	private int CheckContractRenewalPeriod(int contract_id)
	{
		string cmdText = "\r\n            SELECT rc.*, p.*\r\n            FROM regular_contract rc\r\n            INNER JOIN park p ON rc.park_id = p.park_id\r\n            WHERE rc.contract_id = @contract_id;";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.Parameters.AddWithValue("@contract_id", contract_id);
		MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
		if (mySqlDataReader.Read())
		{
			DateTime dateTime = DateTime.Now;
			int num = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
			DateTime now = DateTime.Now;
			int num2 = int.Parse((string)mySqlDataReader["update_grace_period_start_date"]);
			TimeSpan timeSpan = TimeSpan.Parse((string)mySqlDataReader["update_grace_period_start_time"]);
			int num3 = int.Parse((string)mySqlDataReader["update_grace_period_end_date"]);
			TimeSpan timeSpan2 = TimeSpan.Parse((string)mySqlDataReader["update_grace_period_end_time"]);
			string s = mySqlDataReader["contract_periode"].ToString();
			DateTime dateTime2 = DateTime.ParseExact(s, "yyyy/MM/dd H:mm:ss", null).AddDays(1.0);
			mySqlDataReader.Close();
			DateTime dateTime3;
			if (num2 > DateTime.DaysInMonth(dateTime.Year, dateTime.Month))
			{
				int day = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
				dateTime3 = new DateTime(dateTime.Year, dateTime.Month, day) + timeSpan;
			}
			else
			{
				dateTime3 = new DateTime(dateTime.Year, dateTime.Month, num2) + timeSpan;
			}
			if (dateTime3 > now)
			{
				dateTime = dateTime.AddMonths(-1);
				if (num2 > DateTime.DaysInMonth(dateTime.Year, dateTime.Month))
				{
					int day2 = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
					dateTime3 = new DateTime(dateTime.Year, dateTime.Month, day2) + timeSpan;
				}
				else
				{
					dateTime3 = new DateTime(dateTime.Year, dateTime.Month, num2) + timeSpan;
				}
			}
			if (num3 <= 19)
			{
				dateTime = dateTime.AddMonths(1);
			}
			DateTime dateTime4;
			if (num3 > DateTime.DaysInMonth(dateTime.Year, dateTime.Month))
			{
				int day3 = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
				dateTime4 = new DateTime(dateTime.Year, dateTime.Month, day3) + timeSpan;
			}
			else
			{
				dateTime4 = new DateTime(dateTime.Year, dateTime.Month, num3) + timeSpan2;
			}
			if (now >= dateTime3 && now <= dateTime4 && dateTime2 >= dateTime3 && dateTime2 <= dateTime4 && dateTime2 >= dateTime3 && dateTime2 <= dateTime4)
			{
				return 1;
			}
		}
		mySqlDataReader.Close();
		ShowContractRenewalPeriodErr();
		return 0;
	}

	private void KessaiKikanErrButton_Click(object sender, EventArgs e)
	{
		waiting = false;
	}

	private void ShowContractRenewalPeriodErr()
	{
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_err_01.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		Button button = new Button
		{
			Name = "KessaiKikanErrButton",
			FlatStyle = FlatStyle.Flat,
			BackColor = Color.Transparent,
			ForeColor = Color.Transparent,
			Size = new Size(500, 100),
			Location = new Point(420, 630)
		};
		button.FlatAppearance.BorderSize = 0;
		button.FlatAppearance.MouseOverBackColor = Color.Transparent;
		button.FlatAppearance.MouseDownBackColor = Color.Transparent;
		button.Click += KessaiKikanErrButton_Click;
		form2.Controls.Add(button);
		Application.DoEvents();
		DateTime now = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now).TotalSeconds < 5.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		form2.Controls.Remove(button);
		Application.DoEvents();
	}

	private int CheckContractRenewal(string usercode)
	{
		int result = 0;
		genmenUsercode = usercode;
		string text = "select distinct t2.user_id, t2.contract_id, t2.contract_flag, t2.contract_permission, t2.contract_renewal from (user t1, regular_contract t2) where t1.user_seq = t2.user_id and t1.user_tag_serial='" + usercode + "' and t1.user_quit_flag = 0 and t1.tag_qr_flag = 0 and t2.contract_flag = 1 and  t2.contract_renewal IS NULL AND (t2.contract_cancel_flag NOT IN (1, 2) OR t2.contract_cancel_flag IS NULL) ORDER BY t2.updated_at DESC , t2.contract_id DESC LIMIT 1;";
		Debug.WriteLine("\u3000〓〓更新情報取得:" + text);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				result = int.Parse(Convert.ToString(mySqlDataReader["contract_id"]));
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "更新用データのチェック時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
		}
		return result;
	}

	private int CheckNewContract(string MFCODE)
	{
		int num = -1;
		int num2 = -1;
		int result = -1;
		int contract_id = 0;
		string text = "SELECT * FROM user INNER JOIN regular_contract ON user.user_seq = regular_contract.user_id INNER JOIN new_contract ON new_contract.contract_id = regular_contract.contract_id WHERE user.user_tag_serial = '" + MFCODE + "' AND user.user_quit_flag = 0 AND user.tag_qr_flag = 0  ;";
		Debug.WriteLine("\u3000〓〓new_contract情報取得:" + text);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				num = mySqlDataReader.GetByte(mySqlDataReader.GetOrdinal("validity"));
				num2 = mySqlDataReader.GetByte(mySqlDataReader.GetOrdinal("type"));
				contract_id = int.Parse(Convert.ToString(mySqlDataReader["contract_id"]));
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "更新用データのチェック時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
		}
		if (num == 0)
		{
			result = -1;
		}
		if (num == 1)
		{
			result = num2;
			if (CheckNewContractRenewalPeriod(contract_id) == 0)
			{
				result = 3;
			}
		}
		return result;
	}

	private int CheckGenmen(string usercode, int oldContractID)
	{
		view_mode = true;
		string text = "";
		string text2 = "";
		string text3 = "";
		string text4 = "";
		string s = "";
		string s2 = "";
		string text5 = "";
		string text6 = "SELECT rc.*, ut.usertype_subject1, ut.usertype_subject3, p.student_id_confirm_type, rec.reduction_confirm_type FROM regular_contract rc JOIN usertype ut ON rc.user_categoryid = ut.user_categoryid JOIN park p ON rc.park_id = p.park_id LEFT JOIN reduction_confirm rec ON rc.park_id = rec.park_id AND rc.user_categoryid = rec.user_categoryid WHERE rc.contract_id = '" + oldContractID + "'; ";
		Debug.WriteLine("\u3000〓〓更新情報取得:" + text6);
		MySqlCommand mySqlCommand = new MySqlCommand(text6, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				s = mySqlDataReader["park_id"].ToString();
				text = mySqlDataReader["contract_money"].ToString();
				text2 = mySqlDataReader["usertype_subject1"].ToString();
				text3 = mySqlDataReader["usertype_subject3"].ToString();
				s2 = mySqlDataReader["contract_periode"].ToString();
				text5 = ((int)mySqlDataReader.GetByte(mySqlDataReader.GetOrdinal("reduction_confirm_type"))).ToString();
				text4 = ((int)mySqlDataReader.GetByte(mySqlDataReader.GetOrdinal("student_id_confirm_type"))).ToString();
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "減免のチェック時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		if (text == "0")
		{
			if (text3 == "該当なし")
			{
				if (!(text2 == "学生"))
				{
					return 0;
				}
				switch (text4)
				{
				case "0":
					return 1;
				case "1":
				{
					int maxMonth = GetMaxMonth(int.Parse(s));
					DateTime dateTime = DateTime.Parse(s2);
					DateTime dateTime2 = new DateTime(dateTime.Year, dateTime.Month, 1).AddMonths(1);
					DateTime dateTime3 = dateTime2.AddMonths(maxMonth);
					DateTime dateTime4 = new DateTime(dateTime3.Year, 4, 1);
					if (dateTime2.Year == dateTime3.Year)
					{
						dateTime4 = dateTime4.AddYears(1);
					}
					if (dateTime3 > dateTime4)
					{
						if (genmenCheckStey())
						{
							return 1;
						}
						return 2;
					}
					return 1;
				}
				case "2":
					if (genmenCheckStey())
					{
						return 1;
					}
					return 2;
				}
			}
			else
			{
				switch (text5)
				{
				case "0":
					return 1;
				case "1":
				{
					int maxMonth2 = GetMaxMonth(int.Parse(s));
					DateTime dateTime5 = DateTime.Parse(s2);
					DateTime dateTime6 = new DateTime(dateTime5.Year, dateTime5.Month, 1).AddMonths(1);
					DateTime dateTime7 = dateTime6.AddMonths(maxMonth2);
					DateTime dateTime8 = new DateTime(dateTime7.Year, 4, 1);
					if (dateTime6.Year == dateTime7.Year)
					{
						dateTime8 = dateTime8.AddYears(1);
					}
					if (dateTime7 > dateTime8)
					{
						if (genmenCheckStey())
						{
							return 1;
						}
						return 2;
					}
					break;
				}
				case "2":
					if (genmenCheckStey())
					{
						return 1;
					}
					return 2;
				}
			}
		}
		else if (text3 == "該当なし")
		{
			if (!(text2 == "学生"))
			{
				return 0;
			}
			switch (text4)
			{
			case "0":
				return 0;
			case "1":
			{
				int maxMonth3 = GetMaxMonth(int.Parse(s));
				DateTime dateTime9 = DateTime.Parse(s2);
				DateTime dateTime10 = new DateTime(dateTime9.Year, dateTime9.Month, 1).AddMonths(1);
				DateTime dateTime11 = dateTime10.AddMonths(maxMonth3);
				DateTime dateTime12 = new DateTime(dateTime11.Year, 4, 1);
				if (dateTime10.Year == dateTime11.Year)
				{
					dateTime12 = dateTime12.AddYears(1);
				}
				if (dateTime11 > dateTime12)
				{
					if (genmenCheckStey())
					{
						return 0;
					}
					return 2;
				}
				break;
			}
			case "2":
				if (genmenCheckStey())
				{
					return 0;
				}
				return 2;
			}
		}
		else
		{
			switch (text5)
			{
			case "0":
				return 0;
			case "1":
			{
				int maxMonth4 = GetMaxMonth(int.Parse(s));
				DateTime dateTime13 = DateTime.Parse(s2);
				DateTime dateTime14 = new DateTime(dateTime13.Year, dateTime13.Month, 1).AddMonths(1);
				DateTime dateTime15 = dateTime14.AddMonths(maxMonth4);
				DateTime dateTime16 = new DateTime(dateTime15.Year, 4, 1);
				if (dateTime14.Year == dateTime15.Year)
				{
					dateTime16 = dateTime16.AddYears(1);
				}
				if (dateTime15 > dateTime16)
				{
					if (genmenCheckStey())
					{
						return 0;
					}
					return 2;
				}
				break;
			}
			case "2":
				if (genmenCheckStey())
				{
					return 0;
				}
				return 2;
			}
		}
		return 0;
	}

	private bool genmenCheckStey()
	{
		genmenFlg = true;
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\QRkakuninn.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		for (int num = form2.Controls.Count - 1; num >= 0; num--)
		{
			Control control = form2.Controls[num];
			if (control.Name == "homeButton")
			{
				control.Click -= HomeButton_Click;
				control.Click += GenmenHomeButton_Click;
			}
		}
		DateTime now = DateTime.Now;
		while (genmenFlg)
		{
			Application.DoEvents();
			if (Convert.ToString(QRresult) != "0")
			{
				KEEPALIVE.MyTimer_stop();
				Debug.WriteLine(Convert.ToString(QRdata));
				SO_QRcordInit();
				SO_MfifareInit();
				if (Convert.ToString(QRdata) == genmenQR)
				{
					genmenFlg = false;
					genmenFlg_2 = true;
					return true;
				}
				genmenFlg = false;
				genmenFlg_2 = true;
				return false;
			}
			if ((DateTime.Now - now).TotalSeconds >= 20.0)
			{
				genmenFlg = false;
				return false;
			}
		}
		genmenFlg = false;
		return false;
	}

	private void GenmenHomeButton_Click(object sender, EventArgs e)
	{
		genmenFlg = false;
	}

	private int GetMaxMonth(int park_id)
	{
		int result = 0;
		Dictionary<string, string> dictionary = new Dictionary<string, string>();
		string cmdText = "SELECT *  FROM park JOIN regular_type ON regular_type.city_id = park.city_id WHERE park.park_id = " + park_id + " ORDER BY park.updated_at DESC LIMIT 1;";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			if (mySqlDataReader.Read())
			{
				dictionary["1"] = mySqlDataReader["regular_class_1"].ToString();
				dictionary["2"] = mySqlDataReader["regular_class_2"].ToString();
				dictionary["3"] = mySqlDataReader["regular_class_3"].ToString();
				dictionary["6"] = mySqlDataReader["regular_class_6"].ToString();
				dictionary["12"] = mySqlDataReader["regular_class_12"].ToString();
			}
			mySqlDataReader.Close();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "契約最大月取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		if (dictionary["12"] == "True")
		{
			return 12;
		}
		if (dictionary["6"] == "True")
		{
			return 6;
		}
		if (dictionary["3"] == "True")
		{
			return 3;
		}
		if (dictionary["2"] == "True")
		{
			return 2;
		}
		if (dictionary["1"] == "True")
		{
			return 1;
		}
		return result;
	}

	private void ZeroenKoushin(string usercode, int oldContractID)
	{
		Bitmap bitmap = null;
		Console.WriteLine("☆☆ゼロ円更新");
		page_name = "ZeroenKoushin";
		view_mode = true;
		Dictionary<string, string> dictionary = new Dictionary<string, string>();
		kessaiYoyakuArray = new ExpandoObject();
		kessaiYoyakuArray.usercode = usercode;
		kessaiYoyakuArray.old_contract_id = Convert.ToString(oldContractID);
		string text = "SELECT DISTINCT rc.user_id, rc.user_categoryid, rc.park_id, rc.price_parkplaceid, rc.user_securitynum, rc.contract_reduction, CAST(rc.psection_id AS CHAR) AS psection_id, rc.zone_id, rc.pplace_no, rc.price_parkplaceid, rc.contract_updated_at, rc.contract_periods, rc.contract_periode, rc.park_position, rc.storage_company_code, rc.share_storage_company_code, rc.pplace_allocation_flag, rc.tag_change_flag, u.user_seq, u.user_mobile, u.user_homephone, u.user_name, u.user_graduate, us.usertype_subject1 FROM regular_contract rc INNER JOIN user u ON rc.user_id = u.user_seq JOIN usertype us ON rc.user_categoryid = us.user_categoryid WHERE rc.contract_id = '" + oldContractID + "';";
		Debug.WriteLine("\u3000〓〓更新情報取得:" + text);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				kessaiYoyakuArray.user_id = mySqlDataReader["user_id"];
				kessaiYoyakuArray.user_categoryid = mySqlDataReader["user_categoryid"];
				kessaiYoyakuArray.park_id = mySqlDataReader["park_id"];
				kessaiYoyakuArray.price_parkplaceid = mySqlDataReader["price_parkplaceid"];
				kessaiYoyakuArray.user_securitynum = mySqlDataReader["user_securitynum"];
				kessaiYoyakuArray.contract_reduction = mySqlDataReader["contract_reduction"];
				kessaiYoyakuArray.user_graduate = mySqlDataReader["park_position"].ToString();
				kessaiYoyakuArray.psection_id = Convert.ToInt32(mySqlDataReader["psection_id"]);
				kessaiYoyakuArray.zone_id = mySqlDataReader["zone_id"];
				kessaiYoyakuArray.pplace_no = mySqlDataReader["pplace_no"];
				kessaiYoyakuArray.storage_company_code = mySqlDataReader["storage_company_code"];
				kessaiYoyakuArray.share_storage_company_code = mySqlDataReader["share_storage_company_code"];
				kessaiYoyakuArray.pplace_allocation_flag = mySqlDataReader["pplace_allocation_flag"];
				kessaiYoyakuArray.user_graduate = mySqlDataReader["user_graduate"].ToString();
				kessaiYoyakuArray.userttype_subject1 = mySqlDataReader["usertype_subject1"];
				kessaiYoyakuArray.user_seq = mySqlDataReader["user_seq"];
				kessaiYoyakuArray.user_mobile = mySqlDataReader["user_mobile"].ToString();
				kessaiYoyakuArray.user_homephone = mySqlDataReader["user_homephone"].ToString();
				kessaiYoyakuArray.user_name = mySqlDataReader["user_name"].ToString();
				kessaiYoyakuArray.old_contract_updated_at = mySqlDataReader["contract_updated_at"].ToString();
				kessaiYoyakuArray.old_contract_periods = mySqlDataReader["contract_periods"].ToString();
				kessaiYoyakuArray.old_contract_periode = mySqlDataReader["contract_periode"].ToString();
				kessaiYoyakuArray.old_tag_change_flag = mySqlDataReader["tag_change_flag"];
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "更新用データのチェック時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		DateTime now = DateTime.Now;
		string cmdText = "\r\n                INSERT INTO regular_contract \r\n                    (old_contract_id, created_at, updated_at, user_id, user_categoryid, park_id, price_parkplaceid, \r\n                    user_securitynum, contract_reduction, contract_flag, update_flag, contract_permission, \r\n                    800m_flag, tag_qr_flag, psection_id, zone_id, pplace_no, storage_company_code, share_storage_company_code, pplace_allocation_flag,contract_cancel_flag,tag_change_flag) \r\n                VALUES \r\n                    (@old_contract_id, @createdAt, @updatedAt, @userId, @userCategoryId, @parkId, @priceParkplaceId, \r\n                    @userSecurityNum, @contractReduction, @contractFlag, @updateFlag, @contractPermission, \r\n                    @eightHundredMFlag, @tagQrFlag, @psectionId, @zoneId, @pplaceNo, @storageCompanyCode, @shareStorageCompanyCode, @pplaceAllocationFlag,@contractCancelFlag,@tag_change_flag);\r\n                SELECT LAST_INSERT_ID();";
		MySqlCommand mySqlCommand2 = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand2.Parameters.AddWithValue("@old_contract_id", kessaiYoyakuArray.old_contract_id);
		mySqlCommand2.Parameters.AddWithValue("@createdAt", now);
		mySqlCommand2.Parameters.AddWithValue("@updatedAt", now);
		mySqlCommand2.Parameters.AddWithValue("@userId", kessaiYoyakuArray.user_id);
		mySqlCommand2.Parameters.AddWithValue("@userCategoryId", kessaiYoyakuArray.user_categoryid);
		mySqlCommand2.Parameters.AddWithValue("@parkId", kessaiYoyakuArray.park_id);
		mySqlCommand2.Parameters.AddWithValue("@priceParkplaceId", kessaiYoyakuArray.price_parkplaceid);
		mySqlCommand2.Parameters.AddWithValue("@userSecurityNum", kessaiYoyakuArray.user_securitynum);
		mySqlCommand2.Parameters.AddWithValue("@contractReduction", kessaiYoyakuArray.contract_reduction);
		mySqlCommand2.Parameters.AddWithValue("@contractFlag", 0);
		mySqlCommand2.Parameters.AddWithValue("@updateFlag", 1);
		mySqlCommand2.Parameters.AddWithValue("@contractPermission", 0);
		mySqlCommand2.Parameters.AddWithValue("@eightHundredMFlag", 0);
		mySqlCommand2.Parameters.AddWithValue("@tagQrFlag", 0);
		mySqlCommand2.Parameters.AddWithValue("@psectionId", kessaiYoyakuArray.psection_id);
		mySqlCommand2.Parameters.AddWithValue("@zoneId", kessaiYoyakuArray.zone_id);
		mySqlCommand2.Parameters.AddWithValue("@pplaceNo", kessaiYoyakuArray.pplace_no);
		mySqlCommand2.Parameters.AddWithValue("@storageCompanyCode", kessaiYoyakuArray.storage_company_code);
		mySqlCommand2.Parameters.AddWithValue("@shareStorageCompanyCode", kessaiYoyakuArray.share_storage_company_code);
		mySqlCommand2.Parameters.AddWithValue("@pplaceAllocationFlag", kessaiYoyakuArray.pplace_allocation_flag);
		mySqlCommand2.Parameters.AddWithValue("@contractCancelFlag", 0);
		mySqlCommand2.Parameters.AddWithValue("@tag_change_flag", kessaiYoyakuArray.old_tag_change_flag);
		try
		{
			MySqlTransaction mySqlTransaction2 = DBconnect.BeginTransaction();
			object obj = mySqlCommand2.ExecuteScalar();
			if (obj != null && obj != DBNull.Value)
			{
				kessaiYoyakuArray.contract_id = Convert.ToInt32(obj);
			}
			mySqlTransaction2.Commit();
			Console.WriteLine("新しいレコードが作成されました。 新しい契約ID: " + kessaiYoyakuArray.contract_id);
		}
		catch (Exception ex2)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex2.Message);
			ERRORINFO = "更新用作成時時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		string text2 = "";
		string text3 = "";
		string s = "";
		string text4 = "";
		string s2 = "";
		int num = 1;
		string text5 = "";
		text = "SELECT * FROM park JOIN regular_type ON regular_type.city_id = park.city_id  JOIN regular_contract ON regular_contract.park_id = park.park_id  JOIN user ON regular_contract.user_id = user.user_seq JOIN usertype ON regular_contract.user_categoryid = usertype.user_categoryid WHERE regular_contract.contract_id = '" + kessaiYoyakuArray.contract_id + "' " + "ORDER BY park.updated_at DESC " + "LIMIT 1; ";
		Debug.WriteLine("\u3000〓〓料金テーブル名取得:" + text);
		mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlDataReader mySqlDataReader2 = mySqlCommand.ExecuteReader();
			if (mySqlDataReader2.Read())
			{
				dictionary["1"] = mySqlDataReader2["regular_class_1"].ToString();
				dictionary["2"] = mySqlDataReader2["regular_class_2"].ToString();
				dictionary["3"] = mySqlDataReader2["regular_class_3"].ToString();
				dictionary["6"] = mySqlDataReader2["regular_class_6"].ToString();
				dictionary["12"] = mySqlDataReader2["regular_class_12"].ToString();
				text2 = mySqlDataReader2["park_name"].ToString();
				text3 = mySqlDataReader2["update_grace_period_start_date"].ToString();
				s = mySqlDataReader2["update_grace_period_start_time"].ToString();
				text4 = mySqlDataReader2["price_parkplaceid"].ToString();
				s2 = mySqlDataReader2["user_graduate"].ToString();
				text5 = mySqlDataReader2["usertype_subject1"].ToString();
				kessaiYoyakuArray.update_grace_period_start_date = text3;
				kessaiYoyakuArray.contract_id = mySqlDataReader2["contract_id"].ToString();
			}
			mySqlDataReader2.Close();
		}
		catch (Exception ex3)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex3.Message);
			ERRORINFO = "ゼロ円更新\u3000契約可能月取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		int day = int.Parse(text3);
		TimeSpan timeSpan = TimeSpan.Parse(s);
		DateTime now2 = DateTime.Now;
		DateTime dateTime;
		try
		{
			dateTime = new DateTime(now2.Year, now2.Month, day, timeSpan.Hours, timeSpan.Minutes, 0);
		}
		catch (ArgumentOutOfRangeException)
		{
			int day2 = DateTime.DaysInMonth(now2.Year, now2.Month);
			dateTime = new DateTime(now2.Year, now2.Month, day2, timeSpan.Hours, timeSpan.Minutes, 0);
		}
		DateTime dateTime2 = ((!(now2 > dateTime)) ? new DateTime(now2.Year, now2.Month, 1) : new DateTime(now2.Year, now2.Month, 1).AddMonths(1));
		Console.WriteLine("契約開始日: " + dateTime2.ToString("yyyy年MM月dd日"));
		kessaiYoyakuArray.contract_updated_at = dateTime.ToString("yyyy-MM-dd");
		kessaiYoyakuArray.contract_periods = dateTime2.ToString("yyyy-MM-dd");
		foreach (KeyValuePair<string, string> item in dictionary)
		{
			bool flag = true;
			if (text5 == "学生")
			{
				DateTime dateTime3 = dateTime2.AddMonths(int.Parse(Convert.ToString(item.Key))).AddDays(-1.0);
				DateTime dateTime4 = DateTime.ParseExact(s2, "yyyy/MM/dd H:mm:ss", null);
				if (dateTime3 > dateTime4)
				{
					flag = false;
				}
			}
			if (item.Value == "True" && flag)
			{
				string key = item.Key;
				string text6 = "0";
				CreateKessaiKikanButton(text4, key, text6, num++);
				string key2 = "kessaiKikan_" + key.ToString() + "_" + text6 + "_" + text4;
				if (form2.Controls.Find(key2, searchAllChildren: true).FirstOrDefault() is Button button)
				{
					button.Click -= KessaiKikanButton_Click;
					button.Click += SOMPR_120Button_Click;
				}
			}
		}
		if (num == 1)
		{
			bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_1_2.png");
			form2.BackgroundImage = bitmap;
			SetHomeButton();
		}
		else
		{
			kessaiButton = new Button();
			kessaiButton.BackgroundImageLayout = ImageLayout.Stretch;
			kessaiButton.FlatStyle = FlatStyle.Flat;
			kessaiButton.FlatAppearance.BorderSize = 0;
			kessaiButton.BackColor = Color.Transparent;
			kessaiButton.BackgroundImage = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\syuuryou_btn.png");
			kessaiButton.Name = "kessaiCancel";
			kessaiButton.Size = new Size(450, 100);
			kessaiButton.Location = new Point(50, 650);
			kessaiButton.Click += KessaiCancelButton_Click;
			form2.Controls.Add(kessaiButton);
		}
		bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_genmen_120.png");
		form2.BackgroundImage = bitmap;
		SetHomeButton();
		Application.DoEvents();
		DateTime now3 = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now3).TotalSeconds < 20.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		if (page_name == "ZeroenKoushin")
		{
			KessaiEnd();
		}
		Application.DoEvents();
	}

	private void SOMPR_120(string type = "")
	{
		Console.WriteLine("☆☆新規契約 (減免) 決済期間選択");
		page_name = "SOMPR_120";
		view_mode = true;
		KessaiPartsRemove();
		Bitmap bitmap = null;
		Dictionary<string, string> dictionary = new Dictionary<string, string>();
		kessaiYoyakuArray = new ExpandoObject();
		string text = "";
		string text2 = "";
		string s = "";
		string text3 = "";
		string s2 = "";
		int num = 1;
		string text4 = "";
		string text5 = "SELECT * FROM park JOIN regular_type ON regular_type.city_id = park.city_id  JOIN regular_contract ON regular_contract.park_id = park.park_id  JOIN user ON regular_contract.user_id = user.user_seq JOIN usertype ON regular_contract.user_categoryid = usertype.user_categoryid INNER JOIN new_contract ON new_contract.contract_id = regular_contract.contract_id WHERE user.user_tag_serial = '" + MFCODE + "' AND new_contract.validity = 1 AND new_contract.type = 1 ORDER BY park.updated_at DESC LIMIT 1; ";
		Debug.WriteLine("\u3000〓〓料金テーブル名取得:" + text5);
		MySqlCommand mySqlCommand = new MySqlCommand(text5, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			if (mySqlDataReader.Read())
			{
				dictionary["1"] = mySqlDataReader["regular_class_1"].ToString();
				dictionary["2"] = mySqlDataReader["regular_class_2"].ToString();
				dictionary["3"] = mySqlDataReader["regular_class_3"].ToString();
				dictionary["6"] = mySqlDataReader["regular_class_6"].ToString();
				dictionary["12"] = mySqlDataReader["regular_class_12"].ToString();
				text = mySqlDataReader["park_name"].ToString();
				text2 = mySqlDataReader["update_grace_period_start_date"].ToString();
				s = mySqlDataReader["update_grace_period_start_time"].ToString();
				text3 = mySqlDataReader["price_parkplaceid"].ToString();
				s2 = mySqlDataReader["user_graduate"].ToString();
				text4 = mySqlDataReader["usertype_subject1"].ToString();
				kessaiYoyakuArray.update_grace_period_start_date = text2;
				kessaiYoyakuArray.contract_id = mySqlDataReader["contract_id"].ToString();
			}
			mySqlDataReader.Close();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "SOMPR_120\u3000契約可能月取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		int day = int.Parse(text2);
		TimeSpan timeSpan = TimeSpan.Parse(s);
		DateTime now = DateTime.Now;
		DateTime dateTime;
		try
		{
			dateTime = new DateTime(now.Year, now.Month, day, timeSpan.Hours, timeSpan.Minutes, 0);
		}
		catch (ArgumentOutOfRangeException)
		{
			int day2 = DateTime.DaysInMonth(now.Year, now.Month);
			dateTime = new DateTime(now.Year, now.Month, day2, timeSpan.Hours, timeSpan.Minutes, 0);
		}
		DateTime dateTime2 = ((!(now > dateTime)) ? new DateTime(now.Year, now.Month, 1) : new DateTime(now.Year, now.Month, 1).AddMonths(1));
		Console.WriteLine("契約開始日: " + dateTime2.ToString("yyyy年MM月dd日"));
		kessaiYoyakuArray.contract_updated_at = dateTime.ToString("yyyy-MM-dd");
		kessaiYoyakuArray.contract_periods = dateTime2.ToString("yyyy-MM-dd");
		foreach (KeyValuePair<string, string> item in dictionary)
		{
			bool flag = true;
			if (text4 == "学生")
			{
				Console.WriteLine("学生のチェック");
				DateTime dateTime3 = dateTime2.AddMonths(int.Parse(Convert.ToString(item.Key))).AddDays(-1.0);
				DateTime dateTime4 = DateTime.ParseExact(s2, "yyyy/MM/dd H:mm:ss", null);
				if (dateTime3 > dateTime4)
				{
					flag = false;
				}
			}
			if (item.Value == "True" && flag)
			{
				string key = item.Key;
				string text6 = "0";
				CreateKessaiKikanButton(text3, key, text6, num++);
				string key2 = "kessaiKikan_" + key.ToString() + "_" + text6 + "_" + text3;
				if (form2.Controls.Find(key2, searchAllChildren: true).FirstOrDefault() is Button button)
				{
					button.Click -= KessaiKikanButton_Click;
					button.Click += SOMPR_120Button_Click;
				}
			}
		}
		if (num == 1)
		{
			bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_1_2.png");
			form2.BackgroundImage = bitmap;
			SetHomeButton();
		}
		else
		{
			kessaiButton = new Button();
			kessaiButton.BackgroundImageLayout = ImageLayout.Stretch;
			kessaiButton.FlatStyle = FlatStyle.Flat;
			kessaiButton.FlatAppearance.BorderSize = 0;
			kessaiButton.BackColor = Color.Transparent;
			kessaiButton.BackgroundImage = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\syuuryou_btn.png");
			kessaiButton.Name = "kessaiCancel";
			kessaiButton.Size = new Size(450, 100);
			kessaiButton.Location = new Point(50, 650);
			kessaiButton.Click += KessaiCancelButton_Click;
			form2.Controls.Add(kessaiButton);
		}
		bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_genmen_120.png");
		form2.BackgroundImage = bitmap;
		SetHomeButton();
		Application.DoEvents();
		DateTime now2 = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now2).TotalSeconds < 20.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		if (page_name == "SOMPR_120")
		{
			KessaiEnd();
		}
		Application.DoEvents();
	}

	private void SOMPR_120Button_Click(object sender, EventArgs e)
	{
		KessaiPartsRemove();
		uint num = 0u;
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic2-1.png");
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		Application.DoEvents();
		Button button = (Button)sender;
		if (!button.Name.StartsWith("kessaiKikan_"))
		{
			return;
		}
		string[] array = button.Name.Split('_');
		kessaiYoyakuArray.enable_months = array[1];
		string text = array[2].Replace(",", "").Replace("円", "");
		kessaiYoyakuArray.billing_amount = text;
		int months = int.Parse(kessaiYoyakuArray.enable_months);
		int num2 = int.Parse(kessaiYoyakuArray.update_grace_period_start_date);
		DateTime dateTime = ((DateTime)DateTime.ParseExact(kessaiYoyakuArray.contract_periods, "yyyy-MM-dd", null)).AddMonths(months).AddDays(-1.0);
		int num3 = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
		dateTime = dateTime.AddDays(num3 - dateTime.Day);
		kessaiYoyakuArray.contract_periode = dateTime.ToString("yyyy-MM-dd");
		DateTime dateTime2 = new DateTime(dateTime.Year, dateTime.Month, num2);
		dateTime2 = ((num2 <= DateTime.DaysInMonth(dateTime.Year, dateTime.Month)) ? new DateTime(dateTime.Year, dateTime.Month, num2, 0, 0, 0) : new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month), 0, 0, 0));
		kessaiYoyakuArray.contract_updated_at = dateTime2.ToString("yyyy-MM-20");
		int num4 = 0;
		str_Prndat = new string[13];
		PrnDataField = new Dictionary<string, string>();
		PrnDataField.Add("駐車場名", "");
		PrnDataField.Add("定期種別", "");
		PrnDataField.Add("場所種別", "");
		PrnDataField.Add("開始日", "");
		PrnDataField.Add("終了月", "");
		PrnDataField.Add("再発行", "");
		PrnDataField.Add("定期番号", "");
		PrnDataField.Add("自治体名", "");
		PrnDataField.Add("利用者ID", "");
		PrnDataField.Add("ゾーン、車室名", "");
		PrnDataField.Add("発行枚数", "");
		PrnDataField.Add("タグ", "");
		PrnDataField.Add("ゾーン", "");
		num4 = (((bool)(((IDictionary<string, object>)kessaiYoyakuArray).ContainsKey("old_contract_id") && !string.IsNullOrEmpty(kessaiYoyakuArray.old_contract_id?.ToString()))) ? SO_DBPrndat_01(3u) : SO_DBPrndat_01(2u));
		if (num4 == 1)
		{
			bool flag = SO_ComCont(40, EndType);
			Debug.WriteLine(" --処理１a  Result " + num4);
			KessaiEnd();
			Bitmap backgroundImage2 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic5.png");
			form2.BackgroundImage = backgroundImage2;
			RemoveHomeButton();
			Debug.WriteLine(" --エラー\u3000 Result " + num4);
			Application.DoEvents();
			Thread.Sleep(3000);
			Bitmap backgroundImage3 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
			form2.BackgroundImage = backgroundImage3;
			RemoveHomeButton();
			Application.DoEvents();
			return;
		}
		PrnDataField["駐車場名"] = str_Prndat[0];
		PrnDataField["定期種別"] = str_Prndat[1];
		PrnDataField["場所種別"] = str_Prndat[2];
		PrnDataField["開始日"] = str_Prndat[3];
		PrnDataField["終了月"] = str_Prndat[4];
		PrnDataField["再発行"] = str_Prndat[5];
		PrnDataField["定期番号"] = str_Prndat[6];
		PrnDataField["自治体名"] = str_Prndat[7];
		PrnDataField["利用者ID"] = str_Prndat[8];
		PrnDataField["ゾーン、車室名"] = str_Prndat[9];
		PrnDataField["タグ"] = str_Prndat[10];
		PrnDataField["ゾーン"] = str_Prndat[11];
		PrnDataField["利用者連番"] = str_Prndat[12];
		PrnDataField["発行枚数"] = "1";
		backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic2-1.png");
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		Application.DoEvents();
		num = SO_PrnOut();
		Debug.WriteLine(" --処理印刷\u3000 result " + num);
		if (num != 0)
		{
			Debug.WriteLine(" --処理１a  bResult " + SO_ComCont(40, EndType));
			KessaiEnd();
			Bitmap backgroundImage4 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic5.png");
			form2.BackgroundImage = backgroundImage4;
			RemoveHomeButton();
			Debug.WriteLine(" --エラー\u3000 result " + num);
			Application.DoEvents();
			Thread.Sleep(3000);
			Bitmap backgroundImage5 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
			form2.BackgroundImage = backgroundImage5;
			RemoveHomeButton();
			Application.DoEvents();
		}
		else
		{
			bool flag = SO_DBInsert_seal2(120u);
			string text2 = "";
			string value = "";
			string cmdText = "SELECT web_master FROM setting LIMIT 1;";
			MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
			mySqlCommand.CommandTimeout = 1;
			try
			{
				MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
				if (mySqlDataReader.Read())
				{
					text2 = mySqlDataReader["web_master"].ToString();
				}
				mySqlDataReader.Close();
				cmdText = "SELECT* FROM price" + text2 + " WHERE price_month = @priceMonth AND park_id = (SELECT park_id FROM price_a WHERE price_parkplaceid = @PriceParkplaceid) AND psection_id = (SELECT psection_id FROM price_a WHERE price_parkplaceid = @PriceParkplaceid) AND ptype_id = (SELECT ptype_id FROM price_a WHERE price_parkplaceid = @PriceParkplaceid) AND user_categoryid = (SELECT user_categoryid FROM price_a WHERE price_parkplaceid = @PriceParkplaceid);";
				mySqlCommand = new MySqlCommand(cmdText, DBconnect);
				mySqlCommand.Parameters.AddWithValue("@priceMonth", kessaiYoyakuArray.enable_months);
				mySqlCommand.Parameters.AddWithValue("@PriceParkplaceid", array[3]);
				mySqlDataReader = mySqlCommand.ExecuteReader();
				if (mySqlDataReader.Read())
				{
					value = mySqlDataReader["price_parkplaceid"].ToString();
				}
				mySqlDataReader.Close();
			}
			catch (Exception ex)
			{
				Debug.WriteLine("\u3000〓〓_ERROR_120");
				Trace.WriteLine(ex.Message);
				ERRORINFO = "更新用データのチェック時エラー発生";
				DBconnect.Close();
				mySqlCommand.Dispose();
				KessaiEnd();
			}
			string cmdText2 = "UPDATE regular_contract SET updated_at = NOW(), contract_created_at = NOW(), contract_updated_at = @contractUpdatedAt, contract_periods = @contractPeriods, contract_periode = @contractPeriode, enable_months = @enableMonths, printable_date = CURDATE(), billing_amount = @billingAmount, contract_payment_day = NOW(), contract_money = 0, contract_flag = 1, contract_seal_issue = COALESCE(contract_seal_issue, 0) + 1 ,contract_permission = 0, 800m_flag = 0 ,price_parkplaceid = @PriceParkplaceid WHERE contract_id = @contractId;";
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			mySqlCommand = new MySqlCommand(cmdText2, DBconnect);
			try
			{
				mySqlCommand.CommandTimeout = 30;
				mySqlCommand.Parameters.AddWithValue("@contractUpdatedAt", kessaiYoyakuArray.contract_updated_at);
				mySqlCommand.Parameters.AddWithValue("@contractPeriods", kessaiYoyakuArray.contract_periods);
				mySqlCommand.Parameters.AddWithValue("@contractPeriode", kessaiYoyakuArray.contract_periode);
				mySqlCommand.Parameters.AddWithValue("@enableMonths", kessaiYoyakuArray.enable_months);
				mySqlCommand.Parameters.AddWithValue("@billingAmount", kessaiYoyakuArray.billing_amount);
				mySqlCommand.Parameters.AddWithValue("@contractId", kessaiYoyakuArray.contract_id);
				mySqlCommand.Parameters.AddWithValue("@PriceParkplaceid", value);
				mySqlCommand.ExecuteNonQuery();
				if (((IDictionary<string, object>)kessaiYoyakuArray).ContainsKey("old_contract_id"))
				{
					cmdText2 = "UPDATE regular_contract SET contract_renewal = 1 WHERE contract_id = @contractId;";
					mySqlCommand = new MySqlCommand(cmdText2, DBconnect);
					mySqlCommand.Parameters.AddWithValue("@contractId", kessaiYoyakuArray.old_contract_id);
					mySqlCommand.ExecuteNonQuery();
				}
				cmdText2 = "UPDATE new_contract SET validity=0 WHERE contract_id = @contractId;";
				mySqlCommand = new MySqlCommand(cmdText2, DBconnect);
				mySqlCommand.Parameters.AddWithValue("@contractId", kessaiYoyakuArray.contract_id);
				mySqlCommand.ExecuteNonQuery();
				mySqlTransaction.Commit();
			}
			catch (Exception ex2)
			{
				mySqlTransaction.Rollback();
				Debug.WriteLine("\u3000〓〓_ERROR_120");
				Trace.WriteLine(ex2.Message);
				ERRORINFO = "更新用データのチェック時エラー発生";
				DBconnect.Close();
				mySqlCommand.Dispose();
				KessaiEnd();
			}
		}
		Debug.WriteLine(" --処理３");
		Application.DoEvents();
		Debug.WriteLine(" --処理おわり");
		Debug.WriteLine(" --印刷完了表示");
		Bitmap backgroundImage6 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic3.png");
		form2.BackgroundImage = backgroundImage6;
		RemoveHomeButton();
		Application.DoEvents();
		Thread.Sleep(5000);
		KessaiEnd();
	}

	private void SOMPR_110()
	{
		Console.WriteLine("☆☆新規契約決済期間選択");
		page_name = "SOMPR_110";
		view_mode = true;
		string text = "";
		KessaiPartsRemove();
		Console.WriteLine("☆☆決済予約開始");
		view_mode = true;
		kessaiYoyakuArray = new ExpandoObject();
		string text2 = "SELECT DISTINCT rc.user_id, rc.contract_id, rc.user_categoryid, rc.park_id, rc.price_parkplaceid, rc.user_securitynum, rc.contract_reduction, CAST(rc.psection_id AS CHAR) AS psection_id, rc.zone_id, rc.pplace_no, rc.price_parkplaceid, rc.contract_updated_at, rc.contract_periods, rc.contract_periode, p.park_name, u.user_seq, u.user_mobile, u.user_homephone, u.user_name, u.user_graduate, us.usertype_subject1 FROM regular_contract rc INNER JOIN user u ON rc.user_id = u.user_seq JOIN usertype us ON rc.user_categoryid = us.user_categoryid INNER JOIN new_contract nc ON nc.contract_id = rc.contract_id INNER JOIN park p ON p.park_id = rc.park_id WHERE u.user_tag_serial = '" + MFCODE + "' AND nc.validity = 1 AND nc.type = 0; ";
		Debug.WriteLine("\u3000〓〓更新情報取得:" + text2);
		MySqlCommand mySqlCommand = new MySqlCommand(text2, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				kessaiYoyakuArray.user_id = mySqlDataReader["user_id"];
				kessaiYoyakuArray.user_categoryid = mySqlDataReader["user_categoryid"];
				kessaiYoyakuArray.user_graduate = mySqlDataReader["user_graduate"].ToString();
				kessaiYoyakuArray.userttype_subject1 = mySqlDataReader["usertype_subject1"];
				kessaiYoyakuArray.park_id = mySqlDataReader["park_id"];
				kessaiYoyakuArray.price_parkplaceid = mySqlDataReader["price_parkplaceid"];
				kessaiYoyakuArray.user_securitynum = mySqlDataReader["user_securitynum"];
				kessaiYoyakuArray.contract_reduction = mySqlDataReader["contract_reduction"];
				kessaiYoyakuArray.psection_id = Convert.ToInt32(mySqlDataReader["psection_id"]);
				kessaiYoyakuArray.zone_id = mySqlDataReader["zone_id"];
				kessaiYoyakuArray.pplace_no = mySqlDataReader["pplace_no"];
				kessaiYoyakuArray.user_seq = mySqlDataReader["user_seq"];
				kessaiYoyakuArray.user_mobile = mySqlDataReader["user_mobile"].ToString();
				kessaiYoyakuArray.user_homephone = mySqlDataReader["user_homephone"].ToString();
				kessaiYoyakuArray.user_name = mySqlDataReader["user_name"].ToString();
				kessaiYoyakuArray.old_contract_updated_at = mySqlDataReader["contract_updated_at"].ToString();
				kessaiYoyakuArray.old_contract_periods = "";
				kessaiYoyakuArray.old_contract_periode = "";
				kessaiYoyakuArray.contract_id = Convert.ToInt32(mySqlDataReader["contract_id"].ToString());
				kessaiYoyakuArray.old_contract_id = Convert.ToString(mySqlDataReader["contract_id"].ToString());
				text = mySqlDataReader["park_name"].ToString();
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "更新用データのチェック時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_0.png");
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		kessaiButton = new Button();
		kessaiButton.BackgroundImageLayout = ImageLayout.Stretch;
		kessaiButton.FlatStyle = FlatStyle.Flat;
		kessaiButton.FlatAppearance.BorderSize = 0;
		kessaiButton.BackColor = Color.Transparent;
		kessaiButton.ForeColor = Color.Transparent;
		kessaiButton.FlatAppearance.MouseOverBackColor = Color.Transparent;
		kessaiButton.FlatAppearance.MouseDownBackColor = Color.Transparent;
		kessaiButton.Name = "kessaiSinki";
		kessaiButton.Size = new Size(800, 200);
		kessaiButton.Location = new Point(250, 500);
		kessaiButton.Click += SOMPR_110Button_Click;
		form2.Controls.Add(kessaiButton);
		kessaiLabel = new Label();
		kessaiLabel.Text = "こちらの駐輪場は\r\n" + text + "です。";
		kessaiLabel.Font = new Font("MS PGothic", 80f, FontStyle.Bold);
		kessaiLabel.TextAlign = ContentAlignment.MiddleCenter;
		kessaiLabel.Size = new Size(1280, 350);
		kessaiLabel.Location = new Point(0, 180);
		kessaiLabel.BackColor = Color.Transparent;
		kessaiLabel.Name = "kessaiSinkiLabel";
		form2.Controls.Add(kessaiLabel);
		Application.DoEvents();
		DateTime now = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now).TotalSeconds < 20.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		if (page_name == "SOMPR_110")
		{
			KessaiEnd();
		}
		Application.DoEvents();
	}

	private void SOMPR_110Button_Click(object sender, EventArgs e)
	{
		kessaiYoyakuArray.shinki = true;
		KessaiYoyaku_1();
	}

	private void KessaiYoyaku(string usercode, int oldContractID, int genmenType)
	{
		Console.WriteLine("☆☆決済予約開始");
		view_mode = true;
		kessaiYoyakuArray = new ExpandoObject();
		kessaiYoyakuArray.usercode = usercode;
		kessaiYoyakuArray.old_contract_id = Convert.ToString(oldContractID);
		kessaiYoyakuArray.genmen_type = Convert.ToString(genmenType);
		string text = "SELECT DISTINCT rc.user_id, rc.user_categoryid, rc.park_id, rc.price_parkplaceid, rc.user_securitynum, rc.contract_reduction, CAST(rc.psection_id AS CHAR) AS psection_id, rc.zone_id, rc.pplace_no, rc.price_parkplaceid, rc.contract_updated_at, rc.contract_periods, rc.contract_periode, CAST(rc.800m_flag AS CHAR) AS 800m_flag, CAST(rc.tag_qr_flag AS CHAR) AS tag_qr_flag, CAST(rc.tag_change_flag AS CHAR) AS tag_change_flag, u.user_seq, u.user_mobile, u.user_homephone, u.user_name, u.user_graduate, us.usertype_subject1 FROM regular_contract rc INNER JOIN user u ON rc.user_id = u.user_seq JOIN usertype us ON rc.user_categoryid = us.user_categoryid WHERE rc.contract_id = '" + oldContractID + "';";
		Debug.WriteLine("\u3000〓〓更新情報取得:" + text);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				kessaiYoyakuArray.user_id = mySqlDataReader["user_id"];
				kessaiYoyakuArray.user_categoryid = mySqlDataReader["user_categoryid"];
				kessaiYoyakuArray.user_graduate = mySqlDataReader["user_graduate"].ToString();
				kessaiYoyakuArray.userttype_subject1 = mySqlDataReader["usertype_subject1"];
				kessaiYoyakuArray.park_id = mySqlDataReader["park_id"];
				kessaiYoyakuArray.price_parkplaceid = mySqlDataReader["price_parkplaceid"];
				kessaiYoyakuArray.user_securitynum = mySqlDataReader["user_securitynum"];
				kessaiYoyakuArray.contract_reduction = mySqlDataReader["contract_reduction"];
				kessaiYoyakuArray.psection_id = Convert.ToInt32(mySqlDataReader["psection_id"]);
				kessaiYoyakuArray.zone_id = mySqlDataReader["zone_id"];
				kessaiYoyakuArray.pplace_no = mySqlDataReader["pplace_no"];
				kessaiYoyakuArray.user_seq = mySqlDataReader["user_seq"];
				kessaiYoyakuArray.user_mobile = mySqlDataReader["user_mobile"].ToString();
				kessaiYoyakuArray.user_homephone = mySqlDataReader["user_homephone"].ToString();
				kessaiYoyakuArray.user_name = mySqlDataReader["user_name"].ToString();
				kessaiYoyakuArray.old_contract_updated_at = mySqlDataReader["contract_updated_at"].ToString();
				kessaiYoyakuArray.old_contract_periods = mySqlDataReader["contract_periods"].ToString();
				kessaiYoyakuArray.old_contract_periode = mySqlDataReader["contract_periode"].ToString();
				kessaiYoyakuArray.old_800m_flag = mySqlDataReader["800m_flag"].ToString();
				kessaiYoyakuArray.old_tag_qr_flag = mySqlDataReader["tag_qr_flag"].ToString();
				kessaiYoyakuArray.old_tag_change_flag = mySqlDataReader["tag_change_flag"].ToString();
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "更新用データのチェック時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		string cmdText = "INSERT INTO regular_contract (old_contract_id,user_id, user_categoryid, park_id, price_parkplaceid, user_securitynum, contract_reduction, psection_id, zone_id, pplace_no, contract_created_at, created_at, updated_at,update_flag,800m_flag,tag_qr_flag,tag_change_flag,contract_cancel_flag) VALUES (@old_contract_id,@userId, @userCategoryId, @parkId, @priceParkplaceId, @userSecurityNum, @contractReduction, @psectionId, @zoneId, @pplaceNo, NOW(), NOW(), NOW(),1,@800m_flag,@tag_qr_flag,@tag_change_flag,@contract_cancel_flag);SELECT LAST_INSERT_ID();";
		MySqlCommand mySqlCommand2 = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand2.Parameters.AddWithValue("@old_contract_id", kessaiYoyakuArray.old_contract_id);
		mySqlCommand2.Parameters.AddWithValue("@userId", kessaiYoyakuArray.user_id);
		mySqlCommand2.Parameters.AddWithValue("@userCategoryId", kessaiYoyakuArray.user_categoryid);
		mySqlCommand2.Parameters.AddWithValue("@parkId", kessaiYoyakuArray.park_id);
		mySqlCommand2.Parameters.AddWithValue("@priceParkplaceId", kessaiYoyakuArray.price_parkplaceid);
		mySqlCommand2.Parameters.AddWithValue("@userSecurityNum", kessaiYoyakuArray.user_securitynum);
		mySqlCommand2.Parameters.AddWithValue("@contractReduction", kessaiYoyakuArray.contract_reduction);
		mySqlCommand2.Parameters.AddWithValue("@psectionId", kessaiYoyakuArray.psection_id);
		mySqlCommand2.Parameters.AddWithValue("@zoneId", kessaiYoyakuArray.zone_id);
		mySqlCommand2.Parameters.AddWithValue("@pplaceNo", kessaiYoyakuArray.pplace_no);
		mySqlCommand2.Parameters.AddWithValue("@800m_flag", kessaiYoyakuArray.old_800m_flag);
		mySqlCommand2.Parameters.AddWithValue("@tag_qr_flag", kessaiYoyakuArray.old_tag_qr_flag);
		mySqlCommand2.Parameters.AddWithValue("@tag_change_flag", kessaiYoyakuArray.old_tag_change_flag);
		mySqlCommand2.Parameters.AddWithValue("@contract_cancel_flag", 0);
		try
		{
			MySqlTransaction mySqlTransaction2 = DBconnect.BeginTransaction();
			object obj = mySqlCommand2.ExecuteScalar();
			if (obj != null && obj != DBNull.Value)
			{
				kessaiYoyakuArray.contract_id = Convert.ToInt32(obj);
			}
			string cmdText2 = "UPDATE regular_contract SET contract_payment_number = @contractPaymentNumber WHERE contract_id = @contract_id;";
			mySqlCommand2 = new MySqlCommand(cmdText2, DBconnect);
			mySqlCommand2.Parameters.AddWithValue("@contractPaymentNumber", kessaiYoyakuArray.contract_id);
			mySqlCommand2.Parameters.AddWithValue("@contract_id", kessaiYoyakuArray.contract_id);
			mySqlCommand2.ExecuteNonQuery();
			mySqlTransaction2.Commit();
			Console.WriteLine("新しいレコードが作成されました。 新しい契約ID: " + kessaiYoyakuArray.contract_id);
		}
		catch (Exception ex2)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex2.Message);
			ERRORINFO = "更新用作成時時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		KessaiYoyaku_1();
	}

	private void KessaiYoyaku_1()
	{
		Console.WriteLine("☆☆決済期間選択");
		page_name = "kessai_1";
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_1.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		string text = "";
		string text2 = "";
		Dictionary<string, string> dictionary = new Dictionary<string, string>();
		int num = 1;
		string text3 = "SELECT web_master FROM setting LIMIT 1;";
		Debug.WriteLine("\u3000〓〓料金テーブル名取得:" + text3);
		MySqlCommand mySqlCommand = new MySqlCommand(text3, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			if (mySqlDataReader.Read())
			{
				text = mySqlDataReader["web_master"].ToString();
			}
			mySqlDataReader.Close();
			text3 = "SELECT *  FROM park JOIN regular_type ON regular_type.city_id = park.city_id WHERE park.park_id = " + kessaiYoyakuArray.park_id + " ORDER BY park.updated_at DESC LIMIT 1; ";
			Debug.WriteLine("\u3000〓〓料金テーブル名取得:" + text3);
			mySqlCommand = new MySqlCommand(text3, DBconnect);
			mySqlCommand.CommandTimeout = 1;
			mySqlDataReader = mySqlCommand.ExecuteReader();
			if (mySqlDataReader.Read())
			{
				dictionary["1"] = mySqlDataReader["regular_class_1"].ToString();
				dictionary["2"] = mySqlDataReader["regular_class_2"].ToString();
				dictionary["3"] = mySqlDataReader["regular_class_3"].ToString();
				dictionary["6"] = mySqlDataReader["regular_class_6"].ToString();
				dictionary["12"] = mySqlDataReader["regular_class_12"].ToString();
				kessaiYoyakuArray.park_name = mySqlDataReader["park_name"].ToString();
				kessaiYoyakuArray.update_grace_period_start_date = mySqlDataReader["update_grace_period_start_date"].ToString();
				kessaiYoyakuArray.update_grace_period_start_time = mySqlDataReader["update_grace_period_start_time"].ToString();
			}
			mySqlDataReader.Close();
			if (kessaiYoyakuArray.old_contract_periode == "")
			{
				int day = int.Parse(kessaiYoyakuArray.update_grace_period_start_date);
				TimeSpan timeSpan = TimeSpan.Parse(kessaiYoyakuArray.update_grace_period_start_time);
				DateTime now = DateTime.Now;
				DateTime dateTime;
				try
				{
					dateTime = new DateTime(now.Year, now.Month, day, timeSpan.Hours, timeSpan.Minutes, 0);
				}
				catch (ArgumentOutOfRangeException)
				{
					int day2 = DateTime.DaysInMonth(now.Year, now.Month);
					dateTime = new DateTime(now.Year, now.Month, day2, timeSpan.Hours, timeSpan.Minutes, 0);
				}
				DateTime dateTime2 = ((!(now > dateTime)) ? new DateTime(now.Year, now.Month, 1) : new DateTime(now.Year, now.Month, 1).AddMonths(1));
				Console.WriteLine("契約開始日: " + dateTime2.ToString("yyyy年MM月dd日"));
				kessaiYoyakuArray.old_contract_periode = dateTime2.AddDays(-1.0).ToString("yyyy/MM/dd") + " 0:00:00";
			}
			text3 = "SELECT * FROM price" + text + " WHERE ptype_id = (SELECT ptype_id FROM price" + text + "  WHERE price_parkplaceid = " + kessaiYoyakuArray.price_parkplaceid + "  LIMIT 1);";
			Debug.WriteLine("\u3000〓〓料金テーブル名取得:" + text3);
			mySqlCommand = new MySqlCommand(text3, DBconnect);
			mySqlDataReader = mySqlCommand.ExecuteReader();
			if (mySqlDataReader.Read())
			{
				text2 = mySqlDataReader["ptype_id"].ToString();
				Console.WriteLine("ptype_idカラムの値: " + text2);
			}
			mySqlDataReader.Close();
		}
		catch (Exception ex2)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex2.Message);
			ERRORINFO = "料金テーブル名取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		text3 = "SELECT * FROM price" + text + " WHERE park_id = " + kessaiYoyakuArray.park_id + " and psection_id = " + kessaiYoyakuArray.psection_id + " and ptype_id = " + text2 + " and user_categoryid = " + kessaiYoyakuArray.user_categoryid + " ORDER BY price_month; ";
		Debug.WriteLine("\u3000〓〓料金チェック:" + text3);
		mySqlCommand = new MySqlCommand(text3, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlDataReader mySqlDataReader2 = mySqlCommand.ExecuteReader();
			while (mySqlDataReader2.Read())
			{
				bool flag = true;
				if (Convert.ToString(kessaiYoyakuArray.userttype_subject1) == "学生")
				{
					DateTime dateTime3 = ((DateTime)DateTime.ParseExact(kessaiYoyakuArray.old_contract_periode, "yyyy/MM/dd H:mm:ss", null)).AddDays(1.0).AddMonths(int.Parse(Convert.ToString(mySqlDataReader2["price_month"]))).AddDays(-1.0);
					Console.WriteLine("user_graduateの日付: " + kessaiYoyakuArray.user_graduate);
					DateTime dateTime4 = DateTime.ParseExact(kessaiYoyakuArray.user_graduate, "yyyy/MM/dd H:mm:ss", null);
					Console.WriteLine("contractEndの日付: " + dateTime3.ToString());
					Console.WriteLine("comparisonDateの日付: " + dateTime4.ToString());
					if (dateTime3 > dateTime4)
					{
						flag = false;
					}
				}
				Debug.WriteLine(mySqlDataReader2["price_month"]);
				string key = Convert.ToString(mySqlDataReader2["price_month"]);
				if (dictionary.ContainsKey(key) && dictionary[key] == "True" && flag)
				{
					string price_parkplaceid = Convert.ToString(mySqlDataReader2["price_parkplaceid"]);
					string kikan = Convert.ToString(mySqlDataReader2["price_month"]);
					string label = Convert.ToString(mySqlDataReader2["price"]);
					CreateKessaiKikanButton(price_parkplaceid, kikan, label, num++);
				}
			}
			mySqlDataReader2.Close();
		}
		catch (Exception ex3)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex3.Message);
			ERRORINFO = "料金テーブル名取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		if (num == 1)
		{
			backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_1_2.png");
			form2.BackgroundImage = backgroundImage;
			SetHomeButton();
		}
		else
		{
			CreateKessaiCancelButton();
		}
		Application.DoEvents();
		DateTime now2 = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now2).TotalSeconds < 20.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		if (page_name == "kessai_1")
		{
			KessaiEnd();
		}
		Application.DoEvents();
	}

	private bool GetDisplaySetting(string webMasterValue, string month)
	{
		string cmdText = "SELECT *  FROM park JOIN regular_type ON regular_type.city_id = park.city_id WHERE park.park_id = " + kessaiYoyakuArray.park_id + "ORDER BY park.updated_at DESC LIMIT 1; ";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			if (mySqlDataReader.Read())
			{
				if (Convert.ToString(mySqlDataReader["display_setting"]) == "1")
				{
					return true;
				}
				return false;
			}
			mySqlDataReader.Close();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "料金テーブル名取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		return false;
	}

	private void CreateKessaiCancelButton()
	{
		kessaiButton = new Button();
		kessaiButton.BackgroundImageLayout = ImageLayout.Stretch;
		kessaiButton.FlatStyle = FlatStyle.Flat;
		kessaiButton.FlatAppearance.BorderSize = 0;
		kessaiButton.BackColor = Color.Transparent;
		kessaiButton.BackgroundImage = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\kessaiCancelButton.png");
		kessaiButton.Name = "kessaiCancel";
		kessaiButton.Size = new Size(450, 100);
		int num = (form2.ClientSize.Width - kessaiButton.Width) / 2;
		kessaiButton.Location = new Point(420, 650);
		kessaiButton.Click += KessaiCancelButton_Click;
		form2.Controls.Add(kessaiButton);
	}

	private void KessaiCancelButton_Click(object sender, EventArgs e)
	{
		waiting = false;
	}

	private void CreateKessaiKikanButton(string price_parkplaceid, string kikan, string label, int order)
	{
		kessaiButton = new Button();
		kessaiButton.BackgroundImageLayout = ImageLayout.Stretch;
		kessaiButton.FlatStyle = FlatStyle.Flat;
		kessaiButton.FlatAppearance.BorderSize = 0;
		kessaiButton.BackColor = Color.Transparent;
		kessaiButton.ForeColor = Color.Transparent;
		kessaiButton.FlatAppearance.MouseOverBackColor = Color.Transparent;
		kessaiButton.FlatAppearance.MouseDownBackColor = Color.Transparent;
		kessaiButton.BackgroundImage = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\kessaiKikanButton_" + kikan.ToString() + ".png");
		kessaiButton.Name = "kessaiKikan_" + kikan.ToString() + "_" + label + "_" + price_parkplaceid;
		kessaiButton.Size = new Size(290, 290);
		kessaiButton.Location = new Point(125 + 370 * (order - 1), 305);
		kessaiButton.Click += KessaiKikanButton_Click;
		form2.Controls.Add(kessaiButton);
		string text = int.Parse(label).ToString("N0");
		string text2 = text + "円";
		kessaiLabel = new Label();
		kessaiLabel.Text = text2;
		kessaiLabel.Font = new Font("MS PGothic", 30f, FontStyle.Bold);
		kessaiLabel.TextAlign = ContentAlignment.MiddleCenter;
		kessaiLabel.Size = new Size(300, 50);
		kessaiLabel.Location = new Point(kessaiButton.Left + kessaiButton.Width / 2 - kessaiLabel.Width / 2, kessaiButton.Bottom);
		kessaiLabel.BackColor = Color.Transparent;
		kessaiLabel.Name = "kessaiKikanLabel_" + kikan.ToString();
		form2.Controls.Add(kessaiLabel);
	}

	private void KessaiKikanButton_Click(object sender, EventArgs e)
	{
		page_name = null;
		Button button = (Button)sender;
		if (!button.Name.StartsWith("kessaiKikan_"))
		{
			return;
		}
		string[] array = button.Name.Split('_');
		kessaiYoyakuArray.enable_months = array[1];
		string text = array[2].Replace(",", "").Replace("円", "");
		kessaiYoyakuArray.billing_amount = text;
		DateTime dateTime = DateTime.ParseExact(kessaiYoyakuArray.old_contract_periode, "yyyy/MM/dd H:mm:ss", null);
		int months = int.Parse(kessaiYoyakuArray.enable_months);
		int num = int.Parse(kessaiYoyakuArray.update_grace_period_start_date);
		DateTime dateTime2 = dateTime.AddDays(1.0);
		DateTime dateTime3 = dateTime2.AddMonths(months).AddDays(-1.0);
		int num2 = DateTime.DaysInMonth(dateTime3.Year, dateTime3.Month);
		dateTime3 = dateTime3.AddDays(num2 - dateTime3.Day);
		DateTime dateTime4 = new DateTime(dateTime3.Year, dateTime3.Month, num);
		dateTime4 = ((num <= DateTime.DaysInMonth(dateTime3.Year, dateTime3.Month)) ? new DateTime(dateTime3.Year, dateTime3.Month, num, 0, 0, 0) : new DateTime(dateTime3.Year, dateTime3.Month, DateTime.DaysInMonth(dateTime3.Year, dateTime3.Month), 0, 0, 0));
		string cmdText = "UPDATE regular_contract SET updated_at = @UpdatedAt, contract_updated_at = @ContractUpdatedAt, contract_periods = @ContractPeriods, contract_periode = @ContractPeriode, enable_months = @EnableMonths, billing_amount = @BillingAmount WHERE contract_id = @ContractId";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.Parameters.AddWithValue("@UpdatedAt", DateTime.Now);
		mySqlCommand.Parameters.AddWithValue("@ContractUpdatedAt", dateTime4.ToString("yyyy-MM-dd"));
		mySqlCommand.Parameters.AddWithValue("@ContractPeriods", dateTime2.ToString("yyyy-MM-dd"));
		mySqlCommand.Parameters.AddWithValue("@ContractPeriode", dateTime3.ToString("yyyy-MM-dd"));
		mySqlCommand.Parameters.AddWithValue("@EnableMonths", kessaiYoyakuArray.enable_months);
		mySqlCommand.Parameters.AddWithValue("@BillingAmount", kessaiYoyakuArray.billing_amount);
		mySqlCommand.Parameters.AddWithValue("@ContractId", kessaiYoyakuArray.contract_id);
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			int num3 = mySqlCommand.ExecuteNonQuery();
			if (num3 > 0)
			{
				mySqlTransaction.Commit();
				Console.WriteLine("レコードが更新されました。 更新された契約ID: " + kessaiYoyakuArray.contract_id);
			}
			else
			{
				mySqlTransaction.Rollback();
				Console.WriteLine("レコードの更新に失敗しました。");
			}
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "料金テーブル名取得時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			KessaiEnd();
		}
		KessaiYoyaku_2();
	}

	private void KessaiYoyaku_2()
	{
		Console.WriteLine("☆☆決済コンビニ選択");
		page_name = "kessai_2";
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_2.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		CreateKessaiStoreButton("0", storeArray[0, 1], 1, 1);
		CreateKessaiStoreButton("1", storeArray[1, 1], 1, 2);
		CreateKessaiStoreButton("2", storeArray[2, 1], 1, 3);
		CreateKessaiStoreButton("3", storeArray[3, 1], 2, 1);
		CreateKessaiStoreButton("4", storeArray[4, 1], 2, 2);
		Application.DoEvents();
		DateTime now = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now).TotalSeconds < 20.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		if (page_name == "kessai_2")
		{
			KessaiEnd();
		}
		Application.DoEvents();
	}

	private void CreateKessaiStoreButton(string store, string method, int xOder, int yOder)
	{
		kessaiButton = new Button();
		kessaiButton.BackgroundImageLayout = ImageLayout.Stretch;
		kessaiButton.FlatStyle = FlatStyle.Flat;
		kessaiButton.FlatAppearance.BorderSize = 0;
		kessaiButton.BackColor = Color.Transparent;
		kessaiButton.ForeColor = Color.Transparent;
		kessaiButton.FlatAppearance.MouseOverBackColor = Color.Transparent;
		kessaiButton.FlatAppearance.MouseDownBackColor = Color.Transparent;
		kessaiButton.Name = "kessaiStore_" + store.ToString() + "_" + method.ToString();
		kessaiButton.Size = new Size(565, 140);
		kessaiButton.Location = new Point(65 + 585 * (xOder - 1), 300 + 155 * (yOder - 1));
		kessaiButton.Click += KessaiStoreButton_Click;
		form2.Controls.Add(kessaiButton);
	}

	private void KessaiStoreButton_Click(object sender, EventArgs e)
	{
		page_name = null;
		Button button = (Button)sender;
		if (button.Name.StartsWith("kessaiStore_"))
		{
			string[] array = button.Name.Split('_');
			kessaiYoyakuArray.kessai_ID = storeArray[int.Parse(array[1]), 2];
			kessaiYoyakuArray.store_name = storeArray[int.Parse(array[1]), 1];
			kessaiYoyakuArray.payee = storeArray[int.Parse(array[1]), 0];
			KessaiYoyaku_3();
		}
	}

	private void KessaiYoyaku_3()
	{
		Console.WriteLine("☆☆決済期間確認");
		page_name = "kessai_3";
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_3.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		string text = int.Parse(kessaiYoyakuArray.billing_amount).ToString("N0");
		string text2 = text + "円";
		Label label = new Label();
		label.Text = kessaiYoyakuArray.enable_months + "か月更新：" + text2;
		label.Font = new Font("MS PGothic", 75f, FontStyle.Bold);
		Size size = TextRenderer.MeasureText(label.Text, label.Font);
		int num = (1200 - size.Width) / 2;
		int num2 = (800 - size.Height) / 2;
		label.Location = new Point(num, num2);
		label.Size = size;
		label.BackColor = Color.White;
		label.Name = "kessaiLabel";
		form2.Controls.Add(label);
		num2 = 600;
		int num3 = 600;
		CreateAndConfigureButton("kessaiOK", new Point(235, num3), KessaiOKButton_Click);
		CreateAndConfigureButton("kessaiChange", new Point(650, num3), KessaiChangeButton_Click);
	}

	private void CreateAndConfigureButton(string buttonName, Point location, EventHandler clickHandler)
	{
		Button button = new Button
		{
			Name = buttonName,
			FlatStyle = FlatStyle.Flat,
			BackColor = Color.Transparent,
			ForeColor = Color.Transparent,
			Size = new Size(390, 100),
			Location = location
		};
		button.FlatAppearance.BorderSize = 0;
		button.FlatAppearance.MouseOverBackColor = Color.Transparent;
		button.FlatAppearance.MouseDownBackColor = Color.Transparent;
		button.Click += clickHandler;
		form2.Controls.Add(button);
	}

	private void KessaiOKButton_Click(object sender, EventArgs e)
	{
		Button button = (Button)sender;
		KessaiYoyaku_4();
	}

	private void KessaiChangeButton_Click(object sender, EventArgs e)
	{
		Button button = (Button)sender;
		KessaiYoyaku_1();
	}

	private void KessaiYoyaku_4()
	{
		Console.WriteLine("☆☆決済最終確認");
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_4.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		string text = int.Parse(kessaiYoyakuArray.billing_amount).ToString("N0");
		Label label = new Label();
		label.Text = kessaiYoyakuArray.enable_months + "か月更新：" + text + "円";
		label.Font = new Font("MS PGothic", 50f, FontStyle.Bold);
		Size size = TextRenderer.MeasureText(label.Text, label.Font);
		int num = (1200 - size.Width) / 2;
		int num2 = (800 - size.Height) / 2 - 30;
		label.Location = new Point(num, num2);
		label.AutoSize = true;
		label.BackColor = Color.White;
		label.Name = "kessaiLabel_1";
		form2.Controls.Add(label);
		Label label2 = new Label();
		label2.Text = "支払い場所：" + kessaiYoyakuArray.store_name;
		label2.Font = new Font("MS PGothic", 50f, FontStyle.Bold);
		size = TextRenderer.MeasureText(label2.Text, label2.Font);
		num = (1200 - size.Width) / 2;
		num2 = (800 - size.Height) / 2 + 65;
		label2.Location = new Point(num, num2);
		label2.AutoSize = true;
		label2.BackColor = Color.White;
		label2.Name = "kessaiLabel_2";
		form2.Controls.Add(label2);
		CreateAndConfigureButton("kessaiPrint", new Point(450, 600), KessaiPrintButton_Click);
	}

	private void KessaiPrintButton_Click(object sender, EventArgs e)
	{
		Button button = (Button)sender;
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_4-1.png");
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		Application.DoEvents();
		string text = KessaiYoyakuKessai();
		if (text == "0000")
		{
			if (KessaiPrint(text))
			{
				KessaiYoyaku_5();
			}
		}
		else
		{
			KessaiError(text);
		}
	}

	private string KessaiYoyakuKessai()
	{
		YoyakuSoapClient yoyakuSoapClient = new YoyakuSoapClient();
		yoyakuSoapClient.Endpoint.Address = new EndpointAddress(str_Confile[17]);
		DateTime today = DateTime.Today;
		DateTime dateTime = today.AddDays(10.0).Date.AddHours(23.0).AddMinutes(59.0);
		string text = str_Confile[33];
		text = Regex.Replace(text.Trim().Normalize(NormalizationForm.FormKC).ToUpperInvariant(), "\\s+", "");
		if (text == "TYPE-M")
		{
			DateTime dateTime2 = new DateTime(today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month), 23, 59, 0);
			dateTime = dateTime2;
		}
		string text2 = null;
		if (kessaiYoyakuArray.user_mobile.Length > 0)
		{
			text2 = kessaiYoyakuArray.user_mobile;
		}
		else if (kessaiYoyakuArray.user_homephone.Length > 0)
		{
			text2 = kessaiYoyakuArray.user_homephone;
		}
		SyunoFree[] syunoFreeArray = ((!(text == "TYPE-M")) ? new SyunoFree[9]
		{
			new SyunoFree
			{
				Index = 1,
				SyunoFreeStr = "So-Manager駐輪場"
			},
			new SyunoFree
			{
				Index = 2,
				SyunoFreeStr = kessaiYoyakuArray.user_seq.ToString()
			},
			new SyunoFree
			{
				Index = 3,
				SyunoFreeStr = kessaiYoyakuArray.store_name
			},
			new SyunoFree
			{
				Index = 19,
				SyunoFreeStr = "株式会社ソーリン サポートセンター"
			},
			new SyunoFree
			{
				Index = 20,
				SyunoFreeStr = "03-5856-4720"
			},
			new SyunoFree
			{
				Index = 21,
				SyunoFreeStr = "12:00-22:00"
			},
			new SyunoFree
			{
				Index = 30,
				SyunoFreeStr = "0"
			},
			new SyunoFree
			{
				Index = 39,
				SyunoFreeStr = "1"
			},
			new SyunoFree
			{
				Index = 40,
				SyunoFreeStr = "ご利用ありがとうございました"
			}
		} : new SyunoFree[9]
		{
			new SyunoFree
			{
				Index = 1,
				SyunoFreeStr = "So-Manager駐輪場"
			},
			new SyunoFree
			{
				Index = 2,
				SyunoFreeStr = kessaiYoyakuArray.user_seq.ToString()
			},
			new SyunoFree
			{
				Index = 3,
				SyunoFreeStr = kessaiYoyakuArray.store_name
			},
			new SyunoFree
			{
				Index = 19,
				SyunoFreeStr = "株式会社ソーリン サポートセンター"
			},
			new SyunoFree
			{
				Index = 20,
				SyunoFreeStr = "03-5856-6777"
			},
			new SyunoFree
			{
				Index = 21,
				SyunoFreeStr = "00:00-24:00"
			},
			new SyunoFree
			{
				Index = 30,
				SyunoFreeStr = "0"
			},
			new SyunoFree
			{
				Index = 39,
				SyunoFreeStr = "1"
			},
			new SyunoFree
			{
				Index = 40,
				SyunoFreeStr = "ご利用ありがとうございました"
			}
		});
		WellnetSoapHeader wellnetSoapHeader;
		InParamSyunoBarCode inParamSyunoBarCode2;
		if (kessaiYoyakuArray.payee == "1")
		{
			wellnetSoapHeader = new WellnetSoapHeader
			{
				UserId = str_Confile[19],
				Password = str_Confile[20]
			};
			InParamSyunoBarCode inParamSyunoBarCode = new InParamSyunoBarCode();
			inParamSyunoBarCode.DataSyubetsu = "4";
			inParamSyunoBarCode.SyunoPayCode = str_Confile[21];
			inParamSyunoBarCode.SyunoRecvNum = kessaiYoyakuArray.contract_id.ToString().PadLeft(3, '0');
			inParamSyunoBarCode.BcJigyosyaNo = str_Confile[22];
			inParamSyunoBarCode.BcAnkenNo = str_Confile[23];
			inParamSyunoBarCode.BcNinsyoKey = kessaiYoyakuArray.contract_id.ToString();
			inParamSyunoBarCode.SyunoOpCode = "I";
			inParamSyunoBarCode.SyunoCorpCode = str_Confile[24];
			inParamSyunoBarCode.SyunoTel = text2.ToString();
			inParamSyunoBarCode.SyunoNameKanji = kessaiYoyakuArray.user_name.ToString();
			inParamSyunoBarCode.SyunoPayLimit = dateTime.ToString("yyyyMMddHHmm");
			inParamSyunoBarCode.SyunoPayAmount = kessaiYoyakuArray.billing_amount.ToString();
			inParamSyunoBarCode2 = inParamSyunoBarCode;
			inParamSyunoBarCode2.SyunoFreeArray = syunoFreeArray;
		}
		else
		{
			wellnetSoapHeader = new WellnetSoapHeader
			{
				UserId = str_Confile[25],
				Password = str_Confile[26]
			};
			InParamSyunoBarCode inParamSyunoBarCode = new InParamSyunoBarCode();
			inParamSyunoBarCode.DataSyubetsu = "4";
			inParamSyunoBarCode.SyunoPayCode = str_Confile[27];
			inParamSyunoBarCode.SyunoRecvNum = kessaiYoyakuArray.contract_id.ToString().PadLeft(3, '0');
			inParamSyunoBarCode.BcJigyosyaNo = str_Confile[28];
			inParamSyunoBarCode.BcAnkenNo = str_Confile[29];
			inParamSyunoBarCode.BcNinsyoKey = kessaiYoyakuArray.contract_id.ToString();
			inParamSyunoBarCode.SyunoOpCode = "I";
			inParamSyunoBarCode.SyunoCorpCode = str_Confile[30];
			inParamSyunoBarCode.SyunoTel = text2.ToString();
			inParamSyunoBarCode.SyunoNameKanji = kessaiYoyakuArray.user_name.ToString();
			inParamSyunoBarCode.SyunoPayLimit = dateTime.ToString("yyyyMMddHHmm");
			inParamSyunoBarCode.SyunoPayAmount = kessaiYoyakuArray.billing_amount.ToString();
			inParamSyunoBarCode2 = inParamSyunoBarCode;
			inParamSyunoBarCode2.SyunoFreeArray = syunoFreeArray;
		}
		string cmdText = "INSERT INTO paycheck (user_id, contract_id, payee, amount, created_at, updated_at) VALUES (@userId, @contractId, @payee, @amount, @createdAt, @updatedAt);SELECT LAST_INSERT_ID();";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.Parameters.AddWithValue("@userId", kessaiYoyakuArray.user_id);
		mySqlCommand.Parameters.AddWithValue("@contractId", kessaiYoyakuArray.contract_id);
		mySqlCommand.Parameters.AddWithValue("@payee", kessaiYoyakuArray.payee);
		mySqlCommand.Parameters.AddWithValue("@amount", kessaiYoyakuArray.billing_amount);
		mySqlCommand.Parameters.AddWithValue("@createdAt", DateTime.Now);
		mySqlCommand.Parameters.AddWithValue("@updatedAt", DateTime.Now);
		object value = mySqlCommand.ExecuteScalar();
		int num = Convert.ToInt32(value);
		OutParamSyunoBarCode outParamSyunoBarCode = yoyakuSoapClient.YoyakuSyunoBarCode(wellnetSoapHeader, inParamSyunoBarCode2);
		string cmdText2 = "UPDATE paycheck SET result = @result, kessai_no = @kessaiNo, pay_code = @payCode, recv_num = @recvNum, jigyou_no = @jigyouNo, anken_no = @ankenNo, ninsyo_key = @ninsyoKey, mms_no = @mmsNo, url = @url, seven_no = @sevenNo, payment_due = @paymentDue, updated_at = @updatedAt WHERE paycheck_id = @paycheckId";
		MySqlCommand mySqlCommand2 = new MySqlCommand(cmdText2, DBconnect);
		DateTime.TryParseExact(outParamSyunoBarCode.BcSyoriDate, "yyyyMMddHHmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out var result);
		mySqlCommand2.Parameters.AddWithValue("@result", outParamSyunoBarCode.Result);
		mySqlCommand2.Parameters.AddWithValue("@kessaiNo", outParamSyunoBarCode.KKessaiNo);
		mySqlCommand2.Parameters.AddWithValue("@payCode", outParamSyunoBarCode.SyunoPayCode);
		mySqlCommand2.Parameters.AddWithValue("@recvNum", outParamSyunoBarCode.SyunoRecvNum);
		mySqlCommand2.Parameters.AddWithValue("@jigyouNo", outParamSyunoBarCode.BcJigyosyaNo);
		mySqlCommand2.Parameters.AddWithValue("@ankenNo", outParamSyunoBarCode.BcAnkenNo);
		mySqlCommand2.Parameters.AddWithValue("@ninsyoKey", outParamSyunoBarCode.BcNinsyoKey);
		mySqlCommand2.Parameters.AddWithValue("@mmsNo", outParamSyunoBarCode.SyunoMMSNo);
		mySqlCommand2.Parameters.AddWithValue("@url", outParamSyunoBarCode.BcUrl);
		mySqlCommand2.Parameters.AddWithValue("@updatedAt", result);
		mySqlCommand2.Parameters.AddWithValue("@paycheckId", num);
		kessaiYoyakuArray.kessai_no = outParamSyunoBarCode.KKessaiNo;
		kessaiYoyakuArray.pay_code = outParamSyunoBarCode.SyunoPayCode.Trim();
		string result2 = outParamSyunoBarCode.Result;
		if (kessaiYoyakuArray.payee == "1")
		{
			if (result2 == "0000")
			{
				string[] array = outParamSyunoBarCode.BcUrl.Split(' ');
				kessaiYoyakuArray.sevenNo = outParamSyunoBarCode.BcUrl.Split(' ')[0];
				kessaiYoyakuArray.paymentDue = outParamSyunoBarCode.BcUrl.Split(' ')[1];
				mySqlCommand2.Parameters.AddWithValue("@sevenNo", kessaiYoyakuArray.sevenNo);
				mySqlCommand2.Parameters.AddWithValue("@paymentDue", kessaiYoyakuArray.paymentDue);
			}
			else
			{
				kessaiYoyakuArray.sevenNo = "";
				kessaiYoyakuArray.paymentDue = dateTime.ToString("yyyy-MM-dd HH:mm");
				mySqlCommand2.Parameters.AddWithValue("@sevenNo", null);
				mySqlCommand2.Parameters.AddWithValue("@paymentDue", kessaiYoyakuArray.paymentDue);
			}
		}
		else
		{
			kessaiYoyakuArray.sevenNo = "";
			kessaiYoyakuArray.paymentDue = dateTime.ToString("yyyy-MM-dd HH:mm");
			mySqlCommand2.Parameters.AddWithValue("@sevenNo", null);
			mySqlCommand2.Parameters.AddWithValue("@paymentDue", kessaiYoyakuArray.paymentDue);
			kessaiYoyakuArray.paymentDue = dateTime.ToString("yyyy/MM/dd");
		}
		int num2 = mySqlCommand2.ExecuteNonQuery();
		yoyakuSoapClient.Close();
		return result2;
	}

	private bool KessaiPrint(string result)
	{
		string ipAddress = str_Confile[18];
		string deviceId = "local_printer";
		int timeout = 30;
		EpsonPrinterTMM30Service epsonPrinterTMM30Service = new EpsonPrinterTMM30Service(ipAddress, deviceId, timeout);
		string soapRequest = "";
		if (kessaiYoyakuArray.payee == "1")
		{
			soapRequest = epsonPrinterTMM30Service.GenerateSoapRequestPayee1(kessaiYoyakuArray.user_name, kessaiYoyakuArray.sevenNo, kessaiYoyakuArray.billing_amount, kessaiYoyakuArray.park_name, kessaiYoyakuArray.userttype_subject1, kessaiYoyakuArray.enable_months, kessaiYoyakuArray.paymentDue, kessaiYoyakuArray.pay_code, str_Confile[31], str_Confile[32]);
		}
		else if (kessaiYoyakuArray.payee == "3")
		{
			soapRequest = epsonPrinterTMM30Service.GenerateSoapRequestPayee2(kessaiYoyakuArray.user_name, kessaiYoyakuArray.kessai_no, kessaiYoyakuArray.billing_amount, kessaiYoyakuArray.park_name, kessaiYoyakuArray.userttype_subject1, kessaiYoyakuArray.enable_months, kessaiYoyakuArray.paymentDue, kessaiYoyakuArray.pay_code, str_Confile[31], str_Confile[32]);
		}
		else if (kessaiYoyakuArray.payee == "5")
		{
			soapRequest = epsonPrinterTMM30Service.GenerateSoapRequestPayee3(kessaiYoyakuArray.user_name, kessaiYoyakuArray.kessai_no, kessaiYoyakuArray.billing_amount, kessaiYoyakuArray.park_name, kessaiYoyakuArray.userttype_subject1, kessaiYoyakuArray.enable_months, kessaiYoyakuArray.paymentDue, kessaiYoyakuArray.pay_code, str_Confile[31], str_Confile[32]);
		}
		else if (kessaiYoyakuArray.payee == "2" || kessaiYoyakuArray.payee == "4")
		{
			soapRequest = epsonPrinterTMM30Service.GenerateSoapRequestPayee4(kessaiYoyakuArray.user_name, kessaiYoyakuArray.kessai_no, kessaiYoyakuArray.billing_amount, kessaiYoyakuArray.park_name, kessaiYoyakuArray.userttype_subject1, kessaiYoyakuArray.enable_months, kessaiYoyakuArray.paymentDue, kessaiYoyakuArray.pay_code, str_Confile[31], str_Confile[32]);
		}
		string text = epsonPrinterTMM30Service.PrintXml(soapRequest);
		if (text != "")
		{
			XmlDocument xmlDocument = new XmlDocument();
			xmlDocument.LoadXml(text);
			XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(xmlDocument.NameTable);
			xmlNamespaceManager.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/");
			xmlNamespaceManager.AddNamespace("epos", "http://www.epson-pos.com/schemas/2011/03/epos-print");
			XmlNode xmlNode = xmlDocument.SelectSingleNode("//s:Body/epos:response", xmlNamespaceManager);
			string value = xmlNode.Attributes["success"].Value;
			string value2 = xmlNode.Attributes["status"].Value;
			string value3 = xmlNode.Attributes["code"].Value;
			int num = ((value == "true") ? 1 : 0);
			string cmdText = "INSERT INTO receipt_log (contract_id, success, status, code,created_at) VALUES (@contract_id, @success, @status, @code, NOW())";
			MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
			mySqlCommand.Parameters.AddWithValue("@contract_id", kessaiYoyakuArray.contract_id);
			mySqlCommand.Parameters.AddWithValue("@success", num);
			mySqlCommand.Parameters.AddWithValue("@status", value2);
			mySqlCommand.Parameters.AddWithValue("@code", value3);
			mySqlCommand.ExecuteNonQuery();
			if (!(value == "true"))
			{
				string text2 = epsonPrinterTMM30Service.PrinterErrorHandling(value2, kessaiYoyakuArray.park_id.ToString(), DBconnect);
				if (!string.IsNullOrEmpty(text2))
				{
					KessaiPrinterError(text2);
					return false;
				}
				return true;
			}
			epsonPrinterTMM30Service.PrinterPapperCheck(value2, kessaiYoyakuArray.park_id.ToString(), DBconnect);
			return true;
		}
		string value4 = "102";
		string value5 = "TM プリンター無応答";
		string value6 = "プリンタを確認し、必要に応じて再起動してください。";
		string cmdText2 = "INSERT INTO operator_que (user_id, contract_id, park_id, que_class, que_comment, que_status, created_at, updated_at, operator_id, work_instructions) VALUES (NULL, NULL, @parkId, @queClass, @queComment, 1, NOW(), NOW(), NULL, @workInstructions)";
		MySqlCommand mySqlCommand2 = new MySqlCommand(cmdText2, DBconnect);
		mySqlCommand2.Parameters.AddWithValue("@parkId", kessaiYoyakuArray.park_id);
		mySqlCommand2.Parameters.AddWithValue("@queClass", value4);
		mySqlCommand2.Parameters.AddWithValue("@queComment", value5);
		mySqlCommand2.Parameters.AddWithValue("@workInstructions", value6);
		mySqlCommand2.ExecuteNonQuery();
		string error_bitmap = "pic_kessai_err_00.png";
		KessaiPrinterError(error_bitmap);
		return false;
	}

	private void KessaiErrButton_Click(object sender, EventArgs e)
	{
		waiting = false;
	}

	private void KessaiPrinterError(string error_bitmap)
	{
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\" + error_bitmap);
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		Button button = new Button();
		button.FlatStyle = FlatStyle.Flat;
		button.FlatAppearance.BorderSize = 0;
		button.BackColor = Color.Transparent;
		button.ForeColor = Color.Transparent;
		button.FlatAppearance.MouseOverBackColor = Color.Transparent;
		button.FlatAppearance.MouseDownBackColor = Color.Transparent;
		button.Size = new Size(450, 100);
		button.Location = new Point(420, 580);
		button.Click += KessaiErrButton_Click;
		form2.Controls.Add(button);
		Application.DoEvents();
		waiting = true;
		while (waiting)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		form2.Controls.Remove(button);
		KessaiEnd();
		Application.DoEvents();
	}

	private void KessaiError(string result)
	{
		Console.WriteLine("☆☆決済エラー終了");
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_err_02.png");
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		Button button = new Button();
		button.FlatStyle = FlatStyle.Flat;
		button.FlatAppearance.BorderSize = 0;
		button.BackColor = Color.Transparent;
		button.ForeColor = Color.Transparent;
		button.FlatAppearance.MouseOverBackColor = Color.Transparent;
		button.FlatAppearance.MouseDownBackColor = Color.Transparent;
		button.Size = new Size(450, 100);
		button.Location = new Point(420, 580);
		button.Click += KessaiErrButton_Click;
		form2.Controls.Add(button);
		Label label = new Label();
		label.Text = "we_" + result;
		label.Font = new Font("MS PGothic", 30f);
		Size size = TextRenderer.MeasureText(label.Text, label.Font);
		label.Location = new Point(650, 80);
		label.AutoSize = true;
		label.BackColor = Color.Transparent;
		label.ForeColor = Color.White;
		label.Name = "kessaiLabel_1";
		form2.Controls.Add(label);
		Application.DoEvents();
		waiting = true;
		while (waiting)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		form2.Controls.Remove(button);
		KessaiEnd();
		Application.DoEvents();
	}

	private void KessaiYoyaku_5()
	{
		Console.WriteLine("☆☆決済完了");
		page_name = "kessai_5";
		view_mode = true;
		KessaiPartsRemove();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_kessai_5.png");
		form2.BackgroundImage = backgroundImage;
		SetHomeButton();
		Button button = new Button();
		button.FlatStyle = FlatStyle.Flat;
		button.FlatAppearance.BorderSize = 0;
		button.BackColor = Color.Transparent;
		button.ForeColor = Color.Transparent;
		button.FlatAppearance.MouseOverBackColor = Color.Transparent;
		button.FlatAppearance.MouseDownBackColor = Color.Transparent;
		button.Size = new Size(450, 100);
		button.Location = new Point(420, 630);
		button.Name = "kessaiComplate";
		button.Click += KessaiComplateButton_Click;
		form2.Controls.Add(button);
		Application.DoEvents();
		DateTime now = DateTime.Now;
		waiting = true;
		while (waiting && (DateTime.Now - now).TotalSeconds < 10.0)
		{
			Application.DoEvents();
			Thread.Sleep(100);
		}
		KessaiEnd();
		Application.DoEvents();
	}

	private void KessaiComplateButton_Click(object sender, EventArgs e)
	{
		waiting = false;
	}

	private void KessaiPartsRemove()
	{
		form2.SuspendLayout();
		List<Control> list = new List<Control>();
		foreach (Control control in form2.Controls)
		{
			if (control is Button button && button.Name.StartsWith("kessai"))
			{
				list.Add(button);
			}
			else if (control is Label label && label.Name.StartsWith("kessai"))
			{
				list.Add(label);
			}
		}
		foreach (Control item in list)
		{
			form2.Controls.Remove(item);
			item.Dispose();
		}
		form2.ResumeLayout(performLayout: true);
	}

	public void KessaiEnd()
	{
		KessaiPartsRemove();
		waiting = false;
		page_name = null;
		MFCODE = "";
		kessaiYoyakuArray = new ExpandoObject();
		Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
		form2.BackgroundImage = backgroundImage;
		RemoveHomeButton();
		view_mode = false;
	}

	private void Form1_Shown(object sender, EventArgs e)
	{
        uint num = 0u;
		int num2 = 0;
		uint num3 = 0u;
		bool flag = true;
		string text = "";
		string str_prnprm = "";
		num = ConRead.ReadConFile(ref str_Confile);
		if (num == 1)
		{
			Application.Exit();
			return;
		}
		SO_FullScreen(MSG_NUM, 0);
		DateTime now = DateTime.Now;
		TodayLogName = now.ToString("yyyyMMdd");
		LogfilePath = str_Confile[8];
		LogfileName = str_Confile[8] + str_Confile[9] + "_" + TodayLogName + ".csv";
		if (str_Confile[5] == "1")
		{
			DEBUG_MODE = "1";
			Form3 form = new Form3();
			form.Show();
			form.TopMost = true;
		}
		else
		{
			DEBUG_MODE = "0";
		}
		DB_PORT_NUMBER = str_Confile[4];
		DB_NAME = str_Confile[3];
		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.Columns[0].Width = 60;
		dataGridView1.Columns[1].Width = 70;
		dataGridView1.Columns[2].Width = 70;
		dataGridView1.Columns[3].Width = 70;
		dataGridView1.Columns[4].Width = 90;
		dataGridView1.Columns[5].Width = 60;
		dataGridView1.Columns[7].Width = 120;
		dataGridView1.EnableHeadersVisualStyles = false;
		dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.ForestGreen;
		string text2 = Convert.ToString(DateTime.Now);
		num = Logfile.ReadLogFile();
		for (int i = 0; i < 15; i++)
		{
			dataGridView1.Rows.Add(koumoku[i, 0], koumoku[i, 1], koumoku[i, 2], koumoku[i, 3], koumoku[i, 4], koumoku[i, 5], koumoku[i, 6], koumoku[i, 7]);
		}
		if (num == 1)
		{
			SO_CommIniErr(85, 0);
			SO_WriteLog(85);
			EndProc();
			Application.Exit();
			return;
		}
		READGIP = GetGIP(str_Confile[GIP_NUM]);
		Debug.WriteLine("★★初期化完了。QR/タグ待ち受けに移行★★\u3000\u3000" + now.ToString());
		while (!quitRequested)
		{
			if (!SO_DBOpen())
			{
				SO_CommIniErr(10, 1);
				KEEPALIVE.AutoClosingMessageBox.Show("ネットワークが切断されました", "N/Wエラー", 10000);
				Thread.Sleep(3000);
			}
			if (!SO_PrnEnvRead_rty())
			{
				SO_CommIniErr(15, 2);
				EndProc();
				Application.Exit();
				return;
			}
			if (SO_DBLayoutFile() != 0)
			{
				SO_CommIniErr(15, 2);
				EndProc();
				Application.Exit();
				return;
			}
			if (!File.Exists(str_layoutFile))
			{
				Debug.WriteLine(str_layoutFile);
				Trace.WriteLine("★レイアウトファイルがありません★");
				MessageBox.Show("レイアウトファイルがありません。以下のファイルの存在を確認してください:  " + Environment.NewLine + str_layoutFile, "レイアウトファイルエラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
				SO_CommIniErr(11, 2);
				EndProc();
				Application.Exit();
				return;
			}
			form2.Text = form2.Text + "  デバイスID:" + KpAlive_devid + "  レイアウト:" + str_layoutFile;
			if (!SO_PrnInit())
			{
				Debug.WriteLine("☆☆プリンタ初期化エラー☆☆");
				form2.label1.Text = "エラー";
				form2.label1.ForeColor = Color.White;
				form2.label1.BackColor = Color.Red;
				Application.DoEvents();
				SO_CommIniErr(12, 3);
				Thread.Sleep(5000);
				Debug.WriteLine("☆☆アプリケーションリブートします☆☆");
				EndProc();
				Debug.WriteLine("\u3000\u3000☆アプリケーションリブート２");
				Application.Restart();
				Application.Exit();
				return;
			}
			Trace.WriteLine("★プリンター初期化完了★");
            
           
            
            if (!SO_MfifareInit())
			{
				SO_CommIniErr(13, 4);
				EndProc();
				Application.Exit();
				return;
			}

            if (DEBUG_MODE == "0")
            {
                 MFresult = SO_MfifareCheck();
            }
            
            if (!SO_QRcordInit())
			{
				SO_CommIniErr(14, 5);
				EndProc();
				Application.Exit();
				return;
			}
			if (!SO_ComCont(2, 6))
			{
				break;
			}
			KEEPALIVE.TIM_Main();
			uint num4 = SO_DBChk_print_area(int.Parse(str_Confile[6]));
			string text3 = "";
			int[] array = park_id_set;
			for (int j = 0; j < array.Length; j++)
			{
				int num5 = array[j];
				text3 = text3 + Convert.ToString(num5) + "/";
				if (num5 == 0)
				{
					break;
				}
				Debug.WriteLine(" --許可駐輪場ID（configまたはprint_area）：" + num5);
			}
			text3 = text3.Replace("/0/", "");
			form2.Text = vertext + " " + Prn_ParkName + " " + text3 + " " + form2.Text;
			Debug.WriteLine("☆☆処理待ちループ開始☆☆");
			Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
			form2.BackgroundImage = backgroundImage;
			RemoveHomeButton();
			while (!quitRequested)
			{
				KEEPALIVE.MyTimer_start();
				while (!quitRequested)
				{
					Application.DoEvents();
					if (EndType == 10)
					{
						EndProc();
						Application.Exit();
						return;
					}
					if (QRresult != 0)
					{
						Debug.WriteLine("☆☆QRresult" + Convert.ToString(QRresult) + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
						if (QRresult == 1)
						{
							if (DEBUG_MODE == "0")
							{
								serialPort1.Write(Tag_LED);
							}
							Thread.Sleep(500);
							num3 = QRresult;
							break;
						}
						if (QRresult == 2)
						{
							flag = SO_ComCont(50, EndType);
							EndProc();
							break;
						}
						QRresult = 0u;
					}
					else
					{
						if (DEBUG_MODE == "0")
						{
							MFresult = SO_MfifareCheck();
						}
						else if (MFresult != 0)
						{
							continue;
						}
						if (MFresult == 0)
						{
							num3 = MFresult;
							break;
						}
						if (MFresult > 10 && MFresult != 3221356545u && MFresult != 3221356547u)
						{
							flag = SO_ComCont(55, EndType);
							EndProc();
							break;
						}
					}
				}
				if (!genmenFlg_2)
				{
					form2.RemoveMachiukeButtons();
					Bitmap backgroundImage2 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic2.png");
					form2.BackgroundImage = backgroundImage2;
					RemoveHomeButton();
					Application.DoEvents();
					if ((num3 == 0 && MFresult != 0) || (num3 == 1 && QRresult == 2))
					{
						MFresult = 0u;
						QRresult = 0u;
						break;
					}
					KEEPALIVE.MyTimer_stop();
					for (int k = 0; k < Retry_num; k++)
					{
						str_uid = "";
						if (num3 == 1)
						{
							text = QRdata;
							QRresult = 0u;
							ReceptionType = "QR";
							num = SO_DBChk_qrcheck(ref text);
							Debug.WriteLine("\u3000\u3000☆1:" + num);
						}
						else
						{
							ReceptionType = "TAG";
							test_mode = false;
							num = SO_DBChk_tagnum();
							MFresult = 10u;
						}
						Debug.WriteLine("\u3000\u3000str_uid:" + str_uid);
						Debug.WriteLine("\u3000\u3000SO_DBChk_tagnum result:" + num);
						switch (num)
						{
						case 0u:
							num = SO_CommLabelOutput(num3);
							Debug.WriteLine("\u3000\u3000☆3:" + num);
							if (num != 0)
							{
								DBconnect.Open();
								continue;
							}
							break;
						case 1u:
							DBconnect.Open();
							continue;
						}
						break;
					}
					switch (num)
					{
					case 0u:
						flag = true;
						break;
					case 1u:
						flag = SO_ComCont(15, 6);
						EndProc();
						break;
					case 2u:
						flag = SO_ComCont(20, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 3u:
						flag = SO_ComCont(30, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 4u:
						flag = SO_ComCont(21, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 5u:
						flag = SO_ComCont(90, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 6u:
						flag = SO_ComCont(91, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 7u:
						flag = SO_ComCont(92, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 8u:
						flag = SO_ComCont(93, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 9u:
						Debug.WriteLine("\u3000◆読み取ったタグは対象外駐輪場");
						flag = SO_ComCont(84, EndType);
						if (flag)
						{
							continue;
						}
						break;
					case 10u:
						Debug.WriteLine("\u3000◆読み取ったQRは対象外駐輪場");
						flag = SO_ComCont(88, EndType);
						if (flag)
						{
							continue;
						}
						break;
					default:
						flag = true;
						continue;
					}
					if (!flag || num == 1)
					{
						break;
					}
					uint num6 = SO_DBChk_print_area(int.Parse(str_Confile[6]));
					int[] array2 = park_id_set;
					for (int l = 0; l < array2.Length; l++)
					{
						int num7 = array2[l];
						Debug.WriteLine("\u3000◆取得駐輪場ID：" + num7);
						if (num7 == 0)
						{
							break;
						}
					}
					num2 = SO_PRN_datchk(ref str_prnprm);
					str_logkm[6] = str_prnprm;
					Debug.WriteLine("\u3000\u3000☆SO_PRN_datchk:\u3000" + num2);
					if (num2 != 0)
					{
						if (num3 == 1)
						{
							Bitmap backgroundImage3 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_202.png");
							form2.BackgroundImage = backgroundImage3;
							RemoveHomeButton();
							Application.DoEvents();
							Thread.Sleep(3000);
						}
						Bitmap backgroundImage4 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
						form2.BackgroundImage = backgroundImage4;
						RemoveHomeButton();
						Application.DoEvents();
						if (!SO_ComCont(num2, EndType))
						{
							EndProc();
							break;
						}
						continue;
					}
					Debug.WriteLine(" --処理0");
					Bitmap backgroundImage5 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic2-1.png");
					form2.BackgroundImage = backgroundImage5;
					RemoveHomeButton();
					Application.DoEvents();
                    num = SO_PrnOut();
                    SO_PrnInit_Epson();
                    Debug.WriteLine(" --処理印刷\u3000 result " + num);
					if (num != 0)
					{
						Debug.WriteLine(" --処理１a  bResult " + SO_ComCont(40, EndType));
						Bitmap backgroundImage6 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic5.png");
						form2.BackgroundImage = backgroundImage6;
						RemoveHomeButton();
						Debug.WriteLine(" --エラー\u3000 result " + num);
						Application.DoEvents();
						Thread.Sleep(3000);
						Bitmap backgroundImage7 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
						form2.BackgroundImage = backgroundImage7;
						RemoveHomeButton();
						Application.DoEvents();
						EndProc();
						break;
					}
					flag = SO_DBInsert_seal2(num3);
					if (!test_mode)
					{
						MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
						string cmdText = "UPDATE new_contract SET validity=0 WHERE contract_id = @contractId;";
						MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
						mySqlCommand.Parameters.AddWithValue("@contractId", LOC_contract_id);
						mySqlCommand.ExecuteNonQuery();
						mySqlTransaction.Commit();
					}
					Debug.WriteLine(" --処理１b  bResult " + flag);
					num = SO_DBPrnPrm();
					if (num != 0)
					{
						flag = SO_ComCont(15, EndType);
						EndProc();
						break;
					}
					Debug.WriteLine(" --処理２");
					Prn_NowNum++;
					if (Prn_MaxNum - Prn_NowNum < Prn_Alert_num && Prn_Alert_flg == 1)
					{
						num = SO_DBOpeQue();
						if (num != 0)
						{
							flag = SO_ComCont(15, 6);
							EndProc();
							break;
						}
					}
					else
					{
						num = SO_DBNowPrnNum_rty();
						if (num != 0)
						{
							flag = SO_ComCont(15, 6);
							EndProc();
							break;
						}
					}
					Debug.WriteLine(" --処理３");
					uint num8 = SO_DBChk_print_area(int.Parse(str_Confile[6]));
					if (test_mode)
					{
						flag = SO_ComCont(90, EndType);
						Debug.WriteLine(" --処理3a  bResult " + flag);
						if (!flag)
						{
							EndProc();
							break;
						}
					}
					else
					{
						str_logkm[6] = "定期契約駐輪場ID=" + str_rctbl[9] + "、駐輪場名=" + SO_DBChk_park_name(int.Parse(str_rctbl[9])) + "、" + ReceptionType;
						flag = SO_ComCont(0, EndType);
						Debug.WriteLine(" --処理3b  bResult " + flag);
						if (!flag)
						{
							EndProc();
							break;
						}
					}
					Application.DoEvents();
					Debug.WriteLine(" --処理おわり");
					Debug.WriteLine(" --印刷完了表示");
					Bitmap backgroundImage8 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic3.png");
					form2.BackgroundImage = backgroundImage8;
					RemoveHomeButton();
					Application.DoEvents();
					Thread.Sleep(5000);
					Debug.WriteLine(" --待ち受け表示");
					Bitmap backgroundImage9 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
					form2.BackgroundImage = backgroundImage9;
					RemoveHomeButton();
					Application.DoEvents();
					Thread.Sleep(5000);
					Debug.WriteLine(" --待ち受け表示おわり");
					continue;
				}
				MFresult = 0u;
				QRresult = 0u;
				genmenFlg_2 = false;
				break;
			}
		}
		EndProc();
		Application.Exit();
	}

    /*private void SO_FullScreen(int msgn, int mode)
	{
        
        try
		{
			if (!string.IsNullOrWhiteSpace(str_Confile[msgn]) && str_Confile[msgn].Length > 2)
			{
				int num = str_Confile[msgn].Length;
				string text = str_Confile[msgn];
				if (num > 6)
				{
					num = 6;
					text = str_Confile[9].Substring(0, 6);
				}
				int num2 = 300 - (num - 3) * 40;
				int num3 = 110 + (num - 3) * 110;
				if (mode == 0)
				{
					form2.Show();
				}
				form2.label1.Text = text;
				Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic0.png");
				form2.BackgroundImage = backgroundImage;
				Debug.WriteLine("ラベル表示名： " + text);
				form2.Text = "駐ID: " + str_Confile[6] + " LOG:" + str_Confile[8] + " DBG:" + str_Confile[5];
				form2.label1.TextAlign = ContentAlignment.MiddleCenter;
				form2.TopMost = true;
				form2.WindowState = FormWindowState.Maximized;
			}
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_イメージリソースエラー:" + ex.Message + " --> " + ex);
			MessageBox.Show("起動に必要なイメージリソースが見つかりません。正しくセットアップしてください。", "リソースエラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
			Close();
			Application.Exit();
			Console.WriteLine("Exit");
		}
	}*/
    private void SO_FullScreen(int msgn, int mode)
	{
        
        try
		{
			if (!string.IsNullOrWhiteSpace(str_Confile[msgn]) && str_Confile[msgn].Length > 2)
			{
				int num = str_Confile[msgn].Length;
				string text = str_Confile[msgn];
                if (num > 6)
				{
					num = 6;
					text = str_Confile[9].Substring(0, 6);
				}
				int num2 = 300 - (num - 3) * 40;
				int num3 = 110 + (num - 3) * 110;
				if (mode == 0)
				{
					form2.Show();
				}
				form2.label1.Text = text;
				Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
				form2.BackgroundImage = backgroundImage;
				Debug.WriteLine("ラベル表示名： " + text);
				form2.Text = "駐ID: " + str_Confile[6] + " LOG:" + str_Confile[8] + " DBG:" + str_Confile[5];
				form2.label1.TextAlign = ContentAlignment.MiddleCenter;
				form2.TopMost = true;
				form2.WindowState = FormWindowState.Maximized;
			}
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_イメージリソースエラー:" + ex.Message + " --> " + ex);
			MessageBox.Show("起動に必要なイメージリソースが見つかりません。正しくセットアップしてください。", "リソースエラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
			Close();
			Application.Exit();
			Console.WriteLine("Exit");
		}
	}



    public string GetGIP(string url)
	{
		string input = "";
		try
		{
			HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
			using HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
			using Stream stream = httpWebResponse.GetResponseStream();
			using StreamReader streamReader = new StreamReader(stream, Encoding.UTF8);
			input = streamReader.ReadToEnd();
		}
		catch
		{
			Debug.WriteLine("★★_ERROR_1");
			return "N/A";
		}
		Regex regex = new Regex("<body>(?<body>.*?)</body>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
		Match match = regex.Match(input);
		string value = match.Groups["body"].Value;
		return (!string.IsNullOrWhiteSpace(value)) ? value.TrimStart() : "N/A";
	}

	private void SO_CommIniErr(int type, int n)
	{
		EndType = n;
		SO_LogEdit(type);
		if (type != 10 && type != 15)
		{
			SO_DBInsert_pjl(type);
		}
		SO_WriteLog(type);
		switch (type)
		{
		case 12:
		{
			Bitmap backgroundImage3 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic5.png");
			form2.BackgroundImage = backgroundImage3;
			RemoveHomeButton();
			break;
		}
		case 13:
		{
			Bitmap backgroundImage2 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic6.png");
			form2.BackgroundImage = backgroundImage2;
			RemoveHomeButton();
			break;
		}
		default:
		{
			Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic7.png");
			form2.BackgroundImage = backgroundImage;
			RemoveHomeButton();
			break;
		}
		}
		Application.DoEvents();
		Thread.Sleep(20000);
	}

	private bool SO_ComCont(int type, int n)
	{
		Debug.WriteLine(" ◎SO_ComCont.type：" + type);
		Debug.WriteLine(" ◎SO_ComCont.n：" + n);
		uint num = 0u;
		EndType = n;
		SO_LogEdit(type);
		if (type != 15 && (!SO_DBInsert_pjl(type) || n == 15))
		{
			SO_LogEdit(15);
			SO_WriteLog(15);
			return false;
		}
		Debug.WriteLine(" ◎To\u3000SO_WriteLog：" + type);
		num = SO_WriteLog(type);
		if (num == 1)
		{
			SO_LogEdit(87);
			Debug.WriteLine(" SO_DBInsert_pjl2：" + 87);
			SO_DBInsert_pjl(87);
			return false;
		}
		return true;
	}

	private uint SO_CommLabelOutput(uint mode)
	{
		uint num = 0u;
		num = SO_PrnLabeEdit(mode);
		if (num == 1)
		{
			return 1u;
		}
		return 0u;
	}

	public static void SO_LogFileDelCheck()
	{
		int num = 0;
		bool flag = true;
		string nwm = DateTime.Now.ToString("yyyyMM");
		string text = "";
		string text2 = "";
		DirectoryInfo directoryInfo = new DirectoryInfo(LogfilePath);
		if (!directoryInfo.Exists)
		{
			return;
		}
		FileInfo[] files = directoryInfo.GetFiles();
		for (num = 0; num < files.Length; num++)
		{
			string text3 = Convert.ToString(files[num]);
			if (text3.Length == 24)
			{
				text2 = text3.Substring(text3.Length - 12, 12);
				text = text2.Substring(0, 6);
				if (!LogFileChk_Mo(nwm, text))
				{
					File.Delete(LogfilePath + files[num]);
				}
			}
		}
	}

	public static bool LogFileChk_Mo(string Nwm, string Tgm)
	{
		string text = Nwm.Substring(0, 4);
		int num = Convert.ToInt32(Nwm.Substring(0, 4));
		int num2 = Convert.ToInt32(Tgm.Substring(0, 4));
		int num3 = Convert.ToInt32(Nwm.Substring(4, 2));
		int num4 = Convert.ToInt32(Tgm.Substring(4, 2));
		int num5 = Convert.ToInt32(str_Confile[10]);
		int num6 = num3 - num4;
		if (num6 < 0)
		{
			num6 += 12;
			num--;
		}
		int num7 = num - num2;
		if (num7 < 0)
		{
			return true;
		}
		int num8 = num7 * 12 + num6;
		if (num8 > num5)
		{
			return false;
		}
		return true;
	}

	private int SO_PRN_datchk(ref string str_prnprm)
	{
		string text = DateTime.Now.ToString("yyyy/MM/dd");
		if (test_mode)
		{
			return 0;
		}
		if (str_rctbl[4] != "1" || str_rctbl[5] != "1")
		{
			str_prnprm = $"シール発行不可   授受フラグ={str_rctbl[4]}、 シール発行許可={str_rctbl[5]}";
			return 81;
		}
		if (text.CompareTo(str_rctbl[2]) > 0)
		{
			str_prnprm = $"シール発行不可   本日={text}、 有効期間E={str_rctbl[2]}";
			return 82;
		}
		if (text.CompareTo(str_rctbl[3]) < 0)
		{
			str_prnprm = $"シール発行不可   本日={text}、 シール印刷可能日={str_rctbl[3]}";
			return 83;
		}
		if (SO_Chk_print_area(int.Parse(str_rctbl[9])) == 0)
		{
			string text2 = "";
			int[] array = park_id_set;
			foreach (int num in array)
			{
				text2 = text2 + Convert.ToString(num) + "/";
				if (num == 0)
				{
					break;
				}
			}
			Debug.WriteLine(" ++定期契約駐輪場ID：" + str_rctbl[9]);
			Debug.WriteLine(" ++許可駐輪場群ID：" + text2);
			str_prnprm = string.Format("対象駐輪場範囲外   定期契約駐輪場ID={0}、 許可された駐輪場ID群={1}", str_rctbl[9], text2.Replace("/0/", ""));
			return 84;
		}
		return 0;
	}

	private void button1_Click(object sender, EventArgs e)
	{
		EndType = 10;
	}

	private void SO_LogEdit(int n)
	{
		DateTime now = DateTime.Now;
		FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
		Console.WriteLine(versionInfo.ProductVersion);
		vertext = " Ver." + versionInfo.ProductVersion;
		switch (n)
		{
		case 0:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "シール印刷";
			str_logkm[4] = "正常印刷";
			str_logkm[5] = "0";
			break;
		case 2:
			str_logkm[0] = " ";
			str_logkm[2] = " ";
			str_logkm[3] = " ";
			str_logkm[4] = "開始";
			str_logkm[5] = "0";
			str_logkm[6] = "[" + str_Confile[0] + "]（自機GIP=" + READGIP + "） " + Prn_ParkName + vertext;
			break;
		case 15:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 113.ToString();
			str_logkm[6] = "DBアクセスエラー";
			break;
		case 10:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "DBアタッチエラー";
			str_logkm[5] = 100.ToString();
			str_logkm[6] = "DB OPENに失敗";
			break;
		case 11:
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "レイアウトファイルエラー";
			str_logkm[5] = 110.ToString();
			str_logkm[6] = "レイアウトファイルが見つからない " + str_layoutFile;
			break;
		case 12:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "プリンタ初期化エラー";
			str_logkm[5] = 200.ToString();
			str_logkm[6] = "プリンタ初期化に失敗";
			break;
		case 13:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "カードリーダ初期化エラー";
			str_logkm[5] = 300.ToString();
			str_logkm[6] = "Mifareリーダ初期化に失敗";
			break;
		case 14:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "カードリーダ初期化エラー";
			str_logkm[5] = 301.ToString();
			str_logkm[6] = "QRコードリーダ初期化に失敗";
			break;
		case 20:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 1.ToString();
			str_logkm[6] = "タグ利用者なし （該当Mifareコードなし）  CODE=(" + MFCODE + ")";
			break;
		case 92:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 1.ToString();
			str_logkm[6] = "タグ\u3000シール発行済  CODE=(" + MFCODE + " → " + LOC_contract_id + ")";
			break;
		case 93:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 1.ToString();
			str_logkm[6] = "タグ\u3000費用未払い  CODE=(" + MFCODE + " → " + LOC_contract_id + ")";
			break;
		case 21:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 5.ToString();
			str_logkm[6] = "タグ利用者なし （該当利用者IDなし）";
			break;
		case 30:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 3.ToString();
			str_logkm[6] = "該当QRコードなし  CODE=(" + QRdata + ")";
			break;
		case 91:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 3.ToString();
			str_logkm[6] = "該当QRシール発行済  CODE=(" + QRdata + " → " + LOC_contract_id + ")";
			break;
		case 40:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 201.ToString();
			str_logkm[6] = "プリンタエラー";
			break;
		case 50:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 303.ToString();
			str_logkm[6] = "QRコード読み取りエラー";
			break;
		case 55:
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 302.ToString();
			str_logkm[6] = "Mifare読み取りエラー";
			break;
		case 80:
			str_logkm[0] = "";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "error";
			str_logkm[5] = 80.ToString();
			str_logkm[6] = "設定ファイル読み込みエラー";
			break;
		case 85:
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "初期化処理";
			str_logkm[4] = "error";
			str_logkm[5] = 111.ToString();
			str_logkm[6] = "ログファイル読み込みエラー";
			break;
		case 87:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 112.ToString();
			str_logkm[6] = "ログファイル書き込みエラー";
			break;
		case 81:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 50.ToString();
			str_logkm[6] = "授受フラグまたはシール発行許可エラー";
			break;
		case 82:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 51.ToString();
			str_logkm[6] = "「有効期間S」と「有効期間E」の間でない";
			break;
		case 83:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "利用者確認";
			str_logkm[4] = "error";
			str_logkm[5] = 52.ToString();
			str_logkm[6] = "「シール印刷可能日」以降でない";
			break;
		case 84:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "対象駐輪場外";
			str_logkm[4] = "error";
			str_logkm[5] = 53.ToString();
			str_logkm[6] = "対象駐輪場範囲外(TAG)   定期契約駐輪場ID=" + Tag_ParkID + " TAG=" + MFCODE;
			break;
		case 88:
			str_logkm[0] = " ";
			str_logkm[2] = "定期シール発行";
			str_logkm[3] = "対象駐輪場外";
			str_logkm[4] = "error";
			str_logkm[5] = 53.ToString();
			str_logkm[6] = "対象駐輪場範囲外(QR)   定期契約駐輪場ID=" + LOC_park_id;
			break;
		case 90:
			str_logkm[0] = " ";
			str_logkm[2] = "シール発行テスト";
			str_logkm[3] = "テスト";
			str_logkm[4] = "test";
			str_logkm[5] = 400.ToString();
			str_logkm[6] = "QRコードによるテスト印刷";
			break;
		}
		str_logkm[1] = str_Confile[6];
		str_logkm[7] = now.ToString();
	}

	private uint SO_WriteLog(int type)
	{
       

        uint result = 0u;
		string text = "";
		string text2 = Convert.ToString(DateTime.Now);
		string text3 = DateTime.Now.ToString("yyyyMMdd");
		if (string.Compare(text3, TodayLogName) != 0)
		{
			LogfilePath = str_Confile[8];
			LogfileName = str_Confile[8] + str_Confile[9] + "_" + TodayLogName + ".csv";
			TodayLogName = text3;
		}
		try
		{
			using StreamWriter streamWriter = new StreamWriter(LogfileName, append: true, Encoding.GetEncoding("utf-8"));
			if (type != 0)
			{
				Debug.WriteLine(" ◎◎SO_WriteLog.type：" + type);
				Bitmap bitmap = null;
				if (type == 30 || type == 91 || type == 20 || type == 92 || type == 93 || type == 84 || type == 88 || type == 82)
				{
					Application.DoEvents();
					if (DEBUG_MODE == "0" && BEEP_MODE == "1")
					{
						Debug.WriteLine("★BEEP:" + str_logkm[5]);
						for (int i = 0; i < 10; i++)
						{
							serialPort1.Write(Tag_LED_ERR);
							Application.DoEvents();
							Thread.Sleep(200);
						}
					}
					int num = 0;
					int num2 = -1;
					int num3 = -1;
                    Debug.WriteLine("★MFresult:" + MFresult);
                    Debug.WriteLine("★MFCODE:" + MFCODE);
                    if (MFresult == 10 && MFCODE != "")
					{
						num3 = CheckNewContract(MFCODE);
                        Debug.WriteLine("★num3:" +num3);
                        switch (num3)
						{
						case 0:
							Console.WriteLine("SOMPR-110に進む");
							SOMPR_110();
							break;
						case 1:
							Console.WriteLine("SOMPR-120に進む");
							SOMPR_120();
							break;
						case 3:
							Console.WriteLine("更新期間外");
							break;
						default:
							num = CheckContractRenewal(MFCODE);
							break;
						}
					}
					if (num != 0 && num3 != 0 && num3 != 1 && num3 != 3)
					{
						num2 = CheckContractRenewalPeriod(num);
						if (num2 > 0)
						{
							Console.WriteLine("減免のチェックをする");
							int num4 = CheckGenmen(MFCODE, num);
							switch (num4)
							{
							case 1:
								ZeroenKoushin(MFCODE, num);
								break;
							case 2:
								MFCODE = "";
								break;
							default:
								Console.WriteLine("決済チェックOK。決済処理に進む");
								KessaiYoyaku(MFCODE, num, num4);
								while (view_mode)
								{
									Application.DoEvents();
								}
								break;
							}
						}
					}
					else if (num3 != 0 && num3 != 1 && num3 != 3)
					{
						if (num != 0)
						{
							num2 = CheckContractRenewalPeriod(num);
						}
						if (num2 != 0)
						{
							if (type == 30)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_202.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							if (type == 91)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_204.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							if (type == 20)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_201.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							if (type == 92)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_203.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							if (type == 93)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_205.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							if (type == 84)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_201.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							if (type == 88)
							{
								bitmap = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic_err_202.png");
								form2.BackgroundImage = bitmap;
								RemoveHomeButton();
							}
							Application.DoEvents();
							Thread.Sleep(3000);
						}
					}
					Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic1.png");
					form2.BackgroundImage = backgroundImage;
					RemoveHomeButton();
					Application.DoEvents();
				}
				text = str_logkm[0] + "," + str_uid + "," + LOC_contract_id + "," + str_logkm[1] + "," + str_logkm[2] + "," + str_logkm[3] + "," + str_logkm[4] + "," + str_logkm[5] + "," + str_logkm[6] + "," + str_logkm[7] + "," + ERRORINFO + "," + DEBUG_MODE;
				Debug.WriteLine("！アラートログ書込み:" + text);
			}
			else
			{
				text = str_logkm[0] + "," + str_uid + "," + LOC_contract_id + "," + str_logkm[1] + "," + str_logkm[2] + "," + str_logkm[3] + "," + str_logkm[4] + "," + str_logkm[5] + "," + str_logkm[6] + "," + str_logkm[7] + ",," + DEBUG_MODE;
				Debug.WriteLine("！ノーマルログ書込み:" + text);
			}
			streamWriter.WriteLine(text);
		}
		catch (Exception ex) when (ex is IOException)
		{
			Debug.WriteLine("★★_ERROR_2\u3000ログファイルオープンエラー:" + ex.Message + " --> " + ex);
			MessageBox.Show("SOM_config.datのログフォルダ指定に誤りがあるか、ログファイルが別のプログラムで開かれています。閉じてください。", "ログファイルオープンエラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
			Trace.WriteLine(ex.Message);
			result = 1u;
		}
		catch (Exception ex2)
		{
			Debug.WriteLine("★★_ERROR_2B\u3000その他エラー:" + ex2.Message + " --> " + ex2);
			Trace.WriteLine(ex2.Message);
			result = 1u;
		}
		for (int num5 = 14; num5 > 0; num5--)
		{
			for (int j = 0; j < 8; j++)
			{
				dataGridView1[j, num5].Value = dataGridView1[j, num5 - 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];
		Refresh();
		ERRORINFO = "";
		return result;
	}

	private bool SO_DBOpen()
	{
		bool result = true;
		Debug.WriteLine("★DBパラメータ:server={0};port={1};user={2};password={3};database={4};SSL Mode=None", str_Confile[0], DB_PORT_NUMBER, str_Confile[1], str_Confile[2], DB_NAME);
		connectionParams = $"server={str_Confile[0]};port={DB_PORT_NUMBER};user={str_Confile[1]};password={str_Confile[2]};database={DB_NAME};SSL Mode=None";
		DBconnect = new MySqlConnection(connectionParams);
		try
		{
			DBconnect.Open();
			Debug.WriteLine("DBconnect open");
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_3");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "DBOPENエラー=" + ex.Message;
			result = false;
		}
		return result;
	}

	public static uint SO_DBPrnPrm()
	{
		if (test_mode)
		{
			return 0u;
		}
		DateTime now = DateTime.Now;
		string text = "update regular_contract set contract_seal_issue=" + Convert.ToString(Convert.ToInt32(str_rctbl[7]) + 1) + ", contract_permission=0 , updated_at = '" + now.ToString() + "' where user_id=" + str_uid + " and contract_id=" + str_rctbl[0] + ";";
		Debug.WriteLine("★シール印刷後更新SQL:" + text);
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
			mySqlCommand.CommandTimeout = 1;
			mySqlCommand.ExecuteNonQuery();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_4");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "定期契約マスタ更新エラー=" + ex.Message;
			DBconnect.Close();
			return 1u;
		}
		return 0u;
	}

	public static int SO_DBKpAlive(string Insert_SQL)
	{
		try
		{
			if (DBconnect.State != ConnectionState.Open)
			{
				DBconnect.Open();
				Debug.WriteLine("KeepAlive_DB再接続しました");
			}
			else
			{
				Debug.WriteLine("KeepAlive_DB接続中");
			}
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlCommand mySqlCommand = new MySqlCommand(Insert_SQL, DBconnect);
			mySqlCommand.CommandTimeout = 1;
			mySqlCommand.ExecuteNonQuery();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_5 N/W停止:" + ex.Message);
			Trace.WriteLine(ex.Message);
			ERRORINFO = "デバイス管理マスタ書き込みエラー=" + ex.Message;
			DBconnect.Close();
			return 1;
		}
		return 0;
	}

	private uint SO_DBNowPrnNum_rty()
	{
		uint num = 0u;
		if (test_mode)
		{
			return 0u;
		}
		for (int i = 0; i < Retry_num; i++)
		{
			num = SO_DBNowPrnNum();
			if (num == 1)
			{
				Trace.WriteLine("error");
				ERRORINFO = "駐輪場マスタ：印字数更新時エラー";
				DBconnect.Open();
				continue;
			}
			return 0u;
		}
		return 1u;
	}

	private uint SO_DBNowPrnNum()
	{
		DateTime now = DateTime.Now;
		string cmdText = "update park set print_number=" + Convert.ToString(Prn_NowNum) + " where park_id=" + str_Confile[6] + ";";
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
			mySqlCommand.CommandTimeout = 1;
			mySqlCommand.ExecuteNonQuery();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_6");
			Trace.WriteLine(ex.Message);
			DBconnect.Close();
			return 1u;
		}
		return 0u;
	}

	private uint SO_DBOpeQue()
	{
		if (test_mode)
		{
			return 0u;
		}
		MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
		DateTime now = DateTime.Now;
		string text = "INSERT INTO operator_que (park_id, que_class, que_status_comment, work_instructions, created_at, que_status) VALUES (" + str_Confile[6] + ",104,'" + str_Confile[7] + "','" + Prn_ParkName + "の用紙がもうすぐ無くなります。交換してください','" + now.ToString() + "',1);";
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		Trace.WriteLine(text);
		try
		{
			mySqlCommand.ExecuteNonQuery();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_7");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "オペレータキューテーブルレコード追加時エラー";
			return 1u;
		}
		return 0u;
	}

	private int SO_DBLayoutFile()
	{
		string text = "";
		MySqlCommand mySqlCommand = new MySqlCommand(DBREAD_print_layout + str_Confile[6] + ";", DBconnect);
		Trace.WriteLine("★	:" + DBREAD_print_layout + str_Confile[6]);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				text = Convert.ToString(mySqlDataReader["print_layout"]);
				Trace.WriteLine("★レイアウトファイル:" + text);
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_8");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "印字レイアウトファイル名読み取り時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			return 1;
		}
		str_layoutFile = Directory.GetCurrentDirectory() + "\\" + text + ".CLF";
		return 0;
	}

	private bool SO_PrnEnvRead_rty()
	{
		bool flag = true;
		for (int i = 0; i < Retry_num; i++)
		{
			if (!SO_PrnEnvRead())
			{
				Trace.WriteLine("error");
				ERRORINFO = "設定マスタ(setting),デバイス管理マスタ(device)読み取り時エラー発生";
				DBconnect.Open();
				continue;
			}
			return true;
		}
		return false;
	}

	private bool SO_PrnEnvRead()
	{
		string text = "select printable_alert_flag,printable_number,printable_alert_number from setting ORDER BY setting_id DESC;";
		string text2 = "select park_name, print_number  from park where park_id=" + str_Confile[6] + ";";
		string text3 = "select device_id from device where park_id=" + str_Confile[6] + " and device_type='プリンタ' and device_work='1';";
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		Debug.WriteLine("★設定取得SQL:" + text);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				Prn_Alert_flg = Convert.ToInt32(mySqlDataReader["printable_alert_flag"]);
				Prn_MaxNum = Convert.ToInt32(mySqlDataReader["printable_number"]);
				Prn_Alert_num = Convert.ToInt32(mySqlDataReader["printable_alert_number"]);
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (MySqlException ex)
		{
			Debug.WriteLine("★★_ERROR_9");
			Trace.WriteLine(ex.Message);
			DBconnect.Close();
			mySqlCommand.Dispose();
			return false;
		}
		catch (Exception ex2)
		{
			Debug.WriteLine("★★_ERROR_10");
			Trace.WriteLine(ex2.Message);
			DBconnect.Close();
			mySqlCommand.Dispose();
			return false;
		}
		MySqlCommand mySqlCommand2 = new MySqlCommand(text2, DBconnect);
		Debug.WriteLine("★駐車場取得取得SQL:" + text2);
		mySqlCommand2.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction2 = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader2 = mySqlCommand2.ExecuteReader();
			while (mySqlDataReader2.Read())
			{
				Prn_ParkName = Convert.ToString(mySqlDataReader2["park_name"]);
				if (mySqlDataReader2.IsDBNull(1))
				{
					Prn_NowNum = 0;
				}
				else
				{
					Prn_NowNum = Convert.ToInt32(mySqlDataReader2["print_number"]);
				}
			}
			mySqlDataReader2.Close();
			mySqlTransaction2.Commit();
		}
		catch (Exception ex3)
		{
			Debug.WriteLine("★★_ERROR_11");
			Trace.WriteLine(ex3.Message);
			DBconnect.Close();
			mySqlCommand2.Dispose();
			return false;
		}
		MySqlCommand mySqlCommand3 = new MySqlCommand(text3, DBconnect);
		Debug.WriteLine("★デバイスID取得SQL:" + text3);
		mySqlCommand3.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction3 = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader3 = mySqlCommand3.ExecuteReader();
			while (mySqlDataReader3.Read())
			{
				KpAlive_devid = Convert.ToString(mySqlDataReader3["device_id"]);
			}
			mySqlDataReader3.Close();
			mySqlTransaction3.Commit();
		}
		catch (Exception ex4)
		{
			Debug.WriteLine("★★_ERROR_12");
			Trace.WriteLine(ex4.Message);
			DBconnect.Close();
			mySqlCommand3.Dispose();
			return false;
		}
		if (string.IsNullOrWhiteSpace(KpAlive_devid))
		{
			KpAlive_devid = "99";
		}
		return true;
	}

	private uint SO_DBChk_qrnum(ref string str_qrc)
	{
		string cmdText = "select user_id, contract_id ,park_id from regular_contract where contract_qr_id='" + str_qrc + "';";
		MySqlCommand mySqlCommand = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			if (object.Equals(str_qrc, TESTQR_STRING))
			{
				test_mode = true;
				Debug.WriteLine("◆QRテストモード\u3000オン");
				mySqlTransaction.Commit();
				return 0u;
			}
			test_mode = false;
			Debug.WriteLine("◆QRテストモード\u3000オフ");
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				str_uid = Convert.ToString(mySqlDataReader["user_id"]);
				LOC_contract_id = Convert.ToString(mySqlDataReader["contract_id"]);
				LOC_park_id = Convert.ToString(mySqlDataReader["park_id"]);
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_13");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "該当定期契約QRID検索時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			return 1u;
		}
		if (str_uid.Length == 0)
		{
			return 3u;
		}
		return 0u;
	}

	private uint SO_DBChk_qrcheck(ref string str_qrc)
	{
		int num = 0;
		string text = "";
		string text2 = "";
		string text3 = "select user_id, contract_id, contract_flag, contract_permission,park_id from regular_contract where contract_qr_id='" + str_qrc + "' ORDER BY updated_at DESC limit 1;";
		Debug.WriteLine("◆◆_SO_DBChk_qrcheck: " + text3);
		MySqlCommand mySqlCommand = new MySqlCommand(text3, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			if (object.Equals(str_qrc, TESTQR_STRING))
			{
				test_mode = true;
				Debug.WriteLine("◆QRテストモード\u3000オン");
				mySqlTransaction.Commit();
				return 0u;
			}
			test_mode = false;
			Debug.WriteLine("◆QRテストモード\u3000オフ");
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				num = 1;
				text = Convert.ToString(mySqlDataReader["contract_permission"]);
				text2 = Convert.ToString(mySqlDataReader["contract_flag"]);
				str_uid = Convert.ToString(mySqlDataReader["user_id"]);
				LOC_contract_id = Convert.ToString(mySqlDataReader["contract_id"]);
				LOC_park_id = Convert.ToString(mySqlDataReader["park_id"]);
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("◆◆_ERROR_20");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "該当定期契約QRIDチェックエラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			return 1u;
		}
		if (num == 0)
		{
			Debug.WriteLine("◆◆_SO_DBChk_qrcheck_エラー：該当QRレコードなし: " + str_qrc);
			return 3u;
		}
		Debug.WriteLine("◆◆_SO_DBChk_qrcheck_contract_permission: " + text);
		if (text2.Equals("False"))
		{
			Debug.WriteLine("◆◆_SO_DBChk_qrcheck_エラー：QR未決済: " + str_qrc);
			return 3u;
		}
		if (text.Equals("False"))
		{
			Debug.WriteLine("◆◆_SO_DBChk_qrcheck_エラー：シール発行済: " + str_qrc);
			return 6u;
		}
		if (SO_Chk_print_area(int.Parse(LOC_park_id)) == 0)
		{
			Debug.WriteLine("◆◆_SO_DBChk_qrcheck_エラー：対象駐輪場外: " + LOC_park_id);
			return 10u;
		}
		Debug.WriteLine("◆◆_SO_DBChk_qrcheck_正常終了: " + str_qrc);
		return 0u;
	}

	private uint SO_DBChk_print_area(int set_park_id)
	{
		Array.Clear(park_id_set, 0, 500);
		string text = "select park_id from print_area where print_area_name = (select print_area_name from print_area where park_id= '" + set_park_id + "');";
		Debug.WriteLine("★シール印刷範囲マスタ取得SQL:" + text);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			int num = 0;
			while (mySqlDataReader.Read())
			{
				park_id_set[num] = Convert.ToInt32(mySqlDataReader["park_id"]);
				num++;
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_14");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "シール印刷範囲マスタ検索時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			return 1u;
		}
		if (park_id_set[0] == 0)
		{
			park_id_set[0] = set_park_id;
			return 0u;
		}
		return 0u;
	}

	private string SO_DBChk_park_name(int park_id)
	{
		string result = "";
		string text = "select park_name from park where park_id =" + park_id;
		Debug.WriteLine("★駐輪場名取得SQL:" + text);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			int num = 0;
			while (mySqlDataReader.Read())
			{
				result = Convert.ToString(mySqlDataReader["park_name"]);
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_15");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "駐輪場名検索時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			return "N/A";
		}
		return result;
	}

	private int SO_Chk_print_area(int park_id)
	{
		Debug.WriteLine("★シール印刷範囲チェック:" + park_id);
		int[] array = park_id_set;
		for (int i = 0; i < array.Length; i++)
		{
			int num = array[i];
			Debug.WriteLine(" --チェック取得駐輪場ID：" + num);
			if (num == park_id)
			{
				Debug.WriteLine(" --チェックOK");
				return 1;
			}
			if (num == 0)
			{
				break;
			}
		}
		Debug.WriteLine(" --チェックNG");
		return 0;
	}

	private uint SO_DBChk_tagnum()
	{
		string text = "";
		string text2 = "";
		string text3 = "";
		string text4 = "select distinct t2.user_id, t2.contract_id, t2.park_id, t2.contract_flag, t2.contract_permission from (user t1, regular_contract t2) where t1.user_seq = t2.user_id and t1.user_tag_serial='" + MFCODE + "' ORDER BY t2.updated_at DESC , t2.contract_id DESC LIMIT 1;";
		Debug.WriteLine("\u3000〓〓タグからユーザー取得SQL:" + text4);
		MySqlCommand mySqlCommand = new MySqlCommand(text4, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				str_uid = Convert.ToString(mySqlDataReader["user_id"]);
				LOC_contract_id = Convert.ToString(mySqlDataReader["contract_id"]);
				text = Convert.ToString(mySqlDataReader["contract_flag"]);
				text2 = Convert.ToString(mySqlDataReader["contract_permission"]);
				text3 = (Tag_ParkID = Convert.ToString(mySqlDataReader["park_id"]));
			}
			mySqlDataReader.Close();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("\u3000〓〓_ERROR_16");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "該当タグシリアル検索時エラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			return 1u;
		}
		if (str_uid.Length == 0)
		{
			Debug.WriteLine("\u3000〓〓_SO_DBChk_tagnum_エラー：該当レコード無し: " + MFCODE);
			return 2u;
		}
		Debug.WriteLine("\u3000\u3000〓〓_SO_DBChk_tagnum：s_contract_flag(授受フラグ): " + text);
		Debug.WriteLine("\u3000\u3000〓〓_SO_DBChk_tagnum：s_contract_permission（印刷許可フラグ）: " + text2);
		Debug.WriteLine("\u3000\u3000〓〓_SO_DBChk_tagnum：最新定期契約 park_id: " + text3);
		if (SO_Chk_print_area(int.Parse(text3)) == 0)
		{
			Debug.WriteLine("\u3000〓〓_SO_DBChk_tagnum_エラー：該当駐輪場外: " + text3);
			return 9u;
		}
		if (!text.Equals("True"))
		{
			Debug.WriteLine("\u3000〓〓_SO_DBChk_tagnum_エラー：未授受: " + LOC_contract_id);
			return 8u;
		}
		if (text2.Equals("False"))
		{
			Debug.WriteLine("\u3000〓〓_SO_DBChk_tagnum_エラー：シール発行済: " + LOC_contract_id);
			return 7u;
		}
		return 0u;
	}

    /*private int SO_DBPrndat_01(uint type)
	{
		str_rctbl = new string[11];
		string text = "";
		string text2 = "";
		string text3 = "";
		string text4 = ((type == 0 || type == 3) ? (DBREAD_Prndat01[type] + DBREAD_Prndat02[type] + "'" + MFCODE + "' ORDER BY ta3.updated_at DESC LIMIT 1;") : ((type != 2) ? (DBREAD_Prndat01[type] + DBREAD_Prndat02[type] + "'" + QRdata + "';") : (DBREAD_Prndat01[type] + DBREAD_Prndat02[type] + "'" + MFCODE + "' ORDER BY ta3.updated_at DESC LIMIT 1;")));
		if (DEBUG_MODE == "1")
		{
			MessageBox.Show("シール印刷用SQL：" + text4, "デバッグモード", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
		}
		Debug.WriteLine("★シール印刷データ取得SQL_A:" + DBREAD_Prndat01[type]);
		Debug.WriteLine("★シール印刷データ取得SQL_B(park_id):" + str_Confile[6]);
		Debug.WriteLine("★シール印刷データ取得SQL_C:" + DBREAD_Prndat02[type]);
		Debug.WriteLine("★シール印刷データ取得SQL_D:" + MFCODE);
		Debug.WriteLine("★シール印刷データ取得SQL_E:" + QRdata);
		Debug.WriteLine("★シール印刷データ取得SQL_ALL:" + text4);
		MySqlCommand mySqlCommand = new MySqlCommand(text4, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			int num = 0;
			MySqlTransaction mySqlTransaction = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				str_Prndat[0] = Convert.ToString(mySqlDataReader["park_name"]);
				str_Prndat[2] = Convert.ToString(mySqlDataReader["ptype_subject"]);
				str_Prndat[7] = Convert.ToString(mySqlDataReader["city_name"]);
				str_Prndat[8] = Convert.ToString(mySqlDataReader["user_id"]);
				str_Prndat[12] = Convert.ToString(mySqlDataReader["user_seq"]);
				str_Prndat[11] = Convert.ToString(mySqlDataReader["zone_name"]);
				if (string.IsNullOrEmpty(Convert.ToString(mySqlDataReader["pplace_no"])))
				{
					str_Prndat[9] = str_Prndat[11];
				}
				else
				{
					str_Prndat[9] = str_Prndat[11] + ":" + Convert.ToString(mySqlDataReader["pplace_no"]);
				}
				text = Convert.ToString(mySqlDataReader["contract_periode"]);
				text2 = Convert.ToString(mySqlDataReader["contract_id"]);
				text3 = Convert.ToString(mySqlDataReader["usertype_subject1"]);
				str_rctbl[3] = Convert.ToString(mySqlDataReader["printable_date"]);
				str_rctbl[4] = ((mySqlDataReader["contract_flag"] != DBNull.Value) ? Convert.ToString(Convert.ToInt16(mySqlDataReader["contract_flag"])) : "0");
				str_rctbl[5] = ((mySqlDataReader["contract_permission"] != DBNull.Value) ? Convert.ToString(Convert.ToInt16(mySqlDataReader["contract_permission"])) : "0");
				str_rctbl[7] = Convert.ToString(mySqlDataReader["contract_seal_issue"]);
				str_rctbl[8] = Convert.ToString(mySqlDataReader["user_id"]);
				str_rctbl[9] = Convert.ToString(mySqlDataReader["park_id"]);
				str_rctbl[10] = Convert.ToString(Convert.ToInt16(mySqlDataReader["tag_qr_flag"]));
				if (string.IsNullOrWhiteSpace(str_rctbl[7]))
				{
					str_rctbl[7] = "0";
					num = 0;
				}
				else
				{
					num = Convert.ToInt32(str_rctbl[7]);
				}
			}
			mySqlDataReader.Close();
			if (text3 == "学生")
			{
				str_Prndat[1] = "学";
			}
			else
			{
				str_Prndat[1] = " ";
			}
			if (num > 0)
			{
				str_Prndat[5] = "再" + str_rctbl[7];
			}
			else
			{
				str_Prndat[5] = "";
			}
			if (str_rctbl[10] == "0" || str_rctbl[10] == "False")
			{
				str_Prndat[10] = "●";
			}
			else
			{
				str_Prndat[10] = "";
			}
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_17");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "シールの印字内容を読み取り時にエラー発生";
			DBconnect.Close();
			mySqlCommand.Dispose();
			for (int i = 0; i < 8; i++)
			{
				str_rctbl[i] = " ";
			}
			return 1;
		}
		if (type == 2 || type == 3)
		{
			text = kessaiYoyakuArray.contract_periode;
			str_rctbl[3] = kessaiYoyakuArray.contract_periode;
		}
		if (string.IsNullOrWhiteSpace(str_Prndat[0]) || string.IsNullOrWhiteSpace(str_Prndat[2]) || string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(text2) || string.IsNullOrWhiteSpace(str_rctbl[3]) || string.IsNullOrWhiteSpace(str_rctbl[5]) || string.IsNullOrWhiteSpace(str_rctbl[8]))
		{
			DBconnect.Close();
			ERRORINFO = "シールの印字内容を読み取り時にエラー発生";
			return 1;
		}
		Cperiods(text, ref str_Prndat[3]);
		Cperiode(text, ref str_Prndat[4]);
		str_Prndat[6] = text2;
		str_rctbl[0] = text2;
		str_rctbl[2] = text.Substring(0, 10);
		str_rctbl[3] = str_rctbl[3].Substring(0, 10);
		str_Prndat[0] = SO_DBChk_park_name(int.Parse(str_rctbl[9]));
		Debug.WriteLine("\u3000\u3000☆定期契約Ｘ park_id:" + str_rctbl[9]);
		Debug.WriteLine("\u3000\u3000☆定期契約Ｘ park_name:" + str_Prndat[0]);
		return 0;
	}*/
    private int SO_DBPrndat_01(uint type)
    {
        // 清空/准备缓冲
        str_rctbl = new string[11];
        string periode = "";
        string contractId = "";
        string userType1 = "";

        // 组SQL
        string sql =
            (type == 0 || type == 3)
                ? (DBREAD_Prndat01[type] + DBREAD_Prndat02[type] + "'" + MFCODE + "' ORDER BY ta3.updated_at DESC LIMIT 1;")
                : (type != 2)
                    ? (DBREAD_Prndat01[type] + DBREAD_Prndat02[type] + "'" + QRdata + "';")
                    : (DBREAD_Prndat01[type] + DBREAD_Prndat02[type] + "'" + MFCODE + "' ORDER BY ta3.updated_at DESC LIMIT 1;");

        if (DEBUG_MODE == "1")
            MessageBox.Show("シール印刷用SQL：" + sql, "デバッグモード", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

        Debug.WriteLine("★シール印刷データ取得SQL_A:" + DBREAD_Prndat01[type]);
        Debug.WriteLine("★シール印刷データ取得SQL_B(park_id):" + str_Confile[6]);
        Debug.WriteLine("★シール印刷データ取得SQL_C:" + DBREAD_Prndat02[type]);
        Debug.WriteLine("★シール印刷データ取得SQL_D:" + MFCODE);
        Debug.WriteLine("★シール印刷データ取得SQL_E:" + QRdata);
        Debug.WriteLine("★シール印刷データ取得SQL_ALL:" + sql);

        using (var cmd = new MySqlCommand(sql, DBconnect))
        {
            cmd.CommandTimeout = 10; // 读1行给10秒更稳

            try
            {
                using (var r = cmd.ExecuteReader())
                {
                    if (!r.HasRows)
                    {
                        Trace.WriteLine("[Prndat01] NO ROWS for QR=" + QRdata + ", park_id=" + str_Confile[6]);
                        ERRORINFO = "印字データが見つかりません";
                        return 1;
                    }

                    // 便捷安全取值
                    string S(string col) => r[col] == DBNull.Value ? "" : Convert.ToString(r[col]);
                    int I(string col, int def = 0) => r[col] == DBNull.Value ? def : Convert.ToInt32(r[col]);

                    int reissueCount = 0;

                    // 只要第一条完整记录
                    while (r.Read())
                    {
                        str_Prndat[0] = S("park_name");
                        str_Prndat[2] = S("ptype_subject");
                        str_Prndat[7] = S("city_name");
                        str_Prndat[8] = S("user_id");
                        str_Prndat[12] = S("user_seq");
                        str_Prndat[11] = S("zone_name");

                        var pplace = S("pplace_no");
                        str_Prndat[9] = string.IsNullOrEmpty(pplace) ? str_Prndat[11] : $"{str_Prndat[11]}:{pplace}";

                        periode = S("contract_periode");
                        contractId = S("contract_id");
                        userType1 = S("usertype_subject1");

                        str_rctbl[3] = S("printable_date");
                        str_rctbl[4] = I("contract_flag", 0).ToString();
                        str_rctbl[5] = I("contract_permission", 0).ToString();
                        str_rctbl[7] = S("contract_seal_issue");
                        str_rctbl[8] = S("user_id");
                        str_rctbl[9] = S("park_id");
                        str_rctbl[10] = I("tag_qr_flag", 0).ToString(); // ← 允许为NULL

                        // 再发回数
                        reissueCount = string.IsNullOrWhiteSpace(str_rctbl[7]) ? 0 : I("contract_seal_issue", 0);

                        // 学生标记/再発/タグ●
                        str_Prndat[1] = (userType1 == "学生") ? "学" : " ";
                        str_Prndat[5] = (reissueCount > 0) ? ("再" + reissueCount) : "";
                        str_Prndat[10] = (str_rctbl[10] == "0" || str_rctbl[10].Equals("False", StringComparison.OrdinalIgnoreCase)) ? "●" : "";

                        break; // 取到第一条就够了
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("★★_ERROR_17");
                Trace.WriteLine("[Prndat01 EX] " + ex.GetType().Name + ": " + ex.Message);
                ERRORINFO = "シールの印字内容を読み取り時にエラー発生";
                try { DBconnect.Close(); } catch { }
                return 1;
            }
        }

        // 外部予約时覆盖
        if (type == 2 || type == 3)
        {
            periode = kessaiYoyakuArray.contract_periode;
            str_rctbl[3] = kessaiYoyakuArray.contract_periode;
        }

        // 必填校验
        if (string.IsNullOrWhiteSpace(str_Prndat[0]) ||
            string.IsNullOrWhiteSpace(str_Prndat[2]) ||
            string.IsNullOrWhiteSpace(periode) ||
            string.IsNullOrWhiteSpace(contractId) ||
            string.IsNullOrWhiteSpace(str_rctbl[3]) ||
            string.IsNullOrWhiteSpace(str_rctbl[5]) ||
            string.IsNullOrWhiteSpace(str_rctbl[8]))
        {
            ERRORINFO = "印字データの必須項目が不足しています";
            try { DBconnect.Close(); } catch { }
            return 1;
        }

        // 派生字段与子串保护
        Cperiods(periode, ref str_Prndat[3]);
        Cperiode(periode, ref str_Prndat[4]);

        str_Prndat[6] = contractId;
        str_rctbl[0] = contractId;
        str_rctbl[2] = (!string.IsNullOrEmpty(periode) && periode.Length >= 10) ? periode.Substring(0, 10) : "";
        str_rctbl[3] = (!string.IsNullOrEmpty(str_rctbl[3]) && str_rctbl[3].Length >= 10) ? str_rctbl[3].Substring(0, 10) : "";

        // 取公园名（park_id 解析保护）
        if (int.TryParse(str_rctbl[9], out var parkId) && parkId > 0)
            str_Prndat[0] = SO_DBChk_park_name(parkId);

        Debug.WriteLine("  ☆定期契約X park_id:" + str_rctbl[9]);
        Debug.WriteLine("  ☆定期契約X park_name:" + str_Prndat[0]);

        return 0;
    }


    private void Cperiods(string str_work, ref string work)
	{
		int length = str_work.Length;
		work = str_work.Substring(0, 4);
	}

	private void Cperiode(string str_work, ref string work)
	{
		if (str_work[5] == '0')
		{
			work = str_work.Substring(6, 1);
		}
		else
		{
			work = str_work.Substring(5, 2);
		}
	}

	private bool SO_DBInsert_pjl(int type)
	{
		string text = "";
		switch (type)
		{
		case 0:
		case 81:
		case 82:
		case 83:
			text = "insert into print_job_log ( park_id, user_id, contract_id, process_name,job_name, status, error_code, status_comment, created_at) value (" + str_Confile[6] + "," + str_rctbl[8] + "," + str_rctbl[0] + ",'" + str_logkm[2] + "','" + str_logkm[3] + "','" + str_logkm[4] + "'," + str_logkm[5] + ",'" + str_logkm[6] + "','" + str_logkm[7] + "');";
			break;
		case 84:
		case 88:
			text = "insert into print_job_log ( park_id,  contract_id, process_name,job_name, status, error_code, status_comment, created_at) value (" + str_Confile[6] + "," + LOC_contract_id + ",'" + str_logkm[2] + "','" + str_logkm[3] + "','" + str_logkm[4] + "'," + str_logkm[5] + ",'" + str_logkm[6] + "','" + str_logkm[7] + "');";
			break;
		case 21:
			text = "insert into print_job_log ( park_id, user_id, process_name,job_name, status, error_code, status_comment, created_at) value (" + str_Confile[6] + "," + str_rctbl[8] + ",'" + str_logkm[2] + "','" + str_logkm[3] + "','" + str_logkm[4] + "'," + str_logkm[5] + ",'" + str_logkm[6] + "','" + str_logkm[7] + "');";
			break;
		default:
			text = "insert into print_job_log ( park_id, process_name,job_name, status, error_code, status_comment, created_at) value (" + str_Confile[6] + ",'" + str_logkm[2] + "','" + str_logkm[3] + "','" + str_logkm[4] + "'," + str_logkm[5] + ",'" + str_logkm[6] + "','" + str_logkm[7] + "');";
			break;
		}
		Debug.WriteLine("\u3000\u3000☆print_job_log\u3000SQL:" + text);
		Debug.WriteLine("\u3000\u3000☆print_job_log\u3000TYPE:" + type);
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction = (mySqlCommand.Transaction = DBconnect.BeginTransaction());
			mySqlCommand.ExecuteNonQuery();
			mySqlTransaction.Commit();
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_18");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "プリンタ制御プログラムログテーブル追加時にエラー2発生";
			return false;
		}
		string cmdText = "select job_log_id from print_job_log where created_at='" + str_logkm[7] + "';";
		MySqlCommand mySqlCommand2 = new MySqlCommand(cmdText, DBconnect);
		mySqlCommand2.CommandTimeout = 1;
		try
		{
			MySqlTransaction mySqlTransaction3 = DBconnect.BeginTransaction();
			MySqlDataReader mySqlDataReader = mySqlCommand2.ExecuteReader();
			while (mySqlDataReader.Read())
			{
				str_logkm[0] = Convert.ToString(mySqlDataReader["job_log_id"]);
			}
			mySqlDataReader.Close();
			mySqlTransaction3.Commit();
		}
		catch (Exception ex2)
		{
			Debug.WriteLine("★★_ERROR_19");
			Trace.WriteLine(ex2.Message);
			ERRORINFO = "処理ログID読み取り時にエラー発生";
			DBconnect.Close();
			return false;
		}
		return true;
	}

	private bool SO_DBInsert_seal2(uint mode)
	{
		string text = "";
		uint num = 1u;
		string text2 = mode switch
		{
			1u => "QR通常印刷", 
			120u => "Mifareゼロ円印刷", 
			_ => "Mifare通常印刷", 
		};
		if (test_mode)
		{
			text2 = "QRテスト印刷";
			str_rctbl[0] = "0";
		}
		string text3 = DateTime.Now.ToString("yyyy-MM-dd");
		string text4 = "1";
		text = "insert into seal ( park_id, contract_id, psection_id, seal_day, created_at, updated_at, contract_seal_issue, seal_reason) value (" + str_Confile[6] + "," + str_rctbl[0] + ",'" + num + "','" + text3 + "','" + str_logkm[7] + "','" + str_logkm[7] + "','" + Convert.ToString(Convert.ToInt32(str_rctbl[7]) + 1) + "','" + text2 + "');";
		MySqlCommand mySqlCommand = new MySqlCommand(text, DBconnect);
		mySqlCommand.CommandTimeout = 1;
		Debug.WriteLine(text, "InsertSQL ");
		try
		{
			Debug.WriteLine(" --InsertSQL1A ");
			MySqlTransaction mySqlTransaction = (mySqlCommand.Transaction = DBconnect.BeginTransaction());
			mySqlCommand.ExecuteNonQuery();
			mySqlTransaction.Commit();
			Debug.WriteLine(" --InsertSQL1B ");
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_20");
			Debug.WriteLine(" --InsertSQL2 ERROR ");
			Trace.WriteLine(ex.Message);
			ERRORINFO = "シール発行履歴テーブル追加2時にエラー発生";
			return false;
		}
		return true;
	}

	private bool SO_MfifareInit()
	{
		Trace.WriteLine("★リーダーの初期化開始★");
		uint num = 0u;
		if (DEBUG_MODE == "1")
		{
			return true;
		}
		try
		{
			Trace.WriteLine("★デバックモードじゃないので初期化開始★");
			using (ISCardContext iSCardContext = ContextFactory.Instance.Establish(SCardScope.System))
			{
				string[] readers = iSCardContext.GetReaders();
				if (readers == null || readers.Length == 0)
				{
					MessageBox.Show("スマートカードリーダが見つかりません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
					return false;
				}
				string[] array = readers;
				foreach (string text in array)
				{
					readerName = text;
				}
			}
			return true;
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_21");
			Bitmap backgroundImage = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\pic6.png");
			form2.BackgroundImage = backgroundImage;
			Application.DoEvents();
			Thread.Sleep(10000);
			Trace.WriteLine(ex.Message);
			return false;
		}
	}

    /*private bool SO_QRcordInit()
	{
		if (DEBUG_MODE == "1")
		{
			return true;
		}
		serialPort1.Close();
		Debug.WriteLine("☆☆QRコードリーダ初期化☆☆");
		serialPort1.PortName = str_Confile[16];
		serialPort1.DataBits = 8;
		serialPort1.Parity = Parity.None;
		serialPort1.StopBits = StopBits.One;
		try
		{
			serialPort1.Open();
			return true;
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_22");
			Trace.WriteLine(ex.Message);
		}
		return false;
	}*/
    private bool SO_QRcordInit()
    {
        if (DEBUG_MODE == "1") return true;

        try
        {
            if (serialPort1.IsOpen) serialPort1.Close();

            Debug.WriteLine("☆☆QRコードリーダ初期化☆☆");

            // === 基本参数（常见默认：9600 8N1） ===
            serialPort1.PortName = str_Confile[16]; // 例: "COM3"
            serialPort1.BaudRate = 9600;
            serialPort1.DataBits = 8;
            serialPort1.Parity = Parity.None;
            serialPort1.StopBits = StopBits.One;
            serialPort1.Handshake = Handshake.None;

            // 一些扫码器需要拉起 DTR/RTS 才会发数据
            serialPort1.DtrEnable = true;
            serialPort1.RtsEnable = true;

            // 与扫码器“后缀”一致（建议把枪设为 CR/LF）
            serialPort1.NewLine = "\r\n";

            // 读写细节
            serialPort1.Encoding = Encoding.ASCII;   // 或 Encoding.UTF8；不要用 UTF-32
            serialPort1.DiscardNull = true;
            serialPort1.ReadTimeout = 800;            // 可根据需要调整
            serialPort1.ReceivedBytesThreshold = 1;

            // 端口存在性检查（可选）
            var ports = SerialPort.GetPortNames();
            if (!ports.Contains(serialPort1.PortName, StringComparer.OrdinalIgnoreCase))
            {
                Trace.WriteLine($"[QR] 指定端口不存在: {serialPort1.PortName}. 可用端口: {string.Join(",", ports)}");
                return false;
            }

            serialPort1.Open();
            serialPort1.DiscardInBuffer();

            Trace.WriteLine($"[QR] Opened {serialPort1.PortName} @ {serialPort1.BaudRate}, 8N1, CRLF");
            return true;
        }
        catch (Exception ex)
        {
            Debug.WriteLine("★★_ERROR_22 " + ex.Message);
            return false;
        }
    }


    public uint SO_MfifareCheck()
	{
       
        uint result = 0u;
		uint num = 0u;
		uint num2 = 0u;
		uint num3 = 0u;
		uint num4 = 0u;
		uint num5 = 0u;
		num = 1000u;
		num2 = 0u;
		num3 = 0u;
		num4 = 64u;
		string text = "";
		using (ISCardContext iSCardContext = ContextFactory.Instance.Establish(SCardScope.System))
		{
			try
			{
				using ICardReader cardReader = iSCardContext.ConnectReader(readerName, SCardShareMode.Shared, SCardProtocol.Any);
				CommandApdu commandApdu = new CommandApdu(IsoCase.Case2Short, cardReader.Protocol)
				{
					CLA = byte.MaxValue,
					Instruction = InstructionCode.GetData,
					P1 = 0,
					P2 = 0,
					Le = 0
				};
				using (cardReader.Transaction(SCardReaderDisposition.Leave))
				{
					IntPtr pci = SCardPCI.GetPci(cardReader.Protocol);
					SCardPCI receivePci = new SCardPCI();
					byte[] array = new byte[256];
					byte[] array2 = commandApdu.ToArray();
					int length = cardReader.Transmit(pci, array2, array2.Length, receivePci, array, array.Length);
					ResponseApdu responseApdu = new ResponseApdu(array, length, IsoCase.Case2Short, cardReader.Protocol);
					if (responseApdu.HasData)
					{
						StringBuilder stringBuilder = new StringBuilder(BitConverter.ToString(responseApdu.GetData()));
						text = stringBuilder.Replace("-", string.Empty).ToString();
						Debug.WriteLine("========================================");
						Debug.WriteLine("☆☆" + text + "☆☆");
						Debug.WriteLine("========================================");
					}
					else
					{
						MessageBox.Show("このカードではIDを取得できません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
					}
				}
			}
			catch (RemovedCardException)
			{
				return 10u;
			}
			catch (PCSCException ex2)
			{
				MessageBox.Show(ex2.Message, "スマートカードエラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
			}
		}
		date1 = DateTime.Now;
		int seconds = (date1 - date2).Seconds;
		uint num6 = bcmp(vinfBuff, vinfBuff2);
		if (seconds < 2 && num6 == 0)
		{
			result = 10u;
		}
		vinfBuff2 = vinfBuff;
		date2 = date1;
		MFCODE = text;
		Thread.Sleep(500);
		return result;
	}
    



    public static uint bcmp(byte[] buf1, byte[] buf2)
	{
		for (int i = 0; i < 10; i++)
		{
			if (buf1[i] != buf2[i])
			{
				return 1u;
			}
		}
		return 0u;
	}

	private uint SO_PrnOut()
	{
		if (DEBUG_MODE == "1")
		{
			string path = LogfilePath + "DEBUG_OUTPUT.txt";
			string text = "";
			try
			{
				using StreamWriter streamWriter = new StreamWriter(path, append: true, Encoding.GetEncoding("utf-8"));
				text += "===<印字データ>=============================\r";
				text = text + "ゾーン名、車室番号=(" + str_Prndat[9] + ")\r";
				text = text + "駐車場名=(" + str_Prndat[0] + ")\r";
				text = text + "定期種別=(" + str_Prndat[1] + ")\r";
				text = text + "場所種別=(" + str_Prndat[2] + ")\r";
				text = text + "開始日=(" + str_Prndat[3] + ")\r";
				text = text + "終了月=(" + str_Prndat[4] + ")\r";
				text = text + "再発行=(" + str_Prndat[5] + ")\r";
				text = text + "定期番号=(" + str_Prndat[6] + ")\r";
				text = text + "自治体名=(" + str_Prndat[7] + ")\r";
				text = text + "利用者ID=(" + str_Prndat[8] + ")\r";
				text += "発行枚数=(1)\r\r";
				streamWriter.WriteLine(text);
				MessageBox.Show(text, "定期シール印刷情報", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
			}
			catch (Exception ex)
			{
				Debug.WriteLine("★★_ERROR_24");
				Trace.WriteLine(ex.Message);
			}
			Trace.WriteLine("===<印字データ>=============================");
			Trace.WriteLine("ゾーン名、車室番号=(" + str_Prndat[9] + ")");
			Trace.WriteLine("駐車場名=(" + str_Prndat[0] + ")");
			Trace.WriteLine("定期種別=(" + str_Prndat[1] + ")");
			Trace.WriteLine("場所種別=(" + str_Prndat[2] + ")");
			Trace.WriteLine("開始日=(" + str_Prndat[3] + ")");
			Trace.WriteLine("終了月=(" + str_Prndat[4] + ")");
			Trace.WriteLine("再発行=(" + str_Prndat[5] + ")");
			Trace.WriteLine("定期番号=(" + str_Prndat[6] + ")");
			Trace.WriteLine("自治体名=(" + str_Prndat[7] + ")");
			Trace.WriteLine("利用者ID=(" + str_Prndat[8] + ")");
			Trace.WriteLine("発行枚数=(1)");
			Trace.WriteLine("");
			return 0u;
		}
		if (!SO_PrnGetStatus())
		{
			return 1u;
		}
		Debug.WriteLine("プリンタデータの取得済み");
		printer.Disconnect();
		if (printer.Connect(3, printerPortName) != 0)
		{
			Debug.WriteLine("印刷できていない");
			return 0u;
		}
		printer.SetMeasurementUnit(1);
		LabelDesign design = new LabelDesign();
		DesignLabel_Pattern(design, str_Prndat);
		printer.Print(design, 1);
		Debug.WriteLine(" --印刷成功");
		return 0u;
	}
    
   







   private bool SO_PrnInit_Epson()
    {
        if (DEBUG_MODE == "1") return true;

        try
        {
            // 1) 目标打印机
            string ipAddress = str_Confile[18];          // e.g. "192.168.0.179"
            string deviceId = "local_printer";          // TM-m30III 系列默认
            int timeout = 30;                       // 秒（与你的封装一致）

            // 2) 实例化与生成“测试票据”XML（沿用 KessaiPrint 的生成方法）
            var svc = new EpsonPrinterTMM30Service(ipAddress, deviceId, timeout);

            // --- 测试数据（随便但合法） ---
            string user_name = "TEST USER";
            string kessai_no = "TEST0001";
            string billing_amount = "1";              // 1円
            string park_name = "TEST駐輪場";
            string usertype_subject1 = "TEST-TYPE";
            string enable_months = "1";              // 1ヶ月
            string paymentDue = "2099/12/31";
            string pay_code = "000000";
            string label_title = str_Confile[31];  // 票据抬头（例：So-Manager駐輪場）
            string label_tel = str_Confile[32];  // 电话

            // 用 Payee2 模板生成 SOAP/ePOS XML（与 KessaiPrint 一致的方式）
            string soapRequest =
                svc.GenerateSoapRequestPayee4(
                    user_name, kessai_no, billing_amount,
                    park_name, usertype_subject1, enable_months,
                    paymentDue, pay_code, label_title, label_tel
                );

            // 3) 发送打印请求
            string respXml = svc.PrintXml(soapRequest);
            System.Diagnostics.Debug.WriteLine("statusXml------" + respXml);

            if (string.IsNullOrWhiteSpace(respXml))
            {
                ERRORINFO = "プリンタから応答がありません。";
                return false;
            }

            // 4) 解析回包（和 KessaiPrint 同样的解析路径/命名空间）
            var doc = new System.Xml.XmlDocument();
            doc.LoadXml(respXml);
            var nsmgr = new System.Xml.XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/");
            nsmgr.AddNamespace("epos", "http://www.epson-pos.com/schemas/2011/03/epos-print");
            var node = doc.SelectSingleNode("//s:Body/epos:response", nsmgr) as System.Xml.XmlElement;

            if (node == null)
            {
                ERRORINFO = "ステータス解析失敗（responseノードなし）";
                return false;
            }

            string success = node.GetAttribute("success");   // "true"/"false"
            string status = node.GetAttribute("status");    // "0" 正常
            string code = node.GetAttribute("code");      // エラーコード

            // 5) 依据 success 分支处理（与 KessaiPrint 一致）
            if (!string.Equals(success, "true", StringComparison.OrdinalIgnoreCase))
            {
                string errText = svc.PrinterErrorHandling(status, "34", DBconnect);
                if (!string.IsNullOrEmpty(errText))
                {
                    // 这里不重启应用；把错误信息挂出去即可
                    ERRORINFO = "プリンタ異常: " + errText + $" (code={code})";
                    return false;
                }
                // 没有明确错误映射，则视作可继续
                return true;
            }

            // 成功：做纸量等检查
            svc.PrinterPapperCheck(status, "34", DBconnect);
            return true;
        }
        catch (Exception ex)
        {
            ERRORINFO = "プリンタ初期化エラー: " + ex.Message;
            return false;
        }
    }




    private uint SO_PrnOut_EpsonNetwork()
    {
        try
        {
            // ラベルデザイン作成
            LabelDesign design = new LabelDesign();
            DesignLabel_Pattern(design, str_Prndat);

            // 印刷用XML生成
            string xmlPrint = epsonPrinter.GenerateSoapRequestPayee1(
                str_Prndat[8],        // 利用者ID
                str_Prndat[6],        // 定期番号
                "1000",               // 金額（必要に応じて変更）
                str_Prndat[0],        // 駐車場名
                str_Prndat[1],        // 定期種別
                "1",                  // 枚数
                str_Prndat[3],        // 開始日
                str_Prndat[6],        // 定期番号
                "ウェルネット",       // 支払先
                "03-1234-5678"        // 電話番号
            );

            // 印刷実行
            string response = epsonPrinter.PrintXml(xmlPrint);
            if (string.IsNullOrEmpty(response))
            {
                Debug.WriteLine("印刷に失敗しました");
                return 1u;
            }

            Debug.WriteLine("ネットワーク印刷成功");
            return 0u;
        }
        catch (Exception ex)
        {
            Debug.WriteLine("ネットワーク印刷エラー: " + ex.Message);
            return 99u;
        }
    }




    // 最終送印


    private bool SO_PrnInit()
       {
           if (DEBUG_MODE == "1")
           {
               return true;
           }
           try
           {
               int num = 0;
               short num2 = 0;
               for (num2 = 1; num2 <= 9; num2++)
               {
                   printerPortName = "USB00" + Convert.ToString(num2);
                   Debug.WriteLine(printerPortName + "が接続されているか確認しています。");
                   printer.Disconnect();
                   num = printer.Connect(3, printerPortName);
                   Debug.WriteLine("返り値：" + Convert.ToString(num));
                   if (num == 0)
                   {
                       break;
                   }
               }
               if (num != 0)
               {
                   return SO_PrnGetStatus();
               }
               Debug.WriteLine("コネクト確認までクリア");
               return SO_PrnGetStatus();
           }
           catch (Exception ex)
           {
               Debug.WriteLine("★★_ERROR_25");
               MessageBox.Show("プリンタの初期化に失敗しました。PCを起動後にプリンタの電源を入れてください。", "プリンタ初期化エラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
               Trace.WriteLine(ex.Message);
               return false;
           }
       }
 




    private bool SO_PrnGetStatus()
	{
		string text = "";
		int num = printer.PrinterCheck();
		if (num == 0)
		{
			int commandInterpreterInAction = printer.GetCommandInterpreterInAction();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetCommandInterpreterInAction\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(コマンド処理中)";
				return false;
			}
			commandInterpreterInAction = printer.GetPaperError();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetPaperError\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(ペーパーエラー)";
				return false;
			}
			commandInterpreterInAction = printer.GetRibbonEnd();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetRibbonEnd\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(プリンターのリボンエンド状態)";
				return false;
			}
			commandInterpreterInAction = printer.GetBatchProcessing();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetBatchProcessing\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(バッチ処理印字中)";
				return false;
			}
			commandInterpreterInAction = printer.GetPrinting();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetPrinting\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(印字中)";
				return false;
			}
			commandInterpreterInAction = printer.GetPause();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetPause\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(ポーズ中)";
				return false;
			}
			commandInterpreterInAction = printer.GetWaitingForPeeling();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetWaitingForPeeling\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(剥離待ち中)";
				return false;
			}
			commandInterpreterInAction = printer.GetPrintHeadLowTemp();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetPrintHeadLowTemp\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(プリントヘッド低温エラー)";
				return false;
			}
			commandInterpreterInAction = printer.GetPrintHeadFailure();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetPrintHeadFailure\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(プリントヘッド切れエラー)";
				return false;
			}
			commandInterpreterInAction = printer.GetPrintHeadOverheat();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetPrintHeadOverheat\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(プリントヘッドオーバーヒートエラー)";
				return false;
			}
			commandInterpreterInAction = printer.GetMechanismOpen();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetMechanismOpen\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(プリントヘッドオープンエラー)";
				return false;
			}
			commandInterpreterInAction = printer.GetAutoCutterError();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetAutoCutterError\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(オートカッター異常)";
				return false;
			}
			commandInterpreterInAction = printer.GetFanMotorError();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetFanMotorError\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(ファンモーターエラー)";
				return false;
			}
			commandInterpreterInAction = printer.GetMiscError();
			if (commandInterpreterInAction == 1)
			{
				ERRORINFO = "GetMiscError\u3000戻り値=" + commandInterpreterInAction + "  プリンタステータス(その他のエラー)";
				return false;
			}
			return true;
		}
		ERRORINFO = "PrinterCheck Error\u3000戻り値=" + num + "  プリンタステータス =(PrinterCheck Error)";
        return false;
	}

	private uint SO_PrnLabeEdit(uint type)
	{
		int num = 0;
		str_Prndat = new string[13];
		PrnDataField = new Dictionary<string, string>();
		PrnDataField.Add("駐車場名", "");
		PrnDataField.Add("定期種別", "");
		PrnDataField.Add("場所種別", "");
		PrnDataField.Add("開始日", "");
		PrnDataField.Add("終了月", "");
		PrnDataField.Add("再発行", "");
		PrnDataField.Add("定期番号", "");
		PrnDataField.Add("自治体名", "");
		PrnDataField.Add("利用者ID", "");
		PrnDataField.Add("ゾーン、車室名", "");
		PrnDataField.Add("発行枚数", "");
		PrnDataField.Add("タグ", "");
		if (test_mode)
		{
			PrnDataField["駐車場名"] = Convert.ToString(DateTime.Now);
			PrnDataField["定期種別"] = "";
			PrnDataField["場所種別"] = "";
			PrnDataField["開始日"] = "**";
			PrnDataField["終了月"] = "Ｘ";
			PrnDataField["再発行"] = "";
			PrnDataField["定期番号"] = "by Sorin";
			if (NetworkInterface.GetIsNetworkAvailable())
			{
				PrnDataField["自治体名"] = "動作確認OK";
			}
			else
			{
				PrnDataField["自治体名"] = "プリンタOK、N/W NG";
			}
			PrnDataField["利用者ID"] = "So-Manager";
			PrnDataField["ゾーン、車室名"] = "テスト印刷";
			PrnDataField["発行枚数"] = "1";
			PrnDataField["ゾーン"] = "";
			PrnDataField["利用者連番"] = "So-Manager";
			return 0u;
		}
		if (SO_DBPrndat_01(type) != 0)
		{
			return 1u;
		}
		PrnDataField["駐車場名"] = str_Prndat[0];
		PrnDataField["定期種別"] = str_Prndat[1];
		PrnDataField["場所種別"] = str_Prndat[2];
		PrnDataField["開始日"] = str_Prndat[3];
		PrnDataField["終了月"] = str_Prndat[4];
		PrnDataField["再発行"] = str_Prndat[5];
		PrnDataField["定期番号"] = str_Prndat[6];
		PrnDataField["自治体名"] = str_Prndat[7];
		PrnDataField["利用者ID"] = str_Prndat[8];
		PrnDataField["ゾーン、車室名"] = str_Prndat[9];
		PrnDataField["タグ"] = str_Prndat[10];
		PrnDataField["ゾーン"] = str_Prndat[11];
		PrnDataField["利用者連番"] = str_Prndat[12];
		PrnDataField["発行枚数"] = "1";
		return 0u;
	}

    /*private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
	{
		Debug.WriteLine("データ受信");
		if (!serialPort1.IsOpen)
		{
			QRresult = 2u;
			return;
		}
		try
		{
			date1 = DateTime.Now;
			QRdata = serialPort1.ReadExisting();
			QRdata = QRdata.Substring(0, QRdata.Length - 1);
			Encoding encoding = Encoding.GetEncoding("utf-32");
			QRresult = 1u;
		}
		catch (Exception ex)
		{
			Debug.WriteLine("★★_ERROR_26");
			QRdata = ex.Message;
			QRresult = 2u;
		}
		date1 = DateTime.Now;
		int seconds = (date1 - date2).Seconds;
		bool flag = QRdata.SequenceEqual(QRdata2);
		if (seconds < 2 && flag)
		{
			QRresult = 10u;
		}
		Trace.WriteLine(QRdata);
		QRdata2 = QRdata;
		date2 = date1;
	}*/
    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Debug.WriteLine("データ受信");

        if (!serialPort1.IsOpen)
        {
            QRresult = 2u; // ポート未オープン
            return;
        }

        try
        {
            while (serialPort1.IsOpen && serialPort1.BytesToRead > 0)
            {
                // 1) 按行读取（直到 NewLine，建议设为 "\r\n"）
                string line = serialPort1.ReadLine();

                // 2) 清理控制字符 + 前后空白
                string cleaned = CleanCtrl(line);   // ↓见下方辅助函数

                // 空行就跳过
                if (string.IsNullOrEmpty(cleaned))
                    continue;

                // 3) 重复判定（2秒内同一内容）
                date1 = DateTime.Now;
                bool isDup = (date1 - date2).TotalSeconds < 2 &&
                             string.Equals(cleaned, QRdata2, StringComparison.Ordinal);

                if (isDup)
                {
                    QRresult = 10u;  // 重复
                }
                else
                {
                    QRdata = cleaned;
                    QRresult = 1u;   // 正常
                    QRdata2 = cleaned;
                    date2 = date1;
                    Trace.WriteLine(cleaned);
                }
            }
        }
        catch (TimeoutException)
        {
            // 读超时可忽略
        }
        catch (Exception ex)
        {
            Debug.WriteLine("★★_ERROR_26 " + ex.Message);
            QRdata = ex.Message;
            QRresult = 2u; // エラー
        }
    }

    // 去掉所有控制字符(0x00–0x1F和0x7F)、再Trim
    private static string CleanCtrl(string s)
    {
        if (string.IsNullOrEmpty(s)) return string.Empty;
        var filtered = new string(s.Where(ch => ch >= ' ' && ch != '\x7F').ToArray());
        return filtered.Trim();
    }

    private uint CreateObject_Ex_TEST()
	{
		mif = Activator.CreateInstance(Type.GetTypeFromProgID("Mifare.API"));
		if (mif == null)
		{
			return 1u;
		}
		return 0u;
	}

	private uint CreateObject_Ex()
	{
		if (ifd != null || icc != null || mif != null)
		{
		}
		ifd = Activator.CreateInstance(Type.GetTypeFromProgID("IFD.RW"));
		if (ifd == null)
		{
			return 1u;
		}
		icc = Activator.CreateInstance(Type.GetTypeFromProgID("ICC.Card"));
		if (icc == null)
		{
			return 1u;
		}
		mif = Activator.CreateInstance(Type.GetTypeFromProgID("Mifare.API"));
		if (mif == null)
		{
			return 1u;
		}
		return 0u;
	}

	private uint ObjectSetUp_Ex()
	{
		uint num = 0u;
		string text = "";
		short num2 = 0;
		for (num2 = 1; num2 <= 9; num2++)
		{
			text = "COM" + Convert.ToString(num2);
			Debug.WriteLine(text + "が接続されているか確認しています。");
			num = (uint)ifd.SetUp("PR", ref text);
			if (num == 0)
			{
				break;
			}
		}
		if (num != 0)
		{
			return 1u;
		}
		if ((uint)icc.SetUp("AM:MIF", ref ifd) != 0)
		{
			return 1u;
		}
		num = (uint)mif.SetUp(ref icc);
		if (num != 0)
		{
			return 1u;
		}
		return num;
	}

	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;
		}
		GC.Collect();
	}

	private uint RW_Authentication_Ex()
	{
		uint num = 0u;
		byte[] array = new byte[257];
		uint num2 = 0u;
		uint num3 = 0u;
		byte[] array2 = new byte[28]
		{
			3, 255, 255, 255, 255, 255, 255, 255, 255, 255,
			255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
			255, 255, 255, 255, 255, 0, 0, 0
		};
		uint num4 = 67665936u;
		num2 = 256u;
		num = (uint)ifd.SetControl(num4, ref array2, out array, num2, out num3);
		if (num != 0)
		{
			return num;
		}
		Array.Clear(array2, 0, array2.Length);
		num3 = 0u;
		num4 = 67665923u;
		array2[0] = 0;
		return (uint)ifd.SetControl(ref num4, ref array2, ref array, ref num2, ref num3);
	}

	private uint ReleaseCard_Ex()
	{
		int num = 0;
		return (uint)icc.EndTransaction(ref num);
	}

	private void Form1_FormClosing(object sender, FormClosingEventArgs e)
	{
		Application.DoEvents();
	}

	private void EndProc()
	{
		if (EndType == 0)
		{
			return;
		}
		DBconnect.Close();
		if (EndType < 3)
		{
			return;
		}
		if (DEBUG_MODE == "0")
		{
			printer.Disconnect();
			if (EndType == 3 || EndType == 4)
			{
				return;
			}
			serialPort1.Close();
		}
		if (EndType != 10 && EndType > 5)
		{
			EndWait();
		}
	}

	private void EndWait()
	{
		SO_FullScreen(MSG_NUM + 1, 1);
		for (int i = 0; i < 60; i++)
		{
			if (EndType == 10)
			{
				Environment.Exit(0);
				return;
			}
			Application.DoEvents();
			Thread.Sleep(1000);
		}
		SO_FullScreen(MSG_NUM, 1);
	}

	private void DesignLabel_Pattern(LabelDesign design, string[] str_Prndat)
	{
		Controller controller = new Controller();
		if (controller.Open(str_layoutFile) == 0)
		{
			controller.BeginPrint();
			int frameIndex = controller.InitFrame("Frame1");
			int parts = controller.GetParts(frameIndex, "発行枚数");
			controller.SetPartsData(frameIndex, parts, PrnDataField["発行枚数"]);
			int parts2 = controller.GetParts(frameIndex, "駐車場名");
			controller.SetPartsData(frameIndex, parts2, PrnDataField["駐車場名"]);
			int parts3 = controller.GetParts(frameIndex, "場所種別");
			controller.SetPartsData(frameIndex, parts3, PrnDataField["場所種別"]);
			int parts4 = controller.GetParts(frameIndex, "開始日");
			controller.SetPartsData(frameIndex, parts4, PrnDataField["開始日"]);
			int parts5 = controller.GetParts(frameIndex, "終了月");
			controller.SetPartsData(frameIndex, parts5, PrnDataField["終了月"]);
			int parts6 = controller.GetParts(frameIndex, "定期番号");
			controller.SetPartsData(frameIndex, parts6, PrnDataField["定期番号"]);
			int parts7 = controller.GetParts(frameIndex, "自治体名");
			controller.SetPartsData(frameIndex, parts7, PrnDataField["自治体名"]);
			int parts8 = controller.GetParts(frameIndex, "再発行");
			controller.SetPartsData(frameIndex, parts8, PrnDataField["再発行"]);
			int parts9 = controller.GetParts(frameIndex, "定期種別");
			controller.SetPartsData(frameIndex, parts9, PrnDataField["定期種別"]);
			int parts10 = controller.GetParts(frameIndex, "利用者ID");
			controller.SetPartsData(frameIndex, parts10, PrnDataField["利用者ID"]);
			int parts11 = controller.GetParts(frameIndex, "ゾーン、車室名");
			controller.SetPartsData(frameIndex, parts11, PrnDataField["ゾーン、車室名"]);
			int parts12 = controller.GetParts(frameIndex, "タグ");
			controller.SetPartsData(frameIndex, parts12, PrnDataField["タグ"]);
			int parts13 = controller.GetParts(frameIndex, "ゾーン");
			controller.SetPartsData(frameIndex, parts13, PrnDataField["ゾーン"]);
			int parts14 = controller.GetParts(frameIndex, "有効期限年");
			controller.SetPartsData(frameIndex, parts14, "有効期限" + PrnDataField["開始日"] + "年");
			int parts15 = controller.GetParts(frameIndex, "利用者連番");
			controller.SetPartsData(frameIndex, parts15, PrnDataField["利用者連番"]);
			controller.AddFrame(frameIndex);
			controller.DoPrint("Citizen CL-E331J");
			controller.EndPrint();
			controller.Close();
		}
		else
		{
			MessageBox.Show("レイアウトファイルがありません。以下のファイルの存在を確認してください:  " + Environment.NewLine + str_layoutFile, "レイアウトファイルエラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
		}
	}

	private void SetHomeButton()
	{
		Control control = base.Controls.Find("homeButton", searchAllChildren: true).FirstOrDefault();
		if (control != null)
		{
			base.Controls.Remove(control);
			control.Dispose();
		}
		PictureBox pictureBox = new PictureBox();
		pictureBox.Image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\homeButton.png");
		pictureBox.BackColor = Color.Transparent;
		pictureBox.ForeColor = Color.Transparent;
		pictureBox.Size = new Size(125, 125);
		int num = Screen.PrimaryScreen.WorkingArea.Height;
		pictureBox.Location = new Point(1275 - pictureBox.Width, 795 - pictureBox.Height);
		pictureBox.Click += HomeButton_Click;
		pictureBox.Name = "homeButton";
		form2.Controls.Add(pictureBox);
		pictureBox.BringToFront();
	}

	private void RemoveHomeButton()
	{
		for (int num = form2.Controls.Count - 1; num >= 0; num--)
		{
			Control control = form2.Controls[num];
			if (control.Name == "homeButton")
			{
				form2.Controls.Remove(control);
				control.Dispose();
			}
		}
	}

	private void HomeButton_Click(object sender, EventArgs e)
	{
		for (int num = form2.Controls.Count - 1; num >= 0; num--)
		{
			Control control = form2.Controls[num];
			if (control is Button || control is Label || control is PictureBox)
			{
				form2.Controls.Remove(control);
				control.Dispose();
			}
		}
		KessaiEnd();
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && components != null)
		{
			components.Dispose();
		}
		base.Dispose(disposing);
	}

	private void InitializeComponent()
	{
        this.components = new System.ComponentModel.Container();
		System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle = new System.Windows.Forms.DataGridViewCellStyle();
		System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(qk30ic.Form1));
		this.button1 = new System.Windows.Forms.Button();
		this.serialPort1 = new System.IO.Ports.SerialPort(this.components);
		this.dataGridView1 = new System.Windows.Forms.DataGridView();
		this.label2 = new System.Windows.Forms.Label();
		this.label1 = new System.Windows.Forms.Label();
		((System.ComponentModel.ISupportInitialize)this.dataGridView1).BeginInit();
		base.SuspendLayout();
		this.button1.Location = new System.Drawing.Point(538, 380);
		this.button1.Name = "button1";
		this.button1.Size = new System.Drawing.Size(134, 29);
		this.button1.TabIndex = 0;
		this.button1.Text = "終了";
		this.button1.UseVisualStyleBackColor = true;
		this.button1.Click += new System.EventHandler(button1_Click);
		this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
		this.dataGridView1.AllowUserToAddRows = false;
		dataGridViewCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
		dataGridViewCellStyle.BackColor = System.Drawing.SystemColors.Control;
		dataGridViewCellStyle.Font = new System.Drawing.Font("MS UI Gothic", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 128);
		dataGridViewCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
		dataGridViewCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
		dataGridViewCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
		dataGridViewCellStyle.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
		this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle;
		this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
		this.dataGridView1.Location = new System.Drawing.Point(24, 36);
		this.dataGridView1.Name = "dataGridView1";
		this.dataGridView1.RowHeadersVisible = false;
		this.dataGridView1.RowHeadersWidth = 60;
		this.dataGridView1.RowTemplate.Height = 21;
		this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.None;
		this.dataGridView1.Size = new System.Drawing.Size(1161, 330);
		this.dataGridView1.TabIndex = 1;
		this.label2.AutoSize = true;
		this.label2.Font = new System.Drawing.Font("MS UI Gothic", 12f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 128);
		this.label2.Location = new System.Drawing.Point(20, 9);
		this.label2.Name = "label2";
		this.label2.Size = new System.Drawing.Size(126, 16);
		this.label2.TabIndex = 2;
		this.label2.Text = "ローカルステータス";
		this.label1.AutoSize = true;
		this.label1.Location = new System.Drawing.Point(554, 9);
		this.label1.Name = "label1";
		this.label1.Size = new System.Drawing.Size(200, 12);
		this.label1.TabIndex = 3;
		this.label1.Text = " ";
		base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f);
		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
		base.ClientSize = new System.Drawing.Size(1210, 421);
		base.Controls.Add(this.label1);
		base.Controls.Add(this.label2);
		base.Controls.Add(this.dataGridView1);
		base.Controls.Add(this.button1);
		base.Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon");
		base.Name = "Form1";
		this.Text = "シール発行プログラム";
		base.TopMost = true;
		base.WindowState = System.Windows.Forms.FormWindowState.Minimized;
		base.FormClosing += new System.Windows.Forms.FormClosingEventHandler(Form1_FormClosing);
		base.Shown += new System.EventHandler(Form1_Shown);
		((System.ComponentModel.ISupportInitialize)this.dataGridView1).EndInit();
		base.ResumeLayout(false);
		base.PerformLayout();
	}
}
