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.

827 lines
28 KiB
C#

9 months ago
using DevComponents.DotNetBar;
using POSV.Entity;
using POSV.MessageEvent;
using POSV.Proxy.ThirdPartyOrder;
using POSV.ShoppingCart;
using POSV.ThirdPartyOrderData;
using POSV.Utils;
using POSV.WeiXin;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace POSV.JwWeiXinOrder
{
public partial class JwWeiXinOrderFrom : BusinessForm
{
public JwWeiXinOrderFrom()
{
InitializeComponent();
}
private JuWeiAppOrderProxy _juWeiAppOrderProxy = new JuWeiAppOrderProxy();
/// <summary>
/// 历史订单
/// </summary>
private List<ProgramHandleOrderData> handleOrderDatas = new List<ProgramHandleOrderData>();
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.pagerControlEx1.EventFormfeed += pager_Click;
//注册接单通知事件
MsgEvent.RemoveListener(Constant.JW_WEIXIN_UI_UPDATA, this.OrderUIEventNotify);
MsgEvent.Receive(Constant.JW_WEIXIN_UI_UPDATA, this.OrderUIEventNotify);
Task.Factory.StartNew(() =>
{
this.Invoke((EventHandler)delegate
{
//加载门店信息
LoadShopInfo();
//加载待处理订单
GetHandleOrder();
//加载历史订单
GetListOrder();
});
});
//切换待处理界面
SwitchoverView("待处理订单");
//zhangy 2020-02-19 Edit 暂时没有发现用途
////初始化推送事件
Proxy.Mqtt.MqttClientUtils.Instance.OnMessageReceived += Instance_OnMessageReceived;
}
protected virtual void OrderUIEventNotify(object sender, MsgEventArgs args)
{
if (this.InvokeRequired)
{
this.Invoke((EventHandler)delegate
{
//加载待处理订单
GetHandleOrder();
});
}
}
private void Instance_OnMessageReceived(object sender, Proxy.Mqtt.MessageEventArgs e){}
private ProgramStoreDetailData _programStoreDetailData = null;
/// <summary>
/// 加载门店信息
/// </summary>
private void LoadShopInfo()
{
var _data = _juWeiAppOrderProxy.GetShopInfo();
if (!_data.Item1)
{
this.ShowToastNotify(this, "获取门店信息失败!");
return;
}
this._programStoreDetailData = _data.Item3;
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.WEIXIN_CONFIRM_PARAMETER, false);
this.lblStoreName.Text = this._programStoreDetailData.Storename;
this.lblIsOpen.Text = this._programStoreDetailData.Isopen.Equals(1) ? "营业中" : "歇业中";
this.lblopenTime.Text = this._programStoreDetailData.Opentime.Replace(',', '-');
pictureBox4Open(openConfirm);
pictureBoxOpen(this.lblIsOpen.Text.Equals("营业中"));
//zhangy 2020-04-09 Add 添加自动物流配送
this.labelX3.Visible = (this._programStoreDetailData.DiscomFlag == 1);
this.pictureBox5.Visible = (this._programStoreDetailData.DiscomFlag == 1);
bool isAutoDelivery = Global.Instance.GlobalConfigBoolValue(ConfigConstant.WEIXIN_AUTO_DELIVERY_PARAMETER, false);
pictureBox5AutoDelivery(isAutoDelivery);
}
/// <summary>
/// 开启/关闭自动呼叫物流配送
/// </summary>
/// <param name="_AutoDelivery"></param>
private void pictureBox5AutoDelivery(bool _AutoDelivery)
{
if (!_AutoDelivery)
{
this.pictureBox5.Tag = 0;
this.pictureBox5.Image = global::POSV.Properties.Resources.no_2x;
}
else
{
this.pictureBox5.Tag = 1;
this.pictureBox5.Image = global::POSV.Properties.Resources.yes_2x;
}
}
/// <summary>
/// 小程序是否自动呼叫物流配送
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox5_Click(object sender, EventArgs e)
{
bool _AutoDelivery = false;
if (this.pictureBox5.Tag.ToString().Equals("1"))
{
//关闭
_AutoDelivery = false;
}
else
{
//打开
_AutoDelivery = true;
}
var config = new Config();
config.Id = IdWorkerUtils.Instance.NextId();
config.Group = ConfigConstant.DEVICE_GROUP;
config.TenantId = Global.Instance.Authc.TenantId;
config.Keys = ConfigConstant.WEIXIN_AUTO_DELIVERY_PARAMETER;
config.Values = string.Format("{0}", _AutoDelivery ? "1" : "0");
try
{
using (var db = Global.Instance.OpenDataBase)
{
using (var trans = db.GetTransaction())
{
db.Save(config);
trans.Complete();
}
}
Global.Instance.ReloadConfig(ConfigConstant.DEVICE_GROUP);
pictureBox5AutoDelivery(_AutoDelivery);
}
catch (Exception ex)
{
LOGGER.Info(ex, "小程序是否自动呼叫物流配送状态切换异常");
}
finally
{
this.ShowToastNotify(this, _AutoDelivery ? "开启自动呼叫配送成功" : "关闭自动呼叫配送成功");
}
}
private bool SetOpenStore(bool Open = true)
{
var _data = _juWeiAppOrderProxy.SetStoreStopAndOpen(Open);
if (!_data.Item1)
{
this.ShowToastNotify(this, "修改营业状态失败!");
return false;
}
return true;
}
/// <summary>
/// 开启/关闭营业
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox3_Click(object sender, EventArgs e)
{
bool _IsOpen = false;
if (this.pictureBox3.Tag.ToString().Equals("1"))
{
//关闭
_IsOpen = false;
}
else
{
//打开
_IsOpen = true;
}
if (!SetOpenStore(_IsOpen))
{
return;
}
pictureBoxOpen(_IsOpen);
LoadShopInfo();
}
/// <summary>
/// 开启/关闭营业 控件
/// </summary>
/// <param name="_IsOpen"></param>
private void pictureBoxOpen(bool _IsOpen)
{
if (!_IsOpen)
{
this.pictureBox3.Tag = 0;
this.pictureBox3.Image = global::POSV.Properties.Resources.no_2x;
}
else
{
this.pictureBox3.Tag = 1;
this.pictureBox3.Image = global::POSV.Properties.Resources.yes_2x;
}
}
/// <summary>
/// 是否自动接单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox4_Click(object sender, EventArgs e)
{
bool _IsOpen = false;
if (this.pictureBox4.Tag.ToString().Equals("1"))
{
//关闭
_IsOpen = false;
}
else
{
//打开
_IsOpen = true;
}
var config = new Config();
config.Id = IdWorkerUtils.Instance.NextId();
config.Group = ConfigConstant.DEVICE_GROUP;
config.TenantId = Global.Instance.Authc.TenantId;
config.Keys = ConfigConstant.WEIXIN_CONFIRM_PARAMETER;
config.Values = string.Format("{0}", _IsOpen ? "1" : "0");
try
{
using (var db = Global.Instance.OpenDataBase)
{
using (var trans = db.GetTransaction())
{
db.Save(config);
trans.Complete();
}
}
Global.Instance.ReloadConfig(ConfigConstant.DEVICE_GROUP);
pictureBox4Open(_IsOpen);
}
catch (Exception ex)
{
LOGGER.Info(ex,"小程序是否自动接单状态切换异常");
}
}
/// <summary>
/// 开启/关闭自动接单
/// </summary>
/// <param name="_IsOpen"></param>
private void pictureBox4Open(bool _IsOpen)
{
if (!_IsOpen)
{
this.pictureBox4.Tag = 0;
this.pictureBox4.Image = global::POSV.Properties.Resources.no_2x;
}
else
{
this.pictureBox4.Tag = 1;
this.pictureBox4.Image = global::POSV.Properties.Resources.yes_2x;
}
}
/// <summary>
/// 获取待处理订单
/// </summary>
private void GetHandleOrder()
{
var _data = _juWeiAppOrderProxy.GetOrders(true);
if (!_data.Item1)
{
this.ShowToastNotify(this, "获取待处理订单失败!");
return;
}
//if (_data.Item3.List == null)
//{
// return;
//}
//zhangy 2020-03-01 Add 释放资源避免Error creating window handle
while (tlphandleorder.Controls.Count > 0)
{
if (tlphandleorder.Controls[0] != null)
{
var ctl = tlphandleorder.Controls[0];
ctl.Dispose();
}
}
this.tlphandleorder.Controls.Clear();
if(_data.Item3.List != null && _data.Item3.List.Count >0)
{
foreach (var item in _data.Item3.List)
{
JwWeiXinOrderDetail detail = new JwWeiXinOrderDetail(item,this._programStoreDetailData);
detail.orderOperationClick += ItemBtn_Click;
this.tlphandleorder.Controls.Add(detail);
}
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgCenter.MsgEntity()
{
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
SubSubject = ModuleKeyCode..ToString(),
Operate = MsgCenter.MsgEntityOperate.,
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode., MenuTileNotifyType., string.Format("{0}", _data.Item3.List == null ? 0 : _data.Item3.List.Count))
});
}
}
/// <summary>
/// 获取历史订单
/// </summary>
private void GetListOrder(ProgramHandleOrderRequestData request = null)
{
if (request == null)
{
request = new ProgramHandleOrderRequestData();
request.Storeid = Global.Instance.Authc.StoreId;
request.Starttime = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
request.Endtime = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
}
var _data = _juWeiAppOrderProxy.GetOrders(false, request);
if (!_data.Item1)
{
this.ShowToastNotify(this, "获取待处理订单失败!");
return;
}
//zhangy 2020-03-01 Add 释放资源避免Error creating window handle
if (_data.Item3 != null && _data.Item3.List.Count > 0)
{
while (tlplistOrder.Controls.Count > 0)
{
if (tlplistOrder.Controls[0] != null)
{
var ctl = tlplistOrder.Controls[0];
ctl.Dispose();
}
}
this.tlplistOrder.Controls.Clear();
this.handleOrderDatas = _data.Item3.List;
pagerControlEx1.PageCount = _data.Item3.PageCount;
pagerControlEx1.PageNumber = _data.Item3.PageNumber;
pagerControlEx1.PageSize = _data.Item3.PageSize;
foreach (var item in _data.Item3.List)
{
JwWeiXinOrderDetail detail = new JwWeiXinOrderDetail(item, this._programStoreDetailData);
detail.orderOperationClick += ItemBtn_Click;
this.tlplistOrder.Controls.Add(detail);
}
this.labelX13.Text = string.Format("共 {0} 条数据", _data.Item3.TotalCount);
}
}
private void ItemBtn_Click(JwWeiXinOrderDetail orderDetail, ProgramHandleOrderData programHandleOrderData, string type)
{
Tuple<bool, string, ProgramOrderConfirmData> tuple = null;
switch (type)
{
case "接单":
tuple = _juWeiAppOrderProxy.SetOrderStatus(ProgramOrderOperationType.Confirm, programHandleOrderData.No);
break;
case "拒单":
tuple = _juWeiAppOrderProxy.SetOrderStatus(ProgramOrderOperationType.Refuse, programHandleOrderData.No);
break;
case "同意退单":
tuple = _juWeiAppOrderProxy.SetOrderStatus(ProgramOrderOperationType.Refund, programHandleOrderData.No);
break;
case "拒绝退单":
tuple = _juWeiAppOrderProxy.SetOrderStatus(ProgramOrderOperationType.NotRefund, programHandleOrderData.No);
break;
case "配送信息":
try
{
//配送状态(0已下单1骑手接单2骑手已取餐3骑手已送达4配送取消)
switch (programHandleOrderData.Deliverstatus)
{
case 0:
{
//订单推送给配送平台
var _dispatch = _juWeiAppOrderProxy.Program_Order_Dispatch_Sync(Global.Instance.Authc.StoreId, programHandleOrderData.No);
this.ShowToastNotify(this, "[" + _dispatch.Item2 + "]");
}
break;
default:
{
var _delivery = _juWeiAppOrderProxy.Program_Order_Delivery_Query(Global.Instance.Authc.StoreId, programHandleOrderData.No);
//zhangy 2020-03-26 Add 获取配送状态
if (_delivery.Item1)
{
var _data = _delivery.Item3.Data;
//物流没有确认
if (_data.DeliverStatus == -1)
{
}
this.ShowToastNotify(this, "[" + _data.StatusDesc + "," + _data.DeliverStatusDesc + "]");
}
else
{
this.ShowToastNotify(this, "[" + _delivery.Item2 + "]");
}
}
break;
}
}
catch (Exception ex)
{
LOGGER.Info(ex, "小程序订单获取配送信息异常");
this.ShowToastNotify(this, "暂时无法获取配送信息!");
}
return;
case "补打":
try
{
var _order = _juWeiAppOrderProxy.GetOrder(programHandleOrderData.No);
//zhangy 2020-03-01 Add 添加以下代码,替换原来的处理方式
if (_order.Item1)
{
this.ShowToastNotify(this, "开始打印!");
var tmpOrder = JuWeiAppOrderProxy.getOrderLocalJuWeiOrder(_order.Item3);
JuWeiAppOrderProxy.PrintOrder(tmpOrder, true);
#region subin 20230916 小程序分账.补打的同时将分账信息保存
LOGGER.Info("补打,小程序分账。");
//JuWeiAppOrderProxy.DoSplitOrderBefore(tmpOrder);
//Task.Factory.StartNew(() =>
//{
// SplitPayUtils.Instance.SaveSplitPayInfo(tmpOrder);
//});
#endregion
}
else
{
this.ShowToastNotify(this, "[" + type + "]订单操作异常:[" + tuple.Item2 + "]");
}
}
catch (Exception ex)
{
LOGGER.Info(ex, "小程序订单补打异常");
this.ShowToastNotify(this, "补打印异常!");
}
//zhangy 2020-03-01 Edit 补打结束后,终止向下运行。
return;
default:
break;
}
if (!tuple.Item1)
{
this.ShowToastNotify(this, tuple.Item2);
return;
}
try
{
var _order = _juWeiAppOrderProxy.GetOrder(programHandleOrderData.No);
//zhangy 2020-03-01 Add 添加以下代码,替换原来的处理方式
if (_order.Item1)
{
//线上订单转为本地订单
var _orderoj = JuWeiAppOrderProxy.getOrderLocalJuWeiOrder(_order.Item3);
if (type.Equals("接单"))
{
bool isExists = false;
using (var _db = Global.Instance.OpenDataBase)
{
var _sql = string.Format("select * from pos_order where tradeNo = '{0}'", _order.Item3.No);
var _oo = _db.Query<OrderObject>(_sql);
if (_oo != null && _oo.Count() > 0)
{
isExists = true;
}
}
if (!isExists)
{
this.ShowToastNotify(this, "接单成功!");
var saveResult = _juWeiAppOrderProxy.InsertOrder(_orderoj);
if (!saveResult.Item1)
{
LOGGER.Error("订单保存失败:" + JsonUtils.Serialize(_orderoj));
}
this.ShowToastNotify(this, "开始打印!");
JuWeiAppOrderProxy.PrintOrder(_orderoj);
#region subin 20230916 订单保存成功后处理分账明细
LOGGER.Info("巨为小程序自动接单,数据保存成功,开始保存分账明细....");
//JuWeiAppOrderProxy.DoSplitOrder(_orderoj);
//Task.Factory.StartNew(() =>
//{
// SplitPayUtils.Instance.SaveSplitPayInfo(_orderoj);
//});
#endregion
}
else
{
this.ShowToastNotify(this, "本地已经存在订单<"+ _orderoj.TradeNo+ ">");
}
//this.ShowToastNotify(this, "接单成功!");
//var saveResult = _juWeiAppOrderProxy.InsertOrder(_orderoj);
//if (!saveResult.Item1)
//{
// LOGGER.Error("订单保存失败:" + JsonUtils.Serialize(_orderoj));
//}
//this.ShowToastNotify(this, "开始打印!");
//JuWeiAppOrderProxy.PrintOrder(_orderoj);
}
if (type.Equals("同意退单"))
{
var _data = JuWeiAppOrderProxy.DoRefund(_orderoj.TradeNo);
#region subin 20230916 小程序分账.退单,小程序分账不需要处理,本地保存订单时已进行分账信息保存业务
#endregion
this.ShowToastNotify(this, _data.Item2);
}
}
else
{
this.ShowToastNotify(this, "[" + type + "]订单操作异常:[" + tuple.Item2 + "]");
}
//zhangy 2020-03-01 Edit 注释以下代码
//if (_order == null)
//{
// this.ShowToastNotify(this, type + "请求订单异常!" + tuple.Item2);
//}
//var _orderoj = JuWeiAppOrderProxy.getOrderLocalJuWeiOrder(_order.Item3);
//if (type.Equals("接单"))
//{
// this.ShowToastNotify(this, "开始打印!");
// _juWeiAppOrderProxy.InsertOrder(_orderoj);
// JuWeiAppOrderProxy.PrintOrder(_orderoj);
//}
//if (type.Equals("同意退单"))
//{
// var _data = JuWeiAppOrderProxy.DoRefund(_orderoj.TradeNo);
// this.ShowToastNotify(this, _data.Item2);
//}
}
catch (Exception ex)
{
LOGGER.Info(ex, type + "操作发生异常");
this.ShowToastNotify(this, "打印异常!");
}
finally
{
//加载待处理订单
GetHandleOrder();
//加载历史订单
GetListOrder();
}
}
private void btn_close(object sender, EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Close();
}
this.Close();
}
private void lbl_Click(object sender, EventArgs e)
{
var _lbl = sender as DevComponents.DotNetBar.LabelX;
if (_lbl == null)
{
return;
}
var _con = this.panelEx6.Controls;
foreach (var item in _con)
{
var _l = item as DevComponents.DotNetBar.LabelX;
if (_l == null)
{
continue;
}
_l.Tag = 0;
_l.ForeColor = Color.Black;
}
_lbl.ForeColor = Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(199)))), ((int)(((byte)(186)))));
this.SwitchoverView(_lbl.Text);
}
private void OrderOperation(ProgramOrderOperationType operationType, string busNo)
{
var _data = _juWeiAppOrderProxy.SetOrderStatus(operationType, busNo);
if (!_data.Item1)
{
this.ShowToastNotify(this, "订单操作失败!");
return;
}
}
private void SwitchoverView(string name)
{
if (name.Equals("待处理订单"))
{
this.tlphandleorder.Visible = true;
this.tlplistOrder.Visible = false;
this.tlphandleorder.Dock = DockStyle.Fill;
this.labelX13.Visible = false;
this.pagerControlEx1.Visible = false;
this.dateInputPicker.Visible = false;
this.ButtonOk.Visible = false;
}
else
{
this.tlphandleorder.Visible = false;
this.tlplistOrder.Visible = true;
this.tlplistOrder.Dock = DockStyle.Fill;
this.labelX13.Visible = true;
this.pagerControlEx1.Visible = true;
this.dateInputPicker.Visible = true;
this.ButtonOk.Visible = true;
}
}
private void touchButtonX2_Click(object sender, EventArgs e)
{
var _data = _juWeiAppOrderProxy.ReplacementOrder(handleOrderDatas);
if (_data.Item1)
{
this.ShowToastNotify(this, _data.Item3);
}
else
{
this.ShowToastNotify(this, _data.Item2);
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Close();
}
this.Close();
}
private void pager_Click(object sender, EventArgs e)
{
ProgramHandleOrderRequestData request = new ProgramHandleOrderRequestData();
request.Storeid = Global.Instance.Authc.StoreId;
request.Pagesize = 5;
request.Starttime = this.dateInputPicker.Text + " 00:00:00";
request.Endtime = this.dateInputPicker.Text + " 23:59:59";
request.Pagenumber = pagerControlEx1.PageNumber;
GetListOrder(request);
}
private void tlphandleorder_Paint(object sender, PaintEventArgs e)
{
var _list = sender as TableLayoutPanel;
if (_list == null)
{
return;
}
if (_list.Controls.Count == 0)
{
e.Graphics.DrawString("无数据", new Font("微软雅黑", 20F), new SolidBrush(Color.Red), (e.ClipRectangle.Size.Width / 2) - 20, (e.ClipRectangle.Size.Height / 2) - 20);
}
}
private void ButtonOk_Click(object sender, EventArgs e)
{
var button = sender as ButtonX;
try
{
button.Enabled = false;
ProgramHandleOrderRequestData request = new ProgramHandleOrderRequestData();
request.Storeid = Global.Instance.Authc.StoreId;
request.Pagesize = 5;
request.Starttime = this.dateInputPicker.Text + " 00:00:00";
request.Endtime = this.dateInputPicker.Text + " 23:59:59";
request.Pagenumber = 1;
GetListOrder(request);
}
finally
{
button.Enabled = true;
}
}
private void btn_product(object sender, EventArgs e)
{
var form = Application.OpenForms["WeixinMiniProgramForm"];
if (form == null)
{
form = new WeixinProgramForm();
}
form.WindowState = FormWindowState.Maximized;
form.BringToFront();
form.Show();
}
}
}