2025-03-28 09:49:56 +08:00

275 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace InvoicingTool
{
public partial class CheckBill : Form
{
QualityHelper _QualityHelper = new QualityHelper();
BackgroundWorker bgCheckBill = new BackgroundWorker();
Timer StartTimer = new Timer();
decimal _ApplyTime = 0;
DateTime? _StartTime;
string _ServerPartCode = "";
string _ShopCode = "";
string _MachineCode = "";
string _SellWorkerName = "";
string _ShopName = "";
string _ServiceUrl = "";
int _ExitTime = 5;
bool _Working = true;
public CheckBill()
{
InitializeComponent();
_StartTime = DateTime.Now;
_ServerPartCode = _QualityHelper.serverpartcode;
_ShopName = _QualityHelper.shopname;
_ShopCode = _QualityHelper.shopcode;
_MachineCode = _QualityHelper.machinecode;
_ServiceUrl = "http://" + _QualityHelper.dbip + ":" + _QualityHelper.serviceport + "/Service.asmx";
bgCheckBill.WorkerReportsProgress = true;
bgCheckBill.WorkerSupportsCancellation = true;
bgCheckBill.DoWork += BgCheckBill_DoWork;
bgCheckBill.RunWorkerCompleted += BgCheckBill_RunWorkerCompleted;
StartTimer.Tick += new EventHandler(StartTimer_Tick);
StartTimer.Interval = 1000;
StartTimer.Start();
loadingCircle1.Switch();
}
private void BgCheckBill_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//StartTimer.Stop();
}
private void BgCheckBill_DoWork(object sender, DoWorkEventArgs e)
{
CheckBillCreate();
}
private void StartTimer_Tick(object sender, EventArgs e)
{
if (_StartTime == null)
{
_StartTime = DateTime.Now;
}
//检查是否正在执行申请
if (!_Working)
{
LabelText("lblStartTime", "当前窗口将在(" + _ExitTime + ")秒后自动关闭。", Color.Black);
if (_ExitTime <= 0)
{
this.Close();
}
_ExitTime--;
}
else
{
if (!bgCheckBill.IsBusy)
{
bgCheckBill.RunWorkerAsync();
}
TimeSpan _TimeSpan = DateTime.Now - _StartTime.Value;
LabelText("lblStartTime", _TimeSpan.Minutes.ToString().PadLeft(2, '0') + "分" + _TimeSpan.Seconds.ToString().PadLeft(2, '0') + "秒", Color.Black);
}
}
private void CheckBillCreate()
{
string _CheckDate = "";
string _Result = "";
if (_ServerPartCode == "" || _ShopCode == "" || _MachineCode == "")
{
return;
}
string _SelectSql = string.Format("select enddate from t_endaccount_new " +
"where enddate = ( select max(enddate) from t_endaccount_new " +
"where serverpartcode = {0} and shopcode = {1} and machinecode = {2} and endaccount_type <> 5 )",
_ServerPartCode, _ShopCode, _MachineCode);
try
{
_CheckDate = DBHelper.QueryOdbc(_SelectSql).Tables[0].Rows[0]["enddate"].ToString();
}
catch
{
_CheckDate = "";
}
if (_CheckDate == "")
{
LabelText("lblCheckDate", _CheckDate, Color.White);
LabelText("lblShopName", _ShopName, Color.White);
LabelText("lblMess", "当前收银机从未结账,不能进行盘点操作。", Color.Red);
_Working = false;
}
else
{
LabelText("lblCheckDate", _CheckDate, Color.White);
LabelText("lblShopName", _ShopName, Color.White);
LabelText("lblMess", "正在申请创建盘点单......", Color.Red);
string[] args = { _ServerPartCode, _ShopCode, _CheckDate, _SellWorkerName, "1000", "0", "0" };
try
{
_Result = WSHelper.InvokeWebService(_ServiceUrl, "CreateCheckBill", args).ToString();
}
catch
{
_Result = "";
}
if (_Result != "")
{
switch (_Result)
{
case "101":
LabelText("lblMess", "盘点单申请成功,正在生成盘点明细。", Color.Black);
break;
case "201":
LabelText("lblMess", "当前门店状态异常,请联系系统管理员。", Color.Black);
break;
case "300":
LabelText("lblMess", "门店存在调拨退货业务,请前往综管平台处理。", Color.Black);
break;
case "301":
LabelText("lblMess", "门店正在盘点,不能创建新的盘点申请。", Color.Black);
break;
case "302":
LabelText("lblMess", "门店存在未校验的结账信息,请前往综管平台处理。", Color.Black);
break;
case "303":
LabelText("lblMess", "门店存在未扣除库存的单品信息,请稍后重试。", Color.Black);
break;
case "304":
LabelText("lblMess", "门店结账信息未上传,不能进行盘点操作。", Color.Black);
break;
case "999":
LabelText("lblMess", "通讯异常,盘点单创建申请失败,请稍后重试。", Color.Black);
break;
default:
LabelText("lblMess", "正在验证盘点申请结果,请稍候......", Color.Black);
DataSet _DataSet = JsonHelper.JsonToDataSet(_Result.Replace("&nbsp;", ""));
if (_DataSet.Tables.Count > 0)
{
DataTable _DataTable = _DataSet.Tables["CheckBill"];
if (_DataTable.Rows.Count > 0)
{
string _DeleteSql = "delete from t_checkcommoditydetail a where not exists ( " +
"select 1 from t_checkcommodityex b where a.checkcommodity_id = " +
"b.checkcommodity_id and b.check_state = 9)";
DBHelper.ExecuteSqlTran(_DeleteSql);
_DeleteSql = "delete from t_checkcommodityex where check_state <> 9";
DBHelper.ExecuteSqlTran(_DeleteSql);
foreach (DataRow _Row in _DataTable.Rows)
{
string checkcommodity_id = _Row["checkcommodity_id"].ToString();
string checkperson = _Row["checkperson"].ToString();
string checkdate = _Row["checkdate"].ToString();
string serverpart_id = _Row["serverpart_id"].ToString();
string serverpartshop_id = _Row["serverpartshop_id"].ToString();
string checkcommodity_desc = _Row["checkcommodity_desc"].ToString();
string check_state = _Row["check_state"].ToString();
string check_passport_guid = _Row["check_passport_guid"].ToString();
string check_type = _Row["check_type"].ToString();
//checkcommodity_id, checkperson, checkdate, serverpart_id, serverpartshop_id, checkcommodity_desc, check_state, check_passport_guid, check_type
if (DBHelper.QueryOdbc("select 1 from t_checkcommodityex " +
"where checkdate = datetime('" + checkdate + "')").Tables[0].Rows.Count == 0)
{
string _InsertSql = "insert into t_checkcommodityex (checkcommodity_id, checkperson," +
" checkdate, serverpart_id, serverpartshop_id, checkcommodity_desc, check_state," +
" check_passport_guid, check_type ) values(" + checkcommodity_id + ",'" + checkperson +
"',datetime('" + checkdate + "')," + serverpart_id + "," + serverpartshop_id + ",'" +
checkcommodity_desc + "'," + check_state + ",'" + check_passport_guid + "'," + check_type + ")";
DBHelper.ExecuteSqlTran(_InsertSql);
}
}
LabelText("lblMess", "盘点单创建成功,系统正在生成盘点明细。", Color.Black);
}
else
{
LabelText("lblMess", "盘点单验证失败,请重试。", Color.Black);
}
}
else
{
LabelText("lblMess", "盘点单验证失败,请重试。", Color.Black);
}
break;
}
_Working = false;
}
}
}
/// <summary>
/// 线程输出文本
/// </summary>
/// <param name="name">控件名称</param>
/// <param name="txt">文本内容</param>
/// <param name="color">文本颜色</param>
public void LabelText(string name, string txt, Color color)
{
try
{
Invoke(new text(lbltext), new object[] { name, txt, color });
}
catch (Exception ex)
{
}
}
delegate void text(string name, string txt, Color color);
void lbltext(string name, string txt, Color color)
{
Label _Label = (Label)findControl(tlpCheckBill, name);
_Label.ForeColor = color;
_Label.Text = txt;
}
/// <summary>
/// 在winform中查找控件
/// </summary>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
private Control findControl(Control control, string controlName)
{
Control c1;
foreach (Control c in control.Controls)
{
if (c.Name == controlName)
{
return c;
}
else if (c.Controls.Count > 0)
{
c1 = findControl(c, controlName);
if (c1 != null)
{
return c1;
}
}
}
return null;
}
private void CheckBill_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Escape:
this.Close();
break;
}
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
}