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.

241 lines
9.8 KiB
C#

9 months ago
using POSV.Bean;
using POSV.Card;
using POSV.Printer;
using POSV.Stock;
using POSV.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace POSV.Helper
{
public class StockHelper
{
/// <summary>
/// 获取系统配置的收银小票打印机
/// </summary>
/// <returns></returns>
public static PrinterObject GetTicketPrinterObject(bool cutPager, bool openCashbox)
{
var pobject = new PrinterObject();
var json = Global.Instance.GlobalConfigStringValue(ConfigConstant.PERIPHERAL_CASHIER_TICKET);
if (string.IsNullOrEmpty(json))
{
json = JsonUtils.Serialize(ConfigConstant.PeripheralGroupDefaultValue());
}
var printer = JsonUtils.Deserialize<PrinterItem>(json);
pobject.Id = printer.Id;
pobject.Name = printer.Name;
pobject.PortType = (PortType)Enum.Parse(typeof(PortType), printer.Port);
pobject.DynamicLibrary = (DynamicLibrary)Enum.Parse(typeof(DynamicLibrary), printer.DynamicLibrary);
pobject.PageWidth = printer.PageWidth;
pobject.CutPager = cutPager;
pobject.OpenCashbox = openCashbox;
pobject.Data[PrinterObject.COM_PORT_NAME] = printer.Data[Constant.COM_PORT_NAME];
pobject.Data[PrinterObject.COM_PORT_BAUD] = printer.Data[Constant.COM_PORT_BAUD];
pobject.Data[PrinterObject.LPT_NAME] = printer.Data[Constant.LPT_NAME];
pobject.Data[PrinterObject.DRIVE_NAME] = printer.Data[Constant.DRIVE_NAME];
pobject.Data[PrinterObject.NET_IP_ADDRESS] = printer.Data[Constant.NET_IP_ADDRESS];
pobject.Data[PrinterObject.USB_PID] = printer.Data[Constant.USB_PID];
pobject.Data[PrinterObject.USB_VID] = printer.Data[Constant.USB_VID];
pobject.EscPosCommand.InitCommand = printer.InitCommand;
pobject.EscPosCommand.NormalCommand = printer.NormalCommand;
pobject.EscPosCommand.DoubleHeightCommand = printer.DoubleHeightCommand;
pobject.EscPosCommand.DoubleWidthCommand = printer.DoubleWidthCommand;
pobject.EscPosCommand.DoubleWidthHeightCommand = printer.DoubleWidthHeightCommand;
pobject.EscPosCommand.CutPageCommand = printer.CutPageCommand;
pobject.EscPosCommand.CashboxCommand = printer.CashboxCommand;
pobject.EscPosCommand.AlignCenterCommand = printer.AlignCenterCommand;
pobject.EscPosCommand.AlignLeftCommand = printer.AlignLeftCommand;
pobject.EscPosCommand.AlignRightCommand = printer.AlignRightCommand;
//回退行数
pobject.EscPosCommand.FeedBackCommand = printer.FeedBackCommand;
//退纸行数
int feedBackRow = Global.Instance.GlobalConfigIntValue(ConfigConstant.CONFIG_CASHIER_FEEDBACK_ROW, 0);
pobject.FeedBackRow = feedBackRow;
return pobject;
}
/// <summary>
/// 构建要货单打印数据
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderAskGoodsVariable(AskgoodsTicketResponse response,List<AskgoodsDetailResponse> detailList)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
data.Add("@门店编码@", Global.Instance.BusinessPlanLog.StoreNo);
data.Add("@单号@", response.No != null ? response.No : "");
data.Add("@单据状态@", response.StatusName != null ? response.StatusName : "");
data.Add("@制单人@", response.SetMan != null ? response.SetMan : "");
data.Add("@审核人@", response.CheckMan!=null? response.CheckMan:"");
data.Add("@备注@", response.Description!=null? response.Description:"");
data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
v.Value = JsonUtils.Serialize(data);
vars.Add(v);
v = new Printer.VariableValue();
v.Key = "要货列表";
v.DataType = DataType.List;
var list = new List<Dictionary<string, string>>();
foreach (var item in detailList)
{
var row = new Dictionary<string, string>();
row.Add("@原料名称@", item.ProductName);
row.Add("@单位@", item.DispatchUnitName);
row.Add("@要货数量@", string.Format("{0}", item.Amount));
list.Add(row);
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
/// <summary>
/// 构建盘点单数据
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderCheckTicketVariable(string ticketNo,List<StoreStockCheckTicketDetailResponse> listDetail)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
data.Add("@门店编码@", Global.Instance.BusinessPlanLog.StoreNo);
data.Add("@收银员编码@", Global.Instance.BusinessPlanLog.WorkerNo);
data.Add("@收银员名称@", Global.Instance.BusinessPlanLog.WorkerName);
data.Add("@盘点单号@", ticketNo);
data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
v.Value = JsonUtils.Serialize(data);
vars.Add(v);
v = new Printer.VariableValue();
v.Key = "盘点列表";
v.DataType = DataType.List;
var list = new List<Dictionary<string, string>>();
foreach (var item in listDetail)
{
var row = new Dictionary<string, string>();
row.Add("@仓库@", item.StorageName);
row.Add("@名称@", item.ProductName);
row.Add("@单位@", item.StockUnitName);
row.Add("@数量@", string.Format("{0}", item.CheckAmount));
list.Add(row);
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
/// <summary>
/// 构建盘点数据
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderCheckVariable(List<StockUncheckTicketDetailResponse> listDetail)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
data.Add("@门店编码@", Global.Instance.BusinessPlanLog.StoreNo);
data.Add("@收银员编码@", Global.Instance.BusinessPlanLog.WorkerNo);
data.Add("@收银员名称@", Global.Instance.BusinessPlanLog.WorkerName);
data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
v.Value = JsonUtils.Serialize(data);
vars.Add(v);
v = new Printer.VariableValue();
v.Key = "盘点列表";
v.DataType = DataType.List;
var list = new List<Dictionary<string, string>>();
foreach (var item in listDetail)
{
var row = new Dictionary<string, string>();
row.Add("@仓库@", item.StorageName);
row.Add("@名称@", item.ProductName);
row.Add("@单位@", item.StockUnitName);
row.Add("@数量@", string.Format("{0}",item.CheckAmount));
list.Add(row);
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
public static Tuple<bool, string> PrinterTicket(string prefix, List<VariableValue> args, bool cutPager, bool openCashbox)
{
Tuple<bool, string> result = null;
try
{
var pobject = GetTicketPrinterObject(cutPager, false);
string template = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"template\stock\{0}_{1}.designer", prefix, pobject.PageWidth));
if (File.Exists(template))
{
string json = System.IO.File.ReadAllText(template);
DesignerSurface surface = JSON.Deserialize<DesignerSurface>(json);
PrinterTemplate printer = surface.Parse(args);
var pcontent = printer.Parse(pobject, args);
//启动新任务
Task.Factory.StartNew(() =>
{
PrinterUtils.PrintContent(pobject, pcontent);
});
result = new Tuple<bool, string>(true, "打印成功");
}
else
{
result = new Tuple<bool, string>(false, "打印模版没有配置");
}
}
catch (Exception ex)
{
result = new Tuple<bool, string>(false, "打印异常了");
}
return result;
}
}
}