You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

449 lines
16 KiB
C#

9 months ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using POSV.Utils;
using System.Threading.Tasks;
using POSV.Entity;
using POSV.Bean;
using POSV.MessageEvent;
using POS.Language.Language;
namespace POSV.Component
{
[ToolboxItem(true)]
public partial class ShoppingCartParameter : AbstractParameter
{
/// <summary>
/// 默认参数
/// </summary>
private string[] rowHeight = { "20" , "25" , "30" , "35" , "40" , "45" };
///// <summary>
///// 修改前的数据
///// </summary>
//private Dictionary<string , string> _oldValue = new Dictionary<string , string>();
///// <summary>
///// 修改后的数据
///// </summary>
//private Dictionary<string , string> _newValue = new Dictionary<string , string>();
/// <summary>
/// 初始化标识
/// </summary>
private bool _inited = false;
private ShoppingCartItem cartItem = null;
public ShoppingCartParameter()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
this.BackColor = Color.Transparent;
//字体支持列表
this.comboBoxFontSize.DataSource = System.Enum.GetNames(typeof(SystemFont));
//设置系统默认的行高度
this.comboBoxRowHeight.DataSource = rowHeight;
this.InitUi();
}
/// <summary>
/// 初始化界面
/// </summary>
private void InitUi()
{
//界面加载开始
this._inited = false;
Task.Factory.StartNew(() =>
{
Dictionary<string , string> data = null;
//获取品项分组下的全部参数
using (var db = Global.Instance.OpenDataBase)
{
data = db.Dictionary<string , string>(string.Format(SqlConstant.ConfigQueryByGroupToDictionary , ConfigConstant.CART_GROUP));
}
//将新增加或者变更的参数重新更新到数据库
var defaultValue = ConfigConstant.CartGroupDefaultValue();
//数据库有配置参数
if (data != null)
{
var diff = defaultValue.Where(kvp => !data.ContainsKey(kvp.Key)).ToDictionary(kvp => kvp.Key , kvp => kvp.Value);
if (diff != null && diff.Keys.Count > 0)
{
var list = new List<Config>();
foreach (var v in diff)
{
var config = new Config();
config.Id = IdWorkerUtils.Instance.NextId();
config.Group = ConfigConstant.CART_GROUP;
config.TenantId = Global.Instance.Authc.TenantId;
config.Keys = v.Key;
config.Values = v.Value;
list.Add(config);
}
//如果数据表中没有配置group相关的信息更新差异
this.SaveChanged(list);
//将差异合并到data避免再次访问数据库
data = data.Concat(diff).ToDictionary(x => x.Key , x => x.Value);
}
}
else
{
//加载系统默认参数
var list = new List<Config>();
foreach (var v in defaultValue)
{
var config = new Config();
config.Id = IdWorkerUtils.Instance.NextId();
config.Group = ConfigConstant.CART_GROUP;
config.TenantId = Global.Instance.Authc.TenantId;
config.Keys = v.Key;
config.Values = v.Value;
list.Add(config);
}
//如果数据表中没有配置group相关的信息保存
this.SaveChanged(list);
}
return data;
}).ContinueWith(task =>
{
if (task.IsFaulted)
{
LOGGER.Error(task.Exception.GetBaseException() , "加载点单列表设置参数异常");
}
else
{
this.Invoke(new Action(() =>
{
BindUi(task.Result);
}));
}
});
}
private void BindUi(Dictionary<string , string> data)
{
////变更前的数据单独存储
//_oldValue.Clear();
//_oldValue = ObjectUtils.Copy<Dictionary<string , string>>(data);
////清理历史变更数据
//_newValue.Clear();
//点单列表显示定义
string json = data[ConfigConstant.CART_JSON_TEMPLATE].ToString();
//将JSON转换为行对象
this.cartItem = JsonUtils.Deserialize<ShoppingCartItem>(json);
/***********************点单列表定义****************************/
//将JSON转换为行对象
var rows = cartItem.Rows;
foreach (CartRow row in rows)
{
switch (row.Order)
{
case 1:
this.labelX40.Text = row.Order.ToString();
this.labelX35.Text = LangProxy.ToLang( row.Text);
this.textBoxX1.Text = row.Alias;
this.checkBoxX62.Checked = row.Display;
this.numericTextBox1.Text = row.Width.ToString();
break;
case 2:
this.labelX41.Text = row.Order.ToString();
this.labelX31.Text = LangProxy.ToLang(row.Text);
this.textBoxX2.Text = row.Alias;
this.checkBoxX57.Checked = row.Display;
this.numericTextBox2.Text = row.Width.ToString();
break;
case 3:
this.labelX42.Text = row.Order.ToString();
this.labelX32.Text = row.Text;
this.textBoxX4.Text = row.Alias;
this.checkBoxX58.Checked = row.Display;
this.numericTextBox3.Text = row.Width.ToString();
break;
case 4:
this.labelX43.Text = row.Order.ToString();
this.labelX36.Text = LangProxy.ToLang(row.Text);
this.textBoxX3.Text = row.Alias;
this.checkBoxX63.Checked = row.Display;
this.numericTextBox4.Text = row.Width.ToString();
break;
case 5:
this.labelX44.Text = row.Order.ToString();
this.labelX33.Text = LangProxy.ToLang(row.Text);
this.textBoxX5.Text = row.Alias;
this.checkBoxX59.Checked = row.Display;
this.numericTextBox5.Text = row.Width.ToString();
break;
case 6:
this.labelX45.Text = row.Order.ToString();
this.labelX34.Text = LangProxy.ToLang(row.Text);
this.textBoxX6.Text = row.Alias;
this.checkBoxX61.Checked = row.Display;
this.numericTextBox6.Text = row.Width.ToString();
break;
case 7:
this.labelX101.Text = row.Order.ToString();
this.labelX102.Text = LangProxy.ToLang(row.Text);
this.textBoxX34.Text = row.Alias;
this.checkBoxX4.Checked = row.Display;
this.numericTextBox7.Text = row.Width.ToString();
break;
case 8:
this.labelX1.Text = row.Order.ToString();
this.labelX2.Text = LangProxy.ToLang(row.Text);
this.textBoxX7.Text = row.Alias;
this.checkBoxX1.Checked = row.Display;
this.numericTextBox8.Text = row.Width.ToString();
break;
}
}
//背景色
this.comboBoxColor1.Color = ColorTranslator.FromHtml(cartItem.TitleColor);
//字体大小
SystemFont fontSize = cartItem.TitleFont;
this.comboBoxFontSize.SelectedIndex = this.comboBoxFontSize.FindString(fontSize.ToString());
//字体颜色
this.comboBoxTextColor.Color = ColorTranslator.FromHtml(cartItem.TextColor);
//高度
this.comboBoxRowHeight.Text = cartItem.RowHeight.ToString();
//界面加载完成
this._inited = true;
}
public List<Config> NewChanged()
{
var result = new List<Config>();
if (!this._inited) return result;
var newItem = new ShoppingCartItem();
var rows = new List<CartRow>();
var row = new CartRow();
row.Name = "order";
row.Order = Convert.ToInt32(this.labelX40.Text.Trim());
row.Text = this.labelX35.Text.Trim();
row.Alias = this.textBoxX1.Text.Trim();
row.Display = this.checkBoxX62.Checked;
row.Width = this.numericTextBox1.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "name";
row.Order = Convert.ToInt32(this.labelX41.Text.Trim());
row.Text = this.labelX31.Text.Trim();
row.Alias = this.textBoxX2.Text.Trim();
row.Display = this.checkBoxX57.Checked;
row.Width = this.numericTextBox2.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "quantity";
row.Order = Convert.ToInt32(this.labelX42.Text.Trim());
row.Text = this.labelX32.Text.Trim();
row.Alias = this.textBoxX4.Text.Trim();
row.Display = this.checkBoxX58.Checked;
row.Width = this.numericTextBox3.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "unit";
row.Order = Convert.ToInt32(this.labelX43.Text.Trim());
row.Text = this.labelX36.Text.Trim();
row.Alias = this.textBoxX3.Text.Trim();
row.Display = this.checkBoxX63.Checked;
row.Width = this.numericTextBox4.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "price";
row.Order = Convert.ToInt32(this.labelX44.Text.Trim());
row.Text = this.labelX33.Text.Trim();
row.Alias = this.textBoxX5.Text.Trim();
row.Display = this.checkBoxX59.Checked;
row.Width = this.numericTextBox5.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "amount";
row.Order = Convert.ToInt32(this.labelX45.Text.Trim());
row.Text = this.labelX34.Text.Trim();
row.Alias = this.textBoxX6.Text.Trim();
row.Display = this.checkBoxX61.Checked;
row.Width = this.numericTextBox6.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "discount";
row.Order = Convert.ToInt32(this.labelX101.Text.Trim());
row.Text = this.labelX102.Text.Trim();
row.Alias = this.textBoxX34.Text.Trim();
row.Display = this.checkBoxX4.Checked;
row.Width = this.numericTextBox7.IntegerValue;
rows.Add(row);
row = new CartRow();
row.Name = "scheme";
row.Order = Convert.ToInt32(this.labelX1.Text.Trim());
row.Text = this.labelX2.Text.Trim();
row.Alias = this.textBoxX7.Text.Trim();
row.Display = this.checkBoxX1.Checked;
row.Width = this.numericTextBox8.IntegerValue;
rows.Add(row);
//列表
newItem.Rows = rows;
//高度
int rowHeight = 0;
int.TryParse(this.comboBoxRowHeight.Text , out rowHeight);
newItem.RowHeight = rowHeight;
//字体大小
SystemFont fontSize = SystemFont.;
Enum.TryParse(this.comboBoxFontSize.SelectedItem.ToString() , out fontSize);
newItem.TitleFont = fontSize;
//字体颜色
newItem.TextColor = ColorTranslator.ToHtml(this.comboBoxTextColor.Color);
//背景色1
newItem.TitleColor = ColorTranslator.ToHtml(this.comboBoxColor1.Color);
//判断是否更改,如果过更改压入到 NewValue
bool isChanged = !(newItem.Equals(this.cartItem));
if (isChanged)
{
//this._newValue[ConfigConstant.CART_JSON_TEMPLATE] = JsonUtils.Serialize(newItem);
var config = new Config();
config.Id = IdWorkerUtils.Instance.NextId();
config.Group = ConfigConstant.CART_GROUP;
config.TenantId = Global.Instance.Authc.TenantId;
config.Keys = ConfigConstant.CART_JSON_TEMPLATE;
config.Values = JsonUtils.Serialize(newItem);
result.Add(config);
}
////转换为Config对象便于存储
//foreach (var v in this._newValue)
//{
// var config = new Config();
// config.Id = IdWorkerUtils.Instance.NextId();
// config.Group = ConfigConstant.CART_GROUP;
// config.TenantId = Global.Instance.Authc.TenantId;
// config.Keys = v.Key;
// config.Values = v.Value;
// result.Add(config);
//}
return result;
}
public Tuple<bool , string> SaveChanged(List<Config> data)
{
bool isSuccess = true;
string message = "参数更新成功";
try
{
using (var db = Global.Instance.OpenDataBase)
{
using (var trans = db.GetTransaction())
{
foreach (var config in data)
{
db.Save(config);
}
trans.Complete();
}
}
}
catch (Exception ex)
{
isSuccess = false;
message = "参数更新异常";
LOGGER.Error(ex , message);
}
finally
{
if (isSuccess)
{
////新修改后的参数应用后重置OldValue避免用户在没有切换Tab情况下直接修改当前Tab内容
//foreach (var config in data)
//{
// string key = config.Keys;
// string value = config.Values;
// this._oldValue[key] = value;
//}
//this._newValue.Clear();
//更新控件UI
UpdateCartUi();
}
}
return new Tuple<bool , string>(isSuccess , message);
}
private void UpdateCartUi()
{
Config config = null;
using (var db = Global.Instance.OpenDataBase)
{
string sql = string.Format(SqlConstant.ConfigQueryByGroupAndKey , ConfigConstant.CART_GROUP , ConfigConstant.CART_JSON_TEMPLATE);
config = db.SingleOrDefault<Config>(sql);
}
if (config != null)
{
var item = JsonUtils.Deserialize<ShoppingCartItem>(config.Values);
//发送分组通知
MsgEvent.Send(Constant.CART_CHANGED_NOTIFY , item);
}
}
}
}