| | |
| | | using MES.Service.DB; |
| | | using MES.Service.Dto.service; |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using SqlSugar; |
| | | |
| | | namespace MES.Service.service.Warehouse; |
| | |
| | | //当前类已经继承了 Repository 增、删、查、改的方法 |
| | | |
| | | //这里面写的代码不会给覆盖,如果要重新生成请删除 MesInvItemMovesManager.cs |
| | | |
| | | public int ScanInBarcode(WarehouseQuery query) |
| | | { |
| | | if (string.IsNullOrEmpty(query.sectionCode)) |
| | | { |
| | | throw new Exception("请扫库位条码!"); |
| | | } |
| | | |
| | | int pBillTypeId = 300; |
| | | int pTransctionNo = 301; |
| | | |
| | | var depotQuery = Db.Queryable<MesDepotSections, MesDepots>((a, b) => new JoinQueryInfos( |
| | | JoinType.Inner, a.Zuid.ToString() == b.Zuid)) |
| | | .Where((a, b) => a.DepotSectionCode == query.sectionCode) |
| | | .Select((a, b) => new { b.DepotCode }) |
| | | .First(); |
| | | |
| | | if (depotQuery == null) |
| | | { |
| | | throw new Exception($"002[库位编码 {query.sectionCode} 不存在,请确认!"); |
| | | } |
| | | |
| | | var cDepotCode = depotQuery.DepotCode; |
| | | |
| | | // 查询调拔入库信息 |
| | | var itemMoveQuery = Db.Queryable<MesInvItemMoves, MesInvItemMovesCDetails>((a, b) => new JoinQueryInfos( |
| | | JoinType.Inner, a.Id == b.ItemMoveId)) |
| | | .Where((a, b) => b.ItemBarcode == query.barcode && a.BillTypeId == pBillTypeId && a.TransactionNo == pTransctionNo && |
| | | a.Status == 1 && SqlFunc.IsNull(b.MoveOk, 0) != 1) |
| | | .Select((a, b) => new { a.Id, a.BillNo, a.InvDepotsCode }) |
| | | .First(); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | public List<MesInvItemMoves> GetBillNo(WarehouseQuery query) |
| | | { |
| | |
| | | .OrderBy(it => it.Id, OrderByType.Desc).ToList(); |
| | | } |
| | | |
| | | //scan_out_show_DB |
| | | public List<InventoryItem> ScanOutShowDb(WarehouseQuery query) |
| | | public List<MesInvItemMoves> GetPage(WarehouseQuery query) |
| | | { |
| | | return Db.Queryable<MesInvItemMoves>() |
| | | .WhereIF(!string.IsNullOrEmpty(query.billNo), |
| | | s => s.BillNo == query.billNo) |
| | | .OrderByDescending(s => s.Id) |
| | | .ToPageList(query.PageIndex, query.Limit); |
| | | } |
| | | |
| | | public MovesDto GetItems(WarehouseQuery query) |
| | | { |
| | | MovesDto dto = new MovesDto(); |
| | | |
| | | dto.BarcodeList = GetItemMovesCDetails(query); |
| | | dto.OutItems = GetItemOutItems(query); |
| | | |
| | | return dto; |
| | | } |
| | | |
| | | private List<MesInvItemOutItems> GetItemOutItems(WarehouseQuery query) |
| | | { |
| | | var sql = string.Format( |
| | | "SELECT C.ITEM_NO, C.QUANTITY, C.REMARK, C.REMARK, S.ITEM_NAME, S.ITEM_MODEL, U.FNAME ITEM_UNIT, D.QUANTITY_OK, NVL(ST.QUANTITY, 0) WLKC FROM MES_INV_ITEM_OUT_ITEMS C JOIN MES_ITEMS S ON C.ITEM_ID = S.ID LEFT JOIN MES_UNIT U ON U.ID = S.ITEM_UNIT LEFT JOIN MES_DEPOTS P ON P.DEPOT_CODE = C.DEPOT_CODE LEFT JOIN MES_DEPOT_SECTIONS E ON E.DEPOT_SECTION_CODE = C.DEPOT_SECTION_CODE LEFT JOIN (SELECT ITEM_MOVE_ID, ITEM_NO, SUM(QUANTITY) QUANTITY_OK FROM MES_INV_ITEM_MOVES_C_DETAILS GROUP BY ITEM_MOVE_ID, ITEM_NO) D ON D.ITEM_MOVE_ID = C.ITEM_OUT_ID AND D.ITEM_NO = C.ITEM_NO LEFT JOIN MES_INV_ITEM_MOVES A ON A.ID = C.ITEM_OUT_ID left join (SELECT ITEM_ID, SUM(QUANTITY) QUANTITY, DEPOTS_CODE FROM MES_INV_ITEM_STOCKS GROUP BY ITEM_ID, DEPOTS_CODE) ST ON C.ITEM_ID = ST.ITEM_ID AND ST.DEPOTS_CODE = A.FROM_DEPOTS_CODE where C.ITEM_OUT_ID = {0}", |
| | | query.id); |
| | | |
| | | return Db.Ado.SqlQuery<MesInvItemOutItems>(sql); |
| | | } |
| | | |
| | | private List<MesInvItemMovesCDetails> GetItemMovesCDetails( |
| | | WarehouseQuery query) |
| | | { |
| | | return Db.Queryable<MesInvItemMovesCDetails, MesItems, MesSupplier>( |
| | | (b, c, f) => new JoinQueryInfos( |
| | | JoinType.Left, |
| | | b.ItemNo == c.ItemNo && b.Company == c.Company && |
| | | b.Factory == c.Factory, |
| | | JoinType.Left, b.SuppNo == f.SuppNo |
| | | )) |
| | | .Where((b, c, f) => b.ItemMoveId == query.id) |
| | | .Select((b, c, f) => new MesInvItemMovesCDetails |
| | | { |
| | | FromDepotSectionsCode = b.FromDepotSectionsCode, |
| | | BoardStyle = b.BoardStyle, |
| | | FromDepotsCode = b.FromDepotsCode, |
| | | InvDepotSectionsCode = b.InvDepotSectionsCode, |
| | | InvDepotsCode = b.InvDepotsCode, |
| | | Quantity = b.Quantity, |
| | | LotNo = b.LotNo, |
| | | ItemNo = b.ItemNo, |
| | | ItemBarcode = b.ItemBarcode, |
| | | ItemName = c.ItemName, |
| | | ItemModel = c.ItemModel, |
| | | ItemUnit = c.ItemUnit, |
| | | SuppName = f.SuppName, |
| | | MoveOk = |
| | | SqlFunc.IsNull(b.MoveOk, 0) // 使用 SqlFunc.IsNull 实现 NVL 的效果 |
| | | }).ToList(); |
| | | } |
| | | |
| | | public OutItemDto ScanMoveBarcode(WarehouseQuery query) |
| | | { |
| | | var BillTypeId = 300; |
| | | var TransctionNo = 301; |
| | | query.Factory = "1000"; |
| | | query.Company = "1000"; |
| | | |
| | | if (string.IsNullOrEmpty(query.billNo)) throw new Exception("请选单据号!"); |
| | | |
| | | var mesInvItemStocks = Db.Queryable<MesInvItemStocks>() |
| | | .Where(s => s.ItemBarcode == query.barcode && |
| | | s.Quantity > 0 && s.DepotsCode != null).First(); |
| | | if (mesInvItemStocks == null) |
| | | throw new Exception("库存中无此条码,请核对!" + query.barcode); |
| | | |
| | | var mesInvItemMoves = Db.Queryable<MesInvItemMoves>() |
| | | .Where(d => d.TransactionNo == TransctionNo |
| | | && SqlFunc.IsNull(d.Status, 0) == 1).First(); |
| | | |
| | | if (mesInvItemMoves == null) |
| | | throw new Exception("出库单 " + query.billNo + "不存在,请确认!"); |
| | | |
| | | var count = Db.Queryable<MesInvItemMoves, MesInvItemMovesCDetails>( |
| | | (a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, a.Id == b.ItemMoveId)) |
| | | .Where((a, b) => b.ItemBarcode == query.barcode |
| | | && a.TransactionNo == TransctionNo && |
| | | SqlFunc.IsNull(a.Status, 0) == 0).Count(); |
| | | if (count > 0) throw new Exception("条码重复扫描,请核对!"); |
| | | |
| | | count = Db.Queryable<MesInvItemMoves, MesInvItemMovesCDetails>((a, b) => |
| | | new JoinQueryInfos(JoinType.Inner, a.Id == b.ItemMoveId)) |
| | | .Where((a, b) => b.ItemBarcode == query.barcode |
| | | && a.TransactionNo == TransctionNo && |
| | | SqlFunc.IsNull(b.MoveOk, 0) == 0).Count(); |
| | | |
| | | if (count > 0) throw new Exception("条码重复扫描,请核对!"); |
| | | |
| | | if (mesInvItemMoves.FromDepotsCode != mesInvItemStocks.DepotsCode) |
| | | throw new Exception("条码现存仓库与申请出货仓库不一致,请核对!"); |
| | | |
| | | var quantity = Db.Queryable<MesInvItemOutItems>() |
| | | .Where(b => b.ItemNo == mesInvItemStocks.ItemNo |
| | | && b.ItemOutId == mesInvItemMoves.Id) |
| | | .Sum(b => b.Quantity); |
| | | |
| | | if (quantity == null) |
| | | throw new Exception("扫码物料非本次申请物料,请核对!" + query.barcode); |
| | | |
| | | var sum = Db.Queryable<MesInvItemMovesCDetails>() |
| | | .Where(b => b.ItemNo == mesInvItemStocks.ItemNo |
| | | && b.ItemMoveId == mesInvItemMoves.Id) |
| | | .Sum(b => b.Quantity) ?? 0; |
| | | |
| | | var sumqty = sum + (mesInvItemStocks.Quantity ?? 0); |
| | | |
| | | if (sumqty > quantity) |
| | | throw new Exception( |
| | | "已扫条码数量或本次扫码数量:" + sumqty + " 大于申请数量:" + quantity + ",请核对!"); |
| | | |
| | | List<InventoryItem> scanOutShowDb = null; |
| | | |
| | | UseTransaction(db => |
| | | { |
| | | SaveMesInvItemMovesCDetails(db, query, mesInvItemMoves, |
| | | mesInvItemStocks); |
| | | |
| | | // Insert into mes_inv_business2 |
| | | SaveMesInvBusiness2(db, query, BillTypeId, TransctionNo, |
| | | mesInvItemStocks, mesInvItemMoves); |
| | | |
| | | if (TransctionNo == 303) |
| | | db.Updateable<MesInvItemStocks>() |
| | | .SetColumns(s => |
| | | s.DepotSectionsCode == mesInvItemMoves.InvDepotsCode) |
| | | .SetColumns(s => |
| | | s.DepotsCode == mesInvItemMoves.InvDepotsCode) |
| | | .Where(s => s.Id == mesInvItemStocks.Id) |
| | | .ExecuteCommand(); |
| | | else |
| | | db.Updateable<MesInvItemStocks>() |
| | | .SetColumns(s => s.DepotSectionsCode == null) |
| | | .SetColumns(s => s.DepotsCode == null) |
| | | .Where(s => s.Id == mesInvItemStocks.Id) |
| | | .ExecuteCommand(); |
| | | |
| | | scanOutShowDb = ScanOutShowDb(query); |
| | | if (CollectionUtil.IsNullOrEmpty(scanOutShowDb)) |
| | | db.Updateable<MesInvItemMoves>() |
| | | .SetColumns(s => s.Status == 1) |
| | | .SetColumns(s => s.Checkdate == DateTime.Now) |
| | | .SetColumns(s => s.Checkuser == query.userName) |
| | | .Where(s => s.BillNo == query.billNo).ExecuteCommand(); |
| | | |
| | | return 1; |
| | | }); |
| | | |
| | | var itemDto = new OutItemDto(); |
| | | itemDto.SumItem = scanOutShowDb; |
| | | |
| | | if (TransctionNo == 201) itemDto.Quantity = mesInvItemStocks.Quantity; |
| | | |
| | | itemDto.ItemNo = mesInvItemStocks.ItemNo; |
| | | |
| | | return itemDto; |
| | | } |
| | | |
| | | private void SaveMesInvBusiness2(SqlSugarScope Db, WarehouseQuery query, |
| | | int BillTypeId, |
| | | int TransctionNo, MesInvItemStocks mesInvItemStocks, |
| | | MesInvItemMoves mesInvItemMoves) |
| | | { |
| | | var executeCommand = Db.Insertable(new MesInvBusiness2 |
| | | { |
| | | Status = 1, |
| | | BillTypeId = BillTypeId, |
| | | TransactionCode = TransctionNo.ToString(), |
| | | BusinessType = 1, |
| | | ItemBarcode = query.barcode, |
| | | ItemNo = mesInvItemStocks.ItemNo, |
| | | LotNo = mesInvItemStocks.LotNo, |
| | | EpFlag = 1, |
| | | Quantity = mesInvItemStocks.Quantity, |
| | | FromInvDepotsCode = mesInvItemStocks.DepotsCode, |
| | | FromInvDepotSectionsCode = mesInvItemStocks.DepotSectionsCode, |
| | | ToInvDepotsCode = TransctionNo == 303 |
| | | ? mesInvItemMoves.InvDepotsCode |
| | | : null, |
| | | ToInvDepotSectionsCode = TransctionNo == 303 |
| | | ? mesInvItemMoves.InvDepotsCode |
| | | : null, |
| | | CreateBy = query.userName, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = query.userName, |
| | | LastupdateDate = DateTime.Now, |
| | | Factory = query.Factory, |
| | | Company = query.Company, |
| | | TaskNo = mesInvItemStocks.TaskNo, |
| | | BillNo = query.billNo, |
| | | WorkNo = mesInvItemStocks.WorkNo, |
| | | WorkLine = mesInvItemStocks.WorkLine, |
| | | SuppNo = mesInvItemStocks.SuppNo |
| | | }).ExecuteCommand(); |
| | | |
| | | if (executeCommand <= 0) throw new Exception("写入MesInvBusiness2表失败"); |
| | | } |
| | | |
| | | private void SaveMesInvItemMovesCDetails(SqlSugarScope Db, |
| | | WarehouseQuery query, |
| | | MesInvItemMoves mesInvItemMoves, MesInvItemStocks mesInvItemStocks) |
| | | { |
| | | var executeCommand = Db.Insertable(new MesInvItemMovesCDetails |
| | | { |
| | | ItemMoveId = mesInvItemMoves.Id, |
| | | ItemBarcode = query.barcode, |
| | | CItemCode = mesInvItemStocks.CItemCode, |
| | | ItemNo = mesInvItemStocks.ItemNo, |
| | | LotNo = mesInvItemStocks.LotNo, |
| | | Quantity = mesInvItemStocks.Quantity, |
| | | EpFlag = mesInvItemStocks.EpFlag, |
| | | CreateBy = query.userName, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = query.userName, |
| | | LastupdateDate = DateTime.Now, |
| | | CustNo = mesInvItemStocks.CustomerNo, |
| | | TaskNo = mesInvItemStocks.TaskNo, |
| | | FromDepotsCode = mesInvItemStocks.DepotsCode, |
| | | FromDepotSectionsCode = mesInvItemStocks.DepotSectionsCode, |
| | | Factory = mesInvItemStocks.Factory, |
| | | Company = mesInvItemStocks.Company, |
| | | IqcStatus = mesInvItemStocks.IqcStatus, |
| | | Fcar = mesInvItemStocks.Fcar, |
| | | IndepDate = mesInvItemStocks.IndepDate, |
| | | VisableSubmit = mesInvItemStocks.VisableSubmit, |
| | | VisableSubmitBy = mesInvItemStocks.VisableSubmitBy, |
| | | VisableSubmitDate = mesInvItemStocks.VisableSubmitDate, |
| | | BoardStyle = mesInvItemStocks.BoardStyle, |
| | | WorkNo = mesInvItemStocks.WorkNo, |
| | | WorkLine = mesInvItemStocks.WorkLine, |
| | | SuppNo = mesInvItemStocks.SuppNo |
| | | }).ExecuteCommand(); |
| | | |
| | | if (executeCommand <= 0) |
| | | throw new Exception("写入MesInvItemMovesCDetails表失败"); |
| | | } |
| | | |
| | | //scan_out_show_DB |
| | | private List<InventoryItem> ScanOutShowDb(WarehouseQuery query) |
| | | { |
| | | var BillTypeId = 300; |
| | | var TransctionNo = 301; |
| | | query.Factory = "1000"; |
| | | query.Company = "1000"; |
| | | |
| | | if (string.IsNullOrEmpty(query.billNo)) throw new Exception("请选单据号!"); |
| | | |
| | | var sql = string.Format( |
| | | "select f_get_sections_code({0}, {1}, b.item_no) sections_code , s.erp_item_no , S.ITEM_MODEL , to_char(nvl(b.quantity, 0) - nvl(quantity_ok, 0), 'FM9999999990.00') flist from mes_inv_item_moves a join mes_inv_item_out_items b on b.item_out_id = a.id join mes_items s on b.item_no = s.item_no left join (select ITEM_MOVE_ID, item_no, sum(quantity) quantity_ok from MES_INV_ITEM_MOVES_C_DETAILS group by ITEM_MOVE_ID, item_no) c on c.ITEM_MOVE_ID = a.id and b.item_no = c.item_no where 1 = 1 and a.bill_type_id = {2} and a.transaction_no = {3} and a.bill_no = {4} and nvl(b.quantity, 0) - nvl(quantity_ok, 0) > 0 and rownum < 500 AND A.STATUS = 1 order by f_get_sections_code({0}, {1}, b.item_no), s.erp_item_no ", |
| | | query.Factory, query.Company, BillTypeId, TransctionNo, |