纽威
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.
 
 
 
 
 

441 lines
24 KiB

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ICSSoft.Common;
using ICSSoft.Entity;
namespace ICSSoft.DataProject
{
public class ISComplete
{
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"];
public string ConfirmRd08(List<Complete> Bills)
{
int isif = 0;
DataSet ds = null;
string mag = "";
string sql = "";
DataTable dtCheck = null;
string connS = "";
string newsql="";
VouchKey key = new VouchKey();
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
List<string> result = Bills.Select(t => t.WorkPoint).Distinct().ToList();
foreach (string WorkPoint in result)
{
try
{
connS = string.Format(connString, WorkPoint);
conn = new System.Data.SqlClient.SqlConnection(connS);
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
cmd = new SqlCommand();
cmd.Transaction = sqlTran;
cmd.Connection = conn;
foreach (Complete head in Bills)
{
if (WorkPoint != head.WorkPoint)
{
continue;
}
if (head.Type == "生产订单")
{
sql = @" select
count(c.AllocateID) num,d.number
from DBO.mom_order a
left join DBO.mom_orderdetail b on a.moid = b.moid
left join DBO.mom_moallocate c on b.modid = c.modid
left join(select modid,COUNT(AllocateID) number from DBO.mom_moallocate where WIPType=1 GROUP BY modid
) d on b.modid = d.modid
where b.MoDId='{0}'
GROUP BY d.number ";
sql = string.Format(sql, head.DetailID);
dtCheck = DBHelper.SQlReturnData(sql, cmd);
if (dtCheck != null && dtCheck.Rows.Count > 0)
{
if (dtCheck.Rows[0]["num"].ToString() != dtCheck.Rows[0]["number"].ToString())
{
isif = 1;
}
else
{
isif = 0;
}
}
newsql = "where b.MoDId='{0}'";
newsql = string.Format(newsql, head.DetailID);
#region 齐套检验
sql = @" select cValue from AccInformation where cName=N'iMOProInCtrlBySet' ";
DataTable qt = DBHelper.SQlReturnData(sql, cmd);
if (qt != null && qt.Rows.Count > 0)
{
if (qt.Rows[0]["cValue"].ToString() == "1")
{
sql = @"select MoCode,SortSeq,MIN(lotqty) min_lotqty from
(
select
a.MoCode,b.SortSeq,
case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId
end as AllocateId,sum(c.Qty) as Qty,SUM(c.IssQty) IssQty,SUM(c.IssQty)/(SUM(c.Qty)/b.Qty) lotqty
from DBO.mom_order a
left join DBO.mom_orderdetail b on a.moid = b.moid
left join DBO.mom_moallocate c on b.modid = c.modid
left join
(select d.AllocateId,e.InvCode,d.MoallocateSubId from
DBO.mom_moallocatesub d
left join DBO.bas_part e ON d.partid = e.PartId ) aa on c.MoallocateSubId=aa.MoallocateSubId
left join DBO.Inventory_Sub f on c.InvCode=f.cInvSubCode
where b.MoDId='{0}'
and c.WIPType<>1 and c.Qty<>0 and c.ByproductFlag<>1
group by a.MoCode,b.SortSeq,case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId end ,b.Qty
) tt
group by MoCode,SortSeq";
sql = string.Format(sql, head.DetailID);
}
else if (qt.Rows[0]["cValue"].ToString() == "2")
{
sql = @"select cValue from AccInformation where cName=N'bControlKeyMaterial'";
qt = DBHelper.SQlReturnData(sql, cmd);
if (qt != null && qt.Rows.Count > 0)
{
if (qt.Rows[0]["cValue"].ToString() == "true")
{
sql = @"select MoCode,SortSeq,MIN(lotqty) min_lotqty from
(
select
a.MoCode,b.SortSeq,
case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId
end as AllocateId,sum(c.Qty) as Qty,SUM(c.IssQty) IssQty,SUM(c.IssQty)/(SUM(c.Qty)/b.Qty) lotqty
from DBO.mom_order a
left join DBO.mom_orderdetail b on a.moid = b.moid
left join DBO.mom_moallocate c on b.modid = c.modid
left join
(select d.AllocateId,e.InvCode,d.MoallocateSubId from
DBO.mom_moallocatesub d
left join DBO.bas_part e ON d.partid = e.PartId ) aa on c.MoallocateSubId=aa.MoallocateSubId
left join DBO.Inventory_Sub f on c.InvCode=f.cInvSubCode
where b.MoDId='{0}'
and c.WIPType<>1 and c.Qty<>0 and c.ByproductFlag<>1 and f.bInvKeyPart=1
group by a.MoCode,b.SortSeq,case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId end ,b.Qty
) tt
group by MoCode,SortSeq";
sql = string.Format(sql, head.DetailID);
}
else
{
sql = @"select MoCode,SortSeq,MIN(lotqty) min_lotqty from
(
select
a.MoCode,b.SortSeq,
case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId
end as AllocateId,sum(c.Qty) as Qty,SUM(c.IssQty) IssQty,SUM(c.IssQty)/(SUM(c.Qty)/b.Qty) lotqty
from DBO.mom_order a
left join DBO.mom_orderdetail b on a.moid = b.moid
left join DBO.mom_moallocate c on b.modid = c.modid
left join
(select d.AllocateId,e.InvCode,d.MoallocateSubId from
DBO.mom_moallocatesub d
left join DBO.bas_part e ON d.partid = e.PartId ) aa on c.MoallocateSubId=aa.MoallocateSubId
left join DBO.Inventory_Sub f on c.InvCode=f.cInvSubCode
where b.MoDId='{0}'
and c.WIPType<>1 and c.Qty<>0 and c.ByproductFlag<>1
group by a.MoCode,b.SortSeq,case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId end ,b.Qty
) tt
group by MoCode,SortSeq";
sql = string.Format(sql, head.DetailID);
}
}
}
else
{
sql = @"select MoCode,SortSeq,MIN(lotqty) min_lotqty from
(
select
a.MoCode,b.SortSeq,
case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId
end as AllocateId,sum(c.Qty) as Qty,SUM(c.IssQty) IssQty,SUM(c.IssQty)/(SUM(c.Qty)/b.Qty) lotqty
from DBO.mom_order a
left join DBO.mom_orderdetail b on a.moid = b.moid
left join DBO.mom_moallocate c on b.modid = c.modid
left join
(select d.AllocateId,e.InvCode,d.MoallocateSubId from
DBO.mom_moallocatesub d
left join DBO.bas_part e ON d.partid = e.PartId ) aa on c.MoallocateSubId=aa.MoallocateSubId
left join DBO.Inventory_Sub f on c.InvCode=f.cInvSubCode
where b.MoDId='{0}'
and c.WIPType<>1 and c.Qty<>0 and c.ByproductFlag<>1
group by a.MoCode,b.SortSeq,case when aa.AllocateId IS null then c.AllocateId else aa.AllocateId end ,b.Qty
) tt
group by MoCode,SortSeq";
sql = string.Format(sql, head.DetailID);
}
}
#endregion
}
else
{
sql = @" select
count(c.MOMaterialsID) num,d.number
from DBO.OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join(select MODetailsID,COUNT(MOMaterialsID) number from DBO.OM_MOMaterials where iWIPtype=1 GROUP BY MODetailsID
) d on b.MODetailsID = d.MODetailsID
where b.MODetailsID='{0}'
GROUP BY d.number ";
sql = string.Format(sql, head.DetailID);
dtCheck = DBHelper.SQlReturnData(sql, cmd);
if (dtCheck != null && dtCheck.Rows.Count > 0)
{
if (dtCheck.Rows[0]["num"].ToString() != dtCheck.Rows[0]["number"].ToString())
{
isif = 1;
}
else
{
isif = 0;
}
}
newsql = " where b.MODetailsID='{0}' ";
newsql = string.Format(newsql, head.DetailID);
#region 齐套检验
sql = @" select cValue from AccInformation where cName=N'iMOProInCtrlBySet' ";
DataTable qt = DBHelper.SQlReturnData(sql, cmd);
if (qt != null && qt.Rows.Count > 0)
{
if (qt.Rows[0]["cValue"].ToString() == "1")
{
sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
(
select
a.cCode,b.iVouchRowNo,
c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
from DBO.OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
where b.MODetailsID='{0}'
and c.iQuantity<>0 and c.iWIPtype<>1
group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
) tt
group by cCode,iVouchRowNo";
sql = string.Format(sql, head.DetailID);
}
else if (qt.Rows[0]["cValue"].ToString() == "2")
{
sql = @"select cValue from AccInformation where cName=N'bControlKeyMaterial'";
qt = DBHelper.SQlReturnData(sql, cmd);
if (qt != null && qt.Rows.Count > 0)
{
if (qt.Rows[0]["cValue"].ToString() == "true")
{
sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
(
select
a.cCode,b.iVouchRowNo,
c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
from DBO.OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
where b.MODetailsID='{0}'
and c.iQuantity<>0 and c.iWIPtype<>1 and f.bInvKeyPart=1
group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
) tt
group by cCode,iVouchRowNo";
sql = string.Format(sql, head.DetailID);
qt = DBHelper.SQlReturnData(sql, cmd);
}
else
{
sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
(
select
a.cCode,b.iVouchRowNo,
c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
from DBO.OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
where b.MODetailsID='{0}'
and c.iQuantity<>0 and c.iWIPtype<>1
group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
) tt
group by cCode,iVouchRowNo";
sql = string.Format(sql, head.DetailID);
qt = DBHelper.SQlReturnData(sql, cmd);
}
}
}
else
{
sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
(
select
a.cCode,b.iVouchRowNo,
c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
from DBO.OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
where b.MODetailsID='{0}'
and c.iQuantity<>0
group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
) tt
group by cCode,iVouchRowNo";
sql = string.Format(sql, head.DetailID);
}
}
#endregion
}
if (head.Type == "生产订单")
{
if (isif == 0)
{
sql = @"select DISTINCT a.MoCode,b.SortSeq,C.SortSeq SubSortSeq,(case isnull(d.min_lotqty,0) when 0 then b.Qty else d.min_lotqty end) min_lotqty,
b.Qty,b.QualifiedInQty,b.InvCode,c.InvCode subInvCode,c.Qty AxuQTY,c.IssQty
into #info
from mom_order a
LEFT JOIN mom_orderdetail b on a.moid = b.moid
LEFT JOIN mom_moallocate c on b.modid = c.modid
left join (" + sql + @") d on a.MoCode=d.MoCode and b.SortSeq=d.SortSeq
1=1
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,min_lotqty,Qty,QualifiedInQty,InvCode from #info
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,SubSortSeq,subInvCode,AxuQTY,IssQty from #info
drop table #info
";
}
else
{
sql = @"select DISTINCT a.MoCode,b.SortSeq,C.SortSeq SubSortSeq,isnull(d.min_lotqty,0) min_lotqty,b.Qty,b.QualifiedInQty,b.InvCode,c.InvCode subInvCode,c.Qty AxuQTY,c.IssQty
into #info
from mom_order a
LEFT JOIN mom_orderdetail b on a.moid = b.moid
LEFT JOIN mom_moallocate c on b.modid = c.modid
left join (" + sql + @") d on a.MoCode=d.MoCode and b.SortSeq=d.SortSeq
1=1
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,min_lotqty,Qty,QualifiedInQty,InvCode from #info
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,SubSortSeq,subInvCode,AxuQTY,IssQty from #info
drop table #info
";
}
sql = sql.Replace("1=1", newsql);
}
else
{
if (isif == 0)
{
sql = @"select DISTINCT a.cCode MoCode,b.iVouchRowNo SortSeq,C.irowno SubSortSeq,(case isnull(d.min_lotqty,0) when 0 then b.iQuantity else d.min_lotqty end) min_lotqty,
b.iQuantity Qty,b.iReceivedQTY QualifiedInQty,b.cInvCode InvCode,c.cInvCode subInvCode,c.iQuantity AxuQTY,c.iSendQTY IssQty
into #info
from OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join (" + sql + @") d on a.cCode=d.cCode and b.iVouchRowNo=d.iVouchRowNo
1=1
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,min_lotqty,Qty,QualifiedInQty,InvCode from #info
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,SubSortSeq,subInvCode,AxuQTY,IssQty from #info
drop table #info
";
}
else
{
sql = @"select DISTINCT a.cCode MoCode,b.iVouchRowNo SortSeq,C.irowno SubSortSeq,isnull(d.min_lotqty,0) min_lotqty,b.iQuantity Qty,b.iReceivedQTY QualifiedInQty,b.cInvCode InvCode,c.cInvCode subInvCode,c.iQuantity AxuQTY,c.iSendQTY IssQty
into #info
from OM_MOMain a
left join DBO.OM_MODetails b on a.moid = b.moid
left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
left join (" + sql + @") d on a.cCode=d.cCode and b.iVouchRowNo=d.iVouchRowNo
1=1
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,min_lotqty,Qty,QualifiedInQty,InvCode from #info
select DISTINCT MoCode,SortSeq,MoCode+SortSeq GL,SubSortSeq,subInvCode,AxuQTY,IssQty from #info
drop table #info
";
}
sql = sql.Replace("1=1", newsql);
}
if (ds != null)
ds.Merge(DBHelper.SQlReturnDataSet(sql, cmd));
else
ds = DBHelper.SQlReturnDataSet(sql, cmd);
}
}
catch (Exception ex)
{
if (cmd.Transaction != null)
cmd.Transaction.Rollback();
log.Error(ex.Message);
throw new Exception(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Dispose();
}
}
mag = JSON.DataSetToJson(ds, "details", "GL");
return mag;
}
}
}