/// <summary> /// 重置顺序 /// </summary> public int CZSORT(string pro) { DataTable dt = GetListByStatus(1, pro, "").Tables[0]; TransactionHelper.BeginTransaction(); if (dt.Rows.Count > 0) { int sort = 1; foreach (DataRow item in dt.Rows) { string sql = ""; sql = "UPDATE TB_STA SET N_SORT='" + sort + "' WHERE C_ID='" + item["C_ID"] + "' AND C_PRO_ID='" + pro + "' "; if (TransactionHelper.ExecuteSql(sql) == 1) { sort++; } else { TransactionHelper.RollBack(); return(0); } } } TransactionHelper.Commit(); return(1); }
/// <summary> /// 撤销组批计划,删除成品线材,还原组批计划状态到完工 /// </summary> /// <param name="cId">组批计划ID</param> /// <param name="oldXCLst"></param> /// <param name="xcLst"></param> public void ResetZP(string cId, List <TRC_ROLL_WW_MAIN_ITEM> oldXCLst, List <Mod_TRC_ROLL_PRODCUT> xcLst) { try { TransactionHelper.BeginTransaction(); foreach (var item in xcLst) { string updateSql = $"UPDATE TRC_ROLL_PRODCUT SET C_MOVE_TYPE='QD' WHERE C_ID='{item.C_ID}'"; TransactionHelper.ExecuteSql(updateSql); } // 设置组批计划状态为完工 TransactionHelper.ExecuteSql($"UPDATE TRC_ROLL_WW_MAIN SET N_STATUS=1 WHERE C_ID='{cId}'"); TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } //foreach (var item in oldXCLst) //{ // string updateSql = $"UPDATE TRC_ROLL_PRODCUT SET C_MOVE_TYPE='QE' WHERE C_ID='{item.C_SLAB_MAIN_ID}'"; // TransactionHelper.ExecuteSql(updateSql); //} }
/// <summary> /// 向NC发送发运单 /// </summary> /// <param name="fydid">发运单id</param> /// <returns>返回int类型 0发运单数据为空1成功,-1写入中间表出错,-2发送NC错误-3代码错误</returns> public string SENDFYD(string fydid, string path) { string LogSql = ""; string name = "Dal_Interface_WL.SENDFYD"; try { TransactionHelper.BeginTransaction(); if (UPSLABSTATUS_Tran(fydid, "S") == 0) { TransactionHelper.RollBack(); return("变更钢坯状态错误!"); } //if (UPFYDSTATUS_Tran(fydid, "9") == 0) //{ // TransactionHelper.RollBack(); // return "变更发运单状态错误!"; //} string message = dal_Interface_NC_DM.SendXml_DM(path, fydid); if (message != "1") { TransactionHelper.RollBack(); return(message); } TransactionHelper.Commit(); return("1"); } catch (Exception ex) { LogSql = "INSERT INTO TI_RF_LOG(C_TYPE, C_LOG, C_NAME) VALUES('向物流发送发运单','" + ex.ToString() + "','" + name + "')"; DbHelperOra.ExecuteSql(LogSql); return(ex.ToString()); } }
/// <summary> /// 修改钢坯状态 /// </summary> /// <param name="list">List<CommonKC>通用库存处理类</param> /// <param name="status">状态</param> /// <returns>0失败1成功</returns> public int UPSLABSTATUS(List <CommonKC> list, string fydh, string status) { TransactionHelper.BeginTransaction(); foreach (CommonKC item in list) { StringBuilder strSql = new StringBuilder(); strSql.Append("UPDATE TSC_SLAB_MAIN SET C_MOVE_TYPE='" + status + "',C_FYDH='" + fydh + "' ,C_FYID='" + item.id + "' WHERE C_MOVE_TYPE='E'"); if (item.mat.Trim() != "") { strSql.Append(" and C_MAT_CODE='" + item.mat + "'"); } if (item.ck.Trim() != "") { strSql.Append(" and C_SLABWH_CODE='" + item.ck + "'"); } if (item.batch.Trim() != "") { strSql.Append(" and C_BATCH_NO='" + item.batch + "'"); } if (item.stove.Trim() != "") { strSql.Append(" and C_STOVE='" + item.stove + "'"); } strSql.Append(" and ROWNUM<='" + item.num + "'"); if (TransactionHelper.ExecuteSql(strSql.ToString()) != item.num) { TransactionHelper.RollBack(); return(0); } } TransactionHelper.Commit(); return(1); }
public void SetFinish(Mod_TRC_ROLL_WW_MAIN model) { try { TransactionHelper.BeginTransaction(); string sql = $"UPDATE TRC_ROLL_WW_MAIN SET N_WGT_REMOVE={model.N_WGT_REMOVE}" + $",N_QUA_REMOVE={model.N_QUA_REMOVE}" + $",N_STATUS={model.N_STATUS}" + $",C_PRODUCE_GROUP='{model.C_PRODUCE_GROUP}'" + $",C_CHECKSTATE_NAME='{model.C_CHECKSTATE_NAME}'" + $",C_LINEWH_CODE='{model.C_LINEWH_CODE}'" + $",C_LINEWH_NAME='{model.C_LINEWH_NAME}'" + $",C_PRODUCE_EMP_ID='{model.C_PRODUCE_EMP_ID}'" + $",C_PRODUCE_SHIFT='{model.C_PRODUCE_SHIFT}' WHERE C_ID='{model.C_ID}'"; // // 完工量不等于组批量,回写库存重量 // var amt = model.N_WGT_TOTAL - model.N_WGT_REMOVE; // if (amt > 0) // { // string whereSql = $@" //SELECT MAX(C_ID) FROM TRC_ROLL_PRODCUT //WHERE C_BATCH_NO='{model.C_XC_BATCH_NO}' AND C_LINEWH_CODE='{model.C_XC_LINEWH_CODE}' //AND C_MAT_CODE='{model.C_MAT_XC_CODE}' AND C_BZYQ='{model.C_XC_BZYQ}' //AND C_MOVE_TYPE='QE' //"; // var cId = TransactionHelper.GetSingle(whereSql)?.ToString(); // if (string.IsNullOrEmpty(cId)) // { // throw new Exception("找不到记录库存"); // } // var updateSql = $"UPDATE TRC_ROLL_PRODCUT SET N_WGT={amt} WHERE C_ID='{cId}'"; // var updateRlt = TransactionHelper.ExecuteSql(updateSql); // if (updateRlt != 1) // { // throw new Exception("更新库存失败"); // } // } var rlt = TransactionHelper.ExecuteSql(sql) > 0; if (!rlt) { throw new Exception("完工失败"); } TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } }
/// <summary> /// 根据idstr更新钢坯库存状态 /// </summary> /// <param name="idstr">库存钢坯id字符串</param> /// <returns></returns> public string GPFY(string dh) { TransactionHelper.BeginTransaction(); if (UPSLABSTATUS_Tran(dh, "S") == 0) { return("变更钢坯状态错误!"); } if (UPFYDSTATUS_Tran(dh, "8") == 0) { return("变更发运单状态错误!"); } TransactionHelper.Commit(); return("1"); }
/// <summary> /// 修改批次号,如果录入了成分,需要把成分的批次号更新 /// </summary> /// <param name="model"></param> /// <param name="newBatchNo"></param> public void UpdateBatchNo(Mod_TRC_ROLL_WW_MAIN model, string newBatchNo) { try { // 采取事物控制 TransactionHelper.BeginTransaction(); // 更新成分信息 string updateSql1 = $"UPDATE TQC_COMPRE_ITEM_RESULT SET C_BATCH_NO='{newBatchNo}' WHERE C_BATCH_NO='{model.C_BATCH_NO}'"; // 组批计划更新批号 string updateSql2 = $"UPDATE TRC_ROLL_WW_MAIN SET C_BATCH_NO='{newBatchNo}' WHERE C_BATCH_NO='{model.C_BATCH_NO}'"; TransactionHelper.ExecuteSql(updateSql1); TransactionHelper.ExecuteSql(updateSql2); TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw new Exception("修改批次号失败"); } }
/// <summary> /// 同步NC线材库存数据 /// </summary> /// <param name="item"></param> /// <param name="userId"></param> public void SyncInventory(List <Mod_TRC_ROLL_PRODCUT> list) { TransactionHelper.BeginTransaction(); try { for (int i = 1; i <= list.Count; i++) { var mod = list[i - 1]; #region sql string sql = $@" insert into TRC_ROLL_PRODCUT(C_ID,C_TRC_ROLL_MAIN_ID,C_STOVE,C_BATCH_NO,C_TICK_NO,C_STL_GRD,C_STL_GRD_BEFORE,N_WGT,C_STD_CODE,C_STD_CODE_BEFORE,C_MOVE_TYPE,C_SPEC,C_SHIFT,C_GROUP,C_EMP_ID,D_MOD_DT,C_STA_ID,C_JUDGE_LEV_BP,C_JUDGE_LEV_CF,C_JUDGE_LEV_XN,C_JUDGE_LEV_ZH,C_DP_SHIFT,C_DP_GROUP,C_DP_EMP_ID,D_DP_DT,C_PLANT_ID,C_PLANT_DESC,C_MAT_CODE,C_MAT_CODE_BEFORE,C_MAT_DESC,C_MAT_DESC_BEFORE,C_IS_DEPOT,C_PLAN_ID,C_ORDER_NO,C_CON_NO,C_CUST_NO,C_CUST_NAME,C_ISFREE,C_LINEWH_CODE,C_LINEWH_AREA_CODE,C_LINEWH_LOC_CODE,C_FLOOR,C_CUST_AREA,C_SALE_AREA,C_BZYQ,C_WWBATCH_NO,C_ZYX1,C_ZYX2,C_IS_QR,N_SFOB) values ( '{mod.C_ID}', '{mod.C_TRC_ROLL_MAIN_ID }', '{mod.C_STOVE }', '{mod.C_BATCH_NO }', '{mod.C_TICK_NO }', '{mod.C_STL_GRD }', '{mod.C_STL_GRD_BEFORE }', '{mod.N_WGT }', '{mod.C_STD_CODE }', '{mod.C_STD_CODE_BEFORE }', '{mod.C_MOVE_TYPE }', '{mod.C_SPEC }', '{mod.C_SHIFT }', '{mod.C_GROUP }', '{mod.C_EMP_ID }', to_date('{mod.D_MOD_DT}','yyyy/MM/dd hh24:mi:ss'), '{mod.C_STA_ID }', '{mod.C_JUDGE_LEV_BP }', '{mod.C_JUDGE_LEV_CF }', '{mod.C_JUDGE_LEV_XN }', '{mod.C_JUDGE_LEV_ZH }', '{mod.C_DP_SHIFT }', '{mod.C_DP_GROUP }', '{mod.C_DP_EMP_ID }', to_date('{mod.D_DP_DT}','yyyy/MM/dd hh24:mi:ss'), '{mod.C_PLANT_ID }', '{mod.C_PLANT_DESC }', '{mod.C_MAT_CODE }', '{mod.C_MAT_CODE_BEFORE }', '{mod.C_MAT_DESC }', '{mod.C_MAT_DESC_BEFORE }', '{mod.C_IS_DEPOT }', '{mod.C_PLAN_ID }', '{mod.C_ORDER_NO}', '{mod.C_CON_NO }', '{mod.C_CUST_NO}', '{mod.C_CUST_NAME}', '{mod.C_ISFREE }', '{mod.C_LINEWH_CODE}', '{mod.C_LINEWH_AREA_CODE}', '{mod.C_LINEWH_LOC_CODE }', '{mod.C_FLOOR }', '{mod.C_CUST_AREA }', '{mod.C_SALE_AREA }', '{mod.C_BZYQ }', '{mod.C_WWBATCH_NO }', '{mod.C_ZYX1 }', '{mod.C_ZYX2}', '{"Y"}', '{1}') "; #endregion TransactionHelper.ExecuteSql(sql); } } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } TransactionHelper.Commit(); }
/// <summary> /// 入库 /// </summary> /// <param name="cId"></param> /// <param name="batchNo"></param> /// <param name="addItems"></param> public void AddCompreItem(string cId, string batchNo, List <Mod_TQC_COMPRE_ITEM_RESULT> addItems) { // 删除之前的成分 TransactionHelper.BeginTransaction(); try { TransactionHelper.ExecuteSql($"DELETE TQC_COMPRE_ITEM_RESULT WHERE C_BATCH_NO='{batchNo}'"); foreach (var item in addItems) { #region sql string sql = $@" INSERT INTO TQC_COMPRE_ITEM_RESULT( C_ID ,C_STOVE ,C_BATCH_NO ,C_STL_GRD ,C_SPEC ,C_STD_CODE ,C_CHARACTER_ID ,C_ITEM_NAME ,C_TARGET_MIN ,C_TARGET_INTERVAL ,C_TARGET_MAX ,C_TYPE ,C_UNIT ,C_QUANTITATIVE ,C_VALUE ,C_RESULT ,C_CHECK_STATE ,N_STATUS ,C_REMARK ,C_EMP_ID ,D_MOD_DT ,C_DESIGN_NO ,N_PRINT_ORDER ,C_TICK_NO ,C_IS_SHOW ,C_IS_DECIDE ,C_GROUP ,C_TB) VALUES ( '{item.C_ID}' ,'{item.C_STOVE}' ,'{item.C_BATCH_NO}' ,'{item.C_STL_GRD}' ,'{item.C_SPEC}' ,'{item.C_STD_CODE}' ,'{item.C_CHARACTER_ID}' ,'{item.C_ITEM_NAME}' ,'{item.C_TARGET_MIN}' ,'{item.C_TARGET_INTERVAL}' ,'{item.C_TARGET_MAX}' ,'{item.C_TYPE}' ,'{item.C_UNIT}' ,'{item.C_QUANTITATIVE}' ,'{item.C_VALUE}' ,'{item.C_RESULT}' ,'{item.C_CHECK_STATE}' ,'{item.N_STATUS}' ,'{item.C_REMARK}' ,'{item.C_EMP_ID}' ,to_date('{item.D_MOD_DT}','yyyy-mm-dd hh24:mi:ss') ,'{item.C_DESIGN_NO}' ,'{item.N_PRINT_ORDER}' ,'{item.C_TICK_NO}' ,'{item.C_IS_SHOW}' ,'{item.C_IS_DECIDE}' ,'{item.C_GROUP}' ,'{item.C_TB}') "; #endregion var a = TransactionHelper.ExecuteSql(sql); if (a <= 0) { throw new Exception("操作失败"); } } TransactionHelper.Commit(); } catch { TransactionHelper.RollBack(); throw new Exception("操作失败,请联系管理员"); } }
/// <summary> /// 转库操作,同步实绩到NC, /// 支持分批转库及回滚 /// </summary> public void SyncWWZKD(string[] arrZkdId) { foreach (var item in arrZkdId) { var zkdItem = dalZkd.GetListBydh(item).Tables[0].DataTableToList2 <Mod_TRC_ROLL_ZKD>().FirstOrDefault(); if (zkdItem == null) { throw new Exception("转库单不存在"); } try { string directory = $"{AppDomain.CurrentDomain.BaseDirectory}\\NCXML"; if (Directory.Exists(directory) == false) { Directory.CreateDirectory(directory); } var result4a = dal_zk4a.SendXml_GP(directory, item); if (result4a != "1") { throw new Exception(GetNCError(result4a)); } } catch (Exception ex) { // 上传NC异常删除转库单 //dalZkd.Delete(zkdItem.C_ID); throw new Exception(ex.Message); } var listData = GetBySql( $"SELECT T.* FROM TRC_ROLL_PRODCUT T WHERE T.C_ZKD_NO='{item}' AND T.C_MOVE_TYPE LIKE 'QM_%'" ).DataTableToList2 <Mod_TRC_ROLL_PRODCUT>(); if (listData.Any(w => w.C_LINEWH_CODE != zkdItem.C_MBLINEWH_CODE)) { throw new Exception("转库单线材仓库与库存线材仓库不一致"); } TransactionHelper.BeginTransaction(); try { foreach (var pItem in listData) { string oldStatu = pItem.C_MOVE_TYPE.Replace("QM_", ""); // 设置转库及未上传NC状态 TransactionHelper.ExecuteSql($@"UPDATE TRC_ROLL_PRODCUT SET " + // 标记转库单号,用于撤销 //$"C_ZKD_NO='{item}', " + // 标记委外出库状态 $"C_MOVE_TYPE='{oldStatu}'," + $"C_LINEWH_CODE='{zkdItem.C_MBLINEWH_CODE}',C_IS_TB='Y' WHERE C_ID='{pItem.C_ID}'"); } // 更新转库单状态 TransactionHelper.ExecuteSql($"UPDATE TRC_ROLL_ZKD SET N_STATUS=2 WHERE C_ID='{zkdItem.C_ID}'"); TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } } }
/// <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)); } } }
/// <summary> /// 更新线材详情 /// </summary> /// <param name="arrAllId"></param> /// <param name="arrUpdateId"></param> /// <param name="txtamt"></param> /// <param name="moveType"></param> public void UpdateDetail( List <string> arrAllId, List <string> arrUpdateId, decimal txtamt, string moveType) { var states = new string[] { "QE", "E" }; if (arrUpdateId.Count > arrAllId.Count) { throw new Exception("数据错误,请刷新页面重试"); } if (states.Concat(new string[] { "S" }).Any(x => x == moveType) == false) { throw new Exception("数据错误,请刷新页面重试"); } var listUpdateMoveType = new List <Mod_TRC_ROLL_PRODCUT>(); var allIds = string.Join("','", arrAllId); var updateIds = string.Join("','", arrUpdateId); var selectSql = @"SELECT * FROM trc_roll_prodcut where c_id in ('{0}') order by c_id"; string allSql = string.Format(selectSql, allIds); string updateSql = string.Format(selectSql, updateIds); TransactionHelper.BeginTransaction(); try { var allData = DbHelperOra.Query(allSql).Tables[0].DataTableToList2 <Mod_TRC_ROLL_PRODCUT>(); if (allData.Any(l => states.Any(x => x == l.C_MOVE_TYPE) == false)) { throw new Exception("系统检测到数据状态已发生变化,请重试"); } if (arrAllId.Count == arrUpdateId.Count) { var s2 = arrAllId.OrderBy(w => w).Zip(arrUpdateId.OrderBy(w => w), (x, y) => { return(new { x, y }); }).Any(l => l.x != l.y); if (s2) { throw new Exception("数据错误,请刷新页面重试"); } // 修改所有线材的重量 var totalAmt = allData.Sum(w => w.N_WGT); // 如果重量一致不修改 if (totalAmt != txtamt) { UpdateInventory(allData, txtamt, arrAllId.Count); } listUpdateMoveType.AddRange(allData); } else { var uptData = DbHelperOra.Query(updateSql).Tables[0].DataTableToList2 <Mod_TRC_ROLL_PRODCUT>(); if (uptData.Any(l => states.Any(x => x == l.C_MOVE_TYPE) == false)) { throw new Exception("系统检测到数据状态已发生变化,请重试"); } // 如果重量一致不修改 if (uptData.Sum(w => w.N_WGT) != txtamt) { // 修改了重量 allData = allData.OrderBy(w => uptData.Any(l => w.C_ID == l.C_ID) == false).ToList(); if (allData.Count != arrAllId.Count || uptData.Count != arrUpdateId.Count) { throw new Exception("数据错误,请刷新页面重试"); } var s = arrAllId.OrderBy(w => w).Zip(allData.OrderBy(w => w.C_ID), (x, y) => { return(new { x, y.C_ID }); }).Any(p => p.x != p.C_ID); var s1 = arrUpdateId.OrderBy(w => w).Zip(uptData.OrderBy(w => w.C_ID), (x, y) => { return(new { x, y.C_ID }); }).Any(p => p.x != p.C_ID); if (s | s1) { throw new Exception("数据错误,请刷新页面重试"); } var totalamt = allData.Sum(x => x.N_WGT); if (txtamt >= totalamt) { throw new Exception($"不得超过总重量:{totalamt}"); } UpdateInventory(allData, txtamt, uptData.Count); } listUpdateMoveType.AddRange(uptData); } // 修改批次状态 foreach (var item in listUpdateMoveType) { string uptMoveTypeSql = $"UPDATE TRC_ROLL_PRODCUT SET C_MOVE_TYPE='{moveType}' WHERE C_ID='{item.C_ID}'"; TransactionHelper.ExecuteSql(uptMoveTypeSql); } TransactionHelper.Commit(); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } }
/// <summary> /// 撤销外委组批 /// </summary> /// <param name="itemId"></param> /// <param name="num"></param> public void CancelZpInfo(string itemId, decimal num) { var zpInfo = GetModel(itemId); if (zpInfo == null) { throw new Exception("未找到组批数据,请重试"); } if (zpInfo.N_STATUS != 0) { throw new Exception("不能撤销,数据已经被操作"); } if (zpInfo.N_QUA_TOTAL < num) { throw new Exception($"退库数量不能大于{zpInfo.N_QUA_TOTAL}"); } TransactionHelper.BeginTransaction(); try { var lstItems = GetWWItemByZpId(zpInfo.C_ID); // 部分撤销 if (lstItems.Count < num) { throw new Exception($"数据错误,退库数量不能大于{zpInfo.N_QUA_TOTAL}"); } var delItems = lstItems.Take((int)num); if (zpInfo.N_QUA_TOTAL == num) { // 全部撤销,删除子表及主表记录 string delItemSql = $"DELETE TRC_ROLL_WW_MAIN_ITEM WHERE C_ROLL_WW_MAIN_ID='{zpInfo.C_ID}'"; TransactionHelper.ExecuteSql(delItemSql); string delSql = $"DELETE TRC_ROLL_WW_MAIN WHERE C_ID='{zpInfo.C_ID}'"; TransactionHelper.ExecuteSql(delSql); // 退库 } else { // 剩余的重量,用于更新 var wgt = lstItems.Skip((int)num).Sum(w => w.N_WGT); // 删除的ID var delIds = "('" + string.Join("','", delItems.Select(w => w.C_ID)) + "')"; var delSql = $"DELETE TRC_ROLL_WW_MAIN_ITEM WHERE C_ID IN{delIds}"; TransactionHelper.ExecuteSql(delSql); // 更新主表支数,重量 string updateSql = $"UPDATE TRC_ROLL_WW_MAIN " + $"SET N_QUA_TOTAL={lstItems.Count - num},N_WGT_TOTAL={wgt} WHERE C_ID='{zpInfo.C_ID}'"; TransactionHelper.ExecuteSql(updateSql); } // 退库 var updateIds = "('" + string.Join("','", delItems.Select(w => w.C_SLAB_MAIN_ID)) + "')"; string updateProductSql = $"UPDATE TRC_ROLL_PRODCUT SET C_MOVE_TYPE = 'QE' WHERE C_ID IN{updateIds}"; TransactionHelper.ExecuteSql(updateProductSql); } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } TransactionHelper.Commit(); }
/* * /// <summary> * /// 分页获取数据列表 * /// </summary> * public DataSet GetList(int PageSize,int PageIndex,string strWhere) * { * OracleParameter[] parameters = { * new OracleParameter(":tblName", OracleDbType.Varchar2, 255), * new OracleParameter(":fldName", OracleDbType.Varchar2, 255), * new OracleParameter(":PageSize", OracleDbType.Decimal), * new OracleParameter(":PageIndex", OracleDbType.Decimal), * new OracleParameter(":IsReCount", OracleDbType.Clob), * new OracleParameter(":OrderType", OracleDbType.Clob), * new OracleParameter(":strWhere", OracleDbType.Varchar2,1000), * }; * parameters[0].Value = "TRC_ROLL_WW_MAIN"; * parameters[1].Value = "C_ID"; * parameters[2].Value = PageSize; * parameters[3].Value = PageIndex; * parameters[4].Value = 0; * parameters[5].Value = 0; * parameters[6].Value = strWhere; * return DbHelperOra.RunProcedure("UP_GetRecordByPage",parameters,"ds"); * }*/ #endregion BasicMethod #region ExtensionMethod #endregion ExtensionMethod #region 自定义 /// <summary> /// 外委加工组批 /// </summary> /// <param name="zpInfo"></param> public void SetZpInfo( Mod_TMO_ORDER order, WWZPPlanItemInfo zpInfo, List <Mod_TRC_ROLL_PRODCUT> batchInfo, string userId) { UpdateBatchSameToNc( zpInfo.InventoryCode, order.C_STL_GRD, order.C_STD_CODE, order.C_SPEC, zpInfo.CBatchNo, zpInfo.MtrlCode, zpInfo.ZLDJ, zpInfo.BZYQ, batchInfo); TransactionHelper.BeginTransaction(); if (zpInfo.Num < batchInfo.Count) { // 如果组批支数等于库存支数,相当于耗用所有库存,则实际重量等于库存重量 new Dal_TMO_ORDER().UpdateInventory(batchInfo, zpInfo.ZpAmt, zpInfo.Num); } var zpAmt = batchInfo.Take(zpInfo.Num).Sum(w => w.N_WGT); // 生成批次号 var batchInfoItem = batchInfo.FirstOrDefault(); // 构造外委加工组批主表记录 var mainItem = new Mod_TRC_ROLL_WW_MAIN { C_ID = Guid.NewGuid().ToString("N"), C_ORD_ID = zpInfo.Id, N_WGT_TOTAL = zpAmt, N_STATUS = 0, C_EMP_ID = userId, C_GROUP = zpInfo.BZ, C_REMARK = zpInfo.Remark, C_SHIFT = zpInfo.BC, C_SPEC_SLAB = batchInfoItem.C_SPEC, C_CHECKSTATE_NAME = zpInfo.ZLDJ, C_STD_CODE = batchInfoItem.C_STD_CODE, C_STL_GRD_SLAB = batchInfoItem.C_STL_GRD, D_MOD_DT = DateTime.Now, N_QUA_TOTAL = zpInfo.Num, C_MAT_SLAB_CODE = order.C_MAT_CODE, C_MAT_SLAB_NAME = order.C_MAT_NAME, C_MAT_XC_CODE = batchInfoItem.C_MAT_CODE, C_MAT_XC_NAME = batchInfoItem.C_MAT_DESC, C_XC_BATCH_NO = batchInfoItem.C_BATCH_NO, C_XC_LINEWH_CODE = batchInfoItem.C_LINEWH_CODE,// zpInfo.InventoryCode, C_XC_BZYQ = batchInfoItem.C_BZYQ }; if (string.IsNullOrEmpty(zpInfo.BachNo) == false) { var a = ExistBatchNo(zpInfo.BachNo); // 验证批号 //string existsSql = $"SELECT COUNT(C_ID) FROM TRC_ROLL_WW_MAIN WHERE C_BATCH_NO='{zpInfo.BachNo}'"; //var count = int.Parse(TransactionHelper.Query(existsSql).Tables[0].Rows[0][0]?.ToString() ?? "0"); if (a)//count > 0) { TransactionHelper.RollBack(); throw new Exception("批次号重复,请重新输入"); } mainItem.C_BATCH_NO = zpInfo.BachNo; } else { mainItem.C_BATCH_NO = GetMAXWWBatchNo(); } bool success = this.Add(mainItem); if (success == false) { TransactionHelper.RollBack(); throw new Exception("组批失败"); } try { for (int i = 0; i < zpInfo.Num; i++) { // 更新线材库存状态 string updateSql = $"UPDATE TRC_ROLL_PRODCUT SET C_MOVE_TYPE = 'QS' WHERE C_ID='{batchInfo[i].C_ID}'"; TransactionHelper.ExecuteSql(updateSql); // 插入外委加工组批子表记录 string insertSql = $"insert into TRC_ROLL_WW_MAIN_ITEM(C_ID,C_ROLL_WW_MAIN_ID,C_SLAB_MAIN_ID,N_WGT) " + $"VALUES('{Guid.NewGuid().ToString("N")}','{mainItem.C_ID}','{batchInfo[i].C_ID}',{batchInfo[i].N_WGT})"; TransactionHelper.ExecuteSql(insertSql); } } catch (Exception ex) { TransactionHelper.RollBack(); throw ex; } TransactionHelper.Commit(); }
/// <summary> /// 发送发运单到中间表 /// </summary> /// <param name="fydid">要发送的发运单号</param> /// <returns>返回int类型 1转入成功-1发送失败</returns> public string ADDFYDToZJB(string fydid, DateTime dateTime) { try { TransactionHelper.BeginTransaction(); #region MyRegion string rjhsql = "SELECT C_PLAN_ID,C_ID,C_MAT_CODE,C_STD_CODE,C_SEND_STOCK_CODE,c_Judge_Lev_Zh,C_PACK,N_FYZS,N_FYWGT,N_MWGT,N_PWGT,N_JWGT,C_MZDATE, C_PZDATE,N_MZTIME,N_PZTIME FROM TMD_DISPATCHDETAILS WHERE C_DISPATCH_ID='" + fydid + "'"; DataTable plandt = TransactionHelper.Query(rjhsql).Tables[0]; if (plandt.Rows.Count < 0) { TransactionHelper.RollBack(); return("未查询到发运单子表数据!"); } foreach (DataRow planrow in plandt.Rows) { int plannum = Convert.ToInt32(planrow["N_FYZS"]);//发运数量 string mzstr = planrow["N_MWGT"].ToString(); string pzstr = planrow["N_PWGT"].ToString(); string jzstr = planrow["N_JWGT"].ToString(); #region 获取出库单 string no = DateTime.Now.Year.ToString() + (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 maxckd = GetCKDNO(no); //查询当天最大转库单 if (maxckd == "0") { no = no + "0001"; } else { no = (Convert.ToInt64(maxckd.Substring(2, maxckd.Length - 2)) + 1).ToString(); } no = "GP" + no; #endregion #region 获取钢坯实绩 DataTable dt1 = GetListByidstr(fydid, planrow["C_MAT_CODE"].ToString(), planrow["C_STD_CODE"].ToString(), planrow["C_SEND_STOCK_CODE"].ToString(), planrow["c_Judge_Lev_Zh"].ToString(), "1").Tables[0];//要传输的发运单数据 if (dt1.Rows.Count < 1) { TransactionHelper.RollBack(); return("根据发运单子表查询钢坯实绩错误!"); } int fpnum = 0; //string idstr = ""; foreach (DataRow xqitem in dt1.Rows) { fpnum += Convert.ToInt32(xqitem["N_NUM"]); ////if (plannum == fpnum) ////{ //// break; ////} //idstr += "'" + xqitem["C_ID"] + "',"; //fpnum++; } //idstr = idstr.Substring(0, idstr.Length - 1); //#region 变更钢坯实绩 //if (BJBynum(idstr) == 0) //{ // TransactionHelper.RollBack(); // return "根据发运单子表变更钢坯实绩错误!"; //} //#endregion //DataTable sjdt = GetListByidstr(idstr).Tables[0];//要传输的发运单数据 if (mzstr == "") { foreach (DataRow item1 in dt1.Rows) { int num = Convert.ToInt32(item1["N_NUM"]); #region 添加中间表 string sql = ""; sql += "insert into TMD_DISPATCH_SJZJB(C_DISPATCH_ID,N_NUM,N_STATUS,C_CKDH,C_SEND_STOCK,C_STOVE,C_BATCH_NO,C_PLAN_ID,C_STL_GRD,C_STD_CODE,C_SPEC,C_PK_NCID,C_ZLDJ,C_BZYQ,D_CKSJ,C_MAT_CODE,C_MAT_NAME,C_TICK_STR,N_WGT,N_JZ,N_MWGT,N_PWGT,C_MZDATE,C_PZDATE,N_MZTIME,N_PZTIME) values('" + fydid + "','" + num + "','6','" + no + "','" + item1["C_SLABWH_CODE"] + "','" + item1["C_STOVE"] + "','" + item1["C_BATCH_NO"] + "','" + planrow["C_PLAN_ID"].ToString() + "','" + item1["C_STL_GRD"] + "','" + item1["C_STD_CODE"] + "','" + item1["C_SPEC"] + "','" + planrow["C_ID"].ToString() + "','" + item1["C_JUDGE_LEV_ZH"].ToString() + "','',to_date('" + dateTime + "', 'yyyy-mm-dd hh24:mi:ss'),'" + item1["C_MAT_CODE"].ToString() + "','" + item1["C_MAT_NAME"].ToString() + "','','" + item1["N_WGT"].ToString() + "','','','','','','','')"; if (TransactionHelper.ExecuteSql(sql) == 0) { TransactionHelper.RollBack(); return("条件发运单中间表错误!"); } #endregion } } else { decimal smz = Convert.ToDecimal(planrow["N_MWGT"]); //总毛重 decimal spz = Convert.ToDecimal(planrow["N_PWGT"]); //总皮重 decimal sjz = Convert.ToDecimal(planrow["N_JWGT"]); //总净重 string C_MZDATE = planrow["C_MZDATE"].ToString(); //获取毛重日期 string C_PZDATE = planrow["C_PZDATE"].ToString(); //获取皮重日期 string N_MZTIME = planrow["N_MZTIME"].ToString(); //获取毛重时间 string N_PZTIME = planrow["N_PZTIME"].ToString(); //获取皮重时间 decimal mz = smz / fpnum; //获取毛重 decimal pz = spz / fpnum; //获取皮重 decimal jz = sjz / fpnum; //获取净重 decimal bjmz = 0; decimal bjpz = 0; decimal bjjz = 0; int bjnum = 0; foreach (DataRow item1 in dt1.Rows) { int num = Convert.ToInt32(item1["N_NUM"]); decimal sjmz = decimal.Round(mz * num, 2); decimal sjpz = decimal.Round(pz * num, 2); decimal sjjz = decimal.Round(jz * num, 2); bjnum++; bjmz += sjmz; bjpz += sjpz; bjjz += sjjz; if (bjnum == dt1.Rows.Count) { sjmz = smz - bjmz; sjpz = spz - bjpz; sjjz = sjz - bjjz; } #region 添加中间表 string sql = ""; sql += "insert into TMD_DISPATCH_SJZJB(C_DISPATCH_ID,N_NUM,N_STATUS,C_CKDH,C_SEND_STOCK,C_STOVE,C_BATCH_NO,C_PLAN_ID,C_STL_GRD,C_STD_CODE,C_SPEC,C_PK_NCID,C_ZLDJ,C_BZYQ,D_CKSJ,C_MAT_CODE,C_MAT_NAME,C_TICK_STR,N_WGT,N_JZ,N_MWGT,N_PWGT,C_MZDATE,C_PZDATE,N_MZTIME,N_PZTIME) values('" + fydid + "','" + num + "','6','" + no + "','" + item1["C_SLABWH_CODE"] + "','" + item1["C_STOVE"] + "','" + item1["C_BATCH_NO"] + "','" + planrow["C_PLAN_ID"].ToString() + "','" + item1["C_STL_GRD"] + "','" + item1["C_STD_CODE"] + "','" + item1["C_SPEC"] + "','" + planrow["C_ID"].ToString() + "','" + item1["C_JUDGE_LEV_ZH"].ToString() + "','',to_date('" + dateTime + "', 'yyyy-mm-dd hh24:mi:ss'),'" + item1["C_MAT_CODE"].ToString() + "','" + item1["C_MAT_NAME"].ToString() + "','','" + item1["N_WGT"].ToString() + "','" + sjjz + "','" + sjmz + "','" + sjpz + "','" + C_MZDATE + "','" + C_PZDATE + "','" + N_MZTIME + "','" + N_MZTIME + "')"; if (TransactionHelper.ExecuteSql(sql) == 0) { TransactionHelper.RollBack(); return("条件发运单中间表错误!"); } } #endregion } #endregion } #endregion TransactionHelper.Commit(); return("1"); } catch (Exception ex) { TransactionHelper.RollBack(); return(ex.ToString()); } }