using ICS.WCF.Base;
using ICSSoft.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
namespace ICS.LotNoInfoGet
{
public class GetLotNoInfo
{
///
/// 获取物料条码信息生成条码
///
public FormICSCreatedArrivalNoticeModel CustGetLotNoInfo(List lstl)
{
FormICSCreatedArrivalNoticeModel result = new FormICSCreatedArrivalNoticeModel();
using (SqlConnection conn = new SqlConnection(Appconfig.GetMESStr()))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
try
{
string sql = "";
int flag = 0;
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.Transaction = trans;
StringBuilder str = new StringBuilder();
foreach (LotNoValues l in lstl)
{
string chksql = @"select * from ICSItemLot where LotNo='{0}' AND WorkPoint='{1}'";
chksql = string.Format(chksql, l.LotNo, l.WorkPoint);
DataTable chkdt = SQlReturnData(chksql, cmd);
if (chkdt.Rows.Count != 0)
{
str.AppendLine("传入条码:" + l.LotNo + "已存在");
continue;
}
if (l.LotType == 0)
{
foreach (POInfo poinfo in l.PoInfoList)
{
chksql = @"select * from ICSPO_PoMain
where POCode='{0}' AND PORow='{1}'";
chksql = string.Format(chksql, poinfo.POCode, poinfo.PORow);
chkdt = SQlReturnData(chksql, cmd);
if (chkdt.Rows.Count == 0)
{
throw new Exception("传入采购订单号:" + poinfo.POCode + ",行号:" + poinfo.PORow + "不存在,无法创建条码!");
}
}
sql = @"INSERT INTO ICSITEMLot
( ID ,LotNO ,ItemCODE ,TransNO ,TransLine ,VENDORITEMCODE ,VENDORCODE ,
VenderLotNO ,PRODUCTDATE ,LOTQTY ,ACTIVE ,Exdate ,WorkPoint ,
MUSER ,MUSERName ,MTIME ,TYPE,ORDERNO)
SELECT NEWID(),'" + l.LotNo + "',InvCode,'','','',VenCode,'" + l.VendorLot + "',GETDATE(),'" +
l.LOTQTY + "','Y','2999-12-31 00:00:00.000','" + l.WorkPoint + "','" +
l.MUSER + "','" + l.MUSERNAME + @"',GETDATE(),'采购原料',ORDERNO
FROM dbo.ICSPO_PoMain WHERE POCode='" + l.PoInfoList[0].POCode + "' AND PORow='"
+ l.PoInfoList[0].PORow + "' AND WorkPoint='" + l.WorkPoint + "'";
cmd.CommandText = sql;
flag = cmd.ExecuteNonQuery();
StringBuilder resultlog = new StringBuilder();
if (flag <= 0)
{
resultlog.AppendLine("生成物料条码失败");
resultlog.AppendLine("查询sql:" + sql);
Appconfig.WriteLogFile(resultlog.ToString(), "获取生成条码接口日志");
throw new Exception("生成条码失败");
}
foreach (POInfo p in l.PoInfoList)
{
sql = @"INSERT INTO ICSLot2Doc (ID,LotNO,DocType,TransNO,TransLine,LinkQty,MTIME,MUSER,MUSERNAME,WorkPoint)
select NEWID(),LotNO,'采购订单','" + p.POCode + "','" + p.PORow +
"'," + p.LinkQty + ",MTIME,MUSER,MUSERName,WorkPoint from ICSITEMLot where LotNO='" + l.LotNo + "' ";
cmd.CommandText = sql;
flag = cmd.ExecuteNonQuery();
if (flag <= 0)
{
resultlog.AppendLine("物料内箱信息添加失败");
resultlog.AppendLine("查询sql:" + sql);
Appconfig.WriteLogFile(resultlog.ToString(), "获取生成条码接口日志");
throw new Exception("物料内箱信息添加失败");
}
}
}
else if (l.LotType == 1)
{
string WHID = "";
string StackID = "";
string BinCode = fenge(l.BinCode);
if (!string.IsNullOrWhiteSpace(l.WHCode) && !string.IsNullOrWhiteSpace(BinCode))
{
chksql = @"select Serial from ICSStorage
WHERE StorageCode='{0}' and WorkPoint='{1}'";
chksql = string.Format(chksql, l.WHCode, l.WorkPoint);
chkdt = SQlReturnData(chksql, cmd);
if (chkdt.Rows.Count == 0)
{
throw new Exception("传入仓库:" + l.WHCode + "不存在,无法创建条码!");
}
else
{
WHID = chkdt.Rows[0]["Serial"].ToString();
}
chksql = @"select Serial from ICSStack
WHERE StackCode = '{0}' and Storage_Serial='{1}' and WorkPoint='{2}'";
chksql = string.Format(chksql, BinCode, WHID, l.WorkPoint);
chkdt = SQlReturnData(chksql, cmd);
if (chkdt.Rows.Count == 0)
{
str.AppendLine("传入库位:" + BinCode + "不存在!");
continue;
}
else
{
StackID = chkdt.Rows[0]["Serial"].ToString();
}
}
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'" + l.LotNo + "','" + WHID + "','" + l.WHCode + "','" + StackID + "','"
+ BinCode + "','1002107293539020','1250020051' ,'" + l.LOTQTY + "',GETDATE(),'" + l.WorkPoint + "','" + l.MUSER + "','"
+ l.MUSERNAME + "',GETDATE(),'期初',null,0,'')";
cmd.CommandText = sql;
flag = cmd.ExecuteNonQuery();
StringBuilder resultlog = new StringBuilder();
if (flag <= 0)
{
throw new Exception("生成库存失败");
}
sql = @"INSERT INTO ICSITEMLot
( ID ,LotNO ,ItemCODE ,TransNO ,TransLine ,VENDORITEMCODE ,VENDORCODE ,
VenderLotNO ,PRODUCTDATE ,LOTQTY ,ACTIVE ,Exdate ,WorkPoint ,
MUSER ,MUSERName ,MTIME ,EATTRIBUTE1,TYPE,ORDERNO)
values (NEWID(),'" + l.LotNo + "','1250020051','','','','','" + l.VendorLot + "',GETDATE(),'" +
l.LOTQTY + "','Y','2999-12-31 00:00:00.000','" + l.WorkPoint + "','" +
l.MUSER + "','" + l.MUSERNAME + @"',GETDATE(),'期初','原材料','')";
cmd.CommandText = sql;
flag = cmd.ExecuteNonQuery();
resultlog = new StringBuilder();
if (flag <= 0)
{
throw new Exception("生成条码失败");
}
if (l.PoInfoList != null && l.PoInfoList.Count > 0)
{
foreach (POInfo p in l.PoInfoList)
{
sql = @"INSERT INTO ICSLot2Doc (ID,LotNO,DocType,TransNO,TransLine,LinkQty,MTIME,MUSER,MUSERNAME,WorkPoint)
select NEWID(),LotNO,'期初','" + p.POCode + "','" + p.PORow +
"'," + p.LinkQty + ",MTIME,MUSER,MUSERName,WorkPoint from ICSITEMLot where LotNO='" + l.LotNo + "' ";
cmd.CommandText = sql;
flag = cmd.ExecuteNonQuery();
if (flag <= 0)
{
throw new Exception("物料内箱信息添加失败");
}
}
}
}
else
{
throw new Exception("传入数据错误");
}
}
trans.Commit();
Appconfig.WriteLogFile(str.ToString(), "获取生成条码接口日志(无效数据)");
result.Code = 0;
result.ResMsg = "物料条码生成成功";
result.ResData = "{}";
result.IsCompress = false;
result.IsSuccess = true;
}
catch (Exception ex)
{
StringBuilder str = new StringBuilder();
result.Code = -1;
result.ResMsg = ex.Message;
result.ResData = "{}";
result.IsCompress = false;
result.IsSuccess = true;
str.AppendLine("物料信息获取失败");
str.AppendLine("失败原因:" + ex.Message);
Appconfig.WriteLogFile(str.ToString(), "获取生成条码接口日志");
trans.Rollback();
}
}
conn.Close();
}
return result;
}
//库位转换
public string fenge(string sourceString)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < sourceString.Length; i++)
{
if (i == 0 || i == 3)
{
sb.Append(sourceString[i].ToString()).Append("-");
}
else
{
sb.Append(sourceString[i]);
}
}
return sb.ToString();
}
///
/// 送货单返回值
///
public class FormICSCreatedArrivalNoticeModel
{
//0 :正常数据,-1:失败。
public int Code { get; set; }
public string ResMsg { get; set; }
public Object ResData { get; set; }
public bool IsCompress { get; set; }
public bool IsSuccess { get; set; }
}
///
/// SQL执行方法
///
///
///
///
public static DataTable SQlReturnData(string SQl, SqlCommand cmd)
{
DataTable dt = new DataTable();
cmd.CommandText = SQl;
SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
dr.SelectCommand = cmd;
dr.Fill(dt);
return dt;
}
}
}