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