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.

1423 lines
71 KiB
C#

9 months ago
using POSV.Entity;
using POSV.HandOver;
using POSV.Helper;
using POSV.MessageEvent;
using POSV.ShoppingCart;
using POSV.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace POSV.Shift
{
public partial class FastShitForm : BusinessForm
{
HandOverTicket handOverTicket = null;
//总长度
private const int _totalLength = 25;
//左列长度
private const int _leftLength = 10;
//右列长度
private const int _rightLength = _totalLength - _leftLength;
//默认左边距
private const int _defaultPadLeft = 2;
/// <summary>
/// Cef调用不按原来逻辑关闭
/// </summary>
private bool CefForm = false;
public FastShitForm()
{
InitializeComponent();
LOGGER.Info("打开交班界面");
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
if (this.DesignMode) return;
//正在交班中
Global.isHandOver = true;
try
{
handOverTicket = loadData();
LOGGER.Info(">>>>>>加载数据成功>>>>");
//汇总支付方式
List<HandOverDetail> detail = getHandOverDetail();
//zhangy 这个循环干啥用???
foreach (HandOverDetail handOverDetail in detail)
{
handOverDetail.HandsMoney = handOverDetail.SumMoney;
}
handOverTicket.Detail = detail;
LOGGER.Info(">>>>>>汇总支付方式成功>>>>");
//汇总菜品类别销售
List<HandOverProduct> ProductList = loadHandOverProduct();
handOverTicket.Product = ProductList;
LOGGER.Info(">>>>>>汇总菜品类别销售成功>>>>");
//汇总班次优惠金额
List<HandOverInfo> InfoList = loadHandOverInfo();
handOverTicket.Info = InfoList;
LOGGER.Info(">>>>>>汇总班次优惠金额成功>>>>");
//汇总班次支付方式明细
List<HandOverPay> payList = loadHandOverPay();
handOverTicket.Pay = payList;
LOGGER.Info(">>>>>>汇总班次支付方式明细成功>>>>");
//汇总班次菜品分类
List<HandOverProductType> productTypeList = loadHandOverProductType();
handOverTicket.ProductType = productTypeList;
LOGGER.Info(">>>>>>汇总班次菜品分类成功>>>>");
//汇总班次营业模式数据
List<HandOverSaleMode> modeList = loadHandOverSaleMode();
handOverTicket.Mode = modeList;
LOGGER.Info(">>>>>>汇总班次营业模式数据成功>>>>");
//组装界面数据
workerNoLable.Text = handOverTicket.WorkNo;
workerNameLable.Text = handOverTicket.WorkName;
label_startTime.Text = handOverTicket.DatetimeBegin;
label_endTime.Text = handOverTicket.DatetimeEnd;
BuildContent();
}
catch(Exception ex)
{
LOGGER.Error(ex, "组装交班数据发生异常");
}
//Task.Factory.StartNew(() =>
//{
// handOverTicket = loadData();
// //汇总支付方式
// List<HandOverDetail> detail = getHandOverDetail();
// foreach (HandOverDetail handOverDetail in detail)
// {
// handOverDetail.HandsMoney = handOverDetail.SumMoney;
// }
// handOverTicket.Detail = detail;
// //汇总菜品类别销售
// List<HandOverProduct> ProductList = loadHandOverProduct();
// handOverTicket.Product = ProductList;
// //汇总班次优惠金额
// List<HandOverInfo> InfoList = loadHandOverInfo();
// handOverTicket.Info = InfoList;
// //汇总班次支付方式明细
// List<HandOverPay> payList = loadHandOverPay();
// handOverTicket.Pay = payList;
// //汇总班次菜品分类
// List<HandOverProductType> productTypeList = loadHandOverProductType();
// handOverTicket.ProductType = productTypeList;
// //汇总班次营业模式数据
// List<HandOverSaleMode> modeList = loadHandOverSaleMode();
// handOverTicket.Mode = modeList;
//}).ContinueWith(task =>
//{
// this.Invoke(new Action(() =>
// {
// //组装界面数据
// workerNoLable.Text = handOverTicket.WorkNo;
// workerNameLable.Text = handOverTicket.WorkName;
// label_startTime.Text = handOverTicket.DatetimeBegin;
// label_endTime.Text = handOverTicket.DatetimeEnd;
// BuildContent();
// }));
//});
}
private void BuildContent()
{
var plan = Global.Instance.BusinessPlanLog;
//主单信息
StringBuilder bs = new StringBuilder();
bs.AppendLine(BuildTwoCText(string.Format("总人数:"), _leftLength, string.Format("{0}人", handOverTicket.PeopleCount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("合计单数:"), _leftLength, string.Format("{0}单", handOverTicket.TicketCount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("合计金额:"), _leftLength, string.Format("{0}元", handOverTicket.Amount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("成交单数:"), _leftLength, string.Format("{0}单", handOverTicket.DealTicketCount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("成交金额:"), _leftLength, string.Format("{0}元", handOverTicket.DealAmount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("退款单数:"), _leftLength, string.Format("{0}单", handOverTicket.BackTicketCount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("退款金额:"), _leftLength, string.Format("{0}元", handOverTicket.BackAmount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("销售优惠:"), _leftLength, string.Format("{0}元", handOverTicket.DiscountMoney), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("销售应收:"), _leftLength, string.Format("{0}元", handOverTicket.Receivable), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("抹零金额:"), _leftLength, string.Format("{0}元", handOverTicket.Maling), _rightLength));
bs.AppendLine("-------------------------");
bs.AppendLine(BuildTwoCText(string.Format("实收金额:"), _leftLength, string.Format("{0}元", handOverTicket.Paid), _rightLength));
this.richTextBoxEx1.Text = bs.ToString();
List<HandOverDetail> payList = handOverTicket.Detail;
//支付信息
bs = new StringBuilder();
foreach (var typeData in payList) {
bs.AppendLine(BuildTwoCText(string.Format("{0}", typeData.PayModeName), _leftLength, string.Format("{0}元", typeData.Money), _rightLength));
}
bs.AppendLine("-------------------------");
bs.AppendLine(BuildTwoCText(string.Format("合计:"), _leftLength, string.Format("{0}元", handOverTicket.Paid), _rightLength));
this.richTextBoxEx2.Text = bs.ToString();
//卡务信息
bs = new StringBuilder();
foreach (var typeData in payList)
{
bs.AppendLine(BuildTwoCText(string.Format("{0}", typeData.PayModeName), _leftLength, string.Format("{0}元", typeData.CardMoney), _rightLength));
}
bs.AppendLine("-------------------------");
bs.AppendLine(BuildTwoCText(string.Format("充值笔数:"), _leftLength, string.Format("{0}笔", handOverTicket.CardCount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("充值金额:"), _leftLength, string.Format("{0}元", handOverTicket.CardRealMoney), _rightLength));
bs.AppendLine("-------------------------");
bs.AppendLine(BuildTwoCText(string.Format("退卡笔数:"), _leftLength, string.Format("{0}笔", handOverTicket.CardRefundCount), _rightLength));
bs.AppendLine(BuildTwoCText(string.Format("退卡金额:"), _leftLength, string.Format("{0}元", handOverTicket.CardRefundMoney), _rightLength));
this.richTextBoxEx3.Text = bs.ToString();
}
private string BuildOneRText(string text, int paddingLeft)
{
return text + "".PadLeft(paddingLeft, ' ');
}
private string BuildTwoCText(string leftStr, int leftLength, string rightStr, int rightLength)
{
StringBuilder result = new StringBuilder();
leftStr = leftStr ?? "";
rightStr = rightStr ?? "";
var tempLeftStr = leftStr;
var tempRightStr = rightStr;
//左侧字符真实长度
var leftStrLen = GetPrintStringLength(tempLeftStr);
bool leftNewLine = false;
if (leftStrLen > leftLength)
{
//左侧已经超出,独占一行
leftNewLine = true;
}
else
{
//填充空格
var leftDiff = leftLength - leftStrLen;
tempLeftStr = "".PadLeft(leftDiff, ' ') + tempLeftStr;
}
//右侧字符真实长度
var rightStrLen = GetPrintStringLength(tempRightStr);
if (rightStrLen > rightLength)
{
//右侧已超出,独占一行
var totalLength = leftLength + rightLength;
if (rightStrLen > totalLength)
{
//从头开始
}
else
{
//填充空格
var rightDiff = totalLength - rightStrLen;
tempRightStr = "".PadLeft(rightDiff, ' ') + tempRightStr;
}
}
else
{
//填充空格
var rightDiff = rightLength - rightStrLen;
tempRightStr = "".PadLeft(rightDiff, ' ') + tempRightStr;
}
result.Append(tempLeftStr);
if (leftNewLine)
{
result.Append(Environment.NewLine);
}
result.Append(tempRightStr);
return result.ToString();
}
private static int GetPrintStringLength(string str)
{
int valueLength = 0;
string chinese = @"^[\u0391-\uFFE5]+$";
// 获取字段值的长度如果含中文字符则每个中文字符长度为2否则为1
for (int i = 0; i < str.Length; i++)
{
// 获取一个字符
string temp = str[i].ToString();
// 判断是否为中文字符
if (Regex.IsMatch(temp, chinese))
{
valueLength += 2;
}
else
{
valueLength += 1;
}
}
// 进位取整
return valueLength;
}
/// <summary>
/// 查询未交单外送单数量
/// </summary>
/// <returns></returns>
private int GetWsUnFinishOrder()
{
int result = 0;
try
{
List<OrderDelivery> deliveryList = null;
using (var db = Global.Instance.OpenDataBase)
{
deliveryList = db.Fetch<OrderDelivery>(@"where status != @0 order by createDate", 2);
}
if (deliveryList.Count > 0)
{
result = deliveryList.Count;
}
}
catch (Exception ex)
{
LOGGER.Error(ex, "交班检查外送未交单发生异常");
}
return result;
}
public string getUnShiftWorker()
{
string unShiftWorker = "";
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" SELECT workerNo,workerName from ");
sqlBuld.Append(" pos_business_plan_log ");
sqlBuld.Append(" WHERE status = 0 and workerNo<> '{0}' and storeId ='{1}'");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.StoreId);
List<BusinessPlanLog> businessPlanLogList = db.Query<BusinessPlanLog>(sql).ToList();
foreach (BusinessPlanLog entity in businessPlanLogList)
{
unShiftWorker = unShiftWorker + entity.WorkerNo + "(" + entity.WorkerName + ")" + ",";
}
if (unShiftWorker != null && !"".Equals(unShiftWorker))
{
unShiftWorker = unShiftWorker.Substring(0, unShiftWorker.Length - 1);
}
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return unShiftWorker;
}
private void OnCloseTouchClick(object sender, EventArgs e)
{
Global.isHandOver = false;
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
OnCloseTouchClick(sender, e);
}
public List<HandOverPay> loadHandOverPay()
{
List<HandOverPay> list = new List<HandOverPay>();
try
{
using (var db = Global.Instance.OpenDataBase)
{
//第一步汇总各营业模式下的支付方式总金额
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select count(a.id) as count,round(sum(a.amount),2) as money,a.no as payModeNo,a.name as payModeName,b.orderType as busMode from pos_order_pay a ");
sqlBuld.Append(" left join pos_order b on a.orderId = b.id ");
sqlBuld.Append(" where b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' ");
sqlBuld.Append(" and b.storeId = '{2}' ");
sqlBuld.Append(" and b.orderStatus in (0, 2, 4 ) ");
sqlBuld.Append(" GROUP BY a.no , b.orderType ");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverPay> handOverPayList = db.Query<HandOverPay>(sql).ToList();
foreach (HandOverPay handOverPay in handOverPayList)
{
handOverPay.BusType = 0;//销售
list.Add(handOverPay);
}
//第二步汇总充值各支付下的总金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select a.payNo as payModeNo,a.payName as payModeName,count(a.payNo) as count,round(sum(a.amount),2) AS money from pos_card_recharge_pay a ");
sqlBuld.Append(" left join pos_card_recharge b on a.rechargeId = b.id ");
sqlBuld.Append(" where b.workerNo = '{0}' ");
sqlBuld.Append(" and b.planNo = '{1}' and b.storeId = '{2}' ");
sqlBuld.Append(" and rechargeStatus = 2 ");
sqlBuld.Append(" group by a.payNo ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverPay> handOverRechargePayList = db.Query<HandOverPay>(sql).ToList();
foreach (HandOverPay handOverPay in handOverRechargePayList)
{
handOverPay.BusMode = -1;
handOverPay.BusType = 1;//充值
list.Add(handOverPay);
}
//第三步汇总礼品卡销售各支付下的总金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select a.payNo as payModeNo,a.payName as payModeName,count(a.payNo) as count,round(sum(a.amount),2) AS money from pos_card_sale_pay a ");
sqlBuld.Append(" left join pos_card_sale b on a.ticketId = b.id ");
sqlBuld.Append(" where b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' and b.storeId = '{2}' ");
sqlBuld.Append(" group by a.payNo ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverPay> handOverSalePayList = db.Query<HandOverPay>(sql).ToList();
foreach (HandOverPay handOverPay in handOverSalePayList)
{
handOverPay.BusMode = -1;
handOverPay.BusType = 1;//充值
list.Add(handOverPay);
}
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return list;
}
/// <summary>
/// 销售分析
/// zhangy 2020-01-08 08:40 Add
/// 重写的方法
/// </summary>
/// <returns></returns>
public List<HandOverProduct> loadHandOverProduct()
{
List<HandOverProduct> list = new List<HandOverProduct>();
try
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" SELECT a.typeId AS typeId, ");
sqlBuld.Append(" ifnull(a.typeName,'') AS typeName, ifnull(a.productName,'') AS productName,a.specName as specName, ");
sqlBuld.Append(" a.productNo AS productNo,round(SUM(a.quantity - a.rquantity),2) AS count,");
sqlBuld.Append(" round(sum(case when a.isSuit = 3 then a.quantity else 0 end), 2) as suitQuantity,");
sqlBuld.Append(" round(sum(case when a.isSuit != 3 then a.totalReceivableAmount else 0 end),2) as amount ");
sqlBuld.Append(" FROM pos_order_item a ");
sqlBuld.Append(" left join pos_order b on a.orderId = b.id ");
sqlBuld.Append(" WHERE b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' ");
sqlBuld.Append(" and b.storeId = '{2}' ");
sqlBuld.Append(" and b.orderStatus in (0, 2, 4) ");
sqlBuld.Append(" GROUP BY a.productId , a.specId");
sqlBuld.Append(" ORDER BY a.typeId,a.productNo ");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
LOGGER.Debug(sql);
List<HandOverProduct> handOverProductList = new List<HandOverProduct>();
using (var db = Global.Instance.OpenDataBase)
{
handOverProductList = db.Query<HandOverProduct>(sql).ToList();
}
decimal sumCount = 0.00M;
decimal sumSuitQuantity = 0.00M;
decimal sumAmount = 0.00M;
List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();
handOverProductList = handOverProductList.OrderBy(x => x.TypeId).ToList();
///分类集合
var typeMap = handOverProductList.GroupBy(g => new { g.TypeId }).Select(group =>
{
var map = new Dictionary<string, object>();
map.Add("type", 3);
//zhangy 添加typeId,为单品遍历提供条件数据
map.Add("typeId", group.Select(o => o.TypeId).First());
map.Add("name", group.Select(o => (o.TypeName == null ? "" : o.TypeName)).First());
map.Add("count", group.Sum(o => o.Count));
map.Add("suitQuantity", group.Sum(o => o.SuitQuantity));
map.Add("amount", group.Sum(o => o.Amount));
return map;
}).ToList();
//通过分类遍历菜品
foreach (var item in typeMap)
{
result.Add(item);
var typeId = item["typeId"];
decimal count = 0.00M;
decimal suitQuantity = 0.00M;
decimal amount = 0.00M;
//查询指定分类ID的全部菜品
var dishs = handOverProductList.FindAll(x => x.TypeId.Equals(typeId)).OrderBy(x => x.ProductNo).ToList();
///符合条件的菜品按照品名聚合,品名相同的菜品合并为一行数据
///2019-12-11 zhangy Edit 按照品名+规格名的方式聚合,确保相同品名,不同规格名,显示为独立一行菜品
var dishMap = dishs.GroupBy(g => new { g.ProductName, g.SpecName }).Select(group =>
{
var map = new Dictionary<string, object>();
map.Add("type", 0);
string sepcName = group.Select(o => (o.SpecName == null ? "" : o.SpecName)).First();
string productName = group.Select(o => (o.ProductName == null ? "" : o.ProductName)).First();
if (string.IsNullOrEmpty(sepcName))
{
map.Add("name", productName);
}
else
{
map.Add("name", productName + "(" + sepcName + ")");
}
map.Add("count", group.Sum(o => o.Count));
map.Add("suitQuantity", group.Sum(o => o.SuitQuantity));
map.Add("amount", group.Sum(o => o.Amount));
return map;
}).ToList();
foreach (var dish in dishMap)
{
result.Add(dish);
count += Convert.ToDecimal(dish["count"].ToString());
suitQuantity += Convert.ToDecimal(dish["suitQuantity"].ToString());
amount += Convert.ToDecimal(dish["amount"].ToString());
sumCount += Convert.ToDecimal(dish["count"].ToString());
sumSuitQuantity += Convert.ToDecimal(dish["suitQuantity"].ToString());
sumAmount += Convert.ToDecimal(dish["amount"].ToString());
}
var seriesMap = new Dictionary<string, Object>();
seriesMap.Add("type", 1);
seriesMap.Add("name", "小计");
seriesMap.Add("count", count);
seriesMap.Add("suitQuantity", suitQuantity);
seriesMap.Add("amount", amount);
result.Add(seriesMap);
}
Dictionary<string, Object> sumMap = new Dictionary<string, Object>();
sumMap.Add("name", "销售");
sumMap.Add("type", 2);
sumMap.Add("count", sumCount);
sumMap.Add("suitQuantity", sumSuitQuantity);
sumMap.Add("amount", sumAmount);
result.Add(sumMap);
foreach (Dictionary<string, Object> map in result)
{
HandOverProduct entity = new HandOverProduct();
entity.Type = StringUtils.GetInt(map["type"]);
entity.Name = StringUtils.GetString(map["name"]);
entity.Count = StringUtils.GetDecimal(map["count"]);
entity.SuitQuantity = StringUtils.GetDecimal(map["suitQuantity"]);
entity.Amount = StringUtils.GetDecimal(map["amount"]);
list.Add(entity);
}
}
catch (Exception ex)
{
LOGGER.Error(ex, "菜品分析数据处理异常");
}
return list;
}
//zhangy 2020-01-08 8:37 以下注释代码是过去的,仅仅保留备用,时机成熟删除
//public List<HandOverProduct> loadHandOverProduct()
//{
// List<HandOverProduct> handOverProductList = null;
// List<HandOverProduct> list = null;
// try
// {
// using (var db = Global.Instance.OpenDataBase)
// {
// StringBuilder sqlBuld = new StringBuilder();
// sqlBuld.Append(" SELECT a.typeId AS typeId, ");
// sqlBuld.Append(" ifnull(a.typeName,'') AS typeName, ifnull(a.productName,'') AS productName,a.specName as specName, ");
// sqlBuld.Append(" a.productNo AS productNo,round(SUM(a.quantity - a.rquantity),2) AS count,");
// sqlBuld.Append(" round(sum(case when a.isSuit = 3 then a.quantity else 0 end), 2) as suitQuantity,");
// sqlBuld.Append(" round(sum(case when a.isSuit != 3 then a.totalReceivableAmount else 0 end),2) as amount ");
// sqlBuld.Append(" FROM pos_order_item a ");
// sqlBuld.Append(" left join pos_order b on a.orderId = b.id ");
// sqlBuld.Append(" WHERE b.workerNo = '{0}' ");
// sqlBuld.Append(" and b.shiftNo = '{1}' ");
// sqlBuld.Append(" and b.storeId = '{2}' ");
// sqlBuld.Append(" and b.orderStatus in (0, 2, 4) ");
// sqlBuld.Append(" GROUP BY a.productId , a.specId");
// sqlBuld.Append(" ORDER BY a.typeId,a.productNo ");
// string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
// handOverProductList = db.Query<HandOverProduct>(sql).ToList();
// string seriesId = "";
// string seriesName = "";
// Dictionary<string, Object> seriesMap = new Dictionary<string, Object>();
// Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
// decimal count = 0.00M;
// decimal suitQuantity = 0.00M;
// decimal amount = 0.00M;
// decimal sumCount = 0.00M;
// decimal sumSuitQuantity = 0.00M;
// decimal sumAmount = 0.00M;
// int i = 0;
// List<Dictionary<string, Object>> result = new List<Dictionary<string, Object>>();
// int listLength = handOverProductList.Count;
// foreach (HandOverProduct product in handOverProductList)
// {
// string typeId = product.TypeId;
// if (!seriesId.Equals(typeId))
// {
// // 分类改变的时候把分类加入列表
// if (i != 0)
// {
// seriesMap.Add("type", 1);
// seriesMap.Add("name", seriesName);
// seriesMap.Add("count", count);
// seriesMap.Add("suitQuantity", suitQuantity);
// seriesMap.Add("amount", amount);
// result.Add(seriesMap);
// //分类改变时,清除缓存
// typeMap = new Dictionary<string, Object>();
// }
// seriesMap = new Dictionary<string, Object>();
// count = 0.00M;
// suitQuantity = 0.00M;
// amount = 0.00M;
// seriesId = typeId;
// seriesName = product.TypeName;
// }
// count += product.Count;
// suitQuantity += product.SuitQuantity;
// amount += product.Amount;
// sumCount += product.Count;
// sumSuitQuantity += product.SuitQuantity;
// sumAmount += product.Amount;
// //开始先加入分类名称
// if (!typeMap.ContainsKey("name") || !typeMap["name"].Equals(product.TypeName))
// {
// typeMap.Add("type", 3);
// typeMap.Add("name", product.TypeName);
// typeMap.Add("count", "");
// typeMap.Add("suitQuantity", "");
// typeMap.Add("amount", "");
// result.Add(typeMap);
// }
// // 菜品加入列表
// Dictionary<string, Object> dishMap = new Dictionary<string, Object>();
// dishMap.Add("type", 0);
// if (product.SpecName != null && !"".Equals(product.SpecName))
// {
// dishMap.Add("name", product.ProductName + "(" + product.SpecName + ")");
// }
// else
// {
// dishMap.Add("name", product.ProductName);
// }
// dishMap.Add("count", product.Count);
// dishMap.Add("suitQuantity", product.SuitQuantity);
// dishMap.Add("amount", product.Amount);
// result.Add(dishMap);
// i = i + 1;
// if (i == listLength)
// {
// seriesMap.Add("type", 1);
// seriesMap.Add("name", seriesName);
// seriesMap.Add("count", count);
// seriesMap.Add("suitQuantity", suitQuantity);
// seriesMap.Add("amount", amount);
// result.Add(seriesMap);
// //分类改变时,清除缓存
// typeMap = new Dictionary<string, Object>();
// }
// }
// Dictionary<string, Object> sumMap = new Dictionary<string, Object>();
// sumMap.Add("name", "销售");
// sumMap.Add("type", 2);
// sumMap.Add("count", sumCount);
// sumMap.Add("suitQuantity", sumSuitQuantity);
// sumMap.Add("amount", sumAmount);
// result.Add(sumMap);
// list = new List<HandOverProduct>();
// foreach (Dictionary<string, Object> map in result)
// {
// HandOverProduct entity = new HandOverProduct();
// entity.Type = StringUtils.GetInt(map["type"]);
// entity.Name = StringUtils.GetString(map["name"]);
// entity.Count = StringUtils.GetDecimal(map["count"]);
// entity.SuitQuantity = StringUtils.GetDecimal(map["suitQuantity"]);
// entity.Amount = StringUtils.GetDecimal(map["amount"]);
// list.Add(entity);
// }
// }
// }
// catch (Exception ex)
// {
// LOGGER.Error(ex);
// }
// return list;
//}
/// <summary>
/// 汇总各营业模式的次数和金额
/// </summary>
/// <returns></returns>
public List<HandOverSaleMode> loadHandOverSaleMode()
{
List<HandOverSaleMode> list = null;
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select orderType ,count(id) as count,round(sum(receivableAmount),2) as amount from pos_order ");
sqlBuld.Append(" where workerNo = '{0}' ");
sqlBuld.Append(" and shiftNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sqlBuld.Append(" and orderStatus in (0, 2, 4) ");
sqlBuld.Append(" GROUP BY orderType ");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
list = db.Query<HandOverSaleMode>(sql).ToList();
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return list;
}
/// <summary>
/// 获取交班优惠
/// </summary>
/// <returns></returns>
public List<HandOverInfo> loadHandOverInfo()
{
List<HandOverInfo> list = null;
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select a.promotionType,count(a.id) as count,round(sum(a.discountAmount),2) as amount from pos_order_item_promotion a ");
sqlBuld.Append(" left join pos_order b on a.tradeNo = b.tradeNo ");
sqlBuld.Append(" where a.promotionType<> '50' ");
sqlBuld.Append(" and b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' ");
sqlBuld.Append(" and b.storeId = '{2}' ");
sqlBuld.Append(" and b.orderStatus in (0, 2, 4) ");
sqlBuld.Append(" GROUP BY a.promotionType ");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
list = db.Query<HandOverInfo>(sql).ToList();
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return list;
}
//汇总销售分类
public List<HandOverProductType> loadHandOverProductType()
{
List<HandOverProductType> list = null;
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select a.typeId AS typeId,a.typeName AS typeName,round(SUM(a.quantity - a.rquantity),2) AS count, ");
sqlBuld.Append(" round(SUM(a.totalReceivableAmount),2) AS amount from pos_order_item a ");
sqlBuld.Append(" left join pos_order b on a.tradeNo = b.tradeNo ");
sqlBuld.Append(" where b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' ");
sqlBuld.Append(" and b.storeId = '{2}' ");
sqlBuld.Append(" and a.isSuit in (1, 2) ");
sqlBuld.Append(" and b.orderStatus in (0, 2, 4) ");
sqlBuld.Append(" GROUP BY a.typeId ");
sqlBuld.Append(" ORDER BY a.typeId");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
list = db.Query<HandOverProductType>(sql).ToList();
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return list;
}
public HandOverTicket loadData()
{
LOGGER.Info(">>>>>>执行loadData......");
HandOverTicket handOverTicket = null;
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
// 第一步汇总主单数据
sqlBuld.Append(" select round(sum(people),2) as peopleCount, ");
sqlBuld.Append(" round(sum(case when orderStatus IN (0,2,4) then 1 else 0 end),2) as ticketCount, ");
sqlBuld.Append(" round(sum(case when orderStatus IN (0,2,4) then amount else 0 end),2) as amount, ");
sqlBuld.Append(" round(sum(case when orderStatus =4 then 1 else 0 end),2) as dealTicketCount , ");
sqlBuld.Append(" round(sum(case when orderStatus =4 then amount else 0 end),2) as dealAmount , ");
sqlBuld.Append(" round(sum(case when orderStatus = 2 then 1 else 0 end),2) as backTicketCount, ");
sqlBuld.Append(" round(sum(case when orderStatus = 2 then amount else 0 end),2) as backAmount, ");
sqlBuld.Append(" round(sum(case when orderStatus IN (0,2,4) then discountAmount else 0 end),2) as discountMoney, ");
sqlBuld.Append(" round(sum(case when orderStatus IN (0,2,4) then receivableAmount else 0 end),2) as receivable, ");
sqlBuld.Append(" round(sum(case when orderStatus IN (0,2,4) then malingAmount else 0 end),2) as maling ");
sqlBuld.Append(" from pos_order where ");
sqlBuld.Append(" workerNo = '{0}' and shiftNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
string sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
LOGGER.Debug(">>>>>>"+sql);
handOverTicket = db.FirstOrDefault<HandOverTicket>(sql);
if (handOverTicket == null)
{
handOverTicket = new HandOverTicket();
handOverTicket.PeopleCount = 0;
handOverTicket.TicketCount = 0;
handOverTicket.Amount = 0.00M;
handOverTicket.DealTicketCount = 0;
handOverTicket.DealAmount = 0.00M;
handOverTicket.BackTicketCount = 0;
handOverTicket.BackAmount = 0.00M;
handOverTicket.DiscountMoney = 0.00M;
handOverTicket.Receivable = 0.00M;
handOverTicket.Maling = 0.00M;
}
handOverTicket.TenantId = Global.Instance.BusinessPlanLog.TenantId;
handOverTicket.WorkId = Global.Instance.BusinessPlanLog.WorkerId;
handOverTicket.WorkNo = Global.Instance.BusinessPlanLog.WorkerNo;
handOverTicket.WorkName = Global.Instance.BusinessPlanLog.WorkerName;
handOverTicket.ShiftName = Global.Instance.BusinessPlanLog.Name;
handOverTicket.ShiftNo = Global.Instance.BusinessPlanLog.No;
handOverTicket.StoreId = Global.Instance.BusinessPlanLog.StoreId;
handOverTicket.StoreNo = Global.Instance.BusinessPlanLog.StoreNo;
handOverTicket.StoreName = Global.Instance.Authc.StoreName;
handOverTicket.AcceptWorkerNo = Global.Instance.BusinessPlanLog.WorkerNo;
handOverTicket.DatetimeBegin = Global.Instance.BusinessPlanLog.LoginTime;
handOverTicket.DatetimeEnd = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
handOverTicket.DatetimeShift = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
handOverTicket.PosNo = Global.Instance.Authc.PosNo;
handOverTicket.DeviceIp = DeviceUtils.Instance.IPAddress;
handOverTicket.DeviceMac = DeviceUtils.Instance.MacAddress;
handOverTicket.DeviceName = DeviceUtils.Instance.ComputerName;
LOGGER.Info(">>>>>>汇总主单数据成功");
// 第1.5部汇总电子券金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select sum(a.discountAmount) as couponDiscountMoney ");
sqlBuld.Append(" from pos_order_item_promotion a ");
sqlBuld.Append(" left join pos_order b on a.orderId = b.id ");
sqlBuld.Append(" where b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' ");
sqlBuld.Append(" and b.storeId = '{2}' ");
sqlBuld.Append(" and b.orderStatus in (0, 2, 4) ");
sqlBuld.Append(" and a.promotionType in(80, 81, 82) ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeDiscount = db.FirstOrDefault<HandOverTicket>(sql);
if (storeDiscount == null)
{
handOverTicket.CouponDiscountMoney = 0;
handOverTicket.OtherDiscountMoney = handOverTicket.DiscountMoney;
}
else
{
handOverTicket.CouponDiscountMoney = storeDiscount.CouponDiscountMoney;
handOverTicket.OtherDiscountMoney = handOverTicket.DiscountMoney - storeDiscount.CouponDiscountMoney;
}
LOGGER.Info(">>>>>>汇总电子券金额成功");
// 第二部汇总卡务金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select ");
sqlBuld.Append(" round(sum(money),2) as cardRealMoney ,count(id) as cardCount from pos_card_recharge where");
sqlBuld.Append(" workerNo = '{0}' and planNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sqlBuld.Append(" and rechargeStatus = 2 ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeCardRecharge = db.FirstOrDefault<HandOverTicket>(sql);
if (storeCardRecharge == null)
{
handOverTicket.CardCount = 0;
handOverTicket.CardRealMoney = 0.00M;
}
else
{
handOverTicket.CardCount = storeCardRecharge.CardCount;
handOverTicket.CardRealMoney = storeCardRecharge.CardRealMoney;
}
LOGGER.Info(">>>>>>汇总卡务金额成功");
// 第二步的扩展汇总礼品卡销售金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select ");
sqlBuld.Append(" round(sum(money),2) as cardRealMoney ,count(id) as cardCount from pos_card_sale where");
sqlBuld.Append(" workerNo = '{0}' and shiftNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sqlBuld.Append(" and payStatus=1 ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeCardSale = db.FirstOrDefault<HandOverTicket>(sql);
if (storeCardSale == null)
{
handOverTicket.CardCount = handOverTicket.CardCount;
handOverTicket.CardRealMoney = handOverTicket.CardRealMoney;
}
else
{
handOverTicket.CardCount = handOverTicket.CardCount + storeCardSale.CardCount;
handOverTicket.CardRealMoney = handOverTicket.CardRealMoney + storeCardSale.CardRealMoney;
}
LOGGER.Info(">>>>>>汇总礼品卡销售金额成功");
// 第三部汇总非营业收入支出金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select ");
sqlBuld.Append(" round(sum(case when type=1 then money else 0 end),2) as outmoney, ");
sqlBuld.Append(" round(sum(case when type=2 then money else 0 end),2) as inmoney ");
sqlBuld.Append(" from pos_store_cost_revenue where ");
sqlBuld.Append(" workNo = '{0}' and shiftNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeCostRevenue = db.FirstOrDefault<HandOverTicket>(sql);
if (storeCostRevenue == null)
{
handOverTicket.Inmoney = 0.00M;
handOverTicket.Outmoney = 0.00M;
}
else
{
handOverTicket.Inmoney = storeCostRevenue.Inmoney;
handOverTicket.Outmoney = storeCostRevenue.Outmoney;
}
LOGGER.Info(">>>>>>汇总非营业收入支出成功");
// 查询备用金
handOverTicket.Imprest = Global.Instance.BusinessPlanLog.Imprest;
// 第五步汇总卡务退卡次数金额
sqlBuld = new StringBuilder();
sqlBuld.Append(" select ");
sqlBuld.Append(" round(sum(refundMoney),2) as cardRefundMoney ,count(id) as cardRefundCount from pos_card_account_destroy where");
sqlBuld.Append(" workerNo = '{0}' and planNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeCardRefund = db.FirstOrDefault<HandOverTicket>(sql);
if (storeCardRefund == null)
{
handOverTicket.CardRefundCount = 0;
handOverTicket.CardRefundMoney = 0.00M;
}
else
{
handOverTicket.CardRefundCount = storeCardRefund.CardRefundCount;
handOverTicket.CardRefundMoney = storeCardRefund.CardRefundMoney;
}
LOGGER.Info(">>>>>>汇总卡务退卡次数金额成功");
//第五步扩展礼品卡销售退卡金额次数
sqlBuld = new StringBuilder();
sqlBuld.Append(" select ");
sqlBuld.Append(" round(sum(money),2) as cardRefundMoney ,count(id) as cardRefundCount from pos_card_sale where");
sqlBuld.Append(" workerNo = '{0}' and shiftNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sqlBuld.Append(" and payStatus=2 ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeCardSaleRefund = db.FirstOrDefault<HandOverTicket>(sql);
if (storeCardSaleRefund == null)
{
handOverTicket.CardRefundCount = handOverTicket.CardRefundCount;
handOverTicket.CardRefundMoney = handOverTicket.CardRefundMoney;
}
else
{
handOverTicket.CardRefundCount = handOverTicket.CardRefundCount + storeCardSaleRefund.CardRefundCount;
handOverTicket.CardRefundMoney = handOverTicket.CardRefundMoney + System.Math.Abs(storeCardSaleRefund.CardRefundMoney);
}
LOGGER.Info(">>>>>>礼品卡销售退卡金额次数成功");
//第六步汇总支付虚实收
sqlBuld = new StringBuilder();
sqlBuld.Append(" select round(sum(case when a.incomeFlag = 1 then a.amount else 0 end),2) as realMoney , ");
sqlBuld.Append(" round(sum(case when a.incomeFlag = 0 then a.amount else 0 end), 2) as virtualMoney ");
sqlBuld.Append(" from pos_order_pay a ");
sqlBuld.Append(" left join pos_order b on a.orderId = b.id where b.workerNo = '{0}' ");
sqlBuld.Append(" and b.shiftNo = '{1}' and b.storeId = '{2}' ");
sqlBuld.Append(" and b.orderStatus in (0, 2, 4) ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket storeVirtualRealMoney = db.FirstOrDefault<HandOverTicket>(sql);
if (storeVirtualRealMoney == null)
{
handOverTicket.RealMoney = 0.00M;
handOverTicket.VirtualMoney = 0.00M;
}
else
{
handOverTicket.RealMoney = storeVirtualRealMoney.RealMoney;
handOverTicket.VirtualMoney = storeVirtualRealMoney.VirtualMoney;
}
LOGGER.Info(">>>>>>汇总支付虚实收成功");
//第七步获取门店支付配送费
sqlBuld = new StringBuilder();
sqlBuld.Append(" select ");
sqlBuld.Append(" round(sum(case when status=0 then distributionFee else 0 end),2) - round(sum(case when status=1 then distributionFee else 0 end),2) as distributionFee ");
sqlBuld.Append(" from pos_wx_waimai_order where ");
sqlBuld.Append(" workerNo = '{0}' and shiftNo = '{1}' ");
sqlBuld.Append(" and storeId = '{2}' ");
sqlBuld.Append(" and isIncome = '1' ");
sql = string.Format(sqlBuld.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
HandOverTicket wxWaimaiOrder = db.FirstOrDefault<HandOverTicket>(sql);
if (wxWaimaiOrder == null)
{
handOverTicket.DistributionFee = 0.00M;
}
else
{
handOverTicket.DistributionFee = wxWaimaiOrder.DistributionFee;
}
LOGGER.Info(">>>>>>获取门店支付配送费成功");
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return handOverTicket;
}
public List<HandOverDetail> getHandOverDetail()
{
List<HandOverDetail> sumList = new List<HandOverDetail>();
try
{
using (var db = Global.Instance.OpenDataBase)
{
Dictionary<string, string> payTypeMap = new Dictionary<string, string>();
// 第一步销售收入
StringBuilder sqlBuf = new StringBuilder();
sqlBuf.Append(" select a.no as payModeNo,a.name as payModeName,count(a.no) as count ,round(sum(a.amount),2) as money from pos_order_pay a ");
sqlBuf.Append(" left join pos_order b on a.orderId = b.id");
sqlBuf.Append(" where ");
sqlBuf.Append(" b.workerNo ='{0}' ");
sqlBuf.Append(" and b.shiftNo ='{1}' ");
sqlBuf.Append(" and b.storeId = '{2}' ");
sqlBuf.Append(" and b.orderStatus in (0,2,4) ");
sqlBuf.Append(" group by a.no ");
string sql = string.Format(sqlBuf.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverDetail> list = db.Query<HandOverDetail>(sql).ToList();
int i = 0;
foreach (HandOverDetail handOverDetail in list)
{
handOverDetail.Index = i + 1;
i = i + 1;
payTypeMap.Add(handOverDetail.PayModeNo, handOverDetail.PayModeName);
}
// 第二部汇总卡务金额
sqlBuf = new StringBuilder();
sqlBuf.Append(" select a.payNo as payModeNo,a.payName as payModeName,count(a.payNo) as count,round(sum(a.amount),2) AS money from pos_card_recharge_pay a ");
sqlBuf.Append(" left join pos_card_recharge b on a.rechargeId = b.id ");
sqlBuf.Append(" where b.workerNo = '{0}' ");
sqlBuf.Append(" and b.planNo = '{1}' and b.storeId = '{2}' ");
sqlBuf.Append(" and rechargeStatus = 2 ");
sqlBuf.Append(" group by a.payNo ");
sql = string.Format(sqlBuf.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverDetail> listDetail = db.Query<HandOverDetail>(sql).ToList();
foreach (HandOverDetail cardRechargeDetail in listDetail)
{
//payTypeMap[cardRechargeDetail.PayModeNo] = cardRechargeDetail.PayModeName;
if (payTypeMap.ContainsKey(cardRechargeDetail.PayModeNo))
{
payTypeMap[cardRechargeDetail.PayModeNo] = cardRechargeDetail.PayModeName;
}
else
{
payTypeMap.Add(cardRechargeDetail.PayModeNo, cardRechargeDetail.PayModeName);
}
}
//第二步扩展 汇总礼品卡销售金额
sqlBuf = new StringBuilder();
sqlBuf.Append(" select a.payNo as payModeNo,a.payName as payModeName,count(a.payNo) as count,round(sum(a.amount),2) AS money from pos_card_sale_pay a ");
sqlBuf.Append(" left join pos_card_sale b on a.ticketId = b.id ");
sqlBuf.Append(" where b.workerNo = '{0}' ");
sqlBuf.Append(" and b.shiftNo = '{1}' and b.storeId = '{2}' ");
sqlBuf.Append(" group by a.payNo ");
sql = string.Format(sqlBuf.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverDetail> listSaleDetail = db.Query<HandOverDetail>(sql).ToList();
foreach (HandOverDetail cardSaleDetail in listSaleDetail)
{
//payTypeMap[cardRechargeDetail.PayModeNo] = cardRechargeDetail.PayModeName;
if (payTypeMap.ContainsKey(cardSaleDetail.PayModeNo))
{
payTypeMap[cardSaleDetail.PayModeNo] = cardSaleDetail.PayModeName;
}
else
{
payTypeMap.Add(cardSaleDetail.PayModeNo, cardSaleDetail.PayModeName);
}
}
// 第三部汇总卡务退款金额
sqlBuf = new StringBuilder();
sqlBuf.Append(" select a.payNo as payModeNo,a.payName as payModeName,count(a.payNo) as count,round(sum(a.refundMoney),2) AS money from pos_card_account_destroy a ");
sqlBuf.Append(" where a.workerNo = '{0}' ");
sqlBuf.Append(" and a.planNo = '{1}' and a.storeId = '{2}' ");
sqlBuf.Append(" group by a.payNo ");
sql = string.Format(sqlBuf.ToString(), Global.Instance.BusinessPlanLog.WorkerNo, Global.Instance.BusinessPlanLog.No, Global.Instance.BusinessPlanLog.StoreId);
List<HandOverDetail> listRefundDetail = db.Query<HandOverDetail>(sql).ToList();
foreach (HandOverDetail cardRefundDetail in listRefundDetail)
{
if (payTypeMap.ContainsKey(cardRefundDetail.PayModeNo))
{
payTypeMap[cardRefundDetail.PayModeNo] = cardRefundDetail.PayModeName;
}
else
{
payTypeMap.Add(cardRefundDetail.PayModeNo, cardRefundDetail.PayModeName);
}
}
foreach (KeyValuePair<string, string> payType in payTypeMap)
{
HandOverDetail sumDetail = new HandOverDetail();
foreach (HandOverDetail handOverDetail in list)
{
if (payType.Key.Equals(handOverDetail.PayModeNo))
{
sumDetail.PayModeNo = handOverDetail.PayModeNo;
sumDetail.PayModeName = handOverDetail.PayModeName;
sumDetail.Count = handOverDetail.Count;
sumDetail.Money = handOverDetail.Money;
}
}
foreach (HandOverDetail cardRechargeDetail in listDetail)
{
if (payType.Key.Equals(cardRechargeDetail.PayModeNo))
{
sumDetail.PayModeNo = cardRechargeDetail.PayModeNo;
sumDetail.PayModeName = cardRechargeDetail.PayModeName;
sumDetail.CardCount = cardRechargeDetail.Count;
sumDetail.CardMoney = cardRechargeDetail.Money;
}
}
foreach (HandOverDetail cardSaleDetail in listSaleDetail)
{
if (payType.Key.Equals(cardSaleDetail.PayModeNo))
{
sumDetail.PayModeNo = cardSaleDetail.PayModeNo;
sumDetail.PayModeName = cardSaleDetail.PayModeName;
sumDetail.CardCount = sumDetail.CardCount + cardSaleDetail.Count;
sumDetail.CardMoney = sumDetail.CardMoney + cardSaleDetail.Money;
}
}
foreach (HandOverDetail cardRefundDetail in listRefundDetail)
{
if (payType.Key.Equals(cardRefundDetail.PayModeNo))
{
sumDetail.PayModeNo = cardRefundDetail.PayModeNo;
sumDetail.PayModeName = cardRefundDetail.PayModeName;
sumDetail.CardCount = sumDetail.CardCount + cardRefundDetail.Count;//数量合计
sumDetail.CardMoney = sumDetail.CardMoney - cardRefundDetail.Money;//金额相减
}
}
sumList.Add(sumDetail);
}
//如果明细里没有01支付方式,需要添加
HandOverDetail detailEntity = sumList.FirstOrDefault(x => "01".Equals(x.PayModeNo));
if (detailEntity == null)
{
detailEntity = new HandOverDetail();
var payMode = OrderUtils.GetPayMode("01");
detailEntity.PayModeNo = "01";
if (payMode != null)
{
detailEntity.PayModeName = payMode.Name;
}
else
{
detailEntity.PayModeName = "人民币";
}
detailEntity.Count = 0;
detailEntity.Money = 0.00M;
detailEntity.CardCount = 0;
detailEntity.CardMoney = 0.00M;
sumList.Add(detailEntity);
}
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return sumList;
}
public void saveHandOver(HandOverTicket entity)
{
try
{
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
using (var transaction = db.GetTransaction())
{
// 保存主单数据
db.Save<HandOverTicket>(entity);
// 保存支付汇总
List<HandOverDetail> detail = entity.Detail;
if (detail != null && detail.Count > 0)
{
foreach (HandOverDetail detailEntity in detail)
{
db.Save<HandOverDetail>(detailEntity);
}
}
// 保存盘点数据 (茶饮上专用,暂时不做)
// 保存交班支付方式明细
List<HandOverPay> pay = entity.Pay;
if (pay != null && pay.Count > 0)
{
foreach (HandOverPay handOverPay in pay)
{
db.Save<HandOverPay>(handOverPay);
}
}
// 交班成功更新登陆状态
string updateSql = "update pos_business_plan_log set status =1, shiftTime ='{0}',isLogin =0 where tenantId = '{1}' and storeId = '{2}' and workerId ='{3}' and posNo = '{4}' and no='{5}' ";
string sql = string.Format(updateSql, entity.DatetimeShift, entity.TenantId, entity.StoreId, entity.WorkId, entity.PosNo, entity.ShiftNo);
db.Execute(sql);
transaction.Complete();
}
}
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
}
public void saveHandOverObject(UploadHandoverObject entity)
{
try
{
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
using (var transaction = db.GetTransaction())
{
// 保存要上传的数据
db.Save<UploadHandoverObject>(entity);
transaction.Complete();
}
}
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
}
private void OnCancelTouchClick(object sender, Component.TouchEventArgs e)
{
OnCloseTouchClick(sender, e);
}
private void OnOkTouchClick(object sender, Component.TouchEventArgs e)
{
if (Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_ISVERIFICATIONORDER))
{
int _count = 0;
//核销提示
using (var db = Global.Instance.OpenDataBase)
{
using (var transaction = db.GetTransaction())
{
string querySql = "select * from pos_saoma_pay_ticket where payStatus ='{0}'";
querySql = string.Format(querySql, 0);
_count = db.Query<SaomaPayTicket>(querySql).Count();
}
}
if (_count > 0)
{
MDialogForm dialog = new MDialogForm("提醒", "您有未核销订单,是否继续交班!", MessageBoxIcon.Warning, MessageBoxButtons.OKCancel);
if (DialogResult.OK != dialog.ShowDialog())
{
return;
}
}
}
if (handOverTicket != null)
{
decimal handsMoney = 0.00M;
decimal difMoney = 0.00M;
string shiftNo = OrderUtils.Instance.GenerateShiftNo();
handOverTicket.Id = IdWorkerUtils.Instance.NextId();
handOverTicket.No = shiftNo;
handOverTicket.Memo = string.Format("员工:{0},{1}交班单", handOverTicket.WorkName, handOverTicket.ShiftNo);
handOverTicket.ShiftNo = Global.Instance.BusinessPlanLog.No;
if (handOverTicket.Detail != null)
{
foreach (HandOverDetail handOverDetail in handOverTicket.Detail)
{
handOverDetail.Id = IdWorkerUtils.Instance.NextId();
handOverDetail.TenantId = handOverTicket.TenantId;
handOverDetail.BusNo = handOverTicket.No;
handOverDetail.PosNo = Global.Instance.Authc.PosNo;
handOverDetail.DeviceIp = DeviceUtils.Instance.IPAddress;
handOverDetail.DeviceMac = DeviceUtils.Instance.MacAddress;
handOverDetail.DeviceName = DeviceUtils.Instance.ComputerName;
handOverDetail.HandsMoney = handOverDetail.SumMoney;
if ("01".Equals(handOverDetail.PayModeNo))
{
handsMoney = handOverDetail.SumMoney + handOverTicket.Inmoney - handOverTicket.Outmoney;
//人民币金额计算方式
handOverDetail.HandsMoney = handsMoney;
difMoney = 0.00M;
}
handOverDetail.StoreId = handOverTicket.StoreId;
handOverDetail.TicketId = handOverTicket.Id;
}
}
if (handOverTicket.Pay != null)
{
foreach (HandOverPay handOverPay in handOverTicket.Pay)
{
handOverPay.Id = IdWorkerUtils.Instance.NextId();
handOverPay.TenantId = handOverTicket.TenantId;
handOverPay.BusNo = handOverTicket.No;
handOverPay.PosNo = Global.Instance.Authc.PosNo;
handOverPay.DeviceIp = DeviceUtils.Instance.IPAddress;
handOverPay.DeviceMac = DeviceUtils.Instance.MacAddress;
handOverPay.DeviceName = DeviceUtils.Instance.ComputerName;
handOverPay.StoreId = handOverTicket.StoreId;
handOverPay.TicketId = handOverTicket.Id;
}
}
saveHandOver(handOverTicket);
var uploadObject = new UploadHandoverObject();
uploadObject.Id = IdWorkerUtils.Instance.NextId();
uploadObject.TenantId = this.handOverTicket.TenantId;
uploadObject.TradeNo = this.handOverTicket.No;
uploadObject.SyncStatus = 0;
uploadObject.HandOverTicket = this.handOverTicket;
uploadObject.PrintStatus = HandOverPrintStatus.WAIT;
uploadObject.UploadErrors = 0;
uploadObject.PrintTimes = 0;
saveHandOverObject(uploadObject);
//有要上传的数据
LOGGER.Info("有需要上传的交班数据,isHaveUpLoadShift=true");
Global.isHaveUpLoadShift = true;
//交班打印
this.ShowToastNotify(this, "开始打印");
//构建收银小票模版参数
handOverTicket.PrintType = "";
handOverTicket.handMoney = handsMoney;//手工金额
handOverTicket.diffMoney = difMoney;//差异金额
bool ShiftPrint = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_SHIFPRINT, false);
var vars = ShiftHelper.BuilderTicketVariable(handOverTicket, ShiftPrint, false);
Tuple<bool, string> result = ShiftHelper.PrinterTicket("食堂交班", vars, true, false);
this.ShowToastNotify(this, string.Format("{0}", result.Item2));
//是否交班
Global.isHandOver = false;
//关闭当前秤
MsgEvent.Send(Constant.CURRENTSTEELYARD_STATUS_CHANGE, "close");
//两秒退出系统
System.Threading.Thread.Sleep(2000);
OnCloseTouchClick(sender, e);
//交班后重启收银程序
Global.Instance.Restart = true;
if (this.CefForm)
{
this.Close();
}
else
{
Application.ExitThread();
}
}
}
}
}