Răsfoiți Sursa

贺祥对接二部高压自动注浆绑码

qinqi 14 ore în urmă
părinte
comite
2fe1a27d6f

+ 803 - 2
WCF.Service/WCF.Ex_HGS3_QRS/Ex_HGS3_QR.cs

@@ -12,6 +12,7 @@
 using System;
 using System.Collections;
 using System.Data;
+using System.Linq;
 using System.ServiceModel;
 using System.ServiceModel.Activation;
 
@@ -22,10 +23,10 @@ using Dongke.IBOSS.PRD.Basics.DataAccess;
 using Dongke.IBOSS.PRD.Basics.Library;
 using Dongke.IBOSS.PRD.Service.DataModels;
 using Dongke.IBOSS.PRD.Service.PDAModuleLogic;
-using Dongke.IBOSS.PRD.Service.PMModuleLogic;
+using Dongke.IBOSS.PRD.Service.PMModuleLogic; 
 using Dongke.IBOSS.PRD.Service.SmartDeviceService;
 using Dongke.IBOSS.PRD.WCF.DataModels;
-
+using Newtonsoft.Json.Linq;
 using Oracle.ManagedDataAccess.Client;
 
 namespace Dongke.IBOSS.PRD.WCF.ExHGS3QRS
@@ -595,6 +596,806 @@ namespace Dongke.IBOSS.PRD.WCF.ExHGS3QRS
 
         #endregion
 
+        #region 三水自动注浆绑码对接贺祥
+        /// <summary>
+		/// 自动注浆绑码对接贺祥
+		/// </summary>
+		/// <param name="groutingLineCode"></param>
+		/// <param name="mouldCode"></param>
+		/// <param name="userCode"></param>
+		/// <param name="groutingDateStr"></param>
+		/// <param name="createTimeStr"></param>
+		/// <param name="barcode"></param> 
+		/// <returns></returns>
+        public string AddGroutingData_HX(
+            string groutingLineCode,
+            string mouldCode,
+            string userCode,
+            string groutingDateStr,
+            string barcode)
+        {
+            //修正参数,去掉多余的特殊字符
+            barcode = barCodeFix(barcode);
+
+            //返回JSON数据格式
+            JObject returnMessage = new JObject(
+                new JProperty("success", true),
+                new JProperty("message", "自动注浆绑码成功!"),
+                new JProperty("groutingLineCode", groutingLineCode)
+                );
+
+            string inputCode = $" groutingLineCode:{groutingLineCode} mouldCode:{mouldCode} userCode:{userCode} groutingDateStr:{groutingDateStr} barcode:{barcode}";
+
+            try
+            {
+                //验证用户
+                #region 验证用户 并配置参数 sUserInfo
+                DataTable userInfo = CheckUserCode(userCode);
+                if (userInfo == null)
+                {
+                    OutputLog.TraceLog(LogPriority.Warning,
+                            this.ToString(),
+                            System.Reflection.MethodBase.GetCurrentMethod().Name,
+                            " userInfo is null " + inputCode,
+                            LocalPath.LogExePath + "SmartDevice\\");
+                    returnMessage["success"] = false;
+                    returnMessage["message"] = "用户信息不存在";
+                    return returnMessage.ToString();
+                }
+                SUserInfo sUserInfo = new SUserInfo();
+                sUserInfo.AccountID = Convert.ToInt32(userInfo.Rows[0]["AccountID"]);
+                sUserInfo.AccountCode = userInfo.Rows[0]["AccountCode"] + "";
+                sUserInfo.UserID = Convert.ToInt32(userInfo.Rows[0]["userid"]);
+                sUserInfo.UserCode = userCode;
+                #endregion
+
+                //验证成型线等信息-注浆
+                ServiceResultEntity sre = AddGroutingLineDetail(groutingLineCode, mouldCode, groutingDateStr, barcode, sUserInfo);
+
+                if (sre.Status == Constant.ServiceResultStatus.NoSearchResults)
+                {
+                    OutputLog.TraceLog(LogPriority.Warning,
+                            this.ToString(),
+                            System.Reflection.MethodBase.GetCurrentMethod().Name,
+                            " groutdata is error " + inputCode,
+                            LocalPath.LogExePath + "SmartDevice\\");
+                    returnMessage["success"] = false;
+                    returnMessage["message"] = sre.Message;
+                    return returnMessage.ToString();
+                }
+
+                //返回正常结果
+                return returnMessage.ToString();
+            }
+            catch (Exception ex)
+            {
+                OutputLog.TraceLog(LogPriority.Error,
+                        this.ToString(),
+                        System.Reflection.MethodBase.GetCurrentMethod().Name,
+                        inputCode + ex.ToString(),
+                        LocalPath.LogExePath);
+                returnMessage["success"] = false;
+                returnMessage["message"] = "MES系统异常";
+                return returnMessage.ToString();
+            }
+        }
+
+        /// <summary>
+        /// 验证连接信息
+        /// </summary>
+        /// <param name="barcode"></param>
+        /// <param name="sUserInfo"></param>
+        /// <returns></returns>
+        public static DataTable CheckUserCode(string usercode)
+        {
+            IDBConnection con = ClsDbFactory.CreateDBConnection(Dongke.IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString);
+            try
+            {
+                con.Open();
+
+                string sqlString = "SELECT a.accountid, a.accountcode, u.userid, u.usercode, u.username\n" +
+                "  FROM tp_mst_user u\n" +
+                " INNER JOIN tp_mst_account a\n" +
+                "    ON a.accountid = u.accountid\n" +
+                " WHERE u.valueflag = '1'\n" +
+                "   AND u.usercode = :usercode";
+
+                OracleParameter[] paras = new OracleParameter[]
+                {
+                    new OracleParameter(":usercode",OracleDbType.Varchar2, usercode,ParameterDirection.Input),
+                };
+                DataTable userInfo = con.GetSqlResultToDt(sqlString, paras);
+
+                if (userInfo == null || userInfo.Rows.Count == 0)
+                {
+                    return null;
+                }
+
+                return userInfo;
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+            finally
+            {
+                if (con.ConnState == ConnectionState.Open)
+                {
+                    con.Close();
+                }
+            }
+        }
+
+        /// <summary>
+        /// 注浆
+        /// </summary>
+        /// <param name="lineCode"></param>
+        /// <param name="mouldCode"></param>
+        /// <param name=""></param>
+        /// <param name="groutingData"></param>
+        /// <param name="createTimeStr"></param>
+        /// <param name="barcode"></param>
+        /// <param name="highNum"></param>
+        /// <param name="tbInfo"></param>
+        /// <param name="sUserInfo"></param>
+        /// <returns></returns>
+        public static ServiceResultEntity AddGroutingLineDetail(string lineCode, string mouldCode, string groutingData, string barcode, SUserInfo sUserInfo)
+        {
+            ServiceResultEntity sre = new ServiceResultEntity();
+            sre.Data = new DataSet();
+            sre.Status = Constant.ServiceResultStatus.Success;
+            IDBTransaction conn = ClsDbFactory.CreateDBTransaction(Dongke.IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString);
+            string sqlStr = "";
+            int result = -1;
+            int classesSettingId = -1;
+            string groutingBatchNoBegin = "";
+            int seqGroutingDailyDetailID = 0;
+            int mainseqGroutingDailyDetailID = 0;
+            try
+            {
+                conn.Connect();
+                //主成型线编码
+                string mainLineCode = lineCode;
+                string mainMouldCode = mouldCode;
+                DataTable slaveLines = null;
+                //多条成型线绑定注浆(成型线组) 20260313 
+                int spm33value = Service.PMModuleService.PMModuleLogic.getSystemSet(conn, "S_PM_033", sUserInfo);
+                if (spm33value == 1)
+                {
+                    // 根据主线编码 → 查询数据库 → 拿到辅成型线编码
+                    slaveLines = conn.GetSqlResultToDt($@"
+                        SELECT GL.GROUTINGLINECODE ,GL.GROUTINGLINEID,GLD.GROUTINGMOULDCODE,
+                        CASE WHEN  GL.H_LINEINDEX >1 THEN '1' END AS HLINEFLAG,0 AS GROUTINGDAILYDETAILID
+                        FROM TP_PC_GROUTINGLINE GL
+                        LEFT JOIN TP_PC_GROUTINGLINEDETAIL GLD ON GL.GROUTINGLINEID = GLD.GROUTINGLINEID
+                        WHERE  (GL.H_LINECODE =  '{mainLineCode}'  OR GL.GroutingLineCode = '{mainLineCode}' )
+                          AND GL.VALUEFLAG = 1 
+                          AND GLD.VALUEFLAG = 1 
+                          AND (GLD.GROUTINGMOULDCODE =  '{mouldCode}' OR GLD.GROUTINGMOULDCODE = GL.GROUTINGLINECODE || '-'||'{mouldCode.Split('-').Last()}')
+                          ORDER BY GROUTINGLINECODE ASC 
+                    ");
+                }
+				else
+				{
+                    slaveLines = conn.GetSqlResultToDt($@"
+                        SELECT GL.GROUTINGLINECODE ,GL.GROUTINGLINEID,GLD.GROUTINGMOULDCODE,
+                        '' AS HLINEFLAG,0 AS GROUTINGDAILYDETAILID
+                        FROM TP_PC_GROUTINGLINE GL
+                        LEFT JOIN TP_PC_GROUTINGLINEDETAIL GLD ON GL.GROUTINGLINEID = GLD.GROUTINGLINEID
+                        WHERE GL.GroutingLineCode = '{mainLineCode}'
+                          AND GL.VALUEFLAG = 1 
+                          AND GLD.VALUEFLAG = 1 
+                          AND GLD.GROUTINGMOULDCODE =  '{mouldCode}'
+                    ");
+                }
+
+				if (slaveLines == null || slaveLines.Rows.Count == 0)
+				{
+                    sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                    sre.Message = "无法注浆:未匹配到该成型线及模具号配置";
+                }
+                //-----------------------------------------------------------------------
+                // 校验是否需要半成品卡控及卡控数量是否允许注浆操作 
+                #region 校验是否需要半成品卡控及卡控数量是否允许注浆操作
+                int systemSetvalue = Service.PMModuleService.PMModuleLogic.getSystemSet(conn, "S_PC_003", sUserInfo);
+
+                #region 无论是否需要校验,都需要此表,注浆成功后需要反写计划表中的实际注浆量
+                string groutingdailyDetailsql = $@"SELECT G.GOODSCODE, O.LOGOID , 1 COUNT ,'' MAT20,0 PRODPLANID
+                                    FROM  TP_PC_GROUTINGLINEDETAIL D 
+                                    LEFT JOIN TP_PC_GROUTINGLINE L ON L.GROUTINGLINEID = D.GROUTINGLINEID
+                                    LEFT JOIN TP_MST_GOODS G ON G.GOODSID = D.GOODSID 
+                                    LEFT JOIN TP_MST_LOGO O ON O.LOGOID = G.LOGOID  
+                                WHERE
+                                    D.ACCOUNTID = { sUserInfo.AccountID}
+                                    AND D.VALUEFLAG = '1' 
+                                    AND D.GMOULDSTATUS = 1 
+                                    AND L.GROUTINGLINECODE = '{mainLineCode}'
+                                    AND D.GROUTINGMOULDCODE = '{mainMouldCode}'
+                                    AND G.SCRAPSUMFLAG = 1
+                                    GROUP BY G.GOODSCODE,O.LOGOID ";
+
+                DataTable resultTable = conn.GetSqlResultToDt(groutingdailyDetailsql);
+                #endregion
+
+                //S_PC_003为1时,需要校验当月该半成品物料的计划数量
+                if (systemSetvalue == 1)
+                { 
+                    //查询对应半成品物料(根据注浆的产品及商标)
+                    string mat20 = Service.PMModuleService.PMModuleLogic.getmaterialcodeMat20(conn, resultTable.Rows[0]["GOODSCODE"].ToString(), Convert.ToInt32(resultTable.Rows[0]["LOGOID"]));
+
+                    if (!string.IsNullOrWhiteSpace(mat20))
+                    {
+                        resultTable.Rows[0]["MAT20"] = mat20;
+                        //查询半成品物料当月对应的计划数量
+                        DataTable planTabel = Service.PMModuleService.PMModuleLogic.getPlanDetail(conn, 1, mat20, Convert.ToDateTime(groutingData));
+
+                        if (planTabel != null && planTabel.Rows.Count > 0)
+                        {
+                            resultTable.Rows[0]["PRODPLANID"] = Convert.ToInt32(planTabel.Rows[0]["PRODPLANID"]);
+                            //有计划,计划数量
+                            decimal planCount = Convert.ToDecimal(planTabel.Rows[0]["PLANCOUNT"]);
+                            //已完成数量
+                            decimal completedCount = 0;
+                            if (!string.IsNullOrWhiteSpace(planTabel.Rows[0]["COMPLETEDCOUNT"].ToString()))
+                            {
+                                completedCount = Convert.ToDecimal(planTabel.Rows[0]["COMPLETEDCOUNT"]);
+                            }
+                            if (Convert.ToDecimal(resultTable.Rows[0]["Count"]) > planCount - completedCount)
+                            {
+                                sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                                sre.Message = "无法注浆:此次注浆超过产销卡控计划注浆数量,请核实。";
+                            }
+                        }
+                        else
+                        {
+                            //无计划,无法注浆
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "无法注浆:该物料无产销计划,请核实。";
+                        }
+                    } 
+                }
+
+                #region 创建表存储每个新建的注浆明细ID
+                DataTable gddIDTable = new DataTable();
+                gddIDTable.Columns.Add("GOODSCODE", typeof(string));
+                gddIDTable.Columns.Add("LOGOID", typeof(int));
+                gddIDTable.Columns.Add("GROUTINGDAILYDETAILID", typeof(int));
+                gddIDTable.Columns.Add("GROUTINGFLAG", typeof(int));
+                #endregion
+
+                #endregion
+                //-----------------------------------------------------------------------
+
+
+                foreach (DataRow slaveLinesRow in slaveLines.Rows)
+				{
+                    lineCode = slaveLinesRow["GROUTINGLINECODE"].ToString();
+                    mouldCode = slaveLinesRow["GROUTINGMOULDCODE"].ToString();
+                    //注浆批次处理 当注浆日期 等于 当前日期 时 注浆批次 为最后注浆批次 加1 处理  
+                    sqlStr = $@" SELECT
+	                        LASTGROUTINGBATCHNO
+                        FROM
+	                        TP_PC_GROUTINGLINE l
+                        WHERE
+	                        l.VALUEFLAG = '1' 
+                            AND l.ACCOUNTID = {sUserInfo.AccountID}
+                            AND l.LASTGROUTINGDATE = TO_DATE('{groutingData}', 'YYYY-MM-DD HH24:MI:SS')
+	                        AND l.GROUTINGLINECODE = '{lineCode}' 
+                        ";
+                    object obj = conn.GetSqlResultToObj(sqlStr);
+                    if (obj == null || obj == DBNull.Value || Convert.ToInt32(obj) == 0)
+                    {
+                        groutingBatchNoBegin = "0";
+                    }
+                    else
+                    {
+                        groutingBatchNoBegin = "l.LASTGROUTINGBATCHNO";
+                    }
+                    //校验成型线是否存在
+                    string sqlString = "select t.userid, u.usercode, u.username, t.groutinglineid\n" +
+                        "  from tp_pc_groutingline t\n" +
+                        " inner join tp_mst_user u\n" +
+                        "    on u.userid = t.userid\n" +
+                        " where t.groutinglinecode = :lineCode\n" +
+                        " and t.valueflag='1'\n" +
+                        " and t.gmouldstatus = 1";
+                    OracleParameter[] paras = new OracleParameter[]
+                    {
+                    new OracleParameter(":lineCode", lineCode),
+                    };
+                    DataTable dt = conn.GetSqlResultToDt(sqlString, paras);
+                    if (dt == null || dt.Rows.Count == 0)
+                    {
+                        sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                        sre.Message = $"成型线{lineCode}不存在或当前状态不能注浆";
+                    }
+
+                    //校验工号 成型线工号配置的工号 必须包含当前用户 
+                    sqlStr = $@" SELECT
+	                    COUNT(c.USERID)
+                    FROM
+	                    TP_PC_GROUTINGLINE l
+	                    INNER JOIN TP_PC_GROUTINGUSER u ON l.GROUTINGLINEID = u.GROUTINGLINEID
+	                    LEFT JOIN TP_MST_USER c ON u.USERID = c.USERID 
+                    WHERE
+	                    l.VALUEFLAG = '1' 
+                        AND l.ACCOUNTID = {sUserInfo.AccountID}
+	                    AND l.GROUTINGLINECODE = '{lineCode}'
+	                    AND c.USERCODE = '{sUserInfo.UserCode}'
+                    ";
 
+                    obj = conn.GetSqlResultToObj(sqlStr);
+                    if (obj == null || obj == DBNull.Value || Convert.ToInt32(obj) == 0)
+                    {
+                        sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                        sre.Message = "当前成型线没有配置当前员工!";
+                    }
+
+                    //获取是否有班次 设置 classesSettingId
+                    if (sre.Status == Constant.ServiceResultStatus.Success)
+                    {
+                        sqlStr = $@" SELECT 
+	                        NVL(MAX(CLASSESSETTINGID),0) AS CLASSESSETTINGID
+                        FROM
+                            TP_PC_CLASSESSETTING
+                        WHERE 
+                            ACCOUNTID = {sUserInfo.AccountID}
+	                        AND VALUEFLAG = '1'
+	                        AND ACCOUNTDATE = TO_DATE('{groutingData}', 'YYYY-MM-DD HH24:MI:SS')
+	                        AND USERCODE = '{sUserInfo.UserCode}'
+                        ";
+                        obj = conn.GetSqlResultToObj(sqlStr);
+                        if (obj == null || obj == DBNull.Value || Convert.ToInt32(obj) == 0)
+                        {
+                            classesSettingId = 0;
+                        }
+                        else
+                        {
+                            classesSettingId = Convert.ToInt32(obj);
+                        }
+                        if (classesSettingId == 0)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "没有班次配置!";
+                        }
+                    }
+                    //没有班次的 自动配置班次
+                    if (classesSettingId == 0)
+                    {
+                        try
+                        {
+                            //从序列中生成新的班次ID
+                            classesSettingId = Convert.ToInt32(
+                                conn.GetSqlResultToStr("SELECT SEQ_PC_ClASSESSETTING_ID.NEXTVAL FROM DUAL"));
+
+                            sqlStr = "BEGIN";
+                            //插入班次SQL
+                            sqlStr += $@"
+                            INSERT INTO TP_PC_CLASSESSETTING 
+                                ( 
+                                    CLASSESSETTINGID, ACCOUNTDATE, USERID, USERCODE, 
+                                    ACCOUNTID, CREATEUSERID, UPDATEUSERID 
+                                )
+                            VALUES 
+	                            (
+		                            {classesSettingId},-- CLASSESSETTINGID select SEQ_PC_ClASSESSETTING_ID.Nextval FROM DUAL;
+		                            to_date('{groutingData}', 'YYYY-MM-DD HH24:MI:SS'),-- ACCOUNTDATE
+                                    {sUserInfo.UserID},--USERID
+		                            '{sUserInfo.UserCode}',-- USERCODE
+		                            {sUserInfo.AccountID},--ACCOUNTID
+		                            {sUserInfo.UserID},--CREATEUSERID
+		                            {sUserInfo.UserID} --UPDATEUSERID
+	                            );
+                         ";
+
+                            //插入班次详细SQL
+                            sqlStr += $@"
+                            INSERT INTO TP_PC_CLASSESDETAIL (
+	                            CLASSESSETTINGID,ACCOUNTDATE,
+	                            USERID,USERCODE,STAFFID,STAFFSTATUS,ACCOUNTID,
+	                            VALUEFLAG,CREATEUSERID,UPDATEUSERID,
+	                            UJOBSID,SJOBSID,UJOBSNUM 
+                            )
+                            SELECT
+	                            {classesSettingId},--CLASSESSETTINGID 班次ID
+		                        to_date('{groutingData}', 'YYYY-MM-DD HH24:MI:SS'),-- ACCOUNTDATE
+	                            {sUserInfo.UserID},--USERID
+	                            '{sUserInfo.UserCode}',--USERCODE
+	                            s.STAFFID,--STAFFID
+	                            h.STAFFSTATUS,--STAFFSTATUS 员工状态
+	                            {sUserInfo.AccountID},--ACCOUNTID
+	                            '1',--VALUEFLAG
+	                            {sUserInfo.UserID},--CREATEUSERID
+	                            {sUserInfo.UserID},--UPDATEUSERID
+	                            s.UJOBSID,--UJOBSID 工号工种ID
+	                            h.JOBS,--SJOBSID 员工工种ID
+	                            ( SELECT COUNT( DISTINCT UJOBSID ) FROM TP_MST_USERSTAFF WHERE USERID = '{sUserInfo.UserID}' ) -- UJOBSNUM 工号工种个数
+                            FROM
+	                            TP_MST_USERSTAFF s
+	                            LEFT JOIN TP_HR_STAFF h ON h.STAFFID = s.STAFFID 
+                            WHERE
+	                            s.USERID = {sUserInfo.UserID}
+                            ;
+                        ";
+                            sqlStr += "END;";
+
+                            conn.ExecuteNonQuery(sqlStr);
+                            //多条语句执行,只返回-1,不报异常就是执行成功
+                            sre.Status = Constant.ServiceResultStatus.Success;
+                            sre.Message = "操作成功!";
+                        }
+                        catch (Exception ex)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "自动配置班次失败!";
+                        }
+                    }
+                    //插入 注浆记录
+                    if (sre.Status == Constant.ServiceResultStatus.Success)
+                    {
+                        try
+                        {
+                            sqlStr = "BEGIN";
+                            string proSql = "";
+                            //获取注浆ID
+                            int groutingDailyId = Convert.ToInt32(
+                                conn.GetSqlResultToStr(@"SELECT SEQ_PM_GROUTINGDAILY_ID.NEXTVAL FROM DUAL"));
+
+                            //插入注浆记录 TP_PM_GROUTINGDAILY
+                            sqlStr += $@"
+                        INSERT INTO TP_PM_GROUTINGDAILY (
+                            GROUTINGDAILYID,
+	                        GROUTINGLINEID,GROUTINGLINECODE,GROUTINGLINENAME,GROUTINGDATE,
+                            USERID,MOULDQUANTITY,GMOULDTYPEID,CANMANYTIMES,ACCOUNTID,VALUEFLAG,
+	                        CREATEUSERID,UPDATEUSERID,USERCODE,GMOULDSTATUS,
+                            CLASSESSETTINGID,GROUTINGBATCHNO,MONITORID,MONITORCODE,HIGHPRESSUREFLAG  
+                        ) 
+                        SELECT
+                            {groutingDailyId},
+                            l.GROUTINGLINEID,
+                            l.GROUTINGLINECODE,
+                            l.GROUTINGLINENAME,
+                            to_date( '{groutingData}', 'YYYY-MM-DD HH24:MI:SS' ),-- GROUTINGDATE 注浆日期
+                            {sUserInfo.UserID},-- USERID 用户ID
+                            l.MOULDQUANTITY,
+                            l.GMOULDTYPEID,
+                            t.CANMANYTIMES, -- CANMANYTIMES 关联 TP_MST_GMOULDTYPE 查询
+                            {sUserInfo.AccountID},-- ACCOUNTID
+                            '1',--VALUEFLAG
+                            {sUserInfo.UserID},--CREATEUSERID
+                            {sUserInfo.UserID},--UPDATEUSERID
+                            '{sUserInfo.UserCode}',-- USERCODE
+                            l.GMOULDSTATUS,
+                            {classesSettingId}, -- 从 CLASSESSETTINGID 查询
+                            {groutingBatchNoBegin} + 1, --LASTGROUTINGBATCHNO 批次号 每注一次加1
+                            l.MONITORID,
+                            m.USERCODE AS MONITORCODE, --MONITORCODE 关联 TP_MST_USER 查询
+                            l.HIGHPRESSUREFLAG
+                        FROM
+	                        TP_PC_GROUTINGLINE l
+	                        LEFT JOIN TP_MST_GMOULDTYPE t ON l.GMOULDTYPEID = t.GMOULDTYPEID
+	                        LEFT JOIN TP_MST_USER m ON l.MONITORID = m.USERID
+                        WHERE
+	                        GROUTINGLINECODE = '{lineCode}' --成型线号
+                            AND l.VALUEFLAG = '1'
+                            AND l.GMOULDSTATUS = 1
+                        ;";
+
+                            //按成型线模具循环插入注浆记录明细 TP_PM_GROUTINGDAILYDETAIL  
+
+                            //注浆明细ID
+                            seqGroutingDailyDetailID = Convert.ToInt32(
+                                conn.GetSqlResultToStr(@"SELECT SEQ_PM_GroutingDailyD_ID.Nextval FROM DUAL"));
+							if (string.IsNullOrWhiteSpace(slaveLinesRow["HLINEFLAG"].ToString()))
+							{
+                                //主成型线注浆ID
+                                mainseqGroutingDailyDetailID = seqGroutingDailyDetailID; 
+                            }
+							else
+							{
+                                proSql += $@"UPDATE TP_PM_GroutingDailyDetail SET MAINGROUTINGDAILYDETAILID = {mainseqGroutingDailyDetailID} WHERE GROUTINGDAILYDETAILID = {seqGroutingDailyDetailID};";
+                            }
+                            //插入注浆记录明细
+                            sqlStr += $@"
+                        INSERT INTO TP_PM_GROUTINGDAILYDETAIL (
+	                        GROUTINGDAILYID,GROUTINGDAILYDETAILID,GROUTINGLINEID,GROUTINGLINECODE,GROUTINGLINENAME,GROUTINGLINEDETAILID,
+	                        GROUTINGDATE,GROUTINGMOULDCODE,MOULDCODE,GOODSID,GOODSCODE,GOODSNAME,GMOULDSTATUS,
+	                        GROUTINGCOUNT,GROUTINGFLAG,NOGROUTINGRREASON,ACCOUNTID,VALUEFLAG,CREATEUSERID,
+	                        UPDATEUSERID,USERID,USERCODE,SCRAPFLAG,SPECIALREPAIRFLAG,BARCODE,CLASSESSETTINGID,
+	                        ISPUBLICBODY,DELIVERFLAG,GMOULDTYPEID,CANMANYTIMES,GROUTINGBATCHNO,LOGOID,glazetypeid,
+	                        SCRAPTIME,SCRAPUSER,SCRAPREASONID,SCRAPREASON,MOULDID,SREASONID,SCRAPTYPE,BEGINNINGFLAG
+                            -- 20220308 add 记录光瓷重量
+                            ,LUSTERWAREWEIGHT
+                            -- 20220308 add 记录光瓷重量 end
+                            -- 20220325 by feiy add 试验线
+                            ,TESTFLAG
+                            -- 20220325 by feiy add 试验线 end
+                            -- 20220812 by LSQ add 模具试验标识
+                            ,TESTMOULDFLAG
+                            -- 20220812 by LSQ add 模具试验标识 end
+                        ) SELECT
+                            {groutingDailyId},--GROUTINGDAILYID
+                            {seqGroutingDailyDetailID},--GROUTINGDAILYDETAILID
+                            d.GROUTINGLINEID,--GROUTINGLINEID
+                            l.GROUTINGLINECODE,--GROUTINGLINECODE
+                            l.GROUTINGLINENAME,--GROUTINGLINENAME
+                            d.GROUTINGLINEDETAILID,--GROUTINGLINEDETAILID
+                            to_date( '{groutingData}', 'YYYY-MM-DD HH24:MI:SS' ),--GROUTINGDATE
+                            d.GROUTINGMOULDCODE,--GROUTINGMOULDCODE
+                            d.MOULDCODE,--MOULDCODE
+                            d.GOODSID,--GOODSID
+                            g.GOODSCODE,--GOODSCODE
+                            g.GOODSNAME,--GOODSNAME
+                            d.GMOULDSTATUS,--GMOULDSTATUS
+                            d.GROUTINGCOUNT + 1,--GROUTINGCOUNT
+                            '1',--GROUTINGFLAG
+                            '', --NOGROUTINGRREASON  未注浆原因
+                            {sUserInfo.AccountID},--ACCOUNTID
+                            '1',--VALUEFLAG
+                            {sUserInfo.UserID},--CREATEUSERID
+                            {sUserInfo.UserID},--UPDATEUSERID
+                            {sUserInfo.UserID},--USERID
+                            '{sUserInfo.UserCode}',--USERCODE
+                            '0',--SCRAPFLAG
+                            '0',--SPECIALREPAIRFLAG
+                            null,--BARCODE
+                            {classesSettingId},--CLASSESSETTINGID
+                            '0',--ISPUBLICBODY
+                            '0',--DELIVERFLAG
+                            l.GMOULDTYPEID,--GMOULDTYPEID
+                            t.CANMANYTIMES,--CANMANYTIMES
+                            {groutingBatchNoBegin} + 1, --LASTGROUTINGBATCHNO 批次号 每注一次加1
+                            o.LOGOID,--LOGOID
+                            g.glazetypeid,
+                            NULL,--SCRAPTIME
+                            NULL,--SCRAPUSER
+                            NULL,--SCRAPREASONID
+                            NULL,--SCRAPREASON
+                            d.MOULDID,--MOULDID
+                            NULL,--SREASONID
+                            NULL,--SCRAPTYPE
+                            '0', --BEGINNINGFLAG
+                            -- 20220308 add 记录光瓷重量
+                            NVL(g.LUSTERWAREWEIGHT,0)
+                            -- 20220308 add 记录光瓷重量 end
+                            -- 20220325 by feiy add 试验线
+                            ,l.TESTFLAG
+                            -- 20220325 by feiy add 试验线 end
+                            -- 20220812 by LSQ add 模具试验标识
+                            ,M.TESTMOULDFLAG
+                            -- 20220812 by LSQ add 模具试验标识 end
+                        FROM
+	                        TP_PC_GROUTINGLINEDETAIL d
+	                        LEFT JOIN TP_PC_GROUTINGLINE l ON l.GROUTINGLINEID = d.GROUTINGLINEID
+                            LEFT JOIN TP_PC_MOULD M  ON d.MOULDID = M.MOULDID
+	                        LEFT JOIN TP_MST_GOODS g ON g.GOODSID = d.GOODSID
+	                        LEFT JOIN TP_MST_LOGO o ON o.LOGOID = g.LOGOID
+	                        LEFT JOIN TP_MST_GMOULDTYPE t ON t.GMOULDTYPEID = l.GMOULDTYPEID 
+                        WHERE
+                            d.ACCOUNTID = {sUserInfo.AccountID}
+	                        AND d.VALUEFLAG = '1' 
+	                        AND d.GMOULDSTATUS = 1 
+	                        AND l.GROUTINGLINECODE = '{lineCode}' --成型线号
+                            AND d.GROUTINGMOULDCODE = '{mouldCode}'
+                        ;";
+                            sre.Result = groutingDailyId;
+
+                            sqlStr += "END;";
+                            result = conn.ExecuteNonQuery(sqlStr);
+                            if (!string.IsNullOrWhiteSpace(proSql))
+                            {
+                                result += conn.ExecuteNonQuery("BEGIN " + proSql + " END;");
+                            }
+                            sre.Status = Constant.ServiceResultStatus.Success;
+                            sre.Message = "操作成功!";
+
+                            //2022年8月24日09:32:29 注浆次数
+                            sqlStr = "BEGIN";
+
+                            //更新注浆次数
+                            sqlStr += $@"
+                        UPDATE 
+                            TP_PC_GROUTINGLINEDETAIL
+                        SET 
+                            GROUTINGCOUNT = GROUTINGCOUNT + 1
+                        WHERE
+                            ACCOUNTID = {sUserInfo.AccountID}
+                            AND VALUEFLAG = '1' 
+                            AND GMOULDSTATUS = 1  
+                            AND GROUTINGMOULDCODE = '{mouldCode}'
+                        ;";
+                            sqlStr += "END;";
+
+                            result = conn.ExecuteNonQuery(sqlStr);
+                            sre.Status = Constant.ServiceResultStatus.Success;
+                            sre.Message = "操作成功!";
+                        }
+                        catch (Exception ex)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "注浆记录写入失败!";
+                        }
+                    }
+                    //更新 成型线 最后注浆日期 注浆批次
+                    if (sre.Status == Constant.ServiceResultStatus.Success)
+                    {
+                        sqlStr = $@"
+                        UPDATE 
+                            TP_PC_GROUTINGLINE l
+                        SET 
+                            l.LASTGROUTINGDATE = to_date( '{groutingData}','YYYY-MM-DD HH24:MI:SS' ),
+                            l.LASTGROUTINGBATCHNO = {groutingBatchNoBegin} + 1
+                        WHERE
+                            l.GROUTINGLINECODE = '{lineCode}'
+                        ";
+                        result = conn.ExecuteNonQuery(sqlStr);
+                        if (result > 0)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.Success;
+                            sre.Message = "操作成功!";
+                        }
+                        else
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "成型线最后注浆日期和注浆批次更新失败!";
+                        }
+                    }
+                    //半成品卡控计划
+                    if (sre.Status == Constant.ServiceResultStatus.Success)
+                    {
+                        //插入注浆ID表 半成品卡控计划用
+                        DataRow newRow = gddIDTable.NewRow();
+                        newRow["GOODSCODE"] = resultTable.Rows[0]["GOODSCODE"].ToString();
+                        newRow["LOGOID"] = Convert.ToInt32(resultTable.Rows[0]["LOGOID"]);
+                        newRow["GROUTINGDAILYDETAILID"] = Convert.ToInt32(mainseqGroutingDailyDetailID);
+                        newRow["GROUTINGFLAG"] = 1;
+                        gddIDTable.Rows.Add(newRow);
+
+                        int proPlanID = 0;
+                        //S_PC_003为0时,需要查找每个产品对应的当月该半成品物料的计划ID
+                        //为1时,校验时已经查询过,无须再查
+                        if (systemSetvalue == 0)
+                        {
+                            //查询对应半成品物料(根据注浆的产品及商标)
+                            string mat20 = Service.PMModuleService.PMModuleLogic.getmaterialcodeMat20(conn, resultTable.Rows[0]["GOODSCODE"].ToString(), Convert.ToInt32(resultTable.Rows[0]["LOGOID"]));
+
+                            if (!string.IsNullOrWhiteSpace(mat20))
+                            {
+                                resultTable.Rows[0]["MAT20"] = mat20;
+                                //查询半成品物料当月对应的计划数量
+                                DataTable planTabel = Service.PMModuleService.PMModuleLogic.getPlanDetail(conn, 1, mat20, Convert.ToDateTime(groutingData));
+
+                                if (planTabel != null && planTabel.Rows.Count > 0)
+                                {
+                                    //有计划,计划ID
+                                    proPlanID = Convert.ToInt32(planTabel.Rows[0]["PRODPLANID"]);
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if (!string.IsNullOrWhiteSpace(resultTable.Rows[0]["PRODPLANID"].ToString()))
+                            {
+                                proPlanID = Convert.ToInt32(resultTable.Rows[0]["PRODPLANID"]);
+                            }
+                        }
+
+                        if (proPlanID > 0)
+                        {
+                            string proSql = "UPDATE TP_SEMIFINISHED_PRODPLAN SET COMPLETEDCOUNT = COMPLETEDCOUNT + :PLANCOUNT WHERE PRODPLANID = :PRODPLANID AND MATERIALCODE = :MAT20";
+                            OracleParameter[] proParas = new OracleParameter[]
+                            {
+                                new OracleParameter(":PLANCOUNT", OracleDbType.Int32, 1, ParameterDirection.Input),
+                                new OracleParameter(":PRODPLANID", OracleDbType.Int32, proPlanID, ParameterDirection.Input),
+                                new OracleParameter(":MAT20", OracleDbType.Varchar2, resultTable.Rows[0]["MAT20"].ToString(), ParameterDirection.Input),
+                            };
+                            int executeResult = conn.ExecuteNonQuery(proSql, proParas);
+
+                            //查找注浆明细中该产品商标都有哪些,插入关联表 
+                            proSql = "INSERT INTO TP_SEMIFINISHED_PRODPLANBAR (PRODPLANID,GROUTINGDAILYDETAILID,ACCOUNTID,CREATEUSERID) VALUES(:PRODPLANID,:GROUTINGDAILYDETAILID,:ACCOUNTID,:CREATEUSERID)";
+                            proParas = new OracleParameter[]
+                            {
+                                new OracleParameter(":PRODPLANID", OracleDbType.Int32, proPlanID, ParameterDirection.Input),
+                                new OracleParameter(":GROUTINGDAILYDETAILID", OracleDbType.Int32, Convert.ToInt32(mainseqGroutingDailyDetailID), ParameterDirection.Input),
+                                new OracleParameter(":ACCOUNTID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input),
+                                new OracleParameter(":CREATEUSERID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input),
+                            };
+                            executeResult = conn.ExecuteNonQuery(proSql, proParas);
+                             
+                        }
+                    }
+
+                }
+                 
+                //绑定条码 
+                if (sre.Status == Constant.ServiceResultStatus.Success)
+                {
+                    #region 校验条码 
+                    if (barcode.Length > 0)
+                    {
+                        // 条码状态表
+                        DataTable barCodeDataTable = conn.GetSqlResultToDt($"SELECT UBC.BarCode FROM TP_PM_UsedBarCode UBC WHERE BarCode ='{barcode}'");
+                        if (barCodeDataTable != null && barCodeDataTable.Rows.Count > 0)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "以下条码已被使用" + barcode.ToString();
+                        }
+                    }
+                    #endregion 校验条码
+                }
+
+                if (sre.Status == Constant.ServiceResultStatus.Success)
+                {
+                    #region 更新注浆日报明细表
+                    if (seqGroutingDailyDetailID > 0)
+                    {
+                        #region SQL 
+                        string updateGroutingDailyDetailSql =
+                            "UPDATE TP_PM_GroutingDailyDetail" +
+                            "   SET BarCode = :BarCode  " +
+                            " WHERE GroutingDailyDetailID = :GroutingDailyDetailID";
+                        #endregion SQL
+
+                        // 验证条码 
+                        string insertBarcodeSql =
+                            "INSERT INTO TP_PM_UsedBarCode " +
+                            "  (BarCode, AccountID, CreateTime, CreateUserID,GroutingDailyDetailID,BarCodeStatus)" +
+                            "VALUES " +
+                            "  (:BarCode, :AccountID, sysdate, :CreateUserID,:GroutingDailyDetailID,:BarCodeStatus)";
+                        OracleParameter[] insertBarcodeParas = new OracleParameter[]
+                        {
+                        new OracleParameter(":BarCode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input),
+                        new OracleParameter(":AccountID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input),
+                        new OracleParameter(":CreateUserID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input),
+                        new OracleParameter(":GroutingDailyDetailID", OracleDbType.Int32,mainseqGroutingDailyDetailID, ParameterDirection.Input),
+                        new OracleParameter(":BarCodeStatus", OracleDbType.Char, "1", ParameterDirection.Input),
+
+                        };
+                        int res = conn.ExecuteNonQuery(insertBarcodeSql, insertBarcodeParas);
+                        if (res <= 0)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "新增条码异常" + barcode.ToString();
+                        }
+
+                        // 绑定条码
+                        OracleParameter[] updateGroutingDailyDetailParas = new OracleParameter[]
+                        {
+                        new OracleParameter(":GroutingDailyDetailID", OracleDbType.Int32, mainseqGroutingDailyDetailID, ParameterDirection.Input),
+                        new OracleParameter(":BarCode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input),
+                        };
+                        res = conn.ExecuteNonQuery(updateGroutingDailyDetailSql, updateGroutingDailyDetailParas);
+                        if (res <= 0)
+                        {
+                            sre.Status = Constant.ServiceResultStatus.NoSearchResults;
+                            sre.Message = "绑定条码异常" + barcode.ToString();
+                        }
+                    }
+                }
+                #endregion 更新注浆日报明细表
+
+                //提交
+                if (sre.Status == Constant.ServiceResultStatus.Success)
+                {
+                    sre.Message = "操作成功!";
+                    conn.Commit();
+                }
+                else
+                {
+                    conn.Rollback();
+                }
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+            finally
+            {
+                conn.Disconnect();
+            }
+            //返回数据
+            return sre;
+        }
+        #endregion
     }
 }

+ 28 - 0
WCF.Service/WCF.Ex_HGS3_QRS/IEx_HGS3_QR.cs

@@ -61,5 +61,33 @@ namespace Dongke.IBOSS.PRD.WCF.ExHGS3QRS
 
 
         #endregion
+
+        #region 官塘自动注浆绑码对接贺祥
+        /// <summary>
+        /// 官塘自动注浆绑码对接贺祥
+        /// </summary>
+        /// <param name="groutingLineCode"></param>
+        /// <param name="mouldCode"></param>
+        /// <param name="userCode"></param>
+        /// <param name="groutingDateStr"></param>
+        /// <param name="createTimeStr"></param>
+        /// <param name="barcode"></param>
+        /// <param name="highNum"></param>
+        /// <param name="tbInfo"></param>
+        /// <returns></returns>
+        [OperationContract]
+        //[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest
+        //    , ResponseFormat = WebMessageFormat.Json
+        //    , RequestFormat = WebMessageFormat.Json)]
+        [WebGet(
+            RequestFormat = WebMessageFormat.Json,
+            ResponseFormat = WebMessageFormat.Json)]
+        string AddGroutingData_HX(
+            string groutingLineCode,
+            string mouldCode,
+            string userCode,
+            string groutingDateStr, 
+            string barcode);
+        #endregion
     }
 }

+ 8 - 0
WCF.Service/WCF.Ex_HGS3_QRS/WCF.ExHGS3QRS.csproj

@@ -53,6 +53,10 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\DLL\Curtain.DataAccess.dll</HintPath>
     </Reference>
+    <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\DLL\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\DLL\Oracle.ManagedDataAccess.dll</HintPath>
@@ -88,6 +92,10 @@
       <Project>{0492B0D6-2908-4AFF-BE1E-0E4F7B07622D}</Project>
       <Name>PMModuleLogic</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\DK.Service\PMModuleService\PMModuleService.csproj">
+      <Project>{2fabf900-b503-4da8-9f42-44ee73aafcdb}</Project>
+      <Name>PMModuleService</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\DK.Service\Service.DataModels\Service.DataModels.csproj">
       <Project>{16C72702-C162-4CD3-9CCC-40B9D8491CCD}</Project>
       <Name>Service.DataModels</Name>