⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgoutlibsort.cpp

📁 用VC编写的立体仓库的管理软件源程序和设计说明书。
💻 CPP
字号:
// DlgOutlibSort.cpp : implementation file
//

#include "stdafx.h"
#include "Manage_WH.h"
#include "DlgOutlibSort.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgOutlibSort dialog


CDlgOutlibSort::CDlgOutlibSort(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgOutlibSort::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgOutlibSort)
	m_date = 0;
	//}}AFX_DATA_INIT
	m_iNum = 0;
	m_iWhole = 0;
	m_hIcon = AfxGetApp()->LoadIcon(IDI_MYICON);
}


void CDlgOutlibSort::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgOutlibSort)
	DDX_Control(pDX, IDC_WHOLE_COUNT, m_wholeCount);
	DDX_Control(pDX, IDC_GOODS_COUNT, m_goodsCount);
	DDX_Control(pDX, IDC_LIST, m_list);
	DDX_DateTimeCtrl(pDX, IDC_DATE, m_date);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgOutlibSort, CDialog)
	//{{AFX_MSG_MAP(CDlgOutlibSort)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_CBN_SELCHANGE(IDC_CUSTOMER, OnSelchangeCustomer)
	ON_CBN_SELCHANGE(IDC_GOODS, OnSelchangeGoods)
	ON_CBN_SELCHANGE(IDC_PRIORITY, OnSelchangePriority)
	ON_BN_CLICKED(IDC_EXTCUTE, OnExtcute)
	ON_BN_CLICKED(IDC_UNDO, OnUndo)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgOutlibSort message handlers

BOOL CDlgOutlibSort::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message==WM_KEYDOWN && (pMsg->wParam==13 || pMsg->wParam==27))
		return TRUE;
	return CDialog::PreTranslateMessage(pMsg);
}

BOOL CDlgOutlibSort::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	SetIcon(m_hIcon,TRUE);	

	m_list.InsertColumn(0,"货物名称",LVCFMT_LEFT,140,-1);
	m_list.InsertColumn(1,"货物数量",LVCFMT_LEFT,140,-1);
	m_list.SetExtendedStyle( LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT );

	CTime tm(CTime::GetCurrentTime());
	m_date = tm;
	UpdateData(FALSE);
	gFillComboBox(static_cast<CComboBox *>(GetDlgItem(IDC_GOODS)),"T_Products"  ,"F_Name");
	gFillComboBox(static_cast<CComboBox *>(GetDlgItem(IDC_PRIORITY)),"T_Task_Level","F_Name");
	gFillComboBox(static_cast<CComboBox *>(GetDlgItem(IDC_CUSTOMER)),"T_Customers" ,"F_CompanyName");

	static_cast<CEdit *>(GetDlgItem(IDC_ORDER))->SetWindowText(GetOrderFormNum());
	m_wholeCount.SetWindowText("1");
	return TRUE;
}

CString CDlgOutlibSort::GetOrderFormNum()
{
	CString sNum,szVal,sYear;
	CAdoConnection cn;
	if (cn.OpenUDLFile(gstrConSQLSer))
	{
		CAdoRecordSet rs;
		rs.SetAdoConnection(&cn);
		rs.Open("select * from T_Order_Form_Index where F_Type = 1",adCmdText);
		rs.GetCollect("F_Index",szVal);
		rs.GetCollect("F_Year",sYear);
		rs.Close();
		cn.Close();
		sNum = "DH"+sYear+"-"+szVal+"";
	}
	else
	{
		AfxMessageBox("数据库连接失败!");
		sNum = "";
	}
	return sNum;
}

void CDlgOutlibSort::SetOrderFormNum()
{
	CString sNum;
	static_cast<CEdit *>(GetDlgItem(IDC_ORDER))->GetWindowText(sNum);
	sNum.Format("%.5d",atoi(sNum.Mid(sNum.Find('-',0)+1)) + 1);
	
	CAdoConnection cn;
	cn.OpenUDLFile(gstrConSQLSer);
	cn.Execute("UPDATE T_Order_Form_Index SET F_Index='"+sNum+"' WHERE F_Type=1",adCmdText);
	cn.Close();
}

void CDlgOutlibSort::OnSelchangeCustomer() 
{
	static_cast<CComboBox *>(GetDlgItem(IDC_CUSTOMER))->EnableWindow(FALSE);	
}

void CDlgOutlibSort::OnSelchangeGoods() 
{
	//查询所选货物能够用于分配的数量
	if (static_cast<CComboBox *>(GetDlgItem(IDC_GOODS))->GetCurSel() != -1)
	{
		CString sName,sTotalNum,sSQL;
		int iTotalNum(0),iSortNum(0),iNum(0),iGoodsKind(0),bz(0);
		static_cast<CComboBox *>(GetDlgItem(IDC_GOODS))->GetWindowText(sName);
		iGoodsKind = gfGetGoodsKind(sName);
		CAdoConnection cn;
		CAdoRecordSet  rs;
		cn.OpenUDLFile(gstrConSQLSer);
		rs.SetAdoConnection(&cn);

		//获得所选商品的当前库存总数
		sSQL.Format("select * from T_Goods_Site_Manage where F_GoodsKind=%d and F_SiteState!=2",iGoodsKind);
		rs.Open(sSQL,adCmdText);
		if (rs.GetRecordCount() > 0)
		{
			bz = 1;
			rs.MoveFirst();
			while (!rs.IsEOF())
			{
				rs.GetCollect("F_GoodsCount",iNum);
				iTotalNum += iNum;
				rs.MoveNext();
			}
		}
		rs.Close();

		if (bz == 1)
		{
			//获得处于等待状态下的任务的总数量
			sSQL.Format("select * from T_Manager_Task where F_TaskState=0 and F_GoodsKind=%d and (F_TaskKind=2 or F_TaskKind=3 or F_TaskKind=5)",iGoodsKind);
			rs.Open(sSQL,adCmdText);
			if (rs.GetRecordCount() != 0)
			{
				rs.MoveFirst();
				while (!rs.IsEOF())
				{
					rs.GetCollect("F_SortCount",iNum);
					iSortNum += iNum;
					rs.MoveNext();
				}
			}
			rs.Close();
		}
		cn.Close();
		m_iNum = iTotalNum - iSortNum;
		sTotalNum.Format("%d",m_iNum);
		static_cast<CStatic *>(GetDlgItem(IDC_STA_TOTAL))->SetWindowText(""+sName+"可供支配的数量为:"+sTotalNum+"");
	}
}

void CDlgOutlibSort::OnSelchangePriority() 
{
	static_cast<CComboBox *>(GetDlgItem(IDC_PRIORITY))->EnableWindow(FALSE);	
}

void CDlgOutlibSort::OnAdd() 
{
	//获取文本框值
	CString sGoodsName,sGoodsNum,sCustomerName,sPriority,sGoodsType,sWholeNum,sFormNum,sWarning;

	static_cast<CEdit *>(GetDlgItem(IDC_ORDER))->GetWindowText(sFormNum);
	static_cast<CComboBox *>(GetDlgItem(IDC_CUSTOMER))->GetWindowText(sCustomerName);
	static_cast<CComboBox *>(GetDlgItem(IDC_GOODS))->GetWindowText(sGoodsName);
	static_cast<CComboBox *>(GetDlgItem(IDC_PRIORITY))->GetWindowText(sPriority);
	static_cast<CEdit *>(GetDlgItem(IDC_GOODS_COUNT))->GetWindowText(sGoodsNum);
	static_cast<CEdit *>(GetDlgItem(IDC_WHOLE_COUNT))->GetWindowText(sWholeNum);

	if (sFormNum.IsEmpty())				sWarning = "订单编号出错,无法生成分拣任务!";
	else if (sCustomerName.IsEmpty())	sWarning = "客户名称不能为空,请选择!";
	else if (sGoodsName.IsEmpty())		sWarning = "商品名称不能为空,请选择!";
	else if (sPriority.IsEmpty())		sWarning = "任务有限级别不能为空,请选择!";
	else if (sGoodsNum.IsEmpty() || sGoodsNum.Mid(0,1)=="0") sWarning = "商品数量不正确,请重新输入!";
	else if (sWholeNum.IsEmpty() || sWholeNum.Mid(0,1)=="0") sWarning = "成套数量不正确,请重新输入!";

	if (!sWarning.IsEmpty())
	{
		MessageBox(sWarning,"系统提示",MB_ICONSTOP|MB_OK);
		return;
	}

	for (int i=0; i<m_list.GetItemCount(); i++)
	{
		if (m_list.GetItemText(i,0) == sGoodsName)
		{
			MessageBox("对不起,相同的货物不能下发两次!","系统提示",MB_ICONSTOP|MB_OK);
			return;
		}
	}

	int iGoodsNum = atoi(sGoodsNum);
	int iWholeNum = atoi(sWholeNum);
	if (iGoodsNum * iWholeNum > m_iNum)
	{
		MessageBox("无法生成任务,订货数量已超过现有库存!","系统提示",MB_ICONSTOP|MB_OK);
		return;
	}

	if (MessageBox("是否将该任务添加到列表?","系统提示",MB_ICONQUESTION|MB_YESNO)==IDNO)
		return;

	int iListCount(0);
	if (m_list.GetItemCount() != 0)		
		iListCount = m_list.GetItemCount();

	iListCount = m_list.InsertItem(iListCount,"");
	m_list.SetItemText(iListCount,0,sGoodsName);
	m_list.SetItemText(iListCount,1,sGoodsNum);

	static_cast<CComboBox *>(GetDlgItem(IDC_GOODS))->SetCurSel(-1);
	static_cast<CEdit *>(GetDlgItem(IDC_GOODS_COUNT))->SetWindowText("0");
	static_cast<CEdit *>(GetDlgItem(IDC_WHOLE_COUNT))->EnableWindow(FALSE);
	static_cast<CStatic *>(GetDlgItem(IDC_STA_TOTAL))->SetWindowText("");
	static_cast<CButton *>(GetDlgItem(IDC_EXTCUTE))->EnableWindow(TRUE);
}

void CDlgOutlibSort::OnExtcute() 
{
	if (MessageBox("是否执行已制定的任务?","系统提示",MB_ICONQUESTION|MB_OKCANCEL) == 0)
		return;
	UpdateData(TRUE);
	CString sWholeNum,sFormNum,sCustomer,sPriority,sTime,sSQL,sDate;
	//获取文本框值
	static_cast<CEdit *>(GetDlgItem(IDC_ORDER))->GetWindowText(sFormNum);
	static_cast<CEdit *>(GetDlgItem(IDC_WHOLE_COUNT))->GetWindowText(sWholeNum);
	static_cast<CComboBox *>(GetDlgItem(IDC_CUSTOMER))->GetWindowText(sCustomer);
	static_cast<CComboBox *>(GetDlgItem(IDC_PRIORITY))->GetWindowText(sPriority);
	
	int iTaskIndex,iPriority,iGoodsKind,iSortCount;
	int iTotalNum = 0;

	sTime = GetDate(2);
	sDate.Format("%.4d-%.2d-%.2d",m_date.GetYear(),m_date.GetMonth(),m_date.GetDay());
	iPriority  = gfGetTaskPriority(sPriority);

	for (int i=1;i<=atoi(sWholeNum);i++)
	for (int j=0;j<m_list.GetItemCount();j++)
	{
		iTaskIndex = gfGetTaskIndex();
		iGoodsKind = gfGetGoodsKind(m_list.GetItemText(j,0));
		iSortCount = atoi(m_list.GetItemText(j,1));

		sSQL.Format("INSERT INTO T_Manager_Task(F_ManagerIndex,F_OrderIndex,F_GroupIndex,F_TaskKind,F_TaskLevel,\
			F_TaskState,F_GoodsKind,F_SortCount,F_DeliverDate,F_SendTime,F_CustomerName)VALUES(%d,'%s',%d,%d,%d,%d,%d,%d,\
			'%s','%s','%s')",iTaskIndex,sFormNum,i,3,iPriority,0,iGoodsKind,iSortCount,sDate,sTime,sCustomer);
		m_SQLArra.Add(sSQL);
		iTotalNum += iSortCount;
	}
	CAdoConnection cn;
	cn.OpenUDLFile(gstrConSQLSer);
	for (int k=0;k<m_SQLArra.GetSize();k++)
	{
		cn.Execute(m_SQLArra[k],adCmdText);
	}
	sSQL.Format("INSERT INTO T_Order_History(F_OrderIndex,F_Kind,F_Count,F_CompanyName,F_SendTime,F_DeliverDate)VALUES('%s',%d,%d,'%s','%s','%s')",sFormNum,1,iTotalNum,sCustomer,sTime,sDate);
	cn.Execute(sSQL,adCmdText);
	cn.Close();
	AddLog("生成分拣任务单。订单编号:["+sFormNum+"]");
	MessageBox("任务下发成功,请返回或继续!","系统提示",MB_ICONINFORMATION|MB_OK);
	SetOrderFormNum();
	static_cast<CEdit *>(GetDlgItem(IDC_ORDER))->SetWindowText(GetOrderFormNum());
	OnUndo();
}

void CDlgOutlibSort::OnUndo() 
{
	static_cast<CComboBox *>(GetDlgItem(IDC_PRIORITY))->EnableWindow(TRUE);
	static_cast<CComboBox *>(GetDlgItem(IDC_PRIORITY))->SetCurSel(-1);
	static_cast<CComboBox *>(GetDlgItem(IDC_CUSTOMER))->EnableWindow(TRUE);
	static_cast<CComboBox *>(GetDlgItem(IDC_CUSTOMER))->SetCurSel(-1);
	static_cast<CComboBox *>(GetDlgItem(IDC_GOODS))->SetCurSel(-1);
	static_cast<CEdit *>(GetDlgItem(IDC_GOODS_COUNT))->SetWindowText("0");
	static_cast<CStatic *>(GetDlgItem(IDC_STA_TOTAL))->SetWindowText("");
	static_cast<CEdit *>(GetDlgItem(IDC_WHOLE_COUNT))->EnableWindow(TRUE);
	static_cast<CEdit *>(GetDlgItem(IDC_WHOLE_COUNT))->SetWindowText("1");
	static_cast<CButton *>(GetDlgItem(IDC_EXTCUTE))->EnableWindow(FALSE);
	m_list.DeleteAllItems();
	m_iNum = 0;
	m_iWhole = 0;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -