using MES.Service.DB;
|
using MES.Service.Dto.service;
|
using MES.Service.Modes;
|
using MES.Service.util;
|
using SqlSugar;
|
using System.Data;
|
|
namespace MES.Service.service.QC;
|
|
public class SJService
|
{
|
private readonly BaseService _baseService = new();
|
|
//获取最大单号
|
public string getMaxBillNo()
|
{
|
var db = SqlSugarHelper.GetInstance();
|
var date = DateTime.Now.ToString("yyyy-MM-dd");
|
var sql =
|
"select max(BILL_NO) from QS_ITEM_IPI_REQ where to_char(CREATE_TIME,'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 "SJN" + date.Replace("-", "") + number;
|
}
|
|
//获取所有数据分页
|
//public (List<SJPageResult> item, int TotalCount) getPage(SJPageResult queryObj)
|
//{
|
// var db = SqlSugarHelper.GetInstance();
|
|
// string[]? lineNo = null;
|
|
// // if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
|
// // lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
|
|
// var totalCount = 0;
|
|
// var data = db.Queryable<SJPageResult>()
|
// .WhereIF(lineNo != null && lineNo.Length > 0,
|
// a => lineNo.Contains(a.line))
|
// .WhereIF(queryObj.Id != null, a => a.Id == queryObj.Id)
|
// .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
|
// a => a.BillNo == queryObj.BillNo)
|
// // .WhereIF(
|
// // StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
// // "未完成".Equals(queryObj.Result),
|
// // a => a.Result == queryObj.Result && (a.FSubmit == 0 || a.FSubmit == null))
|
// .WhereIF(
|
// StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
// "未完成".Equals(queryObj.Result),
|
// a => a.FSubmit == 0 || a.FSubmit == null)
|
// // .WhereIF(
|
// // StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
// // !"未完成".Equals(queryObj.Result),
|
// // a => a.Result != "未完成" && a.FSubmit == 1)
|
// .WhereIF(
|
// StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
// !"未完成".Equals(queryObj.Result),
|
// a => a.FSubmit == 1)
|
// .OrderBy(a => a.BillNo, OrderByType.Desc)
|
// .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
|
|
// return (data, totalCount);
|
//}
|
|
//public (List<SJPageResult> item, int TotalCount) getPage(SJPageResult queryObj)
|
//{
|
// var db = SqlSugarHelper.GetInstance();
|
|
// string[]? lineNo = null;
|
|
// // if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
|
// // lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
|
|
// var totalCount = 0;
|
// string searchValue = queryObj.searchValue?.Trim();
|
|
// // ========= 构建基础 query =========
|
// var query = db.Queryable<SJPageResult>()
|
// .WhereIF(lineNo != null && lineNo.Length > 0,
|
// a => lineNo.Contains(a.line))
|
// .WhereIF(queryObj.Id != null,
|
// a => a.Id == queryObj.Id)
|
// .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
|
// a => a.BillNo == queryObj.BillNo)
|
// // 未完成
|
// .WhereIF(
|
// StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
// "未完成".Equals(queryObj.Result),
|
// a => a.FSubmit == 0 || a.FSubmit == null)
|
// // 已完成
|
// .WhereIF(
|
// StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
// !"未完成".Equals(queryObj.Result),
|
// a => a.FSubmit == 1);
|
|
// // ========= SearchValue 判断 =========
|
|
// // SearchValue 为空:返回全部
|
// if (string.IsNullOrWhiteSpace(searchValue))
|
// {
|
// var allData = query
|
// .OrderBy(a => a.BillNo, OrderByType.Desc)
|
// .ToPageList(
|
// Math.Max(queryObj.PageIndex, 1),
|
// Math.Max(queryObj.Limit, 1),
|
// ref totalCount
|
// );
|
|
// return (allData, totalCount);
|
// }
|
|
// // SearchValue 不为空:模糊查 BILL_NO / ITEM_NO
|
// query = query.Where(a =>
|
// SqlFunc.Like(SqlFunc.Trim(a.BillNo).ToLower(), $"%{searchValue.ToLower()}%") ||
|
// SqlFunc.Like(SqlFunc.Trim(a.ItemNo).ToLower(), $"%{searchValue.ToLower()}%")
|
// );
|
|
// // ========= 执行分页 =========
|
// var data = query
|
// .OrderBy(a => a.BillNo, OrderByType.Desc)
|
// .ToPageList(
|
// Math.Max(queryObj.PageIndex, 1),
|
// Math.Max(queryObj.Limit, 1),
|
// ref totalCount
|
// );
|
|
// return (data, totalCount);
|
//}
|
|
|
|
public (List<SJPageResult> item, int TotalCount) getPage(SJPageResult2 queryObj)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
string[]? lineNo = null;
|
|
// if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
|
// lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
|
|
var totalCount = 0;
|
string searchValue = queryObj.searchValue?.Trim();
|
|
// 获取搜索选项索引 (0:项目, 1:线体, 2:工单号, 3:物料号, 4:物料名)
|
int selectedIndex = queryObj.selectedIndex ?? 0;
|
|
// ========= 构建基础 query =========
|
var query = db.Queryable<SJPageResult>()
|
.WhereIF(lineNo != null && lineNo.Length > 0,
|
a => lineNo.Contains(a.line))
|
.WhereIF(queryObj.Id != null,
|
a => a.Id == queryObj.Id)
|
.WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
|
a => a.BillNo == queryObj.BillNo)
|
// 未完成
|
.WhereIF(
|
StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
"未完成".Equals(queryObj.Result),
|
a => a.FSubmit == 0 || a.FSubmit == null)
|
// 已完成
|
.WhereIF(
|
StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
!"未完成".Equals(queryObj.Result),
|
a => a.FSubmit == 1);
|
|
// ========= SearchValue 判断 =========
|
|
// SearchValue 为空:返回全部
|
if (string.IsNullOrWhiteSpace(searchValue))
|
{
|
var allData = query
|
.OrderBy(a => a.BillNo, OrderByType.Desc)
|
.ToPageList(
|
Math.Max(queryObj.PageIndex, 1),
|
Math.Max(queryObj.Limit, 1),
|
ref totalCount
|
);
|
|
return (allData, totalCount);
|
}
|
|
// SearchValue 不为空:根据selectedIndex进行不同字段的模糊查询
|
switch (queryObj.selectedIndex)
|
{
|
case 2: // 工单号
|
query = query.Where(a => SqlFunc.Like(a.daa001.ToLower(), $"%{searchValue.ToLower()}%"));
|
break;
|
case 3: // 物料号
|
query = query.Where(a => SqlFunc.Like(a.ItemNo.ToLower(), $"%{searchValue.ToLower()}%"));
|
break;
|
case 4: // 物料名称
|
query = query.Where(a => SqlFunc.Like(a.Daa003.ToLower(), $"%{searchValue.ToLower()}%"));
|
break;
|
case 0: // 项目编码
|
query = query.Where(a => SqlFunc.Like(a.PROJECT_CODE.ToLower(), $"%{searchValue.ToLower()}%"));
|
break;
|
case 1: // 线体
|
query = query.Where(a => SqlFunc.Like(a.line.ToLower(), $"%{searchValue.ToLower()}%"));
|
break;
|
default:
|
return (new List<SJPageResult>(), 0);
|
}
|
|
// ========= 执行分页 =========
|
var data = query
|
.OrderBy(a => a.BillNo, OrderByType.Desc)
|
.ToPageList(
|
Math.Max(queryObj.PageIndex, 1),
|
Math.Max(queryObj.Limit, 1),
|
ref totalCount
|
);
|
|
return (data, totalCount);
|
}
|
|
|
|
|
|
|
|
|
//SetQSItem
|
// public List<QsItemIpiItem> SetQSItems(string itemNo)
|
// {
|
// var db = SqlSugarHelper.GetInstance();
|
// return db
|
// .Queryable<MoidToItem, MesQualityStandard>((a, b) =>
|
// new JoinQueryInfos(JoinType.Inner, a.MoidNum == b.MoidNum))
|
// .Where((a, b) => b.QsType == "1" && a.Fsubmit == 1 && a.ItemNo == itemNo).Select(
|
// (a, b) => new QsItemIpiItem
|
// {
|
// 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 = "未检测"
|
// }).ToList();
|
// }
|
public List<QsItemIpiItem> SetQSItems(string itemNo)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
var count = db.Queryable<MesQa>().Where(s => s.QsType == "1"
|
&& s.ItemNo == itemNo && s.Fsubmit == 1).Count();
|
|
if (count <= 0) return [];
|
|
return db
|
.Queryable<MesQualityStandard>()
|
.Where(b => b.QsType == "1" && b.ItemNo == itemNo).Select(b =>
|
new QsItemIpiItem
|
{
|
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,
|
Picture = b.Picture,
|
Picturename = b.Picturename,
|
result = "未检测",
|
isCheck = 0,UP_FILE=b.UP_FILE
|
}).ToList();
|
}
|
|
public List<QsItemIpiItem> getQSItems(decimal? pid, decimal? id)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
var qsItemIpiItems = db
|
.Queryable<QsItemIpiItem>()
|
.WhereIF(pid > 0, a => a.Pid == pid)
|
.WhereIF(id > 0, a => a.Id == id).ToList();
|
|
var array = qsItemIpiItems.Select(s => s.Id).ToArray();
|
var qsItemIpiItemDetails = db.Queryable<QsItemIpiItemDetail>()
|
.Where(s => array.Contains(s.Pid))
|
.GroupBy(s => s.Pid)
|
.Select(s => new
|
{
|
s.Pid,
|
count = SqlFunc.AggregateCount(s.Id)
|
}).ToList();
|
|
qsItemIpiItems.ForEach(s =>
|
{
|
var find = qsItemIpiItemDetails.Find(a => s.Id == a.Pid);
|
if (find == null)
|
{
|
s.isCheck = 0;
|
s.result = "未完成";
|
}
|
else
|
{
|
s.isCheck = find.count;
|
if (find.count == s.LevelNum && s.IsPass == 1)
|
s.result = "合格";
|
else if (find.count == s.LevelNum && s.IsPass == 0)
|
s.result = "不合格";
|
else
|
s.result = "未完成";
|
}
|
});
|
|
//使用linq表达式过滤出图片id不为空的数据
|
var itemIpiItems =
|
qsItemIpiItems.Where(s => s.Picture is { Length: > 0 })
|
.ToList();
|
if (itemIpiItems.Count > 0)
|
itemIpiItems.ForEach(s =>
|
{
|
var qsItemIpiItem = qsItemIpiItems.Find(t => t.Id == s.Id);
|
//将字节数组转换为Base64编码的字符串
|
qsItemIpiItem.imageData = Convert.ToBase64String(s.Picture);
|
});
|
|
//排序,未完成的排在前面
|
qsItemIpiItems = qsItemIpiItems.OrderBy(s => s.isCheck).ToList();
|
|
return qsItemIpiItems;
|
}
|
|
public QsItem Save(QsItem item)
|
{
|
var qsItemIpiReq = item.From;
|
var qsItemIpiItems = item.Items;
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
qsItemIpiReq.StatusDate = DateTime.Now;
|
var pid = db.Insertable(qsItemIpiReq)
|
.ExecuteReturnIdentity();
|
qsItemIpiReq.Id = pid;
|
|
item.gid = pid;
|
|
qsItemIpiItems.ForEach(s => s.Pid = pid);
|
|
return db.Insertable(qsItemIpiItems)
|
.ExecuteCommand();
|
});
|
item.Items = getQSItems(qsItemIpiReq.Id, null);
|
|
//没有上下限的检验项目自动盘点为合格
|
item.Items.ForEach(s =>
|
{
|
if (s.MaxValue != null || s.StandardValue != null ||
|
s.MinValue != null) return;
|
var detail = new QsItemIpiItemDetail();
|
detail.Pid = s.Id;
|
detail.Gid = item.gid;
|
detail.Fstand = "√";
|
detail.FcheckResu = "1";
|
detail.UpdateBy = item.From.StatusUser;
|
detail.count = (int?)s.LevelNum;
|
SetQSItemDetail(detail);
|
});
|
|
item.Items = getQSItems(qsItemIpiReq.Id, null);
|
var sjPageResult = new SJPageResult2
|
{ Id = item.From.Id, Limit = 1, PageIndex = 1 };
|
var pageResult = getPage(sjPageResult);
|
item.Result = pageResult.item[0];
|
|
return item;
|
}
|
|
public QsItem SaveItem(QsItem item)
|
{
|
var qsItemIpiItems = item.Items;
|
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
// 1. 删除旧的子项
|
db.Deleteable<QsItemIpiItem>()
|
.Where(s => s.Pid == item.gid)
|
.ExecuteCommand();
|
|
qsItemIpiItems.ForEach(s => s.Pid = item.gid);
|
db.Insertable(qsItemIpiItems).ExecuteCommand();
|
|
// 2. 查找 MesQa 对应主表ID(通过 item.ItemNo)
|
var mesQa = db.Queryable<MesQa>()
|
.Where(q => q.ItemNo == item.ItemNo)
|
.Select(q => new { q.Id })
|
.First();
|
|
if (mesQa == null || mesQa.Id == null)
|
{
|
throw new Exception($"未找到物料编号 {item.ItemNo} 对应的 MesQa 主表记录。");
|
}
|
|
var mesQaId = mesQa.Id;
|
var mid = item.gid;
|
|
// 3. 同步扫码检验项目表(MES_SJ_SCAN_ITEM_CK)
|
db.Deleteable<MES_SJ_SCAN_ITEM_CK>()
|
.Where(s => s.MID == mid)
|
.ExecuteCommand();
|
|
var scanItems = db.Queryable<MES_SJ_SCAN_ITEM>()
|
.Where(s => s.MID == mesQaId)
|
.Select(s => new MES_SJ_SCAN_ITEM_CK
|
{
|
SCAN_ITEM = s.SCAN_ITEM,
|
SN_NO = null,
|
MID = (long)mid,
|
CREATE_DATE = DateTime.Now
|
})
|
.ToList();
|
|
foreach (var ck in scanItems)
|
{
|
ck.ID = (long)db.Ado.GetDecimal("SELECT SEQ_MES_SJ_SCAN_ITEM_CK.NEXTVAL FROM DUAL");
|
}
|
|
if (scanItems.Any())
|
{
|
db.Insertable(scanItems).ExecuteCommand();
|
}
|
|
// 4. 一致性项目同步逻辑(MES_IQC_CONSISTENCY_SJ_CK)
|
// -------------------------------------------------------------
|
// 删除旧数据
|
db.Ado.ExecuteCommand(
|
"DELETE FROM MES_IQC_CONSISTENCY_SJ_CK WHERE pid = :IMGID",
|
new { IMGID = item.gid.ToString() });
|
|
// 查询一致性项目源数据
|
var consistencyItems = db.SqlQueryable<MES_IQC_CONSISTENCY_SJ_CK>(@"
|
SELECT
|
a.ID AS PID,
|
b.ItemName,
|
b.ItemMode,
|
b.SuppName,
|
a.Item_No AS ImgID,
|
0 AS IsChack,
|
b.MULTI_SELECT
|
FROM MES_QA a
|
LEFT JOIN MES_IQC_CONSISTENCY_SJ_DT b ON a.ID = b.PID
|
WHERE a.FSUBMIT = 1
|
AND a.QS_TYPE = 1
|
AND a.ITEM_NO = :ITEM_NO
|
AND b.ItemName IS NOT NULL
|
").AddParameters(new { ITEM_NO = item.ItemNo }).ToList();
|
|
foreach (var ci in consistencyItems)
|
{
|
db.Ado.ExecuteCommand(@"
|
INSERT INTO MES_IQC_CONSISTENCY_SJ_CK
|
(ID, PID, ITEMNAME, ITEMMODE, SUPPNAME, IMGID, ISCHACK, MULTI_SELECT)
|
VALUES (
|
F_GETSEQNEXTVALUE('MES_IQC_CONSISTENCY_SJ_CK'),
|
:PID,
|
:ITEMNAME,
|
:ITEMMODE,
|
:SUPPNAME,
|
:IMGID,
|
:ISCHACK,
|
:MULTI_SELECT
|
)",
|
new
|
{
|
PID = item.gid,
|
ITEMNAME = ci.ItemName,
|
ITEMMODE = ci.ItemMode,
|
SUPPNAME = ci.SuppName,
|
IMGID = ci.ImgID,
|
ISCHACK = ci.ISCHACK,
|
MULTI_SELECT = ci.MULTI_SELECT
|
});
|
}
|
|
return 1;
|
});
|
|
// 5. 重新加载检验项目并处理自动合格项
|
item.Items = getQSItems(item.gid, null);
|
|
item.Items.ForEach(s =>
|
{
|
if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null) return;
|
|
var detail = new QsItemIpiItemDetail
|
{
|
Pid = s.Id,
|
Gid = item.gid,
|
Fstand = "√",
|
FcheckResu = "1",
|
UpdateBy = item.StatusUser,
|
count = (int?)s.LevelNum
|
};
|
|
SetQSItemDetail(detail);
|
});
|
|
item.Items = getQSItems(item.gid, null);
|
|
return item;
|
}
|
|
public int SetQSItemDetail(QsItemIpiItemDetail detail)
|
{
|
var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
List<QsItemIpiItemDetail> result = new();
|
for (var i = 0; i < detail.count; i++)
|
{
|
var item = new QsItemIpiItemDetail();
|
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;
|
}
|
|
public List<QsItemIpiItemDetail> getQSItemDetail(decimal? pid, decimal? gid)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
return db.Queryable<QsItemIpiItemDetail>()
|
.Where(s => s.Pid == pid)
|
.WhereIF(gid > 0, s => s.Gid == gid)
|
.ToList();
|
}
|
|
|
//自动判定是否合格
|
private int autoResult(QsItemIpiItemDetail detail)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
// Single 没有查询到结果时返回Null,如果结果大于1条会抛出错误
|
var qsItemIpiItem = db.Queryable<QsItemIpiItem>()
|
.Single(s => s.Id == detail.Pid);
|
|
if (qsItemIpiItem == null) return 0;
|
|
var count = db.Queryable<QsItemIpiItemDetail>()
|
.Where(s => s.Pid == detail.Pid).Count();
|
|
|
var result = 0;
|
|
if (qsItemIpiItem.LevelNum != count) return 0;
|
|
var passCount = db.Queryable<QsItemIpiItemDetail>()
|
.Where(s => s.Pid == detail.Pid && s.Fstand == "√").Count();
|
|
if (count == passCount) result = 1;
|
|
var useTransactionWithOracle =
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
var commit = 0;
|
commit += db.Updateable<QsItemIpiItem>()
|
.SetColumns(s => s.IsPass == result)
|
.Where(s => s.Id == detail.Pid)
|
.ExecuteCommand();
|
return commit;
|
});
|
|
|
//自动判定是否合格
|
//获取检验单的检验项目理论个数
|
var sum = db.Queryable<QsItemIpiItem>()
|
.Where(s => s.Pid == detail.Gid).Sum(it => it.LevelNum);
|
if (sum == null || sum == 0) return 1;
|
|
//获取检验单下的检验项目实际个数
|
var icount = db.Queryable<QsItemIpiItemDetail>()
|
.Where(s => s.Gid == detail.Gid).Count();
|
|
if (icount == 0) return 1;
|
|
//实际个数等于理论个数时对检验单进行判定
|
if (sum == icount)
|
{
|
result = 0;
|
|
//获取这个检验单下的所有合格的检验结果
|
passCount = db.Queryable<QsItemIpiItemDetail>()
|
.Where(s => s.Gid == detail.Gid && s.Fstand == "√").Count();
|
|
//合格的检验结果等于总检验数视为合格
|
if (icount == passCount) result = 1;
|
|
useTransactionWithOracle +=
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiReq>()
|
.SetColumns(s => s.IsPass == result)
|
.SetColumns(s => s.StatusUser == detail.CreateBy)
|
.SetColumns(s => s.CompleteTime == DateTime.Now)
|
.Where(s => s.Id == detail.Gid)
|
.ExecuteCommand();
|
});
|
}
|
|
return useTransactionWithOracle;
|
}
|
|
public int UpdateQSItemDetail(QsItemIpiItemDetail detail)
|
{
|
var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiItemDetail>()
|
.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(QsItem dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiReq>()
|
.SetColumns(it =>
|
it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
|
.Where(it => it.Id == dto.gid)
|
.ExecuteCommand();
|
});
|
}
|
|
//子表修改备注字段
|
public int saveRemarksPid(QsItem dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiItem>()
|
.SetColumns(it =>
|
it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
|
.Where(it => it.Id == dto.pid)
|
.ExecuteCommand();
|
});
|
}
|
|
//孙表修改备注字段
|
public int saveRemarksById(QsItem dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiItemDetail>()
|
.SetColumns(it =>
|
it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
|
.Where(it => it.Id == dto.id)
|
.ExecuteCommand();
|
});
|
}
|
|
public int removeXJ(decimal? id)
|
{
|
var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
var commit = 0;
|
//删除主表
|
commit += db.Deleteable<QsItemIpiReq>().Where(s => s.Id == id)
|
.ExecuteCommand();
|
//删除子表
|
commit += db.Deleteable<QsItemIpiItem>().Where(s => s.Pid == id)
|
.ExecuteCommand();
|
//删除孙表
|
commit += db.Deleteable<QsItemIpiItemDetail>()
|
.Where(s => s.Gid == id)
|
.ExecuteCommand();
|
return commit;
|
});
|
|
return withOracle;
|
}
|
|
public bool SJQaSubmit(LLJDto rkjDto)
|
{
|
|
|
var useTransactionWithOracle =
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiReq>()
|
.SetColumns(s => s.Fsubmit == 1)
|
.SetColumns(s => s.FsubmitBy == rkjDto.userNo)
|
.SetColumns(s => s.FsubmitDate == DateTime.Now)
|
.Where(s => s.Id == rkjDto.gid)
|
.ExecuteCommand();
|
});
|
|
return useTransactionWithOracle > 0;
|
}
|
|
public List<Component> getYzxBDlist(string id)
|
{
|
OracleSQLHelper SQLHelper = new();
|
//查元器件
|
//var sql1 =
|
// string.Format(
|
// @"select ITEMNAME from MES_IQC_CONSISTENCY_ck where PID='" +
|
// id + "' group by ITEMNAME order by ITEMNAME");
|
|
var sql1 =
|
string.Format(
|
@"select CASE WHEN max(MULTI_SELECT) is null THEN ''ELSE '【'||max(MULTI_SELECT)||'】' END as A,ITEMNAME as ITEMNAME from MES_IQC_CONSISTENCY_SJ_ck where PID='" + id + "' group by ITEMNAME order by ITEMNAME");
|
//查明细
|
var sql2 =
|
string.Format(@"select * from MES_IQC_CONSISTENCY_SJ_ck where PID='" +
|
id + "' order by ITEMNAME,ITEMMODE,SUPPNAME");
|
var dataTable1 = SQLHelper.ExecuteQuery(sql1);
|
var dataTable2 = SQLHelper.ExecuteQuery(sql2);
|
var Components = new List<Component>();
|
|
|
for (var i = 0; i < dataTable1.Rows.Count; i++)
|
{
|
var component = new Component();
|
component.Name = dataTable1.Rows[i]["A"].ToString() + dataTable1.Rows[i]["ITEMNAME"].ToString();
|
component.Specs = new List<string>();
|
component.Manufacturers = new List<string>();
|
component.Id = new List<string>();
|
component.SelectedSpec = -1;
|
component.SelectedMfg = -1;
|
var index = 0;
|
for (var j = 0; j < dataTable2.Rows.Count; j++)
|
if (dataTable2.Rows[j]["ITEMNAME"].ToString() ==
|
dataTable1.Rows[i]["ITEMNAME"].ToString())
|
{
|
component.Specs.Add(dataTable2.Rows[j]["ITEMMODE"]
|
.ToString());
|
component.Manufacturers.Add(dataTable2.Rows[j]["SUPPNAME"]
|
.ToString());
|
component.Id.Add(dataTable2.Rows[j]["ID"].ToString());
|
if (dataTable2.Rows[j]["ISCHACK"].ToString() == "1")
|
{
|
component.SelectedSpec = index;
|
component.SelectedMfg = index;
|
}
|
|
index++;
|
}
|
|
Components.Add(component);
|
}
|
|
return Components;
|
}
|
public DataTable getAllInspectors()
|
{
|
OracleSQLHelper SQLHelper = new();
|
var sql =
|
@"select a.USER_NAME label,U.FCODE value from IQC_BEFORE_FROM_SJ a JOIN SYS_USER U ON U.FID=A.SID";
|
return SQLHelper.ExecuteQuery(sql);
|
}
|
|
/// <summary>
|
/// 一致性项目
|
/// </summary>
|
public class Component
|
{
|
public string Name { get; set; }
|
public List<string> Specs { get; set; }
|
public List<string> Manufacturers { get; set; }
|
public List<string> Id { get; set; }
|
public int SelectedSpec { get; set; }
|
public int SelectedMfg { get; set; }
|
}
|
public void saveYzxBDlist(string id, DataTable DB)
|
{
|
OracleSQLHelper SQLHelper = new();
|
//先把结果清空
|
var sql1 =
|
string.Format(
|
@"update MES_IQC_CONSISTENCY_SJ_ck set ISCHACK=0 where PID='" +
|
id + "' ");
|
SQLHelper.ExecuteQuery(sql1);
|
var rowId = "";
|
for (var i = 0; i < DB.Rows.Count; i++)
|
rowId += "'" + DB.Rows[i]["id"] + "',";
|
rowId = rowId.Substring(0, rowId.Length - 1);
|
|
|
//修改结果
|
var sql2 =
|
string.Format(
|
@"update MES_IQC_CONSISTENCY_SJ_ck set ISCHACK=1 where PID='" +
|
id + "'and id in(" + rowId + ") ");
|
SQLHelper.ExecuteQuery(sql2);
|
}
|
public string[] YzxImgVerify(string id)
|
{
|
var msgStr = new string[2];
|
|
OracleSQLHelper SQLHelper = new();
|
//修改结果
|
//var sql2 = string.Format(
|
// @"select A.ITEMNAME from ( select 888||min(id) id,ITEMNAME from MES_IQC_CONSISTENCY_CK where pid='" +
|
// id + "' group by ITEMNAME) A " +
|
// "left join MES_QS_IMAGE b on a.id=b.fid where B.id is null order by ITEMNAME");
|
|
|
var sql2 = string.Format(
|
@"select A.ITEMNAME from ( select 999||min(id) id,ITEMNAME from MES_IQC_CONSISTENCY_SJ_CK where pid='" + id.ToString() + "' and ITEMNAME not in(select ITEMNAME from MES_IQC_CONSISTENCY_SJ_CK where PID='" + id.ToString() + "' and MULTI_SELECT is not null)" +
|
"group by ITEMNAME) A" +
|
" left join MES_QS_IMAGE b on a.id=b.fid where B.id is null" +
|
" union" +
|
" select '分组:' || MULTI_SELECT as ITEMNAME from MES_IQC_CONSISTENCY_SJ_CK where pid = '" + id.ToString() + "' and MULTI_SELECT is not null and MULTI_SELECT not in(select A.MULTI_SELECT as ITEMNAME from (select 999 || min(id) id, MULTI_SELECT from MES_IQC_CONSISTENCY_SJ_CK where pid = '" + id.ToString() + "' and MULTI_SELECT is not null group by MULTI_SELECT,ITEMNAME) A left join MES_QS_IMAGE b on a.id = b.fid where B.id is not null) group by MULTI_SELECT");
|
|
var db = SQLHelper.ExecuteQuery(sql2);
|
if (db.Rows.Count > 0)
|
{
|
msgStr[1] = "元器件:";
|
for (var i = 0; i < db.Rows.Count; i++)
|
msgStr[1] += db.Rows[i]["ITEMNAME"] + ",";
|
msgStr[1] += "未完成图片上传,请上传!";
|
msgStr[0] = "1";
|
}
|
else
|
{
|
msgStr[0] = "0";
|
msgStr[1] = "ok";
|
}
|
|
return msgStr;
|
}
|
|
|
/// <summary>
|
/// 保存新检验员
|
/// </summary>
|
/// <param name="NewStaffUserID">新检验员ID</param>
|
/// <param name="userID">修改人</param>
|
/// <param name="releaseNo">检验单号</param>
|
/// <returns></returns>
|
public string[] SaveCheckBy(string NewStaffUserID, string userID,
|
string releaseNo)
|
{
|
// 定义输出参数
|
var outputResult = new SugarParameter("o_Result", null,
|
System.Data.DbType.Int32, ParameterDirection.Output,
|
4000);
|
|
var outputMessage = new SugarParameter("o_Msg", null,
|
System.Data.DbType.String,
|
ParameterDirection.Output, 4000);
|
|
// 定义输入参数
|
var parameters = new List<SugarParameter>
|
{
|
new("P_FCHECK_BY", NewStaffUserID,
|
System.Data.DbType.String, ParameterDirection.Input),
|
new("p_Release_No", releaseNo,
|
System.Data.DbType.String, ParameterDirection.Input),
|
new("p_User", userID,
|
System.Data.DbType.String, ParameterDirection.Input),
|
|
outputResult,
|
outputMessage
|
};
|
|
var db = SqlSugarHelper.GetInstance();
|
|
// 使用 SqlSugar 执行存储过程
|
db.Ado.ExecuteCommand(
|
"BEGIN Prc_Mes_Pqc_SJ_Update_CheckBy(:P_FCHECK_BY,:p_Release_No,:p_User, :o_Result, :o_Msg); END;",
|
parameters.ToArray());
|
|
// 获取输出参数的值
|
var resultValue = outputResult.Value?.ToString();
|
var messageValue = outputMessage.Value?.ToString();
|
var msg = new string[2];
|
msg[0] = resultValue;
|
msg[1] = messageValue;
|
return msg;
|
}
|
|
/// <summary>
|
/// 获取首检单所有不良描述
|
/// </summary>
|
/// <param name="id">检验单ID</param>
|
/// <returns>不良描述数据表</returns>
|
public DataTable getBlmsItem(string id)
|
{
|
OracleSQLHelper SQLHelper = new();
|
// 查询首检检验单的不良描述
|
var sql1 = string.Format(
|
@"select PROJ_NAME, REMARKS
|
from QS_ITEM_IPI_ITEM f
|
where PID = '" + id + "' and REMARKS is not null order by PROJ_NAME");
|
|
return SQLHelper.ExecuteQuery(sql1);
|
}
|
|
|
}
|