姜永辉 hace 9 meses
padre
commit
22a8d9cc7b

+ 2 - 2
DK.Client/PCModule/F_PC_0203.cs

@@ -1783,10 +1783,10 @@ namespace Dongke.IBOSS.PRD.Client.PCModule
                     {
                         //if (procedureEntity.ModelType!= 0)
                         //{
-                        MessageBox.Show("开始节点【" + node.Name + "】不能是成品检验或者入窑前检验工序!", "Error");
+                        //MessageBox.Show("开始节点【" + node.Name + "】不能是成品检验或者入窑前检验工序!", "Error");
                         // 选中该节点
                         // SetSelectNode(node);
-                        return false;
+                       // return false;
                         // }
 
                     }

+ 846 - 36
DK.Service/PMModuleLogic/PMModuleLogicDAL.cs

@@ -10096,54 +10096,63 @@ namespace Dongke.IBOSS.PRD.Service.PMModuleLogic
                 #region 查询工序信息
                 ProcedureEntity procedure = GetProcedurByID(oracleTrConn, procedureID);
                 #endregion
-                #region 标准检验(半成品)
-                if (procedure.ModelType == (int)Constant.ProcedureModelType.Normal)
-                {
-                    errMsg = AddNormalCheck(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
-                }
-                #endregion
-                #region 成品检验
-                else if (procedure.ModelType == (int)Constant.ProcedureModelType.QualityStatistics)
+                if (procedureID == 55)
                 {
-                    errMsg = AddFinishCheckPDA(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
-                }
-                #endregion
-                #region 半检 xuwei add 2019-12-13
-                else if (procedure.ModelType == (int)Constant.ProcedureModelType.SemiQualityStatistics)
-                {
-                    errMsg = AddFinishCheckPDA(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
+                    #region 二检250603
+                    errMsg = CancelFinishedproductAddFinishCheck(oracleTrConn, procedure, productionDataEntitys, sUserInfo, procedureID);
+                    #endregion
                 }
-                #endregion
-                #region 入窑前检验
-                else if (procedure.ModelType == (int)Constant.ProcedureModelType.IntoKilnCheck)
+                else
                 {
-                    errMsg = AddIntoKilnCheck(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
-                }
-                #endregion
+                    #region 标准检验(半成品)
+                    if (procedure.ModelType == (int)Constant.ProcedureModelType.Normal)
+                    {
+                        errMsg = AddNormalCheck(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
+                    }
+                    #endregion
+                    #region 成品检验
+                    else if (procedure.ModelType == (int)Constant.ProcedureModelType.QualityStatistics)
+                    {
+                        errMsg = AddFinishCheckPDA(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
+                    }
+                    #endregion
+                    #region 半检 xuwei add 2019-12-13
+                    else if (procedure.ModelType == (int)Constant.ProcedureModelType.SemiQualityStatistics)
+                    {
+                        errMsg = AddFinishCheckPDA(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
+                    }
+                    #endregion
+                    #region 入窑前检验
+                    else if (procedure.ModelType == (int)Constant.ProcedureModelType.IntoKilnCheck)
+                    {
+                        errMsg = AddIntoKilnCheck(oracleTrConn, procedure, productionDataEntitys, sUserInfo);
+                    }
+                    #endregion
+                } 
 
                 // 没有错误 提交事务
                 if (string.IsNullOrEmpty(errMsg))
                 {
                     oracleTrConn.Commit();
-                }
-                if (procedure.ModelType == (int)Constant.ProcedureModelType.QualityStatistics)
-                {
-                    #region 2023/02/20 质量登记产品分级为正品或者副品时 直接走完结束工序
-                    DataTable dtProductionData = DataConvert.ObjectConvertToTable<ProductionDataEntity>(productionDataEntitys);
-                    if (!dtProductionData.Columns.Contains("IsPDA"))
+                    if (procedureID == -99 || procedure.ModelType == (int)Constant.ProcedureModelType.QualityStatistics)
                     {
-                        dtProductionData.Columns.Add("IsPDA");
-                    }
-                    foreach (ProductionDataEntity productionData in productionDataEntitys)
-                    {
-                        if (productionData.GoodsLevelTypeID == 4 || productionData.GoodsLevelTypeID == 5)
+                        #region 2023/02/20 质量登记产品分级为正品或者副品时 直接走完结束工序
+                        DataTable dtProductionData = DataConvert.ObjectConvertToTable<ProductionDataEntity>(productionDataEntitys);
+                        if (!dtProductionData.Columns.Contains("IsPDA"))
                         {
-                            ProcedureEntity procedureInfo = null;
-                            DataTable dt = AddWorkPiece(15, dtProductionData, sUserInfo, out procedureInfo);
+                            dtProductionData.Columns.Add("IsPDA");
+                        }
+                        foreach (ProductionDataEntity productionData in productionDataEntitys)
+                        {
+                            if (productionData.GoodsLevelTypeID == 4 || productionData.GoodsLevelTypeID == 5)
+                            {
+                                ProcedureEntity procedureInfo = null;
+                                DataTable dt = AddWorkPiece(15, dtProductionData, sUserInfo, out procedureInfo);
+                            }
                         }
+                        #endregion
                     }
-                    #endregion
-                }
+                }                
             }
             catch (Exception ex)
             {
@@ -21987,5 +21996,806 @@ updateuserid=:updateuserid where barcode=:barcode";
             }
             return result;
         }
+
+
+        /// <summary>
+        ///  撤销包装在重新质量登记 -- 二检的功能250519
+        /// </summary>
+        /// <param name="oracleTrConn">数据连接</param>
+        /// <param name="procedure">工序对象</param>
+        /// <param name="productionDataEntitys">生产数据集</param>
+        /// <param name="sUserInfo">用户基本信息</param>
+        /// <returns>string</returns>
+        private static string CancelFinishedproductAddFinishCheck(IDBTransaction oracleTrConn, ProcedureEntity procedure,  
+                                            ProductionDataEntity[] productionDataEntitys, SUserInfo sUserInfo, int procedureID)
+        {
+            string errMsg = "";             
+            // 获得账务日期
+            DateTime accountDate = CommonModuleLogic.CommonModuleLogic.GetAccountDate(oracleTrConn, sUserInfo);
+            // 本批采集的批次号
+            string centralizedBatchNo = System.Guid.NewGuid().ToString();
+            string finishedloadbatchno = DateTime.Now.ToString("yyMMddHHmmss-") + centralizedBatchNo; 
+            foreach (ProductionDataEntity productionData in productionDataEntitys)
+            {
+                bool RejectToReject = false;
+
+                if (string.IsNullOrEmpty(productionData.Barcode))
+                {
+                    throw new Exception("传入的条码号为空");
+                }
+                int goodsID = Constant.INT_IS_ZERO;
+                string goodsCode = string.Empty;
+                string goodsName = string.Empty;
+                // 注浆者工号
+                string groutingUserCode = string.Empty;
+                // 次品标识
+                bool substandardFlag = false;
+                string test = productionData.MouldCode;
+
+                int goodsLevelID;
+                int goodsLevelTypeID;
+
+                int returnRows = 0;
+
+                // 转换注浆条码
+                productionData.Barcode = CommonModuleLogic.CommonModuleLogic.GetBarcode(oracleTrConn, productionData.Barcode, sUserInfo);
+
+                DateTime? createTime = null;
+                // 1 条码是否在产成品表中
+                string sql = "select createTime,FHUserCode,GoodsCode,GoodsLevelID,GoodsLevelTypeID from " +
+                                            "tp_pm_finishedproduct where barcode=:barcode and valueflag=1";
+                OracleParameter[] Paras = new OracleParameter[] {
+                new OracleParameter(":barcode",OracleDbType.Varchar2,
+                    productionData.Barcode,ParameterDirection.Input)
+                 };
+                DataSet ds = oracleTrConn.GetSqlResultToDs(sql, Paras);
+                if (ds.Tables[0].Rows.Count == 0)
+                {
+                    //不存在产成品  
+                    errMsg = "此产品【" + productionData.Barcode + "】不存在产成品,不能进行该操作";
+                    return errMsg;
+                }
+                else
+                {
+                    // 已经交接不允许撤销
+                    if (!string.IsNullOrEmpty(ds.Tables[0].Rows[0]["FHUserCode"].ToString()))
+                    {
+                        //已交接,不能再次进行交接				
+                        errMsg = "此产品【" + ds.Tables[0].Rows[0]["GoodsCode"].ToString() + "】已交接,不能进行该操作";
+                        return errMsg;
+                    }
+                    createTime = Convert.ToDateTime(ds.Tables[0].Rows[0]["createTime"]); // 成品时间
+                                                                                            // 修正 撤销包装时 副品变正品
+                    goodsLevelID = Convert.ToInt32(ds.Tables[0].Rows[0]["GoodsLevelID"]);
+                    goodsLevelTypeID = Convert.ToInt32(ds.Tables[0].Rows[0]["goodsLevelTypeID"]);
+
+                }
+                #region  是否功能权限表里
+                //sql = @" SELECT us.userid
+                //       ,us.usercode
+                //       ,us.username
+                //   FROM tp_mst_userright ur
+                //  INNER JOIN tp_mst_user us ON ur.userid = us.userid
+                //  WHERE us.usercode = :USERCODE  AND functioncode = '807042'
+                //";
+                //Paras = new OracleParameter[] {
+                //    new OracleParameter(":USERCODE",OracleDbType.Varchar2, sUserInfo.UserCode,ParameterDirection.Input)
+                // };
+                //  ds = oracleTrConn.GetSqlResultToDs(sql, Paras);
+                //if (ds.Tables[0].Rows.Count == 0)
+                //{
+                //    //不存在产成品  
+                //    errMsg = "工号【" + sUserInfo.UserCode + "】没有复检操作权限,不能进行该操作";
+                //    return errMsg;
+                //}
+
+                #endregion
+
+                #region  是否启用成品撤销限制天数
+                if (createTime != null)
+                {
+                    sql = "select settingvalue from TP_MST_SystemSetting where settingcode=:settingcode and accountid=:accountid";
+                    Paras = new OracleParameter[] {
+                new OracleParameter(":settingcode",OracleDbType.Varchar2,
+                    Constant.SettingType.S_PM_005.ToString(),ParameterDirection.Input),
+                        new OracleParameter(":accountid",OracleDbType.Int32,
+                    sUserInfo.AccountID,ParameterDirection.Input)
+            };
+                    ds = oracleTrConn.GetSqlResultToDs(sql, Paras);
+                    if (ds != null && ds.Tables[0].Rows.Count > 0)
+                    {
+                        if (Convert.ToInt32(ds.Tables[0].Rows[0]["settingvalue"]) > 0)
+                        {
+                            // 开启了限制
+                            ServiceResultEntity resultEntity = PMModuleLogic.BarcodeAllowCancel(Convert.ToDateTime(createTime),
+                                Convert.ToInt32(ds.Tables[0].Rows[0]["settingvalue"]), Constant.SettingType.S_PM_005.ToString(), sUserInfo);
+                            if (Convert.ToInt32(resultEntity.Result) < 0)
+                            {
+                                //超过成品撤销限制天数 
+                                errMsg = resultEntity.Message;
+                                return errMsg;
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                sql = "select 1 from tp_pm_productiondatain where barcode=:barcode and valueflag=1";
+                Paras = new OracleParameter[] {
+                new OracleParameter(":barcode",OracleDbType.Varchar2, productionData.Barcode,ParameterDirection.Input)
+            };
+                ds = oracleTrConn.GetSqlResultToDs(sql, Paras);
+                if (ds.Tables[0].Rows.Count == 0)
+                {
+                    // 2 生产数据恢复到在产生产数据 xuwei 不用处理
+                    sql = @"insert into tp_pm_productiondatain
+                    (
+                        ProductionDataID,
+                        BarCode,
+                        CentralizedBatchNo,
+                        ProductionLineID,
+                        ProductionLineCode,
+                        ProductionLineName,
+                        ProcedureID,
+                        ProcedureCode,
+                        ProcedureName,
+                        ProcedureModel,
+                        ModelType,
+                        PieceType,
+                        IsReworked,
+                        NodeType,
+                        IsPublicBody,
+                        IsReFire,
+                        GoodsLevelID,
+                        GoodsLevelTypeID,
+                        SpecialRepairFlag,
+                        OrganizationID,
+                        GoodsID,
+                        GoodsCode,
+                        GoodsName,
+                        UserID,
+                        UserCode,
+                        UserName,
+                        ClassesSettingID,
+                        KilnID,
+                        KilnCode,
+                        KilnName,
+                        KilnCarID,
+                        KilnCarCode,
+                        KilnCarName,
+                        KilnCarBatchNo,
+                        KilnCarPosition,
+                        ReworkProcedureID,
+                        ReworkProcedureCode,
+                        ReworkProcedureName,
+                        GroutingDailyID,
+                        GroutingDailyDetailID,
+                        GroutingLineID,
+                        GroutingLineCode,
+                        GroutingLineName,
+                        GMouldTypeID,
+                        CanManyTimes,
+                        GroutingLineDetailID,
+                        GroutingDate,
+                        GroutingMouldCode,
+                        MouldCode,
+                        GroutingUserID,
+                        GroutingUserCode,
+                        GroutingNum,
+                        Remarks,
+                        AccountDate,
+                        SettlementFlag,
+                        AccountID,
+                        ValueFlag,
+                        CreateTime,
+                        CreateUserID,
+                        UpdateTime,
+                        UpdateUserID,
+                        OPTimeStamp,
+                        TriggerFlag,
+                        LogoID,
+                        BackOutTime,BackOutUserID,BackOutUserCode,CheckTime
+                    )
+                    select 
+                    ProductionDataID,
+                        BarCode,
+                        CentralizedBatchNo,
+                        ProductionLineID,
+                        ProductionLineCode,
+                        ProductionLineName,
+                        ProcedureID,
+                        ProcedureCode,
+                        ProcedureName,
+                        ProcedureModel,
+                        ModelType,
+                        PieceType,
+                        IsReworked,
+                        NodeType,
+                        IsPublicBody,
+                        IsReFire,
+                        GoodsLevelID,
+                        GoodsLevelTypeID,
+                        SpecialRepairFlag,
+                        OrganizationID,
+                        GoodsID,
+                        GoodsCode,
+                        GoodsName,
+                        UserID,
+                        UserCode,
+                        UserName,
+                        ClassesSettingID,
+                        KilnID,
+                        KilnCode,
+                        KilnName,
+                        KilnCarID,
+                        KilnCarCode,
+                        KilnCarName,
+                        KilnCarBatchNo,
+                        KilnCarPosition,
+                        ReworkProcedureID,
+                        ReworkProcedureCode,
+                        ReworkProcedureName,
+                        GroutingDailyID,
+                        GroutingDailyDetailID,
+                        GroutingLineID,
+                        GroutingLineCode,
+                        GroutingLineName,
+                        GMouldTypeID,
+                        CanManyTimes,
+                        GroutingLineDetailID,
+                        GroutingDate,
+                        GroutingMouldCode,
+                        MouldCode,
+                        GroutingUserID,
+                        GroutingUserCode,
+                        GroutingNum,
+                        Remarks,
+                        AccountDate,
+                        SettlementFlag,
+                        AccountID,
+                        ValueFlag,
+                        CreateTime,
+                        CreateUserID,
+                        UpdateTime,
+                        UpdateUserID,
+                        OPTimeStamp,
+                        1,
+                        LogoID,
+                        BackOutTime,BackOutUserID,BackOutUserCode,CheckTime
+                        from TP_PM_ProductionData where valueflag=1 and barcode=:barcode
+                    ";
+                    returnRows += oracleTrConn.ExecuteNonQuery(sql, Paras);
+                }
+
+                // 3 停用在产生产数据包装数据
+                sql = "update TP_PM_ProductionDataIn set valueflag=0,updateuserID=" + sUserInfo.UserID
+                    + " where ProductionDataID=(select max(ProductionDataID) from TP_PM_ProductionDataIn where barcode=:barcode and valueflag=1)";
+                returnRows += oracleTrConn.ExecuteNonQuery(sql, Paras);
+
+                // 4 插入在产数据 
+                // 修正 撤销包装时 副品变正品
+                sql = $@"insert into TP_PM_InProduction
+                    (
+                        BarCode,
+                        ProductionLineID,
+                        ProductionLineCode,
+                        ProductionLineName,
+                        FlowProcedureID,
+                        FlowProcedureTime,
+                        ProcedureID,
+                        ProcedureTime,
+                        ProductionDataID,
+                        ProcedureModel,
+                        ModelType,
+                        DefectFlag,
+                        ReworkProcedureID,
+                        IsPublicBody,
+                        IsReFire,
+                        SpecialRepairFlag,
+                        GoodsLevelID,
+                        GoodsLevelTypeID,
+                        GoodsID,
+                        GoodsCode,
+                        GoodsName,
+                        UserID,
+                        GroutingDailyID,
+                        GroutingDailyDetailID,
+                        GroutingDate,
+                        GroutingLineID,
+                        GroutingLineCode,
+                        GroutingLineName,
+                        GMouldTypeID,
+                        CanManyTimes,
+                        GroutingLineDetailID,
+                        GroutingMouldCode,
+                        MouldCode,
+                        GroutingUserID,
+                        GroutingUserCode,
+                        GroutingNum,
+                        Remarks,
+                        KilnID,
+                        KilnCode,
+                        KilnName,
+                        KilnCarID,
+                        KilnCarCode,
+                        KilnCarName,
+                        KilnCarBatchNo,
+                        KilnCarPosition,
+                        AccountID,
+                        ValueFlag,
+                        CreateTime,
+                        CreateUserID,
+                        UpdateTime,
+                        UpdateUserID,
+                        OPTimeStamp,
+                        LogoID
+                    )
+                    select
+                        BarCode,
+                        ProductionLineID,
+                        ProductionLineCode,
+                        ProductionLineName,
+                        ProcedureID,
+                        CreateTime,
+                        ProcedureID,
+                        CreateTime,
+                        ProductionDataID,
+                        ProcedureModel,
+                        ModelType,
+                        0,
+                        ReworkProcedureID,
+                        IsPublicBody,
+                        IsReFire,
+                        SpecialRepairFlag,
+                        {goodsLevelID} AS GoodsLevelID,
+                        {goodsLevelTypeID} AS GoodsLevelTypeID,
+                        GoodsID,
+                        GoodsCode,
+                        GoodsName,
+                        UserID,
+                        GroutingDailyID,
+                        GroutingDailyDetailID,
+                        GroutingDate,
+                        GroutingLineID,
+                        GroutingLineCode,
+                        GroutingLineName,
+                        GMouldTypeID,
+                        CanManyTimes,
+                        GroutingLineDetailID,
+                        GroutingMouldCode,
+                        MouldCode,
+                        GroutingUserID,
+                        GroutingUserCode,
+                        GroutingNum,
+                        Remarks,
+                        KilnID,
+                        KilnCode,
+                        KilnName,
+                        KilnCarID,
+                        KilnCarCode,
+                        KilnCarName,
+                        KilnCarBatchNo,
+                        KilnCarPosition,
+                        AccountID,
+                        ValueFlag,
+                        CreateTime,
+                        CreateUserID,
+                        UpdateTime,
+                        UpdateUserID,
+                        OPTimeStamp,
+                        LogoID
+                    from TP_PM_ProductionData where TP_PM_ProductionData.ProductionDataID=(select max(ProductionDataID) from TP_PM_ProductionData where barcode=:barcode and valueflag=1)";
+
+                returnRows += oracleTrConn.ExecuteNonQuery(sql, Paras);
+                // 5 删除产成品表
+                sql = "delete from tp_pm_finishedproduct where barcode=:barcode and valueflag=1";
+                returnRows += oracleTrConn.ExecuteNonQuery(sql, Paras);
+
+                // 6保存质量登记的 逻辑
+                int isInProduction = 1;
+                #region 修改条码
+                if (productionData.ProductionDataID > 0) //表示编辑条码
+                {
+                    #region 验证改判有效期
+                    // 前台已有相关验证,但还是产生了超期改判,后台保存前增加验证。
+                    string sqlString = "select pdin.createtime from tp_pm_productiondatain pdin where pdin.productiondataid = " + productionData.ProductionDataID;
+                    DateTime createtime = Convert.ToDateTime(oracleTrConn.GetSqlResultToObj(sqlString)).Date;
+
+                    // 参数验证用服务端当前设置
+                    sqlString = "SELECT sst.settingvalue\n" +
+                    "  FROM tp_mst_systemsetting sst\n" +
+                    " WHERE sst.accountid = " + sUserInfo.AccountID + "\n" +
+                    "   AND sst.settingcode = 'S_PM_009'";
+                    string strValue = oracleTrConn.GetSqlResultToStr(sqlString);
+
+                    int days = 0;
+                    int pDays = 0;
+                    if (int.TryParse(strValue, out pDays))
+                    {
+                        days = pDays;
+                    }
+                    if (days != 0 && createtime <= DateTime.Now.Date.AddDays(-days))
+                    {
+                        return string.Format(Messages.MSG_S_PM_009, createtime.ToString("yyyy-MM-dd"), days.ToString(), createtime.AddDays(days - 1).ToString("yyyy-MM-dd"));
+                    }
+                    #endregion
+                    //
+                 
+                    //如果原来是 次品 / 废品 xuwei modify 2019-12-13 加入 废品识别
+                    if (productionData.OrgGoodsLevelTypeID == Constant.GoodsLevelType.Reject.GetHashCode()
+                        ||
+                        productionData.OrgGoodsLevelTypeID == Constant.GoodsLevelType.Waste.GetHashCode()
+                        ||
+                        productionData.OrgGoodsLevelTypeID == 20 // 中陶特加 废品(废品就是报费,直接扔的那种) 2024-07-09
+                        )
+                    {
+                        //改为 次品 废品 xuwei modify 2019-12-13 加入废品识别
+                        if (productionData.GoodsLevelTypeID == Constant.GoodsLevelType.Reject.GetHashCode()
+                            ||
+                            productionData.GoodsLevelTypeID == Constant.GoodsLevelType.Waste.GetHashCode()
+                            ||
+                            productionData.GoodsLevelTypeID == 20 // 中陶特加 废品(废品就是报费,直接扔的那种) 2024-07-09
+                            )
+                        {
+                            // 删除生产数据及相关表与报损表
+                            errMsg = DeleteSubstandardToSubstandardByID(oracleTrConn, productionData.ProductionDataID, productionData.Barcode, sUserInfo);
+                            if (!string.IsNullOrEmpty(errMsg))
+                            {
+                                return errMsg;
+                            }
+                            RejectToReject = true;
+                        } //改为不是 次品 废品 xuwei modify 2019-12-13 加入废品识别
+                        else if (productionData.GoodsLevelTypeID != Constant.GoodsLevelType.Reject.GetHashCode()
+                            &&
+                            productionData.GoodsLevelTypeID != Constant.GoodsLevelType.Waste.GetHashCode()
+                            &&
+                            productionData.GoodsLevelTypeID != 20 // 中陶特加 废品(废品就是报费,直接扔的那种) 2024-07-09
+                            )
+                        {
+                            // 删除生产数据及相关表与报损表
+                            errMsg = DeleteSubstandardToOtherByID(oracleTrConn, productionData.ProductionDataID, productionData.Barcode, sUserInfo);
+                            if (!string.IsNullOrEmpty(errMsg))
+                            {
+                                return errMsg;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        // 原来产品分级不是次品
+                        errMsg = DeleteNormalToOtherByID(oracleTrConn, productionData.ProductionDataID, productionData.Barcode, sUserInfo);
+                        if (!string.IsNullOrEmpty(errMsg))
+                        {
+                            return errMsg;
+                        }
+                    }
+                }
+                #endregion
+
+                // 查询新插入的生产数据ID
+                sql = "select SEQ_PM_ProductionData_ID.nextval from dual";
+                string idStr = oracleTrConn.GetSqlResultToStr(sql);
+                int productionDataID = 0;
+                if (!string.IsNullOrEmpty(idStr))
+                {
+                    productionDataID = int.Parse(idStr);
+                }
+                else
+                {
+                    return string.Format(Messages.MSG_CMN_W001, "条码", "保存");
+                }
+                int? ClassesSettingID = null;//班次配置ID
+
+                #region 添加生产者数据
+                errMsg = AddProducer(oracleTrConn, accountDate, productionDataID, productionData.UserID, productionData.UserName, sUserInfo, ref ClassesSettingID);
+                if (!string.IsNullOrEmpty(errMsg))
+                {
+                    return errMsg;
+                }
+                #endregion
+
+                #region 添加生产数据---将备注添加特殊的字符串
+                #region 属性赋值
+                // 将备注添加特殊的字符串250521
+                productionData.Remarks = string.IsNullOrWhiteSpace(productionData.Remarks)? "复检备注": productionData.Remarks;
+                productionData.ClassesSettingID = ClassesSettingID;
+                productionData.ProductionDataID = Convert.ToInt32(idStr);
+                productionData.CentralizedBatchNo = centralizedBatchNo;
+                // web页面传过来250603
+                //productionData.ProductionLineID = procedure.ProductionLineID;
+                //productionData.ProductionLineCode = procedure.ProductionlineCode;
+                //productionData.ProductionLineName = procedure.ProductionlineName;
+                productionData.CompleteProcedureID = productionData.ProcedureID;
+                //productionData.ProcedureCode = procedure.ProcedureCode;
+                //productionData.ProcedureName = procedure.ProcedureName;
+                //productionData.ProcedureModel = procedure.ProcedureModel;
+                //productionData.ModelType = procedure.ModelType;
+                productionData.NodeType = 2;// procedure.NodeType;
+                productionData.IsPublicBody = IsPubilcByBarCode(oracleTrConn, productionData.Barcode);
+                // 重烧
+                if (productionData.GoodsLevelTypeID == (int)Constant.GoodsLevelType.ReFire)
+                {
+                    productionData.IsReFire = (int)Constant.ReFireFlag.No;//产品分级的时候,并不标记,走过重烧第一个结点之后,更新此字段
+
+                }
+                // 次品 废品 xuwei 2019-12-13 加入 废品识别
+                else if (productionData.GoodsLevelTypeID == (int)Constant.GoodsLevelType.Reject
+                        ||
+                        productionData.GoodsLevelTypeID == (int)Constant.GoodsLevelType.Waste
+                        ||
+                        productionData.GoodsLevelTypeID == 20 // 中陶特加 废品(废品就是报费,直接扔的那种) 2024-07-09
+                    )
+                {
+                    substandardFlag = true;
+                }
+                // productionData.OrganizationID = procedure.OrganizationID;
+                //productionData.GoodsID = goodsID;
+                //productionData.GoodsCode = goodsCode;
+                //productionData.GoodsName = goodsName;
+                productionData.GoodsLevelID = productionData.GoodsLevelID;
+                productionData.GoodsLevelTypeID = productionData.GoodsLevelTypeID;
+
+                #endregion
+                string OutSpecialRepairflag = "0";//干补标识 
+                errMsg = AddFinishCheckProductionData(oracleTrConn, accountDate, productionData, sUserInfo, out OutSpecialRepairflag);
+                if (!string.IsNullOrEmpty(errMsg))
+                {
+                    return errMsg;
+                }
+
+                #endregion
+                #region 条码有缺陷
+                #region 是次品 添加废弃产品
+                string ResponProcedureidStr = "";
+                if (substandardFlag)
+                {
+                    #region 修改在产产品数据的当前工序,防止直接报损在产工序没有改过来,记录的是上一个工序
+                    string updateInInProductionForScrap = @"Update tp_pm_inproduction
+                                                        set FlowProcedureID=:flowProcedureID,ProcedureID=:flowProcedureID where barcode=:barcode";
+           
+                    oracleTrConn.ExecuteNonQuery(updateInInProductionForScrap,
+                        new OracleParameter[] {
+                    new OracleParameter(":barcode",productionData.Barcode),
+                    new OracleParameter(":flowProcedureID",productionData.ProcedureID)}
+                    );
+                    #endregion
+
+
+                    #region 添加废弃产品
+                    ScrapProductEntity scrapProduct = new ScrapProductEntity();
+
+                    #region 属性赋值
+                    scrapProduct.BarCode = productionData.Barcode;
+                    scrapProduct.ScrapType = Constant.ScrapType.Substandard.GetHashCode();
+                    scrapProduct.ResponType = Constant.ScrapResponType.Procedure.GetHashCode();
+                    scrapProduct.ScrapDate = accountDate;
+                    scrapProduct.Rreason = Constant.SCRAPTYPE_SUBSTANDARD;
+                    scrapProduct.AuditStatus = Constant.AuditStatus.Agree.GetHashCode();
+                    scrapProduct.Auditor = sUserInfo.UserID;
+                    scrapProduct.AuditlDate = accountDate;
+                    scrapProduct.AccountDate = accountDate;
+                    scrapProduct.GoodsLevelID = productionData.GoodsLevelID;
+                    scrapProduct.GoodsLevelTypeID = productionData.GoodsLevelTypeID;
+                    scrapProduct.IsPublicBody = productionData.IsPublicBody;
+                    // 查询新插入的废弃ID
+                    string ResponProceduresql = "select SEQ_PM_ScrapProduct_ID.nextval from dual";
+                    ResponProcedureidStr = oracleTrConn.GetSqlResultToStr(ResponProceduresql);
+                    scrapProduct.ScrapProductID = Convert.ToInt32(ResponProcedureidStr);
+                    scrapProduct.ScrapType = 1;
+                    scrapProduct.IsQualityStatistics = 1;//新加的,因为这个报损方法是共通的,用于区别是哪里传进去的
+                    scrapProduct.ProductionDataID = productionData.ProductionDataID;
+                    #endregion
+                    if (!RejectToReject) //不是次品到次品 wangxin 20150417
+                    {
+                        // 保存报废
+                        errMsg = AddScrapProduct(oracleTrConn, scrapProduct, sUserInfo);
+                    }
+                    else
+                    {
+                        if (isInProduction == 1)
+                        {
+                            errMsg = AddScrapProduct(oracleTrConn, scrapProduct, sUserInfo);
+                        }
+                        else
+                        {
+                            // 保存报废
+                            errMsg = AddScrapProductRejectToReject(oracleTrConn, scrapProduct, sUserInfo);
+                        }
+                    }
+                    //不是次品到次品 wangxin 20150417
+                    // 保存失败
+                    if (!string.IsNullOrEmpty(errMsg))
+                    {
+                        return errMsg;
+                    }
+                    #endregion
+                }
+                #endregion
+                // 存在缺陷 插入缺陷表
+                if (productionData.ProductionDefects != null)
+                {
+                    foreach (ProductionDefectEntity productionDefect in productionData.ProductionDefects)
+                    {
+                        #region 保存缺陷
+                        productionDefect.ProductionDataID = productionDataID;
+                        productionDefect.BarCode = productionData.Barcode;
+                        productionDefect.ProductionLineID = productionData.ProductionLineID;
+                        productionDefect.ProductionLineCode = productionData.ProductionLineCode;
+                        productionDefect.ProductionLineName = productionData.ProductionLineName;
+                        productionDefect.ProcedureID = productionData.ProcedureID;
+                        productionDefect.ProcedureCode = productionData.ProcedureCode;
+                        productionDefect.ProcedureName = productionData.ProcedureName;
+                        productionDefect.UserID = productionData.UserID;
+                        productionDefect.UserCode = productionData.UserCode;
+                        productionDefect.UserName = productionData.UserName;
+                        productionDefect.GoodsID = productionData.GoodsID;
+                        productionDefect.GoodsCode = productionData.GoodsCode;
+                        productionDefect.GoodsName = productionData.GoodsName;
+                        productionData.Remarks = productionData.Remarks;
+                        productionDefect.ScrapResponFlag
+                            = string.IsNullOrEmpty(productionDefect.ScrapResponFlag) ? "0" : productionDefect.ScrapResponFlag;
+
+                        // 保存缺陷
+                        errMsg = AddDefect(oracleTrConn, productionDefect, sUserInfo);
+
+                        if (!string.IsNullOrEmpty(errMsg))
+                        {
+                            return errMsg;
+                        }
+                        #endregion
+                        #region 是次品 添加废弃责任工序
+                        if (substandardFlag)
+                        {
+                            //if (productionDefect.DefectProcedureID != null)
+                            {
+                                #region 添加责任工序
+                                ResponProcedureEntity responProce = new ResponProcedureEntity();
+                                //// 查询新插入的废弃ID
+                                //string ResponProceduresql = "select SEQ_PM_ScrapProduct_ID.Currval from dual";
+                                //string ResponProcedureidStr = oracleTrConn.GetSqlResultToStr(ResponProceduresql);
+                                #region 属性赋值
+                                responProce.BarCode = productionData.Barcode;
+                                responProce.ProductionDataID = productionDataID;
+                                responProce.ProductionLineID = productionDefect.ProductionLineID;
+                                responProce.ProductionLineCode = productionDefect.ProductionLineCode;
+                                responProce.ProductionLineName = productionDefect.ProductionLineName;
+                                responProce.ProcedureID = productionDefect.DefectProcedureID;
+                                responProce.ProcedureCode = productionDefect.DefectProcedureCode;
+                                responProce.ProcedureName = productionDefect.DefectProcedureName;
+                                responProce.UserID = productionDefect.DefectUserID;
+                                responProce.UserCode = productionDefect.DefectUserCode;
+                                responProce.UserName = productionDefect.DefectUserName;
+                                responProce.Remarks = productionDefect.Remarks;
+                                responProce.ScrapProductID = Convert.ToInt32(ResponProcedureidStr);
+                                #endregion
+                                // 保存责任工序
+                                errMsg = AddResponProcedure(oracleTrConn, responProce, productionDefect, sUserInfo);
+                                // 保存失败
+                                if (!string.IsNullOrEmpty(errMsg))
+                                {
+                                    return errMsg;
+                                }
+                                #endregion
+                            }
+                        }
+                        #endregion
+                    }
+                }
+                #endregion
+                #region 条码是次品 删除在产产品数据
+                if (substandardFlag)
+                {
+                    #region 删除在产产品数据
+                    InProductionEntity delInProductionEntity = new InProductionEntity();
+                    delInProductionEntity.BarCode = productionData.Barcode;
+                    delInProductionEntity.CompleteProcedureID = productionData.ProcedureID;
+                    delInProductionEntity.ProductionDataID = productionDataID;
+                    delInProductionEntity.GoodsLevelID = productionData.GoodsLevelID;
+                    delInProductionEntity.GoodsLevelTypeID = productionData.GoodsLevelTypeID;
+                    // 执行删除 在产数据
+                    errMsg = DeletePDAInProduction(oracleTrConn, delInProductionEntity, false, sUserInfo);
+                    // 执行失败
+                    if (!string.IsNullOrEmpty(errMsg))
+                    {
+                        return errMsg;
+                    }
+                    #endregion
+                }
+                #endregion
+                #region 条码不是次品
+                if (!substandardFlag)
+                {
+                    #region 中间工序/重烧 修改在产产品数据
+                     
+                        #region 修改在产产品数据的当前工序
+
+                        InProductionEntity inProductionEntity = new InProductionEntity();
+                        inProductionEntity.BarCode = productionData.Barcode;
+                        //流程工序
+                        inProductionEntity.FlowProcedureID = productionData.ProcedureID;
+                        // 当前工序
+                        //inProductionEntity.CompleteProcedureID = procedure.ProcedureID;
+                        inProductionEntity.ProcedureID = productionData.ProcedureID;
+                        //生产数据ID
+                        inProductionEntity.ProductionDataID = productionDataID;
+                        // 工序模型
+                        inProductionEntity.ProcedureModel = productionData.ProcedureModel;
+                        // 工序类别
+                        inProductionEntity.ModelType = productionData.ModelType;
+                        // 生产工号
+                        inProductionEntity.UserID = productionData.UserID;
+                        // 重烧
+                        inProductionEntity.IsReFire = productionData.IsReFire;
+                        // 缺陷
+                        inProductionEntity.DefectFlag = productionData.DefectFlag;
+                        // 产品分级
+                        inProductionEntity.GoodsGrade = productionData.GoodsGrade;
+                        // 返工工序ID
+                        inProductionEntity.ReworkProcedureID = productionData.ReworkProcedureID;
+                        inProductionEntity.GoodsLevelID = productionData.GoodsLevelID;
+                        inProductionEntity.GoodsLevelTypeID = productionData.GoodsLevelTypeID;
+                        inProductionEntity.IsPublicBody = productionData.IsPublicBody;
+                        // 执行修改
+                        errMsg = UpdateInProduction(oracleTrConn, inProductionEntity, sUserInfo);
+
+                        // 执行失败
+                        if (!string.IsNullOrEmpty(errMsg))
+                        {
+                            return errMsg;
+                        }
+
+                        #endregion
+                     
+                    #endregion
+
+                  
+                }
+                #endregion
+                #region 写入检验标识 CheckFlag 用于计件 xuwei 2020-04-21
+                oracleTrConn.ExecuteNonQuery(@"
+                UPDATE 
+                    TP_PM_PRODUCTIONDATA SET CHECKFLAG = :CHECKFLAG 
+                WHERE
+                    PRODUCTIONDATAID = :PRODUCTIONDATAID
+                ",
+                    new OracleParameter[] {
+                    new OracleParameter(":CHECKFLAG",productionData.CheckFlag),
+                    new OracleParameter(":PRODUCTIONDATAID",productionDataID)
+                    }
+                );
+                #endregion
+
+                #region 添加二检的数据-上面插入的最新的质量登记或重烧数据           
+
+                //添加二检的数据
+                 sql = "insert into tp_pm_productiondata_semicheck"
+                                 + " (productiondataid," 
+                                  + " semicheckprocedureid,"
+                                  + " accountid,"
+                                  + " createuserid,"
+                                  + " updateuserid,"
+                                  + " createtime,"
+                                  + " updatetime )"
+                               + " values"
+                              + " (:productiondataid,"    
+                               + " :semicheckprocedureid,"
+                               + " :accountid,"
+                               + " :createuserid,"
+                               + " :updateuserid,"
+                               + " sysdate,"
+                               + " sysdate )";            
+               
+                OracleParameter[] paras = new OracleParameter[] {
+                new OracleParameter(":productiondataid",OracleDbType.Int32, productionData.ProductionDataID,ParameterDirection.Input),
+                new OracleParameter(":semicheckprocedureid",OracleDbType.Int32,procedureID,ParameterDirection.Input),
+                new OracleParameter(":accountid",OracleDbType.Int32,sUserInfo.AccountID,ParameterDirection.Input),
+                new OracleParameter(":createuserid",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input),
+                new OracleParameter(":updateuserid",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input)
+                }; 
+                int result = oracleTrConn.ExecuteNonQuery(sql, paras);
+                #endregion
+            }
+            return errMsg;
+        }
     }
 }

+ 2 - 2
WCF.Service/WCF.Hosting/Config.ini

@@ -7,8 +7,8 @@ DBIP=10.0.8.2
 DBPort=1521
 #SID=ibossmes
 #DBUser=devhgcz
-SID=dkmes
-DBUser=mes
+SID=mestest
+DBUser=mestest
 DBPassword=etLHPkLTOLw=
 
 [WCFSetting]