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(); /// /// 历史订单 /// private List handleOrderDatas = new List(); 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; /// /// 加载门店信息 /// 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); } /// /// 开启/关闭自动呼叫物流配送 /// /// 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; } } /// /// 小程序是否自动呼叫物流配送 /// /// /// 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; } /// /// 开启/关闭营业 /// /// /// 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(); } /// /// 开启/关闭营业 控件 /// /// 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; } } /// /// 是否自动接单 /// /// /// 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,"小程序是否自动接单状态切换异常"); } } /// /// 开启/关闭自动接单 /// /// 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; } } /// /// 获取待处理订单 /// 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.Format("{0}", _data.Item3.List == null ? 0 : _data.Item3.List.Count)) }); } } /// /// 获取历史订单 /// 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 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(_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(); } } }