You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
745 lines
33 KiB
745 lines
33 KiB
using NFine.Data.Extensions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using NFine.Code;
|
|
using NFine.Repository;
|
|
using System.Data.Common;
|
|
using NFine.Domain._03_Entity.SRM;
|
|
using ICS.Application.Entity;
|
|
using Newtonsoft.Json;
|
|
using System.Configuration;
|
|
using System.Data.SqlClient;
|
|
using ICS.Data;
|
|
using Newtonsoft.Json.Linq;
|
|
using NFine.Domain._03_Entity.WMS;
|
|
using System.Net;
|
|
using System.IO;
|
|
using Dapper;
|
|
|
|
namespace NFine.Application.WMS
|
|
{
|
|
public class WareHouseLotinspectionApp : RepositoryFactory<ICSVendor>
|
|
{
|
|
public static DataTable MDInvmes = new DataTable();
|
|
|
|
public DataTable GetICSInspect(ref Pagination jqgridparam)
|
|
{
|
|
DataTable dt = new DataTable();
|
|
List<DbParameter> parameter = new List<DbParameter>();
|
|
string sql = @" select a.ID,B.F_ItemName DepName,a.InspectCode,a.Status,Case When a.Type=0 Then '标准检验' ELSE '超期检验' END Type
|
|
,a.Type AS TypeValue
|
|
,a.Memo,a.CreatePerson,a.CreateDateTime,a.MUSER,a.MUSERName
|
|
,a.EATTRIBUTE1 AS DeptCode,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
|
|
a.EATTRIBUTE9,a.EATTRIBUTE10
|
|
from ICSInspect a
|
|
LEFT JOIN (SELECT a. F_ItemCode,a.F_ItemName
|
|
FROM Sys_SRM_ItemsDetail a
|
|
INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_id
|
|
WHERE b.F_EnCode='ApproveRoleConfig') B ON a.EATTRIBUTE1=B.F_ItemCode
|
|
where a.Status='3'";
|
|
sql = string.Format(sql);
|
|
// DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
|
|
return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
|
|
}
|
|
|
|
public DataTable GetICSMOApplyNegDetail(string InspectCode, ref Pagination jqgridparam)
|
|
{
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
DataTable dt = new DataTable();
|
|
//var queryParam = queryJson.ToJObject();
|
|
List<DbParameter> parameter = new List<DbParameter>();
|
|
string sql = @" select a.ID,a.InspectCode,a.LotNo,a.Sequence,b.InvCode,a.Quantity,a.Amount,a.InspectQuantity,a.ExtensionID,a.MUSER
|
|
,a.MUSERName,a.MTIME
|
|
,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
|
|
,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
|
|
a.EATTRIBUTE9,a.EATTRIBUTE10
|
|
from ICSInspectDetail a
|
|
left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
|
|
left join ICSInventoryLot b on b.LotNo=a.LotNo and b.WorkPoint=a.WorkPoint
|
|
WHERE a.InspectCode='" + InspectCode + "' ";
|
|
return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
|
|
}
|
|
|
|
public string DeleteICSInspect(string keyValue)
|
|
{
|
|
//站点信息
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
string msg = "";
|
|
keyValue = keyValue.Substring(1, keyValue.Length - 2);
|
|
string sql = string.Empty;
|
|
try
|
|
{
|
|
|
|
string chksql = @"select LotNo,EATTRIBUTE1 AS DocStatus from ICSInspectDetail
|
|
WHERE InspectCode IN ({0}) AND WorkPoint='{1}'";
|
|
chksql = string.Format(chksql, keyValue.TrimEnd(','), WorkPoint);
|
|
DataTable chkdt = SqlHelper.GetDataTableBySql(chksql);
|
|
foreach (DataRow dr in chkdt.Rows)
|
|
{
|
|
if (dr["DocStatus"].ToString() == "已检验")
|
|
{
|
|
throw new Exception("已经开始检验的单据无法删除!");
|
|
}
|
|
}
|
|
sql += string.Format(@" update ICSWareHouseLotInfo set Inspect=0
|
|
where LotNo IN (select LotNo FROM dbo.ICSInspectDetail WHERE InspectCode IN ({0}) and WorkPoint ='{1}') and WorkPoint='{1}'", keyValue.TrimEnd(','), WorkPoint);
|
|
sql += string.Format(@"DELETE FROM dbo.ICSInspect WHERE InspectCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
|
|
sql += string.Format(@"DELETE FROM dbo.ICSInspectDetail WHERE InspectCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
|
|
|
|
if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
|
|
{
|
|
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
msg = ex.Message;
|
|
}
|
|
return msg;
|
|
}
|
|
public DataTable GetICSInspectTemporary(string InspectCode)
|
|
{
|
|
string sql = @"SELECT a.ID,
|
|
a.InspectCode,
|
|
Case When d.Type=0 Then '标准检验' ELSE '超期检验' END AS DocType,
|
|
c.InvCode,
|
|
a.Quantity,
|
|
a.Amount,
|
|
b.InvName,
|
|
b.InvStd,
|
|
b.InvUnit,
|
|
a.LotNo,
|
|
a.EATTRIBUTE1 AS DocStatus,
|
|
a.InspectQuantity,
|
|
a.ExtensionID,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
|
|
|
|
FROM
|
|
ICSInspectDetail a
|
|
LEFT JOIN ICSInspect d ON d.InspectCode=a.InspectCode and d.WorkPoint=a.WorkPoint
|
|
LEFT JOIN ICSInventoryLot c ON c.LotNo=a.LotNo and c.WorkPoint=a.WorkPoint
|
|
LEFT JOIN ICSInventory b ON c.InvCode = b.InvCode and a.WorkPoint=b.WorkPoint
|
|
left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
|
|
where a.InspectCode='" + InspectCode + "'";
|
|
DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
|
|
DataTable dtCloned = table.Clone();
|
|
foreach (DataColumn col in dtCloned.Columns)
|
|
{
|
|
col.DataType = typeof(string);
|
|
}
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
DataRow newrow = dtCloned.NewRow();
|
|
foreach (DataColumn column in dtCloned.Columns)
|
|
{
|
|
newrow[column.ColumnName] = row[column.ColumnName].ToString();
|
|
|
|
}
|
|
dtCloned.Rows.Add(newrow);
|
|
}
|
|
if (MDInvmes.Rows.Count > 0)
|
|
{
|
|
dtCloned.Merge(MDInvmes, false);
|
|
}
|
|
return dtCloned;
|
|
}
|
|
/// <summary>
|
|
/// 获取检验单单据类型
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public DataTable GetInspectDocType(string ID)
|
|
{
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
string sql = @"select Type,Case When Type=0 then '标准检验' ELSE '超期检验' END AS DocType from ICSInspect
|
|
where ID='{0}' and WorkPoint='{1}'";
|
|
sql = string.Format(sql, ID, WorkPoint);
|
|
DataTable dt = SqlHelper.GetDataTableBySql(sql);
|
|
return dt;
|
|
}
|
|
/// <summary>
|
|
/// 获取检验单检验部门
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public DataTable GetInspectDept(string ID)
|
|
{
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
string sql = "";
|
|
if (ID == "")
|
|
{
|
|
sql = @"select B.F_ItemName AS Name,B.F_ItemCode AS Code from Sys_SRM_Items A
|
|
LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id
|
|
where A.F_EnCode='ApproveRoleConfig'";
|
|
}
|
|
else
|
|
{
|
|
sql = @"select B.F_ItemName AS Name,B.F_ItemCode AS Code into #tempdept from ICSInspect A
|
|
INNER JOIN Sys_SRM_ItemsDetail B ON B.F_ItemCode=A.EATTRIBUTE1
|
|
INNER JOIN Sys_SRM_Items C ON C.F_Id=B.F_ItemId
|
|
where A.ID='{0}' and A.WorkPoint='{1}' AND C.F_EnCode='ApproveRoleConfig'
|
|
UNION ALL
|
|
select B.F_ItemName AS Name,B.F_ItemCode AS Code from Sys_SRM_Items A
|
|
LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id
|
|
where A.F_EnCode='ApproveRoleConfig'
|
|
|
|
select distinct * from #tempdept
|
|
|
|
drop table #tempdept";
|
|
sql = string.Format(sql, ID, WorkPoint);
|
|
}
|
|
DataTable dt = SqlHelper.GetDataTableBySql(sql);
|
|
return dt;
|
|
}
|
|
public void ClearTemp()
|
|
{
|
|
MDInvmes.Rows.Clear();
|
|
}
|
|
|
|
#region 条码验证方法
|
|
/// <summary>
|
|
/// 检查条码状态,验证条码是否可以添加
|
|
/// 规则:已审核的不可再次添加,复审后的允许再次添加
|
|
/// </summary>
|
|
/// <param name="lotNo">单个条码</param>
|
|
/// <returns>验证结果</returns>
|
|
public string SeachInspectLotcheck(string lotNo)
|
|
{
|
|
try
|
|
{
|
|
// 参数验证
|
|
if (string.IsNullOrWhiteSpace(lotNo))
|
|
{
|
|
return JsonConvert.SerializeObject(new { success = false, message = "条码不能为空" });
|
|
}
|
|
|
|
// 检查条码是否为"已审核"状态
|
|
bool isApproved = CheckIfLotIsApproved(lotNo.Trim());
|
|
|
|
if (isApproved)
|
|
{
|
|
// 如果条码状态为"已审核",返回错误信息
|
|
return JsonConvert.SerializeObject(new
|
|
{
|
|
success = false,
|
|
message = $"条码 {lotNo} 已审核,不允许再次添加"
|
|
});
|
|
}
|
|
|
|
// 条码通过验证
|
|
return JsonConvert.SerializeObject(new
|
|
{
|
|
success = true,
|
|
message = "验证通过"
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// 记录异常日志
|
|
string errorMessage = $"SeachInspectLotcheck验证条码{lotNo}状态时发生错误";
|
|
System.Diagnostics.Trace.TraceError($"{errorMessage}: {ex.Message}");
|
|
|
|
return JsonConvert.SerializeObject(new
|
|
{
|
|
success = false,
|
|
message = "验证过程中发生错误,请稍后重试"
|
|
});
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查单个条码是否为"已审核"状态
|
|
/// 规则:已审核的不可再次添加,复审后的允许再次添加
|
|
/// 所以我们只检查条码是否有状态为"已审核"的记录
|
|
/// </summary>
|
|
private bool CheckIfLotIsApproved(string lotNo)
|
|
{
|
|
// 获取数据库连接字符串
|
|
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
|
|
|
|
using (var connection = new SqlConnection(connectionString))
|
|
{
|
|
connection.Open();
|
|
|
|
// 获取当前工作站点
|
|
string workPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
|
|
// 查询条码是否有状态为"已审核"的记录
|
|
// 注意:我们只检查"已审核"状态,"已复审"状态允许再次添加
|
|
string sql = @"
|
|
SELECT TOP 1 1
|
|
FROM ICSInspectDetail d
|
|
WHERE d.LotNo = @LotNo
|
|
AND d.WorkPoint = @WorkPoint
|
|
|
|
AND d.EATTRIBUTE1 = '已审核'
|
|
";
|
|
|
|
|
|
var parameters = new
|
|
{
|
|
LotNo = lotNo,
|
|
WorkPoint = workPoint
|
|
};
|
|
|
|
var result = connection.QueryFirstOrDefault<int>(sql, parameters);
|
|
|
|
return result == 1; // 找到记录表示条码已审核,不允许添加
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 批量检查条码是否可以添加
|
|
/// 规则:已审核的不可再次添加,复审后的允许再次添加
|
|
/// </summary>
|
|
/// <param name="lotNos">条码数组</param>
|
|
/// <returns>验证结果</returns>
|
|
public string SeachInspectLotcheckBatch(string[] lotNos)
|
|
{
|
|
try
|
|
{
|
|
// 参数验证
|
|
if (lotNos == null || lotNos.Length == 0)
|
|
{
|
|
return JsonConvert.SerializeObject(new { success = false, message = "条码列表为空" });
|
|
}
|
|
|
|
// 获取数据库连接字符串
|
|
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
|
|
|
|
using (var connection = new SqlConnection(connectionString))
|
|
{
|
|
connection.Open();
|
|
|
|
// 获取当前工作站点
|
|
string workPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
|
|
// 将数组转换为逗号分隔的字符串
|
|
string lotNoList = string.Join("','", lotNos.Select(l => l.Trim()));
|
|
|
|
// SQL查询语句 - 批量检查状态为"已审核"的条码
|
|
string sql = $@"
|
|
SELECT DISTINCT LotNo
|
|
FROM ICSInspectDetail d
|
|
WHERE d.LotNo IN ('{lotNoList}')
|
|
AND d.WorkPoint = '{workPoint}'
|
|
|
|
AND d.EATTRIBUTE1 = '已审核'
|
|
ORDER BY LotNo
|
|
";
|
|
|
|
// 查询状态为"已审核"的条码
|
|
var approvedLots = connection.Query<string>(sql).ToList();
|
|
|
|
if (approvedLots != null && approvedLots.Count > 0)
|
|
{
|
|
return JsonConvert.SerializeObject(new
|
|
{
|
|
success = false,
|
|
message = $"条码 {string.Join(", ", approvedLots)} 已审核,不允许再次添加"
|
|
});
|
|
}
|
|
|
|
// 所有条码都通过验证
|
|
return JsonConvert.SerializeObject(new
|
|
{
|
|
success = true,
|
|
message = "验证通过"
|
|
});
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// 记录异常日志
|
|
string errorMessage = $"SeachInspectLotcheckBatch验证条码状态时发生错误";
|
|
System.Diagnostics.Trace.TraceError($"{errorMessage}: {ex.Message}");
|
|
|
|
return JsonConvert.SerializeObject(new
|
|
{
|
|
success = false,
|
|
message = "验证过程中发生错误,请稍后重试"
|
|
});
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
public DataTable GetInspectLot(string invcode, string WHCode, string InspectType, ref Pagination jqgridparam)
|
|
{
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
List<DbParameter> parameter = new List<DbParameter>();
|
|
DataTable table = new DataTable();
|
|
string wherestr = "";
|
|
if (!string.IsNullOrEmpty(invcode))
|
|
{
|
|
wherestr += " and a.InvCode like '%" + invcode + "%'";
|
|
}
|
|
if (!string.IsNullOrEmpty(WHCode))
|
|
{
|
|
wherestr += " and a.WarehouseCode like '%" + WHCode + "%'";
|
|
}
|
|
if (InspectType == "0")
|
|
{
|
|
wherestr += " and B.ExpirationDate>GETDATE()";
|
|
}
|
|
else
|
|
{
|
|
wherestr += " and B.ExpirationDate<GETDATE()";
|
|
}
|
|
string sql = @" select A.ID,A.LotNo,A.InvCode,C.InvName,C.InvStd,C.InvUnit,A.Quantity,B.Amount,B.ExtensionID
|
|
,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
|
|
from ICSWareHouseLotInfo A
|
|
INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint
|
|
INNER JOIN ICSInventory C ON C.InvCode=A.InvCode AND B.WorkPoint=A.WorkPoint
|
|
LEFT JOIN ICSExtension F ON F.ID=B.ExtensionID AND F.WorkPoint=B.WorkPoint
|
|
where ISNULL(A.LockQuantity,0)=0 AND A.Quantity>0 AND C.InvOQC=1 AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM ICSInspect a2
|
|
INNER JOIN ICSInspectDetail d2 ON d2.InspectCode = a2.InspectCode AND d2.WorkPoint = a2.WorkPoint
|
|
LEFT JOIN dbo.ICSInventoryLot e2 ON e2.LotNo = d2.LotNo AND e2.WorkPoint = d2.WorkPoint
|
|
LEFT JOIN dbo.ICSWareHouseLotInfo g2 ON g2.LotNo = e2.LotNo AND g2.WorkPoint = e2.WorkPoint
|
|
WHERE g2.LotNo IS NOT NULL
|
|
AND d2.EATTRIBUTE1 IN( '已检验', '已审核','未检验' )
|
|
|
|
AND CONVERT(DECIMAL(18,4), ISNULL(d2.InspectQuantity, 0)) != CONVERT(DECIMAL(18,4), ISNULL(d2.Quantity, 0))
|
|
-- 关联条件
|
|
AND d2.LotNo = A.LotNo
|
|
AND d2.WorkPoint = A.WorkPoint
|
|
)AND A.WorkPoint='" + WorkPoint + "'" + wherestr
|
|
;
|
|
//sql += " Order BY f.BatchCode";
|
|
return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
|
|
|
|
}
|
|
|
|
public void AddMOApplyNegTemp(string json)
|
|
{
|
|
var data = json.ToJObject();
|
|
if (MDInvmes.Columns.Count <= 0)
|
|
{
|
|
MDInvmes.Columns.Add("ZJID", typeof(string));
|
|
MDInvmes.Columns.Add("InvCode", typeof(string));
|
|
MDInvmes.Columns.Add("INVNAME", typeof(string));
|
|
MDInvmes.Columns.Add("InvStd", typeof(string));
|
|
MDInvmes.Columns.Add("InvUnit", typeof(string));
|
|
MDInvmes.Columns.Add("Quantity", typeof(string));
|
|
MDInvmes.Columns.Add("IssueNegQuantity", typeof(string));
|
|
MDInvmes.Columns.Add("ExtensionID", typeof(string));
|
|
MDInvmes.Columns.Add("Amount", typeof(string));
|
|
MDInvmes.Columns.Add("ID", typeof(string));
|
|
}
|
|
string usercode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
|
|
DataRow newrow = MDInvmes.NewRow();
|
|
newrow["ZJID"] = data["ZJID"];
|
|
newrow["InvName"] = data["InvName"];
|
|
newrow["InvCode"] = data["InvCode"];
|
|
newrow["InvStd"] = data["InvStd"];
|
|
newrow["InvUnit"] = data["InvUnit"];
|
|
newrow["Amount"] = data["Amount"];
|
|
newrow["IssueNegQuantity"] = data["IssueNegQuantity"];
|
|
newrow["ExtensionID"] = data["ExtensionID"];
|
|
newrow["Quantity"] = "";
|
|
newrow["ID"] = data["ID"];
|
|
MDInvmes.Rows.Add(newrow);
|
|
|
|
}
|
|
|
|
public void UpdateMOApplyNegTemp(string json)
|
|
{
|
|
var data = json.ToJObject();
|
|
string usercode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
|
|
var info = MDInvmes.Select(string.Format("TLZID='{0}'", data["TLZID"]));
|
|
if (info != null && info.Length > 0)
|
|
{
|
|
info[0]["ZJID"] = data["ZJID"];
|
|
info[0]["InvName"] = data["InvName"];
|
|
info[0]["InvCode"] = data["InvCode"];
|
|
info[0]["InvStd"] = data["InvStd"];
|
|
info[0]["InvUnit"] = data["InvUnit"];
|
|
info[0]["Amount"] = data["Amount"];
|
|
info[0]["IssueNegQuantity"] = data["IssueNegQuantity"];
|
|
info[0]["ExtensionID"] = data["ExtensionID"];
|
|
info[0]["Quantity"] = 0;
|
|
}
|
|
else
|
|
{
|
|
DataRow newrow = MDInvmes.NewRow();
|
|
newrow["ZJID"] = data["ZJID"];
|
|
newrow["InvName"] = data["InvName"];
|
|
newrow["InvCode"] = data["InvCode"];
|
|
newrow["InvStd"] = data["InvStd"];
|
|
newrow["InvUnit"] = data["InvUnit"];
|
|
newrow["Amount"] = data["Amount"];
|
|
newrow["IssueNegQuantity"] = data["IssueNegQuantity"];
|
|
newrow["ExtensionID"] = data["ExtensionID"];
|
|
newrow["Quantity"] = 0;
|
|
newrow["ID"] = data["ID"];
|
|
newrow["TLZID"] = data["TLZID"];
|
|
MDInvmes.Rows.Add(newrow);
|
|
}
|
|
}
|
|
|
|
public string SaveInspect(string LotNOList, string DocType, string DeptCode, string Memo)
|
|
{
|
|
string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
|
|
string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
string msg = "";
|
|
string sql = string.Empty;
|
|
try
|
|
{
|
|
string codes = string.Empty;
|
|
//获取单号
|
|
sql = @"DECLARE @MaxNO INT,@date varchar(20)='LOTIA'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
|
|
SELECT @MaxNO=SUBSTRING(MAX(InspectCode),LEN(@date)+1,LEN(MAX(InspectCode))-LEN(@date))+1 FROM ICSInspect
|
|
WHERE SUBSTRING(InspectCode, 1, LEN(@date))=@date
|
|
IF @MaxNO IS NULL
|
|
BEGIN
|
|
SELECT @date+'00001' AS Code
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
|
|
END ";
|
|
string Code = Repository().FindDataSetBySql(sql).Tables[0].Rows[0]["Code"].ToString();
|
|
//创建主表
|
|
sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{5}')
|
|
BEGIN
|
|
RAISERROR('操作人:{2} 不存在!',16,1);
|
|
RETURN
|
|
END
|
|
|
|
insert into ICSInspect
|
|
(ID,InspectCode,Status,Type,Memo,CreatePerson,CreateDateTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
|
|
values
|
|
(NEWID(),'{0}','3','{1}','{7}','{2}','{3}','{2}','{4}','{3}','{5}','{6}')
|
|
";
|
|
sql = string.Format(sql, Code, DocType, MUSER, DateTime.Now, MUSERNAME, WorkPoint, DeptCode, Memo);
|
|
|
|
int LineNO = 0;
|
|
List<string> chkLotNoList = new List<string>();
|
|
foreach (string LotNo in LotNOList.Split(','))
|
|
{
|
|
LineNO++;
|
|
// 创建子表,并修改条码库存检验状态为检验中
|
|
sql += @" INSERT INTO ICSInspectDetail(ID,InspectCode,Sequence,LotNo,Quantity,Amount,InspectQuantity,
|
|
ExtensionID,MUSER,
|
|
MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
|
|
select NEWID(),'{0}','{1}',A.LotNo,A.Quantity
|
|
,B.Amount,0,B.ExtensionID,'{2}','{3}',GETDATE(),'{4}','未检验'
|
|
from ICSWareHouseLotInfo A
|
|
INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint
|
|
where A.LotNo='{5}' AND A.WorkPoint='{4}'
|
|
update ICSWareHouseLotInfo set Inspect=1
|
|
where LotNo='{5}' and WorkPoint='{4}'";
|
|
sql = string.Format(sql, Code, LineNO, MUSER, MUSERNAME, WorkPoint, LotNo);
|
|
|
|
if (chkLotNoList.Contains(LotNo))
|
|
{
|
|
throw new Exception("检验条码不可重复添加!");
|
|
}
|
|
chkLotNoList.Add(LotNo);
|
|
}
|
|
|
|
|
|
if (SqlHelper.ExecuteNonQuery(sql) == 0)
|
|
{
|
|
throw new Exception("检验单信息创建失败!");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
|
|
return msg;
|
|
}
|
|
|
|
public string UpdateInspect(string InspectCode, string LotNOList, string DeptCode, string Memo)
|
|
{
|
|
string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
|
|
string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
|
|
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
|
|
string msg = "";
|
|
string sql = string.Empty;
|
|
try
|
|
{
|
|
List<string> LotList = LotNOList.Split(',').ToList();
|
|
string codes = string.Empty;
|
|
//获取单号
|
|
string chksql = @"SELECT LotNo,Sequence FROM ICSInspectDetail
|
|
WHERE InspectCode='{0}' AND WorkPoint='{1}'
|
|
ORDER BY Sequence DESC";
|
|
chksql = string.Format(chksql, InspectCode, WorkPoint);
|
|
DataTable dt = SqlHelper.GetDataTableBySql(chksql);
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
if (LotList.Contains(dr["LotNo"].ToString()))
|
|
{
|
|
LotList.Remove(dr["LotNo"].ToString());
|
|
}
|
|
else
|
|
{
|
|
sql += "delete from ICSInspectDetail where InspectCode='{0}' AND LotNo='{1}' AND WorkPoint='{2}' ";
|
|
sql = string.Format(sql, InspectCode, dr["LotNo"].ToString(), WorkPoint);
|
|
}
|
|
}
|
|
|
|
int LineNO = Convert.ToInt32(dt.Rows[0]["Sequence"]);
|
|
List<string> chkLotNoList = new List<string>();
|
|
foreach (string LotNo in LotList)
|
|
{
|
|
LineNO++;
|
|
// 创建子表
|
|
sql += @" update ICSInspect set EATTRIBUTE1='{6}',Memo='{7}'
|
|
where InspectCode='{0}' and WorkPoint='{4}'
|
|
INSERT INTO ICSInspectDetail(ID,InspectCode,Sequence,LotNo,Quantity,Amount,InspectQuantity,
|
|
ExtensionID,MUSER,
|
|
MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
|
|
select NEWID(),'{0}','{1}',A.LotNo,A.Quantity
|
|
,B.Amount,0,B.ExtensionID,'{2}','{3}',GETDATE(),'{4}','未检验'
|
|
from ICSWareHouseLotInfo A
|
|
INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint
|
|
where A.LotNo='{5}' AND A.WorkPoint='{4}'";
|
|
sql = string.Format(sql, InspectCode, LineNO, MUSER, MUSERNAME, WorkPoint, LotNo, DeptCode, Memo);
|
|
|
|
if (chkLotNoList.Contains(LotNo))
|
|
{
|
|
throw new Exception("检验条码不可重复添加!");
|
|
}
|
|
chkLotNoList.Add(LotNo);
|
|
}
|
|
|
|
|
|
if (SqlHelper.ExecuteNonQuery(sql) == 0)
|
|
{
|
|
throw new Exception("检验单信息修改失败!");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
|
|
return msg;
|
|
}
|
|
public DataTable GetICSMOApplyNegDetailTemp(string ApplyNegCode)
|
|
{
|
|
string sql = @"SELECT
|
|
a.ID,
|
|
a.ID as TLZID,
|
|
a.ApplyNegCode,
|
|
a.InvCode,
|
|
a.Quantity,
|
|
a.Amount,
|
|
a.SourceDetailID as ZJID,
|
|
b.InvName,
|
|
b.InvStd,
|
|
b.InvUnit,
|
|
a.IssueNegQuantity,
|
|
a.ExtensionID,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
|
|
|
|
FROM
|
|
ICSMOApplyNegDetail a
|
|
LEFT JOIN ICSInventory b ON a.InvCode = b.InvCode and a.WorkPoint=b.WorkPoint
|
|
|
|
left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
|
|
where a.ApplyNegCode='" + ApplyNegCode + "'";
|
|
DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
|
|
if (MDInvmes == null || MDInvmes.Columns.Count <= 0)
|
|
MDInvmes = table.Clone();
|
|
DataTable dtCloned = table.Clone();
|
|
foreach (DataColumn col in dtCloned.Columns)
|
|
{
|
|
col.DataType = typeof(string);
|
|
}
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
DataRow newrow = dtCloned.NewRow();
|
|
foreach (DataColumn column in dtCloned.Columns)
|
|
{
|
|
newrow[column.ColumnName] = row[column.ColumnName].ToString();
|
|
|
|
}
|
|
dtCloned.Rows.Add(newrow);
|
|
}
|
|
if (MDInvmes.Rows.Count > 0)
|
|
{
|
|
//dtCloned.Merge(Invmes, false);
|
|
foreach (DataRow data in MDInvmes.Rows)
|
|
{
|
|
|
|
var info = dtCloned.Select(string.Format("TLZID='{0}'", data["TLZID"]));
|
|
if (info != null && info.Length > 0)
|
|
{
|
|
info[0]["ZJID"] = data["ZJID"];
|
|
info[0]["InvName"] = data["InvName"];
|
|
info[0]["InvCode"] = data["InvCode"];
|
|
info[0]["InvStd"] = data["InvStd"];
|
|
info[0]["InvUnit"] = data["InvUnit"];
|
|
info[0]["Amount"] = data["Amount"];
|
|
info[0]["IssueNegQuantity"] = data["IssueNegQuantity"];
|
|
info[0]["ExtensionID"] = data["ExtensionID"];
|
|
info[0]["Quantity"] = 0;
|
|
}
|
|
else
|
|
{
|
|
DataRow newrow = dtCloned.NewRow();
|
|
newrow["ZJID"] = data["ZJID"];
|
|
newrow["InvName"] = data["InvName"];
|
|
newrow["InvCode"] = data["InvCode"];
|
|
newrow["InvStd"] = data["InvStd"];
|
|
newrow["InvUnit"] = data["InvUnit"];
|
|
newrow["Amount"] = data["Amount"];
|
|
newrow["Quantity"] = 0;
|
|
newrow["ID"] = data["ID"];
|
|
newrow["TLZID"] = data["TLZID"];
|
|
newrow["IssueNegQuantity"] = data["IssueNegQuantity"];
|
|
newrow["ExtensionID"] = data["ExtensionID"];
|
|
dtCloned.Rows.Add(newrow);
|
|
}
|
|
}
|
|
}
|
|
return dtCloned;
|
|
}
|
|
|
|
public string UpdateICSMOApplyNeg(string ICSASN)
|
|
{
|
|
string msg = "";
|
|
string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "MOIssueDocNegativeApply/Update";
|
|
string result = HttpPost(APIURL, ICSASN);
|
|
JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
|
|
string MessAge = Obj["Message"].ToString();
|
|
string Success = Obj["Success"].ToString();
|
|
if (Success.ToUpper() == "FALSE")
|
|
{
|
|
msg = MessAge;
|
|
}
|
|
return msg;
|
|
}
|
|
public static string HttpPost(string url, string body)
|
|
{
|
|
try
|
|
{
|
|
Encoding encoding = Encoding.UTF8;
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
request.Method = "POST";
|
|
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
|
|
request.ContentType = "application/json; charset=utf-8";
|
|
|
|
byte[] buffer = encoding.GetBytes(body);
|
|
request.ContentLength = buffer.Length;
|
|
request.GetRequestStream().Write(buffer, 0, buffer.Length);
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
|
|
{
|
|
return reader.ReadToEnd();
|
|
}
|
|
}
|
|
catch (WebException ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|