Пример #1
0
        /// <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());
            }
        }
Пример #2
0
        /// <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}'");
                }
            }
        }
Пример #3
0
        //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));
                }
            }
        }