| | |
| | | using MES.Service.Dto.service; |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using Newtonsoft.Json.Linq; |
| | | using SqlSugar; |
| | | using static Microsoft.EntityFrameworkCore.DbLoggerCategory; |
| | | |
| | |
| | | private readonly BaseService _baseService = new(); |
| | | |
| | | |
| | | private readonly string[] statusArray = ["开工", "待开工"]; |
| | | private readonly string[] statusArray = ["开工", "待开工","已开工" ,"未开工"]; |
| | | |
| | | //生成最新的检验单号 |
| | | public string getMaxReleaseNo() |
| | |
| | | return "XJN" + date + number; |
| | | } |
| | | |
| | | public List<Womdaa> getItem(string daa001) |
| | | public class DaaInfoDto |
| | | { |
| | | public decimal? Id { get; set; } |
| | | public string Daa001 { get; set; } |
| | | public string? Daa003 { get; set; } |
| | | public string? Daa004 { get; set; } |
| | | public decimal? Daa008 { get; set; } |
| | | public string? Daa015 { get; set; } |
| | | public string? Daa020 { get; set; } |
| | | public string? ItemNo { get; set; } // 来自关联表 |
| | | public string? ItemName { get; set; } |
| | | } |
| | | |
| | | public List<DaaInfoDto> getItem(string daa001) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | //in的写法 https://www.donet5.com/Home/Doc?typeId=1187 |
| | | |
| | | return db.Queryable<Womdaa>() |
| | | return db.Queryable<Womdaa,MesItems>((a, b) => new JoinQueryInfos( |
| | | JoinType.Inner, a.Daa002 == b.Id.ToString())) |
| | | .Where(a => |
| | | a.Daa001 == daa001 && |
| | | statusArray.Contains(a.Daa018)) |
| | | .Select((a, b) => new DaaInfoDto |
| | | { |
| | | Daa001= daa001, |
| | | Daa003=a.Daa003, |
| | | Daa004=a.Daa004, |
| | | Daa008=a.Daa008, |
| | | Daa015=a.Daa015, |
| | | Daa020=a.Daa020, |
| | | ItemNo=b.ItemNo, |
| | | ItemName = b.ItemName, |
| | | Id =a.Id |
| | | }) |
| | | .ToList(); |
| | | } |
| | | |
| | | public List<MesLine> getLineAll() |
| | | public List<QCUserLine> getLineAll(string UserNo) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | return db.Queryable<Womdaa, MesLine>((a, b) => |
| | | new JoinQueryInfos(JoinType.Left, a.Daa015 == b.LineNo)) |
| | | .Where((a, b) => b.LineName != null && |
| | | statusArray.Contains(a.Daa018)) |
| | | .GroupBy((a, b) => new |
| | | |
| | | return db.Queryable<QCUserLine>() |
| | | .Where(a => a.UserCode == UserNo) |
| | | .Select(a => new QCUserLine |
| | | { |
| | | b.LineNo, b.LineName |
| | | }) |
| | | .Select((a, b) => new MesLine |
| | | { |
| | | LineNo = b.LineNo, |
| | | LineName = b.LineName |
| | | }).OrderBy("b.LINE_NO").ToList(); |
| | | LineNo = a.LineNo, |
| | | LineName = a.LineName |
| | | }).OrderBy("LINENO").ToList(); |
| | | } |
| | | |
| | | public List<Womdaa> getDaa001(string daa020, string item) |
| | | |
| | | |
| | | public List<Womdaa> getDaa001(JObject data) |
| | | { |
| | | var daa020 = data["daa020"]?.ToString(); |
| | | var item = data["item"]?.ToString(); |
| | | |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | return db.Queryable<Womdaa, MesItems>((a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, a.Daa002 == b.Id.ToString())) |
| | | .Where((a, b) => |
| | | a.Daa015 == daa020 && |
| | | b.ItemNo == item && |
| | | statusArray.Contains(a.Daa018)) |
| | | .WhereIF(!string.IsNullOrEmpty(daa020), (a, b) => a.Daa015 == daa020) |
| | | .WhereIF(!string.IsNullOrEmpty(item), (a, b) => b.ItemNo == item) |
| | | .Where((a, b) => statusArray.Contains(a.Daa018)) |
| | | .Select<Womdaa>(a => new Womdaa |
| | | { |
| | | Id = a.Id, |
| | |
| | | }).ToList(); |
| | | } |
| | | |
| | | public (List<QsQaItemXj> items, int totalCount) getPage(XJPageResult queryObj) |
| | | public List<string?> GetItemProj(string? itemNo) |
| | | { //获取物料所有的检验计划名称 |
| | | |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | var plans = db.Queryable<MesQa>().Where(a => a.ItemNo == itemNo && a.QsType == "2") |
| | | .Select(s => s.QaPlan) |
| | | .Distinct() |
| | | .ToList(); |
| | | |
| | | return plans; |
| | | } |
| | | |
| | | public (List<QsQaItemXj> items, int totalCount) getPage( |
| | | XJPageResult queryObj) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | |
| | | //if (StringUtil.IsNotNullOrEmpty(queryObj.createUser)) |
| | | // lineNo = _baseService.getUserLineNo(queryObj.createUser); |
| | | |
| | | var query= db |
| | | var query = db |
| | | .Queryable<QsQaItemXj, Womdaa, MesLine, |
| | | MesItems>((s, a, c, b) => |
| | | MesItems, SysUser,Womcaa,SysDepartment, MesUserDepartmentQc,MesItems>((s, a, c, b, us,ca,d,dq,i) => |
| | | new JoinQueryInfos( |
| | | JoinType.Inner, s.BillNo == a.Daa001, |
| | | JoinType.Left, a.Daa015 == c.LineNo, |
| | | JoinType.Left, s.ItemId == b.Id |
| | | JoinType.Left, s.ItemId == b.Id, |
| | | JoinType.Left, us.Fcode == s.CreateBy, |
| | | JoinType.Left, ca.Caa020 == a.Daa021, |
| | | JoinType.Left, d.Departmentcode == c.Departmentcode, |
| | | JoinType.Left, dq.Departmentcode == d.Departmentcode,//查询用户权限 |
| | | JoinType.Left, i.Id == Convert.ToDecimal(a.Daa002) |
| | | ) |
| | | ) |
| | | //.WhereIF(lineNo != null && lineNo.Length > 0, |
| | |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.result) && |
| | | "未完成".Equals(queryObj.result), |
| | | (s, a, c, b) => s.SubmitStatus == 0 || s.SubmitStatus == null) |
| | | (s, a, c, b, us) => |
| | | s.SubmitStatus == 0 || s.SubmitStatus == null) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.result) && |
| | | !"未完成".Equals(queryObj.result), |
| | | (s, a, c, b) => s.SubmitStatus == 1) |
| | | .WhereIF(id > 0, (s, a, c, b) => s.Id == id) |
| | | .Select((s, a, c, b) => new QsQaItemXj |
| | | (s, a, c, b, us) => s.SubmitStatus == 1) |
| | | .WhereIF(id > 0, (s, a, c, b, us,ca) => s.Id == id) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.LoginUser), |
| | | (s, a, c, b, us, ca, d, dq) => dq.Usercode == queryObj.LoginUser) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue), |
| | | (s, a, c, b, us, ca, d, dq,i) => |
| | | s.ReleaseNo.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((s, a, c, b, us,ca,d) => new QsQaItemXj |
| | | { |
| | | Daa020 = c.LineNo, |
| | | Id = s.Id, |
| | | PlanQty = a.Daa008, |
| | | LineName = c.LineName, |
| | | CreateUser = us.Fname, |
| | | CreateBy = s.CreateBy, |
| | | CreateDate = s.CreateDate, |
| | | ReleaseNo = s.ReleaseNo, |
| | |
| | | ItemModel = b.ItemModel, |
| | | CheckBy = s.CheckBy, |
| | | CheckResult = s.CheckResult, |
| | | Remarks = s.Remarks |
| | | Remarks = s.Remarks, |
| | | SaleOrder = ca.Caa015, |
| | | DepartName = d.Departmentname, |
| | | PlanName = s.PlanName |
| | | |
| | | }).OrderBy(s => s.CreateDate, OrderByType.Desc); |
| | | var items = query.ToPageList(queryObj.PageIndex, queryObj.Limit,ref totalCount); |
| | | var items = query.ToPageList(queryObj.PageIndex, queryObj.Limit, |
| | | ref totalCount); |
| | | |
| | | return (items, totalCount); |
| | | } |
| | | |
| | | |
| | | public List<QsQaItemXj01> setJYItem(string itemNo) |
| | | public List<QsQaItemXj01> setJYItem(string itemNo, string planName) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | var count = db.Queryable<MesQa>().Where(s => s.QsType == "2" |
| | | && s.ItemNo == itemNo && s.Fsubmit == 1).Count(); |
| | | && s.ItemNo == itemNo && s.Fsubmit == 1 && s.QaPlan == planName).Count(); |
| | | |
| | | if (count <= 0) return new List<QsQaItemXj01>(); |
| | | |
| | | decimal? QsId = db.Queryable<MesQa>() |
| | | .Where(s => s.QsType == "2" |
| | | && s.ItemNo == itemNo |
| | | && s.QaPlan == planName |
| | | && s.Fsubmit == 1) |
| | | .Select(s => s.Id) |
| | | .First(); |
| | | |
| | | return db |
| | | .Queryable<MesQualityStandard>() |
| | | .Where(b => b.QsType == "2" |
| | | && b.ItemNo == itemNo).Select( |
| | | b => new QsQaItemXj01 |
| | | { |
| | | 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(); |
| | | .Where(b => b.Pid== QsId).Select(b => new QsQaItemXj01 |
| | | { |
| | | 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(); |
| | | } |
| | | |
| | | public List<QsQaItemXj01> getJYItem(decimal? pid, decimal? id) |
| | |
| | | |
| | | return Convert.ToInt32(xj.Id); |
| | | } |
| | | |
| | | |
| | | public bool XJQaSubmit(LLJDto rkjDto) |
| | | { |
| | | var useTransactionWithOracle = |
| | |
| | | .Where(s => s.Id == rkjDto.gid) |
| | | .ExecuteCommand(); |
| | | }); |
| | | |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | // 创建参数 |
| | | var FID = new SugarParameter("P_ID", rkjDto.gid); |
| | | |
| | | |
| | | var FRes = new SugarParameter("c_result", null, true); // 输出参数 |
| | | var FMsg = new SugarParameter("c_msg", null, true); |
| | | |
| | | // 执行存储过程 |
| | | db.Ado.UseStoredProcedure().GetDataTable("PRC_XJ_UPDATE_RES_JK", FID, FRes, FMsg); |
| | | |
| | | int result = int.Parse((string)FRes.Value); |
| | | string message = FMsg.Value == DBNull.Value ? string.Empty : (string)FMsg.Value; |
| | | if (result == 1) |
| | | { |
| | | //存储过程失败则事务进行回滚 |
| | | //db.Ado.RollbackTran(); |
| | | throw new Exception(message); |
| | | } |
| | | |
| | | |
| | | return useTransactionWithOracle > 0; |
| | | } |
| | |
| | | var items = xjDto.items; |
| | | var userNo = xjDto.userNo; |
| | | |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | var del = db.Deleteable<QsQaItemXj01>() |
| | | .Where(s => s.Pid == xjDto.gid) |
| | | .ExecuteCommand(); |
| | | |
| | | //QsItemIpiItemDetail |
| | | var del1 = db.Deleteable<QsQaItemXj02>() |
| | | .Where(s => s.Gid == xjDto.gid) |
| | | .ExecuteCommand(); |
| | | |
| | | // 数据验证 |
| | | var validationResult = ValidateItemsData(items); |
| | | if (!validationResult.isValid) |
| | |
| | | |
| | | // 获取检验项目数据 |
| | | var jyItems = getJYItemOptimized(db, xjDto.gid.Value); |
| | | |
| | | |
| | | if (jyItems.Any()) |
| | | { |
| | | // 处理业务逻辑计算 |
| | | var allDetails = PrepareDetailsData(jyItems, xjDto.gid.Value, userNo); |
| | | var allDetails = |
| | | PrepareDetailsData(jyItems, xjDto.gid.Value, userNo); |
| | | |
| | | if (allDetails.Count > 0) |
| | | { |
| | | // 批量插入检验详情 |
| | | db.Insertable(allDetails).ExecuteCommand(); |
| | | |
| | | |
| | | // 计算结果 |
| | | var (pidResults, fcheckResu) = CalculateResults(allDetails, jyItems); |
| | | |
| | | var (pidResults, fcheckResu) = |
| | | CalculateResults(allDetails, jyItems); |
| | | |
| | | // 批量更新检验项目结果 |
| | | foreach (var (pidValue, result) in pidResults) |
| | | { |
| | |
| | | } |
| | | |
| | | // 更新主表检验结果 |
| | | var totalSum = jyItems.Where(x => x.MaxValue == null && x.StandardValue == null && x.MinValue == null) |
| | | var totalSum = jyItems.Where(x => |
| | | x.MaxValue == null && x.StandardValue == null && |
| | | x.MinValue == null) |
| | | .Sum(x => x.LevelNum); |
| | | if (totalSum == allDetails.Count) |
| | | { |
| | |
| | | return Convert.ToInt32(xjDto.gid); |
| | | }); |
| | | } |
| | | |
| | | private List<QsQaItemXj01> getJYItemOptimized(ISqlSugarClient db, decimal xjId) |
| | | |
| | | private List<QsQaItemXj01> getJYItemOptimized(ISqlSugarClient db, |
| | | decimal xjId) |
| | | { |
| | | return db.Queryable<QsQaItemXj01>() |
| | | .Where(a => a.Pid == xjId) |
| | | .ToList(); |
| | | } |
| | | |
| | | private (bool isValid, string errorMsg) ValidateItemsData(List<QsQaItemXj01> items) |
| | | |
| | | private (bool isValid, string errorMsg) ValidateItemsData( |
| | | List<QsQaItemXj01> items) |
| | | { |
| | | if (items == null || !items.Any()) return (false, "检验项目不能为空"); |
| | | |
| | | var invalidItems = items.Where(x => x.LevelNum <= 0 || string.IsNullOrEmpty(x.ProjName)).ToList(); |
| | | if (invalidItems.Any()) |
| | | |
| | | var invalidItems = items |
| | | .Where(x => x.LevelNum <= 0 || string.IsNullOrEmpty(x.ProjName)) |
| | | .ToList(); |
| | | if (invalidItems.Any()) |
| | | return (false, $"存在{invalidItems.Count}个无效的检验项目"); |
| | | |
| | | |
| | | return (true, ""); |
| | | } |
| | | |
| | | private List<QsQaItemXj02> PrepareDetailsData(List<QsQaItemXj01> jyItems, decimal gid, string userNo) |
| | | private List<QsQaItemXj02> PrepareDetailsData(List<QsQaItemXj01> jyItems, |
| | | decimal gid, string userNo) |
| | | { |
| | | var allDetails = new List<QsQaItemXj02>(); |
| | | var now = DateTime.Now; |
| | | |
| | | |
| | | foreach (var s in jyItems) |
| | | { |
| | | if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null) |
| | | if (s.MaxValue != null || s.StandardValue != null || |
| | | s.MinValue != null) |
| | | continue; |
| | | |
| | | for (var i = 0; i < s.LevelNum; i++) |
| | |
| | | }); |
| | | } |
| | | } |
| | | |
| | | return allDetails; |
| | | } |
| | | |
| | | private (List<(decimal pid, int result)> pidResults, string fcheckResu) CalculateResults( |
| | | List<QsQaItemXj02> allDetails, List<QsQaItemXj01> jyItems) |
| | | private (List<(decimal pid, int result)> pidResults, string fcheckResu) |
| | | CalculateResults( |
| | | List<QsQaItemXj02> allDetails, List<QsQaItemXj01> jyItems) |
| | | { |
| | | var pidGroups = allDetails.GroupBy(x => x.Pid).ToList(); |
| | | var pidResults = new List<(decimal pid, int result)>(); |
| | | |
| | | |
| | | foreach (var group in pidGroups) |
| | | { |
| | | var count = group.Count(); |
| | |
| | | pidResults.Add((group.Key.Value, result)); |
| | | } |
| | | |
| | | var totalSum = jyItems.Where(x => x.MaxValue == null && x.StandardValue == null && x.MinValue == null) |
| | | var totalSum = jyItems.Where(x => |
| | | x.MaxValue == null && x.StandardValue == null && |
| | | x.MinValue == null) |
| | | .Sum(x => x.LevelNum); |
| | | var totalCount = allDetails.Count; |
| | | var totalPassCount = allDetails.Count(x => x.Fstand == "√"); |
| | | var fcheckResu = (totalSum == totalCount && totalCount == totalPassCount) ? "合格" : "不合格"; |
| | | var fcheckResu = |
| | | (totalSum == totalCount && totalCount == totalPassCount) |
| | | ? "合格" |
| | | : "不合格"; |
| | | |
| | | return (pidResults, fcheckResu); |
| | | } |
| | |
| | | |
| | | if (count == passCount) result = 1; |
| | | |
| | | var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle( |
| | | db => |
| | | var useTransactionWithOracle = |
| | | SqlSugarHelper.UseTransactionWithOracle(db => |
| | | { |
| | | var commit = 0; |
| | | commit += db.Updateable<QsQaItemXj01>() |
| | |
| | | .ExecuteCommand(); |
| | | }); |
| | | } |
| | | |
| | | public int saveNotesPid(XJDto dto) |
| | | { |
| | | return SqlSugarHelper.UseTransactionWithOracle(db => |
| | | { |
| | | return db.Updateable<QsQaItemXj01>() |
| | | .SetColumns(it => |
| | | it.Notes == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值 |
| | | .Where(it => it.Id == dto.pid) |
| | | .ExecuteCommand(); |
| | | }); |
| | | } |
| | | |
| | | //孙表修改备注字段 |
| | | public int saveRemarksById(XJDto dto) |
| | |
| | | .ExecuteCommand(); |
| | | }); |
| | | } |
| | | |
| | | public List<XJBadReason>? GetReason(string billNo) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | var count = db.Queryable<XJBadReason>().Where(s => s.BillNo == billNo).Count(); |
| | | |
| | | if (count <= 0) return null; |
| | | |
| | | var reason = db |
| | | .Queryable<XJBadReason>() |
| | | .Where(s => s.BillNo == billNo).Select( |
| | | b => new XJBadReason |
| | | { |
| | | Reason = b.Reason |
| | | }).ToList(); |
| | | |
| | | return reason; |
| | | } |
| | | |
| | | public decimal SavePlan(decimal pid, string PlanName) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | var res = db.Updateable<QsQaItemXj>() |
| | | .SetColumns(a => a.PlanName == PlanName) |
| | | .Where(a => a.Id == pid) |
| | | .ExecuteCommand(); |
| | | |
| | | return res; |
| | | |
| | | } |
| | | |
| | | public (decimal?, string?, string?) CreateNew(string? DaaNo, string? userNo, string? planName) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | // 创建参数 |
| | | var FitemNo = new SugarParameter("P_DAA001", DaaNo); |
| | | var FuserNo = new SugarParameter("P_USER", userNo); |
| | | var FplanName = new SugarParameter("P_PLAN_NAME", planName); |
| | | |
| | | |
| | | var FRes = new SugarParameter("P_FLAG", null, true); // 输出参数 |
| | | var FMsg = new SugarParameter("P_TEXT", null, true); |
| | | var FBillNo = new SugarParameter("po_BILL_NO", null, true); |
| | | |
| | | // 执行存储过程 |
| | | db.Ado.UseStoredProcedure().GetDataTable("PRC_XJ_GENERATE_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); |
| | | } |
| | | |
| | | } |