private NcRoll46 Get46(Mod_TMO_ORDER order, Mod_TB_MATRL_MAIN ordMatrl, Mod_TRC_ROLL_WW_MAIN item, Mod_TB_STA tBSta, Mod_TS_USER user)
        {
            Mod_TQB_CHECKSTATE mod_TQB_CHECKSTATE = dal_TQB_CHECKSTATE.GetModelByName(item.C_CHECKSTATE_NAME, "1001");

            var lineWhItem = dalLineWh.GetModelByCode(item.C_LINEWH_CODE);
            var ncRoll46   = new NcRoll46
            {
                castunitid      = ordMatrl.C_FJLDW,                    //辅助计量单位ID
                ccheckstate_bid = mod_TQB_CHECKSTATE.C_ID,             //"1001NC100000000052Z3",//质量等级ID
                cinvbasid       = ordMatrl.C_PK_INVBASDOC,             //存货基本ID
                coperatorid     = user.C_ACCOUNT,                      //"17384",//item.C_PRODUCE_EMP_ID,//入库人
                cwarehouseid    = lineWhItem.C_ID,                     //仓库ID
                cworkcenterid   = tBSta.C_ERP_PK,
                dbizdate        = DateTime.Now,                        //入库日期
                ninassistnum    = (item.N_QUA_REMOVE ?? 0).ToString(), //入库件数
                ninnum          = (item.N_WGT_REMOVE ?? 0).ToString(), //入库数量
                pk_produce      = ordMatrl.C_PK_PRODUCE,               //物料PK
                taccounttime    = DateTime.Now,                        //入库签字时间
                vbatchcode      = item.C_BATCH_NO,
                vfree1          = order.C_FREE1,
                vfree2          = order.C_FREE2,
                vfree3          = order.C_PACK,
            };

            return(ncRoll46);
        }
        public RedirectToRouteResult SetFinish(Mod_TRC_ROLL_WW_MAIN model)
        {
            try
            {
                // 验证仓库
                var list   = bll_Product.GetWWCK();
                var ckItem = list.FirstOrDefault(x => x.C_LINEWH_CODE == model.C_LINEWH_CODE);
                if (ckItem == null)
                {
                    throw new Exception("入库仓库未输入或不存在,请确认数据正确后再完工");
                }

                model.C_LINEWH_NAME = ckItem.C_LINEWH_NAME;
                var user = System.Web.HttpContext.Current.Session["CurrentUser"] as CurrentUser;

                if (user == null)
                {
                    GoToLogin(true);
                    return(null);
                }

                bll.SetFinish(model, user?.Id);
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMsg = ex.Message;
            }

            return(RedirectToAction(nameof(Product), new
            {
                errorMsg = ViewBag.ErrorMsg,
                isloadCondition = true
            }));
        }
        private NcRollA2 GetA2(Mod_TMO_ORDER order, Mod_TB_MATRL_MAIN matrl, Mod_TRC_ROLL_WW_MAIN item, Mod_TB_STA tBSta, Mod_TS_USER user)
        {
            var ncRollA2 = new NcRollA2
            {
                bcid           = item.C_SHIFT,                          // 班次ID
                bzid           = item.C_GROUP,                          // 班组ID
                fjhsl          = (item.N_QUA_REMOVE ?? 0).ToString(),   // 辅计量数量
                fjlid          = matrl.C_FJLDW,                         // 辅计量ID
                freeitemvalue1 = order.C_FREE1,                         // 自由项1
                freeitemvalue2 = order.C_FREE2,                         //自由项2
                freeitemvalue3 = order.C_PACK,                          // 包装要求,
                freeitemvalue5 = item.C_ID,                             //PCI计划主键
                gzzxid         = tBSta.C_ERP_PK,                        //工作中心ID
                invcode        = matrl.C_ID,                            //物料编码
                jhjssj         = item.D_PRODUCE_DATE_E ?? DateTime.Now, // 计划完工时间
                jhkgrq         = item.D_PRODUCE_DATE_B ?? DateTime.Now, //计划开工日期
                jhkssj         = item.D_PRODUCE_DATE_B ?? DateTime.Now, //计划开始时间
                jhwgrq         = item.D_PRODUCE_DATE_E ?? DateTime.Now, //计划完工日期
                jhwgsl         = (item.N_WGT_TOTAL ?? 0).ToString(),    //计划完工数量
                jldwid         = matrl.C_PK_MEASDOC,                    //计量单位ID
                pch            = item.C_BATCH_NO,                       //批次号
                pk_produce     = matrl.C_PK_PRODUCE,                    //物料PK
                scbmid         = tBSta.C_SSBMID,                        //生产部门ID
                sjjssj         = item.D_PRODUCE_DATE_E ?? DateTime.Now, //实际结束时间
                sjkgrq         = item.D_PRODUCE_DATE_E ?? DateTime.Now, //完工单日期
                sjkssj         = item.D_PRODUCE_DATE_B ?? DateTime.Now, //实际开始日期
                sjwgrq         = item.D_PRODUCE_DATE_E ?? DateTime.Now, //实际完工日期
                sjwgsl         = (item.N_WGT_REMOVE ?? 0).ToString(),   //实际完工数量
                wlbmid         = matrl.C_PK_INVBASDOC,                  //存货档案主键
                zdrid          = user.C_ACCOUNT                         // "17384",//item.C_PRODUCE_EMP_ID,//操作人,用户编码工号
            };

            return(ncRollA2);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="order">合同信息</param>
        /// <param name="matrl">成品物料信息</param>
        /// <param name="item">组批信息</param>
        /// <param name="ssBmid">部门ID</param>
        /// <returns></returns>
        private NcRollA1 GetA1(Mod_TMO_ORDER order, Mod_TB_MATRL_MAIN matrl, Mod_TRC_ROLL_WW_MAIN item, Mod_TB_STA tBSta, Mod_TS_USER user)
        {
            var ncRollA1 = new NcRollA1
            {
                bmid       = tBSta.C_SSBMID,                      //部门ID
                jhrq       = item.D_MOD_DT,                       //计划日期
                jhxxsl     = (item.N_WGT_TOTAL ?? 0).ToString(),  //下限数量
                jhyid      = matrl.C_PLANEMP,                     // 计划员ID
                jldwid     = matrl.C_PK_MEASDOC,                  //计量单位
                memo       = item.C_REMARK,                       //备注
                pk_produce = matrl.C_PK_PRODUCE,                  //物料PK,
                scbmid     = tBSta.C_SSBMID,                      //生产部门ID
                shrid      = item.C_PRODUCE_EMP_ID,               //操作员
                shrq       = DateTime.Now,                        //审核日期
                slrq       = order.D_DT ?? DateTime.Now,          //需求日期
                wlbmid     = matrl.C_PK_INVBASDOC,                // 存货档案主键
                xdrq       = item.D_MOD_DT,                       //下单日期
                xqrq       = order.D_DELIVERY_DT ?? DateTime.Now, //交货日期
                xqsl       = (item.N_WGT_TOTAL ?? 0).ToString(),  //计划量
                zdrq       = DateTime.Now,                        //制单日期
                zyx1       = order.C_FREE1,                       //自由项1
                zyx2       = order.C_FREE2,                       //自由项2
                zyx3       = order.C_PACK,                        //包装要求
                zyx5       = item.C_ID,                           //PCI主键
            };

            return(ncRollA1);
        }
        private NcRollA4 GetA4(Mod_TMO_ORDER order, Mod_TB_MATRL_MAIN ordMatrl, Mod_TRC_ROLL_WW_MAIN item, Mod_TB_STA tBSta, Mod_TS_USER user)
        {
            var ncRollA4 = new NcRollA4
            {
                ccxh           = item.C_BATCH_NO,                       //批号
                fhgsl          = (item.N_QUA_REMOVE ?? 0).ToString(),   //完工数量
                freeitemvalue1 = order.C_FREE1,                         //自由项1
                freeitemvalue2 = order.C_FREE2,                         //自由项2
                freeitemvalue3 = order.C_PACK,                          //包装要求
                gzzxbmid       = tBSta.C_STA_ERPCODE,                   //工作中心代码
                gzzxid         = tBSta.C_ERP_PK,                        //工作中心ID
                hgsl           = (item.N_WGT_REMOVE ?? 0).ToString(),   //合格数量
                jldwid         = ordMatrl.C_PK_MEASDOC,                 //计量单位ID
                jsrq           = item.D_PRODUCE_DATE_E ?? DateTime.Now, //生产结束日期
                ksrq           = item.D_PRODUCE_DATE_B ?? DateTime.Now, //生产开始日期
                pch            = item.C_BATCH_NO,                       //批次号,
                pk_produce     = ordMatrl.C_PK_PRODUCE,                 //物料PK
                rq             = item.D_PRODUCE_DATE_E ?? DateTime.Now, //完工日期
                scbmid         = tBSta.C_SSBMID,                        //生产部门ID
                sffsgp         = "N",                                   //是否发生改判
                sflfcp         = "N",                                   //是否联产品
                sj             = DateTime.Now,                          //报告时间
                wlbmid         = ordMatrl.C_PK_INVBASDOC,               //物料编码ID
                zdrid          = user.C_ACCOUNT,                        //item.C_PRODUCE_EMP_ID,//操作人员
            };

            return(ncRollA4);
        }
        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;
            }
        }
        public bool SetCancel(Mod_TRC_ROLL_WW_MAIN model)
        {
            string sql = $"UPDATE TRC_ROLL_WW_MAIN SET N_WGT_REMOVE={model.N_WGT_REMOVE ?? 0}" +
                         $",N_QUA_REMOVE={model.N_QUA_REMOVE ?? 0}" +
                         $",N_STATUS={model.N_STATUS}" +
                         $" WHERE C_ID='{model.C_ID}'";

            return(DbHelperOra.ExecuteSql(sql) > 0);
        }
        /// <summary>
        /// 设置质量标准号
        /// </summary>
        /// <param name="model"></param>
        public void SetDesignNo(Mod_TRC_ROLL_WW_MAIN model)
        {
            string designNo = GetDesignNo(model.C_STD_CODE, model.C_STL_GRD_SLAB);
            string sql      = $"UPDATE trc_roll_prodcut SET " +
                              $"c_design_no='{designNo}'" +
                              $" WHERE c_batch_no='{model.C_BATCH_NO}'";

            DbHelperOra.ExecuteSql(sql);
        }
        public bool SetStatu(Mod_TRC_ROLL_WW_MAIN model)
        {
            string  cId    = model.C_ID;
            decimal status = model.N_STATUS;

            string sql = $"UPDATE TRC_ROLL_WW_MAIN SET " +
                         $"N_STATUS={status}" +
                         $" WHERE C_ID='{cId}'";

            return(DbHelperOra.ExecuteSql(sql) > 0);
        }
        public RedirectToRouteResult SetCancel(Mod_TRC_ROLL_WW_MAIN model)
        {
            try
            {
                bll.SetCancel(model);
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMsg = ex.Message;
            }

            return(RedirectToAction(nameof(Product), new
            {
                errorMsg = ViewBag.ErrorMsg,
                isloadCondition = true
            }));
        }
        /// <summary>
        /// 完工,入库
        /// </summary>
        /// <param name="item">委外计划</param>
        private void RuKu(Mod_TRC_ROLL_WW_MAIN item, Mod_TB_STA tBSta, Mod_TMO_ORDER contractInfo)
        {
            var xcItems = dalWWMain.GetItemList(item.C_ID);

            if (xcItems.Any() == false)
            {
                throw new Exception("未找到组批信息");
            }

            List <Mod_TRC_ROLL_PRODCUT> addItems = new List <Mod_TRC_ROLL_PRODCUT>();

            // 单支完工量
            var singleAmt = item.N_WGT_REMOVE / item.N_QUA_REMOVE;

            foreach (var xcItem in xcItems)
            {
                // 如果已经满足完工支数退出
                if (addItems.Count == item.N_QUA_REMOVE)
                {
                    continue;
                }
                xcItem.C_ID              = $"{item.C_BATCH_NO}{(addItems.Count + 1).ToString("0000")}";
                xcItem.C_BATCH_NO        = item.C_BATCH_NO;
                xcItem.N_WGT             = singleAmt ?? 0;
                xcItem.C_MOVE_TYPE       = "E";
                xcItem.C_SHIFT           = item.C_PRODUCE_SHIFT;
                xcItem.C_GROUP           = item.C_PRODUCE_GROUP;
                xcItem.C_STA_ID          = tBSta.C_ID;
                xcItem.C_IS_DEPOT        = "Y";
                xcItem.C_MAT_CODE        = contractInfo.C_MAT_CODE; //item.C_MAT_XC_CODE;
                xcItem.C_MAT_CODE_BEFORE = string.Empty;
                xcItem.C_MAT_DESC        = contractInfo.C_MAT_NAME; //item.C_MAT_XC_NAME;
                xcItem.C_CON_NO          = contractInfo.C_CON_NO;
                xcItem.C_ORDER_NO        = contractInfo.C_ORDER_NO;
                xcItem.C_LINEWH_CODE     = item.C_LINEWH_CODE;
                xcItem.C_LINEWH_LOC_CODE = string.Empty;
                xcItem.C_WWBATCH_NO      = item.C_XC_BATCH_NO;
                xcItem.C_JUDGE_LEV_ZH    = item.C_CHECKSTATE_NAME;
                xcItem.C_BZYQ            = contractInfo.C_PACK;
                xcItem.D_DP_DT           = DateTime.Now;
                bllProduct.Add(xcItem);

                addItems.Add(xcItem);
            }
        }
        /// <summary>
        /// 设置外委加工完工
        /// </summary>
        /// <param name="model">数据包含完工的ID,重量,支数</param>
        public void SetFinish(Mod_TRC_ROLL_WW_MAIN info, string userId)
        {
            var model = dalWWMain.GetModel(info.C_ID);

            if (model == null)
            {
                throw new Exception("数据不存在,可能该计划已撤销,请刷新页面重试");
            }

            if (model.N_QUA_TOTAL < info.N_QUA_REMOVE)
            {
                throw new Exception($"完工支数不能大于{model.N_QUA_TOTAL}");
            }

            //if (model.N_WGT_TOTAL < info.N_WGT_REMOVE)
            //{
            //    throw new Exception($"完工重量不能大于{model.N_WGT_TOTAL}");
            //}

            // 修改后默认可以多50%,目前先这样,后续可以使用字典表维护超出比例
            var percent = 1.5m;

            if ((model.N_WGT_TOTAL * percent) < info.N_WGT_REMOVE)
            {
                throw new Exception($"完工重量不能大于{model.N_WGT_TOTAL}的{(percent - 1) * 100}%");
            }

            if (model.N_STATUS != 0)
            {
                throw new Exception($"该计划已经被完工,请刷新页面重试");
            }

            model.N_WGT_REMOVE      = Math.Round(info.N_WGT_REMOVE ?? 0, 4);
            model.N_QUA_REMOVE      = info.N_QUA_REMOVE;
            model.N_STATUS          = 1;
            model.C_PRODUCE_GROUP   = info.C_PRODUCE_GROUP;
            model.C_PRODUCE_SHIFT   = info.C_PRODUCE_SHIFT;
            model.C_CHECKSTATE_NAME = info.C_CHECKSTATE_NAME;
            model.C_LINEWH_CODE     = info.C_LINEWH_CODE;
            model.C_LINEWH_NAME     = info.C_LINEWH_NAME;
            model.C_PRODUCE_EMP_ID  = userId;

            dalWWMain.SetFinish(model);
        }
        /// <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>
        /// 得到一个对象实体
        /// </summary>
        public Mod_TRC_ROLL_WW_MAIN GetModel(string C_ID)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("select C_ID,C_STA_ID,C_PLANT,C_ORD_ID,C_BATCH_NO,N_QUA_TOTAL,N_WGT_TOTAL,C_STL_GRD_SLAB,C_SPEC_SLAB,C_EMP_ID,C_SHIFT,C_GROUP,D_MOD_DT,N_QUA_REMOVE,N_WGT_REMOVE,C_MAT_SLAB_CODE,C_MAT_SLAB_NAME,C_REMARK,N_STATUS,C_STD_CODE,D_PRODUCE_DATE_B,C_PRODUCE_EMP_ID,C_PRODUCE_SHIFT,C_PRODUCE_GROUP,D_PRODUCE_DATE_E,C_MAT_XC_CODE,C_MAT_XC_NAME,C_XC_BATCH_NO,C_XC_LINEWH_CODE,C_CHECKSTATE_NAME,C_LINEWH_CODE,C_LINEWH_NAME,C_XC_BZYQ from TRC_ROLL_WW_MAIN ");
            strSql.Append(" where C_ID=:C_ID ");
            OracleParameter[] parameters =
            {
                new OracleParameter(":C_ID", OracleDbType.Varchar2, 100)
            };
            parameters[0].Value = C_ID;

            Mod_TRC_ROLL_WW_MAIN model = new Mod_TRC_ROLL_WW_MAIN();
            DataSet ds = DbHelperOra.Query(strSql.ToString(), parameters);

            if (ds.Tables[0].Rows.Count > 0)
            {
                return(DataRowToModel(ds.Tables[0].Rows[0]));
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        /// 撤销委外完工
        /// </summary>
        /// <param name="info"></param>
        public void SetCancel(Mod_TRC_ROLL_WW_MAIN info)
        {
            var model = dalWWMain.GetModel(info.C_ID);

            if (model == null)
            {
                throw new Exception("数据不存在,可能该计划已撤销,请刷新页面重试");
            }

            if (model.N_STATUS != 1)
            {
                throw new Exception($"未完工状态不能撤销");
            }

            model.N_STATUS     = 0;
            model.N_WGT_REMOVE = null;
            model.N_QUA_REMOVE = null;
            var a = dalWWMain.SetCancel(model);

            if (a == false)
            {
                throw new Exception("操作失败,请刷新页面重试,可能该计划已撤销");
            }
        }
        /*
         *      /// <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>
        public bool Update(Mod_TRC_ROLL_WW_MAIN model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("update TRC_ROLL_WW_MAIN set ");
            strSql.Append("C_STA_ID=:C_STA_ID,");
            strSql.Append("C_PLANT=:C_PLANT,");
            strSql.Append("C_ORD_ID=:C_ORD_ID,");
            strSql.Append("C_BATCH_NO=:C_BATCH_NO,");
            strSql.Append("N_QUA_TOTAL=:N_QUA_TOTAL,");
            strSql.Append("N_WGT_TOTAL=:N_WGT_TOTAL,");
            strSql.Append("C_STL_GRD_SLAB=:C_STL_GRD_SLAB,");
            strSql.Append("C_SPEC_SLAB=:C_SPEC_SLAB,");
            strSql.Append("C_EMP_ID=:C_EMP_ID,");
            strSql.Append("C_SHIFT=:C_SHIFT,");
            strSql.Append("C_GROUP=:C_GROUP,");
            strSql.Append("D_MOD_DT=:D_MOD_DT,");
            strSql.Append("N_QUA_REMOVE=:N_QUA_REMOVE,");
            strSql.Append("N_WGT_REMOVE=:N_WGT_REMOVE,");
            strSql.Append("C_MAT_SLAB_CODE=:C_MAT_SLAB_CODE,");
            strSql.Append("C_MAT_SLAB_NAME=:C_MAT_SLAB_NAME,");
            strSql.Append("C_REMARK=:C_REMARK,");
            strSql.Append("N_STATUS=:N_STATUS,");
            strSql.Append("C_STD_CODE=:C_STD_CODE,");
            strSql.Append("D_PRODUCE_DATE_B=:D_PRODUCE_DATE_B,");
            strSql.Append("C_PRODUCE_EMP_ID=:C_PRODUCE_EMP_ID,");
            strSql.Append("C_PRODUCE_SHIFT=:C_PRODUCE_SHIFT,");
            strSql.Append("C_PRODUCE_GROUP=:C_PRODUCE_GROUP,");
            strSql.Append("D_PRODUCE_DATE_E=:D_PRODUCE_DATE_E,");
            strSql.Append("C_MAT_XC_CODE=:C_MAT_XC_CODE,");
            strSql.Append("C_MAT_XC_NAME=:C_MAT_XC_NAME,");
            strSql.Append("C_XC_BATCH_NO=:C_XC_BATCH_NO,");
            strSql.Append("C_XC_LINEWH_CODE=:C_XC_LINEWH_CODE,");
            strSql.Append("C_CHECKSTATE_NAME=:C_CHECKSTATE_NAME,");
            strSql.Append("C_LINEWH_CODE=:C_LINEWH_CODE,");
            strSql.Append("C_LINEWH_NAME=:C_LINEWH_NAME,");
            strSql.Append("C_XC_BZYQ=:C_XC_BZYQ,");
            strSql.Append(" where C_ID=:C_ID ");
            OracleParameter[] parameters =
            {
                new OracleParameter(":C_STA_ID",          OracleDbType.Varchar2, 100),
                new OracleParameter(":C_PLANT",           OracleDbType.Varchar2, 100),
                new OracleParameter(":C_ORD_ID",          OracleDbType.Varchar2, 100),
                new OracleParameter(":C_BATCH_NO",        OracleDbType.Varchar2, 100),
                new OracleParameter(":N_QUA_TOTAL",       OracleDbType.Decimal,   15),
                new OracleParameter(":N_WGT_TOTAL",       OracleDbType.Decimal,   15),
                new OracleParameter(":C_STL_GRD_SLAB",    OracleDbType.Varchar2, 100),
                new OracleParameter(":C_SPEC_SLAB",       OracleDbType.Varchar2, 100),
                new OracleParameter(":C_EMP_ID",          OracleDbType.Varchar2, 100),
                new OracleParameter(":C_SHIFT",           OracleDbType.Varchar2, 100),
                new OracleParameter(":C_GROUP",           OracleDbType.Varchar2, 100),
                new OracleParameter(":D_MOD_DT",          OracleDbType.Date),
                new OracleParameter(":N_QUA_REMOVE",      OracleDbType.Decimal,   15),
                new OracleParameter(":N_WGT_REMOVE",      OracleDbType.Decimal,   15),
                new OracleParameter(":C_MAT_SLAB_CODE",   OracleDbType.Varchar2, 100),
                new OracleParameter(":C_MAT_SLAB_NAME",   OracleDbType.Varchar2, 100),
                new OracleParameter(":C_REMARK",          OracleDbType.Varchar2, 500),
                new OracleParameter(":N_STATUS",          OracleDbType.Decimal,   15),
                new OracleParameter(":C_STD_CODE",        OracleDbType.Varchar2, 100),
                new OracleParameter(":D_PRODUCE_DATE_B",  OracleDbType.Date),
                new OracleParameter(":C_PRODUCE_EMP_ID",  OracleDbType.Varchar2, 100),
                new OracleParameter(":C_PRODUCE_SHIFT",   OracleDbType.Varchar2, 100),
                new OracleParameter(":C_PRODUCE_GROUP",   OracleDbType.Varchar2, 100),
                new OracleParameter(":D_PRODUCE_DATE_E",  OracleDbType.Date),
                new OracleParameter(":C_ID",              OracleDbType.Varchar2, 100),
                new OracleParameter(":C_MAT_XC_CODE",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_MAT_XC_NAME",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_XC_BATCH_NO",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_XC_LINEWH_CODE",  OracleDbType.Varchar2, 100),
                new OracleParameter(":C_CHECKSTATE_NAME", OracleDbType.Varchar2, 100),
                new OracleParameter(":C_LINEWH_CODE",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_LINEWH_NAME",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_XC_BZYQ",         OracleDbType.Varchar2, 100),
            };

            parameters[0].Value  = model.C_STA_ID;
            parameters[1].Value  = model.C_PLANT;
            parameters[2].Value  = model.C_ORD_ID;
            parameters[3].Value  = model.C_BATCH_NO;
            parameters[4].Value  = model.N_QUA_TOTAL;
            parameters[5].Value  = model.N_WGT_TOTAL;
            parameters[6].Value  = model.C_STL_GRD_SLAB;
            parameters[7].Value  = model.C_SPEC_SLAB;
            parameters[8].Value  = model.C_EMP_ID;
            parameters[9].Value  = model.C_SHIFT;
            parameters[10].Value = model.C_GROUP;
            parameters[11].Value = model.D_MOD_DT;
            parameters[12].Value = model.N_QUA_REMOVE;
            parameters[13].Value = model.N_WGT_REMOVE;
            parameters[14].Value = model.C_MAT_SLAB_CODE;
            parameters[15].Value = model.C_MAT_SLAB_NAME;
            parameters[16].Value = model.C_REMARK;
            parameters[17].Value = model.N_STATUS;
            parameters[18].Value = model.C_STD_CODE;
            parameters[19].Value = model.D_PRODUCE_DATE_B;
            parameters[20].Value = model.C_PRODUCE_EMP_ID;
            parameters[21].Value = model.C_PRODUCE_SHIFT;
            parameters[22].Value = model.C_PRODUCE_GROUP;
            parameters[23].Value = model.D_PRODUCE_DATE_E;
            parameters[24].Value = model.C_ID;
            parameters[25].Value = model.C_MAT_XC_CODE;
            parameters[26].Value = model.C_MAT_XC_NAME;
            parameters[27].Value = model.C_XC_BATCH_NO;
            parameters[28].Value = model.C_XC_LINEWH_CODE;
            parameters[29].Value = model.C_CHECKSTATE_NAME;
            parameters[30].Value = model.C_LINEWH_CODE;
            parameters[31].Value = model.C_LINEWH_NAME;
            parameters[32].Value = model.C_XC_BZYQ;

            int rows = DbHelperOra.ExecuteSql(strSql.ToString(), parameters);

            if (rows > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private NcRollA3 GetA3(Mod_TMO_ORDER order, Mod_TB_MATRL_MAIN ordMatrl, Mod_TB_MATRL_MAIN matrl, Mod_TRC_ROLL_WW_MAIN item, Mod_TB_STA tBSta, Mod_TRC_ROLL_PRODCUT xcItem)
        {
            var lineWhItem = dalLineWh.GetModelByCode(item.C_XC_LINEWH_CODE);
            var ncRollA3   = new NcRollA3
            {
                ckckid          = lineWhItem.C_ID,                       //出库仓库ID(TPB_LINEWH线材库ID)
                fjldwid         = matrl.C_FJLDW,                         //辅助计量单位ID,
                fljcksl         = (item.N_QUA_TOTAL ?? 0).ToString(),    // 出库数量
                flrq            = DateTime.Now.ToString("yyyy-MM-dd"),
                freeitemvalue1  = xcItem.C_ZYX1,                         //order.C_FREE1,// 线材自由项1(暂认为委外与线材自由项一致)
                freeitemvalue2  = xcItem.C_ZYX2,                         //order.C_FREE2,//线材自由项2(暂认为委外与线材自由项一致)
                freeitemvalue3  = item.C_XC_BZYQ,                        // 线材包装要求
                gzzxid          = tBSta.C_ERP_PK,                        //工作中心ID
                hfreeitemvalue1 = order.C_FREE1,                         // 成品自由项1
                hfreeitemvalue2 = order.C_FREE2,                         //成品自由项2
                hfreeitemvalue3 = order.C_PACK,                          // 成品包装要求,
                hjldwid         = ordMatrl.C_PK_MEASDOC,                 //主计量单位ID
                hpch            = item.C_BATCH_NO,                       //批号
                hwlbmid         = ordMatrl.C_PK_INVBASDOC,               //存货档案主键
                hzdrid          = item.C_PRODUCE_EMP_ID,                 //操作人
                hzdrq           = item.D_PRODUCE_DATE_B ?? DateTime.Now, //制单日期
                jldwid          = matrl.C_PK_MEASDOC,                    //计量单位
                kgyid           = item.C_PRODUCE_EMP_ID,                 //库管员
                ljcksl          = (item.N_WGT_TOTAL ?? 0).ToString(),    //累计出库数量
                pch             = item.C_XC_BATCH_NO,                    //线材批号
                wlbmid          = matrl.C_PK_INVBASDOC,                  //存货档案主键
                zdrq            = DateTime.Now,
            };

            return(ncRollA3);
        }
        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public Mod_TRC_ROLL_WW_MAIN DataRowToModel(DataRow row)
        {
            Mod_TRC_ROLL_WW_MAIN model = new Mod_TRC_ROLL_WW_MAIN();

            if (row != null)
            {
                if (row["C_ID"] != null)
                {
                    model.C_ID = row["C_ID"].ToString();
                }
                if (row["C_STA_ID"] != null)
                {
                    model.C_STA_ID = row["C_STA_ID"].ToString();
                }
                if (row["C_PLANT"] != null)
                {
                    model.C_PLANT = row["C_PLANT"].ToString();
                }
                if (row["C_ORD_ID"] != null)
                {
                    model.C_ORD_ID = row["C_ORD_ID"].ToString();
                }
                if (row["C_BATCH_NO"] != null)
                {
                    model.C_BATCH_NO = row["C_BATCH_NO"].ToString();
                }
                if (row["N_QUA_TOTAL"] != null && row["N_QUA_TOTAL"].ToString() != "")
                {
                    model.N_QUA_TOTAL = decimal.Parse(row["N_QUA_TOTAL"].ToString());
                }
                if (row["N_WGT_TOTAL"] != null && row["N_WGT_TOTAL"].ToString() != "")
                {
                    model.N_WGT_TOTAL = decimal.Parse(row["N_WGT_TOTAL"].ToString());
                }
                if (row["C_STL_GRD_SLAB"] != null)
                {
                    model.C_STL_GRD_SLAB = row["C_STL_GRD_SLAB"].ToString();
                }
                if (row["C_SPEC_SLAB"] != null)
                {
                    model.C_SPEC_SLAB = row["C_SPEC_SLAB"].ToString();
                }
                if (row["C_EMP_ID"] != null)
                {
                    model.C_EMP_ID = row["C_EMP_ID"].ToString();
                }
                if (row["C_SHIFT"] != null)
                {
                    model.C_SHIFT = row["C_SHIFT"].ToString();
                }
                if (row["C_GROUP"] != null)
                {
                    model.C_GROUP = row["C_GROUP"].ToString();
                }
                if (row["D_MOD_DT"] != null && row["D_MOD_DT"].ToString() != "")
                {
                    model.D_MOD_DT = DateTime.Parse(row["D_MOD_DT"].ToString());
                }
                if (row["N_QUA_REMOVE"] != null && row["N_QUA_REMOVE"].ToString() != "")
                {
                    model.N_QUA_REMOVE = decimal.Parse(row["N_QUA_REMOVE"].ToString());
                }
                if (row["N_WGT_REMOVE"] != null && row["N_WGT_REMOVE"].ToString() != "")
                {
                    model.N_WGT_REMOVE = decimal.Parse(row["N_WGT_REMOVE"].ToString());
                }
                if (row["C_MAT_SLAB_CODE"] != null)
                {
                    model.C_MAT_SLAB_CODE = row["C_MAT_SLAB_CODE"].ToString();
                }
                if (row["C_MAT_SLAB_NAME"] != null)
                {
                    model.C_MAT_SLAB_NAME = row["C_MAT_SLAB_NAME"].ToString();
                }
                if (row["C_MAT_XC_CODE"] != null)
                {
                    model.C_MAT_XC_CODE = row["C_MAT_XC_CODE"].ToString();
                }
                if (row["C_MAT_XC_NAME"] != null)
                {
                    model.C_MAT_XC_NAME = row["C_MAT_XC_NAME"].ToString();
                }
                if (row["C_REMARK"] != null)
                {
                    model.C_REMARK = row["C_REMARK"].ToString();
                }
                if (row["N_STATUS"] != null && row["N_STATUS"].ToString() != "")
                {
                    model.N_STATUS = decimal.Parse(row["N_STATUS"].ToString());
                }
                if (row["C_STD_CODE"] != null)
                {
                    model.C_STD_CODE = row["C_STD_CODE"].ToString();
                }
                if (row["D_PRODUCE_DATE_B"] != null && row["D_PRODUCE_DATE_B"].ToString() != "")
                {
                    model.D_PRODUCE_DATE_B = DateTime.Parse(row["D_PRODUCE_DATE_B"].ToString());
                }
                if (row["C_PRODUCE_EMP_ID"] != null)
                {
                    model.C_PRODUCE_EMP_ID = row["C_PRODUCE_EMP_ID"].ToString();
                }
                if (row["C_PRODUCE_SHIFT"] != null)
                {
                    model.C_PRODUCE_SHIFT = row["C_PRODUCE_SHIFT"].ToString();
                }
                if (row["C_PRODUCE_GROUP"] != null)
                {
                    model.C_PRODUCE_GROUP = row["C_PRODUCE_GROUP"].ToString();
                }
                if (row["D_PRODUCE_DATE_E"] != null && row["D_PRODUCE_DATE_E"].ToString() != "")
                {
                    model.D_PRODUCE_DATE_E = DateTime.Parse(row["D_PRODUCE_DATE_E"].ToString());
                }
                if (row["C_XC_BATCH_NO"] != null)
                {
                    model.C_XC_BATCH_NO = row["C_XC_BATCH_NO"].ToString();
                }
                if (row["C_XC_LINEWH_CODE"] != null)
                {
                    model.C_XC_LINEWH_CODE = row["C_XC_LINEWH_CODE"].ToString();
                }
                if (row["C_CHECKSTATE_NAME"] != null)
                {
                    model.C_XC_LINEWH_CODE = row["C_CHECKSTATE_NAME"].ToString();
                }
                if (row["C_LINEWH_CODE"] != null)
                {
                    model.C_LINEWH_CODE = row["C_LINEWH_CODE"].ToString();
                }
                if (row["C_LINEWH_NAME"] != null)
                {
                    model.C_LINEWH_NAME = row["C_LINEWH_NAME"].ToString();
                }
                if (row["C_XC_BZYQ"] != null)
                {
                    model.C_XC_BZYQ = row["C_XC_BZYQ"].ToString();
                }
            }
            return(model);
        }
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public bool Add(Mod_TRC_ROLL_WW_MAIN model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("insert into TRC_ROLL_WW_MAIN(");
            strSql.Append("C_ID,C_STA_ID,C_PLANT,C_ORD_ID,C_BATCH_NO,N_QUA_TOTAL,N_WGT_TOTAL,C_STL_GRD_SLAB,C_SPEC_SLAB,C_EMP_ID,C_SHIFT,C_GROUP,D_MOD_DT,N_QUA_REMOVE,N_WGT_REMOVE,C_MAT_SLAB_CODE,C_MAT_SLAB_NAME,C_REMARK,N_STATUS,C_STD_CODE,D_PRODUCE_DATE_B,C_PRODUCE_EMP_ID,C_PRODUCE_SHIFT,C_PRODUCE_GROUP,D_PRODUCE_DATE_E,C_MAT_XC_CODE,C_MAT_XC_NAME,C_XC_BATCH_NO,C_XC_LINEWH_CODE,C_CHECKSTATE_NAME,C_LINEWH_CODE,C_LINEWH_NAME,C_XC_BZYQ)");
            strSql.Append(" values (");
            strSql.Append(":C_ID,:C_STA_ID,:C_PLANT,:C_ORD_ID,:C_BATCH_NO,:N_QUA_TOTAL,:N_WGT_TOTAL,:C_STL_GRD_SLAB,:C_SPEC_SLAB,:C_EMP_ID,:C_SHIFT,:C_GROUP,:D_MOD_DT,:N_QUA_REMOVE,:N_WGT_REMOVE,:C_MAT_SLAB_CODE,:C_MAT_SLAB_NAME,:C_REMARK,:N_STATUS,:C_STD_CODE,:D_PRODUCE_DATE_B,:C_PRODUCE_EMP_ID,:C_PRODUCE_SHIFT,:C_PRODUCE_GROUP,:D_PRODUCE_DATE_E,:C_MAT_XC_CODE,:C_MAT_XC_NAME,:C_XC_BATCH_NO,:C_XC_LINEWH_CODE,:C_CHECKSTATE_NAME,:C_LINEWH_CODE,:C_LINEWH_NAME,:C_XC_BZYQ)");
            OracleParameter[] parameters =
            {
                new OracleParameter(":C_ID",              OracleDbType.Varchar2, 100),
                new OracleParameter(":C_STA_ID",          OracleDbType.Varchar2, 100),
                new OracleParameter(":C_PLANT",           OracleDbType.Varchar2, 100),
                new OracleParameter(":C_ORD_ID",          OracleDbType.Varchar2, 100),
                new OracleParameter(":C_BATCH_NO",        OracleDbType.Varchar2, 100),
                new OracleParameter(":N_QUA_TOTAL",       OracleDbType.Decimal,   15),
                new OracleParameter(":N_WGT_TOTAL",       OracleDbType.Decimal,   15),
                new OracleParameter(":C_STL_GRD_SLAB",    OracleDbType.Varchar2, 100),
                new OracleParameter(":C_SPEC_SLAB",       OracleDbType.Varchar2, 100),
                new OracleParameter(":C_EMP_ID",          OracleDbType.Varchar2, 100),
                new OracleParameter(":C_SHIFT",           OracleDbType.Varchar2, 100),
                new OracleParameter(":C_GROUP",           OracleDbType.Varchar2, 100),
                new OracleParameter(":D_MOD_DT",          OracleDbType.Date),
                new OracleParameter(":N_QUA_REMOVE",      OracleDbType.Decimal,   15),
                new OracleParameter(":N_WGT_REMOVE",      OracleDbType.Decimal,   15),
                new OracleParameter(":C_MAT_SLAB_CODE",   OracleDbType.Varchar2, 100),
                new OracleParameter(":C_MAT_SLAB_NAME",   OracleDbType.Varchar2, 100),
                new OracleParameter(":C_REMARK",          OracleDbType.Varchar2, 500),
                new OracleParameter(":N_STATUS",          OracleDbType.Decimal,   15),
                new OracleParameter(":C_STD_CODE",        OracleDbType.Varchar2, 100),
                new OracleParameter(":D_PRODUCE_DATE_B",  OracleDbType.Date),
                new OracleParameter(":C_PRODUCE_EMP_ID",  OracleDbType.Varchar2, 100),
                new OracleParameter(":C_PRODUCE_SHIFT",   OracleDbType.Varchar2, 100),
                new OracleParameter(":C_PRODUCE_GROUP",   OracleDbType.Varchar2, 100),
                new OracleParameter(":D_PRODUCE_DATE_E",  OracleDbType.Date),
                new OracleParameter(":C_MAT_XC_CODE",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_MAT_XC_NAME",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_XC_BATCH_NO",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_XC_LINEWH_CODE",  OracleDbType.Varchar2, 100),
                new OracleParameter(":C_CHECKSTATE_NAME", OracleDbType.Varchar2, 100),
                new OracleParameter(":C_LINEWH_CODE",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_LINEWH_NAME",     OracleDbType.Varchar2, 100),
                new OracleParameter(":C_XC_BZYQ",         OracleDbType.Varchar2, 100),
            };
            parameters[0].Value  = model.C_ID;
            parameters[1].Value  = model.C_STA_ID;
            parameters[2].Value  = model.C_PLANT;
            parameters[3].Value  = model.C_ORD_ID;
            parameters[4].Value  = model.C_BATCH_NO;
            parameters[5].Value  = model.N_QUA_TOTAL;
            parameters[6].Value  = model.N_WGT_TOTAL;
            parameters[7].Value  = model.C_STL_GRD_SLAB;
            parameters[8].Value  = model.C_SPEC_SLAB;
            parameters[9].Value  = model.C_EMP_ID;
            parameters[10].Value = model.C_SHIFT;
            parameters[11].Value = model.C_GROUP;
            parameters[12].Value = model.D_MOD_DT;
            parameters[13].Value = model.N_QUA_REMOVE;
            parameters[14].Value = model.N_WGT_REMOVE;
            parameters[15].Value = model.C_MAT_SLAB_CODE;
            parameters[16].Value = model.C_MAT_SLAB_NAME;
            parameters[17].Value = model.C_REMARK;
            parameters[18].Value = model.N_STATUS;
            parameters[19].Value = model.C_STD_CODE;
            parameters[20].Value = model.D_PRODUCE_DATE_B;
            parameters[21].Value = model.C_PRODUCE_EMP_ID;
            parameters[22].Value = model.C_PRODUCE_SHIFT;
            parameters[23].Value = model.C_PRODUCE_GROUP;
            parameters[24].Value = model.D_PRODUCE_DATE_E;
            parameters[25].Value = model.C_MAT_XC_CODE;
            parameters[26].Value = model.C_MAT_XC_NAME;
            parameters[27].Value = model.C_XC_BATCH_NO;
            parameters[28].Value = model.C_XC_LINEWH_CODE;
            parameters[29].Value = model.C_CHECKSTATE_NAME;
            parameters[30].Value = model.C_LINEWH_CODE;
            parameters[31].Value = model.C_LINEWH_NAME;
            parameters[32].Value = model.C_XC_BZYQ;


            int rows = TransactionHelper.ExecuteSql(strSql.ToString(), parameters);

            if (rows > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }