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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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