using MES.Service.DB;
|
using MES.Service.Dto.service;
|
using MES.Service.Modes;
|
using MES.Service.util;
|
using SqlSugar;
|
|
namespace MES.Service.service.QC;
|
|
public class RKJService
|
{
|
private readonly BaseService _baseService = new();
|
|
//手动执行sql
|
//生成检验单号
|
public string getMaxBillNo()
|
{
|
var db = SqlSugarHelper.GetInstance();
|
var date = DateTime.Now.ToString("yyyy-MM-dd");
|
var sql =
|
"select max(RELEASE_NO) from QS_ITEM_OQC_REQ where RELEASE_NO like 'RKJN%' and to_char(CREATE_DATE,'yyyy-mm-dd') ='" +
|
date + "'";
|
|
var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
|
|
var number = "0001";
|
if (maxBillNo != null)
|
{
|
maxBillNo = maxBillNo.Substring(12);
|
var no = Convert.ToInt32(maxBillNo);
|
no++;
|
number = no.ToString().PadLeft(4, '0');
|
}
|
|
return "RKJN" + date.Replace("-", "") + number;
|
}
|
|
//选择产线
|
public List<MesLine> getLineNo()
|
{
|
var db = SqlSugarHelper.GetInstance();
|
return db.Queryable<MesLine>()
|
.Where(t =>
|
t.LineStyle == "包装" ||
|
SqlFunc.ContainsArray(new[] { "V1", "V3", "V5", "V6" },
|
t.LineNo))
|
.OrderBy(t => t.LineNo)
|
.Select(t => new MesLine
|
{
|
LineNo = t.LineNo,
|
LineName = t.LineName
|
}).OrderBy("LINE_NO")
|
.ToList();
|
}
|
|
|
//获取工单号
|
public List<RkDaa002> GetDaa001s(string lineNo)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
return null;
|
}
|
|
//根据检验标准来计算检验个数
|
public List<QsItemOqcItem> SetItems(string itemNo, decimal quantity)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
var count = db.Queryable<MesQa>().Where(s => s.QsType == "3"
|
&& s.ItemNo == itemNo && s.Fsubmit == 1).Count();
|
|
if (count <= 0) return [];
|
|
var qsItemOqcItems = db
|
.Queryable<MesQualityStandard>()
|
.Where(b => b.QsType == "3"
|
&& b.ItemNo == itemNo).Select(
|
b => new QsItemOqcItem
|
{
|
ProjName = b.ProjName,
|
ItemMod = b.ItemMod,
|
InspectionMethod = b.InspectionMethod,
|
UsingInstruments = b.UsingInstruments,
|
LevelNum = SqlFunc.IsNull(
|
SqlFunc.IsNull(b.LevelNum * b.InspectionLevel, 1),
|
b.InspectionLevel),
|
MaxValue = b.MaxValue,
|
StandardValue = b.StandardValue,
|
MinValue = b.MinValue,
|
Notes = b.Notes,
|
FcheckLevel = b.FcheckLevel,
|
FacLevel = b.FacLevel,
|
QsCode = b.QsCode,
|
QsName = b.QsName,
|
Result = "未检测",
|
isCheck = 0,
|
Picture = b.Picture,
|
Picturename = b.Picturename
|
}).ToList();
|
|
qsItemOqcItems.ForEach(item =>
|
{
|
string LEV = null;
|
switch (item.FcheckLevel)
|
{
|
case string s when s.Contains("S1"):
|
LEV = "B.FLEVEL_S1";
|
break;
|
case string s when s.Contains("S2"):
|
LEV = "B.FLEVEL_S2";
|
break;
|
case string s when s.Contains("S3"):
|
LEV = "B.FLEVEL_S3";
|
break;
|
case string s when s.Contains("S4"):
|
LEV = "B.FLEVEL_S4";
|
break;
|
case string s when s.Contains("(I)"):
|
LEV = "B.FLEVEL_I";
|
break;
|
case string s when s.Contains("(II)"):
|
LEV = "B.FLEVEL_II";
|
break;
|
case string s when s.Contains("(III)"):
|
LEV = "B.FLEVEL_III";
|
break;
|
default:
|
LEV = ""; // 默认值
|
break;
|
}
|
|
var sql =
|
"SELECT " + LEV +
|
" FROM MES_QM_AQL1 A LEFT JOIN MES_QM_AQL2 B ON B.AQL1_ID=A.ID WHERE A.SAMPLE_SIZE_NO='" +
|
item.QsCode + "' AND B.LOT_FROM<= " + quantity + " AND " +
|
quantity + "<=B.LOT_TO";
|
|
var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
|
|
|
var result = ExtractSubstring(item.FacLevel, '(', ')');
|
|
|
sql = "SELECT FSAMPLE_SIZE_WORD, " + result +
|
" Result FROM MES_QM_AQL1 A LEFT JOIN MES_QM_AQL3 C ON C.AQL1_ID=A.ID WHERE A.SAMPLE_SIZE_NO= '" +
|
item.QsCode + "' AND SAMPLE_SIZE_WORD= '" + maxBillNo + "'";
|
var resultClass = db.Ado.SqlQuerySingle<ResultClass>(sql);
|
|
item.LevelNum = resultClass.FSAMPLE_SIZE_WORD;
|
item.FreQty = resultClass.Result;
|
});
|
|
return qsItemOqcItems;
|
}
|
|
private string ExtractSubstring(string input, char startChar, char endChar)
|
{
|
var startIndex = input.IndexOf(startChar);
|
var endIndex = input.IndexOf(endChar, startIndex);
|
|
if (startIndex == -1 || endIndex == -1)
|
// 如果未找到起始字符或结束字符,则返回空字符串或者抛出异常,根据实际情况选择
|
return string.Empty;
|
// 或者抛出异常
|
// throw new ArgumentException("Start or end character not found");
|
// 提取子字符串
|
var length = endIndex - startIndex - 1;
|
return input.Substring(startIndex + 1, length);
|
}
|
|
public List<QsItemOqcItem> GetItems(decimal? pid, decimal? id)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
return db.Queryable<QsItemOqcItem, QsItemOqcItemDetail>((a, b) =>
|
new JoinQueryInfos(JoinType.Left, a.Id == b.Pid))
|
.WhereIF(pid > 0, (a, b) => a.Pid == pid)
|
.WhereIF(id > 0, (a, b) => a.Id == id)
|
.GroupBy((a, b) => new
|
{
|
a.Id,
|
a.ProjName,
|
a.ItemMod,
|
a.InspectionMethod,
|
a.UsingInstruments,
|
a.LevelNum,
|
a.MaxValue,
|
a.StandardValue,
|
a.MinValue,
|
a.Notes,
|
a.IsPass,
|
a.FcheckLevel,
|
a.FacLevel,
|
a.QsCode,
|
a.QsName
|
}).Select((a, b) => new QsItemOqcItem
|
{
|
ProjName = a.ProjName,
|
Id = a.Id,
|
ItemMod = a.ItemMod,
|
InspectionMethod = a.InspectionMethod,
|
UsingInstruments = a.UsingInstruments,
|
LevelNum = a.LevelNum,
|
MaxValue = a.MaxValue,
|
StandardValue = a.StandardValue,
|
MinValue = a.MinValue,
|
Notes = a.Notes,
|
FcheckLevel = a.FcheckLevel,
|
FacLevel = a.FacLevel,
|
QsCode = a.QsCode,
|
QsName = a.QsName,
|
isCheck = SqlFunc.AggregateCount(b.Id),
|
Result = a.IsPass == 1 &&
|
a.LevelNum == SqlFunc.AggregateCount(b.Id) ? "合格"
|
: a.IsPass == 0 &&
|
a.LevelNum == SqlFunc.AggregateCount(b.Id) ? "不合格"
|
: "未完成"
|
}).OrderBy("result desc").ToList();
|
}
|
|
public dynamic save(RKJDto rkjDto)
|
{
|
var xj = rkjDto.from;
|
var items = rkjDto.items;
|
var userNo = rkjDto.userNo;
|
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
var commit = 0;
|
|
xj.CreateBy = userNo;
|
xj.CreateDate = DateTime.Now;
|
|
var pid = db.Insertable(xj).ExecuteReturnIdentity();
|
|
xj.Id = pid;
|
|
rkjDto.gid = pid;
|
|
foreach (var item in items) item.Pid = pid;
|
|
commit += db.Insertable(items).ExecuteCommand();
|
|
return commit;
|
});
|
|
|
// using (var connection =
|
// new OracleConnection(OracleSQLHelper.ConnectionString)) // connection.Open();
|
//
|
// var transaction = connection.BeginTransaction();
|
//
|
// try
|
// {
|
// using (var command = new OracleCommand())
|
// {
|
// command.Connection = connection;
|
// command.Transaction = transaction;
|
// command.CommandText = "insert_and_update_picture_RKJ";
|
// command.CommandType = CommandType.StoredProcedure;
|
//
|
// // Add parameters
|
// command.Parameters.Add("p_QS_TYPE", OracleDbType.Varchar2)
|
// .Value = "3";
|
// command.Parameters.Add("p_MOID_NUM", OracleDbType.Varchar2)
|
// .Value = rkjDto.moidNum;
|
// command.Parameters.Add("p_pid", OracleDbType.Int32).Value =
|
// xj.Id;
|
//
|
// command.ExecuteNonQuery();
|
// }
|
//
|
// transaction.Commit();
|
// }
|
// catch (Exception)
|
// {
|
// transaction.Rollback();
|
// throw;
|
// }
|
// }
|
|
rkjDto.items = GetItems(xj.Id, null);
|
|
rkjDto.items.ForEach(s =>
|
{
|
if (s.MaxValue != null || s.StandardValue != null ||
|
s.MinValue != null) return;
|
var detail = new QsItemOqcItemDetail();
|
detail.Pid = s.Id;
|
detail.Gid = rkjDto.gid;
|
detail.Fstand = "√";
|
detail.FcheckResu = "1";
|
detail.UpdateBy = rkjDto.userNo;
|
detail.count = (int?)s.LevelNum;
|
SetQSItemDetail(detail);
|
});
|
|
return Convert.ToInt32(xj.Id);
|
}
|
|
public int SetQSItemDetail(QsItemOqcItemDetail detail)
|
{
|
var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
List<QsItemOqcItemDetail> result = new();
|
for (var i = 0; i < detail.count; i++)
|
{
|
var item = new QsItemOqcItemDetail();
|
item.Gid = detail.Gid;
|
item.Pid = detail.Pid;
|
item.Fstand = detail.Fstand;
|
item.FcheckResu = detail.FcheckResu;
|
item.CreateBy = detail.UpdateBy;
|
item.CreateDate = DateTime.Now;
|
result.Add(item);
|
}
|
|
return db.Insertable(result).ExecuteCommand();
|
});
|
|
detail.CreateBy = detail.UpdateBy;
|
|
autoResult(detail);
|
|
return oracle;
|
}
|
|
private int autoResult(QsItemOqcItemDetail detail)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
// Single 没有查询到结果时返回Null,如果结果大于1条会抛出错误
|
var QsItemOqcItem = db.Queryable<QsItemOqcItem>()
|
.Single(s => s.Id == detail.Pid);
|
|
if (QsItemOqcItem == null) return 0;
|
|
//查询这个检验项目下的检验结果
|
var count = db.Queryable<QsItemOqcItemDetail>()
|
.Where(s => s.Pid == detail.Pid).Count();
|
|
|
var result = 0;
|
|
//检验实际结果不等于应该检验的个数时直接推出
|
if (QsItemOqcItem.LevelNum != count) return 0;
|
|
//合格的有多少个
|
var passCount = db.Queryable<QsItemOqcItemDetail>()
|
.Where(s => s.Pid == detail.Pid && s.Fstand == "√").Count();
|
|
if (count == passCount)
|
result = 1;
|
else if (count - passCount < QsItemOqcItem.FreQty) result = 1;
|
|
var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
|
db =>
|
{
|
var commit = 0;
|
commit += db.Updateable<QsItemOqcItem>()
|
.SetColumns(s => s.IsPass == result)
|
.Where(s => s.Id == detail.Pid)
|
.ExecuteCommand();
|
|
return commit;
|
});
|
|
var isNull = db.Queryable<QsItemOqcItem>()
|
.Where(s => s.Pid == detail.Gid && s.IsPass == null).Count();
|
|
if (isNull > 0) return 1;
|
|
|
//获取检验单的检验项目的个数
|
var sum = db.Queryable<QsItemOqcItem>()
|
.Where(s => s.Pid == detail.Gid).Count();
|
|
if (sum == 0) return 1;
|
|
//获取检验单下的合格的检验项目个数
|
var icount = db.Queryable<QsItemOqcItem>()
|
.Where(s => s.Pid == detail.Gid && s.IsPass == 1).Count();
|
|
var FcheckResu = "不合格";
|
|
//实际个数等于理论个数时对检验单进行判定
|
if (sum == icount)
|
//合格的检验结果等于总检验数视为合格
|
FcheckResu = "合格";
|
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemOqcReq>()
|
.SetColumns(s => s.FcheckResu == FcheckResu)
|
.SetColumns(s => s.FcheckDate == DateTime.Now)
|
.SetColumns(s => s.FcheckBy == detail.CreateBy)
|
.SetColumns(s => s.LastupdateBy == detail.CreateBy)
|
.SetColumns(s => s.LastupdateDate == DateTime.Now)
|
.Where(s => s.Id == detail.Gid)
|
.ExecuteCommand();
|
});
|
|
if (FcheckResu.Equals("不合格"))
|
//自动生成入库检异常对策
|
saveDetect02(detail.Gid, detail.CreateBy);
|
|
return useTransactionWithOracle;
|
}
|
|
public int saveDetect02(decimal? gid, string? createBy)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
var qsItemOqcReq =
|
db.Queryable<QsItemOqcReq>().Single(s => s.Id == gid);
|
|
var mesInvItemIns = db.Queryable<MesInvItemIns>()
|
.Single(s => s.BillNo == qsItemOqcReq.BillNo);
|
|
var mesSchemeResult = db.Queryable<Womdaa>()
|
.Single(s => s.Daa001 == mesInvItemIns.CbillNo);
|
|
var entity = new MesQaItemsDetect02();
|
// entity.ItemNo = mesSchemeResult.BoardItem;
|
// entity.BoardItem = mesSchemeResult.BoardItem;
|
entity.LineNo = mesSchemeResult.Daa015;
|
// entity.Aufnr = mesSchemeResult.TaskNo;
|
entity.ReleaseNo = qsItemOqcReq.ReleaseNo;
|
entity.LotNo = qsItemOqcReq.BillNo;
|
entity.FcheckDate = qsItemOqcReq.FcheckDate;
|
entity.FcheckMemo = qsItemOqcReq.Remarks;
|
entity.Gid = qsItemOqcReq.Id;
|
// entity.PlanQty = qsItemOqcReq.FcheckDate;
|
|
|
entity.FcheckResu = "不合格";
|
entity.FcheckLevel = "严重";
|
entity.CreateDate = DateTime.Now;
|
entity.Factory = "10000";
|
entity.Company = "1000";
|
entity.Ftype = "4";
|
entity.Fversion = 0;
|
entity.Modify1Flag = 0;
|
entity.IpqcStatus = 0;
|
entity.Fsubmit = 1;
|
entity.CreateBy = createBy;
|
entity.FcheckBy = createBy;
|
|
return SqlSugarHelper.UseTransactionWithOracle(db => db
|
.Insertable(entity)
|
.ExecuteCommand());
|
}
|
|
|
public List<QsItemOqcReq> getPage(XJPageResult queryObj)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
return db
|
.Queryable<QsItemOqcReq, Womdaa, MesItems, MesInvItemIns, Womdab,
|
MesInvTransaction, RKJDaa001>(
|
(a, da, b, c, d, ca, m) => new JoinQueryInfos(
|
JoinType.Left, da.Daa001 == a.BillNo,
|
JoinType.Left, a.ItemId == b.Id,
|
JoinType.Left, a.BillNo == c.BillNo,
|
JoinType.Left, c.CbillNo == d.Dab001,
|
JoinType.Left,
|
c.TransctionNo == ca.TransactionNo.ToString() &&
|
c.Company == ca.Company && c.Factory == ca.Factory,
|
JoinType.Left, c.Id == m.ItemInId && a.ItemNo == m.ItemNo
|
))
|
.Select((a, da, b, c, d, ca, m) => new QsItemOqcReq
|
{
|
BillNo = a.BillNo,
|
Remarks = a.Remarks,
|
Id = a.Id,
|
CreateDate = a.CreateDate,
|
CreateBy = a.CreateBy,
|
FcheckResu = a.FcheckResu,
|
ItemNo = a.ItemNo,
|
FcheckBy = a.FcheckBy,
|
FcheckDate = a.FcheckDate,
|
ReleaseNo = a.ReleaseNo,
|
// 添加其他字段
|
// 如果在 QsItemOqcReq 中定义了额外字段,则需要将它们赋值
|
// 例如:
|
ItemName = b.ItemName,
|
ItemModel = b.ItemModel,
|
TaskNo = c.TaskNo,
|
CbillNo = c.CbillNo,
|
Dab001 = d.Dab001,
|
Daa015 = da.Daa015,
|
LineNo = c.LineNo,
|
Quantity = m.Quantity
|
}).OrderBy(a => a.CreateDate, OrderByType.Desc)
|
.ToPageList(queryObj.PageIndex, queryObj.Limit);
|
}
|
|
//删除主表并且连级删除子表和孙表
|
public int removeXJ(decimal? id)
|
{
|
var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
var commit = 0;
|
//删除主表
|
commit += db.Deleteable<QsItemOqcReq>().Where(s => s.Id == id)
|
.ExecuteCommand();
|
//删除子表
|
commit += db.Deleteable<QsItemOqcItem>().Where(s => s.Pid == id)
|
.ExecuteCommand();
|
//删除孙表
|
commit += db.Deleteable<QsItemOqcItemDetail>()
|
.Where(s => s.Gid == id)
|
.ExecuteCommand();
|
return commit;
|
});
|
|
return withOracle;
|
}
|
|
|
public RKJDto getXjDetail02ById(decimal? id)
|
{
|
var rkjDto = new RKJDto();
|
|
var db = SqlSugarHelper.GetInstance();
|
var qsItemOqcItem =
|
db.Queryable<QsItemOqcItem>().Single(s => s.Id == id);
|
|
if (qsItemOqcItem.IsPass == 0)
|
qsItemOqcItem.Result = "不合格";
|
else if (qsItemOqcItem.IsPass == 1)
|
qsItemOqcItem.Result = "合格";
|
else
|
qsItemOqcItem.Result = "未完成";
|
|
if (qsItemOqcItem.Picture is { Length: > 0 })
|
qsItemOqcItem.imageData =
|
Convert.ToBase64String(qsItemOqcItem.Picture);
|
|
//获取不合格数
|
var count = db.Queryable<QsItemOqcItemDetail>()
|
.Where(s => s.Fstand == "×" && s.Pid == id).Count();
|
|
qsItemOqcItem.Unqualified = count;
|
|
rkjDto.ItemXj01 = qsItemOqcItem;
|
|
|
rkjDto.ItemXj02s = db.Queryable<QsItemOqcItemDetail>()
|
.Where(s => s.Pid == id)
|
.ToList();
|
|
return rkjDto;
|
}
|
|
public int UpdateQSItemDetail(QsItemOqcItemDetail detail)
|
{
|
var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemOqcItemDetail>()
|
.SetColumns(s => s.UpdateBy == detail.UpdateBy)
|
.SetColumns(s => s.UpdateDate == DateTime.Now)
|
.SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.Fstand),
|
s => s.Fstand == detail.Fstand)
|
.SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.FcheckResu),
|
s => s.FcheckResu == detail.FcheckResu)
|
.Where(s => s.Id == detail.Id)
|
.ExecuteCommand();
|
});
|
|
detail.CreateBy = detail.UpdateBy;
|
|
withOracle += autoResult(detail);
|
|
return withOracle;
|
}
|
|
|
//主表修改备注字段
|
public int saveRemarksGid(RKJDto dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemOqcReq>()
|
.SetColumns(it =>
|
it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
|
.Where(it => it.Id == dto.gid)
|
.ExecuteCommand();
|
});
|
}
|
|
//子表修改备注字段
|
public int saveRemarksPid(RKJDto dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemOqcItem>()
|
.SetColumns(it =>
|
it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
|
.Where(it => it.Id == dto.pid)
|
.ExecuteCommand();
|
});
|
}
|
|
//孙表修改备注字段
|
public int saveRemarksById(RKJDto dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemOqcItemDetail>()
|
.SetColumns(it =>
|
it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
|
.Where(it => it.Id == dto.id)
|
.ExecuteCommand();
|
});
|
}
|
|
public int saveItem(RKJDto rkjDto)
|
{
|
var items = rkjDto.items;
|
var userNo = rkjDto.userNo;
|
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
foreach (var item in items) item.Pid = rkjDto.gid;
|
|
return db.Insertable(items).ExecuteCommand();
|
});
|
|
rkjDto.items = GetItems(rkjDto.gid, null);
|
|
rkjDto.items.ForEach(s =>
|
{
|
if (s.MaxValue != null || s.StandardValue != null ||
|
s.MinValue != null) return;
|
var detail = new QsItemOqcItemDetail();
|
detail.Pid = s.Id;
|
detail.Gid = rkjDto.gid;
|
detail.Fstand = "√";
|
detail.FcheckResu = "1";
|
detail.UpdateBy = rkjDto.userNo;
|
detail.count = (int?)s.LevelNum;
|
SetQSItemDetail(detail);
|
});
|
|
return Convert.ToInt32(rkjDto.gid);
|
}
|
}
|