using MES.Service.DB;
|
using MES.Service.Dto.service;
|
using MES.Service.Modes;
|
using MES.Service.util;
|
using SqlSugar;
|
using DbType = System.Data.DbType;
|
using System.Data;
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
using AlibabaCloud.TeaUtil.Models;
|
using MES.Service.Modes.QcIssueResult;
|
using Newtonsoft.Json;
|
using System.Diagnostics;
|
using Tea;
|
using MES.Service.Modes.DingAPI;
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
using System;
|
using System.Security.Cryptography;
|
using SqlSugar.Extensions;
|
using Masuit.Tools.Reflection;
|
|
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> items, int totalCount) getPage(
|
SJPageResult queryObj)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
string[]? lineNo = null;
|
|
int totalCount = 0;
|
|
//if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
|
// lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
|
|
var data = db
|
.Queryable<SJPageResult, Womdaa, Womcaa, SysDepartment,
|
MesUserDepartmentQc, MesItems>((a,
|
da, ca, d, dq, i) =>
|
new JoinQueryInfos(
|
JoinType.Left,
|
Convert.ToDecimal(a.Pbaid) == da.Id, // 关联工单信息
|
JoinType.Left, da.Daa021 == ca.Caa020, //任务单,用于查询销售订单号
|
JoinType.Left,
|
d.Departmentid == Convert.ToDecimal(da.Daa013), //查询车间
|
JoinType.Left,
|
dq.Departmentcode == d.Departmentcode, //查询用户权限
|
JoinType.Left, i.Id == Convert.ToDecimal(da.Daa002) //查询用户权限
|
))
|
//.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")
|
.WhereIF(
|
StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
|
!"未完成".Equals(queryObj.Result),
|
a => a.FSubmit == "1")
|
//匹配权限
|
.WhereIF(!string.IsNullOrEmpty(queryObj.LoginUser),
|
(a, da, ca, d, dq) => dq.Usercode == queryObj.LoginUser)
|
//匹配搜索字符串
|
.WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue),
|
(a, da, ca, d, dq, i) =>
|
a.BillNo.ToLower()
|
.Contains(queryObj.SearchValue.ToLower()) ||
|
i.ItemName.ToLower()
|
.Contains(queryObj.SearchValue.ToLower()) ||
|
ca.Caa015.ToLower()
|
.Contains(queryObj.SearchValue.ToLower()) ||
|
i.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
|
.Select((a, da, ca, d, dq) => new SJPageResult
|
{
|
Id = a.Id,
|
BillNo = a.BillNo,
|
StatusDate = a.StatusDate,
|
FName = a.FName,
|
Result = a.Result,
|
FSubmit = a.FSubmit,
|
FSubmitBy = a.FSubmitBy,
|
FSubmitDate = a.FSubmitDate,
|
MoidNum = a.MoidNum,
|
StatusUser = a.StatusUser,
|
Pbaid = a.Pbaid,
|
CreateTime = a.CreateTime,
|
Comments = a.Comments,
|
ItemMod = a.ItemMod,
|
ItemNo = a.ItemNo,
|
daa001 = a.daa001,
|
line = a.line,
|
Remarks = a.Remarks,
|
Daa003 = a.Daa003,
|
Daa004 = a.Daa004,
|
Daa008 = a.Daa008,
|
LineName = d.Departmentname == "注塑车间" ? da.Daa020 : a.LineName,
|
SaleOrder = ca.Caa015,
|
DepartName = d.Departmentname,
|
PlanName = a.PlanName
|
})
|
.OrderBy(a => a.CreateTime, OrderByType.Desc);
|
var items = data.ToPageList(queryObj.PageIndex, queryObj.Limit,
|
ref totalCount);
|
|
return (items, 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, string planName)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
var count = db.Queryable<MesQa>().Where(s => s.QsType == "1"
|
&& s.ItemNo == itemNo && s.QaPlan == planName && s.Fsubmit == 1)
|
.Count();
|
|
if (count <= 0) return [];
|
|
//新增根据计划名称查询ID
|
decimal? QsId = db.Queryable<MesQa>()
|
.Where(s => s.QsType == "1"
|
&& s.ItemNo == itemNo
|
&& s.QaPlan == planName
|
&& s.Fsubmit == 1)
|
.Select(s => s.Id)
|
.First();
|
|
return db //根据主表ID查询
|
.Queryable<MesQualityStandard>()
|
.Where(b => b.Pid == QsId).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
|
}).ToList();
|
}
|
|
public List<SJBadReason>? GetReason(string billNo) //纠正措施单获取不良信息
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
var count = db.Queryable<SJBadReason>().Where(s => s.BillNo == billNo)
|
.Count();
|
|
if (count <= 0) return null;
|
|
var reason = db
|
.Queryable<SJBadReason>()
|
.Where(s => s.BillNo == billNo).Select(b => new SJBadReason
|
{
|
Reason = b.Reason
|
}).ToList();
|
|
return reason;
|
}
|
|
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 SJPageResult
|
{ Id = item.From.Id, Limit = 1, PageIndex = 1 };
|
item.Result = getPage(sjPageResult).items[0];
|
|
return item;
|
}
|
|
public QsItem SaveItem(QsItem item)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
|
var del = db.Deleteable<QsItemIpiItem>()
|
.Where(s => s.Pid == item.gid)
|
.ExecuteCommand();
|
|
//QsItemIpiItemDetail
|
var del1 = db.Deleteable<QsItemIpiItemDetail>()
|
.Where(s => s.Gid == item.gid)
|
.ExecuteCommand();
|
|
|
var qsItemIpiItems = item.Items;
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
// 1. 设置父级ID
|
qsItemIpiItems.ForEach(s => s.Pid = item.gid);
|
|
// 2. 插入
|
db.Insertable(qsItemIpiItems).ExecuteCommand();
|
|
// 3. 重新从数据库查询插入后的记录(按 pid 查询) 防止检验结果更新到旧项目上
|
qsItemIpiItems = db.Queryable<QsItemIpiItem>()
|
.Where(x => x.Pid == item.gid)
|
.ToList();
|
|
// ✅ 返回值不重要,只要保证事务提交即可
|
return 1;
|
});
|
|
|
//item.Items = getQSItems(item.gid, null);
|
|
//没有上下限的检验项目自动盘点为合格
|
qsItemIpiItems.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.StatusUser;
|
detail.count = (int?)s.LevelNum;
|
SetQSItemDetail(detail);
|
});
|
|
item.Items = getQSItems(item.gid, null);
|
|
return item;
|
}
|
|
public decimal SavePlan(decimal pid, string PlanName)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
var res = db.Updateable<QsItemIpiReq>()
|
.SetColumns(a => a.QaPlan == PlanName)
|
.Where(a => a.Id == pid)
|
.ExecuteCommand();
|
|
return res;
|
}
|
|
public List<string?> GetItemProj(string? itemNo)
|
{
|
//获取物料所有的检验计划名称
|
|
var db = SqlSugarHelper.GetInstance();
|
|
var plans = db.Queryable<MesQa>()
|
.Where(a => a.ItemNo == itemNo && a.QsType == "1")
|
.Select(s => s.QaPlan)
|
.Distinct()
|
.ToList();
|
|
return plans;
|
}
|
|
public (decimal?, string?, string?) CreateNew(string? DaaNo, string? userNo,
|
string? planName)
|
{
|
var db = SqlSugarHelper.GetInstance();
|
// 创建参数
|
var FitemNo = new SugarParameter("PI_NO", DaaNo);
|
var FuserNo = new SugarParameter("PI_USER", userNo);
|
var FplanName = new SugarParameter("P_PLAN_NAME", planName);
|
|
|
var FRes = new SugarParameter("po_result", null, true); // 输出参数
|
var FMsg = new SugarParameter("po_Message", null, true);
|
var FBillNo = new SugarParameter("po_BILL_NO", null, true);
|
|
// 执行存储过程
|
db.Ado.UseStoredProcedure().GetDataTable("PRC_PQC_ITEM_INSERT_JK",
|
FitemNo, FuserNo, FplanName, FRes, FMsg, FBillNo);
|
|
// 获取输出结果
|
var Res = Convert.ToInt32(FRes.Value);
|
var Msg = FMsg.Value?.ToString();
|
var BillNo = FBillNo.Value?.ToString();
|
|
Console.WriteLine($"结果: {Res}, 返回消息: {Msg},单据号:{BillNo}");
|
|
return (Res, Msg, BillNo);
|
}
|
|
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);
|
|
var db = SqlSugarHelper.GetInstance();
|
// 创建参数
|
var FId = new SugarParameter("P_ID", detail.Gid);
|
|
// 输出参数
|
var FRes = new SugarParameter("c_result", null, true);
|
var FMsg = new SugarParameter("c_msg", null, true);
|
|
// 执行存储过程
|
db.Ado.UseStoredProcedure()
|
.GetDataTable("PRC_SJ_UPDATE_RESU", FId, FRes, FMsg);
|
|
// 获取输出结果
|
var Res = Convert.ToInt32(FRes.Value);
|
var Msg = FMsg.Value?.ToString();
|
|
Console.WriteLine($"结果: {Res}, 返回消息: {Msg}");
|
|
|
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 saveCommentGid(QsItem dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiReq>()
|
.SetColumns(it =>
|
it.Comments == dto.Comments) //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();
|
});
|
}
|
|
|
//NOTES
|
public int saveNotesPid(QsItem dto)
|
{
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiItem>()
|
.SetColumns(it =>
|
it.Notes == 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(QsItem item)
|
{
|
if (item == null)
|
throw new ArgumentNullException(nameof(item), "质检项数据不能为空");
|
|
if (string.IsNullOrWhiteSpace(item.userNo))
|
throw new ArgumentException("用户编号不能为空", nameof(item.userNo));
|
|
var (factory, company) = UserUtil.GetFactory(item.userNo);
|
try
|
{
|
// 定义输出参数
|
var outputResult = new SugarParameter("o_Result", null,
|
DbType.Int32, ParameterDirection.Output,
|
4000);
|
|
var outputMessage = new SugarParameter("o_Msg", null, DbType.String,
|
ParameterDirection.Output, 4000);
|
|
// 定义输入参数
|
var parameters = new List<SugarParameter>
|
{
|
new("p_Id", item.gid, DbType.Int32, ParameterDirection.Input),
|
new("p_Flag", 1, DbType.Int32, ParameterDirection.Input),
|
new("p_User", item.userNo, DbType.String,
|
ParameterDirection.Input),
|
outputResult,
|
outputMessage
|
};
|
|
var db = SqlSugarHelper.GetInstance();
|
|
// 使用 SqlSugar 执行存储过程
|
db.Ado.ExecuteCommand(
|
"BEGIN PRC_WOMDAA_SJ_UPDATE_RES(:p_Id,:p_Flag,:p_User,:o_Result, :o_Msg); END;",
|
parameters.ToArray());
|
|
// 获取输出参数的值
|
var resultValue = outputResult.Value?.ToString();
|
var messageValue = outputMessage.Value?.ToString();
|
|
if ("1".Equals(resultValue))
|
{
|
throw new Exception(messageValue);
|
}
|
|
if ("0".Equals(resultValue))
|
{
|
// 成功提交后推送钉钉消息
|
var qaSjSuccess = db.Queryable<QaSj>()
|
.Where(s => s.Id == item.gid)
|
.First();
|
if (qaSjSuccess != null)
|
{
|
try
|
{
|
var qaMsgDto = new
|
{
|
id = qaSjSuccess.Id,
|
lineName = qaSjSuccess.LineName,
|
workshopName = qaSjSuccess.WorkshopName,
|
qaType = "首件首检完成"
|
};
|
|
// 调用钉钉消息推送接口
|
var client = new System.Net.Http.HttpClient();
|
var json =
|
Newtonsoft.Json.JsonConvert.SerializeObject(
|
qaMsgDto);
|
var content = new System.Net.Http.StringContent(json,
|
System.Text.Encoding.UTF8, "application/json");
|
var response = client
|
.PostAsync(
|
"http://192.168.0.100:9096/MesQaDingtalk/sendQaMsgSJ",
|
content).Result;
|
}
|
catch (Exception ex)
|
{
|
// 记录钉钉推送异常,但不影响主流程
|
Console.WriteLine($"钉钉消息推送失败: {ex.Message}");
|
}
|
}
|
|
throw new Exception(messageValue);
|
}
|
|
|
return true;
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
|
public bool SJQaReSubmit(QsItem item)
|
{
|
if (item == null)
|
throw new ArgumentNullException(nameof(item), "质检项数据不能为空");
|
|
if (string.IsNullOrWhiteSpace(item.userNo))
|
throw new ArgumentException("用户编号不能为空", nameof(item.userNo));
|
|
var (factory, company) = UserUtil.GetFactory(item.userNo);
|
try
|
{
|
// 定义输出参数
|
var outputResult = new SugarParameter("o_Result", null,
|
DbType.Int32, ParameterDirection.Output,
|
4000);
|
|
var outputMessage = new SugarParameter("o_Msg", null, DbType.String,
|
ParameterDirection.Output, 4000);
|
|
// 定义输入参数
|
var parameters = new List<SugarParameter>
|
{
|
new("p_Id", item.gid, DbType.Int32, ParameterDirection.Input),
|
new("p_Flag", 2, DbType.Int32, ParameterDirection.Input),
|
new("p_User", item.userNo, DbType.String,
|
ParameterDirection.Input),
|
outputResult,
|
outputMessage
|
};
|
|
var db = SqlSugarHelper.GetInstance();
|
|
// 使用 SqlSugar 执行存储过程
|
db.Ado.ExecuteCommand(
|
"BEGIN PRC_WOMDAA_SJ_UPDATE_RES(:p_Id,:p_Flag,:p_User,:o_Result, :o_Msg); END;",
|
parameters.ToArray());
|
|
// 获取输出参数的值
|
var resultValue = outputResult.Value?.ToString();
|
var messageValue = outputMessage.Value?.ToString();
|
|
if ("1".Equals(resultValue))
|
{
|
throw new Exception(messageValue);
|
}
|
|
if ("0".Equals(resultValue))
|
{
|
throw new Exception(messageValue);
|
}
|
|
return true;
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// 更新QsItemIpiItem的IsPass值
|
/// </summary>
|
/// <param name="id">QsItemIpiItem的ID</param>
|
/// <param name="isPass">IsPass的值(0表示不合格,1表示合格)</param>
|
/// <returns>更新影响的行数</returns>
|
public int UpdateQsItemIpiItemIsPass(decimal id, decimal isPass)
|
{
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiItemDetail>()
|
.SetColumns(s => s.FcheckResu == isPass.ToString())
|
.SetColumns(s => s.Fstand == ((isPass == 1) ? "√" : "×"))
|
.Where(s => s.Pid == id)
|
.ExecuteCommand();
|
});
|
|
return SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
return db.Updateable<QsItemIpiItem>()
|
.SetColumns(s => s.IsPass == isPass)
|
.Where(s => s.Id == id)
|
.ExecuteCommand();
|
});
|
}
|
|
/// <summary>
|
/// 获取钉钉部门
|
/// </summary>
|
/// <returns></returns>
|
public List<DingDept> getDingDept()
|
{
|
var db = SqlSugarHelper.GetInstance();
|
return db.Queryable<DingDept>()
|
.Where(b => b.NoChild == 1)
|
.Select(b => new DingDept
|
{
|
Id = b.Id,
|
Name = b.Name
|
})
|
.ToList();
|
}
|
|
public List<DeptNode> BuildDeptTree()
|
{
|
var db = SqlSugarHelper.GetInstance();
|
var flatList = db.Queryable<DingDept>()
|
.ToList();
|
var lookup = flatList.ToDictionary(
|
d => d.Id,
|
d => new DeptNode
|
{
|
Id = d.Id,
|
Label = d.Name,
|
Value = d.Id
|
});
|
|
List<DeptNode> roots = new();
|
|
foreach (var dept in flatList)
|
{
|
if ((dept.Pid > 0 && lookup.ContainsKey(dept.Pid)))
|
{
|
lookup[dept.Pid].Children.Add(lookup[dept.Id]);
|
}
|
else
|
{
|
// parentId 为 null 的就是根节点
|
roots.Add(lookup[dept.Id]);
|
}
|
}
|
|
return roots;
|
}
|
|
/// <summary>
|
/// 获取钉钉员工
|
/// </summary>
|
/// <returns></returns>
|
public List<DingStaff> getDingUser()
|
{
|
var db = SqlSugarHelper.GetInstance();
|
return db.Queryable<DingStaff>()
|
.Select(b => new DingStaff
|
{
|
StaffName = b.StaffName,
|
Id = b.Id
|
})
|
.ToList();
|
}
|
|
|
/// <summary>
|
/// 异常处置单推送钉钉
|
/// </summary>
|
/// <returns></returns>
|
public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient()
|
{
|
AlibabaCloud.OpenApiClient.Models.Config config =
|
new AlibabaCloud.OpenApiClient.Models.Config();
|
config.Protocol = "https";
|
config.RegionId = "central";
|
return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);
|
}
|
|
public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient1()
|
{
|
AlibabaCloud.OpenApiClient.Models.Config config =
|
new AlibabaCloud.OpenApiClient.Models.Config();
|
config.Protocol = "https";
|
config.RegionId = "central";
|
return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);
|
}
|
|
|
public string GetToken()
|
{
|
AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient1();
|
AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
|
getAccessTokenRequest =
|
new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.
|
GetAccessTokenRequest
|
{
|
AppKey = "dingyzos0r1bizj7g6lr",
|
AppSecret =
|
"-HP4RvK2OUbqhG3iBUpd_TPe5MZRj8cfLc0b8Skt8rhC3I38kVLY9SS8P3kLWFcH",
|
};
|
|
try
|
{
|
var response = client.GetAccessToken(getAccessTokenRequest);
|
return response.Body.AccessToken; // 返回获取到的 Access Token
|
}
|
catch (TeaException err)
|
{
|
Console.WriteLine(
|
$"TeaException: Code={err.Code}, Message={err.Message}");
|
return null;
|
}
|
catch (Exception _err)
|
{
|
Console.WriteLine($"Exception: {_err.Message}");
|
return null;
|
}
|
}
|
|
public bool DingJZCSD(JzcsdData InData)
|
{
|
if (string.IsNullOrWhiteSpace(InData.Imodel))
|
throw new Exception("产品型号不能为空");
|
|
if (string.IsNullOrWhiteSpace(InData.selectedDeptID))
|
throw new Exception("请选择接收部门");
|
|
if (string.IsNullOrWhiteSpace(InData.selectedUserID))
|
throw new Exception("请选择负责人");
|
|
if (string.IsNullOrWhiteSpace(InData.ReplyDate))
|
throw new Exception("回复日期不能为空");
|
|
if (string.IsNullOrWhiteSpace(InData.Reason))
|
throw new Exception("问题描述不能为空");
|
|
if (string.IsNullOrWhiteSpace(InData.selectedADept))
|
throw new Exception("审批部门不能为空");
|
|
|
var db = SqlSugarHelper.GetInstance();
|
|
string numUserId = db.Queryable<DingStaff>()
|
.Where(t => t.StaffName == InData.Fname)
|
.Select(t => t.Id)
|
.First();
|
if (numUserId is not null)
|
{
|
string UserId = Convert.ToString(numUserId);
|
|
|
// 使用 JSON 序列化输出对象的详细内容
|
string InDataJson =
|
JsonConvert.SerializeObject(InData, Formatting.Indented);
|
Debug.WriteLine("InDataDetail: " + InDataJson);
|
|
// 获取 Access Token
|
string accessToken = GetToken();
|
if (string.IsNullOrEmpty(accessToken))
|
{
|
throw new Exception("获取 Access Token 失败");
|
}
|
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client
|
client = CreateClient();
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceHeaders startProcessInstanceHeaders =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceHeaders();
|
Debug.WriteLine(accessToken);
|
startProcessInstanceHeaders.XAcsDingtalkAccessToken =
|
accessToken; // 使用获取到的 Access Token
|
/*
|
产品型号 TextField-K2AD4O5B
|
纠正事项来源 DDMultiSelectField_19MZJHE2ZWM80
|
提出人员 InnerContactField_WY9BZDYT7W00
|
提出日期 DDDateField_JD4ISXXCNLS0
|
接收部门 DepartmentField_SLLT1GL6RC00
|
负责人 InnerContactField_1I3FYOICN4N40
|
回复日期 DDDateField_1NPTPIPNEI1S0
|
问题描述 TextareaField_1FUN513WLK4G0
|
审批选择 DDSelectField_WE67NWABXM80
|
*/
|
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues1 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//纠正事项来源
|
Name = "DDMultiSelectField_19MZJHE2ZWM80",
|
Value = InData.Source
|
/* Value = JsonConvert.SerializeObject(new[] {
|
new { value = InData.Source, label = "内部审核" }
|
})*/
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues2 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//提出人员
|
Name = "InnerContactField_WY9BZDYT7W00",
|
Value =
|
"[\"" + string.Join("\",\"", UserId) + "\"]",
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues3 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//提出日期
|
Name = "DDDateField_JD4ISXXCNLS0",
|
Value = DateTime.Now.ToString("yyyy-MM-dd"),
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues4 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//接收部门
|
Name = "DepartmentField_SLLT1GL6RC00",
|
Value = InData.selectedDeptID,
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues5 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//负责人
|
Name = "InnerContactField_1I3FYOICN4N40",
|
Value = "[\"" +
|
string.Join("\",\"",
|
InData.selectedUserID) + "\"]"
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues6 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//回复日期
|
Name = "DDDateField_1NPTPIPNEI1S0",
|
Value = InData.ReplyDate,
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues7 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//问题描述
|
Name = "TextareaField_1FUN513WLK4G0",
|
Value = InData.Reason,
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues8 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//审批选择
|
Name = "DDSelectField_WE67NWABXM80",
|
Value = InData.selectedADept,
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues9 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//提出部门
|
Name = "DepartmentField_184EOWTFMJUK0",
|
Value = "975745197", //固定为MES部门
|
};
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
formComponentValues10 =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues
|
{
|
//产品型号
|
Name = "TextField-K2AD4O5B",
|
Value = InData.Imodel,
|
};
|
|
|
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest startProcessInstanceRequest =
|
new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.
|
StartProcessInstanceRequest
|
{
|
OriginatorUserId = UserId,
|
ProcessCode =
|
"PROC-2752201A-3896-4CA7-82A1-ADBBE9F1B36A",
|
DeptId = 987012076,
|
FormComponentValues =
|
new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.
|
Models.StartProcessInstanceRequest.
|
StartProcessInstanceRequestFormComponentValues>
|
{
|
formComponentValues1, formComponentValues2,
|
formComponentValues3, formComponentValues4,
|
formComponentValues5, formComponentValues6,
|
formComponentValues7, formComponentValues8,
|
formComponentValues9,
|
formComponentValues10 //, formComponentValues11, formComponentValues12, formComponentValues13, formComponentValues14
|
},
|
// TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners>
|
//{
|
// targetSelectActioners0
|
//},
|
// Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers>
|
//{
|
// approvers0
|
//},
|
CcList = new List<string>
|
{
|
UserId
|
},
|
CcPosition = "START",
|
};
|
// 序列化 FormComponentValues 列表为 JSON 格式
|
string formComponentValuesJson = JsonConvert.SerializeObject(
|
startProcessInstanceRequest.FormComponentValues,
|
Formatting.Indented);
|
Debug.WriteLine("FormComponentValues: " + formComponentValuesJson);
|
try
|
{
|
string requestContent =
|
Newtonsoft.Json.JsonConvert.SerializeObject(
|
startProcessInstanceRequest);
|
Debug.WriteLine("startProcessInstanceRequest内容:");
|
Debug.WriteLine(requestContent);
|
var response = client.StartProcessInstanceWithOptions(
|
startProcessInstanceRequest, startProcessInstanceHeaders,
|
new RuntimeOptions());
|
//return $"钉钉工作流实例启动成功: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}";
|
return true;
|
}
|
catch (TeaException err)
|
{
|
string requestContent =
|
Newtonsoft.Json.JsonConvert.SerializeObject(
|
startProcessInstanceRequest);
|
Debug.WriteLine("startProcessInstanceRequest内容:");
|
Debug.WriteLine(startProcessInstanceRequest);
|
|
throw new Exception(err.Message);
|
//return $"TeaException: Code={err.Code}, Message={err.Message}";
|
}
|
//catch (Exception _err)
|
//{
|
// return $"Exception: {_err.Message}";
|
//}
|
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
else
|
{
|
throw new Exception("您不是公司成员或还未被加入到数据库中或名字填写错误,未找到匹配的用户信息");
|
//return "您不是公司成员或还未被加入到数据库中或名字填写错误,未找到匹配的用户信息";
|
}
|
}
|
}
|