BaoKai_202508-Wms-Jingwang..../WMS.FrmOut/AutoCK/FrmSdOrders.cs

1386 lines
58 KiB
C#
Raw Permalink Normal View History

2025-08-24 09:35:55 +08:00
using DevExpress.CodeParser;
using DevExpress.Data.Db;
using DevExpress.Emf;
using DevExpress.XtraReports.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using WMS.Business;
using WMS.Business.Base;
using WMS.Business.CK;
using WMS.Business.Report;
using WMS.Business.Stock;
using WMS.Common;
using WMS.DBUtility;
using WMS.Frm.Base;
using WMS.IData;
using WMS.Model.CK;
using WMS.Model.Stock;
using Label = System.Windows.Forms.Label;
namespace WMS.FrmCK
{
public partial class FrmSdOrders : FormBase
{
/// <summary>
/// 库存List
/// </summary>
List<MIStockModel> miStockList = new List<MIStockModel>();
public FrmSdOrders()
{
InitializeComponent();
}
string barcode = string.Empty;
string storid = string.Empty;
string mesIP = string.Empty;
private void FrmSdOrders_Load(object sender, EventArgs e)
{
DevExpress.Utils.WaitDialogForm loadForm = new DevExpress.Utils.WaitDialogForm("请稍后...", "正在查询数据请等待...");
//mesIP = "10.10.90.192:8080";
comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 0;
BindMiStockData();
loadForm.Dispose();
loadForm.Close();
}
public override void Del()
{
ctrlButtons3_Click(null, null);
}
/// <summary>
/// 绑定库存数据
/// </summary>
/// <param name="mistock"></param>
public void BindMiStockData()
{
DataTable list = IBussFactory<BussMIStockSearch>.Instance().GetMiStockForLookUp2();
GCMiStock.DataSource = list;
getList();
//new Thread(delegate ()
//{
// string errText = string.Empty;
// try
// {
// this.Invoke(new MethodInvoker(delegate
// {
// //miStockList = IBussFactory<BussMIStockSearch>.Instance().GetMiStockForLookUp();
// //if (miStockList != null)
// //{
// // bgsStock.DataSource = miStockList;
// //}
// // bgsStock.DataSource = list;// IBussFactory<BussMIStockSearch>.Instance().GetMiStockForLookUp2();
// getList();
// }));
// }
// catch (Exception)
// {
// SystemCommon.ShowInfoMessageBox("error");
// }
//}).Start();
}
public List<OrderDetailModel> or_det_List = new List<OrderDetailModel>();
private void GVMiStock_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
if (GVMiStock.RowCount == 0)
{
return;
}
this.txtCTL.Text = GVMiStock.GetFocusedRowCellValue("CTL").ToString();
this.txtLocation.Text = GVMiStock.GetFocusedRowCellValue("LOCATION_ID").ToString();
this.txtGoodsId.Text = GVMiStock.GetFocusedRowCellValue("GOODS_ID").ToString();
//txtGoodsName.Text = GVMiStock.GetFocusedRowCellValue("GOODS_NAME").ToString();
txtCCNum.Text = GVMiStock.GetFocusedRowCellValue("SHELVES_NUM").ToString();
txtCKnum.Text = GVMiStock.GetFocusedRowCellValue("SHELVES_NUM").ToString();
this.txtGDH.Text = GVMiStock.GetFocusedRowCellValue("PROVIDER_ID").ToString();
t_sts.Text = GVMiStock.GetFocusedRowCellValue("STS").ToString();
barcode = GVMiStock.GetFocusedRowCellValue("BARCODE").ToString();
//this.textBox2.Text = this.txtCTL.Text;
storid = GVMiStock.GetFocusedRowCellValue("STORAGE_ID").ToString();
if (t_sts.Text == "1")
{
t_sts.Text = "占用";
}
else
{
t_sts.Text = "正常";
}
}
private void getList()
{
List<PickingWaveGoodsModel> taskData = IBussFactory<BussPickingWaveGoods>.Instance().GetTaskdataHand();
if (taskData != null)
{
bindingSource1.DataSource = taskData;
}
}
public void Clear()
{
if (SystemCommon.ShowMessageBoxResult("确定选择库位:" + this.textBox1.Text.ToString() + "手动出库吗?") == DialogResult.OK)
{
string tasktype = string.Empty;
if (textBox1.Text == "")
{
SystemCommon.ShowInfoMessageBox("输入库位不能为空");
return;
}
if (textBox1.Text.Length != 11)
{
SystemCommon.ShowInfoMessageBox("输入库位格式不对");
return;
}
if (this.comboBox1.Text.Trim() == "A1" || this.comboBox1.Text.Trim() == "A4")
{
SystemCommon.ShowInfoMessageBox("不能出零拣");
return;
}
else
{
tasktype = "3";
DataTable dt = IBussFactory<BussPickingWaveGoods>.Instance().getDecid(this.comboBox1.Text.Trim());
string decidsts = dt.Rows[0]["STS"].ToString().Trim();
if (decidsts != "2")
{
SystemCommon.ShowInfoMessageBox("该库口非出库模式!");
return;
}
}
IBussFactory<BussOrders>.Instance().InsTMISTOCK(textBox1.Text);
string orderstr = "SJD" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.PUTIN_ID = orderstr;
or_Model.PICKINGID = orderstr;
or_Model.GOOD_ID = "111111";
or_Model.LOC_ID = this.textBox1.Text;
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = 1;
or_Model.BARCODE = "111111";
or_Model.CTL = "111111";
or_Model.status = "1";
or_Model.outStand = this.comboBox1.Text.Trim();
or_Model.typests = tasktype;
or_Model.PROVIDER_ID = "111111";
or_Model.STORAGE_ID = "JXJW";
or_Model.GOODS_NUM_SJ = 1;
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
SystemCommon.ShowInfoMessageBox("手动产生出库单成功!");
IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 工单ID:" + or_Model.PROVIDER_ID);
}
else { SystemCommon.ShowInfoMessageBox("错误!" + errText); }
getList();
BindMiStockData();
}
catch (Exception ex)
{
return;
}
}
}
public (string password, string number) GetPasswordAndNumber()
{
string sql = "select * from T_CK_NUMBER";
DataSet result = OracleHelper.ExecuteDataset(CommandType.Text, sql);
string password = result.Tables[0].Rows[0]["PASSWORD"].ToString();
string number = result.Tables[0].Rows[0]["NUM"].ToString();
return (password, number);
}
private void ctrlButtons2_Click(object sender, EventArgs e)
{
int[] rownumber = GVMiStock.GetSelectedRows();
//查询有没有输入数量和编号出库
string GOODSID = textBox5.Text;string num = textBox4.Text;
if (string.IsNullOrEmpty(GOODSID) ^ string.IsNullOrEmpty(num))
{
SystemCommon.ShowInfoMessageBox("请补全物料或者数量出库,也可以清除数据手动选择物料出库");
return;
}
else if (!string.IsNullOrEmpty(GOODSID) && !string.IsNullOrEmpty(num)&& rownumber.Length==0)
{
//都不为空则且未选中下方数据的是自动出库
if (!System.Text.RegularExpressions.Regex.IsMatch(num, @"^[1-9]\d*$"))
{
SystemCommon.ShowInfoMessageBox("出库数量必须是有效的正整数(不能有前导零)");
return;
}
else
{
// 根据物料号和数量显示出符合条件的库存并且选中
int requiredQuantity = int.Parse(num);
decimal totalSelected = 0;
// 查询符合条件的库存,按生产日期升序排列(先进先出)
string query = @"SELECT * FROM T_MI_STOCK
WHERE GOODS_ID = :goodsId
AND STS = '0' --
ORDER BY GOODS_SKU ASC,ORDER BY Shelves_Num ASC";
var parameters = new OracleParameter[] {
new OracleParameter("goodsId", OracleDbType.Varchar2) { Value = GOODSID }
};
DataTable stockData = SystemDataObject.Instance.GetDataTable(query, parameters);
// 创建新的DataTable只包含符合条件的行
DataTable filteredTable = stockData.Clone();
// 遍历结果,选择足够数量的记录
foreach (DataRow row in stockData.Rows)
{
decimal availableQty = Convert.ToDecimal(row["SHELVES_NUM"]);
if (totalSelected < requiredQuantity)
{
// 计算还需要多少数量
decimal needed = requiredQuantity - totalSelected;
decimal toTake = (availableQty >= needed) ? needed : availableQty;
// 将符合条件的行添加到新表中
filteredTable.ImportRow(row);
totalSelected += toTake;
}
else
{
break; // 已经满足数量要求
}
}
if (totalSelected < requiredQuantity)
{
SystemCommon.ShowInfoMessageBox($"库存不足,只有 {totalSelected} 可用,需要 {requiredQuantity}");
return;
}
// 重新绑定只包含选中行的数据
GCMiStock.DataSource = filteredTable;
// 选中所有行因为filteredTable只包含符合条件的行
GVMiStock.ClearSelection();
for (int i = 0; i < GVMiStock.RowCount; i++)
{
GVMiStock.SelectRow(i);
}
// 显示成功消息
SystemCommon.ShowInfoMessageBox($"已自动筛选 {filteredTable.Rows.Count} 条库存记录,满足出库数量 {requiredQuantity}");
}
}
//else
//{
// SystemCommon.ShowInfoMessageBox("请检查操作是否规范");
// return;
//}
if (SystemCommon.ShowMessageBoxResult("确定选择物料出库吗?") == DialogResult.OK)
{
//DevExpress.Utils.WaitDialogForm loadForm = new DevExpress.Utils.WaitDialogForm("请稍后...", "正在生成出库任务请等待...");
#region
//if (this.textBox2.Text == "")
//{
// SystemCommon.ShowInfoMessageBox("请选择物料信息");
// return;
//}
////if (txtLocation.Text.Substring(0,2) != "JW")
////{
//// SystemCommon.ShowInfoMessageBox("非立库库位");
//// return;
////}
//if (t_sts.Text.Trim()=="占用")
//{
// SystemCommon.ShowInfoMessageBox("不能出库,库存已经被占用");
// return;
//}
//if (this.txtCKnum.Text == "")
//{
// SystemCommon.ShowInfoMessageBox("请输入出库数");
// return;
//}
//if (Convert.ToDecimal(this.txtCKnum.Text.Trim()) > Convert.ToDecimal(this.txtCCNum.Text.Trim()))
//{
// SystemCommon.ShowInfoMessageBox("出库数不能大于库存数");
// return;
//}
////if (this.txtGoodsId.Text.Trim()=="00000")
////{
//// SystemCommon.ShowInfoMessageBox("不能手动出空托盘");
//// return;
////}
////if (this.comboBox1.Text.Trim() == "A1" || this.comboBox1.Text.Trim() == "A4")
////{
//// if (SystemCommon.ShowMessageBoxResult("确定选择库位:" + this.txtLocation.Text.ToString() + "零拣出库吗?") == DialogResult.OK)
//// {
//// if (storid == "JXJWTH")
//// {
//// SystemCommon.ShowInfoMessageBox("退货存储不能生成零拣任务!");
//// return;
//// }
//// if (ZjcheckB.Checked == true)
//// {
//// tasktype = "8";
//// }
//// else
//// {
//// tasktype = "7";
//// }
//// }
//// else
//// {
//// comboBox1.Text = "A2";
//// return;
//// }
////}
////else
////{
//// tasktype = "3";
//// DataTable dt = IBussFactory<BussPickingWaveGoods>.Instance().getDecid(this.comboBox1.Text.Trim());
//// string decidsts = dt.Rows[0]["STS"].ToString().Trim();
//// if (decidsts != "2")
//// {
//// SystemCommon.ShowInfoMessageBox("该库口非出库模式!");
//// return;
//// }
////}
#endregion
//if (IBussFactory<BussPickingWaveGoods>.Instance().getPickData(this.txtLocation.Text))
//{
// SystemCommon.ShowInfoMessageBox("该托盘已生成出库单!");
// return;
//}
var (password, number) = GetPasswordAndNumber();//获取两个值
if (number == ""||number==null)
{
SystemCommon.ShowInfoMessageBox("请输入限制任务数量");
return;
}
else
{
int TASK_NUM = int.Parse(number);
//判断已下发和待下发的出库的箱子是否大于等于number
if (IBussFactory<BussPickingWaveGoods>.Instance().getPickDataCount(TASK_NUM))
{
SystemCommon.ShowInfoMessageBox($"出库任务不能大于{TASK_NUM}条!");
return;
}
}
//判断周期
if (rownumber.Length == 0)
{
SystemCommon.ShowInfoMessageBox("请选择出库物料");
return;
}
string PORT = "0";
if (this.comboBox2.Text == "请选择装箱口")
{
SystemCommon.ShowInfoMessageBox("请选择装箱口");
return;
}
else if (this.comboBox2.Text == "平均分")
{
PORT = "0";
}
else
{
PORT = this.comboBox2.Text;
}
var selectedRows = rownumber
.Select(rowHandle => GVMiStock.GetDataRow(rowHandle))
.Where(row => row != null)
.ToList();
// 找出周期最短的行GOODS_SKU最小
DataRow earliestRow = selectedRows
.OrderBy(row => row["GOODS_SKU"].ToString())
.FirstOrDefault();
if (earliestRow == null)
{
SystemCommon.ShowInfoMessageBox("未找到有效的库存数据");
return;
}
// 从周期最短的行中获取物料编号和周期
string goodid = earliestRow["GOODS_ID"].ToString().Trim();
string productiondate = earliestRow["GOODS_SKU"].ToString();
if (IBussFactory<BussPickingWaveGoods>.Instance().getPickDataProductionDate(goodid, productiondate))
{
//SystemCommon.ShowInfoMessageBox("该物料还存在更早生产日期的可出库!");
DialogResult result = MessageBox.Show("该物料还存在更早周期的可出库,确认出库吗?", "确认", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
using (Form inputForm = new Form())
{
inputForm.Text = "出库确认";
inputForm.Width = 300;
inputForm.Height = 200;
inputForm.FormBorderStyle = FormBorderStyle.FixedDialog;
inputForm.StartPosition = FormStartPosition.CenterParent;
Label lblOperator = new Label() { Text = "操作人:", Top = 20, Left = 20, Width = 60 };
TextBox txtOperator = new TextBox() { Top = 20, Left = 90, Width = 150 };
Label lblReason = new Label() { Text = "操作原因:", Top = 60, Left = 20, Width = 60 };
TextBox txtReason = new TextBox() { Top = 60, Left = 90, Width = 150 };
Button btnOK = new Button() { Text = "确定", Top = 100, Left = 90, Width = 60 };
btnOK.DialogResult = DialogResult.OK;
inputForm.AcceptButton = btnOK;
inputForm.Controls.Add(lblOperator);
inputForm.Controls.Add(txtOperator);
inputForm.Controls.Add(lblReason);
inputForm.Controls.Add(txtReason);
inputForm.Controls.Add(btnOK);
if (inputForm.ShowDialog() == DialogResult.OK)
{
string operatorName = txtOperator.Text.Trim();
string reason = txtReason.Text.Trim();
if (string.IsNullOrEmpty(operatorName) || string.IsNullOrEmpty(reason))
{
SystemCommon.ShowInfoMessageBox("操作人和操作原因不能为空!");
return;
}
SystemCommon.ShowInfoMessageBox("确定出库!");
// Log the operation
string logMessage = $"{DateTime.Now.ToString()} 手动出库操作 - 操作人: {operatorName}, 原因: {reason}, " +
$"物料编号: {goodid}, 周期: {productiondate}";
LogWriteText.WriteLog(logMessage);
}
else
{
SystemCommon.ShowInfoMessageBox("取消出库!");
return;
}
}
}
else if (result == DialogResult.No)
{
SystemCommon.ShowInfoMessageBox("取消出库!");
return;
}
else
{
SystemCommon.ShowInfoMessageBox("取消出库!");
return;
}
}
for (int i = 0; i < rownumber.Length; i++)
{
string BARCODE = GVMiStock.GetRowCellValue(rownumber[i], "BARCODE").ToString();
string CTL = GVMiStock.GetRowCellValue(rownumber[i], "CTL").ToString();
string tasktype = string.Empty;
DataSet dt = IBussFactory<BussMIStock>.Instance().STATUS_GET(CTL);
if (dt.Tables[0].Rows.Count > 0)
{
SystemCommon.ShowInfoMessageBox("当前库存已是出库中");
return;
}
//判断出库物料是否上报mes入库
string sql = "select * from T_MI_STOCK where CTL='" + CTL + "'";
DataSet MES_STATUS = OracleHelper.ExecuteDataset(CommandType.Text, sql);
string CODE = MES_STATUS.Tables[0].Rows[0]["BARCODE"].ToString();
if (MES_STATUS.Tables[0].Rows[0]["STSEBS"].ToString() != "1" && MES_STATUS.Tables[0].Rows[0]["BARCODE"].ToString() != "000000")
{
SystemCommon.ShowInfoMessageBox($"该箱号{CTL}对应的{BARCODE}未上报mes成功,无法出库");
return;
}
//更新库存表状态--以箱号或者库位为标准
DataTable tb = IBussFactory<BussMIStock>.Instance().GetMisDataCK(BARCODE);
if (tb != null && tb.Rows.Count > 0)
{
string orderstr = "CK" + DateTime.Now.ToString("yyyyMMddHHmmssffffff");
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.CUSTOMERMEMBERID = tb.Rows[0]["Docctnumber"].ToString(); //销售订单
or_Model.PICKINGID = orderstr;
//or_Model.PUTIN_ID = orderstr;
//or_Model.OUT_ID = orderstr;
or_Model.GOOD_ID = tb.Rows[0]["GOODS_ID"].ToString();
or_Model.LOC_ID = tb.Rows[0]["LOCATION_ID"].ToString();
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());//SHELVES_NUM
or_Model.BARCODE = BARCODE;
or_Model.CTL = tb.Rows[0]["CTL"].ToString();
or_Model.status = "0";
//or_Model.outStand = this.comboBox1.Text.Trim();
or_Model.typests = "1";
or_Model.CUSTOMER_ID = tb.Rows[0]["CUSTOMER_ID"].ToString();
or_Model.GOODS_NUM_SJ = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());
or_Model.STORAGE_AREA_ID = tb.Rows[0]["Storage_Id"].ToString();//子库编码
or_Model.PORT = PORT;
or_Model.MISTOCK_NUM = Convert.ToDecimal(tb.Rows[0]["packing_num"].ToString());
or_Model.DOCCTNUMBER= tb.Rows[0]["GOODS_SKU"].ToString(); //周期 电视机显示用
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
//SystemCommon.ShowInfoMessageBox("手动产生出库单成功!");
// IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 箱码:" + BARCODE);
}
else
{
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生出库单异常,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 箱码:" + BARCODE + ",异常:" + errText);
SystemCommon.ShowInfoMessageBox("错误!" + errText);
}
getList();
BindMiStockData();
txtBoxCode.Text = "";
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
else
{
SystemCommon.ShowInfoMessageBox("箱号:" + textBox2.Text + " 无库存,请确认箱码是否正确或已出库!!!");
}
}
//loadForm.Dispose();
//loadForm.Close();
textBox4.Clear();textBox5.Clear();
SystemCommon.ShowInfoMessageBox("出库任务已生成.");
}
}
private void ctrlButtons1_Click(object sender, EventArgs e)
{
DevExpress.Utils.WaitDialogForm loadForm = new DevExpress.Utils.WaitDialogForm("请稍后...", "正在查询数据请等待...");
BindMiStockData();
var (password, number) = GetPasswordAndNumber();//获取两个值
textBox3.Text = number;
//getList();
loadForm.Dispose();
loadForm.Close();
}
private void ctrlButtons3_Click(object sender, EventArgs e)
{
if (SystemCommon.ShowMessageBoxResult("确定预出库该:" + this.txtLocation.Text.ToString() + "物料?") == DialogResult.OK)
{
if (this.txtLocation.Text == "")
{
SystemCommon.ShowInfoMessageBox("请选择确定预出库的货物!");
return;
}
string Layer = txtLocation.Text.Substring(txtLocation.Text.Length - 2, 2);
#region
string loc = IBussFactory<BussPickingWaveGoods>.Instance().getYckLoc(Layer);
if (loc == string.Empty)
{
SystemCommon.ShowInfoMessageBox("该层预出库库位已满!");
return;
}
else
{
Yckcommit(loc);
}
#endregion
}
}
private string GetLock(string locid)
{
string lockloc = string.Empty;
string Xloc = locid.Substring(3, 2).ToString();
string Yloc = locid.Substring(6, 2).ToString();
string Zloc = locid.Substring(locid.Length - 1, 1);
if (int.Parse(Xloc) > 0 && int.Parse(Xloc) < 4)
{
for (int j = 1; j < 4; j++)
{
lockloc += "JW-" + j.ToString().PadLeft(2, '0') + "-" + Yloc + "-" + Zloc.PadLeft(2, '0');
}
}
else if (int.Parse(Xloc) > 4 && int.Parse(Xloc) < 11)
{
for (int j = 5; j < 11; j++)
{
lockloc += "JW-" + j.ToString().PadLeft(2, '0') + "-" + Yloc + "-" + Zloc.PadLeft(2, '0');
}
}
else if (int.Parse(Xloc) > 11 && int.Parse(Xloc) < 18)
{
for (int j = 12; j < 18; j++)
{
lockloc += "JW-" + j.ToString().PadLeft(2, '0') + "-" + Yloc + "-" + Zloc.PadLeft(2, '0');
}
}
else if (int.Parse(Xloc) > 18 && int.Parse(Xloc) < 25)
{
for (int j = 19; j < 25; j++)
{
lockloc += "JW-" + j.ToString().PadLeft(2, '0') + "-" + Yloc + "-" + Zloc.PadLeft(2, '0');
}
}
else if (int.Parse(Xloc) > 25 && int.Parse(Xloc) < 29)
{
for (int j = 26; j < 29; j++)
{
lockloc += "JW-" + j.ToString().PadLeft(2, '0') + "-" + Yloc + "-" + Zloc.PadLeft(2, '0');
}
}
return lockloc;
}
private string PostJSON(string url, string strPost, ref string errText)
{
errText = string.Empty;
string result = string.Empty;
//生成文件流
byte[] buffer = Encoding.UTF8.GetBytes(strPost);
//向流中写字符串
StreamWriter mywriter = null;
//根据url创建请求对象
HttpWebRequest objrequest = (HttpWebRequest)WebRequest.Create(url);
//设置发送方式
objrequest.Method = "POST";
objrequest.Timeout = 5000;
//提交长度
objrequest.ContentLength = buffer.Length;
//发送内容格式
objrequest.ContentType = "application/json";
try
{
mywriter = new StreamWriter(objrequest.GetRequestStream());
mywriter.Write(strPost);
}
catch (Exception ex)
{
errText = ex.Message;
result = "发送JSON失败";
}
finally
{
mywriter.Close();
}
//读取服务器返回信息c
HttpWebResponse objresponse = (HttpWebResponse)objrequest.GetResponse();
using (StreamReader sr = new StreamReader(objresponse.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close();
}
return result;
}
public void Yckcommit(string locid)
{
if (t_sts.Text.Trim() == "占用")
{
SystemCommon.ShowInfoMessageBox("不能出库,库存已经被占用");
return;
}
if (IBussFactory<BussPickingWaveGoods>.Instance().getPickData(this.txtLocation.Text))
{
SystemCommon.ShowInfoMessageBox("该托盘已生成出库单!");
return;
}
string orderstr = "XJYCKD" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.PUTIN_ID = orderstr;
or_Model.PICKINGID = orderstr;
or_Model.GOOD_ID = this.txtGoodsId.Text;
or_Model.LOC_ID = this.txtLocation.Text;
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = Convert.ToDecimal(this.txtCKnum.Text.Trim());
or_Model.CTL = this.txtCTL.Text;
or_Model.status = "1";
or_Model.outStand = locid;
or_Model.typests = "3";
or_Model.PROVIDER_ID = this.txtGDH.Text.Trim();
or_Model.STORAGE_ID = "JXJW";
or_Model.GOODS_NUM_SJ = Convert.ToDecimal(this.txtCKnum.Text.Trim());
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
SystemCommon.ShowInfoMessageBox("手动产生预出库单成功!");
IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
//更新移库目的位置
IBussFactory<BussAutoRk>.Instance().UpdateYkLoc(locid);
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生预出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID);
}
else { SystemCommon.ShowInfoMessageBox("错误!" + errText); }
getList();
BindMiStockData();
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
private void ctrlButtons4_Click(object sender, EventArgs e)
{
if (SystemCommon.ShowMessageBoxResult("确定选择库位:" + this.txtLocation.Text.ToString() + "移库吗?") == DialogResult.OK)
{
if (txtLocation.Text == "")
{
SystemCommon.ShowInfoMessageBox("库位不能为空");
return;
}
if (t_sts.Text.Trim() == "占用")
{
SystemCommon.ShowInfoMessageBox("不能移库,库存已经被占用");
return;
}
if (IBussFactory<BussPickingWaveGoods>.Instance().getPickData(this.txtLocation.Text))
{
SystemCommon.ShowInfoMessageBox("该托盘已生成出库单!");
return;
}
if (textBox1.Text.Trim() == "")
{
SystemCommon.ShowInfoMessageBox("移库库位不能为空");
return;
}
if (IBussFactory<BussPickingWaveGoods>.Instance().getLocS(textBox1.Text.Trim()))
{
SystemCommon.ShowInfoMessageBox("移库库位不存在或有货");
return;
}
try
{
string errText = "";
errText = IBussFactory<BussOrders>.Instance().InsYK(txtLocation.Text.Trim(), textBox1.Text.Trim());
if (errText.Length == 0)
{
SystemCommon.ShowInfoMessageBox("手动产生移库单成功!");
}
else
{ SystemCommon.ShowInfoMessageBox("错误!" + errText); }
getList();
BindMiStockData();
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
}
private void ZjcheckB_CheckedChanged(object sender, EventArgs e)
{
if (comboBox1.Text.Trim() == "A2" || comboBox1.Text.Trim() == "A3")
{
if (ZjcheckB.Checked == true)
{
SystemCommon.ShowInfoMessageBox("追加模式只允许A1 A4库口请选择正确出库站台");
}
ZjcheckB.Checked = false;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//if (comboBox1.Text == "A1" || comboBox1.Text == "A4")
//{
// if (SystemCommon.ShowMessageBoxResult("确定生成零拣:" + this.txtLocation.Text.ToString() + "任务吗?") == DialogResult.OK)
// {
// }
// else
// {
// comboBox1.Text = "A2";
// }
//}
}
private void ctrlButtons5_Click(object sender, EventArgs e)
{
if (SystemCommon.ShowMessageBoxResult("确定选择库位:" + this.txtLocation.Text.ToString() + "盘点出库吗?") == DialogResult.OK)
{
string tasktype = string.Empty;
if (txtLocation.Text == "")
{
SystemCommon.ShowInfoMessageBox("库位不能为空");
return;
}
if (this.comboBox1.Text.Trim() == "A2" || this.comboBox1.Text.Trim() == "A3")
{
SystemCommon.ShowInfoMessageBox("盘点任务只能出A1A4");
return;
}
if (txtLocation.Text.Substring(0, 2) != "JW")
{
SystemCommon.ShowInfoMessageBox("非立库库位");
return;
}
if (t_sts.Text.Trim() == "占用")
{
SystemCommon.ShowInfoMessageBox("不能出库,库存已经被占用");
return;
}
if (this.txtCKnum.Text == "")
{
SystemCommon.ShowInfoMessageBox("请输入出库数");
return;
}
if (Convert.ToDecimal(this.txtCKnum.Text.Trim()) > Convert.ToDecimal(this.txtCCNum.Text.Trim()))
{
SystemCommon.ShowInfoMessageBox("出库数不能大于库存数");
return;
}
if (this.txtGoodsId.Text.Trim() == "00000")
{
SystemCommon.ShowInfoMessageBox("不能手动出空托盘");
return;
}
if (storid == "JXJWTH")
{
SystemCommon.ShowInfoMessageBox("退货存储不能生成盘点任务!");
return;
}
if (IBussFactory<BussPickingWaveGoods>.Instance().getPickData(this.txtLocation.Text))
{
SystemCommon.ShowInfoMessageBox("该托盘已生成出库单!");
return;
}
//if (IBussFactory<BussPickingWaveGoods>.Instance().getPickDataCount())
//{
// SystemCommon.ShowInfoMessageBox("出库任务不能多余10条");
// return;
//}
string orderstr = "SJD" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.PUTIN_ID = orderstr;
or_Model.PICKINGID = orderstr;
or_Model.GOOD_ID = this.txtGoodsId.Text;
or_Model.LOC_ID = this.txtLocation.Text;
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = Convert.ToDecimal(this.txtCKnum.Text.Trim());
or_Model.BARCODE = barcode;
or_Model.CTL = this.txtCTL.Text;
or_Model.status = "1";
or_Model.outStand = this.comboBox1.Text.Trim();
or_Model.typests = "1";
or_Model.PROVIDER_ID = this.txtGDH.Text.Trim();
or_Model.GOODS_NUM_SJ = Convert.ToDecimal(this.txtCKnum.Text.Trim());
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
SystemCommon.ShowInfoMessageBox("手动产生盘点出库单成功!");
IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生盘点出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 工单ID:" + or_Model.PROVIDER_ID);
}
else { SystemCommon.ShowInfoMessageBox("错误!" + errText); }
getList();
BindMiStockData();
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
}
private void txtBoxCode_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter)
{
//611250110192436 外箱条码
//BAG611250113676428 内箱条码
//if (this.txtBoxCode.Text.Trim().Length == 15)
//{
//}
string Code = this.txtBoxCode.Text.Trim();
if (IBussFactory<BussPickingWaveGoods>.Instance().GetPickData_BARCODE(Code))
{
SystemCommon.ShowInfoMessageBox("箱码:" + Code + "已生成出库单!");
return;
}
DataTable tb = IBussFactory<BussMIStock>.Instance().GetMisDataCK(Code.Trim());
if (tb != null && tb.Rows.Count > 0)
{
string orderstr = "CK" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.PICKINGID = tb.Rows[0]["Docctnumber"].ToString(); //销售订单
or_Model.PUTIN_ID = orderstr;
or_Model.OUT_ID = orderstr;
or_Model.GOOD_ID = tb.Rows[0]["GOODS_ID"].ToString();
or_Model.LOC_ID = tb.Rows[0]["LOCATION_ID"].ToString();
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());//SHELVES_NUM
or_Model.BARCODE = tb.Rows[0]["BARCODE"].ToString();
or_Model.CTL = tb.Rows[0]["CTL"].ToString();
or_Model.status = "0";
//or_Model.outStand = this.comboBox1.Text.Trim();
or_Model.typests = "1";
or_Model.CUSTOMER_ID = tb.Rows[0]["CUSTOMER_ID"].ToString();
or_Model.GOODS_NUM_SJ = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());
or_Model.STORAGE_AREA_ID = tb.Rows[0]["Storage_Id"].ToString();//子库编码
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
//SystemCommon.ShowInfoMessageBox("手动产生出库单成功!");
//IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
LogWriteText.WriteLog(DateTime.Now.ToString() + " 扫描产生出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 箱码:" + Code);
}
else { SystemCommon.ShowInfoMessageBox("错误!" + errText); }
getList();
BindMiStockData();
txtBoxCode.Text = "";
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
else
{
SystemCommon.ShowInfoMessageBox("箱号:" + Code + " 无库存,请确认箱码是否正确或已出库!!!");
}
}
}
catch (Exception ex)
{
}
}
private void txtBoxCode_Leave(object sender, EventArgs e)
{
// this.txtBoxCode.Select();
}
private void ctrlButtons6_Click(object sender, EventArgs e)
{
if (textBox2.Text == "")
{
SystemCommon.ShowInfoMessageBox("请输入数量");
return;
}
if (SystemCommon.ShowMessageBoxResult("确定选择空箱出库吗?") == DialogResult.OK)
{
//int[] rownumber = GVMiStock.GetSelectedRows();
if (!int.TryParse(textBox2.Text, out int quantity) || quantity <= 0)
{
SystemCommon.ShowInfoMessageBox("请输入正确的数量(必须为正整数)");
return;
}
//if (this.txtGoodsId.Text != "000000")
//{
// SystemCommon.ShowInfoMessageBox("请选择空料箱任务物料编号000000");
// return;
//}
int numbers = 0;
//查询当前库存空箱子数
DataTable number = IBussFactory<BussMIStock>.Instance().GetMisDataempty();
if(number.Rows.Count == 0){ SystemCommon.ShowInfoMessageBox($"无空箱"); return; }
if(number.Rows.Count<= int.Parse(textBox2.Text))
{
SystemCommon.ShowInfoMessageBox($"库内在库空箱数量{number.Rows.Count},实际需求{int.Parse(textBox2.Text)},全出");
numbers = number.Rows.Count;
}
else
{
numbers = int.Parse(textBox2.Text);
}
//根据选定数量进行出库
for (int i = 1; i <= numbers; i++)
{
//执行一空箱出库
DataTable tb = IBussFactory<BussMIStock>.Instance().GetMisDataCKCTL();
if (tb != null && tb.Rows.Count > 0)
{
string orderstr = "CK" + DateTime.Now.ToString("yyyyMMddHHmmssfff")+ tb.Rows[0]["CTL"].ToString();
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.PICKINGID = tb.Rows[0]["Docctnumber"].ToString(); //销售订单
or_Model.PUTIN_ID = orderstr;
or_Model.OUT_ID = orderstr;
or_Model.GOOD_ID = tb.Rows[0]["GOODS_ID"].ToString();
or_Model.LOC_ID = tb.Rows[0]["LOCATION_ID"].ToString();
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());//SHELVES_NUM
or_Model.BARCODE = textBox2.Text.Trim();
or_Model.CTL = tb.Rows[0]["CTL"].ToString();
or_Model.status = "0";
//or_Model.outStand = this.comboBox1.Text.Trim();
or_Model.typests = "1";
or_Model.CUSTOMER_ID = tb.Rows[0]["CUSTOMER_ID"].ToString();
or_Model.GOODS_NUM_SJ = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());
or_Model.STORAGE_AREA_ID = tb.Rows[0]["Storage_Id"].ToString();//子库编码
or_Model.PORT = "0";
or_Model.MISTOCK_NUM = Convert.ToDecimal(tb.Rows[0]["packing_num"].ToString());
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
//SystemCommon.ShowInfoMessageBox("手动产生出库单成功!");
////IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
//LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 箱码:" + this.textBox2.Text);
}
else { SystemCommon.ShowInfoMessageBox("错误!" + errText); }
getList();
BindMiStockData();
txtBoxCode.Text = "";
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
else
{
SystemCommon.ShowInfoMessageBox("箱号:" + textBox2.Text + " 无库存,请确认箱码是否正确或已出库!!!");
}
}
SystemCommon.ShowInfoMessageBox("空箱出库任务批量下发成功");
string tasktype = string.Empty;
//DataTable tb = IBussFactory<BussMIStock>.Instance().GetMisDataCKCTL(textBox2.Text.Trim());
}
}
private void ctrlButtons7_Click(object sender, EventArgs e)
{
string number = textBox3.Text;
if(number==""||number==null)
{
SystemCommon.ShowInfoMessageBox("点击刷新获取最新的限制数量");
return;
}
if (!Regex.IsMatch(number, @"^[1-9]\d*$"))
{
SystemCommon.ShowInfoMessageBox("请输入正确的正整数");
return;
}
else
{
var (password, num) = GetPasswordAndNumber();//获取两个值
TextBox txtInput = new TextBox
{
Width = 200,
PasswordChar = '*',
Anchor = AnchorStyles.None // 取消锚定,便于居中
};
Form prompt = new Form
{
Width = 300,
Height = 150,
Text = "密码验证",
StartPosition = FormStartPosition.CenterScreen,
FormBorderStyle = FormBorderStyle.FixedDialog, // 固定对话框样式
MaximizeBox = false,
MinimizeBox = false
};
System.Windows.Forms.Label lblPrompt = new System.Windows.Forms.Label
{
Text = "请输入密码:",
AutoSize = true,
Anchor = AnchorStyles.None // 取消锚定
};
Button btnOK = new Button
{
Text = "确定",
Width = 80,
Anchor = AnchorStyles.None
};
// 使用 TableLayoutPanel 实现居中布局
TableLayoutPanel tableLayout = new TableLayoutPanel
{
Dock = DockStyle.Fill,
ColumnCount = 1,
RowCount = 3,
Padding = new Padding(20)
};
// 添加控件到 TableLayoutPanel
tableLayout.Controls.Add(lblPrompt, 0, 0);
tableLayout.Controls.Add(txtInput, 0, 1);
tableLayout.Controls.Add(btnOK, 0, 2);
// 设置行和列的样式
tableLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tableLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tableLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
// 设置控件在单元格内的居中
lblPrompt.Anchor = AnchorStyles.None;
txtInput.Anchor = AnchorStyles.None;
btnOK.Anchor = AnchorStyles.None;
// 按钮点击事件
btnOK.Click += (s, ev) => prompt.Close();
// 将 TableLayoutPanel 添加到窗体
prompt.Controls.Add(tableLayout);
prompt.ShowDialog();
if (txtInput.Text != password)
{
SystemCommon.ShowErrorMessageBox("密码验证失败");
return;
}
string sql = "update T_CK_NUMBER set NUM ='"+ number + "'";
int row=OracleHelper.ExecuteNonQuery(CommandType.Text, sql);
if (row > 0)
{
SystemCommon.ShowInfoMessageBox("更新出库任务数量限制成功");
}
else
{
SystemCommon.ShowInfoMessageBox("更新出库任务数量限制失败");
}
}
}
private void ctrlButtons8_Click(object sender, EventArgs e)
{
if (SystemCommon.ShowMessageBoxResult("确定选择物料出库吗?") == DialogResult.OK)
{
int[] rownumber = GVMiStock.GetSelectedRows();
if (rownumber.Length == 0)
{
SystemCommon.ShowInfoMessageBox("请选择出库物料");
return;
}
string PORT = "0";
if (this.comboBox2.Text == "请选择装箱口")
{
SystemCommon.ShowInfoMessageBox("请选择装箱口");
return;
}
else if (this.comboBox2.Text == "平均分")
{
PORT = "0";
}
else
{
PORT = this.comboBox2.Text;
}
for (int i = 0; i < rownumber.Length; i++)
{
string BARCODE = "000000";
string CTL = GVMiStock.GetRowCellValue(rownumber[i], "CTL").ToString();
string tasktype = string.Empty;
DataSet dt = IBussFactory<BussMIStock>.Instance().STATUS_GET(CTL);
if (dt.Tables[0].Rows.Count > 0)
{
SystemCommon.ShowInfoMessageBox("当前库存已是出库中");
return;
}
//更新库存表状态--以箱号或者库位为标准
DataTable tb = IBussFactory<BussMIStock>.Instance().GetMisDataCK_1(BARCODE);
if (tb != null && tb.Rows.Count > 0)
{
string orderstr = "CK" + DateTime.Now.ToString("yyyyMMddHHmmssffffff");
PickingWaveGoodsModel or_Model = new PickingWaveGoodsModel();
or_Model.CUSTOMERMEMBERID = tb.Rows[0]["Docctnumber"].ToString(); //销售订单
or_Model.PICKINGID = orderstr;
//or_Model.PUTIN_ID = orderstr;
//or_Model.OUT_ID = orderstr;
or_Model.GOOD_ID = tb.Rows[0]["GOODS_ID"].ToString();
or_Model.LOC_ID = tb.Rows[0]["LOCATION_ID"].ToString();
or_Model.WARE_DATE = Convert.ToDateTime(DateTime.Now.ToString());
or_Model.PICKING_NUM = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());//SHELVES_NUM
or_Model.BARCODE = BARCODE;
or_Model.CTL = tb.Rows[0]["CTL"].ToString();
or_Model.status = "0";
//or_Model.outStand = this.comboBox1.Text.Trim();
or_Model.typests = "1";
or_Model.CUSTOMER_ID = tb.Rows[0]["CUSTOMER_ID"].ToString();
or_Model.GOODS_NUM_SJ = Convert.ToDecimal(tb.Rows[0]["SHELVES_NUM"].ToString());
or_Model.STORAGE_AREA_ID = tb.Rows[0]["Storage_Id"].ToString();//子库编码
or_Model.PORT = PORT;
or_Model.MISTOCK_NUM = Convert.ToDecimal(tb.Rows[0]["packing_num"].ToString());
string errText = "";
try
{
errText = IBussFactory<BussOrders>.Instance().InsSDOrder(or_Model);
if (errText.Length == 0)
{
//SystemCommon.ShowInfoMessageBox("手动产生出库单成功!");
// IBussFactory<BussOrders>.Instance().UpdateLock(txtLocation.Text.Trim());
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生出库单成功,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 箱码:" + BARCODE);
}
else
{
LogWriteText.WriteLog(DateTime.Now.ToString() + " 手动产生出库单异常,库位:" + or_Model.LOC_ID + " 物料编号:" + or_Model.GOOD_ID + " 箱码:" + BARCODE + ",异常:" + errText);
SystemCommon.ShowInfoMessageBox("错误!" + errText);
}
getList();
BindMiStockData();
txtBoxCode.Text = "";
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("网络连接错误!");
return;
}
}
else
{
SystemCommon.ShowInfoMessageBox("箱号:" + textBox2.Text + " 无库存,请确认箱码是否正确或已出库!!!");
}
}
//loadForm.Dispose();
//loadForm.Close();
SystemCommon.ShowInfoMessageBox("出库任务已生成.");
}
}
}
}