UAS_出货标签管理.cs 112 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278
  1. using System;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using System.Text.RegularExpressions;
  6. using System.Text;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Diagnostics;
  10. using LabelManager2;
  11. using UAS_LabelMachine.PublicMethod;
  12. using UAS_LabelMachine.Entity;
  13. using UAS_特殊解析规则;
  14. using UAS_LabelMachine.CustomControl.GroupBoxWithBorder;
  15. using UAS_LabelMachine.PublicForm;
  16. using System.Threading;
  17. using System.IO;
  18. using System.Globalization;
  19. namespace UAS_LabelMachine
  20. {
  21. public partial class UAS_出货标签打印 : Form
  22. {
  23. //自适应屏幕
  24. AutoSizeFormClass asc = new AutoSizeFormClass();
  25. DataHelper dh;
  26. DataTable dt;
  27. /// <summary>
  28. /// 已经打印过的外箱号
  29. /// </summary>
  30. List<string> PrintedOutboxCode = new List<string>();
  31. /// <summary>
  32. /// 已经打印过的Vivo外箱号
  33. /// </summary>
  34. List<string> PrintedVivoOutboxCode = new List<string>();
  35. StringBuilder sql = new StringBuilder();
  36. /// <summary>
  37. /// CodeSoft新建打印机引擎
  38. /// </summary>
  39. ApplicationClass lbl;
  40. /// <summary>
  41. /// 单盘打印文件
  42. /// </summary>
  43. Document SingleDoc;
  44. /// <summary>
  45. /// 中盒打印文件
  46. /// </summary>
  47. Document MidDoc;
  48. /// <summary>
  49. /// 外箱打印文件
  50. /// </summary>
  51. Document OutBoxDoc;
  52. /// <summary>
  53. /// Loading窗口
  54. /// </summary>
  55. SetLoadingWindow stw;
  56. /// <summary>
  57. /// 弹窗线程
  58. /// </summary>
  59. Thread thread;
  60. /// <summary>
  61. /// 当前品牌
  62. /// </summary>
  63. string Brand;
  64. string PI_ID;
  65. /// <summary>
  66. /// 当前扫描的项目
  67. /// </summary>
  68. int CurrentItemIndex = 0;
  69. /// <summary>
  70. /// 当前扫描的所在行
  71. /// </summary>
  72. int CurrentRowIndex = 0;
  73. /// <summary>
  74. /// 最大的出入口单号
  75. /// </summary>
  76. int MaxOutBoxCode = 1;
  77. /// <summary>
  78. /// 正则表达式用于项目匹配
  79. /// </summary>
  80. Regex reg;
  81. /*标识供应商物料编号采集是否通过*/
  82. bool CollectVeProdCodePass = true;
  83. bool CollectQTYPass = true;
  84. bool logout = false;
  85. //每个不同序号存在的
  86. object[] ItemData;
  87. Dictionary<string, string> CollectData;
  88. //缓存单盘数据数据的DataTable
  89. DataTable SingleBoxCacheData;
  90. /// <summary>
  91. /// 存放单盘的ID
  92. /// </summary>
  93. List<string> SingleID = new List<string>();
  94. /// <summary>
  95. /// 单盘的打印参数
  96. /// </summary>
  97. List<string> SingleBoxArgument = new List<string>();
  98. /// <summary>
  99. /// 中盒缓存数据
  100. /// </summary>
  101. DataTable MidBoxCacheData;
  102. /// <summary>
  103. /// 存放中盒的ID和盒号
  104. /// </summary>
  105. Dictionary<string, string> MidIDAndOutboxcode = new Dictionary<string, string>();
  106. /// <summary>
  107. /// 中盒的打印参数
  108. /// </summary>
  109. List<string> MidBoxArgument = new List<string>();
  110. /// <summary>
  111. /// 全部采集
  112. /// </summary>
  113. bool AllCollect = false;
  114. /// <summary>
  115. /// 是否全选
  116. /// </summary>
  117. bool AllChecked = false;
  118. /// <summary>
  119. /// 是否获取过箱号
  120. /// </summary>
  121. bool GetPackingCode = false;
  122. /*用于存放采集项目的Grid信息*/
  123. Dictionary<string, Dictionary<string, string>> SiItem;
  124. int CloumnCount = 0;
  125. /*需要重绘的Cell*/
  126. Dictionary<DataGridViewCell, bool> PaintCell = new Dictionary<DataGridViewCell, bool>();
  127. //使用二维数组进行排序
  128. ArrayList<ArrayList<string>> ScanData;
  129. ArrayList<string> GetData;
  130. /// <summary>
  131. /// 是否通过选择Combox来改变打开的文件
  132. /// </summary>
  133. bool ComBoxClickChangeLabelDoc = false;
  134. public UAS_出货标签打印()
  135. {
  136. InitializeComponent();
  137. }
  138. protected override void WndProc(ref Message m)
  139. {
  140. //拦截双击标题栏、移动窗体的系统消息
  141. if (m.Msg != 0xA3)
  142. {
  143. base.WndProc(ref m);
  144. }
  145. }
  146. private void RefreshDB(object sender, EventArgs e)
  147. {
  148. DataHelper dh = new DataHelper();
  149. }
  150. private void 贴标机条码打印_Load(object sender, EventArgs e)
  151. {
  152. //杀死之前全部未关闭的进程
  153. Process[] processes = System.Diagnostics.Process.GetProcessesByName("lppa");
  154. for (int i = 0; i < processes.Length; i++)
  155. {
  156. processes[i].Kill();
  157. }
  158. //用计时器重置数据库链接
  159. LogManager.DoLog("程序启动,登陆人员【" + User.UserName + "】");
  160. dh = new DataHelper();
  161. CheckForIllegalCrossThreadCalls = false;
  162. CloumnCount = LabelInf.Columns.Count;
  163. pi_inoutno.Focus();
  164. //将本地读取的打印机设置进Combox,并选中默认打印机
  165. if (User.UserAccountType == "admin")
  166. PowerSetting.Visible = true;
  167. MidBoxCacheData = new DataTable();
  168. SingleBoxCacheData = new DataTable();
  169. sg_code.FormName = Name;
  170. sg_code.SetValueField = new string[] { "sg_code" };
  171. sg_code.SelectField = "sg_code # 策略编号 ,sg_name # 策略名称,sg_brand # 品牌,sg_separator # 分隔符";
  172. sg_code.TableName = "scangroup";
  173. pr_code.FormName = Name;
  174. pr_code.SetValueField = new string[] { "pr_code", "pib_id" };
  175. pr_code.TableName = "prodiodetail";
  176. pr_code.SelectField = "pd_pdno # 行号,pd_prodcode # 物料编号";
  177. CollectionUnit.Text = "盘";
  178. Point pt = new Point();
  179. //禁止所有列的排序
  180. foreach (DataGridViewColumn dgv in LabelInf.Columns)
  181. {
  182. dgv.SortMode = DataGridViewColumnSortMode.NotSortable;
  183. }
  184. int ScreenWidth = Screen.GetWorkingArea(pt).Width;
  185. //如果分辨率大的设置的字体对应的变大
  186. //if (ScreenWidth > 1366)
  187. //{
  188. // foreach (Control ctl in Controls)
  189. // {
  190. // if (ctl is CheckBox || ctl is Label || ctl is RadioButton)
  191. // {
  192. // ctl.Font = new Font("微软雅黑", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
  193. // }
  194. // if (ctl is GroupBoxWithBorder)
  195. // {
  196. // GroupBoxWithBorder gb = ctl as GroupBoxWithBorder;
  197. // for (int i = 0; i < gb.Controls.Count; i++)
  198. // {
  199. // if (gb.Controls[i] is CheckBox || gb.Controls[i] is Label || gb.Controls[i] is RadioButton)
  200. // {
  201. // gb.Controls[i].Font = new Font("微软雅黑", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
  202. // }
  203. // }
  204. // }
  205. // }
  206. //}
  207. //设置获取当前屏幕大小自动全屏但是保留任务栏
  208. Rectangle ScreenArea = Screen.GetWorkingArea(this);
  209. Top = 0;
  210. Left = 0;
  211. Width = ScreenArea.Width;
  212. Height = ScreenArea.Height;
  213. //怡海能达添加的特殊字段
  214. if (DataHelper.DBConnectionString.Contains("sz.hi-mantech.com") || DataHelper.DBConnectionString.Contains("192.168.1.200"))
  215. {
  216. DateCode1.Visible = true;
  217. SingleLabelAutoPrint.Checked = true;
  218. MidLabelAutoPrint.Checked = true;
  219. }
  220. if (!(DataHelper.DBConnectionString.Contains("richwell") || DataHelper.DBConnectionString.Contains("192.168.0.88")))
  221. {
  222. pib_cusbarcode.Visible = false;
  223. pib_cusoutboxcode.Visible = false;
  224. ViVoPlate.Visible = false;
  225. OutBoxLabelPackage.Visible = false;
  226. GetOutBoxCode.Visible = false;
  227. }
  228. asc.controllInitializeSize(this);
  229. asc.controlAutoSize(this);
  230. //实例化打印进程
  231. try
  232. {
  233. lbl = new ApplicationClass();
  234. }
  235. catch (Exception)
  236. {
  237. MessageBox.Show("未安装CodeSoft软件或者版本不正确");
  238. }
  239. }
  240. private void 贴标机条码打印_SizeChanged(object sender, EventArgs e)
  241. {
  242. asc.controlAutoSize(this);
  243. }
  244. private void GenerateBarCode_Click(object sender, EventArgs e)
  245. {
  246. 生成条码 form = new 生成条码(pi_inoutno.Text);
  247. form.FormClosed += LoadGridData;
  248. BaseUtil.SetFormCenter(form);
  249. form.ShowDialog();
  250. }
  251. private void CollectionSetting_Click(object sender, EventArgs e)
  252. {
  253. 采集策略 form = new 采集策略(sg_code.Text);
  254. form.FormClosed += sg_code_UserControlTextChanged;
  255. BaseUtil.SetFormCenter(form);
  256. form.ShowDialog();
  257. }
  258. private void LabelMaintain_Click(object sender, EventArgs e)
  259. {
  260. 客户标签维护 form = new 客户标签维护();
  261. BaseUtil.SetFormCenter(form);
  262. if (SingleDoc != null)
  263. SingleDoc.Close();
  264. if (MidDoc != null)
  265. MidDoc.Close();
  266. if (OutBoxDoc != null)
  267. OutBoxDoc.Close();
  268. form.FormClosed += LabelFormClose;
  269. form.ShowDialog();
  270. }
  271. private void LabelFormClose(object sender, EventArgs e)
  272. {
  273. if (GetGridOnly.Checked)
  274. GetInOutInfAndLabelFile();
  275. else
  276. {
  277. GetGridOnly.Checked = true;
  278. GetInOutInfAndLabelFile();
  279. GetGridOnly.Checked = false;
  280. }
  281. }
  282. /// <summary>
  283. /// 保存明细
  284. /// </summary>
  285. /// <param name="sender"></param>
  286. /// <param name="e"></param>
  287. private void SaveGrid_Click(object sender, EventArgs e)
  288. {
  289. DataTable savedt = (LabelInf.DataSource as DataTable);
  290. if (savedt != null && savedt.GetChanges() != null)
  291. {
  292. MidSource.EndEdit();
  293. dh.SaveDataTable(savedt.GetChanges(), "ProdioBarCode", "pib_id");
  294. MessageBox.Show("保存成功!");
  295. }
  296. }
  297. private void SaveGridData()
  298. {
  299. DataTable savedt = (LabelInf.DataSource as DataTable);
  300. if (LabelInf.DataSource != null && savedt.GetChanges() != null)
  301. {
  302. dh.UpDateTableByCondition(savedt, "ProdioBarCode", "pib_id");
  303. LoadGridData(new object(), new EventArgs());
  304. MessageBox.Show("保存成功!");
  305. }
  306. }
  307. //放大镜选择后出发的事件
  308. private void sg_code_UserControlTextChanged(object sender, EventArgs e)
  309. {
  310. //取已启用的的按照采集次序排序
  311. dt = (DataTable)dh.ExecuteSql("select si_item,si_detno,sg_separator,si_kind,si_expression,si_index,si_indexstring,si_length from scanitem left join scangroup on si_sgid=sg_id where sg_code='" + sg_code.Text + "' and si_enable<>0 order by si_detno", "select");
  312. BaseUtil.FillDgvWithDataTable(Si_ItemDGV, dt);
  313. if (dt.Rows.Count > 0)
  314. {
  315. sg_separator.Text = dt.Rows[0]["sg_separator"].ToString();
  316. }
  317. //按DetNo排列之后的采集项
  318. ScanData = new ArrayList<ArrayList<string>>();
  319. //每个采集项目的子项
  320. GetData = new ArrayList<string>();
  321. //将数据添加进一个List的二维数组中
  322. for (int i = 0; i < Si_ItemDGV.RowCount; i++)
  323. {
  324. //如果不包含这个则添加进数组
  325. if (!GetData.Contains(Si_ItemDGV.Rows[i].Cells["si_item"].Value.ToString()))
  326. {
  327. GetData.Add(Si_ItemDGV.Rows[i].Cells["si_item"].Value.ToString());
  328. }
  329. //如果和后一个的采集次序相同
  330. if (((i + 1) < Si_ItemDGV.RowCount) && Si_ItemDGV.Rows[i].Cells["si_detno"].Value.ToString() == Si_ItemDGV.Rows[i + 1].Cells["si_detno"].Value.ToString())
  331. {
  332. GetData.Add(Si_ItemDGV.Rows[i + 1].Cells["si_item"].Value.ToString());
  333. }
  334. else
  335. {
  336. ScanData.Add(GetData);
  337. //添加完一次数据需要一个新的List
  338. GetData = new ArrayList<string>();
  339. }
  340. }
  341. RemindUser();
  342. if (ScanData.ToArray().Length > 0)
  343. {
  344. object[] arr = (ScanData.ToArray()[0] as ArrayList<string>).ToArray();
  345. if (arr.Contains("MPN"))
  346. {
  347. AutoMatch.CheckState = CheckState.Checked;
  348. AutoMatch.Enabled = true;
  349. }
  350. else
  351. {
  352. AutoMatch.CheckState = CheckState.Unchecked;
  353. AutoMatch.Enabled = false;
  354. }
  355. }
  356. }
  357. //输入框Enter事件
  358. private void Input_KeyDown(object sender, KeyEventArgs e)
  359. {
  360. if (e.KeyCode == Keys.Enter)
  361. {
  362. if (Input.Text == "")
  363. {
  364. MessageBox.Show("采集的数据不能为空");
  365. return;
  366. }
  367. CollectInputData();
  368. }
  369. }
  370. /// <summary>
  371. /// 设置自动匹配的数据的行号
  372. /// </summary>
  373. /// <returns></returns>
  374. private void SetAutoMatchRow()
  375. {
  376. //采集策略的第一组数据
  377. string[] arr = new string[ItemData.Length];
  378. if (sg_separator.Text == "")
  379. {
  380. for (int i = 0; i < arr.Length; i++)
  381. {
  382. arr[i] = Input.Text;
  383. }
  384. }
  385. else
  386. {
  387. arr = Input.Text.Split(sg_separator.Text.ToCharArray()).ToArray();
  388. }
  389. bool FindAutoMatch = false;
  390. for (int i = 0; i < LabelInf.RowCount; i++)
  391. {
  392. for (int j = 0; j < arr.Length; j++)
  393. {
  394. if (LabelInf.Rows[i].Cells["pr_vendprodcode"].Value.ToString() == MatchStr(arr[j].ToString(), "MPN") && LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  395. {
  396. CurrentRowIndex = i;
  397. FindAutoMatch = true;
  398. break;
  399. }
  400. }
  401. if (FindAutoMatch)
  402. break;
  403. }
  404. }
  405. /// <summary>
  406. /// 采集数据
  407. /// </summary>
  408. private void CollectInputData()
  409. {
  410. LogManager.DoLog("采集数据【" + Input.Text + "】,使用采集策略编号【" + sg_code.Text + "】");
  411. //按DetNo排列之后的采集项
  412. ScanData = new ArrayList<ArrayList<string>>();
  413. //每个采集项目的子项
  414. GetData = new ArrayList<string>();
  415. //用于保存采集策略的具体信息
  416. SiItem = new Dictionary<string, Dictionary<string, string>>();
  417. for (int i = 0; i < Si_ItemDGV.RowCount; i++)
  418. {
  419. //如果不包含这个则添加进数组
  420. if (!GetData.Contains(Si_ItemDGV.Rows[i].Cells["si_item"].Value.ToString()))
  421. GetData.Add(Si_ItemDGV.Rows[i].Cells["si_item"].Value.ToString());
  422. //如果和后一个的采集次序相同
  423. if (((i + 1) < Si_ItemDGV.RowCount) && Si_ItemDGV.Rows[i].Cells["si_detno"].Value.ToString() == Si_ItemDGV.Rows[i + 1].Cells["si_detno"].Value.ToString())
  424. GetData.Add(Si_ItemDGV.Rows[i + 1].Cells["si_item"].Value.ToString());
  425. else
  426. {
  427. ScanData.Add(GetData);
  428. //添加完一次数据需要一个新的List
  429. GetData = new ArrayList<string>();
  430. }
  431. Dictionary<string, string> item = new Dictionary<string, string>();
  432. for (int j = 0; j < Si_ItemDGV.ColumnCount; j++)
  433. {
  434. item.Add(Si_ItemDGV.Columns[j].DataPropertyName, Si_ItemDGV.Rows[i].Cells[j].Value.ToString());
  435. }
  436. SiItem.Add(Si_ItemDGV.Rows[i].Cells["si_item"].Value.ToString().ToUpper(), item);
  437. }
  438. //采集项目的数组
  439. ItemData = (ScanData.ToArray()[CurrentItemIndex] as ArrayList<string>).ToArray();
  440. //分隔符不为空的时候 //采集的项和Grid的数目不等
  441. //用户采集的数据的分割数组
  442. CollectData = new Dictionary<string, string>();
  443. if (sg_separator.Text == "")
  444. {
  445. for (int i = 0; i < ItemData.Length; i++)
  446. CollectData.Add(ItemData[i].ToString().ToUpper(), Input.Text);
  447. }
  448. else
  449. {
  450. for (int i = 0; i < Input.Text.Split(sg_separator.Text.ToCharArray()).Length; i++)
  451. CollectData.Add(ItemData[i].ToString().ToUpper(), Input.Text.Split(sg_separator.Text.ToCharArray())[i]);
  452. }
  453. //首先判断当前采集的个数,如果采集的个数为1则不对数据进行分隔符验证
  454. if (ItemData.Length == 1)
  455. {
  456. CollectData.Clear();
  457. CollectData.Add(ItemData[0].ToString().ToUpper(), Input.Text);
  458. //勾选了自动匹配调用该函数
  459. if (AutoMatch.Checked)
  460. SetAutoMatchRow();
  461. //将筛选之后的值赋给Cell
  462. SetDataToCell(ref CollectData, ItemData[0].ToString().ToUpper());
  463. }
  464. //如果本次采集的数据分割后和当前的采集项目个数不一样提示用户错误
  465. else if (CollectData.ToArray().Length == ItemData.Length)
  466. {
  467. for (int i = 0; i < ItemData.Length; i++)
  468. {
  469. //勾选了自动匹配调用该函数
  470. if (AutoMatch.Checked)
  471. SetAutoMatchRow();
  472. //将筛选之后的值赋给Cell
  473. SetDataToCell(ref CollectData, ItemData[i].ToString().ToUpper());
  474. }
  475. }
  476. else
  477. {
  478. MessageBox.Show("所采集的数据个数和采集项目不符");
  479. return;
  480. }
  481. //采集项目的索引+1
  482. CurrentItemIndex = CurrentItemIndex + 1;
  483. //如果已经采集完了最后一个
  484. if (CurrentItemIndex == ScanData.ToArray().Length)
  485. {
  486. //数据校验均已通过则勾选上已采集
  487. if (CollectVeProdCodePass && CollectQTYPass)
  488. {
  489. //如果按盒号采集,所有的此盒的均更新为
  490. if (CollectionUnit.Text == "盒")
  491. {
  492. string la_id = SingleLabelCombox.SelectedValue.ToString().Split('#')[0];
  493. string cl_labelname = SingleLabelCombox.Text;
  494. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  495. for (int i = 0; i < LabelInf.RowCount; i++)
  496. {
  497. if (LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() == LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString())
  498. {
  499. LabelInf.Rows[i].Cells["pib_lotno"].Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_lotno"].Value;
  500. LabelInf.Rows[i].Cells["pib_datecode"].Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode"].Value;
  501. //将采集数据正确的Cell添加到键值对中
  502. if (PaintCell.ContainsKey(LabelInf.Rows[i].Cells["pr_vendprodcode"]))
  503. {
  504. PaintCell.Remove(LabelInf.Rows[i].Cells["pr_vendprodcode"]);
  505. }
  506. PaintCell.Add(LabelInf.Rows[i].Cells["pr_vendprodcode"], true);
  507. if (PaintCell.ContainsKey(LabelInf.Rows[i].Cells["pib_qty"]))
  508. {
  509. PaintCell.Remove(LabelInf.Rows[i].Cells["pib_qty"]);
  510. }
  511. PaintCell.Add(LabelInf.Rows[i].Cells["pib_qty"], true);
  512. LabelInf.Refresh();
  513. LabelInf.Rows[i].Cells["pib_ifpick"].Value = true;
  514. LabelInf.Rows[i].Cells["Choose"].Value = true;
  515. //当前行的索引随循环增长
  516. CurrentRowIndex = i;
  517. if (SingleLabelAutoPrint.Checked)
  518. AutoPrintSingleLabel(la_id, LabelUrl);
  519. if (MidLabelAutoPrint.Checked)
  520. AutoPrintMidLabel();
  521. SetOutBoxCode2(true);
  522. }
  523. }
  524. }
  525. else if (CollectionUnit.Text == "全部")
  526. {
  527. for (int i = 0; i < LabelInf.RowCount; i++)
  528. {
  529. LabelInf.Rows[i].Cells["pib_lotno"].Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_lotno"].Value;
  530. LabelInf.Rows[i].Cells["pib_datecode"].Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode"].Value;
  531. CurrentRowIndex = i;
  532. //将采集数据正确的Cell添加到键值对中
  533. if (PaintCell.ContainsKey(LabelInf.Rows[i].Cells["pr_vendprodcode"]))
  534. {
  535. PaintCell.Remove(LabelInf.Rows[i].Cells["pr_vendprodcode"]);
  536. }
  537. PaintCell.Add(LabelInf.Rows[i].Cells["pr_vendprodcode"], true);
  538. if (PaintCell.ContainsKey(LabelInf.Rows[i].Cells["pib_qty"]))
  539. {
  540. PaintCell.Remove(LabelInf.Rows[i].Cells["pib_qty"]);
  541. }
  542. PaintCell.Add(LabelInf.Rows[i].Cells["pib_qty"], true);
  543. LabelInf.Refresh();
  544. LabelInf.Rows[i].Cells["pib_ifpick"].Value = true;
  545. LabelInf.Rows[i].Cells["Choose"].Value = true;
  546. SetOutBoxCode2(true);
  547. }
  548. }
  549. else
  550. {
  551. LabelInf.Rows[CurrentRowIndex].Cells["pib_ifpick"].Value = true;
  552. LabelInf.Rows[CurrentRowIndex].Cells["Choose"].Value = true;
  553. //勾选了单盘自动打印
  554. if (SingleLabelAutoPrint.Checked)
  555. {
  556. string la_id = SingleLabelCombox.SelectedValue.ToString().Split('#')[0];
  557. string cl_labelname = SingleLabelCombox.Text;
  558. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  559. AutoPrintSingleLabel(la_id, LabelUrl);
  560. }
  561. //勾选了中盒自动打印
  562. if (MidLabelAutoPrint.Checked)
  563. AutoPrintMidLabel();
  564. }
  565. }
  566. //采集未通过的时候
  567. else
  568. {
  569. //如果自动采集采集未成功需要移动到下一行
  570. if (!AutoMatch.Checked)
  571. SetRowIndexToCollectRow();
  572. }
  573. //当前项目已采集完成,重置采集项目
  574. CurrentItemIndex = 0;
  575. //未勾选自动匹配,设置到下一个未采集的行
  576. if (!AutoMatch.Checked)
  577. SetRowIndexToCollectRow();
  578. }
  579. //提醒用户需要采集的数据
  580. RemindUser();
  581. RefreshProcessData();
  582. MessageLog.AppendText(">>扫描到数据" + Input.Text + "\n", Color.Blue);
  583. //如果所采集的行的物料不一样的话,重新计算箱内容量
  584. if (CurrentRowIndex - 1 > 0)
  585. {
  586. string LastRowProd = LabelInf.Rows[CurrentRowIndex - 1].Cells["pib_prodcode"].Value.ToString();
  587. string CurrentRowProd = LabelInf.Rows[CurrentRowIndex].Cells["pib_prodcode"].Value.ToString();
  588. //如果两行的物料资料不相等的话
  589. if (LastRowProd != CurrentRowProd)
  590. SetOutBoxCapacity(CurrentRowProd);
  591. }
  592. if (CleanInputAfterCollect.Checked)
  593. Input.Text = "";
  594. }
  595. /// <summary>
  596. /// 根据物料资料的参数设置外箱容量
  597. /// </summary>
  598. /// <param name="pr_code"></param>
  599. private void SetOutBoxCapacity(string pr_code)
  600. {
  601. DataTable temp = (DataTable)dh.ExecuteSql("select pr_qtyperplace,pr_zxbzs from product where pr_code='" + pr_code + "'", "select");
  602. if (temp.Rows.Count > 0)
  603. {
  604. try { OutboxCapacity.Value = (decimal)temp.Rows[0]["pr_qtyperplace"] / (decimal)temp.Rows[0]["pr_zxbzs"]; }
  605. catch (Exception) { }
  606. }
  607. }
  608. //设置行的索引到当前需要采集的行
  609. private void SetRowIndexToCollectRow()
  610. {
  611. //获取当前需要采集的行
  612. for (int i = CurrentRowIndex; i < LabelInf.RowCount; i++)
  613. {
  614. if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  615. {
  616. griddetno.Text = LabelInf.Rows[i].Cells["pib_pdno"].FormattedValue.ToString();
  617. pr_code.Text = LabelInf.Rows[i].Cells["pib_prodcode"].FormattedValue.ToString();
  618. CurrentRowIndex = LabelInf.Rows[i].Cells["pib_prodcode"].RowIndex;
  619. break;
  620. }
  621. }
  622. }
  623. private void AutoPrintSingleLabel(string la_id, string LabelUrl)
  624. {
  625. //获取维护的变量名称和SQL
  626. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  627. //用标签本身的变量作为最外层的循环条件去匹配
  628. for (int j = 0; j < SingleDoc.Variables.FreeVariables.Count; j++)
  629. {
  630. //将维护的模板参数和模板本身的参数名称进行比对
  631. for (int k = 0; k < dt.Rows.Count; k++)
  632. {
  633. //名称相等的时候,取SQL进行值的查询
  634. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name == dt.Rows[k]["lp_name"].ToString())
  635. {
  636. //获取打印执行的SQL
  637. string sql = dt.Rows[k]["lp_sql"].ToString();
  638. if (sql.IndexOf("{") == 0)
  639. {
  640. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(sql).ToString();
  641. LogManager.DoLog("打印参数【" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + sql + ",取到值" + SingleDoc.Variables.FreeVariables.Item(j + 1).Value);
  642. }
  643. else
  644. {
  645. sql = sql.Substring(0, sql.IndexOf("{"));
  646. //获取对应行的pib_id
  647. string pib_id = LabelInf.Rows[CurrentRowIndex].Cells["pib_id1"].Value.ToString();
  648. if (sql.ToLower().Contains("pib_lotno"))
  649. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_lotno"].Value.ToString();
  650. else if (sql.ToLower().Contains("pib_datecode"))
  651. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode"].Value.ToString();
  652. else if (sql.ToLower().Contains("pib_cusbarcode"))
  653. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_cusbarcode"].Value.ToString();
  654. else if (sql.ToLower().Contains("pib_cusoutboxcode"))
  655. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_cusoutboxcode"].Value.ToString();
  656. else
  657. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(sql + pib_id).ToString();
  658. LogManager.DoLog("打印参数【" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + sql + pib_id + ",取到值" + SingleDoc.Variables.FreeVariables.Item(j + 1).Value);
  659. }
  660. }
  661. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name == "DateCode1")
  662. {
  663. if (LabelInf.Rows[CurrentRowIndex].Cells["DateCode1"].Value != null)
  664. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["DateCode1"].Value.ToString();
  665. }
  666. }
  667. }
  668. //保存参数打印
  669. SingleDoc.Save();
  670. SingleDoc.Printer.SwitchTo(SingleLabelPrinter.Text);
  671. SingleDoc.PrintDocument();
  672. LogManager.DoLog("执行打印单盘,pib_id:" + LabelInf.Rows[CurrentRowIndex].Cells["pib_id1"].Value.ToString() + ",标签地址" + LabelUrl);
  673. LabelInf.Rows[CurrentRowIndex].Cells["pib_ifprint"].Value = true;
  674. }
  675. /// <summary>
  676. /// 提醒用户当前采集的项目
  677. /// </summary>
  678. private void RemindUser()
  679. {
  680. SetRowIndexToCollectRow();
  681. if (ScanData.ToArray().Length > 0)
  682. {
  683. object[] arr = (ScanData.ToArray()[CurrentItemIndex] as ArrayList<string>).ToArray();
  684. string Inf = "";
  685. for (int i = 0; i < arr.Length; i++)
  686. {
  687. Inf += arr[i] + " ";
  688. }
  689. MessageLog.AppendText(">>当前采集行" + (CurrentRowIndex + 1) + ",请采集" + Inf + "\n", Color.Green);
  690. }
  691. }
  692. /// <summary>
  693. /// 自定义函数 将匹配之后的值设置到Cell中,传递引用,每次赋值之后从List中移除已使用过的
  694. /// </summary>
  695. /// <param name="data"></param>
  696. /// <param name="kind"></param>
  697. private void SetDataToCell(ref Dictionary<string, string> setdata, string kind)
  698. {
  699. int length = setdata.Count;
  700. for (int j = 0; j < length; j++)
  701. {
  702. string[] data = new string[setdata.Count];
  703. for (int i = 0; i < length; i++)
  704. {
  705. data[i] = setdata[kind];
  706. }
  707. for (int i = 0; i < data.Length; i++)
  708. {
  709. DataGridViewCell cell = null;
  710. string Matchstr = "";
  711. switch (kind.ToString().ToUpper())
  712. {
  713. case "DATECODE":
  714. cell = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode"];
  715. Matchstr = MatchStr(data[j], "DATECODE");
  716. setdata.Remove("DATECODE");
  717. length--;
  718. break;
  719. case "LOTNO":
  720. cell = LabelInf.Rows[CurrentRowIndex].Cells["pib_lotno"];
  721. Matchstr = MatchStr(data[j], "LOTNO");
  722. setdata.Remove("LOTNO");
  723. length--;
  724. break;
  725. case "MPN":
  726. cell = LabelInf.Rows[CurrentRowIndex].Cells["pr_vendprodcode"];
  727. Matchstr = MatchStr(data[j], "MPN");
  728. //采集的供应商号不匹配的话
  729. if (cell.Value.ToString() != Matchstr)
  730. {
  731. CollectVeProdCodePass = false;
  732. //添加需要重绘的Cell
  733. if (PaintCell.ContainsKey(cell))
  734. PaintCell.Remove(cell);
  735. PaintCell.Add(cell, false);
  736. LabelInf.Refresh();
  737. MessageLog.AppendText(">>供应商物料编号不匹配\n", Color.Red);
  738. }
  739. else
  740. {
  741. if (PaintCell.ContainsKey(cell))
  742. PaintCell.Remove(cell);
  743. PaintCell.Add(cell, true);
  744. LabelInf.Refresh();
  745. CollectVeProdCodePass = true;
  746. }
  747. setdata.Remove("MPN");
  748. length--;
  749. break;
  750. case "QTY":
  751. cell = LabelInf.Rows[CurrentRowIndex].Cells["pib_qty"];
  752. Matchstr = MatchStr(data[j], "QTY");
  753. //如果采集的数量不相等的话
  754. if (cell.Value.ToString() != Matchstr)
  755. {
  756. CollectQTYPass = false;
  757. //添加需要重绘的Cell
  758. if (PaintCell.ContainsKey(cell))
  759. PaintCell.Remove(cell);
  760. PaintCell.Add(cell, false);
  761. LabelInf.Refresh();
  762. MessageLog.AppendText(">>数量不匹配\n", Color.Red);
  763. }
  764. else
  765. {
  766. if (PaintCell.ContainsKey(cell))
  767. PaintCell.Remove(cell);
  768. PaintCell.Add(cell, true);
  769. LabelInf.Refresh();
  770. CollectQTYPass = true;
  771. }
  772. setdata.Remove("QTY");
  773. length--;
  774. break;
  775. default:
  776. break;
  777. }
  778. //如果数据为空或者数据不为空的时候但是和需要采集的数据不相等的情况下进行采集
  779. //MPN和QTY只做比较不需要赋值
  780. if (cell.Value.ToString() == "" || cell.Value.ToString() != Matchstr)
  781. {
  782. string MatchResult = "";
  783. if (kind != "MPN" && kind != "QTY")
  784. {
  785. cell.Value = Matchstr;
  786. MatchResult = "成功";
  787. }
  788. else
  789. MatchResult = "失败";
  790. switch (SiItem[kind]["si_kind"])
  791. {
  792. case "索引字符":
  793. LogManager.DoLog("采集项" + kind + ",匹配结果:【" + MatchResult + "】,匹配方式:" + SiItem[kind]["si_kind"] + ",使用字符" + SiItem[kind]["si_indexstring"] + ",匹配后字符串" + Matchstr);
  794. break;
  795. case "起始位置":
  796. LogManager.DoLog("采集项" + kind + ",匹配结果:【" + MatchResult + "】,匹配方式:" + SiItem[kind]["si_kind"] + ",从第" + SiItem[kind]["si_index"] + "位开始匹配,匹配后字符串" + Matchstr);
  797. break;
  798. case "二次解析":
  799. LogManager.DoLog("采集项" + kind + ",匹配结果:【" + MatchResult + "】,匹配方式:" + SiItem[kind]["si_kind"] + ",匹配后字符串" + Matchstr);
  800. break;
  801. case "全部":
  802. LogManager.DoLog("采集项" + kind + ",匹配结果:【" + MatchResult + "】,匹配方式:" + SiItem[kind]["si_kind"] + ",匹配后字符串" + Matchstr);
  803. break;
  804. default:
  805. break;
  806. }
  807. }
  808. else
  809. LogManager.DoLog("采集项" + kind + ",匹配结果:【成功】,匹配方式:" + SiItem[kind]["si_kind"] + ",,匹配后字符串" + Matchstr);
  810. }
  811. }
  812. //添加外箱号,如果外箱号的箱内容量不为0并且已经采集完成
  813. SetOutBoxCode2(false);
  814. }
  815. //
  816. /// <summary>
  817. /// 设置外箱号
  818. /// </summary>
  819. /// <param name="BatchCollect">是否批量采集</param>
  820. private void SetOutBoxCode2(bool BatchCollect)
  821. {
  822. if (OutboxCapacity.Value != 0)
  823. {
  824. //获取当前出入口单最大的外箱号
  825. for (int i = 0; i < LabelInf.RowCount; i++)
  826. {
  827. string outboxcode = LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString();
  828. if (outboxcode.Contains("-"))
  829. {
  830. if (int.Parse(outboxcode.Split('-')[0] == "" ? "1" : outboxcode.Split('-')[0]) > MaxOutBoxCode)
  831. MaxOutBoxCode = int.Parse(outboxcode.Split('-')[0]);
  832. }
  833. else
  834. {
  835. if (int.Parse(outboxcode == "" ? "0" : outboxcode) > MaxOutBoxCode)
  836. MaxOutBoxCode = int.Parse(outboxcode);
  837. }
  838. }
  839. //统计最大的箱号存在多少
  840. int MaxOutBoxCodeCount = 0;
  841. for (int i = 0; i < LabelInf.RowCount; i++)
  842. {
  843. if (LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString() == MaxOutBoxCode.ToString())
  844. MaxOutBoxCodeCount = MaxOutBoxCodeCount + 1;
  845. }
  846. //如果是获取过包装单的话则不再继续追加箱号
  847. if (!GetPackingCode)
  848. {
  849. //如果箱内的盒数量小于容量,继续使用此箱号赋值,否则箱号+1
  850. if (BatchCollect)
  851. {
  852. if (MaxOutBoxCodeCount < OutboxCapacity.Value)
  853. LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode2"].Value = MaxOutBoxCode;
  854. else
  855. {
  856. MaxOutBoxCode = MaxOutBoxCode + 1;
  857. LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode2"].Value = MaxOutBoxCode;
  858. }
  859. }
  860. else
  861. {
  862. if (MaxOutBoxCodeCount <= OutboxCapacity.Value)
  863. LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode2"].Value = MaxOutBoxCode;
  864. else
  865. {
  866. MaxOutBoxCode = MaxOutBoxCode + 1;
  867. LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode2"].Value = MaxOutBoxCode;
  868. }
  869. }
  870. }
  871. }
  872. }
  873. /// <summary>
  874. /// 自定义函数 根据匹配规则
  875. /// si_item的二维数组,str是需要赋值的字符串,item表示DateCode,LotNo等
  876. /// </summary>
  877. /// <param name="SiItem"></param>
  878. /// <param name="str"></param>
  879. /// <param name="item"></param>
  880. /// <returns></returns>
  881. private string MatchStr(string str, string item)
  882. {
  883. string kind = SiItem[item]["si_kind"];
  884. //起始字符不为空的时候
  885. switch (kind)
  886. {
  887. case "起始位置":
  888. if (SiItem[item]["si_index"] != "")
  889. {
  890. try
  891. {
  892. //长度不为空的时候按照指定的长度去取数据
  893. if (SiItem[item]["si_length"] != "")
  894. str = str.Substring(int.Parse(SiItem[item]["si_index"]), int.Parse(SiItem[item]["si_length"]));
  895. //长度为空的时候取index之后的全部数据
  896. else
  897. str = str.Substring(int.Parse(SiItem[item]["si_index"]));
  898. }
  899. catch (Exception e) { LogManager.DoLog(e.Message); }
  900. }
  901. break;
  902. case "索引字符":
  903. try
  904. {
  905. if (SiItem[item]["si_indexstring"] != "")
  906. {
  907. //长度不为空的时候按照指定的长度去取数据
  908. if (SiItem[item]["si_length"] != "")
  909. str = str.Substring(str.IndexOf(SiItem[item]["si_indexstring"]) + 1, int.Parse(SiItem[item]["si_length"]));
  910. //长度为空的时候取index之后的全部数据
  911. else
  912. str = str.Substring(str.IndexOf(SiItem[item]["si_indexstring"]) + 1);
  913. }
  914. }
  915. catch (Exception e) { LogManager.DoLog(e.Message); }
  916. break;
  917. case "二次解析":
  918. if (SiItem[item]["si_indexstring"] != "")
  919. {
  920. //长度不为空的时候按照指定的长度去取数据
  921. if (SiItem[item]["si_length"] != "")
  922. str = str.Substring(str.IndexOf(SiItem[item]["si_indexstring"]) + 1, int.Parse(SiItem[item]["si_length"]));
  923. //长度为空的时候取index之后的全部数据
  924. else
  925. str = str.Substring(str.IndexOf(SiItem[item]["si_indexstring"]) + 1);
  926. }
  927. str = Analysis.AnalysisData(Brand, item, str);
  928. break;
  929. case "全部":
  930. break;
  931. default:
  932. break;
  933. }
  934. if (SiItem[item]["si_expression"] != "")
  935. {
  936. string log = "使用正则表达式" + SiItem[item]["si_expression"] + "匹配数据" + str;
  937. reg = new Regex(SiItem[item]["si_expression"]);
  938. str = reg.Match(str).Value;
  939. log += ",匹配后数据" + str;
  940. LogManager.DoLog(log);
  941. }
  942. return str;
  943. }
  944. //关闭窗口前提示用户确认
  945. private void 贴标机条码打印_FormClosing(object sender, FormClosingEventArgs e)
  946. {
  947. //如果不是注销的话
  948. if (!logout)
  949. {
  950. string close = MessageBox.Show(this.ParentForm, "是否关闭", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  951. if (close.ToString() != "Yes")
  952. e.Cancel = true;
  953. else
  954. {
  955. lbl.Quit();
  956. LogManager.DoLog("关闭程序");
  957. }
  958. }
  959. }
  960. /// <summary>
  961. /// 获取打印标签
  962. /// </summary>
  963. private void GetInOutInfAndLabelFile()
  964. {
  965. ComBoxClickChangeLabelDoc = false;
  966. sql.Clear();
  967. sql.Append("select to_char(nvl(cl_date,sysdate),'YYYY-MM-DD HH24:Mi:SS') cl_date,cl_labelname,cl_isdefault,la_id||'#'||cl_labelurl||'#'||to_char(cl_date,'YYYY-MM-DD HH24:Mi:SS') la_id,cl_custcode from customerlabel left join prodinout on pi_cardcode=cl_custcode ");
  968. sql.Append("left join customer on cu_code=cl_custcode left join label on la_code=CL_LABELCODE where ((pi_cardcode='" + pi_cardcode.Text + "' ");
  969. sql.Append("and pi_inoutno='" + pi_inoutno.Text + "') or( cl_custcode is null)) and cl_labeltype='单盘' order by cl_custcode");
  970. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  971. SingleLabelCombox.DisplayMember = "cl_labelname";
  972. SingleLabelCombox.ValueMember = "la_id";
  973. SingleLabelCombox.DataSource = dt;
  974. if (SingleDoc != null)
  975. SingleDoc.Close();
  976. if (!GetGridOnly.Checked)
  977. for (int i = 0; i < dt.Rows.Count; i++)
  978. {
  979. string LabelUrl = dt.Rows[i]["la_id"].ToString().Split('#')[1];
  980. string LabelName = dt.Rows[i]["cl_labelname"].ToString();
  981. System.DateTime time = Convert.ToDateTime(dt.Rows[i]["cl_date"].ToString());
  982. FileInfo file = new FileInfo(ftpOperater.DownLoadTo + LabelName);
  983. if (time.ToString() != file.LastWriteTime.ToString())
  984. BaseUtil.GetLabelUrl(LabelUrl, LabelName, time);
  985. }
  986. if (SingleLabelCombox.Text != "")
  987. SingleDoc = lbl.Documents.Open(ftpOperater.DownLoadTo + SingleLabelCombox.Text);
  988. sql.Clear();
  989. sql.Append("select to_char(nvl(cl_date,sysdate),'YYYY-MM-DD HH24:Mi:SS') cl_date,cl_labelname,cl_isdefault,la_id||'#'||cl_labelurl||'#'||to_char(cl_date,'YYYY-MM-DD HH24:Mi:SS') la_id,cl_custcode from customerlabel left join prodinout on pi_cardcode=cl_custcode ");
  990. sql.Append("left join customer on cu_code=cl_custcode left join label on la_code=CL_LABELCODE where ((pi_cardcode='" + pi_cardcode.Text + "' ");
  991. sql.Append("and pi_inoutno='" + pi_inoutno.Text + "') or( cl_custcode is null)) and cl_labeltype='中盒' order by cl_custcode");
  992. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  993. MidLabelCombox.DisplayMember = "cl_labelname";
  994. MidLabelCombox.ValueMember = "la_id";
  995. MidLabelCombox.DataSource = dt;
  996. if (MidDoc != null)
  997. MidDoc.Close();
  998. if (!GetGridOnly.Checked)
  999. for (int i = 0; i < dt.Rows.Count; i++)
  1000. {
  1001. string LabelUrl = dt.Rows[i]["la_id"].ToString().Split('#')[1];
  1002. string LabelName = dt.Rows[i]["cl_labelname"].ToString();
  1003. System.DateTime time = Convert.ToDateTime(dt.Rows[i]["cl_date"].ToString());
  1004. FileInfo file = new FileInfo(ftpOperater.DownLoadTo + LabelName);
  1005. if (time.ToString() != file.LastWriteTime.ToString())
  1006. BaseUtil.GetLabelUrl(LabelUrl, LabelName, time);
  1007. }
  1008. if (MidLabelCombox.Text != "")
  1009. MidDoc = lbl.Documents.Open(ftpOperater.DownLoadTo + MidLabelCombox.Text);
  1010. sql.Clear();
  1011. sql.Append("select to_char(nvl(cl_date,sysdate),'YYYY-MM-DD HH24:Mi:SS') cl_date,cl_labelname,cl_isdefault,la_id||'#'||cl_labelurl||'#'||to_char(cl_date,'YYYY-MM-DD HH24:Mi:SS') la_id,cl_custcode from customerlabel left join prodinout on pi_cardcode=cl_custcode ");
  1012. sql.Append("left join customer on cu_code=cl_custcode left join label on la_code=CL_LABELCODE where ((pi_cardcode='" + pi_cardcode.Text + "' ");
  1013. sql.Append("and pi_inoutno='" + pi_inoutno.Text + "') or( cl_custcode is null)) and cl_labeltype='外箱' order by cl_custcode");
  1014. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1015. OutBoxCombox.DisplayMember = "cl_labelname";
  1016. OutBoxCombox.ValueMember = "la_id";
  1017. OutBoxCombox.DataSource = dt;
  1018. if (!GetGridOnly.Checked)
  1019. for (int i = 0; i < dt.Rows.Count; i++)
  1020. {
  1021. string LabelUrl = dt.Rows[i]["la_id"].ToString().Split('#')[1];
  1022. string LabelName = dt.Rows[i]["cl_labelname"].ToString();
  1023. System.DateTime time = Convert.ToDateTime(dt.Rows[i]["cl_date"].ToString());
  1024. FileInfo file = new FileInfo(ftpOperater.DownLoadTo + LabelName);
  1025. if (time.ToString() != file.LastWriteTime.ToString())
  1026. BaseUtil.GetLabelUrl(LabelUrl, LabelName, time);
  1027. }
  1028. if (OutBoxCombox.Text != "")
  1029. {
  1030. if (OutBoxDoc != null)
  1031. OutBoxDoc.Close();
  1032. OutBoxDoc = lbl.Documents.Open(ftpOperater.DownLoadTo + OutBoxCombox.Text);
  1033. }
  1034. ComBoxClickChangeLabelDoc = true;
  1035. }
  1036. /// <summary>
  1037. /// 出入库单录入框的回车事件
  1038. /// </summary>
  1039. /// <param name="sender"></param>
  1040. /// <param name="e"></param>
  1041. private void pi_inoutno_KeyDown(object sender, KeyEventArgs e)
  1042. {
  1043. if (e.KeyCode == Keys.Enter)
  1044. {
  1045. sql.Clear();
  1046. sql.Append("select pi_id,pi_cardcode from prodinout where pi_inoutno='" + pi_inoutno.Text + "'");
  1047. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1048. if (dt.Rows.Count > 0)
  1049. {
  1050. pi_cardcode.Text = dt.Rows[0]["pi_cardcode"].ToString();
  1051. PI_ID = dt.Rows[0]["pi_id"].ToString();
  1052. LoadGridData(sender, e);
  1053. //重新输入单号后清除缓存
  1054. MidBoxArgument.Clear();
  1055. MidBoxCacheData.Clear();
  1056. BaseUtil.CleanDataTable(MidBoxCacheData);
  1057. SingleBoxArgument.Clear();
  1058. SingleBoxCacheData.Clear();
  1059. BaseUtil.CleanDataTable(SingleBoxCacheData);
  1060. //刷新采集进度
  1061. RefreshProcessData();
  1062. //设置当前的最大箱号
  1063. for (int i = 0; i < LabelInf.RowCount; i++)
  1064. {
  1065. string outboxcode = LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString();
  1066. //如果包含有-,则需要解析
  1067. if (outboxcode.Contains("-"))
  1068. if (int.Parse(outboxcode.Split('-')[0] == "" ? "1" : outboxcode.Split('-')[0]) > MaxOutBoxCode)
  1069. MaxOutBoxCode = int.Parse(outboxcode.Split('-')[0]);
  1070. else
  1071. if (int.Parse(outboxcode == "" ? "1" : outboxcode) > MaxOutBoxCode)
  1072. MaxOutBoxCode = int.Parse(outboxcode);
  1073. }
  1074. thread = new Thread(GetInOutInfAndLabelFile);
  1075. stw = new SetLoadingWindow(thread, "正在获取打印标签");
  1076. BaseUtil.SetFormCenter(stw);
  1077. stw.ShowDialog();
  1078. //重置采集项次
  1079. CurrentItemIndex = 0;
  1080. LogManager.DoLog("输入单号【" + pi_inoutno.Text + "】");
  1081. }
  1082. else
  1083. MessageBox.Show("当前出入库单号不存在!");
  1084. }
  1085. }
  1086. private void SingleBoxPrint()
  1087. {
  1088. try
  1089. {
  1090. if (SingleDoc.Variables.FreeVariables.Count == 0) { }
  1091. }
  1092. catch (Exception)
  1093. {
  1094. MessageBox.Show("单盘标签未维护参数");
  1095. }
  1096. if (MidLabelAutoPrint.Checked)
  1097. {
  1098. try
  1099. {
  1100. if (MidDoc.Variables.FreeVariables.Count == 0) { }
  1101. }
  1102. catch (Exception)
  1103. {
  1104. MessageBox.Show("中盘标签未维护参数");
  1105. }
  1106. }
  1107. string la_id = SingleLabelCombox.SelectedValue.ToString().Split('#')[0];
  1108. string cl_labelname = SingleLabelCombox.Text;
  1109. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  1110. //查询该模板维护的所有参数
  1111. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  1112. if (dt.Rows.Count > 0)
  1113. {
  1114. //每次打印清除之前缓存的行号和ID,后面会判断需要打印的数据重新加载
  1115. MidIDAndOutboxcode.Clear();
  1116. SingleID.Clear();
  1117. //获取全部的中盒号
  1118. Dictionary<string, bool> outboxcode1 = new Dictionary<string, bool>();
  1119. //判断所有盒号为该盒的是否勾选已采集
  1120. outboxcode1.Add(LabelInf.Rows[0].Cells["pib_outboxcode1"].Value.ToString(), true);
  1121. for (int i = 0; i < LabelInf.Rows.Count; i++)
  1122. {
  1123. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifprint"].FormattedValue.ToString() != "True")
  1124. {
  1125. SingleID.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString());
  1126. //如果不存在中盒号则进行添加
  1127. if (!MidIDAndOutboxcode.ContainsValue(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()))
  1128. MidIDAndOutboxcode.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString(), LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString());
  1129. }
  1130. }
  1131. if (SingleID.ToArray().Length == 0)
  1132. {
  1133. MessageBox.Show("选择的行未勾选采集或者已打印");
  1134. return;
  1135. }
  1136. //打印的时候如果不存在数据开始缓存
  1137. if (SingleBoxCacheData.Rows.Count == 0)
  1138. GetSingleBoxData();
  1139. if (MidBoxCacheData.Rows.Count == 0)
  1140. GetMidBoxData();
  1141. for (int i = 0; i < LabelInf.RowCount; i++)
  1142. {
  1143. if (i + 1 < LabelInf.RowCount)
  1144. {
  1145. //如果本行的中盒号和下一行不相等的话
  1146. if (LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() != LabelInf.Rows[i + 1].Cells["pib_outboxcode1"].Value.ToString())
  1147. {
  1148. if (!outboxcode1.ContainsKey(LabelInf.Rows[i + 1].Cells["pib_outboxcode1"].Value.ToString()))
  1149. outboxcode1.Add(LabelInf.Rows[i + 1].Cells["pib_outboxcode1"].Value.ToString(), true);
  1150. }
  1151. }
  1152. //只要有一行没有采集满就不打印
  1153. if (LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() == LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString())
  1154. {
  1155. if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  1156. outboxcode1[LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()] = false;
  1157. }
  1158. }
  1159. //用于判断用户是否勾选了行
  1160. int CheckedRowCount = 0;
  1161. string[] arg = SingleBoxArgument.ToArray();
  1162. //打印所有的选中行
  1163. for (int i = 0; i < LabelInf.RowCount; i++)
  1164. {
  1165. //勾选了并且未打印
  1166. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifprint"].FormattedValue.ToString() != "True")
  1167. {
  1168. CheckedRowCount = CheckedRowCount + 1;
  1169. CurrentRowIndex = i;
  1170. //以标签模板的参数为基准,循环取数
  1171. try
  1172. {
  1173. string pib_id = LabelInf.Rows[i].Cells["pib_id1"].Value.ToString();
  1174. DataRow[] dr = SingleBoxCacheData.Select("pib_id=" + pib_id);
  1175. StringBuilder ParamLog = new StringBuilder();
  1176. for (int j = 0; j < SingleDoc.Variables.FreeVariables.Count; j++)
  1177. {
  1178. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode1"))
  1179. {
  1180. if (LabelInf.Rows[i].Cells["DateCode1"].Value != null)
  1181. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["DateCode1"].Value.ToString();
  1182. }
  1183. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("lotno"))
  1184. {
  1185. if (LabelInf.Rows[i].Cells["pib_lotno"].Value != null)
  1186. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_lotno"].Value.ToString();
  1187. }
  1188. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode"))
  1189. {
  1190. if (LabelInf.Rows[i].Cells["pib_datecode"].Value != null)
  1191. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_datecode"].Value.ToString();
  1192. }
  1193. else if (arg.Contains(SingleDoc.Variables.FreeVariables.Item(j + 1).Name))
  1194. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = dr[0][SingleDoc.Variables.FreeVariables.Item(j + 1).Name].ToString();
  1195. ParamLog.AppendLine("pib_id:" + LabelInf.Rows[i].Cells["pib_id1"].Value.ToString() + ",SingleDoc打印参数【" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取到值" + SingleDoc.Variables.FreeVariables.Item(j + 1).Value);
  1196. }
  1197. LogManager.DoLog(ParamLog.ToString());
  1198. //保存参数打印
  1199. SingleDoc.Save();
  1200. SingleDoc.Printer.SwitchTo(SingleLabelPrinter.Text);
  1201. SingleDoc.PrintDocument();
  1202. //勾选为已打印
  1203. LabelInf.Rows[i].Cells["pib_ifprint"].Value = true;
  1204. }
  1205. catch (Exception ex) { LogManager.DoLog(ex.Message); }
  1206. }
  1207. if (MidLabelAutoPrint.Checked && LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() == "True")
  1208. {
  1209. //判断当前行的盒号和下一行不相等或者已经是最后一行了
  1210. if (i + 1 == LabelInf.RowCount || LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() != LabelInf.Rows[i + 1 == LabelInf.RowCount ? i : i + 1].Cells["pib_outboxcode1"].Value.ToString())
  1211. {
  1212. if (outboxcode1[LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()])
  1213. {
  1214. if (MidLabelCombox.SelectedValue != null)
  1215. {
  1216. string la_id_mid = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  1217. MidBoxCodePrint(la_id_mid, CurrentRowIndex);
  1218. }
  1219. }
  1220. }
  1221. }
  1222. }
  1223. dh.BatchInsert("update prodiobarcode set pib_printdate=sysdate where pib_id=:pib_id", new string[] { "pib_id" }, SingleID.ToArray());
  1224. if (CheckedRowCount == 0)
  1225. MessageBox.Show("未勾选打印明细!");
  1226. else if (CurrentRowIndex + 1 < LabelInf.Rows.Count)
  1227. CurrentRowIndex = CurrentRowIndex + 1;
  1228. outboxcode1.Clear();
  1229. }
  1230. else
  1231. {
  1232. MessageBox.Show("此模板尚未维护参数");
  1233. return;
  1234. }
  1235. }
  1236. /// <summary>
  1237. /// 缓存单盘的数据
  1238. /// </summary>
  1239. private void GetSingleBoxData()
  1240. {
  1241. StringBuilder pib_id_string = new StringBuilder();
  1242. //id数组
  1243. string[] pib_id_arr = SingleID.ToArray();
  1244. //id个数
  1245. int pib_id_length = pib_id_arr.Length;
  1246. //将所有的列存在在这里
  1247. List<DataTable> AllSingleBoxCacheData = new List<DataTable>();
  1248. //每五百条拼接一次条件
  1249. int fivehundred_count = pib_id_length / 500 + 1;
  1250. //当前打印的索引
  1251. int CurrentCount = 0;
  1252. for (int i = 0; i < fivehundred_count; i++)
  1253. {
  1254. //本次循环的数量
  1255. int count = 0;
  1256. pib_id_string.Append("(");
  1257. if (i + 1 == fivehundred_count)
  1258. count = pib_id_length - i * 500;
  1259. else
  1260. count = 500;
  1261. //当前执行的索引
  1262. int LastCount = CurrentCount;
  1263. for (int j = CurrentCount; j < LastCount + count - 1; j++)
  1264. {
  1265. pib_id_string.Append(pib_id_arr[j] + ",");
  1266. CurrentCount = CurrentCount + 1;
  1267. }
  1268. pib_id_string.Append(pib_id_arr[CurrentCount]);
  1269. pib_id_string.Append(")");
  1270. if (i + 1 != fivehundred_count)
  1271. pib_id_string.Append(" or pib_id in ");
  1272. }
  1273. //手动添加ID列
  1274. DataColumn datacolumn = new DataColumn("pib_id");
  1275. if (!SingleBoxCacheData.Columns.Contains("pib_id"))
  1276. SingleBoxCacheData.Columns.Add(datacolumn);
  1277. //获取打印的SQL
  1278. for (int j = 0; j < SingleDoc.Variables.FreeVariables.Count; j++)
  1279. {
  1280. //将维护的模板参数和模板本身的参数名称进行比对
  1281. for (int k = 0; k < dt.Rows.Count; k++)
  1282. {
  1283. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name == dt.Rows[k]["lp_name"].ToString())
  1284. {
  1285. DataColumn dc = new DataColumn(SingleDoc.Variables.FreeVariables.Item(j + 1).Name);
  1286. SingleBoxCacheData.Columns.Add(dc);
  1287. SingleBoxArgument.Add(SingleDoc.Variables.FreeVariables.Item(j + 1).Name);
  1288. string sql = dt.Rows[k]["lp_sql"].ToString();
  1289. sql = sql.Substring(0, sql.IndexOf("{"));
  1290. sql = sql.Substring(0, sql.LastIndexOf("="));
  1291. DataTable temp = dh.getFieldsDatasByCondition(sql.Replace(" from ", " ,pib_id PIBID from ") + " in " + pib_id_string.ToString() + " ORDER by pib_id");
  1292. temp.Columns[0].ColumnName = SingleDoc.Variables.FreeVariables.Item(j + 1).Name;
  1293. AllSingleBoxCacheData.Add(temp);
  1294. }
  1295. }
  1296. }
  1297. DataTable[] Temp = AllSingleBoxCacheData.ToArray();
  1298. //将所有数据写入到CacheData中
  1299. if (Temp.Length > 0)
  1300. for (int i = 0; i < Temp[0].Rows.Count; i++)
  1301. {
  1302. DataRow dr = SingleBoxCacheData.NewRow();
  1303. dr["pib_id"] = pib_id_arr[i];
  1304. //由于之前加了一个ID列,导致j从1开始
  1305. for (int j = 1; j < SingleBoxCacheData.Columns.Count; j++)
  1306. {
  1307. dr[Temp[j - 1].Columns[0].ColumnName] = (Temp[j - 1].Select("PIBID=" + pib_id_arr[i]))[0][0];
  1308. }
  1309. SingleBoxCacheData.Rows.Add(dr);
  1310. }
  1311. }
  1312. /// <summary>
  1313. /// 缓存中盒的数据
  1314. /// </summary>
  1315. private void GetMidBoxData()
  1316. {
  1317. StringBuilder pib_condition_string = new StringBuilder();
  1318. StringBuilder pib_qtycondition_string = new StringBuilder();
  1319. //id数组
  1320. string[] pib_id_arr = MidIDAndOutboxcode.Keys.ToArray();
  1321. string[] pib_outbox_arr = MidIDAndOutboxcode.Values.ToArray();
  1322. //记录一个ID用来取中盒的数量
  1323. string pib_id = pib_id_arr[0];
  1324. //id个数
  1325. int pib_id_length = pib_id_arr.Length;
  1326. //将所有的列存在在这里
  1327. List<DataTable> AllMidBoxCacheData = new List<DataTable>();
  1328. //每五百条拼接一次条件
  1329. int fivehundred_count = pib_id_length / 900 + 1;
  1330. //当前打印的索引
  1331. int CurrentCount = 0;
  1332. for (int i = 0; i < fivehundred_count; i++)
  1333. {
  1334. //本次循环的数量
  1335. int count = 0;
  1336. pib_condition_string.Append("(");
  1337. pib_qtycondition_string.Append("(");
  1338. if (i + 1 == fivehundred_count)
  1339. count = pib_id_length - i * 900;
  1340. else
  1341. count = 900;
  1342. //当前执行的索引
  1343. int LastCount = CurrentCount;
  1344. for (int j = LastCount; j < LastCount + count - 1; j++)
  1345. {
  1346. pib_condition_string.Append(pib_id_arr[j] + ",");
  1347. pib_qtycondition_string.Append(pib_outbox_arr[j] + ",");
  1348. CurrentCount = CurrentCount + 1;
  1349. }
  1350. pib_condition_string.Append(pib_id_arr[CurrentCount]);
  1351. pib_qtycondition_string.Append(pib_outbox_arr[CurrentCount]);
  1352. pib_condition_string.Append(")");
  1353. pib_qtycondition_string.Append(")");
  1354. if (i + 1 != fivehundred_count)
  1355. pib_condition_string.Append(" or pib_id in ");
  1356. }
  1357. //手动添加ID列
  1358. DataColumn IDColumn = new DataColumn("pib_id");
  1359. DataColumn OutBoxColumn = new DataColumn("pib_outboxcode1");
  1360. if (!MidBoxCacheData.Columns.Contains("pib_id"))
  1361. MidBoxCacheData.Columns.Add(IDColumn);
  1362. if (!MidBoxCacheData.Columns.Contains("pib_outboxcode1"))
  1363. MidBoxCacheData.Columns.Add(OutBoxColumn);
  1364. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  1365. DataTable dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  1366. for (int j = 0; j < MidDoc.Variables.FreeVariables.Count; j++)
  1367. {
  1368. //将维护的模板参数和模板本身的参数名称进行比对
  1369. for (int k = 0; k < dt.Rows.Count; k++)
  1370. {
  1371. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name == dt.Rows[k]["lp_name"].ToString())
  1372. {
  1373. DataColumn dc = new DataColumn(MidDoc.Variables.FreeVariables.Item(j + 1).Name);
  1374. MidBoxCacheData.Columns.Add(dc);
  1375. MidBoxArgument.Add(MidDoc.Variables.FreeVariables.Item(j + 1).Name);
  1376. string sql = dt.Rows[k]["lp_sql"].ToString();
  1377. if (sql.ToLower().Contains("pib_qty"))
  1378. {
  1379. sql = sql.Substring(0, sql.IndexOf("{")) + pib_id + sql.Substring(sql.IndexOf("}") + 1);
  1380. sql = sql.Substring(0, sql.LastIndexOf("=")) + " in " + pib_qtycondition_string.ToString() + sql.Substring(sql.LastIndexOf("}") + 1);
  1381. sql = "select * from (" + sql + ") order by instr ('" + pib_qtycondition_string.ToString() + "',pib_outboxcode1)";
  1382. }
  1383. else
  1384. {
  1385. sql = sql.Substring(0, sql.IndexOf("{"));
  1386. sql = sql.Substring(0, sql.LastIndexOf("="));
  1387. sql = sql + " in " + pib_condition_string.ToString() + " order by instr('" + pib_condition_string.ToString() + "',pib_id)";
  1388. }
  1389. DataTable temp = dh.getFieldsDatasByCondition(sql);
  1390. temp.Columns[0].ColumnName = MidDoc.Variables.FreeVariables.Item(j + 1).Name;
  1391. AllMidBoxCacheData.Add(temp);
  1392. }
  1393. }
  1394. }
  1395. DataTable[] Temp = AllMidBoxCacheData.ToArray();
  1396. //将所有数据写入到CacheData中
  1397. if (Temp.Length > 0)
  1398. {
  1399. for (int i = 0; i < Temp[0].Rows.Count; i++)
  1400. {
  1401. DataRow dr = MidBoxCacheData.NewRow();
  1402. dr["pib_id"] = pib_id_arr[i];
  1403. dr["pib_outboxcode1"] = pib_outbox_arr[i];
  1404. //由于之前加了一个ID列和箱号,导致j从2开始
  1405. for (int j = 2; j < MidBoxCacheData.Columns.Count; j++)
  1406. dr[Temp[j - 2].Columns[0].ColumnName] = Temp[j - 2].Rows[i][0].ToString();
  1407. MidBoxCacheData.Rows.Add(dr);
  1408. }
  1409. }
  1410. }
  1411. private void SingleLabelPrint_Click(object sender, EventArgs e)
  1412. {
  1413. if (SingleLabelCombox.Text != "")
  1414. {
  1415. thread = new Thread(SingleBoxPrint);
  1416. stw = new SetLoadingWindow(thread, "正在打印单盘");
  1417. BaseUtil.SetFormCenter(stw);
  1418. stw.ShowDialog();
  1419. }
  1420. else
  1421. MessageBox.Show("未维护单盘标签");
  1422. }
  1423. private void MidBoxLabelPrint()
  1424. {
  1425. if (MidLabelNum.Text == "")
  1426. {
  1427. MessageBox.Show("手动打印必须填写盒号");
  1428. return;
  1429. }
  1430. bool FindMidLabel = false;
  1431. if (MidLabelCombox.SelectedValue != null)
  1432. {
  1433. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  1434. string cl_labelname = MidLabelCombox.Text;
  1435. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  1436. //中盒号所在的行
  1437. int MidLabelRowIndex = 0;
  1438. //查找是否存在该中盒号
  1439. for (int i = 0; i < LabelInf.RowCount; i++)
  1440. {
  1441. if (MidLabelNum.Text == LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString())
  1442. {
  1443. //找到了输入的中盒号停止循环
  1444. FindMidLabel = true;
  1445. MidLabelRowIndex = i;
  1446. break;
  1447. }
  1448. }
  1449. //找到了指定的盒号
  1450. if (FindMidLabel)
  1451. MidBoxCodePrint(la_id, MidLabelRowIndex);
  1452. else
  1453. MessageBox.Show("该出入库单未找到该中盒号!");
  1454. }
  1455. else
  1456. MessageBox.Show("未维护中盒模板");
  1457. }
  1458. private void MidLabelPrint_Click(object sender, EventArgs e)
  1459. {
  1460. if (MidLabelCombox.Text != "")
  1461. {
  1462. thread = new Thread(MidBoxLabelPrint);
  1463. stw = new SetLoadingWindow(thread, "正在打印中盒");
  1464. BaseUtil.SetFormCenter(stw);
  1465. stw.ShowDialog();
  1466. }
  1467. else
  1468. MessageBox.Show("未维护中盒标签");
  1469. }
  1470. private void OutBoxPrint()
  1471. {
  1472. List<string> Outboxcode = new List<string>();
  1473. //如果未勾选箱号则对勾选的数据的箱号进行整合
  1474. string la_id = OutBoxCombox.SelectedValue.ToString().Split('#')[0];
  1475. string cl_labelname = OutBoxCombox.Text;
  1476. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  1477. if (OutBoxNum.Text == "")
  1478. {
  1479. for (int i = 0; i < LabelInf.RowCount; i++)
  1480. {
  1481. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True")
  1482. {
  1483. string outboxcode2 = LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString();
  1484. //富为使用包装单的逻辑
  1485. //如果不包含该箱号则进行添加
  1486. if (!Outboxcode.Contains(outboxcode2))
  1487. Outboxcode.Add(outboxcode2);
  1488. }
  1489. }
  1490. //按获取到的箱号列表进行打印
  1491. if (Outboxcode.ToArray().Length > 0)
  1492. {
  1493. try
  1494. {
  1495. // 循环打印外箱号
  1496. for (int i = 0; i < Outboxcode.ToArray().Length; i++)
  1497. {
  1498. for (int h = 0; h < LabelInf.RowCount; h++)
  1499. {
  1500. if (LabelInf.Rows[h].Cells["pib_outboxcode2"].Value.ToString() == Outboxcode.ToArray()[i] && (!PrintedOutboxCode.Contains(Outboxcode.ToArray()[i])))
  1501. {
  1502. OutBoxCodePrint(la_id, h);
  1503. //添加到已打印的列表中
  1504. PrintedOutboxCode.Add(Outboxcode.ToArray()[i]);
  1505. break;
  1506. }
  1507. }
  1508. }
  1509. }
  1510. catch { }
  1511. }
  1512. }
  1513. else
  1514. {
  1515. bool FindMidLabel = false;
  1516. try
  1517. {
  1518. int OutBoxLabelRowIndex = 0;
  1519. //查找是否存在该中盒号
  1520. for (int i = 0; i < LabelInf.RowCount; i++)
  1521. {
  1522. if (OutBoxNum.Text == LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString())
  1523. {
  1524. //找到了输入的中盒号停止循环
  1525. FindMidLabel = true;
  1526. OutBoxLabelRowIndex = i;
  1527. break;
  1528. }
  1529. }
  1530. //找到了指定的盒号
  1531. if (FindMidLabel)
  1532. OutBoxCodePrint(la_id, OutBoxLabelRowIndex);
  1533. else
  1534. MessageBox.Show("该出入库单未找到该外箱号!");
  1535. }
  1536. catch (Exception) { }
  1537. }
  1538. Outboxcode.Clear();
  1539. }
  1540. private void MidBoxCodePrint(string la_id, int rowindex)
  1541. {
  1542. DataTable dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  1543. string[] arg = MidBoxArgument.ToArray();
  1544. for (int j = 0; j < MidDoc.Variables.FreeVariables.Count; j++)
  1545. {
  1546. //将维护的模板参数和模板本身的参数名称进行比对
  1547. for (int k = 0; k < dt.Rows.Count; k++)
  1548. {
  1549. //名称相等的时候,取SQL进行值的查询
  1550. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name == dt.Rows[k]["lp_name"].ToString())
  1551. {
  1552. //获取对应行的pib_id
  1553. string pib_id = LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString();
  1554. string pib_outboxcode1 = LabelInf.Rows[rowindex].Cells["pib_outboxcode1"].Value.ToString();
  1555. //获取打印执行的SQL
  1556. string sql = dt.Rows[k]["lp_sql"].ToString();
  1557. try
  1558. {
  1559. //获取打印执行的SQL
  1560. if (sql.IndexOf("{") == 0)
  1561. {
  1562. MidDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(sql).ToString();
  1563. LogManager.DoLog("打印参数【" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + dt.Rows[k]["lp_sql"].ToString() + ",取到值" + MidDoc.Variables.FreeVariables.Item(j + 1).Value);
  1564. }
  1565. else
  1566. {
  1567. DataRow[] dr = MidBoxCacheData.Select("pib_outboxcode1='" + pib_outboxcode1 + "'");
  1568. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode1"))
  1569. {
  1570. if (LabelInf.Rows[rowindex].Cells["DateCode1"].Value != null)
  1571. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["DateCode1"].Value.ToString();
  1572. }
  1573. else if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("lotno"))
  1574. {
  1575. if (LabelInf.Rows[rowindex].Cells["pib_lotno"].Value != null)
  1576. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_lotno"].Value.ToString();
  1577. }
  1578. else if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode"))
  1579. {
  1580. if (LabelInf.Rows[rowindex].Cells["pib_datecode"].Value != null)
  1581. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode"].Value.ToString();
  1582. }
  1583. else if (arg.Contains(MidDoc.Variables.FreeVariables.Item(j + 1).Name))
  1584. MidDoc.Variables.FreeVariables.Item(j + 1).Value = dr[0][MidDoc.Variables.FreeVariables.Item(j + 1).Name].ToString();
  1585. LogManager.DoLog("打印参数【" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + sql + ",取到值" + MidDoc.Variables.FreeVariables.Item(j + 1).Value);
  1586. }
  1587. }
  1588. catch (Exception)
  1589. {
  1590. LogManager.DoLog("SQL维护不正确,请检查SQL语句\n" + sql);
  1591. return;
  1592. }
  1593. }
  1594. }
  1595. }
  1596. //保存参数打印
  1597. MidDoc.Save();
  1598. MidDoc.Printer.SwitchTo(MidLabelPrinter.Text);
  1599. MidDoc.PrintDocument();
  1600. }
  1601. /// <summary>
  1602. /// 执行打印外箱号
  1603. /// </summary>
  1604. private void OutBoxCodePrint(string la_id, int rowindex)
  1605. {
  1606. DataTable dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql,lp_valuetype from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  1607. try
  1608. {
  1609. for (int j = 0; j < OutBoxDoc.Variables.FreeVariables.Count; j++)
  1610. {
  1611. //将维护的模板参数和模板本身的参数名称进行比对
  1612. for (int k = 0; k < dt.Rows.Count; k++)
  1613. {
  1614. //名称相等的时候,取SQL进行值的查询
  1615. if (OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name == dt.Rows[k]["lp_name"].ToString())
  1616. {
  1617. //如果毛重填写的是毛重或者净重
  1618. if (dt.Rows[k]["lp_valuetype"].ToString() == "字符串" && dt.Rows[k]["lp_sql"].ToString() == "GW")
  1619. {
  1620. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = WeightGross.Text;
  1621. LogManager.DoLog("打印参数【毛重】赋值," + WeightGross.Text);
  1622. }
  1623. else if (dt.Rows[k]["lp_valuetype"].ToString() == "字符串" && dt.Rows[k]["lp_sql"].ToString() == "NW")
  1624. {
  1625. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = WeightNet.Text;
  1626. LogManager.DoLog("打印参数【净重】赋值," + WeightNet.Text);
  1627. }
  1628. else
  1629. {
  1630. //获取对应行的pib_id
  1631. string pib_id = LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString();
  1632. string pib_outboxcode2 = LabelInf.Rows[rowindex].Cells["pib_outboxcode2"].Value.ToString();
  1633. //获取打印执行的SQL
  1634. string sql = dt.Rows[k]["lp_sql"].ToString();
  1635. //select * from productiobarcode where pib_id={pib_id} and pib_outboxcode1={pib_outboxcode1}
  1636. try
  1637. {
  1638. string ExeSQL = "";
  1639. if (sql.ToLower().Contains("pib_lotno"))
  1640. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_lotno"].Value.ToString();
  1641. else if (sql.ToLower().Contains("pib_datecode"))
  1642. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode"].Value.ToString();
  1643. else if (sql.ToLower().Contains("pib_cusbarcode"))
  1644. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_cusbarcode"].Value.ToString();
  1645. else if (sql.ToLower().Contains("pib_cusoutboxcode"))
  1646. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_cusoutboxcode"].Value.ToString();
  1647. else
  1648. {
  1649. ExeSQL = sql.ToLower().Replace("{pib_id}", "'" + pib_id + "'");
  1650. ExeSQL = ExeSQL.Replace("{pib_outboxcode2}", "'" + pib_outboxcode2 + "'");
  1651. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(ExeSQL).ToString();
  1652. }
  1653. LogManager.DoLog("打印参数【" + OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + ExeSQL + ",取到值" + OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value);
  1654. }
  1655. catch (Exception)
  1656. {
  1657. LogManager.DoLog("SQL维护不正确,请检查SQL语句" + sql);
  1658. MessageBox.Show("SQL维护不正确,请检查SQL语句\n" + sql);
  1659. return;
  1660. }
  1661. }
  1662. }
  1663. else if (OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name == "DateCode1")
  1664. {
  1665. if (LabelInf.Rows[rowindex].Cells["DateCode1"].Value != null)
  1666. {
  1667. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["DateCode1"].Value.ToString();
  1668. }
  1669. }
  1670. }
  1671. }
  1672. //保存参数打印
  1673. OutBoxDoc.Save();
  1674. OutBoxDoc.Printer.SwitchTo(OutBoxPrinter.Text);
  1675. OutBoxDoc.PrintDocument();
  1676. LogManager.DoLog("执行打印外箱,pib_id:" + LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString());
  1677. }
  1678. catch (Exception ex) { MessageBox.Show(ex.Message); }
  1679. }
  1680. private void CleanDetail_Click(object sender, EventArgs e)
  1681. {
  1682. ArrayList<string> DeleteID = new ArrayList<string>();
  1683. for (int i = 0; i < LabelInf.RowCount; i++)
  1684. {
  1685. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True")
  1686. DeleteID.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString());
  1687. }
  1688. //勾选了删除的明细之后
  1689. if (DeleteID.ToArray().Length > 0)
  1690. {
  1691. string close = MessageBox.Show(this.ParentForm, "删除后不可恢复,是否确认删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  1692. if (close.ToString() == "Yes")
  1693. {
  1694. dh.BatchInsert("delete from prodiobarcode where pib_id=:pib_id", new string[] { "pib_id" }, DeleteID.ToArray());
  1695. MessageBox.Show("删除成功");
  1696. LoadGridData(sender, e);
  1697. RefreshProcessData();
  1698. }
  1699. }
  1700. else
  1701. MessageBox.Show("尚未勾选需要删除的明细");
  1702. }
  1703. private void OutBoxLabelPrint_Click(object sender, EventArgs e)
  1704. {
  1705. if (OutBoxCombox.Text != "")
  1706. {
  1707. thread = new Thread(OutBoxPrint);
  1708. stw = new SetLoadingWindow(thread, "正在打印外箱");
  1709. BaseUtil.SetFormCenter(stw);
  1710. stw.ShowDialog();
  1711. }
  1712. else
  1713. MessageBox.Show("未维护外箱标签");
  1714. }
  1715. /// <summary>
  1716. /// 刷新采集进度
  1717. /// </summary>
  1718. private void RefreshProcessData()
  1719. {
  1720. if (LabelInf.Rows.Count > 0)
  1721. {
  1722. //设置初始化的采集进度
  1723. int Count = 0;
  1724. int CurrentMidBoxCollectedCount = 0;
  1725. //当前盒号的总盘数
  1726. int CurrentMidBoxTotalCount = 0;
  1727. //未超出当前范围的时候
  1728. for (int i = 0; i < LabelInf.RowCount; i++)
  1729. {
  1730. if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() == "True")
  1731. Count++;
  1732. //和当前编辑箱号相等行
  1733. if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() == "True" && LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString() == LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString())
  1734. CurrentMidBoxCollectedCount++;
  1735. //当前盒号一共有几盘
  1736. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString() == LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString())
  1737. CurrentMidBoxTotalCount++;
  1738. }
  1739. Capacity.Text = "可装" + CurrentMidBoxTotalCount + "盘";
  1740. Installed.Text = "已装" + CurrentMidBoxCollectedCount + "盘";
  1741. //设置当前的箱号和盒号
  1742. Process_outboxcode.Text = LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode2"].Value.ToString();
  1743. Process_midboxcode.Text = LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString();
  1744. //设置当前总数和已采集数量
  1745. TotalCount.Text = LabelInf.RowCount.ToString();
  1746. CollectedCount.Text = Count.ToString();
  1747. }
  1748. }
  1749. private void LoadGridData()
  1750. {
  1751. LoadGridData(new object(), new EventArgs());
  1752. }
  1753. /// <summary>
  1754. /// 自定义函数 加载明细行的数据,多处使用添加进函数
  1755. /// </summary>
  1756. /// <param name="sender"></param>
  1757. /// <param name="e"></param>
  1758. private void LoadGridData(object sender, EventArgs e)
  1759. {
  1760. AllCollect = false;
  1761. //加载数据的时候清除已打印的序列
  1762. PrintedOutboxCode.Clear();
  1763. PrintedVivoOutboxCode.Clear();
  1764. //如果是富为则使用特殊的查询语句
  1765. if (DataHelper.DBConnectionString.Contains("richwell") || DataHelper.DBConnectionString.Contains("192.168.0.88"))
  1766. {
  1767. sql.Clear();
  1768. sql.Append("select pd_custprodcode,pd_pocode,pd_inoutno,pib_cusbarcode,pib_cusoutboxcode,pib_id,pib_pdid,pib_piid,pib_pdno,pib_prodcode,");
  1769. sql.Append("pr_brand,pr_vendprodcode,pib_lotno,pib_datecode,pib_qty,pib_barcode,pib_outboxcode1,pib_outboxcode2,pib_ifpick,pib_ifprint,");
  1770. sql.Append("pr_spec,pd_prodcode,pd_pocode from prodiobarcode left join prodiodetail on pib_piid=pd_piid and pd_pdno=pib_pdno ");
  1771. sql.Append("and pd_prodcode=pib_prodcode left join product on pr_code=pib_prodcode left join (select pd_prodcode ");
  1772. sql.Append("prcode,pd_pocode pocode,max(pd_detno) pd_detno from prodinout left join packing on packing.pi_code=prodinout.pi_packingcode ");
  1773. sql.Append("left join packingdetail on packing.pi_id=pd_piid where prodinout.pi_id='" + PI_ID + "' group by pd_prodcode,pd_pocode");
  1774. sql.Append(")A on pd_pocode=A.pocode and pd_prodcode=A.PRCODE where pd_piid='" + PI_ID + "' order by a.pd_detno,pib_id");
  1775. GetOutBoxCode.Visible = true;
  1776. }
  1777. else
  1778. {
  1779. sql.Clear();
  1780. sql.Append("select pd_pocode,pib_id,pib_pdid,pib_piid,pib_pdno,pib_prodcode,pr_brand,pr_vendprodcode,");
  1781. sql.Append("pib_lotno,pib_datecode,pib_qty,pib_barcode,pib_outboxcode1,pib_outboxcode2,pib_ifpick,pib_ifprint");
  1782. sql.Append(",sa_pocode from prodiobarcode left join prodiodetail on pib_piid=pd_piid and pd_pdno=pib_pdno and ");
  1783. sql.Append(" pd_prodcode=pib_prodcode left join product on pr_code=pib_prodcode left join sale on sa_code=pib_ordercode ");
  1784. sql.Append("where pib_piid='" + PI_ID + "' order by to_number(pib_outboxcode1),pib_id,pd_prodcode");
  1785. }
  1786. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1787. MidSource.DataSource = dt;
  1788. BaseUtil.FillDgvWithDataTable(LabelInf, (DataTable)MidSource.DataSource);
  1789. //有数据的话默认取第一条的品牌去取采集策略
  1790. TotalCount.Text = LabelInf.RowCount.ToString();
  1791. if (LabelInf.RowCount > 0)
  1792. {
  1793. Brand = LabelInf.Rows[0].Cells["pr_brand"].FormattedValue.ToString();
  1794. if (Brand != "")
  1795. sg_code.Text = dh.getFieldDataByCondition("scangroup", "sg_code", "sg_brand='" + Brand + "'").ToString();
  1796. SetOutBoxCapacity(LabelInf.Rows[0].Cells["pib_prodcode"].Value.ToString());
  1797. }
  1798. //绑定数据之后往下找到未采集的数据显示在当前采集的栏目
  1799. for (int i = 0; i < LabelInf.RowCount; i++)
  1800. {
  1801. if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  1802. {
  1803. griddetno.Text = LabelInf.Rows[i].Cells["pib_pdno"].FormattedValue.ToString();
  1804. pr_code.Text = LabelInf.Rows[i].Cells["pib_prodcode"].FormattedValue.ToString();
  1805. pib_id.Text = LabelInf.Rows[i].Cells["pib_id1"].FormattedValue.ToString();
  1806. CurrentRowIndex = LabelInf.Rows[i].Cells["pib_prodcode"].RowIndex;
  1807. break;
  1808. }
  1809. }
  1810. }
  1811. /// <summary>
  1812. /// 重绘Cell的颜色
  1813. /// </summary>
  1814. /// <param name="sender"></param>
  1815. /// <param name="e"></param>
  1816. private void LabelInf_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
  1817. {
  1818. bool mouseOver = e.CellBounds.Contains(this.PointToClient(Cursor.Position));
  1819. if (e.ColumnIndex > 0)
  1820. {
  1821. if (LabelInf.Columns[e.ColumnIndex].Name == "pib_lotno" || LabelInf.Columns[e.ColumnIndex].Name == "pib_datecode" || LabelInf.Columns[e.ColumnIndex].Name == "pib_outboxcode1" || LabelInf.Columns[e.ColumnIndex].Name == "pib_outboxcode2")
  1822. {
  1823. SolidBrush solidBrush = new SolidBrush(Color.FromArgb(51, 153, 255));
  1824. e.Graphics.FillRectangle(mouseOver ? solidBrush : Brushes.LightSeaGreen, e.CellBounds);
  1825. Rectangle border = e.CellBounds;
  1826. border.Width -= 1;
  1827. e.Graphics.DrawRectangle(Pens.White, border);
  1828. e.PaintContent(e.CellBounds);
  1829. e.Handled = true;
  1830. }
  1831. if (e.RowIndex >= 0)
  1832. {
  1833. //重绘制定的Cell,表示采集的数量不匹配
  1834. if (LabelInf.Columns[e.ColumnIndex].Name == "pib_qty" && PaintCell.ContainsKey(LabelInf.Rows[e.RowIndex].Cells["pib_qty"]))
  1835. {
  1836. SolidBrush solidBrush = new SolidBrush(Color.FromArgb(51, 153, 255));
  1837. e.Graphics.FillRectangle(PaintCell[LabelInf.Rows[e.RowIndex].Cells["pib_qty"]] ? Brushes.ForestGreen : Brushes.Red, e.CellBounds);
  1838. Rectangle border = e.CellBounds;
  1839. border.Width -= 1;
  1840. e.Graphics.DrawRectangle(Pens.Black, border);
  1841. e.PaintContent(e.CellBounds);
  1842. e.Handled = true;
  1843. }
  1844. //表示采集的供应商物料编号不匹配
  1845. if (LabelInf.Columns[e.ColumnIndex].Name == "pr_vendprodcode" && PaintCell.ContainsKey(LabelInf.Rows[e.RowIndex].Cells["pr_vendprodcode"]))
  1846. {
  1847. SolidBrush solidBrush = new SolidBrush(Color.FromArgb(51, 153, 255));
  1848. e.Graphics.FillRectangle(PaintCell[LabelInf.Rows[e.RowIndex].Cells["pr_vendprodcode"]] ? Brushes.ForestGreen : Brushes.Red, e.CellBounds);
  1849. Rectangle border = e.CellBounds;
  1850. border.Width -= 1;
  1851. e.Graphics.DrawRectangle(Pens.Black, border);
  1852. e.PaintContent(e.CellBounds);
  1853. e.Handled = true;
  1854. }
  1855. }
  1856. }
  1857. }
  1858. private void pr_code_SearchIconClick(object sender, EventArgs e)
  1859. {
  1860. pr_code.Condition = " pd_inoutno='" + pi_inoutno.Text + "'";
  1861. }
  1862. private void OutBoxLabelPackage_Click(object sender, EventArgs e)
  1863. {
  1864. thread = new Thread(CusLabelPrint);
  1865. stw = new SetLoadingWindow(thread, "正在打印客户外箱号");
  1866. BaseUtil.SetFormCenter(stw);
  1867. stw.ShowDialog();
  1868. }
  1869. private void CusLabelPrint()
  1870. {
  1871. //MaxOutBoxCode = MaxOutBoxCode + 1;
  1872. List<int> CusOutBoxCode = new List<int>();
  1873. //统计客户外箱号
  1874. if (LabelInf.Rows.Count > 0)
  1875. CusOutBoxCode.Add(0);
  1876. for (int i = 0; i < LabelInf.Rows.Count; i++)
  1877. {
  1878. if (i - 1 > 0 && LabelInf.Rows[i].Cells["pib_ifprint"].FormattedValue.ToString() == "True")
  1879. {
  1880. string cutboxcode = LabelInf.Rows[i].Cells["pib_cusoutboxcode"].Value.ToString();
  1881. string nextcutboxcode = LabelInf.Rows[i - 1].Cells["pib_cusoutboxcode"].Value.ToString();
  1882. if (cutboxcode != nextcutboxcode)
  1883. CusOutBoxCode.Add(i);
  1884. }
  1885. }
  1886. //打印外箱号
  1887. string la_id = OutBoxCombox.SelectedValue.ToString().Split('#')[0];
  1888. for (int i = 0; i < CusOutBoxCode.Count; i++)
  1889. {
  1890. if (!PrintedVivoOutboxCode.Contains(CusOutBoxCode[i].ToString()))
  1891. {
  1892. OutBoxCodePrint(la_id, CusOutBoxCode[i]);
  1893. PrintedVivoOutboxCode.Add(CusOutBoxCode[i].ToString());
  1894. }
  1895. }
  1896. }
  1897. private void pr_code_UserControlTextChanged(object sender, EventArgs e)
  1898. {
  1899. //用户在重新勾选后重置采集项目的索引
  1900. CurrentItemIndex = 0;
  1901. for (int i = 0; i < LabelInf.RowCount; i++)
  1902. {
  1903. if (pr_code.Text == LabelInf.Rows[i].Cells["pib_prodcode"].Value.ToString() && LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  1904. {
  1905. CurrentRowIndex = i;
  1906. break;
  1907. }
  1908. }
  1909. }
  1910. private void Refresh_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  1911. {
  1912. KeyEventArgs e2 = new KeyEventArgs(Keys.Enter);
  1913. pi_inoutno_KeyDown(sender, e2);
  1914. }
  1915. /// <summary>
  1916. /// 采集明细切换
  1917. /// </summary>
  1918. /// <param name="sender"></param>
  1919. /// <param name="e"></param>
  1920. private void griddetno_KeyDown(object sender, KeyEventArgs e)
  1921. {
  1922. if (Keys.Enter == e.KeyData)
  1923. {
  1924. bool FindDetno = false;
  1925. for (int i = 0; i < LabelInf.RowCount; i++)
  1926. {
  1927. if (LabelInf.Rows[i].Cells["pib_pdno"].Value.ToString() == griddetno.Text && LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  1928. {
  1929. FindDetno = true;
  1930. CurrentItemIndex = 0;
  1931. CurrentRowIndex = i;
  1932. RemindUser();
  1933. break;
  1934. }
  1935. }
  1936. if (!FindDetno)
  1937. {
  1938. MessageBox.Show("不存在未采集的明细序号" + griddetno.Text);
  1939. return;
  1940. }
  1941. }
  1942. }
  1943. private void AutoPrintMidLabel()
  1944. {
  1945. bool FullBox = true;
  1946. //判断所有盒号未该盒的是否勾选已采集
  1947. for (int i = 0; i < LabelInf.RowCount; i++)
  1948. {
  1949. if (LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() == LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString())
  1950. {
  1951. if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  1952. FullBox = false;
  1953. }
  1954. }
  1955. //如果当前箱号已经装满了
  1956. if (FullBox)
  1957. {
  1958. if (MidLabelCombox.SelectedValue != null)
  1959. {
  1960. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  1961. MidBoxCodePrint(la_id, CurrentRowIndex);
  1962. }
  1963. else
  1964. MessageBox.Show("未维护中盒模板");
  1965. }
  1966. }
  1967. /// <summary>
  1968. /// 勾选的时候自动打印
  1969. /// </summary>
  1970. /// <param name="sender"></param>
  1971. /// <param name="e"></param>
  1972. private void LabelInf_CellValueChanged(object sender, DataGridViewCellEventArgs e)
  1973. {
  1974. if (LabelInf.Columns[e.ColumnIndex].Name == "pib_datecode")
  1975. {
  1976. string datecode = LabelInf.Rows[e.RowIndex].Cells["pib_datecode"].Value.ToString();
  1977. try
  1978. {
  1979. System.DateTime dt = System.DateTime.ParseExact(datecode, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
  1980. GregorianCalendar gc = new GregorianCalendar();
  1981. int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
  1982. if (weekOfYear < 10)
  1983. LabelInf.Rows[e.RowIndex].Cells["DateCode1"].Value = dt.Year.ToString().Substring(2, 2) + "0" + weekOfYear;
  1984. else
  1985. LabelInf.Rows[e.RowIndex].Cells["DateCode1"].Value = dt.Year.ToString().Substring(2, 2) + weekOfYear;
  1986. }
  1987. catch (Exception) { }
  1988. }
  1989. }
  1990. private void AllCollected_Click(object sender, EventArgs e)
  1991. {
  1992. if (AllCollect == false)
  1993. {
  1994. foreach (DataGridViewRow dr in LabelInf.Rows)
  1995. dr.Cells[1].Value = true;
  1996. AllCollect = true;
  1997. }
  1998. else
  1999. {
  2000. foreach (DataGridViewRow dr in LabelInf.Rows)
  2001. dr.Cells[1].Value = false;
  2002. AllCollect = false;
  2003. }
  2004. }
  2005. private void PowerSetting_Click(object sender, EventArgs e)
  2006. {
  2007. PowerSetting pw = new PowerSetting();
  2008. BaseUtil.SetFormCenter(pw);
  2009. pw.ShowDialog();
  2010. }
  2011. private void GetOutBoxCode_Click(object sender, EventArgs e)
  2012. {
  2013. int Current = 0;
  2014. sql.Clear();
  2015. sql.Append("select pr_qtyperplace,pd_qty,pd_cartonno,pr_zxbzs,pd_cartons from packingdetail left join packing on pd_piid=pi_id left join prodinout on ");
  2016. sql.Append("pi_packingcode=packing.pi_code left join product on pd_prodcode=pr_code where pi_inoutno='" + pi_inoutno.Text + "' order by pd_detno");
  2017. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  2018. if (dt.Rows.Count > 0)
  2019. {
  2020. try { OutboxCapacity.Value = (decimal)dt.Rows[0]["pr_qtyperplace"] / (decimal)dt.Rows[0]["pr_zxbzs"]; }
  2021. catch (Exception) { }
  2022. }
  2023. for (int i = 0; i < dt.Rows.Count; i++)
  2024. {
  2025. int pd_qty = int.Parse(dt.Rows[i]["pd_qty"].ToString());
  2026. int pr_zxbzs = int.Parse(dt.Rows[i]["pr_zxbzs"].ToString());
  2027. int pd_cartons = int.Parse(dt.Rows[i]["pd_cartons"].ToString());
  2028. for (int j = 0; j < pd_qty * pd_cartons / pr_zxbzs; j++)
  2029. {
  2030. LabelInf.Rows[Current].Cells["pib_outboxcode2"].Value = dt.Rows[i]["pd_cartonno"].ToString();
  2031. Current++;
  2032. }
  2033. }
  2034. GetPackingCode = true;
  2035. SaveGrid_Click(sender, e);
  2036. }
  2037. private void LogingOut_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  2038. {
  2039. string close = MessageBox.Show(this.ParentForm, "是否注销", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  2040. if (close.ToString() == "Yes")
  2041. {
  2042. Login login = new Login();
  2043. //注销的时候需要将拼接的连接字符串置空
  2044. DataHelper.DBConnectionString = null;
  2045. logout = true;
  2046. lbl.Quit();
  2047. this.Hide();
  2048. login.ShowDialog();
  2049. this.Close();
  2050. }
  2051. }
  2052. private void LabelInf_DataError(object sender, DataGridViewDataErrorEventArgs e) { }
  2053. /// <summary>
  2054. /// 切换打开的单盘文件
  2055. /// </summary>
  2056. /// <param name="sender"></param>
  2057. /// <param name="e"></param>
  2058. private void SingleLabelCombox_SelectedIndexChanged(object sender, EventArgs e)
  2059. {
  2060. try
  2061. {
  2062. if (ComBoxClickChangeLabelDoc)
  2063. {
  2064. if (SingleDoc != null)
  2065. SingleDoc.Close();
  2066. if (SingleLabelCombox.Text != "" && SingleLabelCombox.SelectedValue != null && !GetGridOnly.Checked)
  2067. {
  2068. System.DateTime time = Convert.ToDateTime(SingleLabelCombox.SelectedValue.ToString().Split('#')[2]);
  2069. SingleDoc = lbl.Documents.Open(BaseUtil.GetLabelUrl(SingleLabelCombox.SelectedValue.ToString().Split('#')[1], SingleLabelCombox.Text, time));
  2070. }
  2071. }
  2072. }
  2073. catch (Exception) { }
  2074. }
  2075. /// <summary>
  2076. /// 切换打开的中盒文件
  2077. /// </summary>
  2078. /// <param name="sender"></param>
  2079. /// <param name="e"></param>
  2080. private void MidLabelCombox_SelectedIndexChanged(object sender, EventArgs e)
  2081. {
  2082. try
  2083. {
  2084. if (ComBoxClickChangeLabelDoc)
  2085. {
  2086. if (MidDoc != null)
  2087. MidDoc.Close();
  2088. if (MidLabelCombox.Text != "" && MidLabelCombox.SelectedValue != null && !GetGridOnly.Checked)
  2089. {
  2090. System.DateTime time = Convert.ToDateTime(MidLabelCombox.SelectedValue.ToString().Split('#')[2]);
  2091. MidDoc = lbl.Documents.Open(BaseUtil.GetLabelUrl(MidLabelCombox.SelectedValue.ToString().Split('#')[1], MidLabelCombox.Text, time));
  2092. }
  2093. }
  2094. }
  2095. catch (Exception) { }
  2096. }
  2097. /// <summary>
  2098. /// 切换打开的外箱文件
  2099. /// </summary>
  2100. /// <param name="sender"></param>
  2101. /// <param name="e"></param>
  2102. private void OutBoxCombox_SelectedIndexChanged(object sender, EventArgs e)
  2103. {
  2104. try
  2105. {
  2106. if (ComBoxClickChangeLabelDoc)
  2107. {
  2108. if (OutBoxDoc != null)
  2109. OutBoxDoc.Close();
  2110. if (OutBoxCombox.Text != "" && OutBoxCombox.SelectedValue != null && !GetGridOnly.Checked)
  2111. {
  2112. System.DateTime time = Convert.ToDateTime(OutBoxCombox.SelectedValue.ToString().Split('#')[2]);
  2113. OutBoxDoc = lbl.Documents.Open(BaseUtil.GetLabelUrl(OutBoxCombox.SelectedValue.ToString().Split('#')[1], OutBoxCombox.Text, time));
  2114. }
  2115. }
  2116. }
  2117. catch (Exception) { }
  2118. }
  2119. /// <summary>
  2120. /// 获取ViVo的料盘信息
  2121. /// </summary>
  2122. /// <param name="sender"></param>
  2123. /// <param name="e"></param>
  2124. private void ViVoPlate_Click(object sender, EventArgs e)
  2125. {
  2126. thread = new Thread(GetVivoInf);
  2127. stw = new SetLoadingWindow(thread, "正在获取Vivo箱号");
  2128. BaseUtil.SetFormCenter(stw);
  2129. stw.ShowDialog();
  2130. }
  2131. private void GetVivoInf()
  2132. {
  2133. if (LabelInf.Rows.Count > 0)
  2134. {
  2135. if (LabelInf.Rows[0].Cells["pib_outboxcode2"].Value != null)
  2136. {
  2137. Vivo_GetPlateID.Service1SoapClient getPlateID = new Vivo_GetPlateID.Service1SoapClient();
  2138. Vivo_BoxReelRelation.Service1SoapClient getOutBox = new Vivo_BoxReelRelation.Service1SoapClient();
  2139. string VenderCode = dh.GetConfig("VivoCode", "ProdInOut!Sale").ToString();
  2140. string CurrentTime = System.DateTime.Now.ToString("yyyyMM");
  2141. string Createcode = VenderCode + CurrentTime;
  2142. string outboxcode = "";
  2143. //装入箱内的数量统计,用于判断是否达到容量
  2144. decimal InBoxCount = OutboxCapacity.Value;
  2145. for (int i = 0; i < LabelInf.Rows.Count; i++)
  2146. {
  2147. //勾选了的内容才进行料盘的获取和箱号的维护
  2148. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True")
  2149. {
  2150. int amount = int.Parse(LabelInf.Rows[i].Cells["pib_qty"].Value.ToString());
  2151. string DateCode = LabelInf.Rows[i].Cells["pib_datecode"].Value.ToString();
  2152. string LotNo = LabelInf.Rows[i].Cells["pib_lotno"].Value.ToString();
  2153. string OrderCode = LabelInf.Rows[i].Cells["pr_vendprodcode"].Value.ToString();
  2154. string custprodcode = LabelInf.Rows[i].Cells["pd_custprodcode"].Value.ToString();
  2155. //通过接口获取Vivo料盘号
  2156. string custbarcode = getPlateID.getCompID(Createcode, "", custprodcode, VenderCode, LotNo, DateCode, amount, OrderCode, "", "");
  2157. LabelInf.Rows[i].Cells["pib_cusbarcode"].Value = custbarcode.Replace("T-", "");
  2158. //如果下一行的外箱号和当前行不一致
  2159. bool NextBoxDiff = false;
  2160. //通过接口维护料盘和外箱关系,需要根据箱内容量计算
  2161. //判断下一行箱号不一样重新取一个客户外箱号
  2162. if (i - 1 > 0)
  2163. {
  2164. string CurrentOutBoxCode = LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString();
  2165. string NextOutBoxCode = LabelInf.Rows[i - 1].Cells["pib_outboxcode2"].Value.ToString();
  2166. if (CurrentOutBoxCode != NextOutBoxCode)
  2167. {
  2168. NextBoxDiff = true;
  2169. InBoxCount = OutboxCapacity.Value - 1;
  2170. }
  2171. }
  2172. if (InBoxCount == OutboxCapacity.Value || NextBoxDiff)
  2173. {
  2174. outboxcode = VenderCode + "-" + CurrentTime + "-" + LabelInf.Rows[i].Cells["pib_id1"].Value.ToString();
  2175. InBoxCount = 1;
  2176. NextBoxDiff = false;
  2177. }
  2178. else
  2179. InBoxCount = InBoxCount + 1;
  2180. //获取信息为T-表示成功获取了信息
  2181. string Message = getOutBox.insertBoxReelRelation(Createcode, VenderCode, outboxcode, custbarcode, "", "");
  2182. if (Message.Substring(0, 1) == "T")
  2183. LabelInf.Rows[i].Cells["pib_cusoutboxcode"].Value = outboxcode;
  2184. else
  2185. LabelInf.Rows[i].Cells["pib_cusoutboxcode"].Value = Message;
  2186. }
  2187. }
  2188. }
  2189. else
  2190. MessageBox.Show("请先维护外箱号");
  2191. }
  2192. }
  2193. private void ChooseAll_Click(object sender, EventArgs e)
  2194. {
  2195. if (AllChecked)
  2196. {
  2197. foreach (DataGridViewRow dr in LabelInf.Rows)
  2198. dr.Cells[0].Value = false;
  2199. AllChecked = false;
  2200. }
  2201. else
  2202. {
  2203. foreach (DataGridViewRow dr in LabelInf.Rows)
  2204. dr.Cells[0].Value = true;
  2205. AllChecked = true;
  2206. }
  2207. }
  2208. }
  2209. }