| | |
| | | using MES.Service.Dto.service; |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using DbType = System.Data.DbType; |
| | | |
| | |
| | | { |
| | | //当前类已经继承了 Repository 增、删、查、改的方法 |
| | | //这里面写的代码不会给覆盖,如果要重新生成请删除 MesInvItemOutsManager.cs |
| | | |
| | | public List<MesInvItemOuts> GetProductionPickPage(WarehouseQuery query) |
| | | { |
| | | 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); |
| | | } |
| | | |
| | | 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)")) // 动态字段 |
| | | }) |
| | | .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) |
| | | { |
| | |
| | | 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,ITEM_ID, PBILL_NO, RK_NO, SUM(QUANTITY) AS QUANTITY_OK |
| | | 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,ITEM_ID, PBILL_NO, RK_NO |
| | | GROUP BY ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO |
| | | ) D |
| | | ON D.ITEM_OUT_ID = C.ITEM_OUT_ID |
| | | AND D.ITEM_ID = C.ITEM_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); |
| | |
| | | FROM MES_INV_ITEM_OUT_ITEMS C |
| | | LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, |
| | | ITEM_NO, |
| | | ITEM_ID, |
| | | PBILL_NO, |
| | | RK_NO, |
| | | WORK_LINE |
| | | FROM MES_INV_ITEM_OUT_ITEMS |
| | | GROUP BY ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE,RK_NO) U |
| | | ON U.ITEM_ID = C.ITEM_ID |
| | | 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, |
| | | ITEM_ID, |
| | | 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_ID = C.ITEM_ID |
| | | 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 |
| | |
| | | |
| | | // 判断行是否重复 |
| | | var cf_Num = Db.Queryable<MesInvItemOutItems>() |
| | | .Where(s1 => s1.ItemId == item.ItemId && |
| | | .Where(s1 => s1.ItemNo == item.ItemNo && |
| | | s1.WorkLine == item.WorkLine && |
| | | s1.PbillNo == item.PbillNo && |
| | | s1.ItemOutId == mesInvItemOuts.Id && |
| | |
| | | (b, bar, c, d) => new |
| | | JoinQueryInfos( |
| | | JoinType.Left, b.ItemBarcode == bar.ItemBarcode, |
| | | JoinType.Left, b.ItemId == c.Id && |
| | | JoinType.Left, b.ItemNo == c.ItemNo && |
| | | b.Company == c.Company && |
| | | b.Factory == c.Factory, |
| | | JoinType.Left, b.DepotCode == d.DepotCode && |
| | |
| | | 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_ID = S.ID |
| | | LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO |
| | | 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,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO) U |
| | | ON U.ITEM_ID = C.ITEM_ID AND U.WORK_LINE = C.WORK_LINE |
| | | 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,ITEM_ID, EBELN, WORK_LINE, BILL_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,ITEM_ID, EBELN, WORK_LINE, BILL_NO) s1 |
| | | ON S1.ITEM_ID = C.ITEM_ID AND S1.WORK_LINE = C.WORK_LINE |
| | | 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_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_ID, EBELN order by CREATE_DATE) rn, DEPOT_CODE, DEPOT_SECTION_CODE,ITEM_ID |
| | | 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_ID = C.ITEM_ID) where 1=1 {0}", |
| | | 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; |
| | |
| | | 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_ID = A.ID LEFT JOIN (SELECT ITEM_OUT_ID, |
| | | ITEM_NO,ITEM_ID,PBILL_NO,SUM(QUANTITY) QUANTITY_OK,RK_NO |
| | | 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,ITEM_ID,PBILL_NO,RK_NO) D |
| | | GROUP BY ITEM_OUT_ID,ITEM_NO,PBILL_NO,RK_NO) D |
| | | ON D.ITEM_OUT_ID = B.ITEM_OUT_ID |
| | | AND D.ITEM_ID = B.ITEM_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} |
| | |
| | | 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.item_id, s.work_line, s.Work_no, |
| | | 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.item_id, s.work_line, s.work_no, S.RK_NO) s1 |
| | | 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_id = s1.item_id |
| | | and B.item_no = s1.item_no |
| | | AND B.BILL_NO = S1.RK_NO |
| | | LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE, 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,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO) U |
| | | ON U.ITEM_ID = B.ITEM_ID |
| | | 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_id = s2.id |
| | | 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%' |
| | |
| | | |
| | | return ItemOutNos; |
| | | } |
| | | //生产领料单审核前校验 |
| | | |
| | | |
| | | public MessageCenter SaveProductionMessageCenter(WarehouseQuery entity) |
| | | { |
| | | var message = ProductionMesToErpParam(entity); |
| | | |
| | | var executeReturnIdentity = |
| | | Db.Insertable(message).ExecuteReturnIdentity(); |
| | | if (executeReturnIdentity > 0) |
| | | { |
| | | message.Id = executeReturnIdentity; |
| | | message.Pid = executeReturnIdentity; |
| | | return message; |
| | | } |
| | | |
| | | throw new Exception("获取数据失败"); |
| | | } |
| | | |
| | | private 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 |
| | | { |
| | | c.Id, |
| | | c.ItemNo, |
| | | c.Quantity, |
| | | c.DepotCode, |
| | | c.DepotSectionCode, |
| | | c.ItemId, |
| | | erpId = b.ErpId, |
| | | e.Caa015, |
| | | f.PositionNo |
| | | }).ToList(); |
| | | |
| | | 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 |
| | | { |
| | | 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 |
| | | }); |
| | | } |
| | | |
| | | var dataJson = new |
| | | { |
| | | 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 |
| | | }; |
| | | |
| | | return "taskname=SCLL&mesid=" + mesInvItemOuts.Id + |
| | | "&optype=create&datajson=" + |
| | | JsonConvert.SerializeObject( |
| | | dataJson); |
| | | } |
| | | |
| | | public bool AuditProduction(WarehouseQuery query) |
| | | { |
| | | query.status = 1; |
| | | //审核 |
| | | return Update(query); |
| | | } |
| | | } |