LogicHandler.cs 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Text;
  5. using System.Windows;
  6. using UAS_MES.DataOperate;
  7. namespace UAS_MES.PublicMethod
  8. {
  9. class LogicHandler
  10. {
  11. public LogicHandler() { }
  12. static DataHelper dh = new DataHelper();
  13. //用于拼接SQL
  14. static StringBuilder sql = new StringBuilder();
  15. //用于存放批量执行的SQL
  16. static List<string> sqls = new List<string>();
  17. /// <summary>
  18. /// 检测当前工序是否正确,如果是第一道工序则进行插入MakeSerial表
  19. /// </summary>
  20. /// <param name="iSnCode"></param>
  21. /// <param name="iMakeCode"></param>
  22. /// <param name="iSourceCode"></param>
  23. /// <param name="oErrorMessage"></param>
  24. /// <returns></returns>
  25. public static bool CheckCurrentStepAndIfFirst(string iSnCode, string iMakeCode, string iSourceCode, string iCaller, out bool oIfFirst, out string oErrorMessage)
  26. {
  27. oErrorMessage = "";
  28. oIfFirst = false;
  29. if (iSnCode == "")
  30. {
  31. oErrorMessage = "序列号不能为空值";
  32. return false;
  33. }
  34. string StepCode = "";
  35. string StepName = "";
  36. string LineCode = "";
  37. //如果传入的工单为空的话
  38. if (iMakeCode == "")
  39. if (!GetMakeInfo(iSnCode, out iMakeCode, out oErrorMessage))
  40. return false;
  41. string cd_ifinput = "";
  42. string cr_code = "";
  43. //获取岗位资源对应的工序编号和名称
  44. GetStepCodeAndNameAndLineBySource(iSourceCode, ref StepCode, ref StepName, ref LineCode);
  45. string fo_class = dh.getFieldDataByCondition("cs_form", "fo_class", "fo_caller='" + iCaller + "'").ToString();
  46. if (fo_class != "")
  47. {
  48. DataTable dt1 = dh.getFieldsDataByCondition("makeserial", new string[] { "ms_makecode", "ms_status" }, "ms_sncode='" + iSnCode + "'");
  49. if (dt1.Rows.Count > 0)
  50. {
  51. string macode = dt1.Rows[0]["ms_makecode"].ToString();
  52. if (macode == "")
  53. {
  54. oErrorMessage = "序列号" + iSnCode + "未绑定工单";
  55. return false;
  56. }
  57. if (dt1.Rows[0]["ms_status"].ToString() == "2")
  58. {
  59. oErrorMessage = "序列号" + iSnCode + "对应工单已完工";
  60. return false;
  61. }
  62. if (macode != iMakeCode)
  63. {
  64. oErrorMessage = "该序列号已绑定到工单" + macode;
  65. return false;
  66. }
  67. }
  68. sql.Clear();
  69. sql.Append("select " + fo_class + ",cd_ifinput ifinput,cr_code from make left join craft on cr_code=ma_craftcode left join craftdetail on cd_crid=cr_id ");
  70. sql.Append("where ma_code='" + iMakeCode + "' and cd_stepcode='" + StepCode + "'");
  71. //获取的行号不等于0,存在记录检测通过
  72. dt1 = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  73. if (dt1.Rows.Count > 0)
  74. {
  75. cd_ifinput = dt1.Rows[0]["ifinput"].ToString();
  76. cr_code = dt1.Rows[0]["cr_code"].ToString();
  77. if (dt1.Rows[0][fo_class].ToString() != "-1")
  78. {
  79. //返回具体的工单信息
  80. string serial = "";
  81. switch (fo_class)
  82. {
  83. case "cd_ifinput":
  84. serial = "上料采集";
  85. break;
  86. case "cd_ifoqc":
  87. serial = "OQC";
  88. break;
  89. case "cd_ifpack":
  90. serial = "包装采集";
  91. break;
  92. case "cd_ifsnchange":
  93. serial = "序列转换";
  94. break;
  95. case "cd_iftest":
  96. serial = "测试采集";
  97. break;
  98. default:
  99. break;
  100. }
  101. oErrorMessage = "当前岗位对应的工序不是" + serial + "工序";
  102. return false;
  103. }
  104. }
  105. else
  106. {
  107. oErrorMessage = "当前岗位资源对应的工序不属于工单号" + iMakeCode;
  108. return false;
  109. }
  110. }
  111. if (!CheckMakeStatus(iMakeCode, out oErrorMessage))
  112. {
  113. return false;
  114. }
  115. //验证当前执行的工序是否正确
  116. DataTable dt = (DataTable)dh.ExecuteSql("select ms_nextstepcode,ms_stepcode from makeserial where ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'", "select");
  117. if (dt.Rows.Count > 0)
  118. {
  119. string CurrentStep = dt.Rows[0]["ms_nextstepcode"].ToString();
  120. string LastStepCode = dt.Rows[0]["ms_stepcode"].ToString();
  121. if (CurrentStep != "")
  122. {
  123. //工序不等于上一工序和本工序
  124. if (CurrentStep != StepCode && LastStepCode != StepCode)
  125. {
  126. oErrorMessage = "序列号" + iSnCode + "的当前工序是" + CurrentStep + ",当前岗位的工序是" + StepName;
  127. return false;
  128. }
  129. }
  130. else
  131. {
  132. oErrorMessage = "序列号" + iSnCode + "无可继续执行工序(已完工或者序列号不存在)";
  133. return false;
  134. }
  135. }
  136. //判断是否是第一道工序
  137. dt = (DataTable)dh.ExecuteSql("select min(mcd_detno) detno from makecraftdetail where mcd_macode='" + iMakeCode + "'", "select");
  138. string detno = dt.Rows[0]["detno"].ToString();
  139. //判断当前最小的执行顺序是否有记录
  140. if (dh.getRowCount("makecraftdetail", "mcd_stepcode='" + StepCode + "' and mcd_macode='" + iMakeCode + "' and mcd_detno ='" + detno + "'") > 0)
  141. {
  142. if (!dh.CheckExist("MakeSerial", "ms_sncode='" + iSnCode + "'"))
  143. {
  144. //判断当前工单的数量是否已经超出了完工数量
  145. int ma_qty = int.Parse(dh.getFieldDataByCondition("make", "ma_qty", "ma_code='" + iMakeCode + "'").ToString());
  146. //查询除了报废的之外的记录数量
  147. int ms_sncodecount = int.Parse(dh.getFieldDataByCondition("makeserial", "count(ms_sncode)", "ms_makecode='" + iMakeCode + "' and ms_status<>3").ToString());
  148. //如果MakeSerial表的记录数已经达到了工单数量
  149. if (ma_qty > ms_sncodecount)
  150. {
  151. sql.Clear();
  152. sql.Append("Insert into MakeSerial (ms_id, ms_code, ms_sncode ,ms_prodcode, ms_indate,");
  153. sql.Append("ms_wccode,ms_craftcode,ms_craftname,ms_nextstepcode,ms_status,ms_makecode) select MAKESERIAL_SEQ.NEXTVAL,");
  154. sql.Append("'" + iSnCode + "','" + iSnCode + "',ma_prodcode,sysdate,ma_wccode,ma_craftcode,ma_craftname,'" + StepCode + "',1,ma_code ");
  155. sql.Append("from make left join makecraftdetail on ma_code =mcd_macode where ma_code='" + iMakeCode + "' and mcd_stepcode='" + StepCode + "'");
  156. dh.ExecuteSql(sql.ToString(), "insert");
  157. oErrorMessage = "获取序列号" + iSnCode + "成功,";
  158. oIfFirst = true;
  159. }
  160. else
  161. {
  162. oErrorMessage = "当前生产数量已达到完工数量";
  163. return false;
  164. }
  165. }
  166. }
  167. //判断岗位备料是否足够
  168. string Yes_No = dh.GetConfig("BatchNumber", "MESSetting").ToString();
  169. if (cd_ifinput != "0")
  170. {
  171. sql.Clear();
  172. sql.Append("select wm_concat(mss_prodcode) code,count(1) cn from (select sum(nvl(mss_remain,0))remain,mss_prodcode,max(mss_baseqty) mss_baseqty ");
  173. sql.Append("from makesourcestock where mss_makecode='" + iMakeCode + "' and mss_stepcode='" + StepCode + "' ");
  174. sql.Append("and mss_linecode='" + LineCode + "' group by mss_prodcode)T where T.remain<mss_baseqty and rownum<20");
  175. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  176. //如果配置的是Yes
  177. if (Yes_No != "0")
  178. {
  179. //如果批次料不足
  180. if (dt.Rows.Count > 0 && int.Parse(dt.Rows[0]["cn"].ToString()) > 0)
  181. {
  182. oErrorMessage += "批次物料:" + iSnCode + "," + dt.Rows[0]["code"] + "岗位备料不足";
  183. return false;
  184. }
  185. }
  186. }
  187. return true;
  188. }
  189. /// <summary>
  190. /// 检测当前的岗位资源对应的工序
  191. /// </summary>
  192. /// <param name="iSnCode"></param>
  193. /// <param name="iMakeCode"></param>
  194. /// <param name="iSourceCode"></param>
  195. /// <param name="oErrMessage"></param>
  196. /// <returns></returns>
  197. public static bool CheckCurrentStep(string iSnCode, string iMakeCode, string iSourceCode, string iUserCode, out string oMSID, out string oMacode, out string oErrMessage)
  198. {
  199. oErrMessage = "";
  200. oMSID = "";
  201. oMacode = "";
  202. string[] param = new string[] { iMakeCode, iSourceCode, iSnCode, iUserCode, oMSID, oMacode, oErrMessage };
  203. dh.CallProcedure("CS_CHECKSTEPSNANDMACODE", ref param);
  204. oMSID = param[4];
  205. oMacode = param[5];
  206. oErrMessage = param[6];
  207. if (oErrMessage == "" || oErrMessage == null || oErrMessage == "null")
  208. return true;
  209. else
  210. return false;
  211. }
  212. /// <summary>
  213. /// 判断工单是否已经下放
  214. /// </summary>
  215. /// <param name="iMaCode"></param>
  216. /// <returns></returns>
  217. public static bool CheckMakeStatus(string iMaCode, out string ErrorMessage)
  218. {
  219. string ma_statuscode = dh.getFieldDataByCondition(" make ", "ma_statuscode", "ma_code='" + iMaCode + "' ").ToString();
  220. ErrorMessage = "";
  221. if (ma_statuscode == "")
  222. {
  223. ErrorMessage = "工单号" + iMaCode + "不存在";
  224. return false;
  225. }
  226. if (ma_statuscode == "STARTED")
  227. return true;
  228. else
  229. {
  230. ErrorMessage = "工单必须是已下放状态";
  231. return false;
  232. }
  233. }
  234. /// <summary>
  235. /// 判断当前工序是否是第一道工序
  236. /// </summary>
  237. /// <param name="iSnCode"></param>
  238. /// <param name="iMakecode"></param>
  239. /// <param name="iSourceCode"></param>
  240. /// <returns></returns>
  241. public static bool CheckIfFirstMakeSerial(string iSnCode, string iMakecode, string iSourceCode)
  242. {
  243. //选取当前的最小的执行顺序
  244. string CurrentStep = GetStepCodeBySource(iSourceCode);
  245. DataTable dt = (DataTable)dh.ExecuteSql("select min(mcd_detno) detno from makecraftdetail where mcd_macode='" + iMakecode + "'", "select");
  246. string detno = dt.Rows[0]["detno"].ToString();
  247. //判断当前最小的执行顺序是否有记录
  248. if (dh.getRowCount("makecraftdetail", "mcd_stepcode='" + CurrentStep + "' and mcd_macode='" + iMakecode + "' and mcd_detno ='" + detno + "'") > 0)
  249. {
  250. if (!dh.CheckExist("MakeSerial", "ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakecode + "'"))
  251. {
  252. sql.Clear();
  253. sql.Append("Insert into MakeSerial (ms_id, ms_code, ms_sncode ,ms_prodcode, ms_indate,");
  254. sql.Append("ms_wccode,ms_craftcode,ms_craftname,ms_nextstepcode,ms_status,ms_makecode) select MAKESERIAL_SEQ.NEXTVAL,");
  255. sql.Append("'" + iSnCode + "','" + iSnCode + "',ma_prodcode,sysdate,ma_wccode,ma_craftcode,ma_craftname,'" + CurrentStep + "',0,ma_code ");
  256. sql.Append("from make left join makecraftdetail on ma_code =mcd_macode where ma_code='" + iMakecode + "' and mcd_stepcode='" + CurrentStep + "'");
  257. dh.ExecuteSql(sql.ToString(), "insert");
  258. }
  259. return true;
  260. }
  261. else
  262. return false;
  263. }
  264. /// <summary>
  265. /// 判断下一工序是否是送检工序
  266. /// </summary>
  267. /// <returns></returns>
  268. public static bool CheckNextStepIfQC(string iSnCode, string iMakeCode, string iStepCode, string iCraftCode, string iUserName, out string oErrorMessage)
  269. {
  270. oErrorMessage = "";
  271. string IfQC = dh.getFieldDataByCondition("craft left join craftdetail on cd_crid=cr_id", "cd_ifoqc", "cr_code='" + iCraftCode + "' and cd_stepcode='" + iStepCode + "'").ToString();
  272. if (IfQC != "0" && IfQC != "")
  273. {
  274. DataTable dt = dh.getFieldsDataByCondition("make left join product on ma_prodcode=pr_code", new string[] { "ma_nowcheckqty", "pr_qcbatchqty", "ma_checkno", "ma_prodcode", "pr_qualmethod" }, "ma_code='" + iMakeCode + "'");
  275. if (dt.Rows.Count > 0)
  276. {
  277. string ma_nowcheckqty = dt.Rows[0]["ma_nowcheckqty"].ToString();
  278. string pr_qcbatchqty = dt.Rows[0]["pr_qcbatchqty"].ToString();
  279. string ma_checkno = dt.Rows[0]["ma_checkno"].ToString();
  280. string ma_prodcode = dt.Rows[0]["ma_prodcode"].ToString();
  281. string pr_qualmethod = dt.Rows[0]["pr_qualmethod"].ToString();
  282. if (pr_qcbatchqty != "" && pr_qcbatchqty != "0")
  283. {
  284. //当前批次的送检批数量大于物料资料中的抽检批数或者当前批次编号为空
  285. string checkno = "";
  286. if (int.Parse(ma_nowcheckqty == "" ? "0" : ma_nowcheckqty) >= int.Parse(pr_qcbatchqty) || ma_checkno == "")
  287. {
  288. //原有的抽检批次插入OQCBatch
  289. string ob_id = dh.GetSEQ("OQCBatch_SEQ");
  290. checkno = dh.GetSerialNumberByCaller("Make!CheckQC");
  291. sql.Clear();
  292. sql.Append("insert into OQCBatch (ob_id, ob_checkno,ob_makecode,ob_source,ob_indate,ob_checkman,ob_batchqty,ob_status,ob_prodcode,ob_projectcode)");
  293. sql.Append(" values('" + ob_id + "','" + checkno + "','" + iMakeCode + "', '工序',sysdate, '" + iUserName + "','" + ma_nowcheckqty + "','UNCHECK','" + ma_prodcode + "','" + pr_qualmethod + "')");
  294. sqls.Add(sql.ToString());
  295. sqls.Add("update makeserial set ms_checkno='" + checkno + "' where ms_makecode='" + iMakeCode + "' and ms_sncode='" + iSnCode + "'");
  296. sqls.Add("update make set ma_checkno='" + checkno + "',ma_nowcheckqty=1 where ma_code='" + iMakeCode + "'");
  297. }
  298. else
  299. {
  300. sqls.Add("update makeserial set ms_checkno='" + ma_checkno + "' where ms_makecode='" + iMakeCode + "' and ms_sncode='" + iSnCode + "'");
  301. sqls.Add("update make set ma_nowcheckqty= ma_nowcheckqty+1 where ma_code='" + iMakeCode + "'");
  302. }
  303. dh.ExecuteSQLTran(sqls.ToArray());
  304. sqls.Clear();
  305. //如果制造单的ma_checkno没有值则新加入一个值
  306. string checkno1 = checkno == "" ? ma_checkno : checkno;
  307. string obd_obid = dh.getFieldDataByCondition("oqcbatch", "ob_id", "ob_checkno='" + checkno1 + "'").ToString();
  308. //插入抽检批次明细表
  309. sql.Clear();
  310. sql.Append("insert into OQCBatchDetail (obd_id,obd_obid,obd_sncode,obd_outboxcode,obd_makecode,obd_checkno,obd_builddate) ");
  311. sql.Append("select OQCBatchDetail_SEQ.nextval,'" + obd_obid + "',ms_sncode,ms_outboxcode,ms_makecode,ms_checkno,");
  312. sql.Append("sysdate from makeserial where ms_sncode='" + iSnCode + "' and ms_makecode='" + iMakeCode + "'");
  313. dh.ExecuteSql(sql.ToString(), "insert");
  314. return true;
  315. }
  316. else
  317. {
  318. oErrorMessage = "请维护物料资料的抽检批数";
  319. return false;
  320. }
  321. }
  322. else
  323. {
  324. oErrorMessage = "制造单号不存在";
  325. return false;
  326. }
  327. }
  328. else
  329. {
  330. oErrorMessage = "当前工序的下一工序不是OQC检测";
  331. return false;
  332. }
  333. }
  334. /// <summary>
  335. /// 验证用户身份信息
  336. /// </summary>
  337. /// <param name="iUserCode"></param>
  338. /// <param name="oErrorMessage"></param>
  339. /// <returns></returns>
  340. public static bool CheckUserLogin(string iUserCode, string iPassWord, out string oErrorMessage)
  341. {
  342. oErrorMessage = "";
  343. string SQL = "select em_code from employee where em_code=:UserName and em_password =:PassWord";
  344. DataTable dt;
  345. dt = (DataTable)dh.ExecuteSql(SQL, "select", iUserCode, iPassWord);
  346. if (dt.Rows.Count > 0)
  347. return true;
  348. else
  349. {
  350. oErrorMessage = "用户名或者密码不正确!";
  351. return false;
  352. }
  353. }
  354. /// <summary>
  355. /// 记录登陆信息
  356. /// </summary>
  357. public static void RecordLogInfo(string iUserCode, string iUserName, string iVersion, string iType, string iIP)
  358. {
  359. dh.ExecuteSql("insert into LogInfo(id,sip,usname,indate,uscode,versioncode,terminaltype) values (LogInfo_seq.nextval,'" + iIP + "','" + iUserName + "',sysdate,'" + iUserCode + "','" + iVersion + "','" + iType + "')", "insert");
  360. }
  361. /// <summary>
  362. /// 验证用户身份信息和岗位资源
  363. /// </summary>
  364. /// <param name="iUserCode"></param>
  365. /// <param name="iPassWord"></param>
  366. /// <param name="oErrorMessage"></param>
  367. /// <returns></returns>
  368. public static bool CheckUserAndResourcePassed(string iUserCode, string iSourceCode, out string oErrorMessage)
  369. {
  370. oErrorMessage = "";
  371. string SQL = "select em_code,em_type,em_name from employee where em_code=:UserName ";
  372. DataTable dt;
  373. dt = (DataTable)dh.ExecuteSql(SQL, "select", iUserCode);
  374. if (dt.Rows.Count > 0)
  375. {
  376. string em_name = dt.Rows[0]["em_name"].ToString();
  377. string em_type = dt.Rows[0]["em_type"].ToString();
  378. if (iSourceCode == "")
  379. {
  380. oErrorMessage = "岗位资源不允许为空";
  381. return false;
  382. }
  383. if (em_type == "admin")
  384. {
  385. if (dh.CheckExist("Source", "sc_code='" + iSourceCode + "' and sc_statuscode='AUDITED'"))
  386. {
  387. return true;
  388. }
  389. else
  390. {
  391. oErrorMessage = "岗位资源编号错误或者未审核!";
  392. return false;
  393. }
  394. }
  395. else
  396. {
  397. dt = dh.getFieldsDatasByCondition("cs$empgroup left join cs$userresource on ur_groupcode=eg_groupcode left join source on ur_resourcecode=sc_code", new string[] { "ur_resourcecode" }, "eg_emcode = '" + iUserCode + "' and sc_statuscode='AUDITED'");
  398. //如果存在该编号
  399. if (dt.Rows.Count > 0)
  400. {
  401. //判断如果多个岗位资源存在,用户输入的只要在其中就行
  402. for (int i = 0; i < dt.Rows.Count; i++)
  403. {
  404. if (dt.Rows[i]["ur_resourcecode"].ToString() == iSourceCode)
  405. return true;
  406. }
  407. oErrorMessage = "用户不处于当前资源所属分组!";
  408. }
  409. else
  410. oErrorMessage = "岗位资源编号错误或者未审核!";
  411. }
  412. }
  413. else
  414. oErrorMessage = "用户不存在!";
  415. return false;
  416. }
  417. public static bool CheckStepAttribute(string iCaller, string iSourceCode, out string oErrorMessage)
  418. {
  419. oErrorMessage = "";
  420. string[] param = new string[] { iCaller, iSourceCode, oErrorMessage };
  421. dh.CallProcedure("CS_CHECKSTEPATTRIBUTE", ref param);
  422. oErrorMessage = param[2];
  423. if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null")
  424. return true;
  425. else
  426. return false;
  427. }
  428. public static bool CheckStepSNAndMacode(string iMakeCode, string iSourceCode, string iSN, string iUserCode, out string oMakeCode, out string oMsID, out string oErrorMessage)
  429. {
  430. oErrorMessage = "";
  431. oMakeCode = "";
  432. oMsID = "";
  433. string[] param = new string[] { iMakeCode, iSourceCode, iSN, iUserCode, oMakeCode, oMsID, oErrorMessage };
  434. dh.CallProcedure("CS_CHECKSTEPSNANDMACODE", ref param);
  435. oMakeCode = param[4];
  436. oMsID = param[5];
  437. oErrorMessage = param[6];
  438. if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null")
  439. return true;
  440. else
  441. return false;
  442. }
  443. /// <summary>
  444. /// 分配Mac地址和BT地址
  445. /// </summary>
  446. /// <param name="iSnCode"></param>
  447. /// <param name="iMakeCode"></param>
  448. /// <param name="oMac"></param>
  449. /// <param name="oBT"></param>
  450. /// <param name="oCode1"></param>
  451. /// <param name="oCode2"></param>
  452. /// <param name="oCdoe3"></param>
  453. /// <param name="oErrorMessage"></param>
  454. /// <returns></returns>
  455. public static bool GetAddressRangeByMakeCode(string iSnCode, string iMakeCode, out string oMac, out string oBT, out string oCode1, out string oCode2, out string oCdoe3, out string oErrorMessage)
  456. {
  457. oMac = "";
  458. oBT = "";
  459. oCode1 = "";
  460. oCode2 = "";
  461. oCdoe3 = "";
  462. oErrorMessage = "";
  463. string[] param = new string[] { iSnCode, iMakeCode, oMac, oBT, oCode1, oCode2, oCdoe3, oErrorMessage };
  464. dh.CallProcedure("CS_GETADDRESSBYMAKECODE", ref param);
  465. oMac = param[2];
  466. oBT = param[3];
  467. oCode1 = param[4];
  468. oCode2 = param[5];
  469. oCdoe3 = param[6];
  470. oErrorMessage = param[7];
  471. if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null")
  472. return true;
  473. else
  474. return false;
  475. }
  476. /// <summary>
  477. /// 输入的 SN 号查找在制品是否有 IMEI 信息存在,如果存在则将 IMEI 信息传出,如果没有则在该工单下未使用的 IMEI 中随机分配一组
  478. /// 如果iIMEI1、iNetCode不为空,则分别作为获取的附件加条件。
  479. /// </summary>
  480. /// <param name="iSN"></param>
  481. /// <param name="iMO"></param>
  482. /// <param name="iIMEI1"></param>
  483. /// <param name="iNetCode"></param>
  484. /// <param name="oIMEI1"></param>
  485. /// <param name="oIMEI2"></param>
  486. /// <param name="oIMEI3"></param>
  487. /// <param name="oMEID"></param>
  488. /// <param name="oNetCode"></param>
  489. /// <param name="oPSN"></param>
  490. /// <param name="oMac"></param>
  491. /// <param name="oBT"></param>
  492. /// <param name="oID1"></param>
  493. /// <param name="oID2"></param>
  494. /// <param name="oID3"></param>
  495. /// <param name="oErrorMessage"></param>
  496. /// <returns></returns>
  497. public static bool GetIMEIOrNetCodeRange(string iSnCode, string iMakeCode, string iIMEI1, string iNetCode, out string oIMEI1, out string oIMEI2, out string oIMEI3, out string oMEID, out string oNetCode, out string oPSN, out string oID1, out string oID2, out string oID3, out string oErrorMessage)
  498. {
  499. oIMEI1 = "";
  500. oIMEI2 = "";
  501. oIMEI3 = "";
  502. oMEID = "";
  503. oNetCode = "";
  504. oPSN = "";
  505. oID1 = "";
  506. oID2 = "";
  507. oID3 = "";
  508. oErrorMessage = "";
  509. string[] param = new string[] { iSnCode, iMakeCode, iIMEI1, iNetCode, oIMEI1, oIMEI2, oIMEI3, oMEID, oNetCode, oPSN, oID1, oID2, oID3, oErrorMessage };
  510. dh.CallProcedure("CS_GETIMEIORNETCODERANGE", ref param);
  511. oIMEI1 = param[4];
  512. oIMEI2 = param[5];
  513. oIMEI3 = param[6];
  514. oMEID = param[7];
  515. oNetCode = param[8];
  516. oPSN = param[9];
  517. oID1 = param[10];
  518. oID2 = param[11];
  519. oID3 = param[12];
  520. oErrorMessage = param[13];
  521. if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null")
  522. return true;
  523. else
  524. return false;
  525. }
  526. /// <summary>
  527. /// 获取工单的最近一条执行记录
  528. /// </summary>
  529. /// <param name="iSnCode"></param>
  530. /// <param name="oMakeCode"></param>
  531. /// <param name="oErrorMessage"></param>
  532. /// <returns></returns>
  533. public static bool GetMakeInfo(string iSnCode, out string oMakeCode, out string oErrorMessage)
  534. {
  535. //取MakeProcess表中的执行记录ID最大的一个工单的号码
  536. oMakeCode = "";
  537. oErrorMessage = "";
  538. string ms_id = dh.getFieldDataByCondition("MakeSerial", "max(ms_id) ms_id", "ms_sncode='" + iSnCode + "' or ms_firstsn in (select firstsn from makesnrelation where sn='" + iSnCode + "')").ToString();
  539. oMakeCode = dh.getFieldDataByCondition("MakeSerial", "ms_makecode", "ms_id='" + ms_id + "'").ToString();
  540. if (oMakeCode != "")
  541. return true;
  542. else
  543. {
  544. oErrorMessage = "序列号:" + iSnCode + " 未归属工单";
  545. return false;
  546. }
  547. }
  548. /// <summary>
  549. /// 获取送检批次,根据不同的iOQCStep执行不同的操作,查询到有具体的信息时返回Form和Detail的两个DataTable
  550. /// iOQCStep 有四个固定参数
  551. /// OQCSENDCHECK 生成送检批
  552. /// OQCPLANMAINTAIN 抽样计划维护
  553. /// OQCDATACOLLECTION 抽样数据采集
  554. /// OQCRESULTDETERMINE 批结果判定
  555. /// </summary>
  556. /// <returns></returns>
  557. public static DataTable[] GetOQCBatch(string iSnCode, string iOutBoxCode, string iCheckNo, string iOQCStep, out string oErrorMessage)
  558. {
  559. oErrorMessage = "";
  560. string SQL = "";
  561. string ms_checkno = "";
  562. DataTable dt = new DataTable();
  563. if (iCheckNo != "")
  564. return GetBatch(iCheckNo, iOQCStep, out oErrorMessage);
  565. else if (iSnCode != "")
  566. {
  567. SQL = "select ms_checkno from makeserial where ms_sncode='" + iSnCode + "' or ms_psn='" + iSnCode + "'";
  568. dt = (DataTable)dh.ExecuteSql(SQL, "select");
  569. if (dt.Rows.Count == 0)
  570. {
  571. oErrorMessage = "序列号" + iSnCode + "不存在";
  572. return null;
  573. }
  574. else
  575. {
  576. if (dt.Rows[0]["ms_checkno"].ToString() == "")
  577. {
  578. oErrorMessage = "该序列号没有送检批次号";
  579. return null;
  580. }
  581. else
  582. ms_checkno = dt.Rows[0]["ms_checkno"].ToString();
  583. }
  584. }
  585. else if (iOutBoxCode != "")
  586. {
  587. SQL = "select ms_checkno from MES_PACKAGE_VIEW left join makeserial on v_barcode=ms_sncode where v_outboxcode='" + iOutBoxCode + "' ";
  588. dt = (DataTable)dh.ExecuteSql(SQL, "select");
  589. if (dt.Rows.Count == 0)
  590. {
  591. oErrorMessage = "该箱号不存在";
  592. return null;
  593. }
  594. else
  595. {
  596. if (dt.Rows[0]["ms_checkno"].ToString() == "")
  597. {
  598. oErrorMessage = "该箱号没有送检批次号";
  599. return null;
  600. }
  601. else
  602. ms_checkno = dt.Rows[0]["ms_checkno"].ToString();
  603. }
  604. }
  605. if (ms_checkno != "")
  606. {
  607. return GetBatch(ms_checkno, iOQCStep, out oErrorMessage);
  608. }
  609. else
  610. {
  611. oErrorMessage = "送检批次不存在";
  612. return null;
  613. }
  614. }
  615. /// <summary>
  616. /// 获取序列号的所有串号信息
  617. /// </summary>
  618. /// <param name="iSnCode"></param>
  619. /// <param name="oIMEI1"></param>
  620. /// <param name="oIMEI2"></param>
  621. /// <param name="oIMEI3"></param>
  622. /// <param name="oMEID"></param>
  623. /// <param name="oNetCode"></param>
  624. /// <param name="oPSN"></param>
  625. /// <param name="oMac"></param>
  626. /// <param name="oBT"></param>
  627. /// <param name="oCode1"></param>
  628. /// <param name="oCode2"></param>
  629. /// <param name="oCode3"></param>
  630. /// <param name="oErrorMessage"></param>
  631. /// <returns></returns>
  632. public static bool GetSNAllInfo(string iSnCode, out string oIMEI1, out string oIMEI2, out string oIMEI3, out string oMEID, out string oNetCode, out string oPSN, out string oMac, out string oBT, out string oCode1, out string oCode2, out string oCode3, out string oID1, out string oID2, out string oID3, out string oErrorMessage)
  633. {
  634. oBT = "";
  635. oMEID = "";
  636. oMac = "";
  637. oPSN = "";
  638. oNetCode = "";
  639. oIMEI1 = "";
  640. oIMEI2 = "";
  641. oIMEI3 = "";
  642. oCode1 = "";
  643. oCode2 = "";
  644. oCode3 = "";
  645. oID1 = "";
  646. oID2 = "";
  647. oID3 = "";
  648. //通过序列号获取最近操作的工单号
  649. string ms_id = dh.getFieldDataByCondition("makeserial", "ms_id", "ms_sncode='" + iSnCode + "'").ToString();
  650. if (ms_id != "")
  651. {
  652. 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 + "'");
  653. if (dt.Rows.Count > 0)
  654. {
  655. oMac = dt.Rows[0]["ms_mac"].ToString();
  656. oBT = dt.Rows[0]["ms_bt"].ToString();
  657. oPSN = dt.Rows[0]["ms_psn"].ToString();
  658. oNetCode = dt.Rows[0]["ms_netcode"].ToString();
  659. oMEID = dt.Rows[0]["ms_meid"].ToString();
  660. oIMEI1 = dt.Rows[0]["ms_imei1"].ToString();
  661. oIMEI2 = dt.Rows[0]["ms_imei2"].ToString();
  662. oIMEI3 = dt.Rows[0]["ms_imei3"].ToString();
  663. oCode1 = dt.Rows[0]["ms_othcode1"].ToString();
  664. oCode2 = dt.Rows[0]["ms_othcode2"].ToString();
  665. oCode3 = dt.Rows[0]["ms_othcode3"].ToString();
  666. oID1 = dt.Rows[0]["ms_othid3"].ToString();
  667. oID2 = dt.Rows[0]["ms_othid3"].ToString();
  668. oID3 = dt.Rows[0]["ms_othid3"].ToString();
  669. oErrorMessage = "";
  670. return true;
  671. }
  672. else
  673. {
  674. oErrorMessage = "序列号" + iSnCode + "不存在";
  675. return false;
  676. }
  677. }
  678. else
  679. {
  680. oErrorMessage = "序列号" + iSnCode + "不存在";
  681. return false;
  682. }
  683. }
  684. /// <summary>
  685. /// 第一个是Form的主表信息,第二个是Grid的信息
  686. /// </summary>
  687. /// <param name="iCheckNo"></param>
  688. /// <returns></returns>
  689. private static DataTable[] GetBatch(string iCheckNo, string iOQCStep, out string oErrorMessage)
  690. {
  691. DataTable Form = new DataTable();
  692. DataTable Grid = new DataTable();
  693. oErrorMessage = "";
  694. switch (iOQCStep.ToUpper())
  695. {
  696. case "OQCSENDCHECK":
  697. sql.Clear();
  698. sql.Append("select count(1) ob_batchqty,obd_outboxcode,obd_id,obd_makecode from OQCBatchdetail ");
  699. sql.Append("where obd_checkno = '" + iCheckNo + "' group by obd_outboxcode,obd_makecode,obd_id");
  700. Grid = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  701. Form = (DataTable)dh.ExecuteSql("select ob_id,ob_status,ob_prodcode,ob_batchqty,ob_source,ob_checkno from OQCBatch where ob_checkno='" + iCheckNo + "'", "select");
  702. if (Form.Rows.Count > 0)
  703. {
  704. if (Form.Rows[0]["ob_source"].ToString() == "新增" && Form.Rows[0]["ob_status"].ToString() == "ENTERING")
  705. {
  706. sql.Clear();
  707. 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 ");
  708. 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");
  709. Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  710. }
  711. else oErrorMessage = "自动生成的抽检批次号不允许在该页面操作,或者该抽检批次号不是在录入状态";
  712. }
  713. else oErrorMessage = "抽检批次" + iCheckNo + "不存在";
  714. break;
  715. case "OQCPLANMAINTAIN":
  716. sql.Clear();
  717. sql.Append("select ob_prodcode,ob_id,ob_checkno,ob_projectcode,ob_nowcheckqty,ob_source,ob_remark,");
  718. 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 ");
  719. sql.Append("pr_code=ob_prodcode where ob_checkno='" + iCheckNo + "'");
  720. Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  721. sql.Clear();
  722. if (Form.Rows.Count > 0)
  723. {
  724. string pr_id;
  725. //判断状态是否是待检验
  726. if (Form.Rows[0]["ob_status"].ToString() == "UNCHECK")
  727. {
  728. //判断送检方案是否为空
  729. string qualmethod = "";
  730. //第一原则送检方案为空
  731. if (Form.Rows[0]["pr_qualmethod"].ToString() == "")
  732. {
  733. //判读第二原则送检方案为空
  734. string pr_qualmethod = dh.getFieldDataByCondition("product left join productkind on pr_kind=pk_name", "pk_qualmethod", "pr_code='" + Form.Rows[0]["ob_prodcode"] + "'").ToString();
  735. }
  736. //第一原则送检方案不为空
  737. else
  738. {
  739. qualmethod = Form.Rows[0]["pr_qualmethod"].ToString();
  740. }
  741. Form.Rows[0]["ob_projectcode"] = qualmethod;
  742. pr_id = dh.getFieldDataByCondition("QUA_Project", "pr_id", "pr_code = '" + qualmethod + "'").ToString();
  743. sql.Clear();
  744. sql.Append("select nvl(max(oi_id),0)oi_id, ci_kind,nvl(max(oi_sampleqty),0) oi_sampleqty from QUA_PROJECT left join ");
  745. sql.Append(" QUA_ProjectDetail on pd_prid=pr_id left join QUA_CheckItem on pd_ciid=ci_id ");
  746. sql.Append("left join OQCITEMS on oi_checkno ='" + iCheckNo + "' and oi_projectcode='" + qualmethod + "' ");
  747. sql.Append("and oi_projectcode = pr_code and oi_checkkind = ci_kind where pr_code='" + qualmethod + "' group by ci_kind");
  748. Grid = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  749. }
  750. else
  751. oErrorMessage = "只有待检验的批次才允许维护抽样计划";
  752. }
  753. else
  754. oErrorMessage = "抽检批次" + iCheckNo + "不存在";
  755. break;
  756. case "OQCDATACOLLECTION":
  757. sql.Clear();
  758. sql.Append("select ob_checkno,ob_makecode,ob_prodcode,ob_nowcheckqty,pr_detail,ob_ngqty,ob_okqty,");
  759. sql.Append("ob_remark,ob_makecode,ob_status,ob_projectcode,ob_aqlcode,ob_maxngacceptqty from OQCBatch left join product on ");
  760. sql.Append("pr_code=ob_prodcode left join oqcitems on oi_checkno =ob_checkno and oi_projectcode =ob_projectcode where ob_checkno='" + iCheckNo + "'");
  761. Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  762. //状态为UNCHECK或者CHECKING并且有抽样计划的才能操作
  763. if (Form.Rows.Count > 0)
  764. {
  765. if (Form.Rows[0]["ob_projectcode"].ToString() == "" || !(Form.Rows[0]["ob_status"].ToString() != "UNCHECK" || Form.Rows[0]["ob_status"].ToString() != "CHECKING"))
  766. oErrorMessage = "状态为未检验或者送检中并且有抽样计划的才能操作";
  767. }
  768. else
  769. {
  770. oErrorMessage = "抽检批次" + iCheckNo + "不存在";
  771. }
  772. break;
  773. case "OQCRESULTDETERMINE":
  774. //更新合格数和不合格数
  775. sql.Clear();
  776. sql.Append("update OQCBATCH set (ob_ngqty,ob_okqty)=(select nvl(max(oi_ngqty), 0),max(oi_checkqty)-nvl(max(oi_ngqty) ");
  777. sql.Append(",0) from OQCItems where oi_checkno='" + iCheckNo + "') where ob_checkno='" + iCheckNo + "'");
  778. dh.ExecuteSql(sql.ToString(), "update");
  779. //查询Form数据
  780. sql.Clear();
  781. sql.Append("select ob_id,ob_aqlcode,ob_makecode,ob_status,ob_prodcode,(select max(oi_checkqty)from OQCItems where oi_checkno='" + iCheckNo + "') oi_checkqty,");
  782. 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 + "'");
  783. Form = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  784. if (Form.Rows.Count == 0)
  785. {
  786. oErrorMessage = "抽检批次" + iCheckNo + "不存在";
  787. }
  788. break;
  789. default:
  790. break;
  791. }
  792. return new DataTable[] { Form, Grid };
  793. }
  794. /// <summary>
  795. /// 记录操作日志
  796. /// </summary>
  797. /// <param name="iSnCode"></param>
  798. /// <param name="iMakeCode"></param>
  799. /// <param name="iMPKind"></param>
  800. /// <param name="result"></param>
  801. /// <param name="iUserCode"></param>
  802. public static void InsertMakeProcess(string iSnCode, string iMakeCode, string iSourceCode, string iMPKind, string result, string iUserCode)
  803. {
  804. string CurrentStep = "";
  805. string LineCode = "";
  806. string CurrentStepName = "";
  807. GetStepCodeAndNameAndLineBySource(iSourceCode, ref CurrentStep, ref CurrentStepName, ref LineCode);
  808. sql.Clear();
  809. sql.Append("insert into MakeProcess(mp_id,mp_makecode,mp_maid, mp_mscode,mp_sncode,mp_stepcode,mp_stepname,");
  810. 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)");
  811. sql.Append("select MakeProcess_seq.nextval, ma_code,ma_id,ms_code,ms_sncode,'" + CurrentStep + "','" + CurrentStepName + "',");
  812. sql.Append("ma_craftcode,ma_craftname,'" + iMPKind + "','" + result + "',sysdate,'" + iUserCode + "',ma_wccode,'" + LineCode + "','" + iSourceCode + "',");
  813. 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 ");
  814. sql.Append("where ms_sncode='" + iSnCode + "' and ma_code='" + iMakeCode + "' and st_code='" + CurrentStep + "'");
  815. dh.ExecuteSql(sql.ToString(), "insert");
  816. }
  817. /// <summary>
  818. /// 记录一般操作日志
  819. /// </summary>
  820. /// <param name="inMan"></param>
  821. /// <param name="Content"></param>
  822. /// <param name="Result"></param>
  823. /// <param name="Search"></param>
  824. /// <param name="Code"></param>
  825. public static void InsertMessageLog(string inMan, string Content, string Result, string Search, string Code)
  826. {
  827. sql.Clear();
  828. sql.Append("insert into messagelog (ml_id,ml_date,ml_man,ml_content,ml_result,ml_search,code) ");
  829. sql.Append("values (messagelog_seq.nextval,sysdate,'" + inMan + "','" + Content + "','" + Result + "','" + Search + "','" + Code + "')");
  830. dh.ExecuteSql(sql.ToString(), "insert");
  831. }
  832. /// <summary>
  833. /// 保存Mac地址和BT地址
  834. /// </summary>
  835. /// <param name="iSN"></param>
  836. /// <param name="iMac"></param>
  837. /// <param name="iBT"></param>
  838. /// <param name="iCode1"></param>
  839. /// <param name="iCode2"></param>
  840. /// <param name="iCode3"></param>
  841. /// <param name="oErrorMessage"></param>
  842. /// <returns></returns>
  843. public static bool SetAddressInfo(string iSN, string iMac, string iBT, string iCode1, string iCode2, string iCode3, out string oErrorMessage)
  844. {
  845. oErrorMessage = "";
  846. string[] param = new string[] { iSN, iMac, iBT, iCode1, iCode2, iCode3, oErrorMessage };
  847. dh.CallProcedure("CS_SETADDRESSINFO", ref param);
  848. oErrorMessage = param[6];
  849. if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null")
  850. return true;
  851. else
  852. return false;
  853. }
  854. public static bool SetStepFinish(string iMakeCode, string iSourceCode, string iSN, string iMPKind, string iResult, string iUserCode, out string oErrorMessage)
  855. {
  856. oErrorMessage = "";
  857. string StepCode = dh.getFieldDataByCondition("Makeserial", "ms_stepcode", "ms_sncode='" + iSN + "'").ToString();
  858. string CurrentStep = GetStepCodeBySource(iSourceCode);
  859. if (StepCode == CurrentStep)
  860. {
  861. InsertMakeProcess(iSN, iMakeCode, iSourceCode, iMPKind, iResult, iUserCode);
  862. return true;
  863. }
  864. else
  865. {
  866. return CS_SetFinish(iMakeCode, iSourceCode, iSN, iUserCode, out oErrorMessage);
  867. }
  868. }
  869. /// <summary>
  870. /// 设置测试结果
  871. /// </summary>
  872. /// <param name="iMakeCode"></param>
  873. /// <param name="iSourceCode"></param>
  874. /// <param name="iSN"></param>
  875. /// <param name="iMPKind"></param>
  876. /// <param name="iResult"></param>
  877. /// <param name="iUserCode"></param>
  878. /// <param name="oErrorMessage"></param>
  879. /// <returns></returns>
  880. public static bool SetTestResult(string iMakeCode, string iSourceCode, string iSN, string iMPKind, string iResult, string iUserCode, out string oErrorMessage)
  881. {
  882. return SetStepFinish(iMakeCode, iSourceCode, iSN, iMPKind, iResult, iUserCode, out oErrorMessage);
  883. }
  884. public static bool CS_SetFinish(string iMakeCode, string iSourceCode, string iSN, string iUserCode, out string oErrorMessage)
  885. {
  886. oErrorMessage = "";
  887. string[] param = new string[] { iMakeCode, iSourceCode, iSN, iUserCode, oErrorMessage };
  888. dh.CallProcedure("CS_SETSTEPFINISH", ref param);
  889. oErrorMessage = param[4];
  890. if (oErrorMessage == "" || oErrorMessage == null || oErrorMessage == "null")
  891. return true;
  892. else
  893. return false;
  894. }
  895. /// <summary>
  896. /// 方法说明:测试详细信息录入系统,针对一个SN多个测试项目结果可循环调用
  897. /// </summary>
  898. /// <param name="iSnCode">序列号</param>
  899. /// <param name="iClass"></param>
  900. /// <param name="iSubClass1"></param>
  901. /// <param name="iSubClass2"></param>
  902. /// <param name="iSubClass3"></param>
  903. /// <param name="iMaxValue"></param>
  904. /// <param name="iMinValue"></param>
  905. /// <param name="iActualValue"></param>
  906. /// <param name="iValue1"></param>
  907. /// <param name="iValue2"></param>
  908. /// <param name="iValue3"></param>
  909. /// <param name="iTestResult"></param>
  910. /// <param name="oErrMessage"></param>
  911. /// <returns></returns>
  912. public static bool SetTestDetail(string iSnCode, string iMakeCode, string iClass, string iSubClass1, string iSubClass2, string iSubClass3, string iMaxValue, string iMinValue, string iActualValue, string iValue1, string iValue2, string iValue3, string iTestResult, string iSourceCode, out string oErrMessage)
  913. {
  914. oErrMessage = "";
  915. sql.Clear();
  916. sql.Append("Insert into STEPTESTDETAIL (STD_ID,STD_SN,STD_MAKECODE,STD_CLASS,STD_SUBCLASS1,STD_SUBCLASS2,");
  917. sql.Append("STD_SUBCLASS3,STD_MAXVALUE,STD_MINVALUE,STD_ACTUALVALUE,STD_VALUE1,STD_VALUE2,STD_VALUE3,STD_TESTRESULT,");
  918. sql.Append("STD_DATE,STD_RESCODE) values (STEPTESTDETAIL_SEQ.nextval,:std_sn,:std_makecode,");
  919. sql.Append(":std_class,:std_subclass1,:std_subclass2,:std_subclass3,:std_maxvalue,:std_minvalue,:std_actualvalue,:std_value1,");
  920. sql.Append(":std_value2,:std_value3,:std_testresult,sysdate,:std_record)");
  921. dh.ExecuteSql(sql.ToString(), "select", iSnCode, iMakeCode, iClass, iSubClass1, iSubClass2, iSubClass3, iMaxValue, iMinValue, iActualValue, iValue1, iValue2, iValue3, iTestResult, iSourceCode);
  922. return true;
  923. }
  924. /// <summary>
  925. /// 作业调用该方法将确认接收SN对应的IMEI及附属信息。
  926. /// </summary>
  927. /// <param name="iSN"></param>
  928. /// <param name="iMO"></param>
  929. /// <param name="iIMEI1"></param>
  930. /// <param name="iIMEI2"></param>
  931. /// <param name="iIMEI3"></param>
  932. /// <param name="iMEID"></param>
  933. /// <param name="iNetCode"></param>
  934. /// <param name="iPSN"></param>
  935. /// <param name="iID1"></param>
  936. /// <param name="iBT"></param>
  937. /// <param name="iID1"></param>
  938. /// <param name="iID2"></param>
  939. /// <param name="iID3"></param>
  940. /// <param name="oErrorMessage"></param>
  941. /// <returns></returns>
  942. public static bool SetIMEIInfo(string iSnCode, string iIMEI1, string iIMEI2, string iIMEI3, string iMEID, string iNetCode, string iPSN, string iID1, string iID2, string iID3, out string oErrMessage)
  943. {
  944. oErrMessage = "";
  945. string[] param = new string[] { iSnCode, iIMEI1, iIMEI2, iIMEI3, iMEID, iNetCode, iPSN, iID1, iID2, iID3, oErrMessage };
  946. dh.CallProcedure("CS_SETIMEIINFO", ref param);
  947. oErrMessage = param[10];
  948. if (oErrMessage == "" || oErrMessage == null || oErrMessage == "null")
  949. return true;
  950. else
  951. return false;
  952. }
  953. /// <summary>
  954. /// 执行不良信息采集
  955. /// </summary>
  956. /// <param name="iSnCode"></param>
  957. /// <param name="iMakeCode"></param>
  958. /// <param name="iUserCode"></param>
  959. /// <param name="iSourceCode"></param>
  960. /// <param name="iBadCode"></param>
  961. /// <param name="iBadRemark"></param>
  962. /// <param name="oErrorMessage"></param>
  963. /// <returns></returns>
  964. public static bool SetTestNGDetail(string iSnCode, string iMakeCode, string iUserCode, string iSourceCode, string iResult, string[] iBadGroupCode, string[] iBadCode, string[] iBadRemark, out string oErrorMessage)
  965. {
  966. oErrorMessage = "";
  967. string StepCode = "";
  968. string StepName = "";
  969. if (iResult == "" || iResult == null)
  970. iResult = "检查未通过";
  971. GetStepCodeAndNameBySource(iSourceCode, ref StepCode, ref StepName);
  972. string ms_status = dh.getFieldDataByCondition("makeserial", "ms_status", "ms_sncode='" + iSnCode + "'").ToString();
  973. sql.Clear();
  974. sql.Append("insert into makebad(mb_id,mb_makecode,mb_mscode,mb_sncode,mb_inman,mb_indate,mb_stepcode");
  975. sql.Append(",mb_sourcecode,mb_badcode,mb_bgcode,mb_badtable,mb_soncode,mb_status,mb_badremark)");
  976. sql.Append("select makebad_seq.nextval,ma_code,ms_code,ms_sncode,'" + iUserCode + "',sysdate,'" + StepCode + "',ms_sourcecode,:bc_code,:bg_code,'',");
  977. sql.Append("sp_soncode,'0',:bc_remark from make left join makeSerial on ms_makecode=ma_code left join stepProduct on ");
  978. sql.Append("sp_mothercode=ma_prodcode and sp_stepcode=ms_nextstepcode where ms_sncode='" + iSnCode + "'");
  979. dh.BatchInsert(sql.ToString(), new string[] { "bc_code", "bg_code", "bc_remark" }, iBadCode, iBadGroupCode, iBadRemark);
  980. //更新序列号已经采集的工序 ms_paststep 已采集数据,更新下一工序
  981. //如果存在送检批号则进行删除
  982. if (dh.CheckExist("oqcbatchdetail", "obd_sncode='" + iSnCode + "'"))
  983. {
  984. string checkno = dh.getFieldDataByCondition("oqcbatchdetail", "obd_checkno", "obd_sncode='" + iSnCode + "'").ToString();
  985. dh.ExecuteSql("delete from oqcbatchdetail where obd_sncode='" + iSnCode + "'", "delete");
  986. dh.ExecuteSql("update oqcbatch set ob_nowcheckqty=ob_nowcheckqty-1 where ob_checkno='" + checkno + "'", "update");
  987. }
  988. //之前保存的不良就不再调用
  989. if (ms_status != "3")
  990. {
  991. dh.UpdateByCondition("makeserial", "ms_paststep = ms_paststep ||'," + StepCode + "',ms_status=3,ms_badtimes=ms_badtimes+1", "ms_sncode='" + iSnCode + "'");
  992. SetStepFinish(iMakeCode, iSourceCode, iSnCode, "不良采集", iResult, iUserCode, out oErrorMessage);
  993. }
  994. return true;
  995. }
  996. /// <summary>
  997. /// 判断是否扣料工序,执行扣料,执行上料表记录
  998. /// </summary>
  999. /// <param name="iSnCode"></param>
  1000. /// <param name="iMakeCode"></param>
  1001. /// <param name="iUserName"></param>
  1002. /// <param name="iSourceCode"></param>
  1003. public static bool SetCollectionFinish(string iSnCode, string iMakeCode, string iUserName, string iSourceCode, out string oErrorMessage)
  1004. {
  1005. string StepCode = "";
  1006. string StepName = "";
  1007. string LineCode = "";
  1008. oErrorMessage = "";
  1009. GetStepCodeAndNameAndLineBySource(iSourceCode, ref StepCode, ref StepName, ref LineCode);
  1010. if (StepCode == "" && StepName == "")
  1011. {
  1012. oErrorMessage = "当前岗位资源找不到对应工序,请先进行维护";
  1013. return false;
  1014. }
  1015. sql.Clear();
  1016. sql.Append("select nvl(cd_ifreduce,0) cd_ifreduce from craft left join craftdetail on cd_crid=cr_id ");
  1017. sql.Append("where cr_code=(select ma_craftcode from makeserial left join make on ma_code = ms_makecode ");
  1018. sql.Append("where ms_sncode = '" + iSnCode + "') and cd_stepcode='" + StepCode + "'");
  1019. DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1020. sql.Clear();
  1021. if (dt.Rows.Count > 0)
  1022. {
  1023. string cd_ifreduce = dt.Rows[0][0].ToString();
  1024. if (cd_ifreduce == "-1")
  1025. {
  1026. sql.Clear();
  1027. sql.Append("select dsl_location,dsl_table,max(dsl_baseqty) baseqty from devsmtlocation where dsl_makecode='" + iMakeCode + "' and ");
  1028. sql.Append("dsl_linecode='" + LineCode + "' and dsl_status=0 and dsl_remainqty>0 and dsl_invalidtime is null group by dsl_location,dsl_table");
  1029. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1030. for (int i = 0; i < dt.Rows.Count; i++)
  1031. {
  1032. sql.Clear();
  1033. sql.Append("select dsl_id,dsl_remainqty from devsmtlocation where dsl_makecode='" + iMakeCode + "' and dsl_linecode='" + LineCode + "' ");
  1034. sql.Append("and dsl_status=0 and dsl_remainqty>0 and dsl_invalidtime is null and rownum<3 order by dsl_id asc ");
  1035. DataTable dt1 = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1036. for (int j = 0; j < dt1.Rows.Count; j++)
  1037. {
  1038. //外层循环的值dt
  1039. double baseqty = (double)dt.Rows[i]["baseqty"];
  1040. //内层循环的值dt1
  1041. double dsl_remainqty = (double)dt1.Rows[j]["dsl_remainqty"];
  1042. string dsl_id = dt1.Rows[j]["dsl_id"].ToString();
  1043. if (baseqty > 0)
  1044. {
  1045. if (dsl_remainqty <= baseqty)
  1046. {
  1047. sql.Clear();
  1048. sql.Append("update devsmtlocation set dsl_remainqty=0,dsl_invalidtime =sysdate, dsl_validtime =(case when dsl_validtime ");
  1049. sql.Append("is null then sysdate else dsl_validtime end),dsl_status=-1 where dsl_id=" + dsl_id);
  1050. dh.ExecuteSql(sql.ToString(), "update");
  1051. baseqty -= dsl_remainqty;
  1052. }
  1053. else
  1054. {
  1055. sql.Clear();
  1056. sql.Append("update devsmtlocation set dsl_remainqty=dsl_remainqty-NVL(dsl_baseqty,0),DSL_INVALIDTIME=(case when");
  1057. sql.Append("dsl_validtime is null then sysdate else dsl_validtime end) where dsl_id=" + dsl_id);
  1058. dh.ExecuteSql(sql.ToString(), "update");
  1059. baseqty = 0;
  1060. }
  1061. }
  1062. else
  1063. dh.ExecuteSql("update devsmtlocation set DSL_INVALIDTIME=sysdate where dsl_id=" + dsl_id, "update");
  1064. }
  1065. }
  1066. sql.Clear();
  1067. sql.Append("insert into ReduceStepRecord (rsd_id,rsd_macode,rsd_maprodcode,rsd_table,rsd_sncode,rsd_linecode,rsd_sourcecode) select ");
  1068. sql.Append("ReduceStepRecord_SEQ.nextval,'" + iMakeCode + "',ma_prodcode,'','" + iSnCode + "','" + LineCode + "','" + iSourceCode + "' ");
  1069. sql.Append("from make where ma_code='" + iMakeCode + "'");
  1070. dh.ExecuteSql(sql.ToString(), "insert");
  1071. }
  1072. return true;
  1073. }
  1074. else
  1075. {
  1076. return false;
  1077. }
  1078. }
  1079. /// <summary>
  1080. /// 上料采集
  1081. /// </summary>
  1082. /// <param name="iSnCode"></param>
  1083. /// <param name="iMakeCode"></param>
  1084. /// <param name="iBarcode"></param>
  1085. /// <param name="iSonCode"></param>
  1086. /// <param name="iSourceCode"></param>
  1087. /// <param name="iUserName"></param>
  1088. /// <param name="iSonID"></param>
  1089. /// <param name="iType"></param>
  1090. /// <param name="oErrorMessage"></param>
  1091. /// <returns></returns>
  1092. public static bool SetMaterialUp(string iSnCode, string iMakeCode, string iBarcode, string iSonCode, string iSourceCode, string iUserName, string iSonID, out string oErrorMessage)
  1093. {
  1094. oErrorMessage = "";
  1095. string StepCode = "";
  1096. string StepName = "";
  1097. string iRemainQty = dh.getFieldDataByCondition("barcode", "bar_remain", "bar_code='" + iBarcode + "'").ToString();
  1098. GetStepCodeAndNameBySource(iSourceCode, ref StepCode, ref StepName);
  1099. DataTable dt = (DataTable)dh.ExecuteSql("select cm_id from craftmaterial where cm_sncode='" + iSnCode + "' and cm_barcode='" + iBarcode + "' and cm_soncode='" + iSonCode + "'", "select");
  1100. if (dt.Rows.Count > 0)
  1101. {
  1102. oErrorMessage = "条码已经上料";
  1103. return false;
  1104. }
  1105. else
  1106. {
  1107. sql.Clear();
  1108. sql.Append("insert into Craftmaterial (cm_id ,cm_makecode,cm_maid,cm_maprodcode, cm_soncode, cm_mscode, cm_sncode, cm_stepcode, cm_stepname,");
  1109. sql.Append("cm_craftcode,cm_craftname,cm_barcode,cm_inqty,cm_indate,cm_inman,cm_linecode,cm_wccode,cm_sourcecode,cm_spid)");
  1110. sql.Append("select Craftmaterial_seq.nextval, ma_code, ma_id, ma_prodcode, sp_soncode,ms_code,ms_sncode,mcd_stepcode,");
  1111. sql.Append("mcd_stepname,ma_craftcode,ma_craftname,'" + iBarcode + "',1,sysdate,'" + iUserName + "',ma_linecode,ma_wccode,");
  1112. sql.Append("'" + iSourceCode + "','" + iSonID + "' from make left join makecraftdetail on mcd_macode=ma_code left join stepproduct on sp_stepcode=mcd_stepcode ");
  1113. sql.Append("and sp_craftcode=ma_craftcode and sp_mothercode = ma_prodcode left join makeserial on ms_makecode=ma_code ");
  1114. sql.Append("where ma_code='" + iMakeCode + "'and sp_id=" + iSonID + " and mcd_stepcode = '" + StepCode + "' and ms_sncode='" + iSnCode + "'");
  1115. dh.ExecuteSql(sql.ToString(), "insert");
  1116. return true;
  1117. }
  1118. }
  1119. /// <summary>
  1120. /// 执行下料操作
  1121. /// </summary>
  1122. /// <param name="iSnCode"></param>
  1123. /// <param name="iBarCode"></param>
  1124. /// <param name="iCurrentStep"></param>
  1125. /// <param name="iUserName"></param>
  1126. /// <param name="oErrorMessage"></param>
  1127. /// <returns></returns>
  1128. public static bool SetMaterialDown(string iSnCode, string iBarCode, string iSourceCode, string iCurrentStep, string iUserName, out string oErrorMessage)
  1129. {
  1130. //序列号不为空的时候
  1131. oErrorMessage = "";
  1132. DataTable dt;
  1133. //对序列号进行验证
  1134. dt = (DataTable)dh.ExecuteSql("select ms_status,ms_stepcode,ms_nextstepcode from makeserial where ms_sncode='" + iBarCode + "'", "select");
  1135. if (dt.Rows.Count > 0)
  1136. {
  1137. string ms_status = dt.Rows[0]["ms_status"].ToString();
  1138. string ms_stepcode = dt.Rows[0]["ms_stepcode"].ToString();
  1139. string ms_nextstepcode = dt.Rows[0]["ms_nextstepcode"].ToString();
  1140. if (ms_status == "1" && ms_stepcode != iCurrentStep)
  1141. oErrorMessage = "当前工序不是" + iCurrentStep + "\n";
  1142. else if (ms_status == "0" && ms_stepcode != iCurrentStep)
  1143. oErrorMessage = "当前工序不是" + iCurrentStep + "";
  1144. else if (ms_status == "2" && ms_nextstepcode != iCurrentStep)
  1145. oErrorMessage = "该序列号已经包装";
  1146. else
  1147. {
  1148. dt = (DataTable)dh.ExecuteSql("select * from craftmaterial where cm_sncode='" + iSnCode + "'", "select");
  1149. if (dt.Rows.Count > 0)
  1150. oErrorMessage = "请采集需要下料的序列号";
  1151. else
  1152. oErrorMessage = "该序列号未上料,无需下料";
  1153. }
  1154. }
  1155. if (oErrorMessage == "")
  1156. {
  1157. 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");
  1158. if (dt.Rows.Count > 0)
  1159. {
  1160. string cm_id = dt.Rows[0]["cm_id"].ToString();
  1161. string ms_macode = dt.Rows[0]["ms_makecode"].ToString();
  1162. string cm_stepcode = dt.Rows[0]["cm_stepcode"].ToString();
  1163. string cm_mccode = dt.Rows[0]["cm_mccode"].ToString();
  1164. dh.ExecuteSql("delete from Craftmaterial where cm_id=" + cm_id, "delete");
  1165. InsertMakeProcess(ms_macode, iSnCode, iSourceCode, "下料操作", "下料成功", iUserName);
  1166. int count = dh.getRowCount("craftMaterial", "cm_mccode='" + cm_mccode + "' and cm_stepcode='" + cm_stepcode + "' and cm_sncode='" + iSnCode + "'");
  1167. if (count == 0)
  1168. 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 + "'");
  1169. }
  1170. return true;
  1171. }
  1172. else
  1173. return false;
  1174. }
  1175. public static bool UpdateOQCMessage(string iSnCode, string iCheckno, string iMakeCode, string iMPKind, string iSourceCode, string iUserCode, string iResult, out string oErrorMessage)
  1176. {
  1177. oErrorMessage = "";
  1178. string StepCode = "";
  1179. string StepName = "";
  1180. string LineCode = "";
  1181. if (iResult == "" || iResult == null)
  1182. {
  1183. iResult = "测试合格";
  1184. }
  1185. GetStepCodeAndNameAndLineBySource(iSourceCode, ref StepCode, ref StepName, ref LineCode);
  1186. //查询批次和批数量
  1187. int batchqty = 0;
  1188. DataTable dt = (DataTable)dh.ExecuteSql("select count(ms_checkno) count,ms_checkno from makeserial where ms_checkno='" + iCheckno + "' group by ms_checkno", "select");
  1189. if (dt.Rows.Count > 0)
  1190. {
  1191. batchqty = int.Parse(dt.Rows[0]["count"].ToString());
  1192. }
  1193. string nextstepcode = dh.getFieldDataByCondition("make left join craft on ma_craftcode=cr_code and ma_prodcode=cr_prodcode left join craftdetail on cr_id = cd_crid", "cd_nextstepcode", "ma_code='" + iMakeCode + "' and cd_stepcode='" + StepCode + "'").ToString();
  1194. if (iResult.Contains("批次通过") && dt.Rows.Count > 0)
  1195. {
  1196. //更新执行的数量
  1197. sqls.Add("update makecraftdetail set mcd_inqty=mcd_inqty+" + batchqty + ",mcd_outqty = mcd_outqty + " + batchqty + ",mcd_okqty = mcd_okqty + " + batchqty + " where mcd_macode='" + iMakeCode + "' and mcd_stepcode='" + StepCode + "' ");
  1198. //更新makeSerial 的下一工序
  1199. sqls.Add("update makeserial set ms_paststep = ms_paststep || '," + StepCode + "',ms_stepcode='" + StepCode + "',ms_nextstepcode='" + nextstepcode + "' where ms_checkno='" + iCheckno + "'");
  1200. }
  1201. else
  1202. {
  1203. //更新执行的数量
  1204. sqls.Add("update makecraftdetail set mcd_inqty=mcd_inqty+1,mcd_outqty = mcd_outqty + 1,mcd_okqty = mcd_okqty + 1 where mcd_macode='" + iMakeCode + "' and mcd_stepcode='" + StepCode + "' ");
  1205. //更新makeSerial 的下一工序
  1206. sqls.Add("update makeserial set ms_paststep = ms_paststep || '," + StepCode + "',ms_stepcode='" + StepCode + "',ms_nextstepcode='" + nextstepcode + "' where ms_checkno='" + iCheckno + "'");
  1207. }
  1208. //更新序列号已经采集的工序 ms_paststep 已采集数据,更新下一工序
  1209. dh.ExecuteSQLTran(sqls.ToArray());
  1210. sqls.Clear();
  1211. //检测下道工序是否存在,不存在 更新状态为已完成
  1212. if (nextstepcode == null || nextstepcode == "")
  1213. {
  1214. if (iResult.Contains("批次通过"))
  1215. {
  1216. sqls.Add("update make set ma_madeqty=ma_madeqty+" + batchqty + " where ma_code='" + iMakeCode + "'");
  1217. sqls.Add("update makeserial set ms_status=2 where ms_checkno='" + iCheckno + "'");
  1218. }
  1219. else
  1220. {
  1221. sqls.Add("update make set ma_madeqty=ma_madeqty+1 where ma_code='" + iMakeCode + "'");
  1222. sqls.Add("update makeserial set ms_status=2 where ms_checkno='" + iCheckno + "'");
  1223. }
  1224. dh.ExecuteSQLTran(sqls.ToArray());
  1225. sqls.Clear();
  1226. }
  1227. return true;
  1228. }
  1229. /// <summary>
  1230. /// 设置良品采集结果,iResult含有“批次通过”按抽检批次通过
  1231. /// </summary>
  1232. /// <param name="iSnCode"></param>
  1233. /// <param name="iMakeCode"></param>
  1234. /// <param name="iSourceCode"></param>
  1235. /// <param name="iUserName"></param>
  1236. /// <param name="iResult"></param>
  1237. /// <param name="oErrorMessage"></param>
  1238. /// <returns></returns>
  1239. public static bool UpdateMakeMessage(string iSnCode, string iMakeCode, string iMPKind, string iSourceCode, string iUserCode, string iResult, out string oErrorMessage)
  1240. {
  1241. return SetStepFinish(iMakeCode, iSourceCode, iSnCode, iMPKind, iResult, iUserCode, out oErrorMessage);
  1242. }
  1243. /// <summary>
  1244. /// 获取执行步骤代码,名称和线别
  1245. /// </summary>
  1246. /// <param name="Source"></param>
  1247. /// <param name="StepCode"></param>
  1248. /// <param name="StepName"></param>
  1249. /// <param name="LineCode"></param>
  1250. private static void GetStepCodeAndNameAndLineBySource(string Source, ref string StepCode, ref string StepName, ref string LineCode)
  1251. {
  1252. DataTable dt = dh.getFieldsDataByCondition("source", new string[] { "sc_stepcode", "sc_stepname", "sc_linecode" }, "sc_code='" + Source + "'");
  1253. if (dt.Rows.Count > 0)
  1254. {
  1255. StepCode = dt.Rows[0]["sc_stepcode"].ToString();
  1256. StepName = dt.Rows[0]["sc_stepname"].ToString();
  1257. LineCode = dt.Rows[0]["sc_linecode"].ToString();
  1258. }
  1259. }
  1260. /// <summary>
  1261. /// 获取步骤代码和名称
  1262. /// </summary>
  1263. /// <param name="Source"></param>
  1264. /// <param name="StepCode"></param>
  1265. /// <param name="StepName"></param>
  1266. private static void GetStepCodeAndNameBySource(string Source, ref string StepCode, ref string StepName)
  1267. {
  1268. DataTable dt = dh.getFieldsDataByCondition("source", new string[] { "sc_stepcode", "sc_stepname", "sc_linecode" }, "sc_code='" + Source + "'");
  1269. if (dt.Rows.Count > 0)
  1270. {
  1271. StepCode = dt.Rows[0]["sc_stepcode"].ToString();
  1272. StepName = dt.Rows[0]["sc_stepname"].ToString();
  1273. }
  1274. }
  1275. /// <summary>
  1276. /// 获取步骤代码
  1277. /// </summary>
  1278. /// <param name="Source"></param>
  1279. /// <returns></returns>
  1280. private static string GetStepCodeBySource(string Source)
  1281. {
  1282. return dh.getFieldDataByCondition("source", "sc_stepcode", "sc_code='" + Source + "'").ToString();
  1283. }
  1284. private static string lpad(int length, string number)
  1285. {
  1286. while (number.Length < length)
  1287. {
  1288. number = "0" + number;
  1289. }
  1290. number = number.Substring(number.Length - length, length);
  1291. return number;
  1292. }
  1293. /// <summary>
  1294. /// 获取箱号
  1295. /// </summary>
  1296. /// <param name="pr_id">物料主表的ID</param>
  1297. /// <param name="kind">管控类型</param>
  1298. /// <returns></returns>
  1299. public static string GetOutBoxCode(string pr_id, string kind)
  1300. {
  1301. StringBuilder code = new StringBuilder();
  1302. object pr_kind = dh.getFieldDataByCondition("product", "pr_tracekind", "pr_id=" + pr_id);
  1303. if (pr_kind.ToString() != "")
  1304. {
  1305. if ((kind.Equals("1") && pr_kind.ToString() == "1") || (kind.Equals("2") && pr_kind.ToString() == "2"))
  1306. {
  1307. // 单间管控或者批管控
  1308. DataTable dt = dh.getFieldsDataByCondition("barcodeSet", new string[] { "bs_id ,bs_lenprid,bs_lennum,bs_maxnum" }, "bs_type='PACK'");
  1309. if (dt.Rows.Count > 0)
  1310. {
  1311. code.Append(lpad(int.Parse(dt.Rows[0]["bs_lenprid"].ToString()), pr_id));// PR_ID物料ID的长度
  1312. code.Append(lpad(int.Parse(dt.Rows[0]["bs_lennum"].ToString()), dt.Rows[0]["bs_maxnum"].ToString()));// 当前流水号
  1313. dh.UpdateByCondition("barcodeSet", "bs_maxnum=bs_maxnum+1", "bs_type='PACK' and bs_id=" + dt.Rows[0]["bs_id"]);// 流水号增加1
  1314. }
  1315. else
  1316. BaseUtil.ShowError("未定义包装箱号产生规则或规则未审核");
  1317. }
  1318. else
  1319. BaseUtil.ShowError("物料管控类型错误!该物料管控类型为不管控");
  1320. }
  1321. return code.ToString();
  1322. }
  1323. }
  1324. }