/// <summary> /// 获取最新的钢坯出库单号 /// </summary> /// <param name="ckdh">出库单号</param> /// <returns></returns> public string GetCKDNO(string ckdh) { StringBuilder strSql = new StringBuilder(); strSql.Append("select MAX(C_CKDH) "); strSql.Append(" FROM TMD_DISPATCH_SJZJB WHERE 1=1 "); if (ckdh.Trim() != "") { strSql.Append(" AND C_CKDH LIKE 'GP" + ckdh + "%' "); } object obj = TransactionHelper.GetSingle(strSql.ToString()); if (obj == null) { return("0"); } else { return(obj.ToString()); } }
/// <summary> /// 转库操作,分摊重量到每一支,创建转库单并入库NC /// </summary> /// <param name="lineCode"></param> /// <param name="inventoryItems"></param> /// <param name="userId"></param> public void SaveInventory(string lineCode, List <WWInventoryItem> inventoryItems, string userId) { List <string> zkIds = new List <string>(); // 转库单ID对应的转库数据 Dictionary <string, List <Mod_TRC_ROLL_PRODCUT> > dic = new Dictionary <string, List <Mod_TRC_ROLL_PRODCUT> >(); TransactionHelper.BeginTransaction(); try { var arrZkId = GetZKId(inventoryItems.Count); // 验证 foreach (var item in inventoryItems) { List <Mod_TRC_ROLL_PRODCUT> list = new List <Mod_TRC_ROLL_PRODCUT>(); string sql = $@" select t.* from TRC_ROLL_PRODCUT T WHERE T.C_BATCH_NO='{item.BatchNo}' AND T.C_STL_GRD='{item.Gz}' AND T.C_STD_CODE='{item.Zxbz}' AND T.C_SPEC='{item.Spec}' AND T.c_judge_lev_zh = '{item.ZLDJ}' AND T.C_LINEWH_CODE = '{item.InventoryCode}' AND T.c_move_type IN ('QE','E') "; list.AddRange(DbHelperOra.Query(sql).Tables[0].DataTableToList2 <Mod_TRC_ROLL_PRODCUT>()); // 验证库存是否足够 if (list.Count < item.Number) { throw new Exception("库存不够,不能转库"); } if (list.Count > item.Number && list.Sum(w => w.N_WGT) <= item.Amt) { throw new Exception("库存量不够,请确认支数与重量"); } if (list.Count == item.Number) { // 如果全部转库,则转库总重量等于库存重量 item.Amt = list.Sum(w => w.N_WGT); } else { // 更新库存量(将支数与转库的重量分摊到每支上重新计算结余的重量) UpdateInventory(list, item.Amt, item.Number); } // 订单物料信息 var mtrlItem = dal_TB_MATRL_MAIN.GetModel(item.MtrlCode); var batchItem = list.FirstOrDefault(); var zkId = arrZkId[inventoryItems.IndexOf(item)]; zkIds.Add(zkId); // 转换仓库code为ID string getLinewhId = "select t.C_ID from TPB_LINEWH T WHERE T.C_LINEWH_CODE='{0}'"; var targetLinewhId = TransactionHelper.GetSingle(string.Format(getLinewhId, lineCode)) as string; var lineWhId = TransactionHelper.GetSingle(string.Format(getLinewhId, item.InventoryCode)) as string; if (string.IsNullOrEmpty(userId)) { userId = "1001NC100000002SS9XB"; } // 添加转库单 dalZkd.Add(new Mod_TRC_ROLL_ZKD { C_BATCH_NO = item.BatchNo, C_BZYQ = item.BZYQ, C_EMP_ID = userId, C_F_DW = mtrlItem.C_PK_MEASDOC, C_JUDGE_LEV_ZH = batchItem.C_JUDGE_LEV_ZH, C_LINEWH_CODE = item.InventoryCode, C_MAT_CODE = item.MtrlCode, C_MAT_DESC = batchItem.C_MAT_DESC, C_MBLINEWH_CODE = lineCode, C_SPEC = batchItem.C_SPEC, C_STL_GRD = batchItem.C_STL_GRD, C_STOVE = batchItem.C_STOVE, C_ZKD_NO = zkId,//转库单号 C_ZYX1 = batchItem.C_ZYX1, C_ZYX2 = batchItem.C_ZYX2, C_ZYX4 = batchItem.C_STD_CODE, C_Z_DW = mtrlItem.C_PK_MEASDOC, D_MOD_DT = DateTime.Now, D_PRODUCE_DATE = batchItem.D_MOD_DT, N_NUM = item.Number, N_SJNUM = item.Number, N_SJWGT = item.Amt, N_STATUS = 3, N_WGT = item.Amt,//list.Take(item.Number).Sum(w => w.N_WGT), C_LINEWH_ID = lineWhId, C_MBLINEWH_ID = targetLinewhId, }, true); dic.Add(zkId, list); } TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } // 发送NC foreach (var item in zkIds) { var zkdItem = dalZkd.GetListBydh(item).Tables[0].DataTableToList2 <Mod_TRC_ROLL_ZKD>().FirstOrDefault(); try { string directory = $"{AppDomain.CurrentDomain.BaseDirectory}\\NCXML"; if (Directory.Exists(directory) == false) { Directory.CreateDirectory(directory); } var result4i = dal_zk4i.SendXml_GP(directory, item); //var result4a = dal_zk4a.SendXml_GP(directory, item); if (result4i != "1") { throw new Exception(GetNCError(result4i)); } //if (result4a != "1") //{ // throw new Exception(GetNCError(result4a)); //} } catch (Exception ex) { // 上传NC异常删除转库单 dalZkd.Delete(zkdItem.C_ID); throw new Exception(ex.Message); } foreach (var pItem in dic[zkdItem.C_ZKD_NO].Take((int)(zkdItem.N_NUM ?? 0))) { // 设置转库及未上传NC状态 DbHelperOra.ExecuteSql($@"UPDATE TRC_ROLL_PRODCUT SET " + // 标记转库单号,用于撤销 $"C_ZKD_NO='{item}', " + // 标记委外出库状态 $"C_MOVE_TYPE='QM_{pItem.C_MOVE_TYPE}'," + $"C_LINEWH_CODE='{lineCode}',C_IS_TB='N' WHERE C_ID='{pItem.C_ID}'"); } } }
//NF.DAL.I.Dal_Interface_FR bll_Interface_FR = new NF.DAL.I.Dal_Interface_FR(); /// <summary> /// 转矩操作 /// </summary> /// <param name="lineCode">目标仓库</param> /// <param name="inventoryItems">转库数据</param> public void SaveInventory2(string lineCode, List <WWInventoryItem> inventoryItems) { List <string> zkIds = new List <string>(); TransactionHelper.BeginTransaction(); try { foreach (var item in inventoryItems) { string sql = $@" select t.* from TRC_ROLL_PRODCUT T WHERE T.C_BATCH_NO='{item.BatchNo}' AND T.C_STL_GRD='{item.Gz}' AND T.C_STD_CODE='{item.Zxbz}' AND T.C_SPEC='{item.Spec}' AND T.C_LINEWH_CODE = '{item.InventoryCode}' "; // 验证库存是否足够 var list = TransactionHelper.Query(sql).Tables[0].DataTableToList2 <Mod_TRC_ROLL_PRODCUT>(); if (list.Count < item.Number) { throw new Exception("库存不够,不能转库"); } foreach (var pItem in list.Take(item.Number)) { // 设置转库及未上传NC状态 TransactionHelper.ExecuteSql($"UPDATE TRC_ROLL_PRODCUT SET " + $"C_LINEWH_CODE='{lineCode}',C_IS_TB='N' WHERE C_ID='{pItem.C_ID}'"); } // 订单物料信息 var mtrlItem = dal_TB_MATRL_MAIN.GetModel(item.MtrlCode); var batchItem = list.FirstOrDefault(); string zkd = (DateTime.Now.Year.ToString().Substring(2, 2)) + (Convert.ToInt32(DateTime.Now.Month) > 9 ? DateTime.Now.Month.ToString() : ("0" + DateTime.Now.Month.ToString())) + (Convert.ToInt32(DateTime.Now.Day) > 9 ? DateTime.Now.Day.ToString() : ("0" + DateTime.Now.Day.ToString())); //转库单号 string maxzkd = GetZKDNO(zkd); //查询当天最大转库单号 long no = 0; if (maxzkd == "0") { no = Convert.ToInt64(zkd + "0001"); } else { no = Convert.ToInt64(maxzkd.Substring(2, maxzkd.Length - 2)) + 1; } zkd = "ZK" + no; var zkId = zkd; zkIds.Add(zkId); // 转换仓库code为ID string getLinewhId = "select t.C_ID from TPB_LINEWH T WHERE T.C_LINEWH_CODE='{0}'"; var targetLinewhId = TransactionHelper.GetSingle(string.Format(getLinewhId, lineCode)) as string; var lineWhId = TransactionHelper.GetSingle(string.Format(getLinewhId, item.InventoryCode)) as string; dalZkd.Add(new Mod_TRC_ROLL_ZKD { C_BATCH_NO = item.BatchNo, C_BZYQ = item.BZYQ, C_EMP_ID = "1001NC100000002SS9XB", C_F_DW = mtrlItem.C_PK_MEASDOC, C_JUDGE_LEV_ZH = batchItem.C_JUDGE_LEV_ZH, C_LINEWH_CODE = item.InventoryCode, C_MAT_CODE = item.MtrlCode, C_MAT_DESC = batchItem.C_MAT_DESC, C_MBLINEWH_CODE = lineCode, C_SPEC = batchItem.C_SPEC, C_STL_GRD = batchItem.C_STL_GRD, C_STOVE = batchItem.C_STOVE, C_ZKD_NO = zkId,//转库单号 C_ZYX1 = batchItem.C_ZYX1, C_ZYX2 = batchItem.C_ZYX2, C_ZYX4 = batchItem.C_STD_CODE, C_Z_DW = mtrlItem.C_PK_MEASDOC, D_MOD_DT = DateTime.Now, D_PRODUCE_DATE = batchItem.D_MOD_DT, N_NUM = item.Number, N_STATUS = 1, N_WGT = list.Take(item.Number).Sum(w => w.N_WGT), C_LINEWH_ID = lineWhId, C_MBLINEWH_ID = targetLinewhId, }, true); } TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } // 发送NC foreach (var item in zkIds) { string directory = $"{AppDomain.CurrentDomain.BaseDirectory}"; if (Directory.Exists(directory) == false) { Directory.CreateDirectory(directory); } var result4i = dal_zk4i.SendXml_GP(directory, item); var result4a = dal_zk4a.SendXml_GP(directory, item); if (result4i != "1") { throw new Exception(GetNCError(result4i)); } if (result4a != "1") { throw new Exception(GetNCError(result4a)); } } }