using System.Data; using System.Data.SqlClient; using System.Dynamic; using System.Text; using Gs.Entity.BaseInfo; using Gs.Entity.Dto; using Gs.Entity.QC; using Gs.Entity.Sys; using Gs.Entity.Warehouse; using Gs.Entity.Wom; using Gs.Toolbox; using Gs.Toolbox.ApiCore.Abstract.Mvc; using Gs.Toolbox.ApiCore.Common.Mvc; using Gs.Toolbox.ApiCore.Entity; using Gs.Toolbox.ApiCore.Group; using Gs.Warehouse.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; using SqlDataAdapter = System.Data.SqlClient.SqlDataAdapter; namespace Gs.Warehouse.Services; [ApiGroup(ApiGroupNames.PerMission)] public class MesInvItemOutsManager : Repository, IRomteService { // private readonly IHttpContextAccessor _http; private readonly MesInvItemOutCDetailsManager _mesInvItemOutCDetailsManager; private readonly MesInvItemOutItemsManager _mesInvItemOutsManager; private readonly string _userCode, _userGuid, _orgFids; public MesInvItemOutsManager(IHttpContextAccessor httpContextAccessor) { _http = httpContextAccessor; (_userCode, _userGuid, _orgFids) = UtilityHelper.GetUserGuidAndOrgGuid(_http); _mesInvItemOutsManager = new MesInvItemOutItemsManager(); _mesInvItemOutCDetailsManager = new MesInvItemOutCDetailsManager(); } //[RequestMethod(RequestMethods.POST)] //public ReturnDto MESToERP([FromBody] MesInvItemOutItems model) //{ // var _msgObj = MesToErpParam(model.Guid, model.ItemOutId, "", ErpOperationType.PurchaseReturnAudit); // var responses = InterfaceUtil.ResendERP(_msgObj); // if (responses.StartsWith("返回报错")) // { // LogHelper.Debug(ToString(), "erp:" + responses); // return ReturnDto.QuickReturn(0, // ReturnCode.Default, responses); // } // return ReturnDto.QuickReturn(1, ReturnCode.Success, "操作成功!"); //} //private string GetErpParametersMx(Guid guid) //{ // var materials = Db // .Queryable( // (a, b, c, d, e, f) => new JoinQueryInfos( // JoinType.Left, a.Guid == b.ItemOutId, // JoinType.Left, b.ItemId == c.Id, // JoinType.Left, d.Id.ToString() == c.ItemUnit, // JoinType.Left, // e.CbillNo == b.WorkNo && e.ItemId == b.ItemId, // JoinType.Left, f.DepotId == a.DepotId // )).Where((a, b, c, d, e, f) => b.Guid == guid) // .Select((a, b, c, d, e, f) => new Material // { // FMaterialId = c.ItemNo, // FRMREALQTY = b.Quantity.ToString(), // FStockId = f.DepotCode, // FUnitID = d.Fnumber, // FLot = b.WorkNo, // F_MES_ENTRYID = b.Guid, // FsrcEntryId = e.Guid.ToString() // }).ToList(); // var mm = Db.Queryable() // .Where(a => a.Guid == guid).First(); // var jsonEntries = materials.Select(d => new // { // d.FMaterialId, // d.FRMREALQTY, // d.FStockId, // d.FUnitID, // d.FLot, // F_MES_ENTRYID = d.F_MES_ENTRYID.ToString(), // d.FsrcEntryId // }).ToList(); // var fdate = DateTime.Now.ToString("yyyy-MM-dd"); // var jsonString = JsonConvert.SerializeObject(jsonEntries); // var encodedUrl = "taskname=CGTL&mesid=" + guid + // "&optype=create&datajson={\"F_MES_ID\":\"" + guid // + "\",\"FDate\":\"" + fdate // + "\",\"FSRCBillTypeId\":\"" + "采购入库单" // + "\",\"FDESCRIPTION\":\"" + mm.Remark // + "\",\"FMRMODE\":\"" + mm.Fmrmode // + "\",\"cgtlentry\":" + jsonString // + "}"; // return encodedUrl; //} //public MessageCenter MesToErpParam(Guid formId, Guid? guid, // string ErpUrl, ErpOperationType operationType) //{ // var mm = Db.Queryable() // .Where(a => a.Guid == guid).First(); // var tableName = ""; // var title = ""; // var pageName = ""; // var _strErpParameters =""; // switch (operationType) // { // case ErpOperationType.PurchaseReturnListReview: // tableName = "INV_ITEM_OUTS_A"; // title = "生产领料单 " + mm.ItemOutNo + " 审核"; // pageName = "Warehouse/ProductionPick/ProductionPick?id=" + // mm.Guid + // "&itemOutNo=" + mm.ItemOutNo; // _strErpParameters = SCLLAuditErpParamet(formId); // break; // case ErpOperationType.ProductionPickReverseAudit: // tableName = "INV_ITEM_OUTS_A"; // title = "生产领料单 " + mm.ItemOutNo + " 反审核"; // pageName = "Warehouse/ProductionPick/ProductionPick?id=" + // mm.Guid + // "&itemOutNo=" + mm.ItemOutNo; // _strErpParameters = SCLLReverseAuditErpParamet(formId); // break; // case ErpOperationType.PurchaseReturnAudit: // tableName = "MesInvItemOuts"; // title = "采购退料单 " + mm.ItemOutNo; // pageName = "Warehouse/PurchaseReturn/Add?id=" + mm.Guid + // "&itemOutNo=" + mm.ItemOutNo; // _strErpParameters = GetErpParametersMx(formId); // break; // default: // throw new ArgumentOutOfRangeException(nameof(operationType), // "Invalid ERP operation type"); // } // var message = new MessageCenter // { // TableName = tableName, // Url = ErpUrl, // Status = 1, // CreateBy = _userCode, // Route = guid.ToString(), // Title = title, // PageName = pageName, // CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), // Method = "POST", // Seq = 1, // Data = _strErpParameters, // IsMessage = 0, // ContentType = "application/x-www-form-urlencoded" // }; // return message; //} #region 生产领料单 ///// ///// 生产领料单审核 ///// ///// ///// //[RequestMethod(RequestMethods.POST)] //public ReturnDto SCLLAuditSendErp([FromBody] MesInvItemOuts model) //{ // var mesInvItemOuts = Db.Queryable() // .Where(a => a.ItemOutNo == model.ItemOutNo).First(); // if (mesInvItemOuts == null) throw new Exception("领料单号不存在"); // var womcaa = Db.Queryable() // .Where(s => s.Caa022.ToString() == mesInvItemOuts.WorkNo).First(); // if (womcaa == null) throw new Exception("任务单号不存在"); // var womdaa = Db.Queryable() // .Where(s => s.Daa001 == mesInvItemOuts.PbillNo).First(); // if (womdaa == null) throw new Exception("工单号不存在"); // var C_DEPARTMENTCODE = Db.Queryable( // (a, b) => new object[] // { // JoinType.Left, a.Departmentid.ToString() == b.OutPart // }).Where((a, b) => b.OutPart == mesInvItemOuts.OutPart) // .Select((a, b) => a.Departmentcode).First(); // if (C_DEPARTMENTCODE == null) throw new Exception("部门信息不存在"); // if (mesInvItemOuts.Status == 1) throw new Exception("领料单已审核,不能重复推送"); // var _msgObj = MesToErpParam(mesInvItemOuts.Guid, null, "", ErpOperationType.PurchaseReturnListReview); // var responses = InterfaceUtil.ResendERP(_msgObj); // if (responses.StartsWith("返回报错")) // { // LogHelper.Debug(ToString(), "erp:" + responses); // return ReturnDto.QuickReturn(0, // ReturnCode.Default, responses); // } // return ReturnDto.QuickReturn(1, ReturnCode.Success, "操作成功!"); //} ///// ///// 生产领料单反审核 ///// ///// ///// //[RequestMethod(RequestMethods.POST)] //public ReturnDto SCLLReverseAuditErp([FromBody] MesInvItemOuts model) //{ // var mesInvItemOuts = Db.Queryable() // .Where(a => a.ItemOutNo == model.ItemOutNo).First(); // if (mesInvItemOuts == null) throw new Exception("领料单号不存在"); // var womcaa = Db.Queryable() // .Where(s => s.Caa022.ToString() == mesInvItemOuts.WorkNo).First(); // if (womcaa == null) throw new Exception("任务单号不存在"); // var womdaa = Db.Queryable() // .Where(s => s.Daa001 == mesInvItemOuts.PbillNo).First(); // if (womdaa == null) throw new Exception("工单号不存在"); // var C_DEPARTMENTCODE = Db.Queryable( // (a, b) => new object[] // { // JoinType.Left, a.Departmentid.ToString() == b.OutPart // }).Where((a, b) => b.OutPart == mesInvItemOuts.OutPart) // .Select((a, b) => a.Departmentcode).First(); // if (C_DEPARTMENTCODE == null) throw new Exception("部门信息不存在"); // // if (mesInvItemOuts.Status == 1) throw new Exception("领料单已审核,不能重复推送"); // var _msgObj = MesToErpParam(mesInvItemOuts.Guid, null, "", ErpOperationType.ProductionPickReverseAudit); // var responses = InterfaceUtil.ResendERP(_msgObj); // if (responses.StartsWith("返回报错")) // { // LogHelper.Debug(ToString(), "erp:" + responses); // return ReturnDto.QuickReturn(0, // ReturnCode.Default, responses); // } // return ReturnDto.QuickReturn(1, ReturnCode.Success, "操作成功!"); //} //private string SCLLReverseAuditErpParamet(Guid formId) //{ // var encodedUrl = "taskname=SCLL&mesid=" + formId + // "&optype=delete&datajson={}"; // return encodedUrl; //} /// /// 生产领料单查询 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto> GetListPageSCLL(PageQuery query) { var itemsList = GetOut(query, Guid.Empty); var pageList = new PageList(itemsList.Item1, itemsList.totalCount, query.everyPageSize); return ReturnDto>.QuickReturn(pageList, ReturnCode.Success, "读取成功"); } [RequestMethod(RequestMethods.POST)] public ReturnDto GetModelSCLL( [FromBody] MesInvItemOuts model) { var query = new PageQuery { currentPage = 1, everyPageSize = 1 }; var (mesInvItemOutsList, totalCount) = GetOut(query, model.Guid); if (totalCount <= 0) return ReturnDto.QuickReturn(new MesInvItemOuts(), ReturnCode.Default, "读取失败!"); var mesInvItemOuts = mesInvItemOutsList[0]; mesInvItemOuts.MesInvItemOutCDetailsList = GetMesInvItemOutCDetailsSCLL(mesInvItemOuts.Guid); mesInvItemOuts.MesInvItemOutItemsList = getInvItemOutItemsListSCLL(mesInvItemOuts.Guid); return ReturnDto.QuickReturn(mesInvItemOuts, ReturnCode.Success, "读取成功!"); } private List GetMesInvItemOutCDetailsSCLL( Guid? itemOutId) { return Db.Queryable( (b, c, d, e) => new object[] { JoinType.Left, b.ItemId == c.Id, JoinType.Left, b.DepotId == d.DepotId, JoinType.Left, b.DepotSectionCode == e.DepotSectionCode }) .Where((b, c, d, e) => b.ItemOutId == itemOutId) .Select((b, c, d, e) => new MesInvItemOutCDetails { Guid = b.Guid, DepotSectionCode = b.DepotSectionCode, DepotCode = d.DepotCode, ForceOutFlag = b.ForceOutFlag, ItemNo = c.ItemNo, Quantity = b.Quantity, ItemBarcode = b.ItemBarcode, ItemName = c.ItemName, ItemModel = c.ItemModel, ColorName = c.ColorName, DepotName = d.DepotName, DepotSectionName = e.DepotSectionName }).ToList(); } private List getInvItemOutItemsListSCLL(Guid itemOutId) { var mesInvItemOutItemsList = Db.Queryable( (c, s) => new object[] { JoinType.Inner, c.ItemId == s.Id }).Where((c, s) => c.ItemOutId == itemOutId) .Select((c, s) => new MesInvItemOutItems { Guid = c.Guid, WorkNo = c.WorkNo, Remark = c.Remark, Quantity = c.Quantity, ItemNo = s.ItemNo, ItemName = s.ItemName, ItemModel = s.ItemModel, ItemUnit = s.ItemUnit }).ToList(); return mesInvItemOutItemsList; } private (List, int totalCount) GetOut(PageQuery query, Guid? guid) { var _sbWhere = new StringBuilder(" 1=1" + query.keyWhere); var _sbBy = new StringBuilder(query.sortName + " " + query.sortOrder); var totalCount = 0; var result = Db .Queryable( (a, s, b, c, t, o, i) => new object[] { JoinType.Left, a.BoardItem == s.Id.ToString(), JoinType.Left, a.BillTypeId == b.Id, JoinType.Left, a.TransactionNo == c.TransactionNo, JoinType.Left, a.OutPart == t.Id.ToString(), JoinType.Left, a.DepotId == o.DepotId, JoinType.Left, a.SuppId == i.Id }) .Select((a, s, b, c, t, o, i) => new MesInvItemOuts { Guid = a.Guid, OutType = a.OutType, OutPart = a.OutPart, BoardItem = a.BoardItem, PbillNo = a.PbillNo, OutDate = a.OutDate, CheckDate = a.CheckDate, WorkNo = a.WorkNo, Status = a.Status, CreateBy = a.CreateBy, ItemOutNo = a.ItemOutNo, ItemNo = s.ItemNo, ItemName = s.ItemName, BillTypeName = b.BillTypeName, TransactionName = c.TransactionName, DepotName = o.DepotName, Departmentname = t.Departmentname, SuppName = i.SuppName }) .Where(a => a.BillTypeId == 200 && a.TransactionNo == 201 && a.IsVisual == true) .Where(_sbWhere.ToString()) .WhereIF(UtilityHelper.CheckGuid(guid), a => a.Guid == guid).OrderBy(_sbBy.ToString()) .ToPageList(query.currentPage, query.everyPageSize, ref totalCount); return (result, totalCount); } private string SCLLAuditErpParamet(Guid formId) { var materials = Db .Queryable( (a, s, u, d, e, f) => new JoinQueryInfos( JoinType.Left, a.ItemId == s.Id, JoinType.Left, u.Id.ToString() == s.ItemUnit, JoinType.Left, a.DepotId == d.DepotId, JoinType.Left, a.Dabid == e.Guid, JoinType.Left, e.Eid == f.Erpid )) .Where((a, s, u, d, e, f) => a.ItemOutId == formId) // 根据 ITEM_OUT_ID 过滤 .GroupBy((a, s, u, d, e, f) => new { s.ItemNo, d.DepotCode, u.Fnumber, a.Guid, e.Erpid, f.Mtono, f.Lot }) .Select((a, s, u, d, e, f) => new Material { FMaterialId = s.ItemNo, FUnitID = u.Fnumber, FAppQty = SqlFunc.AggregateSum(a.Quantity).ToString() ?? "0", FActualQty = SqlFunc.AggregateSum(a.Quantity).ToString() ?? "0", FMtoNo = f.Mtono, FLot = f.Lot, FStockId = d.DepotCode, FPPBomEntryId = e.Erpid.ToString(), F_MES_ENTRYID = a.Guid }).ToList(); var mm = Db.Queryable() .Where(a => a.Guid == formId).First(); var jsonEntries = materials.Select(d => new { d.FMaterialId, d.FUnitID, d.FAppQty, d.FActualQty, d.FMtoNo, d.FLot, d.FStockId, d.FPPBomEntryId, d.F_MES_ENTRYID }).ToList(); var fdate = DateTime.Now.ToString("yyyy-MM-dd"); var jsonString = JsonConvert.SerializeObject(jsonEntries); var encodedUrl = "taskname=SCLL&mesid=" + formId + "&optype=create&datajson={\"F_MES_ID\":\"" + formId + "\",\"FDate\":\"" + fdate + "\",\"FPickerId\":\"" + _userCode + "\",\"scllentry\":" + jsonString + "}"; return encodedUrl; } /// /// 生产领料单审核和反审核 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto EditModelSubmit([FromBody] dynamic mode) { string _guid = mode.guid; dynamic m = new ExpandoObject(); m.outSum = 0; m.outMsg = ""; using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand("prc_scll_submit", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@outMsg", SqlDbType.NVarChar, 300), new("@outSum", SqlDbType.Int), new("@inEdtUserGuid", _userGuid), new("@inOrderGuid", _guid), new("@inFieldValue", 1), new("@in1", ""), new("@in2", "") }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); cmd.ExecuteNonQuery(); m.outSum = parameters[1].Value.ToString(); m.outMsg = parameters[0].Value.ToString(); } catch (Exception ex) { LogHelper.Debug(ToString(), "prc_scll_submit error:" + ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Default, ex.Message); } finally { conn.Close(); } } } return ReturnDto.QuickReturn(m, ReturnCode.Success, "操作成功!"); } #endregion #region CRUD /// /// 根据供应商id 读取退货物料 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto> GetCgtlViews([FromBody] dynamic model) { int currentPage = model.currentPage; int everyPageSize = model.everyPageSize; string sortName = model.sortName; string keyWhere = model.keyWhere; string inBusType = model.inBusType; string inSupId = model.inSupId; var dset = new DataSet(); try { using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand("[prc_cgth_select]", conn)) { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@inCurrentPage", currentPage), new("@inEveryPageSize", everyPageSize), new("@inSortName", sortName), new("@inSortOrder", ""), new("@inQueryWhere", keyWhere), new("@inBusType", inBusType), new("@inSupId", inSupId), new("@inP1", ""), new("@inP2", "") }; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); using (var dt = new SqlDataAdapter(cmd)) { dt.Fill(dset, "0"); } } conn.Close(); } } catch (Exception ex) { LogHelper.Debug(ToString(), "GetListPage error:" + ex.Message); return ReturnDto>.QuickReturn( default(PageList), ReturnCode.Exception, "读取失败"); } var _pglist = new PageList { total = 0, everyPageSize = 0, pages = 0, list = new List() }; if (dset != null && dset.Tables.Count > 0 && dset.Tables[0].Rows.Count > 0) //有数据 { var intTotal = int.Parse(dset.Tables[1].Rows[0]["intTotal"].ToString()); var pages = intTotal % everyPageSize != 0 ? intTotal / everyPageSize + 1 : intTotal / everyPageSize; _pglist.total = intTotal; _pglist.everyPageSize = everyPageSize; _pglist.pages = pages; var _dy = dset.Tables[0].TableToDynamicList(); _pglist.list = _dy; } return ReturnDto>.QuickReturn(_pglist, ReturnCode.Success, "读取成功"); } /// /// 根据用户选择的采购明细guid,读取需要作入库到货单的明细 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto> GetListPageByThmxGuid( JArray guidList) { var intArray = guidList.ToObject(); var sbLine = new StringBuilder(); foreach (var str in intArray) { if (sbLine.Length > 0) sbLine.Append(","); sbLine.Append(str); } var lst = new List(); var dset = new DataSet(); using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand("[prc_cgth_get_mx_from_dh]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@inP1", sbLine.ToString()) }; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); using (var dt = new SqlDataAdapter(cmd)) { dt.Fill(dset, "0"); } } catch (Exception ex) { LogHelper.Debug(ToString(), "prc_cgth_get_mx_from_dh error:" + ex.Message); } finally { conn.Close(); } } } if (dset != null && dset.Tables.Count > 0 && dset.Tables[0].Rows.Count > 0) //有数据 lst = dset.Tables[0].TableToDynamicList(); return ReturnDto>.QuickReturn(lst, ReturnCode.Success, "读取成功!"); } /// /// 查询列表,支持分页 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto> GetListPage(PageQuery query) { var itemsList = getPage(query, Guid.Empty); var pageList = new PageList(itemsList.Item1, itemsList.totalCount, query.everyPageSize); return ReturnDto>.QuickReturn(pageList, ReturnCode.Success, "读取成功"); } private (List, int totalCount) getPage(PageQuery query, Guid? guid) { var totalCount = 0; var mesInvItemOutsList = Db .Queryable( (a, e, i, u1, u3) => new object[] { JoinType.Left, a.DepotId == e.DepotId, JoinType.Left, a.SuppId == i.Id, JoinType.Left, a.CreateBy == u1.Account, JoinType.Left, a.CheckUser == u3.Account }) .WhereIF(UtilityHelper.CheckGuid(guid), (a, e, i, u1, u3) => a.Guid == guid) .OrderByDescending((a, e, i, u1, u3) => a.ItemOutNo) .Select((a, e, i, u1, u3) => new MesInvItemOuts { Guid = a.Guid, FType = a.FType, SuppNo = i.SuppNo, CheckDate = a.CheckDate, CheckUser = a.CheckUser, Nflag = a.Nflag, Reason = a.Reason, Remark = a.Remark, Fmrmode = a.Fmrmode, DepotCode = e.DepotCode, CreateDate = a.CreateDate, CreateBy = a.CreateBy, Status = a.Status, ItemOutNo = a.ItemOutNo, DepotName = e.DepotName, SuppName = i.SuppName, CreateByFname = u1.UserName, CheckUserFname = u3.UserName, DepotId = a.DepotId, SuppId = a.SuppId }).ToPageList(query.currentPage, query.everyPageSize, ref totalCount); return (mesInvItemOutsList, totalCount); } /// /// 根据主表id读取主表和子表 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto GetModel( [FromBody] MesInvItemOuts model) { var query = new PageQuery { currentPage = 1, everyPageSize = 1 }; var (mesInvItemOutsList, totalCount) = getPage(query, model.Guid); if (totalCount <= 0) return ReturnDto.QuickReturn(new MesInvItemOuts(), ReturnCode.Default, "读取失败!"); var mesInvItemOuts = mesInvItemOutsList[0]; mesInvItemOuts.MesInvItemOutCDetailsList = GetMesInvItemOutCDetails(mesInvItemOuts.Guid); mesInvItemOuts.MesInvItemOutItemsList = getMesInvItemOutItemsList(mesInvItemOuts.Guid); return ReturnDto.QuickReturn(mesInvItemOuts, ReturnCode.Success, "读取成功!"); } private List GetMesInvItemOutCDetails(Guid itemOutId) { return Db.Queryable( (b, bar, c, d, e) => new object[] { JoinType.Left, b.ItemBarcode == bar.ItemBarcode, JoinType.Left, b.ItemId == c.Id, JoinType.Left, b.DepotId == d.DepotId, JoinType.Left, c.ItemUnit == e.Id.ToString() }) .Where((b, bar, c, d, e) => b.ItemOutId == itemOutId) .Select((b, bar, c, d, e) => new MesInvItemOutCDetails { Guid = b.Guid, Quantity = b.Quantity, DepotCode = b.DepotCode, DepotSectionCode = b.DepotSectionCode, EbelnK3id = b.EbelnK3id, LineK3id = b.LineK3id, ItemNo = c.ItemNo, ItemBarcode = b.ItemBarcode, ItemName = c.ItemName, ItemModel = c.ItemModel, DepotName = d.DepotName, Fnumber = e.Fnumber, DepotId = b.DepotId, ItemId = b.ItemId, ItemOutId = b.ItemOutId }).ToList(); } private List getMesInvItemOutItemsList(Guid itemOutId) { var mesInvItemOutItemsList = Db.Queryable( (c, s) => new object[] { JoinType.Inner, c.ItemId == s.Id }).Where((c, s) => c.ItemOutId == itemOutId) .Select((c, s) => new MesInvItemOutItems { Guid = c.Guid, TlQty = c.TlQty, WorkLine = c.WorkLine, PbillNo = c.PbillNo, LineK3id = c.LineK3id, DepotCode = c.DepotCode, Status = c.Status, Remark = c.Remark, EbelnK3id = c.EbelnK3id, Quantity = c.Quantity, ItemNo = s.ItemNo, ItemName = s.ItemName, ItemModel = s.ItemModel, ItemId = c.ItemId, RkNo = c.RkNo, WorkNo = c.WorkNo, AboutGuid = c.AboutGuid }).ToList(); foreach (var mesInvItemOutItemse in mesInvItemOutItemsList) { var u = Db.Queryable() .GroupBy(it => new { it.ItemId, it.PbillNo, it.WorkLine, it.RkNo }) .Where(it => it.ItemId == mesInvItemOutItemse.ItemId // && it.PbillNo == mesInvItemOutItemse.PbillNo // && it.WorkLine == mesInvItemOutItemse.WorkLine && it.RkNo == mesInvItemOutItemse.RkNo) .Select(it => new { KtQty = SqlFunc.AggregateSum(it.Quantity ?? 0) }).First(); var s1 = Db.Queryable() .GroupBy(it => new { it.ItemId, it.Ebeln, it.WorkLine, it.BillNo }) .Where(it => it.ItemId == mesInvItemOutItemse.ItemId && it.CbillNo == mesInvItemOutItemse.WorkNo // && it.WorkLine == mesInvItemOutItemse.WorkLine // && it.BillNo == mesInvItemOutItemse.RkNo ) .Select(it => new { RkQty = SqlFunc.AggregateSum(it.Quantity ?? 0) }).First(); mesInvItemOutItemse.KtQty = s1.RkQty - u.KtQty; } return mesInvItemOutItemsList; } /// /// 增加或编辑实体 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto EditModel([FromBody] MesInvItemOuts model) { Guid? guid = model.Guid; //主键 var bz = model.Remark; //备注 var gysId = model.SuppId; //供应商 var ckId = model.DepotId; //仓库 var fType = model.FType; //0=采购,1=委外 var Remark = model.Remark; var Fmrmode = model.Fmrmode; var Reason = model.Reason; var _sb = new StringBuilder(); var _split = "|"; foreach (var m in model.MesInvItemOutItemsList) { var _line = m.AboutGuid + _split + m.Quantity + _split + (UtilityHelper.CheckGuid(m.Guid) ? m.Guid.ToString() : Guid.Empty.ToString()); if (_sb.Length > 0) _sb.Append("~"); _sb.Append(_line); } var _outMsg = ""; var _outSum = -1; using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand("[prc_cgth_edt]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@outMsg", SqlDbType.NVarChar, 300), new("@outSum", SqlDbType.Int), new("@inOrderGuid", UtilityHelper.CheckGuid(guid) ? guid : DBNull.Value), new("@inBz", bz), new("@inGysId", gysId), new("@inCkId", ckId), new("@inFType", fType), new("@Fmrmode", Fmrmode), new("@Reason", Reason), new("@inEdtUserGuid ", _userGuid), new("@inLineList ", _sb.ToString()) }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); cmd.ExecuteNonQuery(); _outMsg = parameters[0].Value.ToString(); _outSum = int.Parse(parameters[1].Value.ToString()); } catch (Exception ex) { LogHelper.Debug(ToString(), "prc_cgdhd_Edt error:" + ex.Message); _outMsg = ex.Message; _outSum = -1; } finally { conn.Close(); } } } if (_outSum <= 0) return ReturnDto.QuickReturn(guid.ToString(), ReturnCode.Exception, _outMsg); return ReturnDto.QuickReturn(guid.ToString(), ReturnCode.Success, _outMsg); } /// /// 删除主表 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto DeleteModel([FromBody] JArray guidList) { var intArray = guidList.ToObject(); var cont = IsChkOrUnChk(intArray[0]); if (cont > 0) return ReturnDto.QuickReturn(default(int?), ReturnCode.Exception, "删除失败,该信息已被审核!"); int? rtnInt = base.DeleteByIds(intArray) ? intArray.Length : 0; var guidArray = Guid.Empty; foreach (var t in intArray) { if (Guid.TryParse(t, out var guid)) guidArray = guid; Db.Deleteable() .Where(s => s.ItemOutId == guidArray) .ExecuteCommand(); Db.Deleteable() .Where(s => s.ItemOutId == guidArray) .ExecuteCommand(); } return rtnInt > 0 ? ReturnDto.QuickReturn(rtnInt, ReturnCode.Success, "操作成功,共删除" + rtnInt + "条数据!") : ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, "删除失败,请重试!"); } /// /// 删除明细实体,支持批量删除 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto DeleteModelMx2([FromBody] JArray guidList) { var intArray = guidList.ToObject(); var cont = 0; cont = IsChkOrUnChkByMx2(intArray[0]); if (cont > 0) return ReturnDto.QuickReturn(default(int?), ReturnCode.Exception, "删除失败,该信息已被审核!"); int? rtnInt = (int)ReturnCode.Default; var _manager = new MesInvItemOutItemsManager(); rtnInt = _manager.DeleteById(intArray) ? intArray.Length : 0; if (rtnInt > 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Success, "操作成功,共删除" + rtnInt + "条数据!"); return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, "删除失败,请重试!"); } private int IsChkOrUnChkByMx2(string _mxGuid) { var _manager = new MesInvItemOutItemsManager(); var md = _manager.GetById(_mxGuid); return IsChkOrUnChk(md.ItemOutId.ToString()); } //查询主表是否审核 private int IsChkOrUnChk(string? _guid) { var cont = Db.Queryable() .Where(it => it.Guid == Guid.Parse(_guid) && it.Status == 1) .Count(); return cont; } #endregion }