using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Text; using System.Windows; using System.Windows.Forms; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicForm; namespace UAS_MES_NEW.PublicMethod { class LogicHandler { public LogicHandler() { } static DataHelper dh = SystemInf.dh; //用于拼接SQL static StringBuilder sql = new StringBuilder(); //用于存放批量执行的SQL static List sqls = new List(); /// /// 记录复判记录 /// /// /// /// /// /// /// public static void AutoPassJudge(string iSN, string iMakeCode, string iSource, string iFileName, string iLineCode, string iCombine, string iStatus) { //插入不良判断记录 sql.Clear(); sql.Append("insert into AUTOSCAN_REJUDGE(asr_id,asr_indate,asr_filename,asr_combinecode,asr_sourcecode,"); sql.Append("asr_linecode,asr_makecode,asr_rejdate,asr_sncode,asr_rejusername,asr_status) values(AUTOSCAN_REJUDGE_seq.nextval,sysdate,"); sql.Append("'" + iFileName + "','" + iCombine + "','" + iSource + "','" + iLineCode + "','" + iMakeCode + "',sysdate,'" + iSN + "','" + User.UserName + "','" + iStatus + "')"); dh.ExecuteSql(sql.ToString(), "insert"); } /// /// 判断工单是否已经下放 /// /// /// public static bool CheckMakeStatus(string iMaCode, out string ErrorMessage) { string ma_statuscode = dh.getFieldDataByCondition(" make ", "ma_statuscode", "Lower(ma_code)='" + iMaCode.ToLower() + "' ").ToString(); ErrorMessage = ""; if (ma_statuscode == "") { ErrorMessage = "工单号" + iMaCode + "不存在"; return false; } if (ma_statuscode == "STARTED") return true; else { ErrorMessage = "工单必须是已下放状态"; return false; } } public static void GetSerialNumByCaller(string iCaller, out string SerialNum) { SerialNum = ""; string[] param = new string[] { iCaller, "2", SerialNum }; dh.CallProcedure("SP_GETMAXNUMBER", ref param); SerialNum = param[2]; } /// /// 验证用户身份信息 /// /// /// /// public static bool CheckUserLogin(string iUserCode, string iPassWord, out string oErrorMessage) { oErrorMessage = ""; string SQL = "select em_code from employee where upper(em_code)=:UserName and em_password =:PassWord"; DataTable dt; dt = (DataTable)dh.ExecuteSql(SQL, "select", iUserCode.ToUpper(), iPassWord); if (dt.Rows.Count > 0) return true; else { oErrorMessage = "用户名或者密码不正确!"; return false; } } /// /// 记录登陆信息 /// public static void RecordLogInfo(string iUserCode, string iUserName, string iVersion, string iType, string iIP) { dh.ExecuteSql("insert into LogInfo(id,sip,usname,indate,uscode,versioncode,terminaltype) values (LogInfo_seq.nextval,'" + iIP + "','" + iUserName + "',sysdate,'" + iUserCode + "','" + iVersion + "','" + iType + "')", "insert"); } /// /// 验证用户身份信息和岗位资源 /// /// /// /// /// public static bool CheckUserAndResourcePassed(string iUserCode, string iSourceCode, out string oErrorMessage) { oErrorMessage = ""; iUserCode = iUserCode.ToUpper(); iSourceCode = iSourceCode.ToUpper(); string SQL = "select em_code,em_type from employee where upper(em_code)=:UserName "; DataTable dt; dt = (DataTable)dh.ExecuteSql(SQL, "select", iUserCode); if (dt.Rows.Count > 0) { string em_type = dt.Rows[0]["em_type"].ToString(); if (iSourceCode == "") { oErrorMessage = "岗位资源不允许为空"; return false; } if (em_type == "admin") { if (dh.CheckExist("Source", "upper(sc_code)='" + iSourceCode + "' and sc_statuscode='AUDITED'")) { return true; } else { oErrorMessage = "岗位资源编号错误或者未审核!"; return false; } } else { dt = dh.getFieldsDatasByCondition("cs$empgroup left join cs$userresource on ur_groupcode=eg_groupcode left join source on ur_resourcecode=sc_code", new string[] { "upper(ur_resourcecode) ur_resourcecode" }, "upper(eg_emcode)= '" + iUserCode + "' and sc_statuscode='AUDITED'"); //如果存在该编号 if (dt.Rows.Count > 0) { //判断如果多个岗位资源存在,用户输入的只要在其中就行 for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["ur_resourcecode"].ToString() == iSourceCode) return true; } oErrorMessage = "用户不处于当前资源所属分组!"; } else oErrorMessage = "岗位资源编号错误或者未审核!"; } } else oErrorMessage = "用户不存在!"; return false; } public static bool CheckStepAttribute(string iCaller, string iSourceCode, out string oErrorMessage) { oErrorMessage = ""; string[] param = new string[] { iCaller, iSourceCode, oErrorMessage }; dh.CallProcedure("CS_CHECKSTEPATTRIBUTE", ref param); oErrorMessage = param[2]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null") return true; else return false; } public static bool CheckStepSNAndMacode(string iMakeCode, string iSourceCode, string iSN, string iUserCode, out string oMakeCode, out string oMsID, out string oErrorMessage) { oErrorMessage = ""; oMakeCode = ""; oMsID = ""; string[] param = new string[] { iMakeCode, iSourceCode, iSN, iUserCode, oMakeCode, oMsID, oErrorMessage }; dh.CallProcedure("CS_CHECKSTEPSNANDMACODE", ref param); oMakeCode = param[4]; oMsID = param[5]; oErrorMessage = param[6]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null") { return true; } else { if (!(User.CurrentStepCode == "Aging" || User.CurrentStepCode == "PKG")) { SetCheck set = new SetCheck("NG", Color.Red); BaseUtil.SetFormCenter(set); set.ShowDialog(); } return false; } } public static void DoCommandLog(string iCaller, string iUserCode, string iMakeCode, string iLineCode, string iSourceCode, string iOperate, string iResult, string iSncode, string iCheckno) { sql.Clear(); sql.Append("insert into commandlog(cl_id,cl_caller,cl_man,cl_date,cl_linecode,cl_sourcecode,cl_makecode,cl_operate,"); sql.Append("cl_result,cl_sncode,cl_code) values( commandlog_seq.nextval,:cl_caller,:iUserCode,sysdate,:iLineCode ,"); sql.Append(":iSourceCode ,:iMakeCode,:iOperate,:iResult,:iSncode,:iCheckno)"); dh.ExecuteSql(sql.ToString(), "insert", iCaller, iUserCode, iLineCode, iSourceCode, iMakeCode, iOperate, iResult, iSncode, iCheckno); } /// /// 获取工单的最近一条执行记录 /// /// /// /// /// public static bool GetMakeInfo(string iSnCode, out string oMakeCode, out string oStatus, out string oErrorMessage) { //取MakeProcess表中的执行记录ID最大的一个工单的号码 oMakeCode = ""; oErrorMessage = ""; oStatus = ""; DataTable dt = dh.getFieldsDataByCondition("MakeSerial", new string[] { "ms_makecode", "ms_status" }, "ms_id=(select max(ms_id) from makeserial where ms_sncode='" + iSnCode + "' and ms_status <> 2)"); if (dt.Rows.Count > 0) { oMakeCode = dt.Rows[0]["ms_makecode"].ToString(); oStatus = dt.Rows[0]["ms_status"].ToString(); } if (oMakeCode != "") return true; else { dt = (DataTable)dh.ExecuteSql("select msl_makecode from makesnlist left join make on msl_makecode=ma_code where msl_sncode='" + iSnCode + "' and msl_type='before' and ma_wccode='" + User.WorkCenter + "'", "select"); if (dt.Rows.Count > 0) { oMakeCode = dt.Rows[0]["msl_makecode"].ToString(); return true; } else { dt = (DataTable)dh.ExecuteSql("select msd_makecode from MAKESNRULEDETAIL left join make on msd_makecode=ma_code where msd_sncode='" + iSnCode + "' and msd_type='before' and ma_wccode='" + User.WorkCenter + "'", "select"); if (dt.Rows.Count > 0) { oMakeCode = dt.Rows[0]["msd_makecode"].ToString(); return true; } else { oErrorMessage = "序列号:" + iSnCode + " 未归属工单"; return false; } } } } /// /// 获取送检批次,根据不同的iOQCStep执行不同的操作,查询到有具体的信息时返回Form和Detail的两个DataTable /// iOQCStep 有四个固定参数 /// OQCSENDCHECK 生成送检批 /// OQCPLANMAINTAIN 抽样计划维护 /// OQCDATACOLLECTION 抽样数据采集 /// OQCRESULTDETERMINE 批结果判定 /// /// public static DataTable[] GetOQCBatch(string iSnCode, string iOutBoxCode, string iCheckNo, string iOQCStep, out string oErrorMessage) { oErrorMessage = ""; string SQL = ""; string ms_checkno = ""; DataTable dt = new DataTable(); if (iCheckNo != "") return GetBatch(iCheckNo, iOQCStep, out oErrorMessage); else if (iSnCode != "") { //如果返工批次为空则获取当前的批次 SQL = "select nvl(MS_REWORKCHECKNO,ms_checkno)ms_checkno from makeserial where ms_id=(select max(ms_id) from makeserial where ms_sncode='" + iSnCode + "' or ms_psn='" + iSnCode + "')"; dt = (DataTable)dh.ExecuteSql(SQL, "select"); if (dt.Rows.Count == 0) { oErrorMessage = "序列号" + iSnCode + "不存在"; return null; } else { if (dt.Rows[0]["ms_checkno"].ToString() == "") { oErrorMessage = "该序列号没有送检批次号"; return null; } else ms_checkno = dt.Rows[0]["ms_checkno"].ToString(); } } else if (iOutBoxCode != "") { SQL = "select ms_checkno from MES_PACKAGE_VIEW left join makeserial on v_barcode=ms_sncode where v_outboxcode='" + iOutBoxCode + "' "; dt = (DataTable)dh.ExecuteSql(SQL, "select"); if (dt.Rows.Count == 0) { oErrorMessage = "该箱号不存在"; return null; } else { if (dt.Rows[0]["ms_checkno"].ToString() == "") { oErrorMessage = "该箱号没有送检批次号"; return null; } else ms_checkno = dt.Rows[0]["ms_checkno"].ToString(); } } if (ms_checkno != "") { return GetBatch(ms_checkno, iOQCStep, out oErrorMessage); } else { oErrorMessage = "送检批次不存在"; return null; } } /// /// 第一个是Form的主表信息,第二个是Grid的信息 /// /// /// private static DataTable[] GetBatch(string iCheckNo, string iOQCStep, out string oErrorMessage) { DataTable Form = new DataTable(); DataTable Grid = new DataTable(); oErrorMessage = ""; switch (iOQCStep.ToUpper()) { case "OQCSENDCHECK": sql.Clear(); sql.Append("select obd_outboxcode,obd_id,obd_makecode,obd_sncode from OQCBatchdetail where obd_checkno = '" + iCheckNo + "' order by obd_sncode"); Grid = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); Form = (DataTable)dh.ExecuteSql("select ob_id,ob_status,ob_prodcode,ob_batchqty,ob_source,ob_checkno from OQCBatch where ob_checkno='" + iCheckNo + "'", "select"); if (Form.Rows.Count > 0) { if (/*Form.Rows[0]["ob_source"].ToString() == "新增" &&*/ Form.Rows[0]["ob_status"].ToString() == "ENTERING") { sql.Clear(); sql.Append("select ob_id,ob_status,ob_prodcode ma_prodcode,ob_batchqty,ob_source,ob_checkno,obd_id,obd_outboxcode,obd_makecode ma_code,count(1) cn from OQCBatch left join OQCBatchdetail "); sql.Append("on obd_obid = ob_id where ob_checkno ='" + iCheckNo + "' group by ob_id,ob_status,ob_prodcode,ob_batchqty,ob_source,ob_checkno,obd_outboxcode,obd_makecode,obd_id"); Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); } else oErrorMessage = "自动生成的抽检批次号不允许在该页面操作,或者该抽检批次号不是在录入状态"; } else oErrorMessage = "抽检批次" + iCheckNo + "不存在"; break; case "OQCPLANMAINTAIN": sql.Clear(); sql.Append("select ob_reworkcode,ob_prodcode,ob_maxngacceptqty,ob_id,ob_checkno,ob_projectcode,ob_nowcheckqty,ob_source,ob_remark,"); sql.Append("ob_status,pr_id,pr_detail,pr_kind,pr_manutype,pr_qualmethod,nvl(ob_aqlcode,pr_aql)ob_aqlcode from OQCBatch left join product on "); sql.Append("pr_code=ob_prodcode where ob_checkno='" + iCheckNo + "'"); Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); sql.Clear(); if (Form.Rows.Count > 0) { string pr_id; //判断状态是否是待检验 if (Form.Rows[0]["ob_status"].ToString() == "UNCHECK") { //判断送检方案是否为空 string qualmethod = ""; //第一原则送检方案为空 if (Form.Rows[0]["pr_qualmethod"].ToString() == "") { //判读第二原则送检方案为空 qualmethod = dh.getFieldDataByCondition("product left join productkind on pr_kind=pk_name", "pk_qualmethod", "pr_code='" + Form.Rows[0]["ob_prodcode"] + "'").ToString(); } //第一原则送检方案不为空 else { qualmethod = Form.Rows[0]["pr_qualmethod"].ToString(); } Form.Rows[0]["ob_projectcode"] = qualmethod; pr_id = dh.getFieldDataByCondition("QUA_Project", "pr_id", "pr_code = '" + qualmethod + "'").ToString(); sql.Clear(); sql.Append("select 1 choose,nvl(max(oi_id),0)oi_id,ci_code, ci_kind,nvl(max(oi_sampleqty),0) oi_sampleqty from QUA_PROJECT left join "); sql.Append(" QUA_ProjectDetail on pd_prid=pr_id left join QUA_CheckItem on pd_ciid=ci_id "); sql.Append("left join OQCITEMS on oi_checkno ='" + iCheckNo + "' and oi_projectcode='" + qualmethod + "' "); sql.Append("and oi_projectcode = pr_code and oi_checkkind = ci_kind where pr_code='" + qualmethod + "' group by ci_kind,ci_code"); Grid = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); } else { if (Form.Rows[0]["ob_status"].ToString().Contains("OK") || (Form.Rows[0]["ob_status"].ToString().Contains("NG") && Form.Rows[0]["ob_status"].ToString().Length < 4)) { oErrorMessage = "抽检批次" + iCheckNo + "检验完毕,不允许采集"; } else if (Form.Rows[0]["ob_status"].ToString() == "CHECKING") { oErrorMessage = "抽检批次" + iCheckNo + "处于检验中,无法维护抽样计划"; } else if (Form.Rows[0]["ob_status"].ToString() == "ENTERING") { oErrorMessage = "抽检批次" + iCheckNo + "处于未送检状态,请送检"; } } } else oErrorMessage = "抽检批次" + iCheckNo + "不存在"; break; case "OQCDATACOLLECTION": sql.Clear(); sql.Append("select ob_checkno,ob_makecode,ob_prodcode,ob_nowcheckqty,pr_detail,ob_ngqty,ob_okqty,"); sql.Append("ob_remark,ob_makecode,ob_status,ob_projectcode,ob_aqlcode,ob_maxngacceptqty from OQCBatch left join product on "); sql.Append("pr_code=ob_prodcode left join oqcitems on oi_checkno =ob_checkno and oi_projectcode =ob_projectcode where ob_checkno='" + iCheckNo + "'"); Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); //状态为UNCHECK或者CHECKING并且有抽样计划的才能操作 if (Form.Rows.Count > 0) { if (Form.Rows[0]["ob_projectcode"].ToString() == "" || !(Form.Rows[0]["ob_status"].ToString() != "UNCHECK" || Form.Rows[0]["ob_status"].ToString() != "CHECKING")) { if (Form.Rows[0]["ob_status"].ToString().Contains("OK") || (Form.Rows[0]["ob_status"].ToString().Contains("NG") && Form.Rows[0]["ob_status"].ToString().Length < 4)) { oErrorMessage = "抽检批次" + iCheckNo + "检验完毕,不允许采集"; } else if (Form.Rows[0]["ob_status"].ToString() == "ENTERING") { oErrorMessage = "抽检批次" + iCheckNo + "处于未送检状态,请送检"; } else if (Form.Rows[0]["ob_projectcode"].ToString() == "") { oErrorMessage = "抽检批次" + iCheckNo + "未维护抽样计划,请维护"; } //oErrorMessage = "状态为未检验或者送检中并且有抽样计划的才能操作"; } } else { oErrorMessage = "抽检批次" + iCheckNo + "不存在"; } break; case "OQCRESULTDETERMINE": sql.Clear(); sql.Append("select ob_remark Remark,ob_id,ob_aqlcode,ob_makecode,ob_status,ob_prodcode,(select max(oi_checkqty)from OQCItems where oi_checkno='" + iCheckNo + "') oi_checkqty,"); sql.Append("ob_nowcheckqty,nvl(ob_okqty,0) ob_okqty,nvl(ob_ngqty,0) ob_ngqty,ob_maxngacceptqty,ob_source,ob_checkno,ob_result from OQCBatch where ob_checkno='" + iCheckNo + "'"); Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); if (Form.Rows.Count == 0) { oErrorMessage = "抽检批次" + iCheckNo + "不存在"; } break; case "OQCCHECKNOSPLIT": sql.Clear(); sql.Append("select ob_checkno,ob_makecode,ob_prodcode,ob_nowcheckqty,pr_detail,ob_ngqty,ob_okqty,"); sql.Append("ob_remark,ob_makecode,ob_status,ob_projectcode,ob_aqlcode,ob_maxngacceptqty from OQCBatch left join product on "); sql.Append("pr_code=ob_prodcode left join oqcitems on oi_checkno =ob_checkno and oi_projectcode =ob_projectcode where ob_checkno='" + iCheckNo + "' and ob_status='UNCHECK'"); Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); //状态为UNCHECK或者CHECKING并且有抽样计划的才能操作 if (Form.Rows.Count > 0) { sql.Clear(); sql.Append("select obd_outboxcode,obd_builddate,obd_makecode,obd_sncode from oqcbatchdetail where obd_checkno='" + Form.Rows[0]["ob_checkno"].ToString() + "'"); Grid = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); } else oErrorMessage = "抽检批次" + iCheckNo + "不存在或者状态不处于待检验"; break; default: break; } return new DataTable[] { Form, Grid }; } public static bool CartonBoxStepPass(string iMakeCode, string iSourceCode, string iCartonBox, string iUserCode, string iResult, out string oErrorMessage) { DataTable dt = (DataTable)dh.ExecuteSql("select ms_status,V_BARCODE,V_MAKECODE,ms_craftcode,ms_prodcode from mes_package_view left join makeserial on V_MAKECODE=ms_makecode and v_barcode = ms_sncode where V_OUTBOXCODE='" + iCartonBox + "'", "select"); //获取当前资源的工序 string stepcode = dh.getFieldDataByCondition("source", "sc_stepcode", "sc_code='" + iSourceCode + "'").ToString(); string Prcode = dt.Rows[0]["ms_prodcode"].ToString(); string Craftcode = dt.Rows[0]["ms_craftcode"].ToString(); string ifoqc = dh.getFieldDataByCondition("craft left join craftdetail on cd_crid=cr_id", "nvl(cd_ifoqc,0) cd_ifoqc", "cr_prodcode='" + Prcode + "' and cr_code='" + Craftcode + "' and cd_stepcode='" + stepcode + "'").ToString(); oErrorMessage = ""; if (ifoqc == "0") { for (int i = 0; i < dt.Rows.Count; i++) { string ms_status = dt.Rows[i]["ms_status"].ToString(); string sn = dt.Rows[i]["V_BARCODE"].ToString(); string makecode = dt.Rows[i]["V_MAKECODE"].ToString(); if (ms_status != "2") { CS_SetResult(makecode, iSourceCode, sn, iUserCode, iResult, out oErrorMessage); } } } if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null" || oErrorMessage.Contains("AFTERSUCCESS")) return true; else return false; } /// /// 箱号过站的公用方法 /// /// /// /// /// /// public static bool OutBoxStepPass(string iOutBoxCode, string iMakeCode, string iSourceCode, string iUserCode, string iResult, string iBoxType, out string oErrorMessage) { oErrorMessage = ""; string[] param = new string[] { iOutBoxCode, iMakeCode, iSourceCode, iUserCode, iResult, iBoxType, oErrorMessage }; dh.CallProcedure("CS_CARTONBOXSTEPRESULT", ref param); oErrorMessage = param[6]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null") return true; else return false; } /// /// 大箱栈板解除装箱 /// public static void OutBoxDrawStepPass(string iOutBoxCode, string iMakeCode, string iSourceCode) { string CurrentStep = ""; string LineCode = ""; string CurrentStepName = ""; List ExeSQL = new List(); GetStepCodeAndNameAndLineBySource(iSourceCode, ref CurrentStep, ref CurrentStepName, ref LineCode); //判断是否是线外采集 string unfinpack = dh.getFieldDataByCondition("Line", "nvl(li_allowUnFinPack,0)", "li_code='" + User.UserLineCode + "'").ToString(); //更新工序会上一执行步骤 if (unfinpack != "" && unfinpack != "0") { sql.Clear(); sql.Append("merge into makeserial using mes_package_view on (v_outboxcode='" + iOutBoxCode + "' and ms_sncode="); sql.Append("v_barcode and ms_makecode=v_makecode) when matched then update set ms_nextstepcode=ms_nextstepcode"); sql.Append(",ms_status=1,ms_sccode='" + iSourceCode + "' "); } else { sql.Clear(); sql.Append("merge into makeserial using mes_package_view on (v_outboxcode='" + iOutBoxCode + "' and ms_sncode="); sql.Append("v_barcode and ms_makecode=v_makecode) when matched then update set ms_nextstepcode=ms_stepcode"); sql.Append(",ms_status=1,ms_sccode='" + iSourceCode + "' "); } ExeSQL.Add(sql.ToString()); //更新完工数量 ExeSQL.Add("update make set ma_madeqty=(select count(1) from makeserial where ms_makecode='" + iMakeCode + "' and ms_status=2) where ma_code='" + iMakeCode + "'"); //删除StepPassed数据 sql.Clear(); sql.Append("delete from steppassed where sp_sncode in (select v_barcode from mes_package_view where v_outboxcode='" + iOutBoxCode + "') "); sql.Append("and sp_makecode='" + iMakeCode + "' and sp_stepcode='" + CurrentStep + "'"); ExeSQL.Add(sql.ToString()); //更新大箱或栈板的母箱编号为空 ExeSQL.Add("update package set pa_mothercode='' where pa_outboxcode in(select PD_INNERBOXCODE from package left join packagedetail on pa_id=pd_paid where pa_outboxcode='" + iOutBoxCode + "')"); //删除从表明细 ExeSQL.Add("delete from packagedetail where pd_paid=(select pa_id from package where pa_outboxcode='" + iOutBoxCode + "')"); //设置大箱或栈板的已装数量为0 ExeSQL.Add("update package set pa_totalqty=0,pa_status=0,pa_currentqty=0,pa_packageqty=0 where pa_outboxcode='" + iOutBoxCode + "'"); dh.ExecuteSQLTran(ExeSQL.ToArray()); } /// /// 大箱栈板解除装箱 /// public static void OutBoxDrawStepPass(string iOutBoxCode, string iInnerBoxCode, string iMakeCode, string iSourceCode) { string CurrentStep = ""; string LineCode = ""; string CurrentStepName = ""; List ExeSQL = new List(); GetStepCodeAndNameAndLineBySource(iSourceCode, ref CurrentStep, ref CurrentStepName, ref LineCode); //更新工序会上一执行步骤 sql.Clear(); sql.Append("update makeserial set ms_nextstepcode=ms_stepcode,MS_STATUS=1,ms_sccode='" + iSourceCode + "' "); sql.Append("where ms_sncode in (select v_barcode from mes_package_view where v_outboxcode='" + iOutBoxCode + "')"); ExeSQL.Add(sql.ToString()); //更新完工数量 ExeSQL.Add("update make set ma_madeqty=(select count(1) from makeserial where ms_makecode='" + iMakeCode + "' and ms_status=2) where ma_code='" + iMakeCode + "'"); //删除StepPassed数据 sql.Clear(); sql.Append("delete from steppassed where sp_sncode in (select v_barcode from mes_package_view where v_outboxcode='" + iOutBoxCode + "') "); sql.Append("and sp_makecode='" + iMakeCode + "' and sp_stepcode='" + CurrentStep + "'"); ExeSQL.Add(sql.ToString()); //更新大箱或栈板的母箱编号为空 ExeSQL.Add("update package set pa_mothercode='' where pa_outboxcode in(select PD_INNERBOXCODE from package left join packagedetail on pa_id=pd_paid where pa_outboxcode='" + iOutBoxCode + "')"); //删除从表明细 ExeSQL.Add("delete from packagedetail where pd_paid=(select pa_id from package where pa_outboxcode='" + iOutBoxCode + "')"); //设置大箱或栈板的已装数量为0 ExeSQL.Add("update package set pa_totalqty=0,pa_status=0,pa_currentqty=0,pa_packageqty=0 where pa_outboxcode='" + iOutBoxCode + "'"); dh.ExecuteSQLTran(ExeSQL.ToArray()); } /// /// 记录操作日志 /// /// /// /// /// /// public static void InsertMakeProcess(string iSnCode, string iMakeCode, string iSourceCode, string iMPKind, string result, string iUserCode) { string CurrentStep = ""; string LineCode = ""; string CurrentStepName = ""; GetStepCodeAndNameAndLineBySource(iSourceCode, ref CurrentStep, ref CurrentStepName, ref LineCode); sql.Clear(); sql.Append("insert into MakeProcess(mp_id,mp_makecode,mp_maid, mp_mscode,mp_sncode,mp_stepcode,mp_stepname,"); sql.Append("mp_craftcode,mp_craftname,mp_kind,mp_result,mp_indate,mp_inman,mp_wccode,mp_linecode,mp_sourcecode,mp_snstatus,mp_sncheckno,mp_snoutboxcode)"); sql.Append("select MakeProcess_seq.nextval, ma_code,ma_id,ms_code,ms_sncode,'" + CurrentStep + "','" + CurrentStepName + "',"); sql.Append("ms_craftcode,cr_name,'" + iMPKind + "','" + result + "',sysdate,'" + iUserCode + "',ma_wccode,'" + LineCode + "','" + iSourceCode + "',"); sql.Append("ms_status,ms_checkno,ms_outboxcode from make left join makeserial on ms_makecode=ma_code left join step on st_code=ms_stepcode left join craft on ms_craftcode=cr_code and cr_prodcode=ma_prodcode "); sql.Append("where ms_sncode='" + iSnCode + "' and ma_code='" + iMakeCode + "' and st_code='" + CurrentStep + "'"); dh.ExecuteSql(sql.ToString(), "insert"); } /// /// /// /// 序列号的工单号 /// 界面上的工单号 /// 是否需要切换工单提醒 /// public static bool CheckDiffMakeCodeBeforeStepCheck(string iSN, string iMakeCode, bool iChangeMakeCodeNote, out string oMakeCode, out string oErrorMessage) { string oStatus = ""; GetMakeInfo(iSN, out oMakeCode, out oStatus, out oErrorMessage); oErrorMessage = ""; bool NoteAlready = false; if (iChangeMakeCodeNote) { if (iMakeCode != oMakeCode && oMakeCode != "" && iMakeCode != "" && oStatus != "2") { string ChangeMakeCode = System.Windows.Forms.MessageBox.Show("序列号" + iSN + "所属工单不同,是否切换?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString(); //如果选择不切换赋值当前界面工单 if (ChangeMakeCode != "Yes") { oErrorMessage = "请重新采集序列号"; NoteAlready = true; } else { NoteAlready = true; } } else { oMakeCode = iMakeCode; } } else { if (oMakeCode == "" || (oMakeCode != "" && oMakeCode == iMakeCode)) { oMakeCode = iMakeCode; } } return (oErrorMessage == "" || oErrorMessage == null); } /// /// 校验方法之后的检测 /// /// /// /// /// public static bool CheckDiffMakeCodeAfterStepCheck(string iSN, string iSNMakecode, bool iChangeMakeCodeNote, bool NoteAlready, Control ctl, out string oErrMessage) { oErrMessage = ""; if (iChangeMakeCodeNote && !NoteAlready) { if (iSNMakecode != ctl.Text && ctl.Text != "") { string ChangeMakeCode = System.Windows.Forms.MessageBox.Show("序列号" + iSN + "所属工单不同,是否切换?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString(); //如果选择不切换赋值当前界面工单 if (ChangeMakeCode == "Yes") { ctl.Text = iSNMakecode; } else { oErrMessage = "请重新采集序列号"; } } } return (oErrMessage == "" || oErrMessage == null); } public static bool OQCBatchJudge(string iCheckno, string iSourceCode, string iResult, string iRework, string iUserCode, string iRemark, out string oReworkCode, out string oErrorMessage) { oReworkCode = ""; oErrorMessage = ""; string[] param = new string[] { iCheckno, iSourceCode, iResult, iRework, iUserCode, iRemark, oReworkCode, oErrorMessage }; dh.CallProcedure("CS_OQCRESULTJUDGE", ref param); oReworkCode = param[6]; oErrorMessage = param[7]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null") return true; else return false; } public static String GetNextStep(string iCraftCode, string iStepCode, string iPrCode) { sql.Clear(); sql.Append("select cd_nextstepcode from craft left join craftdetail on cr_id =cd_crid where "); sql.Append("cr_code='" + iCraftCode + "' and cr_prodcode='" + iPrCode + "' and cd_stepcode='" + iStepCode + "'"); DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); if (dt.Rows.Count > 0) { return dt.Rows[0][0].ToString(); } return ""; } public static bool SetStepFinish(string iMakeCode, string iSourceCode, string iSN, string iMPKind, string iResult, string iUserCode, out string oErrorMessage) { oErrorMessage = ""; string StepCode = dh.getFieldDataByCondition("Makeserial", "ms_stepcode", "ms_sncode='" + iSN + "' and ms_makecode='" + iMakeCode + "'").ToString(); string CurrentStep = GetStepCodeBySource(iSourceCode); if (StepCode == CurrentStep) { InsertMakeProcess(iSN, iMakeCode, iSourceCode, iMPKind, iResult, iUserCode); return true; } else { return CS_SetResult(iMakeCode, iSourceCode, iSN, iUserCode, iResult, out oErrorMessage); } } public static bool SetStepResult(string iMakeCode, string iSourceCode, string iSN, string iMPKind, string iResult, string iUserCode, out string oErrorMessage) { bool result = CS_SetResult(iMakeCode, iSourceCode, iSN, iUserCode, iResult, out oErrorMessage); if (result) { SetCheck set = new SetCheck("OK", Color.Green); BaseUtil.SetFormCenter(set); set.ShowDialog(); } else { SetCheck set = new SetCheck("NG", Color.Red); BaseUtil.SetFormCenter(set); set.ShowDialog(); } return result; } public static bool CS_SetResult(string iMakeCode, string iSourceCode, string iSN, string iUserCode, string iResult, out string oErrorMessage) { oErrorMessage = ""; string[] param = new string[] { iMakeCode, iSourceCode, iSN, iUserCode, iResult, oErrorMessage }; dh.CallProcedure("CS_SETSTEPRESULT", ref param); oErrorMessage = param[5]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null" || oErrorMessage.Contains("AFTERSUCCESS")) return true; else return false; } /// /// 设置测试结果 /// /// /// /// /// /// /// /// /// public static bool SetTestResult(string iMakeCode, string iSourceCode, string iSN, string iMPKind, string iResult, string iUserCode, out string oErrorMessage) { return SetStepFinish(iMakeCode, iSourceCode, iSN, iMPKind, iResult, iUserCode, out oErrorMessage); } /// /// /// /// public static string GetPiInoutCode(string iCaller, string iType) { string Code = ""; string[] param = new string[] { iCaller, iType, Code }; dh.CallProcedure("SP_GETMAXNUMBER", ref param); return param[2]; } /// /// 执行不良信息采集 /// /// /// /// /// /// /// /// /// public static bool SetTestNGDetail(string iSnCode, string iMakeCode, string iUserCode, string iSourceCode, string iResult, string[] iBadGroupCode, string[] iBadCode, string[] iBadGroupName, string[] iBadName, string[] iBadRemark, out string oErrorMessage) { oErrorMessage = ""; string StepCode = ""; string StepName = ""; string ScanType = ""; string LineCode = ""; if (iResult == "" || iResult == null) iResult = "检查未通过"; GetStepCodeAndNameAndTypAndLineCodeBySource(iSourceCode, ref StepCode, ref StepName, ref ScanType, ref LineCode); if (ScanType == "REJUDGE") { AutoPassJudge(iSnCode, iMakeCode, iSourceCode, "", LineCode, "", "-1"); } string dutystepcode = dh.getFieldDataByCondition("step", "nvl(ST_DUTYSTEPCODE,st_code)", "st_code = '" + StepCode + "'").ToString(); string dutyemcode = dh.getFieldDataByCondition("steppassed", "sp_inman", "sp_sncode = '" + iSnCode + "' and sp_stepcode = '" + dutystepcode + "' and sp_makecode = '" + iMakeCode + "' order by sp_id desc").ToString(); string asemcode = dh.getFieldDataByCondition("steppassed", "sp_inman", "sp_sncode = '" + iSnCode + "' and sp_stepcode = 'Assing' and sp_makecode = '" + iMakeCode + "' order by sp_id desc").ToString(); if (dutyemcode == "") { dutystepcode = StepCode; dutyemcode = iUserCode; } sql.Clear(); sql.Append("insert into makebad(mb_id,mb_makecode,mb_mscode,mb_sncode,mb_inman,mb_indate,mb_stepcode"); sql.Append(",mb_sourcecode,mb_badcode,mb_bgcode,mb_badtable,mb_status,mb_badremark,mb_bgname,mb_badname,mb_type,MB_DUTYSTEPCODE,MB_DUTYEMCODE,MB_ASEMCODE)"); sql.Append("select makebad_seq.nextval,ma_code,ms_code,ms_sncode,'" + iUserCode + "',sysdate,'" + StepCode + "','" + iSourceCode + "',:bc_code,:bg_code,'',"); sql.Append("'0',:bc_remark,:bg_name,:bc_name,'Client','" + dutystepcode + "','" + dutyemcode + "','"+ asemcode + "' from make left join makeSerial on ms_makecode=ma_code "); sql.Append(" where ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'"); if (iBadGroupCode.Length > 0) { dh.BatchInsert(sql.ToString(), new string[] { "bc_code", "bg_code", "bc_remark", "bg_name", "bc_name" }, iBadCode, iBadGroupCode, iBadRemark, iBadGroupName, iBadName); } //更新序列号已经采集的工序 ms_paststep 已采集数据,更新下一工序 //如果存在送检批号则进行删除 if (dh.CheckExist("oqcbatchdetail", "obd_sncode='" + iSnCode + "'")) { string checkno = dh.getFieldDataByCondition("oqcbatchdetail", "obd_checkno", "obd_sncode='" + iSnCode + "'").ToString(); string ifng = dh.getFieldDataByCondition("oqcbatchdetail", "obd_ifng", "obd_sncode='" + iSnCode + "'").ToString(); if (ifng == "-1") { dh.ExecuteSql("delete OQCITEMSAMPLES where ois_sncode = '" + iSnCode + "'", "select"); dh.ExecuteSql("update oqcbatch set ob_nowcheckqty=ob_nowcheckqty-1,ob_ngqty = ob_ngqty -1 where ob_checkno='" + checkno + "'", "update"); } dh.ExecuteSql("delete from oqcbatchdetail where obd_sncode='" + iSnCode + "'", "delete"); } //之前保存的不良就不再调用 DataTable dt = dh.getFieldsDataByCondition("makeserial", new string[] { "ms_stepcode", "nvl(ms_ifrework,0)ms_ifrework", "ms_status" }, "ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'"); if (dt.Rows.Count > 0) { string ifrework = dt.Rows[0]["ms_ifrework"].ToString(); string ms_stepcode = dt.Rows[0]["ms_stepcode"].ToString(); string ms_status = dt.Rows[0]["ms_status"].ToString(); if (ms_status == "2") { dh.ExecuteSql("delete from steppassed where sp_sncode='" + iSnCode + "' and sp_makecode='" + iMakeCode + "' and sp_stepcode='" + StepCode + "'", "delete"); dh.UpdateByCondition("make", "ma_madeqty=nvl(ma_madeqty,0)-1", "ma_code='" + iMakeCode + "'"); } if (ms_stepcode == StepCode) { if (ifrework == "0") dh.UpdateByCondition("makeserial", "ms_status=3,ms_nextstepcode=''", "ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'"); else dh.UpdateByCondition("makeserial", "ms_reworkstatus=3,ms_nextstepcode=''", "ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'"); } else { if (ifrework == "0") dh.UpdateByCondition("makeserial", "ms_nextstepcode='',ms_status=3", "ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "' "); else dh.UpdateByCondition("makeserial", "ms_nextstepcode='',ms_paststep = ms_paststep ||'," + StepCode + "',ms_reworkstatus=3", "ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'"); SetTestResult(iMakeCode, iSourceCode, iSnCode, "不良采集", "NG", iUserCode, out oErrorMessage); } } return true; } /// /// 判断是否扣料工序,执行扣料,执行上料表记录 /// /// /// /// /// public static bool SetCollectionFinish(string iSnCode, string iMakeCode, string iUserName, string iSourceCode, out string oErrorMessage) { string StepCode = ""; string StepName = ""; string LineCode = ""; oErrorMessage = ""; GetStepCodeAndNameAndLineBySource(iSourceCode, ref StepCode, ref StepName, ref LineCode); if (StepCode == "" && StepName == "") { oErrorMessage = "当前岗位资源找不到对应工序,请先进行维护"; return false; } sql.Clear(); sql.Append("select nvl(cd_ifreduce,0) cd_ifreduce from craft left join craftdetail on cd_crid=cr_id "); sql.Append("where cr_code=(select ma_craftcode from makeserial left join make on ma_code = ms_makecode "); sql.Append("where ms_sncode = '" + iSnCode + "' and ms_makecode='" + iMakeCode + "') and cd_stepcode='" + StepCode + "'"); DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); sql.Clear(); if (dt.Rows.Count > 0) { string cd_ifreduce = dt.Rows[0][0].ToString(); if (cd_ifreduce == "-1") { sql.Clear(); sql.Append("select dsl_location,dsl_table,max(dsl_baseqty) baseqty from devsmtlocation where dsl_makecode='" + iMakeCode + "' and "); sql.Append("dsl_linecode='" + LineCode + "' and dsl_status=0 and dsl_remainqty>0 and dsl_invalidtime is null group by dsl_location,dsl_table"); dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); for (int i = 0; i < dt.Rows.Count; i++) { sql.Clear(); sql.Append("select dsl_id,dsl_remainqty from devsmtlocation where dsl_makecode='" + iMakeCode + "' and dsl_linecode='" + LineCode + "' "); sql.Append("and dsl_status=0 and dsl_remainqty>0 and dsl_invalidtime is null and rownum<3 order by dsl_id asc "); DataTable dt1 = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); for (int j = 0; j < dt1.Rows.Count; j++) { //外层循环的值dt double baseqty = (double)dt.Rows[i]["baseqty"]; //内层循环的值dt1 double dsl_remainqty = (double)dt1.Rows[j]["dsl_remainqty"]; string dsl_id = dt1.Rows[j]["dsl_id"].ToString(); if (baseqty > 0) { if (dsl_remainqty <= baseqty) { sql.Clear(); sql.Append("update devsmtlocation set dsl_remainqty=0,dsl_invalidtime =sysdate, dsl_validtime =(case when dsl_validtime "); sql.Append("is null then sysdate else dsl_validtime end),dsl_status=-1 where dsl_id=" + dsl_id); dh.ExecuteSql(sql.ToString(), "update"); baseqty -= dsl_remainqty; } else { sql.Clear(); sql.Append("update devsmtlocation set dsl_remainqty=dsl_remainqty-NVL(dsl_baseqty,0),DSL_INVALIDTIME=(case when"); sql.Append("dsl_validtime is null then sysdate else dsl_validtime end) where dsl_id=" + dsl_id); dh.ExecuteSql(sql.ToString(), "update"); baseqty = 0; } } else dh.ExecuteSql("update devsmtlocation set DSL_INVALIDTIME=sysdate where dsl_id=" + dsl_id, "update"); } } sql.Clear(); sql.Append("insert into ReduceStepRecord (rsd_id,rsd_macode,rsd_maprodcode,rsd_table,rsd_sncode,rsd_linecode,rsd_sourcecode) select "); sql.Append("ReduceStepRecord_SEQ.nextval,'" + iMakeCode + "',ma_prodcode,'','" + iSnCode + "','" + LineCode + "','" + iSourceCode + "' "); sql.Append("from make where ma_code='" + iMakeCode + "'"); dh.ExecuteSql(sql.ToString(), "insert"); } return true; } else { return false; } } /// /// 执行下料操作 /// /// /// /// /// /// /// public static bool SetMaterialDown(string iSnCode, string iBarCode, string iSourceCode, string iCurrentStep, string iUserName, out string oErrorMessage) { //序列号不为空的时候 oErrorMessage = ""; DataTable dt; //对序列号进行验证 dt = (DataTable)dh.ExecuteSql("select ms_status,ms_stepcode,ms_nextstepcode from makeserial where ms_sncode='" + iBarCode + "'", "select"); if (dt.Rows.Count > 0) { string ms_status = dt.Rows[0]["ms_status"].ToString(); string ms_stepcode = dt.Rows[0]["ms_stepcode"].ToString(); string ms_nextstepcode = dt.Rows[0]["ms_nextstepcode"].ToString(); if (ms_status == "1" && ms_stepcode != iCurrentStep) oErrorMessage = "当前工序不是" + iCurrentStep + ""; else if (ms_status == "0" && ms_stepcode != iCurrentStep) oErrorMessage = "当前工序不是" + iCurrentStep + ""; else if (ms_status == "2" && ms_nextstepcode != iCurrentStep) oErrorMessage = "该序列号已经包装"; else { dt = (DataTable)dh.ExecuteSql("select * from craftmaterial where cm_sncode='" + iSnCode + "'", "select"); if (dt.Rows.Count > 0) oErrorMessage = "请采集需要下料的序列号"; else oErrorMessage = "该序列号未上料,无需下料"; } } if (oErrorMessage == "") { dt = (DataTable)dh.ExecuteSql("select cm_id,cm_stepcode,ms_makecode,cm_mccode from craftmaterial left join makeserial on cm_makecode=ms_makecode and cm_sncode=ms_sncode where ms_sncode='" + iSnCode + "' and cm_barcode='" + iBarCode + "'", "select"); if (dt.Rows.Count > 0) { string cm_id = dt.Rows[0]["cm_id"].ToString(); string ms_macode = dt.Rows[0]["ms_makecode"].ToString(); string cm_stepcode = dt.Rows[0]["cm_stepcode"].ToString(); string cm_mccode = dt.Rows[0]["cm_mccode"].ToString(); dh.ExecuteSql("delete from Craftmaterial where cm_id=" + cm_id, "delete"); InsertMakeProcess(ms_macode, iSnCode, iSourceCode, "下料操作", "下料成功", iUserName); int count = dh.getRowCount("craftMaterial", "cm_mccode='" + cm_mccode + "' and cm_stepcode='" + cm_stepcode + "' and cm_sncode='" + iSnCode + "'"); if (count == 0) dh.UpdateByCondition("makecraftdetail ", "mcd_inqty=mcd_inqty-1,mcd_outqty=mcd_outqty-1,mcd_okqty = mcd_okqty - 1", "mcd_mccode='" + cm_mccode + "' and mcd_stepcode='" + cm_stepcode + "'"); } return true; } else return false; } public static void CollectRemarkInf(string iSN, string iECN, string iSoftVersion, string iMaCode, string iPrCode, string iRemark) { sql.Clear(); sql.Append("insert into SNRELATIONINFORECORD(SIR_ID,SIR_SNCODE,SIR_MSCODE,SIR_ECNCODE,SIR_SOFTVER,"); sql.Append("SIR_LINECODE,SIR_SOURCECODE,SIR_STEPCODE,SIR_MACODE,SIR_PRODCODE,SIR_INMAN,SIR_INDATE,sir_firstsn,sir_remark) select "); sql.Append("SNRELATIONINFORECORD_SEQ.nextval,'" + iSN + "',ms_code,'" + iECN + "','" + iSoftVersion + "',"); sql.Append("'" + User.UserLineCode + "','" + User.UserSourceCode + "','" + User.CurrentStepCode + "','" + iMaCode + "','" + iPrCode + "',"); sql.Append("'" + User.UserCode + "',sysdate,ms_firstsn,'" + iRemark + "' from makeserial where ms_sncode='" + iSN + "' and ms_makecode='" + iMaCode + "'"); dh.ExecuteSql(sql.ToString(), "insert"); } /// /// 获取执行步骤代码,名称和线别 /// /// /// /// /// private static void GetStepCodeAndNameAndLineBySource(string Source, ref string StepCode, ref string StepName, ref string LineCode) { DataTable dt = dh.getFieldsDataByCondition("source", new string[] { "sc_stepcode", "sc_stepname", "sc_linecode" }, "sc_code='" + Source + "'"); if (dt.Rows.Count > 0) { StepCode = dt.Rows[0]["sc_stepcode"].ToString(); StepName = dt.Rows[0]["sc_stepname"].ToString(); LineCode = dt.Rows[0]["sc_linecode"].ToString(); } } /// /// 获取步骤代码和名称 /// /// /// /// private static void GetStepCodeAndNameAndTypAndLineCodeBySource(string Source, ref string StepCode, ref string StepName, ref string ScanType, ref string LineCode) { DataTable dt = dh.getFieldsDataByCondition("source", new string[] { "sc_scantype", "sc_stepcode", "sc_stepname", "sc_linecode" }, "sc_code='" + Source + "'"); if (dt.Rows.Count > 0) { StepCode = dt.Rows[0]["sc_stepcode"].ToString(); StepName = dt.Rows[0]["sc_stepname"].ToString(); ScanType = dt.Rows[0]["sc_scantype"].ToString(); LineCode = dt.Rows[0]["sc_linecode"].ToString(); } } /// /// 获取步骤代码 /// /// /// private static string GetStepCodeBySource(string Source) { return dh.getFieldDataByCondition("source", "sc_stepcode", "sc_code='" + Source + "'").ToString(); } /// /// 获取箱号 /// /// 物料主表的ID /// 管控类型 /// public static string GetOutBoxCode(string Caller, string iMakeCode, string iProdCode, string iUserCode) { string BoxCode = ""; string[] param = new string[] { Caller, iMakeCode, iProdCode, iUserCode, BoxCode }; dh.CallProcedure("SP_GETPACKORPALLETCODE", ref param); return param[4]; } /// /// 获取老化编号 /// /// public static string GetAGCode() { string BoxCode = ""; string[] param = new string[] { BoxCode }; dh.CallProcedure("SP_GETAGCODE", ref param); return param[0]; } public static bool CheckSNBeforeLoad(string iMakeCode, string iSN, string iFSonCode, string iSonCode, string iRule, string iPrefix, string iLength, string iIfRepeat, string iChecksalecode, out string ErrMessage) { DataTable dt; ErrMessage = ""; switch (iRule) { case "TSN": dt = (DataTable)dh.ExecuteSql("select ms_id,ms_prodcode,ms_nextmacode,ms_salecode,ms_downstatus from makeserial where ms_sncode='" + iSN + "' and ms_makecode<>'" + iMakeCode + "' and ms_status=2 order by ms_id desc", "select"); if (dt.Rows.Count > 0) { if (dt.Rows[0]["ms_downstatus"].ToString() != "0") { ErrMessage = "序列号:" + iSN + "已下地,请先取消下地"; return false; } if (dt.Rows[0]["ms_nextmacode"].ToString() != "") { ErrMessage = "序列号:" + iSN + "已被工单" + dt.Rows[0]["ms_nextmacode"].ToString() + "使用"; return false; } if ((dt.Rows[0]["ms_salecode"].ToString() != dh.getFieldDataByCondition("make", "ma_salecode", "ma_code='" + iMakeCode + "'").ToString()) && iChecksalecode != "0") { ErrMessage = "序列号对应销售订单与工单不符"; return false; } //ms_salecode是否等于工单的SaleCode if (iSonCode != dt.Rows[0]["ms_prodcode"].ToString()) { ErrMessage = "序列号对应的物料不是:" + iSonCode; return false; } else { return true; } } else ErrMessage = "序列号" + iSN + "不存在"; break; case "BARCODE": if (iIfRepeat != "-1") { //判定条码是否已经上料了 dt = (DataTable)dh.ExecuteSql("select cm_barcode from craftmaterial where cm_barcode='" + iSN + "' and cm_status=0", "select"); if (dt.Rows.Count > 0) { ErrMessage = "条码" + iSN + "已经上料"; return false; } } dt = (DataTable)dh.ExecuteSql("select bar_prodcode,bar_code from barcode where bar_code='" + iSN + "'", "select"); if (dt.Rows.Count > 0) { string bar_prodcode = dt.Rows[0]["bar_prodcode"].ToString(); if (!iFSonCode.Contains(bar_prodcode)) { if (!iSonCode.Contains(bar_prodcode)) { ErrMessage = "用户条码号对应的物料不是:" + iSonCode; } else { ErrMessage = bar_prodcode; return true; } } else { ErrMessage = bar_prodcode; return true; } } else ErrMessage = "条码" + iSN + "不存在"; break; case "RULE": if (iIfRepeat != "-1") { dt = (DataTable)dh.ExecuteSql("select cm_barcode from craftmaterial where cm_barcode='" + iSN + "' and cm_status=0", "select"); if (dt.Rows.Count > 0) { ErrMessage = "条码" + iSN + "已经上料"; return false; } } if (iFSonCode == "LT.41.133.001A") { dt = (DataTable)dh.ExecuteSql("select * from ( select count(1) cn from CRAFTMATERIAL where cm_barcode='" + iSN + "' and cm_status = 0 ) where cn>=100", "select"); if (dt.Rows.Count > 0) { ErrMessage = "条码" + iSN + "所属物料" + iFSonCode + ",已使用100次"; return false; } } //int sp_length = int.Parse(iLength != "" ? iLength : "0"); //若有多个,以|分割 if (iPrefix == "") { ErrMessage = "未维护物料规则"; return false; } string[] pres = iPrefix.Split('|'); bool f = false; for (int i = 0; i < pres.Length; i++) { if (pres[i] == "" ? true : iSN.Contains(pres[i])) { //满足其中一条即可 f = true; break; } } if (f) { string[] lengths = iLength.Split('|'); if (lengths.Length == 0) return true; else { for (int i = 0; i < lengths.Length; i++) { if (int.Parse(lengths[i] != "" ? lengths[i] : "0") == iSN.Length || int.Parse(lengths[i] != "" ? lengths[i] : "0") == 0) { return true; } } } ErrMessage = iSN + "长度不匹配"; } else ErrMessage = iSN + "前缀不匹配"; break; default: break; } return false; } public static bool Packing(string iSN, string iOutBoxCode, bool iAutoNew, string iType, string iSource, string iUser, string iStandarqty, bool iInOrOut, out string oOutBoxCode, out string oErrorMessage) { oErrorMessage = ""; oOutBoxCode = ""; string[] param = new string[] { iSN, iOutBoxCode, iAutoNew ? "Y" : "N", iType, iSource, iUser, iStandarqty, iInOrOut ? "OUT" : "IN", oOutBoxCode, oErrorMessage }; dh.CallProcedure("CS_PACKCARTON", ref param); oOutBoxCode = param[8]; oErrorMessage = param[9]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null") return true; else return false; } public static void RecordProdWeight(string iSN, string iType, float iWeight, string iUnit, string iLineCode, string iPrCode, string iSource, string iUser) { //记录重量 sql.Clear(); sql.Append("insert into weightlog(wl_id,wl_type,wl_scancode,wl_weight,wl_unit,wl_linecode,"); sql.Append("wl_prodcode,wl_sccode,wl_indate,wl_inman) values (weightlog_seq.nextval,:wl_type,:wl_scancode,"); sql.Append(":wl_weight,:wl_unit,:wl_linecode,:wl_prodcode,:wl_sccode,sysdate,:wl_inman)"); dh.ExecuteSql(sql.ToString(), "insert", iType, iSN, iWeight, iUnit, iLineCode, iPrCode, iSource, iUser); } public static bool CheckUpdate() { string version = BaseUtil.GetCacheData("Version").ToString(); DataHelper dh = new DataHelper(); string LastVersion = dh.getFieldDataByCondition("configs", "code", "caller='CSUPDATE'").ToString(); if (version == LastVersion || version == "" || LastVersion == "") { return false; } else { BaseUtil.SetCacheData("Version", LastVersion); return true; } } /// /// 小箱装大箱的包装规则判断 /// /// /// /// /// /// /// /// /// public static Boolean CheckPackRule(string packrule, string pa_outboxcode, string outboxcode, string pa_makecode, string pa_salecode, string pa_prodcode, string type, out string error) { //按工单核对装箱 switch (packrule.ToUpper()) { case "MAKE": string makecode = dh.getFieldDataByCondition("package", "pa_makecode", "pa_outboxcode='" + outboxcode + "'").ToString(); if (makecode != pa_makecode && pa_makecode != "") { error = ">>当前箱" + outboxcode + "对应工单号" + makecode + "和所装" + type + "号" + pa_outboxcode + "对应工单" + pa_makecode + "不相等"; return false; } break; case "SALE": if (dh.CheckExist("package", "pa_outboxcode='" + pa_outboxcode + "'")) { string salecode = dh.getFieldDataByCondition("package", "pa_salecode", "pa_outboxcode = '" + outboxcode + "'").ToString(); if (salecode != pa_salecode) { error = ">>当前箱" + outboxcode + "对应订单号" + salecode + "和所装" + type + "号" + pa_outboxcode + "对应订单" + pa_salecode + "不相等"; return false; } } break; case "PROD": string prodcode = dh.getFieldDataByCondition("package", "pa_prodcode", "pa_outboxcode='" + outboxcode + "'").ToString(); if (prodcode != pa_prodcode) { error = ">>当前箱" + outboxcode + "对应物料" + prodcode + "和所装" + type + "号" + pa_outboxcode + "对应物料" + pa_prodcode + "不相等"; return false; } break; case "MIX": break; default: prodcode = dh.getFieldDataByCondition("package", "pa_prodcode", "pa_outboxcode='" + outboxcode + "'").ToString(); error = ">>当前箱" + outboxcode + "对应物料" + prodcode + "没有维护装箱规则"; return false; break; } error = ""; return true; } /// /// 验证是否符合合同防呆 /// /// /// /// /// public static Boolean checkMacOrBtRange(string msid, string macOrBt, string type) { //--判断是否有合同,是否在合同定义的范围内 string saleCode = dh.getFieldDataByCondition("makeserial", "ms_salecode", "ms_id='" + msid + "'").ToString(); if (saleCode == "") { return true; } //判断是否有合同范围 if (dh.CheckExist("SaleMacBTRange", "Sr_Sacode = '" + saleCode + "' and sr_type = '" + type + "'")) { //有合同范围再判断是否在范围内 if (!dh.CheckExist("SaleMacBTRange", "Sr_Sacode = '" + saleCode + "' and sr_type = '" + type + "' and '" + macOrBt + "' between SR_STARTCODE and SR_ENDCODE")) { return false; } } return true; } /// /// 序列烧录转换 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public static bool snChangeAndBurn(string iTSN, string iSN, string iSourcecode, string iUsercode, string iMacode, int iifrechange, string iMEI1, string iMEI2, string iMEI3, string iMEID, string iNETCODE, string iPSN, string iID1, string iID2, string iID3, string iMAC, string iBT, string iCODE1, string iCODE2, string iCODE3, out string oErrorMessage) { oErrorMessage = ""; string[] param = new string[] { iTSN, iSN, iSourcecode, iUsercode, iMacode, iifrechange + "", iMEI1, iMEI2, iMEI3, iMEID, iNETCODE, iPSN, iID1, iID2, iID3, iMAC, iBT, iCODE1, iCODE2, iCODE3, oErrorMessage }; dh.CallProcedure("CS_SNCHANGEANDBURN", ref param); oErrorMessage = param[20]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null" || oErrorMessage.Contains("AFTERSUCCESS")) return true; else return false; } public static bool snBurn(string iTSN, string iSN, string iSourcecode, string iUsercode, string iMacode, int iifrechange, string iMEI1, string iMEI2, string iMEI3, string iMEID, string iNETCODE, string iPSN, string iID1, string iID2, string iID3, string iMAC, string iBT, string iCODE1, string iCODE2, string iCODE3, out string oErrorMessage) { oErrorMessage = ""; string[] param = new string[] { iTSN, iSN, iSourcecode, iUsercode, iMacode, iifrechange + "", iMEI1, iMEI2, iMEI3, iMEID, iNETCODE, iPSN, iID1, iID2, iID3, iMAC, iBT, iCODE1, iCODE2, iCODE3, oErrorMessage }; dh.CallProcedure("CS_SNBURN", ref param); oErrorMessage = param[20]; if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null" || oErrorMessage.Contains("AFTERSUCCESS")) return true; else return false; } /// /// 记录打印 /// /// /// /// /// /// /// /// /// public static void doLabelPrintLog(string printValue, string printType, string MakeCode, string prodCode, string sourceCode, string stepcode, string ifRePrint, string userCode) { sql.Clear(); sql.Append("insert into labelprintlog(LPL_ID,LPL_VALUE,LPL_TYPE,LPL_MAKECODE,LPL_PRODCODE,LPL_SOURCECODE,LPL_STEPCODE,LPL_IFREPRINT,LPL_INDATE,LPL_INMAN) "); sql.Append("values( labelprintlog_seq.nextval,:lpl_value,:lpl_type,:makecode,:prodcode,"); sql.Append(":SourceCode,:stepcode,:ifreprint,sysdate,:inman)"); dh.ExecuteSql(sql.ToString(), "insert", printValue, printType, MakeCode, prodCode, sourceCode, stepcode, ifRePrint, userCode); } public static bool GetMobileAllInfo(string iSN, out Dictionary oInfo, out string oErrMessage) { oInfo = new Dictionary(); oErrMessage = ""; if (iSN == "") { oErrMessage = "SN不能为空"; return false; } //通过序列号获取最近操作的工单号 string ms_id = dh.getFieldDataByCondition("makeserial", "max(ms_id)", "ms_sncode='" + iSN + "'").ToString(); if (ms_id != "") { DataTable dt = dh.getFieldsDataByCondition("MakeSerial", new string[] { "ms_id", "ms_mac", "ms_bt", "ms_meid", "ms_netcode", "ms_psn", "ms_imei1", "ms_imei2", "ms_imei3", "ms_othcode1", "ms_othcode2", "ms_othcode3", "ms_othid1", "ms_othid2", "ms_othid3" }, "ms_id='" + ms_id + "'"); if (dt.Rows.Count > 0) { string Code1 = ""; string Code2 = ""; string Code3 = ""; string Code4 = ""; string Code5 = ""; string Code6 = ""; string Code7 = ""; string Code8 = ""; string Code9 = ""; string Code10 = ""; string Code11 = ""; string Code12 = ""; string Code13 = ""; string Code14 = ""; string Code15 = ""; string[] param = new string[] { ms_id, Code1, Code2, Code3, Code4, Code5, Code6, Code7, Code8, Code9, Code10, Code11, Code12, Code13, Code14, Code15 }; string[] ParamName = new string[] { "v_ms_id", "v_i_code1", "v_i_code2", "v_i_code3", "v_i_code4", "v_i_code5", "v_i_code6", "v_i_code7", "v_i_code8", "v_i_code9", "v_i_code10", "v_i_code11", "v_i_code12", "v_i_code13", "v_i_code14", "v_i_code15" }; dh.CallProcedure("GetMobileAllInfo", ParamName, ref param); for (int i = 1; i < param.Length; i++) { //获取出来的参数使用^分割 if (param[i] != "" && param[i] != "null" && param[i] != null) { oInfo.Add(param[i].Split('^')[0], param[i].Split('^')[1]); } } oErrMessage = ""; return true; } else { oErrMessage = "序列号" + iSN + "不存在"; return false; } } else { oErrMessage = "序列号" + iSN + "不存在"; return false; } } public static void GetQuerySQL(string iCondition, string type, out string v_sql1) { v_sql1 = ""; string[] param = new string[] { iCondition, type, v_sql1 }; dh.CallProcedure("GetQuerySQL", ref param); v_sql1 = param[2]; } } }