| | |
| | | using System.Data; |
| | | using MES.Service.DB; |
| | | using MES.Service.DB; |
| | | using MES.Service.Dto.service; |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using DbType = System.Data.DbType; |
| | | |
| | | namespace MES.Service.service.Warehouse; |
| | | |
| | | public class MesInvItemOutsManager : Repository<MesInvItemOuts> |
| | | { |
| | | //当前类已经继承了 Repository 增、删、查、改的方法 |
| | | //这里面写的代码不会给覆盖,如果要重新生成请删除 MesInvItemOutsManager.cs |
| | | private readonly int BILL_TYPE_ID = 200; |
| | | private readonly int TRANSACTION_NO = 203; |
| | | |
| | | public List<MesInvItemOuts> GetProductionPickPage(WarehouseQuery query) |
| | | public bool ReturnRequest(ItemOut oItemOut) |
| | | { |
| | | return Db.Queryable<MesInvItemOuts, MesDepots>((a, o) => |
| | | new JoinQueryInfos( |
| | | JoinType.Left, |
| | | o.DepotCode == a.DepotCode && a.Company == o.Company && |
| | | a.Factory == o.Factory |
| | | )) |
| | | .Where((a, o) => a.BillTypeId == 200 && |
| | | a.TransactionNo == 201 && |
| | | a.Factory == "1000" && |
| | | a.Company == "1000" && |
| | | a.IsVisual == 1) |
| | | .WhereIF(query.status != null, (a, o) => a.Status == query.status) |
| | | .WhereIF(query.id != null, (a, o) => a.Id == query.id) |
| | | .Select((a, o) => new MesInvItemOuts |
| | | { |
| | | Id = a.Id, |
| | | Sapstatus = a.Sapstatus, |
| | | OutDate = a.OutDate, |
| | | CheckDate = a.CheckDate, |
| | | BoardItem = a.BoardItem, |
| | | WorkNo = a.WorkNo, |
| | | OutPart = a.OutPart, |
| | | PbillNo = a.PbillNo, |
| | | OutType = a.OutType, |
| | | CreateBy = a.CreateBy, |
| | | Status = a.Status, |
| | | CheckUser = a.CheckUser, |
| | | ItemOutNo = a.ItemOutNo, |
| | | DepotName = o.DepotName // 需要动态添加的字段 |
| | | }) |
| | | .ToPageList(query.PageIndex, query.Limit); |
| | | } |
| | | var itemOutFrom = oItemOut.from; |
| | | var itemOutLists = oItemOut.items; |
| | | |
| | | public MaterialReceipt GetProductionPick(WarehouseQuery query) |
| | | { |
| | | var form = new MaterialReceipt(); |
| | | if (query.id != null) |
| | | { |
| | | var mesInvItemOutsList = GetProductionPickPage(query); |
| | | if (mesInvItemOutsList.Count <= 0) return form; |
| | | |
| | | form.ItemOuts = mesInvItemOutsList[0]; |
| | | form.ItemsList = getProductionItemsList(query); |
| | | form.InvItemoutCDetails = GetProductionDetails(query); |
| | | } |
| | | |
| | | return form; |
| | | } |
| | | |
| | | private List<MesInvItemOutItems> getProductionItemsList( |
| | | WarehouseQuery query) |
| | | { |
| | | return Db.Queryable<MesInvItemOutItems, MesItems, MesDepTaskInfo>( |
| | | (c, s, f) => new JoinQueryInfos( |
| | | JoinType.Inner, c.ItemNo == s.ItemNo, |
| | | JoinType.Left, f.TaskNo == c.TaskNo && f.ItemNo == c.ItemNo |
| | | )) |
| | | .Where((c, s, f) => c.ItemOutId == query.id) |
| | | .OrderBy(c => c.Id) |
| | | .Select((c, s, f) => new MesInvItemOutItems |
| | | { |
| | | Id = c.Id, |
| | | ItemNo = c.ItemNo, |
| | | Quantity = c.Quantity, |
| | | TaskNo = c.TaskNo, |
| | | Remark = c.Remark, |
| | | ItemName = s.ItemName, // 动态字段 |
| | | ItemModel = s.ItemModel, // 动态字段 |
| | | ItemUnit = SqlFunc.Subqueryable<MesItems>() |
| | | .Where(si => si.ItemUnit == s.ItemUnit) |
| | | .Select(si => |
| | | SqlFunc.MappingColumn<string>( |
| | | "F_GETUNITNAME(si.Item_Unit)")) // 动态字段 |
| | | }) |
| | | // 根据AsnNo和MesNo对明细进行分组 |
| | | var groupedItems = itemOutLists |
| | | .GroupBy(item => new { item.MesNo, item.SqNo }) |
| | | .ToList(); |
| | | } |
| | | |
| | | private List<MesInvItemOutCDetails> GetProductionDetails( |
| | | WarehouseQuery query) |
| | | { |
| | | return Db |
| | | .Queryable<MesInvItemOutCDetails, MesItems, MesDepots>( |
| | | (b, c, d) => new JoinQueryInfos( |
| | | JoinType.Left, |
| | | b.ItemNo == c.ItemNo && b.Company == c.Company && |
| | | b.Factory == c.Factory, |
| | | JoinType.Left, |
| | | d.DepotCode == b.DepotCode && b.Company == d.Company && |
| | | b.Factory == d.Factory |
| | | )) |
| | | .Where((b, c, d) => b.ItemOutId == query.id) |
| | | .Select((b, c, d) => new MesInvItemOutCDetails |
| | | { |
| | | ForceOutFlag = b.ForceOutFlag, |
| | | DepotSectionCode = b.DepotSectionCode, |
| | | ItemNo = b.ItemNo, |
| | | Quantity = b.Quantity, |
| | | ItemBarcode = b.ItemBarcode, |
| | | ItemName = c.ItemName, |
| | | ItemModel = c.ItemModel, |
| | | DepotName = d.DepotName, |
| | | DepotCode = b.DepotCode |
| | | }) |
| | | .ToList(); |
| | | } |
| | | |
| | | public bool ScanCode(WarehouseQuery query) |
| | | { |
| | | decimal billTypeId = 200; |
| | | decimal transactionNo = 203; |
| | | |
| | | var count = Db.Queryable<MesInvItemOutCDetails>() |
| | | .Where(a => |
| | | a.ItemBarcode == query.barcode && a.TaskNo == query.billNo) |
| | | .Count(); |
| | | |
| | | if (count > 0) throw new Exception("条码重复扫描,请核对!"); |
| | | |
| | | //验证条码 |
| | | var mesInvItemStocks = Db.Queryable<MesInvItemStocks>() |
| | | .Where(a => a.ItemBarcode == query.barcode |
| | | && a.Quantity > 0).Single(); |
| | | |
| | | if (mesInvItemStocks == null) |
| | | throw new Exception(query.barcode + "库存中无此条码,请核对!"); |
| | | |
| | | //验证出库单mes_inv_item_outs |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(d => d.ItemOutNo == query.billNo |
| | | && d.BillTypeId == billTypeId && |
| | | d.TransactionNo == transactionNo).Single(); |
| | | |
| | | //出库单的校验 |
| | | if (mesInvItemOuts == null) |
| | | throw new Exception("出库单 " + query.billNo + " 不存在,请确认!"); |
| | | |
| | | //未审核的不允许继续 |
| | | if (mesInvItemOuts.Status == null || mesInvItemOuts.Status == 0) |
| | | throw new Exception("出库单 " + query.billNo + "未审核"); |
| | | |
| | | //已推送的不允许继续 |
| | | if (mesInvItemOuts.Nflag == 1) |
| | | throw new Exception("出库单 " + query.billNo + "已经推送,无法重复推送"); |
| | | |
| | | var depotCodeOut = mesInvItemOuts.DepotCode ?? "0"; |
| | | var depotsCodeStock = mesInvItemStocks.DepotsCode ?? "0"; |
| | | |
| | | if (!depotCodeOut.Equals(depotsCodeStock)) |
| | | bool result = true; |
| | | foreach (var group in groupedItems) |
| | | { |
| | | // 创建错误消息 |
| | | var errorMessage = |
| | | $"002[条码仓库{depotsCodeStock}与申请仓库{depotCodeOut}不一致,请核对!"; |
| | | //if (group.Key.AsnNo == null) |
| | | //{ |
| | | // throw new NotImplementedException("AsnNo不能为空"); |
| | | //} |
| | | |
| | | throw new Exception(errorMessage); |
| | | } |
| | | |
| | | var StocksNum = mesInvItemStocks.Quantity; |
| | | |
| | | var sql = string.Format( |
| | | @"select nvl(SUM(S.QUANTITY),0) - nvl(SUM(S.TL_QTY),0) |
| | | from MES_INV_ITEM_OUT_ITEMS S |
| | | LEFT JOIN mes_inv_item_outs d |
| | | ON S.ITEM_OUT_ID = D.ID |
| | | where d.item_out_no = '{0}' |
| | | and d.bill_type_id = {1} |
| | | and d.transaction_no = {2} |
| | | AND S.item_no = '{3}' |
| | | and nvl(d.status, 0) = 1 |
| | | and nvl(d.nflag, 0) = 0", query.billNo, billTypeId, |
| | | transactionNo, |
| | | mesInvItemStocks.ItemNo); |
| | | |
| | | var cqty = Db.Ado.SqlQuerySingle<decimal>(sql); |
| | | |
| | | if (cqty == null) |
| | | throw new Exception("物料" + mesInvItemStocks.ItemNo + |
| | | "的辅助属性与条码不一致!请检查"); |
| | | |
| | | if (cqty < StocksNum) throw new Exception("请确认发料数量"); |
| | | |
| | | //调用存储过程 |
| | | try |
| | | { |
| | | // 定义输出参数 |
| | | var outputResult = new SugarParameter("C_RESULT", null, |
| | | DbType.Int32, ParameterDirection.Output, |
| | | 4000); |
| | | |
| | | var outputMessage = new SugarParameter("MSG", null, DbType.String, |
| | | ParameterDirection.Output, 4000); |
| | | |
| | | // 定义输入参数 |
| | | var parameters = new List<SugarParameter> |
| | | if (group.Key.MesNo == null) |
| | | { |
| | | new("p_item_barcode", query.barcode, |
| | | DbType.String, ParameterDirection.Input), |
| | | new("p_bill_no", query.billNo, DbType.String, |
| | | ParameterDirection.Input), |
| | | new("pi_factory", "1000", DbType.String, |
| | | ParameterDirection.Input), |
| | | new("pi_company", "1000", DbType.String, |
| | | ParameterDirection.Input), |
| | | new("c_user", query.userName, DbType.String, |
| | | ParameterDirection.Input), |
| | | outputResult, |
| | | outputMessage |
| | | throw new NotImplementedException("入库单单号不能为空"); |
| | | } |
| | | |
| | | if (group.Key.SqNo == null) |
| | | { |
| | | throw new NotImplementedException("退货申请单行号不能为空"); |
| | | } |
| | | |
| | | // 创建一个临时的itemOutFrom对象,使用分组的Key作为主要属性 |
| | | var tempItemOutFrom = new ItemOutFrom |
| | | { |
| | | |
| | | MesNo = group.Key.MesNo, |
| | | SqNo = group.Key.SqNo, |
| | | // 继承原始itemOutFrom的其他属性 |
| | | RtnNo = itemOutFrom.RtnNo, |
| | | Type = itemOutFrom.Type, |
| | | CreateBy = itemOutFrom.CreateBy, |
| | | FMRMODE = itemOutFrom.FMRMODE, |
| | | DepotId = itemOutFrom.DepotId, |
| | | SupperId = itemOutFrom.SupperId |
| | | }; |
| | | |
| | | // 使用 SqlSugar 执行存储过程 |
| | | Db.Ado.ExecuteCommand( |
| | | "BEGIN MES_CG_UPDATE_BARCODES(:p_item_barcode, :p_bill_no, :pi_factory, :pi_company, :c_user, :C_RESULT, :MSG); END;", |
| | | parameters.ToArray()); |
| | | |
| | | // 获取输出参数的值 |
| | | var resultValue = outputResult.Value?.ToString(); |
| | | var messageValue = outputMessage.Value?.ToString(); |
| | | |
| | | if ("1".Equals(resultValue)) throw new Exception("条码扣除失败"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | // 变量用于保存查询结果 |
| | | decimal? C_SQ_QTY = 0; |
| | | decimal? C_OK_QTY = 0; |
| | | var c_result = string.Empty; |
| | | var C_COUNT = 0; |
| | | |
| | | |
| | | sql = string.Format(@" |
| | | SELECT SUM(C.QUANTITY) AS SQ_QTY, SUM(D.QUANTITY_OK) AS OK_QTY |
| | | FROM MES_INV_ITEM_OUT_ITEMS C |
| | | LEFT JOIN ( |
| | | SELECT ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO, SUM(QUANTITY) AS QUANTITY_OK |
| | | FROM MES_INV_ITEM_OUT_C_DETAILS |
| | | GROUP BY ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO |
| | | ) D |
| | | ON D.ITEM_OUT_ID = C.ITEM_OUT_ID |
| | | AND D.ITEM_NO = C.ITEM_NO |
| | | AND D.RK_NO = C.RK_NO |
| | | AND NVL(C.PBILL_NO, '0') = NVL(D.PBILL_NO, '0') |
| | | WHERE C.ITEM_OUT_ID = {0}", mesInvItemOuts.Id); |
| | | |
| | | var queryResult = Db.Ado.SqlQuerySingle<dynamic>(sql); |
| | | |
| | | C_SQ_QTY = queryResult?.SQ_QTY; |
| | | C_OK_QTY = queryResult?.OK_QTY; |
| | | |
| | | // 判断逻辑 |
| | | if (C_SQ_QTY < C_OK_QTY) throw new Exception("扫描数量超过申请数量,请重新扫描!"); |
| | | |
| | | if (C_SQ_QTY == C_OK_QTY) return true; |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | public bool Audit(WarehouseQuery query) |
| | | { |
| | | // 审核前校验 |
| | | Validate(query); |
| | | query.status = 1; |
| | | //审核 |
| | | return Update(query); |
| | | } |
| | | |
| | | public bool SetNFlag(WarehouseQuery query) |
| | | { |
| | | return Db.Updateable<MesInvItemOuts>() |
| | | .SetColumns(s => s.Nflag == 1) |
| | | .Where(s => s.ItemOutNo == query.billNo) |
| | | .ExecuteCommand() > 0; |
| | | } |
| | | |
| | | public bool DeApprove(WarehouseQuery query) |
| | | { |
| | | query.date = null; |
| | | query.status = 0; |
| | | return Update(query); |
| | | } |
| | | |
| | | private bool Update(WarehouseQuery entity) |
| | | { |
| | | var userName = entity.userName ?? "system"; |
| | | return Db.Updateable<MesInvItemOuts>() |
| | | .SetColumns(s => s.Status == entity.status) |
| | | .SetColumns(s => s.CheckUser == userName) |
| | | .SetColumns(s => s.CheckDate == DateTime.Now) |
| | | .Where(s => s.Id == entity.id).ExecuteCommand() > 0; |
| | | } |
| | | |
| | | |
| | | public void Validate(WarehouseQuery query) |
| | | { |
| | | // 校验单号是否正确 |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(o => o.ItemOutNo == query.billNo) |
| | | .Single(); |
| | | |
| | | if (mesInvItemOuts == null) |
| | | throw new Exception("没找到" + query.billNo + " 对应的采购退货单,请检查"); |
| | | |
| | | // 校验子表数据 |
| | | var itemOutItems = Db.Queryable<MesInvItemOutItems>() |
| | | .Where(o => o.ItemOutId == mesInvItemOuts.Id) |
| | | .ToList(); |
| | | |
| | | var sql = string.Empty; |
| | | var P_Msg = string.Empty; |
| | | |
| | | foreach (var item in itemOutItems) |
| | | { |
| | | // 判断申请数量是否大于剩余可退数量 |
| | | sql = string.Format( |
| | | @"SELECT NVL(s1.RK_QTY, 0) - NVL(KT_QTY, 0) KT_QTY --剩余可退 |
| | | FROM MES_INV_ITEM_OUT_ITEMS C |
| | | LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, |
| | | ITEM_NO, |
| | | PBILL_NO, |
| | | RK_NO, |
| | | WORK_LINE |
| | | FROM MES_INV_ITEM_OUT_ITEMS |
| | | GROUP BY ITEM_NO, PBILL_NO, WORK_LINE,RK_NO) U |
| | | ON U.ITEM_NO = C.ITEM_NO |
| | | AND U.WORK_LINE = C.WORK_LINE |
| | | AND U.PBILL_NO = C.PBILL_NO |
| | | AND U.RK_NO = C.RK_NO |
| | | LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY, |
| | | ITEM_NO, |
| | | EBELN, |
| | | WORK_LINE,BILL_NO |
| | | FROM MES_INV_ITEM_IN_C_ITEMS |
| | | GROUP BY ITEM_NO, EBELN, WORK_LINE,BILL_NO) s1 |
| | | ON S1.ITEM_NO = C.ITEM_NO |
| | | AND S1.WORK_LINE = C.WORK_LINE |
| | | AND S1.EBELN = C.PBILL_NO |
| | | AND S1.BILL_NO = C.RK_NO |
| | | WHERE C.ID = {0}", item.Id); |
| | | var sy_Qty = Db.Ado.SqlQuery<decimal>(sql); |
| | | |
| | | if (sy_Qty != null && sy_Qty[0] < 0) |
| | | // 根据Type执行不同的逻辑 |
| | | switch (tempItemOutFrom.Type) |
| | | { |
| | | P_Msg = |
| | | $"采购订单:{item.PbillNo},行:{item.WorkLine},物料:{item.ItemNo} 申请数量大于剩余可收数量"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | |
| | | // 判断行是否重复 |
| | | var cf_Num = Db.Queryable<MesInvItemOutItems>() |
| | | .Where(s1 => s1.ItemNo == item.ItemNo && |
| | | s1.WorkLine == item.WorkLine && |
| | | s1.PbillNo == item.PbillNo && |
| | | s1.ItemOutId == mesInvItemOuts.Id && |
| | | s1.RkNo == item.RkNo) |
| | | .Count(); |
| | | |
| | | if (cf_Num > 1) |
| | | { |
| | | P_Msg = |
| | | $"采购订单:{item.PbillNo},行:{item.WorkLine},物料:{item.ItemNo}重复请删除其中一条数据"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | } |
| | | |
| | | // 校验主表内容是否被删掉 |
| | | // 主表仓库编码 |
| | | if (string.IsNullOrEmpty(mesInvItemOuts.DepotCode)) |
| | | { |
| | | P_Msg = "仓库编码为空,请检查"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | |
| | | var supplierExists = Db.Queryable<MesSupplier>() |
| | | .Any(supplier => supplier.SuppNo == mesInvItemOuts.SuppNo); |
| | | |
| | | if (!supplierExists) |
| | | { |
| | | P_Msg = $"供应商编码 {mesInvItemOuts.SuppNo} 在系统中不存在,请检查"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | |
| | | // 子表行与主表符合性校验 |
| | | foreach (var j in itemOutItems) |
| | | { |
| | | // 校验子表对应采购订单的供应商编码 |
| | | var c_SuppNo = Db.Queryable<MesRohIn, MesSupplier>( |
| | | (roh, supp) => new JoinQueryInfos( |
| | | JoinType.Left, |
| | | roh.Supplier == supp.Id.ToString() |
| | | )) |
| | | .Where(roh => roh.BillNo == j.PbillNo) |
| | | .Select((roh, supp) => supp.SuppNo) |
| | | .Single(); |
| | | |
| | | if (c_SuppNo == null) |
| | | { |
| | | P_Msg = $"子表行供应商编码 {c_SuppNo} 在系统中未找到"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | |
| | | if (mesInvItemOuts.SuppNo != c_SuppNo) |
| | | { |
| | | P_Msg = |
| | | $"子表采购订单行的供应商编码 {c_SuppNo} 与主表供应商编码 {mesInvItemOuts.SuppNo} 不一致,请检查"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | |
| | | // 校验子表委外采购类型和主表类型是否一致 |
| | | if (j.FType != mesInvItemOuts.FType) |
| | | { |
| | | P_Msg = |
| | | $"子表委外类型:{j.FType},与主表委外类型:{mesInvItemOuts.FType},不一致,请检查"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | |
| | | // 检查子表仓库是否和主表仓库一致 |
| | | if (j.DepotCode != mesInvItemOuts.DepotCode) |
| | | { |
| | | P_Msg = |
| | | $"子表仓库编码:{j.DepotCode} 与主表仓库编码:{mesInvItemOuts.DepotCode},不一致,请检查"; |
| | | throw new Exception(P_Msg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public OutItemDto SaveCombination(OutItemDto dto) |
| | | { |
| | | var mesInvItemOuts = dto.Form; |
| | | mesInvItemOuts.Status = 0; |
| | | mesInvItemOuts.BoardFlag = 0; |
| | | mesInvItemOuts.Sapstatus = 0; |
| | | mesInvItemOuts.OutStatus = 0; |
| | | mesInvItemOuts.ItemFlag = 0; |
| | | mesInvItemOuts.IsVisual = 1; |
| | | mesInvItemOuts.TransactionNo = 203; |
| | | mesInvItemOuts.Factory = "1000"; |
| | | mesInvItemOuts.Company = "1000"; |
| | | |
| | | //返回ID |
| | | var id = Db.Insertable(mesInvItemOuts) |
| | | .ExecuteReturnIdentity(); |
| | | |
| | | if (id <= 0) throw new Exception("插入错误"); |
| | | |
| | | mesInvItemOuts.Id = id; |
| | | dto.SaveItems.ForEach(s => |
| | | { |
| | | s.ItemOutId = id; |
| | | s.Factory = "1000"; |
| | | s.Company = "1000"; |
| | | s.Status = 0; |
| | | s.DepotCode = mesInvItemOuts.DepotCode; |
| | | s.FType = mesInvItemOuts.FType; |
| | | s.CreateBy = mesInvItemOuts.CreateBy; |
| | | s.CreateDate = mesInvItemOuts.CreateDate; |
| | | }); |
| | | |
| | | var insertable = Db.Insertable(dto.SaveItems) |
| | | .ExecuteCommand(); |
| | | |
| | | if (insertable < 0) throw new Exception("插入错误"); |
| | | |
| | | var query = new WarehouseQuery(); |
| | | query.id = id; |
| | | dto.SelectItems = GetItems(query); |
| | | |
| | | return dto; |
| | | } |
| | | |
| | | public List<MesInvItemOuts> GetPage(WarehouseQuery query) |
| | | { |
| | | return |
| | | Db.Queryable<MesInvItemOuts, MesDepots, MesSupplier, SysUser, |
| | | SysUser>((a, e, i, u1, u3) => |
| | | new JoinQueryInfos( |
| | | JoinType.Left, |
| | | a.DepotCode == e.DepotCode |
| | | && e.Factory == a.Factory |
| | | && e.Company == a.Company, |
| | | JoinType.Left, |
| | | a.SuppNo == i.SuppNo, |
| | | JoinType.Left, |
| | | a.CreateBy == u1.Fcode, |
| | | JoinType.Left, |
| | | a.CheckUser == u3.Fcode)) |
| | | .WhereIF(query.id > 0, |
| | | (a, e, i, u1, u3) => a.Id == query.id) |
| | | .WhereIF(!string.IsNullOrEmpty(query.billNo), |
| | | (a, e, i, u1, u3) => a.ItemOutNo == query.billNo) |
| | | .Select((a, e, i, u1, u3) => new MesInvItemOuts |
| | | case "1": |
| | | { |
| | | Id = a.Id, |
| | | DepotCode = a.DepotCode, |
| | | Fmrmode = a.Fmrmode, |
| | | CheckDate = a.CheckDate, |
| | | CheckUser = a.CheckUser, |
| | | States = a.States, |
| | | Reason = a.Reason, |
| | | Remark = a.Remark, |
| | | Nflag = a.Nflag, |
| | | FType = a.FType, |
| | | SuppNo = a.SuppNo, |
| | | DepotName = e.DepotName, |
| | | SuppName = i.SuppName, |
| | | CreateByFname = u1.Fname, |
| | | CheckUserFname = u3.Fname, |
| | | CreateDate = a.CreateDate, |
| | | CreateBy = a.CreateBy, |
| | | Status = a.Status, |
| | | ItemOutNo = a.ItemOutNo |
| | | }).ToPageList(query.PageIndex, query.Limit); |
| | | } |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(s => s.BillTypeId == BILL_TYPE_ID |
| | | && s.TransactionNo == TRANSACTION_NO |
| | | && s.ItemOutNo == tempItemOutFrom.RtnNo |
| | | |
| | | ) |
| | | .Count(); |
| | | |
| | | public List<MesInvItemOutCDetails> GetScanBarcode(WarehouseQuery query) |
| | | { |
| | | return Db.Queryable<MesInvItemOutCDetails, MesInvItemBarcodes, MesItems, |
| | | MesDepots>( |
| | | (b, bar, c, d) => new |
| | | JoinQueryInfos( |
| | | JoinType.Left, b.ItemBarcode == bar.ItemBarcode, |
| | | JoinType.Left, b.ItemNo == c.ItemNo && |
| | | b.Company == c.Company && |
| | | b.Factory == c.Factory, |
| | | JoinType.Left, b.DepotCode == d.DepotCode && |
| | | b.Company == d.Company && |
| | | b.Factory == d.Factory |
| | | )) |
| | | .Where((b, bar, c, d) => b.ItemOutId == query.id) |
| | | .Select((b, bar, c, d) => new MesInvItemOutCDetails |
| | | { |
| | | Quantity = b.Quantity, |
| | | DepotSectionCode = b.DepotSectionCode, |
| | | DepotCode = b.DepotCode, |
| | | ItemNo = b.ItemNo, |
| | | ItemBarcode = b.ItemBarcode, |
| | | ItemName = c.ItemName, |
| | | ItemModel = c.ItemModel, |
| | | DepotName = d.DepotName, |
| | | Unit = bar.Unit |
| | | }).ToList(); |
| | | } |
| | | if (mesInvItemOuts > 0) |
| | | { |
| | | throw new NotImplementedException( |
| | | tempItemOutFrom.RtnNo + |
| | | "的退料申请单已经存在"); |
| | | } |
| | | |
| | | //MESInvItemOutItems |
| | | public List<MESInvItemOutItems> GetItems(WarehouseQuery query) |
| | | { |
| | | var where = "and 1=1"; |
| | | if (query.id != null) where = "and ITEM_OUT_ID = '" + query.id + "'"; |
| | | // 为当前分组保存数据 |
| | | var groupResult = Save(tempItemOutFrom, group.ToList()); |
| | | if (!groupResult) |
| | | { |
| | | result = false; |
| | | } |
| | | |
| | | var sql = string.Format(@"select * from ( |
| | | SELECT C.REMARK, C.PBILL_NO, C.ITEM_OUT_ID, C.RK_QTY, |
| | | C.TL_QTY, C.WORK_LINE, C.QUANTITY, C.ITEM_NO, |
| | | NVL(s1.RK_QTY, 0) - NVL(KT_QTY, 0) KT_QTY, |
| | | R.DEPOT_SECTION_CODE, S.ITEM_MODEL, S.ITEM_NAME, |
| | | K.CGB014, Q.STAFF_NAME, R.DEPOT_CODE |
| | | FROM MES_INV_ITEM_OUT_ITEMS C JOIN MES_ITEMS S ON C.ITEM_NO = S.ITEM_NO |
| | | LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO, PBILL_NO, WORK_LINE, RK_NO |
| | | FROM MES_INV_ITEM_OUT_ITEMS |
| | | GROUP BY ITEM_NO, PBILL_NO, WORK_LINE, RK_NO) U |
| | | ON U.ITEM_NO = C.ITEM_NO AND U.WORK_LINE = C.WORK_LINE |
| | | AND U.PBILL_NO = C.PBILL_NO AND U.RK_NO = C.RK_NO |
| | | LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY, ITEM_NO, EBELN, WORK_LINE, BILL_NO |
| | | FROM mes_inv_item_in_c_details |
| | | GROUP BY ITEM_NO, EBELN, WORK_LINE, BILL_NO) s1 |
| | | ON S1.ITEM_NO = C.ITEM_NO AND S1.WORK_LINE = C.WORK_LINE |
| | | AND S1.EBELN = C.PBILL_NO AND S1.BILL_NO = C.RK_NO |
| | | LEFT JOIN MES_ROH_IN_DATA K |
| | | ON K.BILL_NO = C.PBILL_NO AND C.WORK_LINE = K.PURCHASE_ORDER_LINE_NUMBER |
| | | left join MES_ROH_IN H on H.BILL_NO = K.BILL_NO |
| | | left join MES_STAFF Q on H.PURCHASER = Q.STAFF_NAME |
| | | LEFT JOIN MES_SUPPLIER T ON H.SUPPLIER = T.ID |
| | | LEFT JOIN (select * |
| | | from (SELECT row_number() over (partition by DEPOT_CODE, ITEM_NO, EBELN order by CREATE_DATE) rn, DEPOT_CODE, DEPOT_SECTION_CODE, ITEM_NO, |
| | | EBELN FROM mes_inv_item_in_c_details |
| | | where EBELN is not null) |
| | | where rn = 1 and ROWNUM = 1) R ON R.ITEM_NO = C.ITEM_NO) where 1=1 {0}", |
| | | where); |
| | | var results = Db.Ado.SqlQuery<MESInvItemOutItems>(sql); |
| | | return results; |
| | | } |
| | | break; |
| | | } |
| | | case "4": |
| | | var removeResult = Remove(tempItemOutFrom); |
| | | if (!removeResult) |
| | | { |
| | | result = false; |
| | | } |
| | | |
| | | public OutItemDto GetSumItem(WarehouseQuery query) |
| | | { |
| | | var mesInvItemOuts = base.GetSingle(it => it.ItemOutNo == query.billNo); |
| | | if (mesInvItemOuts == null) throw new Exception("采购退货单不存在"); |
| | | |
| | | var sql = string.Format(@"SELECT DEPOT ,ITEM_NO,ITEM_MODEL, |
| | | ITEM_NAME,QTY FROM (SELECT SUM(QTY) QTY, DEPOT, ITEM_NO, ITEM_MODEL, ITEM_NAME |
| | | FROM (SELECT f_get_section_code2('1000', '1000', b.ITEM_NO,'{0}') DEPOT, |
| | | B.ITEM_NO, A.ITEM_MODEL,A.ITEM_NAME,to_char(nvl(b.QUANTITY, 0) - nvl(D.QUANTITY_OK, 0),'FM9999999990.00') QTY |
| | | FROM MES_INV_ITEM_OUT_ITEMS B LEFT JOIN mes_ITEMS A |
| | | ON B.ITEM_NO = A.ITEM_NO LEFT JOIN (SELECT ITEM_OUT_ID, |
| | | ITEM_NO,PBILL_NO,SUM(QUANTITY) QUANTITY_OK,RK_NO |
| | | FROM MES_INV_ITEM_OUT_C_DETAILS |
| | | WHERE ITEM_OUT_ID = {1} |
| | | GROUP BY ITEM_OUT_ID,ITEM_NO,PBILL_NO,RK_NO) D |
| | | ON D.ITEM_OUT_ID = B.ITEM_OUT_ID |
| | | AND D.ITEM_NO = B.ITEM_NO |
| | | AND D.PBILL_NO = B.PBILL_NO |
| | | AND D.RK_NO = B.RK_NO |
| | | WHERE B.ITEM_OUT_ID = {1} |
| | | AND nvl(b.QUANTITY, 0) - nvl(D.QUANTITY_OK, 0) > 0 |
| | | ORDER BY f_get_section_code2('1000','1000',b.ITEM_NO,'{0}'), |
| | | A.ITEM_MODEL,A.ITEM_NAME) |
| | | GROUP BY DEPOT, ITEM_NO, ITEM_MODEL, ITEM_NAME)", |
| | | mesInvItemOuts.DepotCode, |
| | | mesInvItemOuts.Id); |
| | | |
| | | var results = Db.Ado.SqlQuery<InventoryItem>(sql); |
| | | |
| | | var mesInvItemStocks = Db.Queryable<MesInvItemStocks>() |
| | | .Where(a => a.ItemBarcode == query.barcode).Single(); |
| | | |
| | | var dto = new OutItemDto(); |
| | | dto.SumItem = results; |
| | | |
| | | if (mesInvItemStocks != null) |
| | | { |
| | | dto.ItemNo = mesInvItemStocks.ItemNo; |
| | | dto.Quantity = mesInvItemStocks.Quantity; |
| | | break; |
| | | default: |
| | | result = false; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return dto; |
| | | return result; |
| | | } |
| | | |
| | | public List<InventoryItemDetail> SelectMaterials(WarehouseQuery query) |
| | | private bool Save(ItemOutFrom from, List<ItemOutList> items) |
| | | { |
| | | var sql = string.Format(@"select B.WORK_NO, b.work_line, |
| | | b.item_no, s2.item_name, s2.item_model, |
| | | sum(b.quantity) sum_Quantity, |
| | | b.unit, b.supp_no, |
| | | nvl(s1.quantity, 0) quantity, |
| | | sum(b.quantity) - nvl(U.KT_QTY, 0) Refundable_Quantity, |
| | | B.cbill_no, B.task_no, A.BILL_NO, |
| | | to_char(b.CREATE_DATE, 'yyyy-mm-dd') as CREATE_DATE |
| | | from mes_inv_item_in_c_details b |
| | | left join mes_inv_item_ins a on b.item_in_id = a.id |
| | | LEFT JOIN (select s.item_no, s.work_line, s.Work_no, |
| | | sum(s.quantity) quantity, S.RK_NO |
| | | from mes_inv_item_out_c_details s |
| | | group by s.item_no, s.work_line, s.work_no, S.RK_NO) s1 |
| | | ON NVL(B.work_LINE, '0') = NVL(s1.work_LINE, '0') |
| | | and B.work_no = s1.work_no |
| | | and B.item_no = s1.item_no |
| | | AND B.BILL_NO = S1.RK_NO |
| | | LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO, PBILL_NO, WORK_LINE, RK_NO |
| | | FROM MES_INV_ITEM_OUT_ITEMS |
| | | GROUP BY ITEM_NO, PBILL_NO, WORK_LINE, RK_NO) U |
| | | ON U.ITEM_NO = B.ITEM_NO |
| | | AND U.WORK_LINE = B.WORK_LINE |
| | | AND U.PBILL_NO = B.WORK_NO AND U.RK_NO = B.BILL_NO |
| | | left join mes_items s2 on b.item_no = s2.item_no |
| | | left join purdha da on da.dha001 = b.cbill_no |
| | | WHERE A.BILL_NO LIKE 'Q%' |
| | | AND A.CBILL_NO like 'L%' |
| | | group by b.item_no, b.work_line, b.supp_no, b.remark, s1.quantity, b.unit, |
| | | s2.item_name, s2.item_model, da.dha003, B.WORK_NO, B.cbill_no, B.task_no, |
| | | to_char(b.CREATE_DATE, 'yyyy-mm-dd'), A.BILL_NO, U.KT_QTY, A.CBILL_NO |
| | | having b.remark = '采购入库' |
| | | and sum(b.quantity) - nvl(U.KT_QTY, 0) > 0 |
| | | and b.supp_no = '{0}' |
| | | order by to_char(b.CREATE_DATE, 'yyyy-mm-dd')", |
| | | query.SuppNo); |
| | | var mesInvItemIns = Db.Queryable<MesInvItemIns>() |
| | | .Where(s => s.BillTypeId == 100 |
| | | && s.TransctionNo == "101" |
| | | && s.BillNo == from.MesNo |
| | | ).First(); |
| | | |
| | | var results = Db.Ado.SqlQuery<InventoryItemDetail>(sql); |
| | | return results; |
| | | } |
| | | |
| | | public string GetMaxItemOutNo() |
| | | { |
| | | var date = DateTime.Now.ToString("yyyyMMdd"); |
| | | var par = "NTL" + date; |
| | | var sql = |
| | | $"select max(ITEM_OUT_NO) from MES_INV_ITEM_OUTS where ITEM_OUT_NO like '{par}%'"; |
| | | var maxBillNo = Db.Ado.SqlQuerySingle<string>(sql); |
| | | |
| | | var number = "0001"; |
| | | if (maxBillNo != null) |
| | | if (mesInvItemIns == null) |
| | | { |
| | | maxBillNo = maxBillNo.Substring(11); |
| | | var no = Convert.ToInt32(maxBillNo); |
| | | no++; |
| | | number = no.ToString().PadLeft(4, '0'); |
| | | throw new NotImplementedException("采购入库不存在"); |
| | | } |
| | | |
| | | return "NTL" + date + number; |
| | | } |
| | | var mesDepots = Db.Queryable<MesDepots>() |
| | | .Where(s => s.DepotId == Decimal.Parse(from.DepotId)).First(); |
| | | |
| | | public MessageCenter SaveMessageCenter(WarehouseQuery query) |
| | | { |
| | | var message = MesToErpParam(query); |
| | | var mesLinkU9 = Db.Queryable<MesLinkU9>() |
| | | .Where(s => s.TableType == "MES_SUPPLIER" |
| | | && s.U9Id == from.SupperId).First(); |
| | | |
| | | var executeReturnIdentity = |
| | | Db.Insertable(message).ExecuteReturnIdentity(); |
| | | if (executeReturnIdentity > 0) |
| | | if (mesLinkU9 == null) |
| | | { |
| | | message.Id = executeReturnIdentity; |
| | | message.Pid = executeReturnIdentity; |
| | | return message; |
| | | throw new NotImplementedException("供应商ID不存在或未同步于U9"); |
| | | } |
| | | |
| | | throw new Exception("获取数据失败"); |
| | | } |
| | | var mesSupplier = Db.Queryable<MesSupplier>() |
| | | .Where(s => s.Id == Decimal.Parse(mesLinkU9.MesId)) |
| | | .First(); |
| | | |
| | | |
| | | public MessageCenter MesToErpParam(WarehouseQuery query) |
| | | { |
| | | var erpParameters = ""; |
| | | var title = ""; |
| | | var tableName = "MES_INV_ITEM_OUTS_" + query.Type; |
| | | if ("A".Equals(query.Type)) |
| | | if (mesDepots == null) |
| | | { |
| | | erpParameters = GetErpParameters(query.billNo); |
| | | title = "采购退货单" + query.billNo + "审核"; |
| | | } |
| | | else if ("B".Equals(query.Type)) |
| | | { |
| | | erpParameters = GetDeApprovePam(query.id); |
| | | title = "采购退货单" + query.billNo + "反审核"; |
| | | throw new NotImplementedException("[" + from.DepotId + |
| | | "]仓库不存在,请同步给MES"); |
| | | } |
| | | |
| | | var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl; |
| | | var message = new MessageCenter |
| | | if (mesSupplier == null) |
| | | { |
| | | TableName = tableName, |
| | | Url = ErpUrl, |
| | | Status = 1, |
| | | CreateBy = query.userName, |
| | | Route = query.billNo, |
| | | Title = title, |
| | | PageName = "Warehouse/PurchaseReturn/Add?id=" + query.id + |
| | | "&itemOutNo=" + query.billNo, |
| | | CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Method = "POST", |
| | | Seq = 1, |
| | | Data = erpParameters, |
| | | IsMessage = 0, |
| | | ContentType = "application/x-www-form-urlencoded" |
| | | throw new NotImplementedException("[" + from.SupperId + |
| | | "]供应商不存在,请同步给MES"); |
| | | } |
| | | |
| | | var nextSequenceValue = |
| | | Db.Ado.SqlQuery<decimal>("SELECT SEQ_OUT_ID.NEXTVAL FROM DUAL") |
| | | .First(); |
| | | |
| | | // var billCode = |
| | | // Db.Ado.SqlQuery<string>( |
| | | // "SELECT GETBILLCODE1('1000', '1000', 'TLSQ') FROM DUAL") |
| | | // .First(); |
| | | var billCode = from.RtnNo; |
| | | |
| | | // 创建采购退料单记录 |
| | | var mesInvItemOuts = new MesInvItemOuts |
| | | { |
| | | Id = nextSequenceValue, |
| | | ItemOutNo = billCode, |
| | | Status = 0, |
| | | CreateBy = "PL017", |
| | | CreateDate = DateTime.Now, |
| | | BillTypeId = 200, |
| | | TransactionNo = 203, |
| | | DepotCode = mesDepots.DepotCode, |
| | | FType = 0, |
| | | OutStatus = 0, |
| | | IsVisual = 1, |
| | | Factory = "1000", |
| | | Company = "1000", |
| | | SuppNo = mesSupplier.SuppNo, |
| | | ItemFlag = 0, |
| | | BoardFlag = 0, |
| | | OutType = "采购退料", |
| | | Nflag = 0, |
| | | Fmrmode = from.FMRMODE, |
| | | Sapno = from.SqNo, |
| | | Organizeid = "1002503270000079", |
| | | }; |
| | | return message; |
| | | } |
| | | |
| | | public bool DeApproveBefore(WarehouseQuery query) |
| | | { |
| | | var mesInvItemOuts = base.GetById(query.id); |
| | | if (mesInvItemOuts == null) throw new Exception("出库单不存在"); |
| | | // 创建采购退料单记录 |
| | | var mesInvItemOutItems = new List<MesInvItemOutItems>(); |
| | | |
| | | var nflag = mesInvItemOuts.Nflag ?? 0; |
| | | |
| | | if (nflag != 0) return true; |
| | | |
| | | return false; |
| | | } |
| | | |
| | | private string GetDeApprovePam(decimal? id) |
| | | { |
| | | var sid = (int)id; |
| | | var encodedUrl = "taskname=CGTL&mesid=" + sid + |
| | | "&optype=delete&datajson={}"; |
| | | |
| | | return encodedUrl; |
| | | } |
| | | |
| | | private string GetErpParameters(string? billNo) |
| | | { |
| | | var invItemIns = Db.Queryable<MesInvItemOuts>() |
| | | .Single(x => x.ItemOutNo == billNo); |
| | | |
| | | //调用function函数 |
| | | var sql = |
| | | $"SELECT F_GENERATE_DATA_INSERTED('{billNo}') FROM DUAL;"; |
| | | var jsonString = Db.Ado.SqlQuerySingle<string>(sql); |
| | | |
| | | var encodedUrl = "taskname=CGTL&mesid=" + invItemIns.Id + |
| | | "&optype=create&datajson=" + jsonString; |
| | | |
| | | return encodedUrl; |
| | | } |
| | | |
| | | public List<string> GetItemOutNo() |
| | | { |
| | | var data5 = Db.Queryable<MesInvItemOuts>().Where(it => |
| | | it.BillTypeId == 200 && it.TransactionNo == 203 && |
| | | it.Status == 1) |
| | | .OrderBy(it => it.Id, OrderByType.Desc) |
| | | .ToPageList(1, 20); |
| | | |
| | | var ItemOutNos = data5.FindAll(a => a.Nflag == null || a.Nflag == 0) |
| | | .Select(s => s.ItemOutNo).ToList(); |
| | | // |
| | | // var ItemOutNos = data5 |
| | | // .Select(s => s.ItemOutNo).ToList(); |
| | | |
| | | return ItemOutNos; |
| | | } |
| | | //生产领料单审核前校验 |
| | | |
| | | |
| | | public MessageCenter SaveProductionMessageCenter(WarehouseQuery entity) |
| | | { |
| | | var message = ProductionMesToErpParam(entity); |
| | | |
| | | var executeReturnIdentity = |
| | | Db.Insertable(message).ExecuteReturnIdentity(); |
| | | if (executeReturnIdentity > 0) |
| | | foreach (var itemOutList in items) |
| | | { |
| | | message.Id = executeReturnIdentity; |
| | | message.Pid = executeReturnIdentity; |
| | | return message; |
| | | } |
| | | |
| | | throw new Exception("获取数据失败"); |
| | | } |
| | | |
| | | public MessageCenter ProductionMesToErpParam(WarehouseQuery query) |
| | | { |
| | | var erpParameters = ""; |
| | | var title = ""; |
| | | var tableName = "INV_ITEM_OUTS_" + query.Type; |
| | | if ("A".Equals(query.Type)) |
| | | { |
| | | erpParameters = |
| | | GetProductionErpParameters(query.billNo, query.userName); |
| | | title = "生产领料单" + query.billNo + "审核"; |
| | | } |
| | | |
| | | var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl; |
| | | var message = new MessageCenter |
| | | { |
| | | TableName = tableName, |
| | | Url = ErpUrl, |
| | | Status = 1, |
| | | CreateBy = query.userName, |
| | | Route = query.billNo, |
| | | Title = title, |
| | | PageName = "Warehouse/ProductionPick/Add?id=" + query.id + |
| | | "&itemOutNo=" + query.billNo, |
| | | CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Method = "POST", |
| | | Seq = 1, |
| | | Data = erpParameters, |
| | | IsMessage = 0, |
| | | ContentType = "application/x-www-form-urlencoded" |
| | | }; |
| | | return message; |
| | | } |
| | | |
| | | private string GetProductionErpParameters(string? queryBillNo, |
| | | string? userName) |
| | | { |
| | | userName ??= "system"; |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(it => it.ItemOutNo == queryBillNo) |
| | | .First(); |
| | | |
| | | if (mesInvItemOuts == null) throw new Exception("领料单号不存在"); |
| | | |
| | | var womcaa = Db.Queryable<Womcaa>() |
| | | .Where(it => it.Caa020 == mesInvItemOuts.WorkNo) |
| | | .First(); |
| | | |
| | | if (womcaa == null) throw new Exception("任务单号不存在"); |
| | | |
| | | var Departmentcode = Db.Queryable<SysDepartment, MesInvItemOuts>( |
| | | (a, b) => |
| | | new JoinQueryInfos(JoinType.Left, |
| | | a.Departmentname == b.OutPart |
| | | )).Where((a, b) => |
| | | b.OutPart == mesInvItemOuts.OutPart && |
| | | b.ItemOutNo == queryBillNo).Select(a => a.Departmentcode) |
| | | .First(); |
| | | |
| | | if (string.IsNullOrEmpty(Departmentcode)) |
| | | throw new Exception("部门信息不存在"); |
| | | |
| | | // 检查领料单状态 |
| | | if (mesInvItemOuts.Status == 1) throw new Exception("领料单已审核,不能重复推送"); |
| | | |
| | | var C_OUT_ITEMS = Db |
| | | .Queryable<MesInvItemOutItems, Womdab, Womdaa, Womcaa, Womcab>( |
| | | (c, b, d, e, f) => |
| | | new JoinQueryInfos( |
| | | JoinType.Left, b.Id == c.ItemDabid, |
| | | JoinType.Left, d.Id == b.Pid, |
| | | JoinType.Left, e.Caa001 == d.Daa021, |
| | | JoinType.Left, f.Eid == e.Erpid |
| | | )) |
| | | .Where((c, b, d, e, f) => c.ItemOutId == mesInvItemOuts.Id) |
| | | .Select((c, b, d, e, f) => new |
| | | // 检查必要字段是否为空 |
| | | if (string.IsNullOrEmpty(itemOutList.SrcDocNo)) |
| | | { |
| | | c.Id, |
| | | c.ItemNo, |
| | | c.Quantity, |
| | | c.DepotCode, |
| | | c.DepotSectionCode, |
| | | c.ItemId, |
| | | erpId = b.ErpId, |
| | | e.Caa015, |
| | | f.PositionNo |
| | | }).ToList(); |
| | | throw new NotImplementedException("采购订单号不能为空"); |
| | | } |
| | | |
| | | var scllentryList = new List<dynamic>(); |
| | | |
| | | foreach (var item in C_OUT_ITEMS) |
| | | { |
| | | var sql = |
| | | "SELECT FNAME FROM MES_UNIT WHERE ID = (SELECT ITEM_UNIT FROM MES_ITEMS WHERE ID = '" + |
| | | item.ItemId + "')"; |
| | | var C_ITEM_UNIT = Db.Ado.SqlQuerySingle<string>(sql); |
| | | |
| | | var xsddh = item.Caa015 ?? ""; |
| | | var wzh = item.PositionNo ?? ""; |
| | | var qty = ((int)item.Quantity).ToString(); |
| | | var erpid = ((int)item.erpId).ToString(); |
| | | var id = ((int)item.Id).ToString(); |
| | | scllentryList.Add(new |
| | | if (string.IsNullOrEmpty(itemOutList.SrcDocLineNo)) |
| | | { |
| | | FMaterialId = item.ItemNo, |
| | | FUnitID = C_ITEM_UNIT, |
| | | FAppQty = qty, |
| | | FActualQty = qty, |
| | | FStockId = item.DepotCode, |
| | | FPPBomEntryId = erpid, |
| | | F_UNW_Text_xsddh = xsddh, |
| | | F_UNW_TEXT_WZH = wzh, |
| | | F_MES_ENTRYID = id |
| | | throw new NotImplementedException("采购订单行号不能为空"); |
| | | } |
| | | |
| | | //if (string.IsNullOrEmpty(itemOutList.AsnLineNo)) |
| | | //{ |
| | | // throw new NotImplementedException("ASN行号不能为空"); |
| | | //} |
| | | |
| | | if (string.IsNullOrEmpty(itemOutList.itemId)) |
| | | { |
| | | throw new NotImplementedException("物料ID不能为空"); |
| | | } |
| | | |
| | | var mesRohInData = Db.Queryable<MesRohInData>() |
| | | .Where(s => s.BillNo == itemOutList.SrcDocNo |
| | | && s.OrderLineId == itemOutList.SrcDocLineNo) |
| | | .First(); |
| | | |
| | | if (mesRohInData == null) |
| | | { |
| | | throw new NotImplementedException("采购订单不存在"); |
| | | } |
| | | |
| | | //var deliveryDetail = Db.Queryable<DeliveryDetail>() |
| | | // .Where(a => Int32.Parse(a.ZzitemId) == |
| | | // Int32.Parse(itemOutList.AsnLineNo)) |
| | | // .Count(); |
| | | |
| | | //if (deliveryDetail <= 0) |
| | | //{ |
| | | // throw new NotImplementedException("[" + from.AsnNo + "]的明细行[" + |
| | | // itemOutList.AsnLineNo + |
| | | // "]不存在"); |
| | | //} |
| | | |
| | | var itemIdLinkU9 = Db.Queryable<MesLinkU9>() |
| | | .Where(s => s.TableType == "MES_ITEMS" |
| | | && s.U9Id == itemOutList.itemId).First(); |
| | | |
| | | if (mesLinkU9 == null) |
| | | { |
| | | throw new NotImplementedException("供应商ID不存在或未同步于U9"); |
| | | } |
| | | |
| | | var mesItems = Db.Queryable<MesItems>() |
| | | .Where(s => s.Id == Decimal.Parse(itemIdLinkU9.MesId)) |
| | | .First(); |
| | | |
| | | if (mesItems == null) |
| | | { |
| | | throw new NotImplementedException("[" + itemOutList.itemId + |
| | | "]物料不存在,请同步给MES"); |
| | | } |
| | | |
| | | var mesInvItemInCItems = Db.Queryable<MesInvItemInCItems>() |
| | | .Where(s => s.ItemInId == mesInvItemIns.Id |
| | | && s.ItemNo == mesItems.ItemNo |
| | | && s.Ebeln == itemOutList.SrcDocNo |
| | | && s.EbelnLineNo == |
| | | Decimal.Parse(itemOutList.SrcDocLineNo) |
| | | && s.SuppNo == mesSupplier.SuppNo |
| | | ).First(); |
| | | |
| | | if (mesInvItemInCItems == null) |
| | | { |
| | | throw new NotImplementedException("没有对应的入库明细"); |
| | | } |
| | | |
| | | |
| | | // 确保CbillNo不为空 |
| | | if (string.IsNullOrEmpty(mesInvItemIns.CbillNo)) |
| | | { |
| | | throw new NotImplementedException("入库单关联的采购单号不能为空"); |
| | | } |
| | | |
| | | mesInvItemOutItems.Add(new MesInvItemOutItems |
| | | { |
| | | ItemOutId = nextSequenceValue, |
| | | ItemNo = mesItems.ItemNo, |
| | | Quantity = Decimal.Parse(itemOutList.qty), |
| | | CreateBy = "PL017", |
| | | CreateDate = DateTime.Now, |
| | | Factory = "1000", |
| | | Company = "1000", |
| | | DepotCode = mesDepots.DepotCode, |
| | | WorkNo = itemOutList.SrcDocNo, // 确保WorkNo有值 |
| | | WorkLine = |
| | | Decimal.Parse(itemOutList.SrcDocLineNo), // 确保WorkLine有值 |
| | | EbelnK3id = Decimal.Parse(mesRohInData.ErpId), |
| | | LineK3id = Decimal.Parse(mesRohInData.EbelnK3id), |
| | | FType = 0, |
| | | Status = 0, |
| | | PbillNo = mesInvItemIns.CbillNo, // 确保PbillNo有值 |
| | | RkNo = from.MesNo, // 确保RkNo有值 |
| | | RkLine = mesInvItemInCItems.Id, // 确保RkLine有值 |
| | | RkQty = mesInvItemInCItems.Quantity, |
| | | TlQty = 0, |
| | | ItemId = Decimal.Parse(itemIdLinkU9.MesId), // 确保ItemId有值 |
| | | //SqNo = itemOutList.SqNo, // 确保ItemId有值 |
| | | //ZzitemId = itemOutList.AsnLineNo, // 确保ItemId有值 |
| | | // Unit = item.Unit, |
| | | }); |
| | | } |
| | | |
| | | var dataJson = new |
| | | var outItemCommand = Db.Insertable(mesInvItemOutItems) |
| | | .PageSize(1).IgnoreColumnsNull().ExecuteCommand(); |
| | | if (outItemCommand <= 0) |
| | | { |
| | | F_MES_ID = mesInvItemOuts.Id.ToString(), |
| | | FDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | FPickerId = userName, |
| | | F_UNW_LargeText_BZ = " ", |
| | | F_UNW_KH = " ", |
| | | F_UNW_DDSL = womcaa.Caa012.ToString(), |
| | | F_UNW_Text_CZG = userName, |
| | | scllentry = scllentryList |
| | | }; |
| | | throw new Exception("创建采购退料单子表失败"); |
| | | } |
| | | |
| | | return "taskname=SCLL&mesid=" + mesInvItemOuts.Id + |
| | | "&optype=create&datajson=" + |
| | | JsonConvert.SerializeObject( |
| | | dataJson); |
| | | // 插入采购退料单记录 |
| | | var insertResult = Db.Insertable(mesInvItemOuts).IgnoreColumns(true) |
| | | .ExecuteCommand(); |
| | | if (insertResult <= 0) |
| | | { |
| | | throw new Exception("创建采购退料单失败"); |
| | | } |
| | | |
| | | return outItemCommand + insertResult >= 2; |
| | | } |
| | | |
| | | public bool AuditProduction(WarehouseQuery query) |
| | | private bool Remove(ItemOutFrom from) |
| | | { |
| | | query.status = 1; |
| | | //审核 |
| | | return Update(query); |
| | | // 查找要删除的采购退料单 |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(s => s.BillTypeId == BILL_TYPE_ID |
| | | && s.TransactionNo == TRANSACTION_NO |
| | | && s.ItemOutNo == from.RtnNo).ToList(); |
| | | |
| | | if (mesInvItemOuts == null || mesInvItemOuts.Count == 0) |
| | | { |
| | | throw new NotImplementedException("找不到对应的采购退料单: " + from.RtnNo); |
| | | } |
| | | |
| | | // 检查是否有已审核的单据,如果存在已审核(Status=1)则不允许删除 |
| | | if (mesInvItemOuts.Any(item => item.Status == 1)) |
| | | { |
| | | throw new NotImplementedException("存在已审核的采购退料单,不允许删除"); |
| | | } |
| | | |
| | | // 删除所有相关单据 |
| | | foreach (var itemOut in mesInvItemOuts) |
| | | { |
| | | // 查找要删除的采购退料单明细 |
| | | var mesInvItemOutItems = Db.Queryable<MesInvItemOutItems>() |
| | | .Where(s => s.ItemOutId == itemOut.Id) |
| | | .ToList(); |
| | | |
| | | if (mesInvItemOutItems == null || mesInvItemOutItems.Count == 0) |
| | | { |
| | | throw new NotImplementedException( |
| | | $"找不到采购退料单[{itemOut.ItemOutNo}]对应的明细"); |
| | | } |
| | | |
| | | // 删除采购退料单明细 |
| | | var deleteItemsResult = Db.Deleteable<MesInvItemOutItems>() |
| | | .Where(s => s.ItemOutId == itemOut.Id) |
| | | .ExecuteCommand(); |
| | | |
| | | if (deleteItemsResult <= 0) |
| | | { |
| | | throw new Exception($"删除采购退料单[{itemOut.ItemOutNo}]明细失败"); |
| | | } |
| | | |
| | | // 删除采购退料单 |
| | | var deleteResult = Db.Deleteable<MesInvItemOuts>() |
| | | .Where(s => s.Id == itemOut.Id) |
| | | .ExecuteCommand(); |
| | | |
| | | if (deleteResult <= 0) |
| | | { |
| | | throw new Exception($"删除采购退料单[{itemOut.ItemOutNo}]失败"); |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | } |