|
|
|
|
using DevComponents.DotNetBar;
|
|
|
|
|
using DevComponents.DotNetBar.Controls;
|
|
|
|
|
using NLog;
|
|
|
|
|
using POSV.Card;
|
|
|
|
|
using POSV.Component;
|
|
|
|
|
using POSV.Entity;
|
|
|
|
|
using POSV.Helper;
|
|
|
|
|
using POSV.MessageEvent;
|
|
|
|
|
using POSV.MsgCenter;
|
|
|
|
|
using POSV.OtherWaiMai;
|
|
|
|
|
using POSV.ServiceCenter;
|
|
|
|
|
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.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace POSV.WaiMai
|
|
|
|
|
{
|
|
|
|
|
public partial class MeituanForm : BusinessForm
|
|
|
|
|
{
|
|
|
|
|
private int orderType = 0;//订单类型
|
|
|
|
|
private int SelectType = 0;//待处理订单
|
|
|
|
|
|
|
|
|
|
private bool generalQuerying = false;//历史订单查询锁
|
|
|
|
|
private bool handleQuerying = false;//待处理订单查询锁
|
|
|
|
|
|
|
|
|
|
private bool isBudanFlag = false;//是否正在进行补单操作
|
|
|
|
|
|
|
|
|
|
private int ConfirmType = 0;
|
|
|
|
|
|
|
|
|
|
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
|
|
|
|
public MeituanForm()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
this.dateInputPicker.Value = DateTime.Now.Date;
|
|
|
|
|
//是否开启自动接单
|
|
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.MEITUAN_CONFIRM_PARAMETER, false);
|
|
|
|
|
if (openConfirm)
|
|
|
|
|
{
|
|
|
|
|
ConfirmType = 1;
|
|
|
|
|
this.radioButtonOpen.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ConfirmType = 0;
|
|
|
|
|
this.radioButtonClose.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
|
|
|
|
this.checkBoxX0.Checked = true;
|
|
|
|
|
//第一步加载门店信息
|
|
|
|
|
QueryMeiTuanPoiInfo();
|
|
|
|
|
//第二步,获取待处理订单
|
|
|
|
|
Proxy.Mqtt.MqttClientUtils.Instance.OnMessageReceived -= Instance_OnMessageReceived;
|
|
|
|
|
Proxy.Mqtt.MqttClientUtils.Instance.OnMessageReceived += Instance_OnMessageReceived;
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Instance_OnMessageReceived(object sender, Proxy.Mqtt.MessageEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string message = e.Message;
|
|
|
|
|
int type = e.Type;
|
|
|
|
|
if (type == 0)
|
|
|
|
|
{
|
|
|
|
|
Dictionary<string, string> messageMap = JsonUtils.Deserialize<Dictionary<string, string>>(message);
|
|
|
|
|
if (messageMap.ContainsKey("meituan") && !"".Equals(messageMap["meituan"]))
|
|
|
|
|
{
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnControlBoxCloseClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnControlBoxMinClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.WindowState = FormWindowState.Minimized;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_exit_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnCloseTouchClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//先关闭父窗体
|
|
|
|
|
if (this.Owner != null)
|
|
|
|
|
{
|
|
|
|
|
this.Owner.Close();
|
|
|
|
|
}
|
|
|
|
|
//再关闭当前窗体
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_close(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查询全部订单
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_query(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as ButtonX;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
obj.Enabled = false;
|
|
|
|
|
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
obj.Enabled = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 门店门店信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void QueryMeiTuanPoiInfo()
|
|
|
|
|
{
|
|
|
|
|
Task.Factory.StartNew(() =>
|
|
|
|
|
{
|
|
|
|
|
MeiTuanPoiInfoRequest request = new MeiTuanPoiInfoRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanPoiInfo(request);
|
|
|
|
|
if (response != null && response.Item1)
|
|
|
|
|
{
|
|
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
|
|
this.Invoke(new Action(() =>
|
|
|
|
|
{
|
|
|
|
|
var responseMessage = response.Item3;
|
|
|
|
|
if (responseMessage != null && responseMessage.Data != null)
|
|
|
|
|
{
|
|
|
|
|
MeiTuanPoiInfoResponse PoiInfo = responseMessage.Data;
|
|
|
|
|
this.StoreNameLabelX.Text = PoiInfo.Name;//门店名称
|
|
|
|
|
switch (PoiInfo.IsOpen)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
this.isOpenLabelX.Text = "未上线";
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
this.isOpenLabelX.Text = "可配送";
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
this.isOpenLabelX.Text = "休息中";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
this.isOpenLabelX.Text = "未营业";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
this.openTimeLabelX.Text = PoiInfo.OpenTime;
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DoQuery(int pageNum, int pageSize)
|
|
|
|
|
{
|
|
|
|
|
if (generalQuerying)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "查询中.....");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
generalQuerying = true;
|
|
|
|
|
|
|
|
|
|
//zhangy 2020-03-01 Add 释放资源,避免Error creating window handle
|
|
|
|
|
while (tableLayoutPanel2.Controls.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
if (tableLayoutPanel2.Controls[0] != null)
|
|
|
|
|
{
|
|
|
|
|
var ctl = tableLayoutPanel2.Controls[0];
|
|
|
|
|
ctl.Dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.tableLayoutPanel2.Controls.Clear();
|
|
|
|
|
Task.Factory.StartNew(() =>
|
|
|
|
|
{
|
|
|
|
|
MeiTuanOrderListRequest request = new MeiTuanOrderListRequest();
|
|
|
|
|
string orderDate = this.dateInputPicker.Text;
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.PageNumber = pageNum;
|
|
|
|
|
request.PageSize = pageSize;
|
|
|
|
|
request.OrderDate = orderDate;
|
|
|
|
|
request.Type = orderType;
|
|
|
|
|
|
|
|
|
|
var response = OtherWaiMaiUtils.QueryMeiTuanOrder(request);
|
|
|
|
|
if (response != null && response.Item1)
|
|
|
|
|
{
|
|
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
|
|
this.Invoke(new Action(() =>
|
|
|
|
|
{
|
|
|
|
|
List<MeiTuanItem> detailList = new List<MeiTuanItem>();
|
|
|
|
|
int handCount = 0;
|
|
|
|
|
foreach (MeiTuanOrderListResponse order in response.Item3.List)
|
|
|
|
|
{
|
|
|
|
|
if (order.Status == 1 || order.Status == 2 || order.Status == 3)
|
|
|
|
|
{
|
|
|
|
|
handCount = handCount + 1;
|
|
|
|
|
}
|
|
|
|
|
var item = new MeiTuanItem(order);
|
|
|
|
|
item.OnConfirm += Item_OnConfirm;
|
|
|
|
|
item.OnCancel += Item_OnCancel;
|
|
|
|
|
item.OnRefundAgree += Item_OnRefundAgree;
|
|
|
|
|
item.OnRefundReject += Item_OnRefundReject;
|
|
|
|
|
item.OnOrderPrint += Item_OnPrint;
|
|
|
|
|
item.OnOrderBuDan += Item_OnBuDan;
|
|
|
|
|
detailList.Add(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
|
|
//更新控件
|
|
|
|
|
sendNewView(handCount);
|
|
|
|
|
if (detailList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
this.tableLayoutPanel2.Controls.AddRange(detailList.ToArray());
|
|
|
|
|
//滚动至顶部
|
|
|
|
|
this.tableLayoutPanel2.AutoScrollPosition = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
this.pagerControl2.TotalPage = response.Item3.PageCount;
|
|
|
|
|
this.pagerControl2.CurrentPage = response.Item3.PageNumber;
|
|
|
|
|
this.pagerControl2.RecordCount = response.Item3.TotalCount;
|
|
|
|
|
this.pagerControl2.RowsPerPage = response.Item3.PageSize;
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
generalQuerying = false;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 订单打印
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void Item_OnPrint(object sender, MeiTuanOrderEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Task.Factory.StartNew(() =>
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string orderId = e.OrderId;
|
|
|
|
|
MeiTuanOrderRequest request = new MeiTuanOrderRequest();
|
|
|
|
|
string orderDate = this.dateInputPicker.Text;
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.OrderId = orderId;
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanOrder(request);
|
|
|
|
|
if (response != null && response.Item1)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
this.ShowToastNotify(this, "开始打印");
|
|
|
|
|
//构建收银小票模版参数
|
|
|
|
|
var vars = WaiMaiHelper.BuilderMeiTuanVariable(response.Item3.Data.PoiName, response.Item3.Data, true);
|
|
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("美团外卖", vars);
|
|
|
|
|
this.ShowToastNotify(this, string.Format("{0}", result.Item2));
|
|
|
|
|
//组装本地数据
|
|
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalMeiTuan(response.Item3.Data);
|
|
|
|
|
//打印标签
|
|
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
|
|
//启用外卖商品绑定厨显方案
|
|
|
|
|
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
|
|
|
|
|
//启用外卖商品绑定厨打方案
|
|
|
|
|
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
|
|
if (planKit)
|
|
|
|
|
{
|
|
|
|
|
//执行厨打
|
|
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
|
|
logger.Info("美团外卖厨打成功");
|
|
|
|
|
//执行出品
|
|
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
|
|
logger.Info("美团外卖出品成功");
|
|
|
|
|
}
|
|
|
|
|
if (planKds)
|
|
|
|
|
{
|
|
|
|
|
//通知厨显
|
|
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
|
|
logger.Info("美团外卖厨显成功");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
logger.Info("外卖订单打印异常:" + ex.Message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 订单拒绝退单
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void Item_OnRefundReject(object sender, MeiTuanOrderEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string orderId = e.OrderId;
|
|
|
|
|
MeiTuanOrderRefundDisagreeRequest request = new MeiTuanOrderRefundDisagreeRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.OrderId = orderId;
|
|
|
|
|
request.Reason = "您订购的饭菜已出餐,不能退款";
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanOrderRefundReject(request);
|
|
|
|
|
if (response != null)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Info("美团外卖订单拒绝退单:" + response.Item2);
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
switch (SelectType)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 订单接受退单
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void Item_OnRefundAgree(object sender, MeiTuanOrderEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string orderId = e.OrderId;
|
|
|
|
|
MeiTuanOrderRefundAgreeRequest request = new MeiTuanOrderRefundAgreeRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.OrderId = orderId;
|
|
|
|
|
request.Reason = "已同意退款请求,谢谢您的光临";
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanOrderRefundAgree(request);
|
|
|
|
|
if (response != null)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Info("美团外卖订单同意退单:" + response.Item2);
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
//退单业务处理,退单处理退本地单
|
|
|
|
|
this.DoRefund("4" + orderId);
|
|
|
|
|
switch (SelectType)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Tuple<bool, string> DoRefund(string tradeNo)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo(tradeNo);
|
|
|
|
|
if (_OrderObject != null)
|
|
|
|
|
{
|
|
|
|
|
if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo))
|
|
|
|
|
{
|
|
|
|
|
return new Tuple<bool, string>(false, "订单已完全退单");
|
|
|
|
|
}
|
|
|
|
|
//生成新单
|
|
|
|
|
OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject);
|
|
|
|
|
string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
//=========更新原单内容
|
|
|
|
|
//录入原单号
|
|
|
|
|
_BackOrderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
//操作员工号
|
|
|
|
|
_BackOrderObject.WorkerNo = Global.Instance.Worker.No;
|
|
|
|
|
//操作员名称
|
|
|
|
|
_BackOrderObject.WorkerName = Global.Instance.Worker.Name;
|
|
|
|
|
_BackOrderObject.SaleDate = finishDate;
|
|
|
|
|
//班次名称
|
|
|
|
|
_BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;
|
|
|
|
|
//班次编号
|
|
|
|
|
_BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
|
|
//订单标识为 新建状态
|
|
|
|
|
_BackOrderObject.OrderStatus = OrderStatus.已退单;
|
|
|
|
|
//订单创建时间
|
|
|
|
|
_BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
//订单创建人
|
|
|
|
|
_BackOrderObject.CreateUser = Global.Instance.Worker.Name;
|
|
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
|
|
//星期
|
|
|
|
|
_BackOrderObject.Weeker = weeker;
|
|
|
|
|
//天气
|
|
|
|
|
_BackOrderObject.Weather = string.Empty;
|
|
|
|
|
_BackOrderObject.ObjectId = ObjectId.GenerateNewStringId();
|
|
|
|
|
_BackOrderObject.TradeNo = _BackOrderObject.OrderType.ToString() + OrderUtils.Instance.GenerateTicketNo();
|
|
|
|
|
_BackOrderObject.FinishDate = finishDate;
|
|
|
|
|
_BackOrderObject.Amount = 0 - _OrderObject.Amount;
|
|
|
|
|
_BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount;
|
|
|
|
|
_BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount;
|
|
|
|
|
_BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount;
|
|
|
|
|
_BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount;
|
|
|
|
|
_BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount;
|
|
|
|
|
_BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount;
|
|
|
|
|
_BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount;
|
|
|
|
|
_BackOrderObject.SyncStatus = 0;
|
|
|
|
|
_BackOrderObject.PrintStatus = 0;
|
|
|
|
|
_BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint;
|
|
|
|
|
_BackOrderObject.UploadStatus = 0;
|
|
|
|
|
_BackOrderObject.UploadMessage = "";
|
|
|
|
|
_BackOrderObject.TicketId = "";
|
|
|
|
|
_BackOrderObject.OrgTradeNo = _OrderObject.TradeNo;
|
|
|
|
|
//整单优惠
|
|
|
|
|
foreach (PromotionOrder promotion in _BackOrderObject.Promotions)
|
|
|
|
|
{
|
|
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
|
|
promotion.FinishDate = finishDate;
|
|
|
|
|
}
|
|
|
|
|
//====== 更新明细内容
|
|
|
|
|
foreach (OrderItem item in _BackOrderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
item.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
item.OrderId = _BackOrderObject.Id;
|
|
|
|
|
item.TradeNo = _BackOrderObject.TradeNo;
|
|
|
|
|
//单品优惠
|
|
|
|
|
foreach (PromotionItem promotion in item.Promotions)
|
|
|
|
|
{
|
|
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
|
|
promotion.ItemId = item.Id;
|
|
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
|
|
promotion.FinishDate = finishDate;
|
|
|
|
|
}
|
|
|
|
|
//做法信息
|
|
|
|
|
foreach (FlavorItem flavor in item.Flavors)
|
|
|
|
|
{
|
|
|
|
|
flavor.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
flavor.OrderId = _BackOrderObject.Id;
|
|
|
|
|
flavor.ItemId = item.Id;
|
|
|
|
|
flavor.TradeNo = _BackOrderObject.TradeNo;
|
|
|
|
|
flavor.RefundQuantity = flavor.Quantity;
|
|
|
|
|
flavor.Amount = 0 - flavor.Amount;
|
|
|
|
|
flavor.Quantity = 0;
|
|
|
|
|
flavor.DiscountAmount = 0 - flavor.DiscountAmount;
|
|
|
|
|
flavor.FinishDate = finishDate;
|
|
|
|
|
flavor.isBackTicket = true;
|
|
|
|
|
flavor.isWaiMaiTicket = true;
|
|
|
|
|
}
|
|
|
|
|
item.RefundQuantity = item.Quantity;
|
|
|
|
|
item.Quantity = 0;
|
|
|
|
|
item.Amount = 0 - item.Amount;
|
|
|
|
|
item.FlavorAmount = 0 - item.FlavorAmount;
|
|
|
|
|
item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount;
|
|
|
|
|
item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount;
|
|
|
|
|
item.TotalAmonut = 0 - item.TotalAmonut;
|
|
|
|
|
item.SuitAddPrice = 0 - item.SuitAddPrice;
|
|
|
|
|
item.SuitAmount = 0 - item.SuitAmount;
|
|
|
|
|
item.SaleDate = finishDate;
|
|
|
|
|
item.ChudaQty = 0;
|
|
|
|
|
item.ChupinQty = 0;
|
|
|
|
|
item.ChuxianQty = 0;
|
|
|
|
|
item.KdsChupinQty = 0;
|
|
|
|
|
item.FinishDate = finishDate;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//支付方式遍历
|
|
|
|
|
foreach (PayItem pay in _BackOrderObject.Pays)
|
|
|
|
|
{
|
|
|
|
|
pay.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
pay.TradeNo = _BackOrderObject.TradeNo;
|
|
|
|
|
pay.PayNo = OrderUtils.Instance.GeneratePayNo();
|
|
|
|
|
pay.OrderId = _BackOrderObject.Id;
|
|
|
|
|
pay.Amount = 0 - pay.Amount;
|
|
|
|
|
pay.PaidAmount = 0 - pay.PaidAmount;
|
|
|
|
|
pay.ChangeAmount = 0 - pay.ChangeAmount;
|
|
|
|
|
pay.PayTime = finishDate;
|
|
|
|
|
pay.FinishDate = finishDate;
|
|
|
|
|
pay.OverAmount = 0 - pay.OverAmount;
|
|
|
|
|
pay.ShiftName = _BackOrderObject.ShiftName;
|
|
|
|
|
pay.ShiftNo = _BackOrderObject.ShiftNo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject);
|
|
|
|
|
if (!isException)
|
|
|
|
|
{
|
|
|
|
|
_OrderObject.OrgTradeNo = _BackOrderObject.TradeNo;
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
using (var trans = db.GetTransaction())
|
|
|
|
|
{
|
|
|
|
|
db.Update(_OrderObject);
|
|
|
|
|
|
|
|
|
|
trans.Complete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//LOGGER.Info("开始打印");
|
|
|
|
|
//this.ShowToastNotify(this, "正在打印退款单...");
|
|
|
|
|
//开始打印
|
|
|
|
|
//_BackOrderObject.PrintType = 1;
|
|
|
|
|
//_BackOrderObject.RPrint = false;
|
|
|
|
|
//this.PrintOrderObject(_BackOrderObject, true);
|
|
|
|
|
|
|
|
|
|
return new Tuple<bool, string>(true, "退单完成");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return new Tuple<bool, string>(false, "退单保存失败!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return new Tuple<bool, string>(false, "获取订单信息异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(ex, "退单发生异常");
|
|
|
|
|
return new Tuple<bool, string>(false, "退单发生异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 订单取消
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void Item_OnCancel(object sender, MeiTuanOrderEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string orderId = e.OrderId;
|
|
|
|
|
MeiTuanOrderCancelRequest request = new MeiTuanOrderCancelRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.OrderId = orderId;
|
|
|
|
|
request.ReasonCode = "2007";
|
|
|
|
|
request.Reason = "对不起暂时无法提供服务";
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanOrderCancel(request);
|
|
|
|
|
if (response != null)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Info("美团外卖订单取消:" + response.Item2);
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
switch (SelectType)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 订单接单
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void Item_OnConfirm(object sender, MeiTuanOrderEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Info("美团外卖手动接单");
|
|
|
|
|
string orderId = e.OrderId;
|
|
|
|
|
OrderOnConfirm(orderId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 订单补单
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void Item_OnBuDan(object sender, MeiTuanOrderEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (isBudanFlag)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
isBudanFlag = true;
|
|
|
|
|
string orderId = e.OrderId;
|
|
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId);
|
|
|
|
|
//判断订单是否存在
|
|
|
|
|
if (_OrderObject == null)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//接单成功打印订单
|
|
|
|
|
MeiTuanOrderRequest request1 = new MeiTuanOrderRequest();
|
|
|
|
|
string orderDate = this.dateInputPicker.Text;
|
|
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request1.OrderId = orderId;
|
|
|
|
|
var response1 = OtherWaiMaiUtils.MeiTuanOrder(request1);
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
|
|
{
|
|
|
|
|
//组装本地数据
|
|
|
|
|
LOGGER.Info("美团外卖订单组装本地数据");
|
|
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalMeiTuan(response1.Item3.Data);
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
|
|
{
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
using (var trans = db.GetTransaction())
|
|
|
|
|
{
|
|
|
|
|
//遍历获取成本价
|
|
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
|
|
if (productSpec != null)
|
|
|
|
|
{
|
|
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
item.CostPrice = 0.00M;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//整单
|
|
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
//单品明细
|
|
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
|
|
|
|
|
|
|
if (orderObject.Items != null)
|
|
|
|
|
{
|
|
|
|
|
//单品优惠
|
|
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//添加支付汇总的必填字段
|
|
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
|
|
{
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
|
|
if (payMode == null)
|
|
|
|
|
{
|
|
|
|
|
payItem.IncomeFlag = 1;
|
|
|
|
|
payItem.OtherRateType = 0;
|
|
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//支付明细
|
|
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
|
|
|
|
//做法明细
|
|
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//8、保存耗料信息
|
|
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
|
|
foreach (var item in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
|
|
var lists = Global.Product._productList;
|
|
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
|
|
if (productExt.StockFlag == 1)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//第二步获取门店耗料
|
|
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//做法耗料
|
|
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
|
|
{
|
|
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//第二部合并耗料数量
|
|
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
|
|
string burdenProductId_temp = "";
|
|
|
|
|
string burdenSpecId_temp = "";
|
|
|
|
|
string salesUnitId_temp = "";
|
|
|
|
|
int i = 0;
|
|
|
|
|
List<Dictionary<string, Object>> result = new List<Dictionary<string, Object>>();
|
|
|
|
|
decimal salesAmount = 0.00M;
|
|
|
|
|
int listLength = temList.Count;
|
|
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
|
|
{
|
|
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
|
|
{
|
|
|
|
|
if (i != 0)
|
|
|
|
|
{
|
|
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
|
|
result.Add(typeMap);
|
|
|
|
|
//分类改变时,清除缓存
|
|
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
|
|
}
|
|
|
|
|
salesAmount = 0.00M;
|
|
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
|
|
}
|
|
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
|
|
i = i + 1;
|
|
|
|
|
if (i == listLength)
|
|
|
|
|
{
|
|
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
|
|
result.Add(typeMap);
|
|
|
|
|
//分类改变时,清除缓存
|
|
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
|
|
foreach (Dictionary<string, Object> map in result)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
|
|
list.Add(entity);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
|
|
}
|
|
|
|
|
//更新是否有订单需要上传的状态
|
|
|
|
|
LOGGER.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
|
|
LOGGER.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
|
|
trans.Complete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Thread.Sleep(100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOGGER.Info("美团外卖订单存储本地数据");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.ShowToastNotify(this, "补单成功");
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(ex, "美团补单异常");
|
|
|
|
|
this.ShowToastNotify(this, "美团补单异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "本地订单已存在,不用再补单");
|
|
|
|
|
}
|
|
|
|
|
isBudanFlag = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void OrderOnConfirm(string orderId)
|
|
|
|
|
{
|
|
|
|
|
MeiTuanOrderConfirmRequest request = new MeiTuanOrderConfirmRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.OrderId = orderId;
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanOrderConfirm(request);
|
|
|
|
|
if (response != null)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Info("美团外卖订单接单:" + response.Item2);
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//接单成功打印订单
|
|
|
|
|
MeiTuanOrderRequest request1 = new MeiTuanOrderRequest();
|
|
|
|
|
string orderDate = this.dateInputPicker.Text;
|
|
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request1.OrderId = orderId;
|
|
|
|
|
var response1 = OtherWaiMaiUtils.MeiTuanOrder(request1);
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
|
|
{
|
|
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId);
|
|
|
|
|
if (_OrderObject != null)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
LOGGER.Info("美团外卖订单已存在");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//组装本地数据
|
|
|
|
|
LOGGER.Info("美团外卖订单组装本地数据");
|
|
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalMeiTuan(response1.Item3.Data);
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
|
|
{
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
using (var trans = db.GetTransaction())
|
|
|
|
|
{
|
|
|
|
|
//遍历获取成本价
|
|
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
|
|
if (productSpec != null)
|
|
|
|
|
{
|
|
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
item.CostPrice = 0.00M;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//整单
|
|
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
|
|
|
|
|
//单品明细
|
|
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
|
|
|
|
|
|
|
if (orderObject.Items != null)
|
|
|
|
|
{
|
|
|
|
|
//单品优惠
|
|
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//添加支付汇总的必填字段
|
|
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
|
|
{
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
|
|
if (payMode == null)
|
|
|
|
|
{
|
|
|
|
|
payItem.IncomeFlag = 1;
|
|
|
|
|
payItem.OtherRateType = 0;
|
|
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//支付明细
|
|
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
|
|
|
|
//做法明细
|
|
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//8、保存耗料信息
|
|
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
|
|
foreach (var item in orderObject.Items)
|
|
|
|
|
{
|
|
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
|
|
var lists = Global.Product._productList;
|
|
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
|
|
if (productExt.StockFlag == 1)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//第二步获取门店耗料
|
|
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//做法耗料
|
|
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
|
|
{
|
|
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//第二部合并耗料数量
|
|
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
|
|
string burdenProductId_temp = "";
|
|
|
|
|
string burdenSpecId_temp = "";
|
|
|
|
|
string salesUnitId_temp = "";
|
|
|
|
|
int i = 0;
|
|
|
|
|
List<Dictionary<string, Object>> result = new List<Dictionary<string, Object>>();
|
|
|
|
|
decimal salesAmount = 0.00M;
|
|
|
|
|
int listLength = temList.Count;
|
|
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
|
|
{
|
|
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
|
|
{
|
|
|
|
|
if (i != 0)
|
|
|
|
|
{
|
|
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
|
|
result.Add(typeMap);
|
|
|
|
|
//分类改变时,清除缓存
|
|
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
|
|
}
|
|
|
|
|
salesAmount = 0.00M;
|
|
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
|
|
}
|
|
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
|
|
i = i + 1;
|
|
|
|
|
if (i == listLength)
|
|
|
|
|
{
|
|
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
|
|
result.Add(typeMap);
|
|
|
|
|
//分类改变时,清除缓存
|
|
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
|
|
foreach (Dictionary<string, Object> map in result)
|
|
|
|
|
{
|
|
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
|
|
list.Add(entity);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
|
|
}
|
|
|
|
|
//更新是否有订单需要上传的状态
|
|
|
|
|
LOGGER.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
|
|
LOGGER.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
|
|
trans.Complete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Thread.Sleep(100);
|
|
|
|
|
}
|
|
|
|
|
LOGGER.Info("美团外卖订单存储本地数据");
|
|
|
|
|
Task.Factory.StartNew(() =>
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Info("美团外卖订单打印");
|
|
|
|
|
this.ShowToastNotify(this, "开始打印");
|
|
|
|
|
//构建收银小票模版参数打印
|
|
|
|
|
var vars = WaiMaiHelper.BuilderMeiTuanVariable(response1.Item3.Data.PoiName, response1.Item3.Data, false);
|
|
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("美团外卖", vars);
|
|
|
|
|
this.ShowToastNotify(this, string.Format("{0}", result.Item2));
|
|
|
|
|
|
|
|
|
|
//打印标签
|
|
|
|
|
LOGGER.Info("美团外卖标签打印");
|
|
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
|
|
|
|
|
|
|
//执行厨打标签
|
|
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
|
|
LOGGER.Info("美团外卖执行厨打标签");
|
|
|
|
|
//启用外卖商品绑定厨显方案
|
|
|
|
|
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
|
|
|
|
|
//启用外卖商品绑定厨打方案
|
|
|
|
|
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
|
|
if (planKit)
|
|
|
|
|
{
|
|
|
|
|
//执行厨打
|
|
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
|
|
logger.Info("美团外卖厨打成功");
|
|
|
|
|
//执行出品
|
|
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
|
|
logger.Info("美团外卖出品成功");
|
|
|
|
|
}
|
|
|
|
|
if (planKds)
|
|
|
|
|
{
|
|
|
|
|
//通知厨显
|
|
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
|
|
logger.Info("美团外卖厨显成功");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(ex, "美团接单异常");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (SelectType)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 门店营业
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_openStore(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MeiTuanPoiOpenRequest request = new MeiTuanPoiOpenRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanPoiOpen(request);
|
|
|
|
|
if (response != null)
|
|
|
|
|
{
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
QueryMeiTuanPoiInfo();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 门店休息
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_closeStore(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MeiTuanPoiCloseRequest request = new MeiTuanPoiCloseRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanPoiClose(request);
|
|
|
|
|
if (response != null)
|
|
|
|
|
{
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
QueryMeiTuanPoiInfo();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_getHandOrder(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DoHandQuery();
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取待处理订单
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void DoHandQuery()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (handleQuerying)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "查询中.....");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
handleQuerying = true;
|
|
|
|
|
this.tableLayoutPanel1.Controls.Clear();
|
|
|
|
|
Task.Factory.StartNew(() =>
|
|
|
|
|
{
|
|
|
|
|
MeiTuanOrderHandleRequest request = new MeiTuanOrderHandleRequest();
|
|
|
|
|
string orderDate = this.dateInputPicker.Text;
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
var response = OtherWaiMaiUtils.QueryMeiTuanOrderHandle(request);
|
|
|
|
|
if (response != null && response.Item1)
|
|
|
|
|
{
|
|
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
|
|
this.Invoke(new Action(() =>
|
|
|
|
|
{
|
|
|
|
|
List<MeiTuanItem> detailList = new List<MeiTuanItem>();
|
|
|
|
|
foreach (MeiTuanOrderHandleResponse order in response.Item3.List)
|
|
|
|
|
{
|
|
|
|
|
var item = new MeiTuanItem(order);
|
|
|
|
|
item.OnConfirm += Item_OnConfirm;
|
|
|
|
|
item.OnCancel += Item_OnCancel;
|
|
|
|
|
item.OnRefundAgree += Item_OnRefundAgree;
|
|
|
|
|
item.OnRefundReject += Item_OnRefundReject;
|
|
|
|
|
item.OnOrderPrint += Item_OnPrint;
|
|
|
|
|
item.OnOrderBuDan += Item_OnBuDan;
|
|
|
|
|
detailList.Add(item);
|
|
|
|
|
}
|
|
|
|
|
if (this.IsDisposed || !this.IsHandleCreated) return;
|
|
|
|
|
if (detailList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
this.tableLayoutPanel1.Controls.AddRange(detailList.ToArray());
|
|
|
|
|
//滚动至顶部
|
|
|
|
|
this.tableLayoutPanel1.AutoScrollPosition = new Point(0, 0);
|
|
|
|
|
}
|
|
|
|
|
//更新控件
|
|
|
|
|
sendNewView(response.Item3.List.Count);
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
handleQuerying = false;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 待处理订单和历史订单查询切换
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void tab_onclick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as SuperTabItem;
|
|
|
|
|
var name = obj.Tag as string;
|
|
|
|
|
switch (name)
|
|
|
|
|
{
|
|
|
|
|
case "superTabItem1"://待处理订单
|
|
|
|
|
SelectType = 0;
|
|
|
|
|
break;
|
|
|
|
|
case "superTabItem2"://历史订单
|
|
|
|
|
SelectType = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnQueryPageChangeWithObject(object obj)
|
|
|
|
|
{
|
|
|
|
|
//获得当前页
|
|
|
|
|
int cur = pagerControl2.CurrentPage;
|
|
|
|
|
//获得每页显示的记录数
|
|
|
|
|
int rows = pagerControl2.RowsPerPage;
|
|
|
|
|
|
|
|
|
|
PagerControl pager = obj as PagerControl;
|
|
|
|
|
if (pager != null)
|
|
|
|
|
{
|
|
|
|
|
DoQuery(cur, rows);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 是否自动接单
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void cb_change_click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as CheckBoxX;
|
|
|
|
|
var indexT = obj.Tag as string;
|
|
|
|
|
int type = 0;
|
|
|
|
|
if ("开启".Equals(indexT) && obj.Checked)
|
|
|
|
|
{
|
|
|
|
|
ConfirmType = 1;
|
|
|
|
|
}
|
|
|
|
|
if ("关闭".Equals(indexT) && obj.Checked)
|
|
|
|
|
{
|
|
|
|
|
ConfirmType = 0;
|
|
|
|
|
}
|
|
|
|
|
var config = new Config();
|
|
|
|
|
|
|
|
|
|
config.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
config.Group = ConfigConstant.DEVICE_GROUP;
|
|
|
|
|
config.TenantId = Global.Instance.Authc.TenantId;
|
|
|
|
|
config.Keys = ConfigConstant.MEITUAN_CONFIRM_PARAMETER;
|
|
|
|
|
config.Values = string.Format("{0}", ConfirmType);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
using (var trans = db.GetTransaction())
|
|
|
|
|
{
|
|
|
|
|
db.Save(config);
|
|
|
|
|
|
|
|
|
|
trans.Complete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Global.Instance.ReloadConfig(ConfigConstant.DEVICE_GROUP);
|
|
|
|
|
if (ConfirmType == 1)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "开启自动接单");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "关闭自动接单");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
string message = "美团外卖参数更新异常";
|
|
|
|
|
LOGGER.Error(ex, message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据待处理订单的数量刷新提示
|
|
|
|
|
public void sendNewView(int orderCount)
|
|
|
|
|
{
|
|
|
|
|
//有百度外卖订单
|
|
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
|
|
{
|
|
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
|
|
SubSubject = ModuleKeyCode.美团外卖.ToString(),
|
|
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", orderCount))
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_time_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as ButtonX;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
obj.Enabled = false;
|
|
|
|
|
|
|
|
|
|
var date = obj.Tag as string;
|
|
|
|
|
switch (date)
|
|
|
|
|
{
|
|
|
|
|
case "today":
|
|
|
|
|
this.dateInputPicker.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
|
|
|
|
|
break;
|
|
|
|
|
case "yesterday":
|
|
|
|
|
this.dateInputPicker.Value = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
obj.Enabled = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbstatus_change_click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as CheckBoxX;
|
|
|
|
|
var indexT = obj.Tag as string;
|
|
|
|
|
if ("全部".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
orderType = 0;
|
|
|
|
|
}
|
|
|
|
|
if ("已取消".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
orderType = 1;
|
|
|
|
|
}
|
|
|
|
|
if ("已退单".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
orderType = 2;
|
|
|
|
|
}
|
|
|
|
|
DoQuery(1, pagerControl2.RowsPerPage);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void miniToolStrip_RefreshItems(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 美团绑定
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_bindStore(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
MeiTuanStoreSaveRequest request = new MeiTuanStoreSaveRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanStoreSave(request);
|
|
|
|
|
//成功
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
MeiTuanStoreMapUrlRequest request1 = new MeiTuanStoreMapUrlRequest();
|
|
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request1.BusinessId = "2";
|
|
|
|
|
var response1 = OtherWaiMaiUtils.MeiTuanStoreMapUrl(request1);
|
|
|
|
|
//成功
|
|
|
|
|
if (response1.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response1.Item2);
|
|
|
|
|
//打开二维码生成界面
|
|
|
|
|
var form = new WaiMaiBindForm(response1.Item3.Data.Url);
|
|
|
|
|
form.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response1.Item2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "美团绑定链接生成失败!");
|
|
|
|
|
LOGGER.Error(ex, "美团绑定链接生成失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 美团解绑
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_unbindStore(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
MeiTuanStoreMapRelaseUrlRequest request = new MeiTuanStoreMapRelaseUrlRequest();
|
|
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
|
|
request.BusinessId = "2";
|
|
|
|
|
var response = OtherWaiMaiUtils.MeiTuanStoreMapRelaseUrl(request);
|
|
|
|
|
//成功
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
//打开二维码生成界面
|
|
|
|
|
var form = new WaiMaiBindForm(response.Item3.Data.Url);
|
|
|
|
|
form.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "美团解绑链接生成失败!");
|
|
|
|
|
LOGGER.Error(ex, "美团解绑链接生成失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|