SmartHouseAPI/Source/MyHouse/WebAPITool/FrmCardsView.cs
zilinsoft f0ff641ed4 ## 2025-02-08 星期六更新
### MyHouse    V1.0.2502.0801
- *.[新增]适配新版接口。
### SmartHouseAPI    V1.0.2502.0801
- *.[新增]支持Docker部署,支持NAS。
2025-02-08 17:01:20 +08:00

252 lines
10 KiB
C#

using ryCommon;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyHouse.WebAPITool
{
public partial class FrmCardsView : RySkins.SKinForm
{
public FrmCardsView()
{
InitializeComponent();
OlvBankName.AspectGetter = delegate (object x) { return ((CardInfo)x).BankName; };
OlvCardNum.AspectGetter = delegate (object x) { return ((CardInfo)x).CardNum; };
OlvBillDate.AspectGetter = delegate (object x) { return "每月"+((CardInfo)x).BillDate+"日"; };
OlvRePayDate.AspectGetter = delegate (object x) {
var row = (CardInfo)x;
if (row.RePayDateMode == 0)
{
return "每月" + row.RePayDate + "日";
}
else
{
return "账单日后第" + row.RePayDate + "天";
}
};
OlvOutTime.AspectGetter = delegate (object x) {
var OutTime = ((CardInfo)x).OutTime;
return OutTime;
};
OlvOutTime.AspectToStringConverter = delegate (object row, object x)
{
var OutTime = (long)x;
if (OutTime == 0) { return "永不过期"; }
return OutTime.ToDateTime().ToString("yyyy-MM-dd dddd");
};
OlvNextRePayDate.AspectGetter = delegate (object x) {
var CardInfo = (CardInfo)x;
if (CardInfo.RePayDate == 0) { return DateTime.MinValue; }
return API.API.GetNextRepayDate(CalcDt, CardInfo.BillDate, CardInfo.RePayDateMode,CardInfo.RePayDate);
};
OlvNextRePayDate.AspectToStringConverter = delegate (object row, object x)
{
var NextRePayDate = (DateTime)x;
if (NextRePayDate == DateTime.MinValue) { return ""; }
var str = NextRePayDate.ToString("yyyy-MM-dd dddd");
var monthcount = RyDate.GetMonthCount(DateTime.Now, NextRePayDate);
if(DateTime.Now > NextRePayDate) { return str; }
if (monthcount == 1)
{
return str + "(下月"+NextRePayDate.Day+"日)";
}
else if (monthcount ==2)
{
return str + "(下下月" + NextRePayDate.Day + "日)";
}
else if (monthcount == 0)
{
return str + "(本月" + NextRePayDate.Day + "日)";
}
return NextRePayDate.ToString("yyyy-MM-dd dddd");
};
OlvDes.AspectGetter = delegate (object x) { return((CardInfo)x).Des; };
OlvFreeYear.AspectGetter = delegate (object x) {
var CardInfo = (CardInfo)x;
return CardInfo.FreeYearDate;
};
OlvFreeYear.AspectToStringConverter = delegate (object row, object x)
{
var CardInfo = (CardInfo)row;
if (CardInfo.StartTime == 0)
{
return "免年费";
}
var FreeYearDate = CardInfo.FreeYearDate.ToDateTime();
var day = CardInfo.StartTime % 100;
var month = (CardInfo.StartTime - day) / 100;
var dt_start = new DateTime(DateTime.Now.Year, month, day);
if (dt_start > DateTime.Now.Date) { dt_start = dt_start.AddYears(-1); }
var dt_end = dt_start.AddYears(1);
if(FreeYearDate>= dt_start && FreeYearDate< dt_end)
{
return "本年度已达标("+dt_start.ToString("yyyy-MM-dd")+"至"+ dt_end.AddDays(-1).ToString("yyyy-MM-dd") + ")";
}
else
{
return "本年度尚未达标(" + dt_start.ToString("yyyy-MM-dd") + "至" + dt_end.AddDays(-1).ToString("yyyy-MM-dd") + ")";
}
};
LvCards.FormatRow += LvCbResult_FormatRow;
LvCards.FormatCell += LvCbResult_FormatCell;
}
private void LvCbResult_FormatCell(object sender, BrightIdeasSoftware.FormatCellEventArgs e)
{
var item = (CardInfo)e.Model;
if(e.ColumnIndex==OlvDes.Index)
{
e.SubItem.ForeColor= Color.Gray;
}
else if (e.ColumnIndex == OlvFreeYear.Index)
{
if (e.SubItem.Text.IndexOfEx("已达标") >= 0 || e.SubItem.Text.IndexOfEx("免年费") >= 0)
{ e.SubItem.ForeColor = Color.Blue; }
else
{
e.SubItem.ForeColor = Color.Red;
}
}
}
private void LvCbResult_FormatRow(object sender, BrightIdeasSoftware.FormatRowEventArgs e)
{
var item = (CardInfo)e.Model;
if (!item.Enabled) { e.Item.ForeColor = Color.Gray; }
}
private void rySearch1_OnSearch(object sender, EventArgs e)
{
LvCards.ClearObjects();
List<CardInfo> list = new List<CardInfo>();
string post_str = "api=GetCardsList&name=" + RyWeb.WebDecode.UrlEncode(rySearch1.Text);
var jsonResult = API.API.Post("Card", "GetCardsList", post_str);
if (jsonResult.IsOK)
{
DataTable data = jsonResult.List;
for (int i = 0; i < data.Rows.Count; i++)
{
DataRow row = data.Rows[i];
list.Add(new CardInfo()
{
Id = row["id"].ToInt(),
BankName = row["BankName"].ToString(),
CardNum = row["CardNum"].ToString(),
BillDate = row["BillDate"].ToInt(),
RePayDateMode = row["RePayDateMode"].ToInt(),
RePayDate = row["RePayDate"].ToInt(),
Enabled = row["Enabled"].ToInt()==1,
OutTime = row["OutTime"].ToInt64(),
StartTime = row["StartTime"].ToInt(),
FreeYearDate = row["FreeYearDate"].ToInt64(),
Des = row["Des"].ToString(),
});
}
}
else
{
MessageBox.Show(jsonResult.ResultText, "错误代码:" + jsonResult.Result, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
LvCards.AddObjects(list);
}
private void FrmCardsView_Load(object sender, EventArgs e)
{
rySearch1.PerformClick();
LvCards.Sort(OlvNextRePayDate, SortOrder.Descending);
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FrmCardAdd frm = new FrmCardAdd();
if(frm.ShowDialog()==DialogResult.OK)
{
rySearch1.PerformClick();
}
frm.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
var item = (CardInfo)LvCards.SelectedObject;
if (item == null) { return; }
FrmCardAdd frm = new FrmCardAdd();
frm.GetInfo(item.Id);
if (frm.ShowDialog() == DialogResult.OK)
{
rySearch1.PerformClick();
}
frm.Dispose();
}
private DateTime CalcDt=DateTime.Now;
private void DtPayDate_ValueChanged(object sender, EventArgs e)
{
CalcDt = DtPayDate.Value;
LvCards.Refresh();
LvCards.Sort(OlvNextRePayDate, SortOrder.Descending);
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (RySkins.Msg.ShowMsg("确定要设置本年度年费已达标吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
{
return;
}
var item = (CardInfo)LvCards.SelectedObject;
if (item == null) { return; }
string post_str = "api=SetFreeYearPay&id=" + item.Id;
var jsonResult = API.API.Post("Card", "SetFreeYearPay", post_str);
if (jsonResult.IsOK)
{
RySkins.Msg.ShowMsg("已设置年费达标。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
rySearch1.PerformClick();
}
else
{
API.API.ErrorJson(jsonResult);
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (LvCards.SelectedObject == null) { MessageBox.Show("请先选择要删除的项。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; }
var item = (CardInfo)LvCards.SelectedObject;
var selectId = item.Id;
if (RySkins.Msg.ShowMsg("确定要删除该项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
{
return;
}
string post_str = "api=DelCard&id=" + selectId;
var jsonResult = API.API.Post("Card", "DelCard", post_str);
if (jsonResult.IsOK)
{
LvCards.RemoveObject(item);
}
else
{
API.API.ErrorJson(jsonResult);
}
}
}
public class CardInfo
{
public int Id { get; set; } = 0;
public string BankName { get; set; } = "";
public string CardNum { get; set; } = "";
public int BillDate { get; set; } = 0;
public int RePayDateMode { get; set; } = 0;
public int RePayDate{ get; set; } = 0;
public bool Enabled { get; set; } = true;
public int StartTime { get; set; } = 0;
public long OutTime { get; set; } = 0;
public string Des { get; set; } = "";
public long FreeYearDate { get; set; } = 0;
}
}