FrmInventoryOperate.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446
  1. using ComponentFactory.Krypton.Toolkit;
  2. using NXWMS.Client.Model.AppModels.Condition.Balance;
  3. using NXWMS.Client.Model.AppModels.Result.Balance;
  4. using NXWMS.Client.Model.CoreModels;
  5. using NXWMS.Client.String.Enums;
  6. using NXWMS.Commons;
  7. using NXWMS.Services;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Drawing;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Windows.Forms;
  16. namespace NXWMS.Forms.Balance.frmBalanceChild
  17. {
  18. public partial class FrmInventoryOperate : KryptonForm
  19. {
  20. public FrmInventoryOperate()
  21. {
  22. InitializeComponent();
  23. var fieldList = new List<FieldValue>();
  24. cmbType.DataSource = fieldList.GetFieldValueIdList<InventoryType>();
  25. cmbType.DisplayMember = "Name";
  26. cmbType.ValueMember = "Id";
  27. cmbType.SelectedValue = ((int)InventoryType.WMS).ToString();
  28. fieldList = new List<FieldValue>();
  29. cmbInventoryMode.DataSource = fieldList.GetFieldValueIdList<InventoryMode>();
  30. cmbInventoryMode.DisplayMember = "Name";
  31. cmbInventoryMode.ValueMember = "Id";
  32. cmbInventoryMode.SelectedValue = ((int)InventoryMode.Select).ToString();
  33. }
  34. public string InventoryId { get; set; }
  35. public string InventoryModeMsg { get; set; }
  36. /// <summary>
  37. /// 盘点单主表
  38. /// </summary>
  39. public InventoryMainSearchResult _MainInfo;
  40. public List<WmsAwitInventoryPalletMd> awitInventoryPalletData = new List<WmsAwitInventoryPalletMd>();
  41. public List<InventoryDetailSearchResult> awitInventoryPalletDtlData = new List<InventoryDetailSearchResult>();
  42. #region 窗体按钮事件
  43. private void FrmInventoryOperate_Load(object sender, EventArgs e)
  44. {
  45. try
  46. {
  47. //获取对应盘点单数据
  48. var mainResult = BalanceServices.balanceSearchService.GetMainInventoryList(new InventoryMainSearchCondition
  49. {
  50. Id = Convert.ToInt32(InventoryId)
  51. });
  52. if (mainResult.Status == OperateStatus.Success)
  53. {
  54. _MainInfo = mainResult.Data.RowData.FirstOrDefault();
  55. txtInventoryNo.Text = _MainInfo.InventoryNo;
  56. cmbType.SelectedValue = _MainInfo.InventoryType.ToString();
  57. numPercentage.Value = Convert.ToDecimal(_MainInfo.InventoryPercentage);
  58. cmbInventoryMode.SelectedValue = _MainInfo.InventoryMode.ToString();
  59. if (_MainInfo.InventoryBeginTime != null)
  60. {
  61. dtpBeginTime.Checked = true;
  62. dtpBeginTime.Value = _MainInfo.InventoryBeginTime.Value;
  63. }
  64. if (_MainInfo.InventoryEndTime != null)
  65. {
  66. dtpEndTime.Checked = true;
  67. dtpEndTime.Value = _MainInfo.InventoryEndTime.Value;
  68. }
  69. txtInventoryNo.Enabled = false;
  70. cmbType.Enabled = false;
  71. numPercentage.Enabled = false;
  72. cmbInventoryMode.Enabled = false;
  73. dtpBeginTime.Enabled = false;
  74. dtpEndTime.Enabled = false;
  75. kryptonGroupBox3.Enabled = false;
  76. kbtn_CreateInventoryTask.Enabled = false;
  77. kbtn_Refresh.Enabled = false;
  78. kbtn_InventoryOperate.Enabled = false;
  79. if (_MainInfo.InventoryStatus >= 11 && InventoryModeMsg == "正常盘点")//盘点单的状态大于等于11(即开始盘点)时
  80. {
  81. kbtn_StartInventory.Enabled = false;
  82. kbtn_CreateInventoryTask.Enabled = true;
  83. kbtn_Refresh.Enabled = true;
  84. kbtn_InventoryOperate.Enabled = true;
  85. }
  86. if (_MainInfo.InventoryStatus == 88 && InventoryModeMsg == "差异盘点")
  87. {
  88. kbtn_StartInventory.Enabled = false;
  89. kbtn_CreateInventoryTask.Enabled = true;
  90. kbtn_Refresh.Enabled = true;
  91. kbtn_InventoryOperate.Enabled = true;
  92. }
  93. LoadAwitInventoryPalletData();
  94. }
  95. else
  96. {
  97. KryptonMessageBox.Show($"加载盘点单数据错误:【{mainResult.Message}】");
  98. }
  99. this.Text = $"盘点操作 --- {InventoryModeMsg}";
  100. }
  101. catch (Exception ex)
  102. {
  103. KryptonMessageBox.Show(ex.Message);
  104. }
  105. }
  106. private void kbtn_StartInventory_Click(object sender, EventArgs e)
  107. {
  108. try
  109. {
  110. if (KryptonMessageBox.Show($"确认将盘点单:【{_MainInfo.InventoryNo}】标记为开始盘点状态?如果点击确认,盘点单明细的所有托盘都将进行盘点出库,并且该部分托盘的库存将暂时锁定!!!请谨慎操作!!!", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
  111. {
  112. //修改盘点单状态为盘点中
  113. //修改盘点单托盘明细的库存状态为盘点出库占用。
  114. var editResult = BalanceServices.balanceOperateService.InventoryStatusChange(new InventoryStatusChangeCondition
  115. {
  116. OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId,
  117. Ids = InventoryId,
  118. InventoryStatus = InventoryStatusEnum.BeginInventory,
  119. InventoryModeMsg = InventoryModeMsg
  120. });
  121. if (editResult.Status == OperateStatus.Success)
  122. {
  123. kbtn_CreateInventoryTask.Enabled = true;
  124. kbtn_Refresh.Enabled = true;
  125. kbtn_InventoryOperate.Enabled = true;
  126. kbtn_StartInventory.Enabled = false;
  127. KryptonMessageBox.Show($"开始盘点操作成功!");
  128. LoadAwitInventoryPalletData();
  129. }
  130. else
  131. {
  132. KryptonMessageBox.Show($"开始盘点操作失败!\r\n【{editResult.Message}】");
  133. }
  134. }
  135. }
  136. catch (Exception ex)
  137. {
  138. KryptonMessageBox.Show(ex.Message);
  139. }
  140. }
  141. private void kbtn_CreateInventoryTask_Click(object sender, EventArgs e)
  142. {
  143. try
  144. {
  145. int rowsSelectedNum = 0;
  146. List<string> trayCodeLst = new List<string>();
  147. int rowSelectIndex = 0;
  148. foreach (DataGridViewRow item in kdgv_WaitInventoryPalletLst.Rows)
  149. {
  150. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  151. object obj = checkCell.EditedFormattedValue;
  152. if (Convert.ToBoolean(obj))
  153. {
  154. if (item.Cells[7].Value.ToString() != "未生成盘点任务")
  155. {
  156. KryptonMessageBox.Show($"托盘号:【{item.Cells[3].Value}】已经生成盘点任务,不允许重复生成!");
  157. return;
  158. }
  159. rowsSelectedNum++;
  160. trayCodeLst.Add(item.Cells[2].Value.ToString());
  161. rowSelectIndex = item.Index;
  162. }
  163. }
  164. if (rowsSelectedNum > 0)
  165. {
  166. string str = string.Empty;
  167. foreach (string item in trayCodeLst)
  168. {
  169. str += item + ",";
  170. }
  171. str = str.Substring(0, str.Length - 1);
  172. InventoryOperateCondition param = new InventoryOperateCondition
  173. {
  174. Describe = str,
  175. InventoryId = Convert.ToInt32(InventoryId),
  176. InventoryNo = _MainInfo.InventoryNo,
  177. OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId,
  178. InventoryModeMsg = InventoryModeMsg
  179. };
  180. var editResult = BalanceServices.balanceOperateService.CreateInventoryTask(param);
  181. if (editResult.Status == OperateStatus.Success)
  182. {
  183. KryptonMessageBox.Show($"{editResult.Message}");
  184. }
  185. else
  186. {
  187. KryptonMessageBox.Show($"{editResult.Message}");
  188. }
  189. LoadAwitInventoryPalletData();
  190. }
  191. else
  192. {
  193. KryptonMessageBox.Show("请勾选待盘点托盘数据行!");
  194. }
  195. }
  196. catch (Exception ex)
  197. {
  198. KryptonMessageBox.Show(ex.Message);
  199. }
  200. }
  201. private void kbtn_Refresh_Click(object sender, EventArgs e)
  202. {
  203. LoadAwitInventoryPalletData();
  204. }
  205. private void kbtn_InventoryOperate_Click(object sender, EventArgs e)
  206. {
  207. try
  208. {
  209. int rowsSelectedNum = 0;
  210. string trayCode = string.Empty;
  211. string palletCode = string.Empty;
  212. int rowSelectIndex = 0;
  213. foreach (DataGridViewRow item in kdgv_WaitInventoryPalletLst.Rows)
  214. {
  215. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  216. object obj = checkCell.EditedFormattedValue;
  217. if (Convert.ToBoolean(obj))
  218. {
  219. if (item.Cells[7].Value.ToString() == "未生成盘点任务")
  220. {
  221. KryptonMessageBox.Show($"托盘号:【{item.Cells[3].Value}】未生成盘点任务,不允许进行盘点操作!");
  222. return;
  223. }
  224. rowsSelectedNum++;
  225. trayCode = item.Cells[2].Value.ToString();
  226. palletCode = item.Cells[3].Value.ToString();
  227. rowSelectIndex = item.Index;
  228. }
  229. }
  230. if (rowsSelectedNum > 0)
  231. {
  232. if (rowsSelectedNum == 1)
  233. {
  234. //检测托盘是否到达盘点位置,
  235. //1、校验盘点下架是否完成
  236. //2、校验盘点下架的大任务是否到达目标位置。
  237. var editResult = BalanceServices.balanceOperateService.GetInventoryPallletOperateData(new WmsAwitInventoryPalletMd
  238. {
  239. INVENTORY_ID = Convert.ToInt32(InventoryId),
  240. TRAY_CODE = trayCode,
  241. PALLET_CODE = palletCode,
  242. BIN_NAME = InventoryModeMsg,//在这里使用BIN_NAME属性传入盘点方式的信息。
  243. });
  244. if (editResult.Status == OperateStatus.Success)
  245. {
  246. kryptonGroupBox3.Enabled = true;
  247. kryptonGroupBox2.Enabled = false;
  248. kdgv_InventoryingPalletDtlLst.Rows.Clear();
  249. awitInventoryPalletDtlData = editResult.Data;
  250. foreach (var item in editResult.Data)
  251. {
  252. int index = kdgv_InventoryingPalletDtlLst.Rows.Add();
  253. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[0].Value = item.InventoryDtlId;
  254. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[1].Value = item.MaterielTypeCode;
  255. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[2].Value = item.MaterielTypeCode;
  256. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[3].Value = item.MaterielCode;
  257. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[4].Value = item.MaterielName;
  258. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[5].Value = item.Qty;
  259. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[6].Value = item.ActualInventoryQty;
  260. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[7].Value = item.UnitName;
  261. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[8].Value = item.TrayCode;
  262. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[9].Value = item.PalletCode;
  263. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[10].Value = item.SupplierName;
  264. kdgv_InventoryingPalletDtlLst.Rows[index].Cells[11].Value = item.BatchNo;
  265. }
  266. //加载正在盘点的托盘数据
  267. KryptonMessageBox.Show($"加载盘点操作托盘明细数据成功!");
  268. }
  269. else
  270. {
  271. KryptonMessageBox.Show($"{editResult.Message}");
  272. }
  273. }
  274. else
  275. {
  276. KryptonMessageBox.Show("每次只允许一个托盘进行盘点操作!");
  277. }
  278. }
  279. else
  280. {
  281. KryptonMessageBox.Show("请勾选盘点操作的托盘数据行!");
  282. }
  283. }
  284. catch (Exception ex)
  285. {
  286. KryptonMessageBox.Show(ex.Message);
  287. }
  288. }
  289. private void kbtn_ConfirmInventoryResult_Click(object sender, EventArgs e)
  290. {
  291. try
  292. {
  293. int rowIndex = 0;
  294. foreach (DataGridViewRow item in kdgv_InventoryingPalletDtlLst.Rows)
  295. {
  296. rowIndex++;
  297. if (Convert.ToDecimal(item.Cells[6].Value) == 0)
  298. {
  299. KryptonMessageBox.Show($"第:【{rowIndex}】托盘明细未录入盘点数量!");
  300. return;
  301. }
  302. else
  303. {
  304. InventoryDetailSearchResult retDtlMd = awitInventoryPalletDtlData.FirstOrDefault(x => x.InventoryDtlId == Convert.ToInt32(item.Cells[0].Value));
  305. retDtlMd.ActualInventoryQty = Convert.ToDecimal(item.Cells[6].Value);
  306. }
  307. }
  308. InventoryMainSearchResult retMd = new InventoryMainSearchResult
  309. {
  310. InventoryId = Convert.ToInt32(InventoryId),
  311. UpdateBy = AppConfig.UserLoginResult.UserInfo.UserId,
  312. InventoryNo = _MainInfo.InventoryNo,
  313. InventoryDtlLst = awitInventoryPalletDtlData,
  314. InventoryModeName = InventoryModeMsg,
  315. };
  316. var editResult = BalanceServices.balanceOperateService.ConfirmInventoryPalletData(retMd);
  317. if (editResult.Status == OperateStatus.Success)
  318. {
  319. KryptonMessageBox.Show($"{editResult.Message}");
  320. kryptonGroupBox3.Enabled = false;
  321. kryptonGroupBox2.Enabled = true;
  322. kdgv_InventoryingPalletDtlLst.Rows.Clear();
  323. LoadAwitInventoryPalletData();
  324. }
  325. else
  326. {
  327. KryptonMessageBox.Show($"{editResult.Message}");
  328. }
  329. }
  330. catch (Exception ex)
  331. {
  332. KryptonMessageBox.Show(ex.Message);
  333. }
  334. }
  335. private void kbtn_PalletReinventory_Click(object sender, EventArgs e)
  336. {
  337. kdgv_InventoryingPalletDtlLst.Rows.Clear();
  338. kryptonGroupBox3.Enabled = false;
  339. LoadAwitInventoryPalletData();
  340. }
  341. #endregion
  342. #region 事件方法
  343. private void LoadAwitInventoryPalletData()
  344. {
  345. try
  346. {
  347. var resultLst = BalanceServices.balanceOperateService.GetAwitInventoryPalletLstData(new WmsAwitInventoryPalletMdCondition
  348. {
  349. InventoryModeMsg = InventoryModeMsg
  350. });
  351. if (resultLst.Status == OperateStatus.Success)
  352. {
  353. kdgv_WaitInventoryPalletLst.Rows.Clear();
  354. awitInventoryPalletData = resultLst.Data;
  355. foreach (WmsAwitInventoryPalletMd item in resultLst.Data)
  356. {
  357. int index = kdgv_WaitInventoryPalletLst.Rows.Add();
  358. kdgv_WaitInventoryPalletLst.Rows[index].Cells[1].Value = item.INVENTORY_ID;
  359. kdgv_WaitInventoryPalletLst.Rows[index].Cells[2].Value = item.TRAY_CODE;
  360. kdgv_WaitInventoryPalletLst.Rows[index].Cells[3].Value = item.PALLET_CODE;
  361. kdgv_WaitInventoryPalletLst.Rows[index].Cells[4].Value = item.REGION_NAME;
  362. kdgv_WaitInventoryPalletLst.Rows[index].Cells[5].Value = item.BIN_NAME;
  363. if (item.INVENTORY_STATUS < 88)
  364. {
  365. if (item.BALANCE_STATUS == 55)
  366. {
  367. kdgv_WaitInventoryPalletLst.Rows[index].Cells[6].Value = "未开始盘点";
  368. }
  369. else if (item.BALANCE_STATUS > 55)
  370. {
  371. kdgv_WaitInventoryPalletLst.Rows[index].Cells[6].Value = "正常盘点出库中";
  372. }
  373. else
  374. {
  375. kdgv_WaitInventoryPalletLst.Rows[index].Cells[6].Value = "正常盘点入库中";
  376. }
  377. }
  378. else
  379. {
  380. if (item.BALANCE_STATUS == 55)
  381. {
  382. kdgv_WaitInventoryPalletLst.Rows[index].Cells[6].Value = "未开始盘点";
  383. }
  384. else if (item.BALANCE_STATUS > 55)
  385. {
  386. kdgv_WaitInventoryPalletLst.Rows[index].Cells[6].Value = "差异盘点出库中";
  387. }
  388. else
  389. {
  390. kdgv_WaitInventoryPalletLst.Rows[index].Cells[6].Value = "差异盘点入库中";
  391. }
  392. }
  393. if (item.PUTDOWN_STATUS < 99 && item.PUTDOWN_STATUS >= 0)
  394. {
  395. kdgv_WaitInventoryPalletLst.Rows[index].Cells[7].Value = "已生成盘点任务";
  396. }
  397. else
  398. {
  399. kdgv_WaitInventoryPalletLst.Rows[index].Cells[7].Value = "未生成盘点任务";
  400. }
  401. }
  402. }
  403. else
  404. {
  405. KryptonMessageBox.Show($"加载待盘点托盘数据错误:【{resultLst.Message}】");
  406. }
  407. }
  408. catch (Exception ex)
  409. {
  410. KryptonMessageBox.Show(ex.Message);
  411. }
  412. }
  413. #endregion
  414. private void kdgv_WaitInventoryPalletLst_CellContentClick(object sender, DataGridViewCellEventArgs e)
  415. {
  416. if (e.ColumnIndex == 0)
  417. {
  418. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)kdgv_WaitInventoryPalletLst.CurrentRow.Cells[0];
  419. if (Convert.ToBoolean(checkCell.EditedFormattedValue))
  420. {
  421. kdgv_WaitInventoryPalletLst.CurrentCell.Style.BackColor = Color.FromArgb(51, 153, 255);
  422. }
  423. else
  424. {
  425. kdgv_WaitInventoryPalletLst.CurrentCell.Style.BackColor = Color.Transparent;
  426. }
  427. }
  428. }
  429. private void FrmInventoryOperate_FormClosing(object sender, FormClosingEventArgs e)
  430. {
  431. }
  432. }
  433. }