You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

835 lines
42 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using NFine.Data.Extensions;
  2. using System;
  3. using System.Data;
  4. using NFine.Code;
  5. using NFine.Repository;
  6. using NFine.Domain._03_Entity.SRM;
  7. using System.Data.SqlClient;
  8. using System.Data.Common;
  9. using System.Collections.Generic;
  10. using System.Configuration;
  11. using Newtonsoft.Json.Linq;
  12. using Newtonsoft.Json;
  13. using NFine.Domain._03_Entity.WMS;
  14. namespace NFine.Application.WMS
  15. {
  16. public class HomeWorkApp : RepositoryFactory<ICSVendor>
  17. {
  18. public string SetData_PR(String savePath, string Year)
  19. {
  20. //数据获取
  21. try
  22. {
  23. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  24. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  25. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  26. SqlConnection conn = SqlHelper.GetDataCenterConn();
  27. DataTable data = FileToExcel.ExcelToTable(savePath);
  28. int index = 1;
  29. int countLot = 1;
  30. string msg = "";
  31. string StorageCode = "";
  32. DateTime time = DateTime.Now;
  33. string Tday = time.ToString("yyyyMMdd");
  34. string sql = string.Empty;
  35. sql = string.Format(@"select InvCode FROM dbo.ICSInventory where WorkPoint ='{0}' ", WorkPoint);
  36. sql += string.Format(@"select LocationCode ,WarehouseCode FROM dbo.ICSLocation a
  37. inner join ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint where b.Enable='1' and a.WorkPoint ='{0}' ", WorkPoint);
  38. sql += string.Format(@"SELECT MAX(A.LotNO) AS LOTNO FROM ICSInventoryLot A WHERE A.LotNO LIKE '{0}%' and A.WorkPoint='{1}' AND LEN(a.LotNO) = 13", Tday, WorkPoint);
  39. sql += string.Format(@"SELECT top 0 ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,PrintTimes,LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1 FROM ICSInventoryLot ");
  40. sql += string.Format(@"SELECT top 0 ID,LotNo,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1 FROM ICSWareHouseLotInfo ");
  41. sql += string.Format(@"SELECT top 0 ID, Identification, TransCode, TransSequence, LotNo, InvCode, FromWarehouseCode, FromLocationCode, ToWarehouseCode, ToLocationCode, Quantity, Memo, Lock, TransType, BusinessCode, ERPUpload, ERPID, ERPDetailID, ERPCode, ERPSequence, LogID, MergeID, MUSER, MUSERName, MTIME, WorkPoint, EATTRIBUTE1, EATTRIBUTE2, EATTRIBUTE3 FROM dbo.ICSWareHouseLotInfoLog ");
  42. sql += string.Format(@"SELECT ID,Colspan,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,MTIME,MUSER,MUSERName,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5 FROM ICSExtension where WorkPoint='{0}' ", WorkPoint);
  43. sql += string.Format(@"SELECT top 0 LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1 FROM ICSInventoryLotDetail");
  44. DataSet ds = SqlHelper.GetDataSetBySql(sql);
  45. DataSet dsSave = new DataSet();
  46. dsSave.Tables.Add(ds.Tables[3].Copy());
  47. dsSave.Tables.Add( ds.Tables[4].Copy());
  48. dsSave.Tables.Add( ds.Tables[5].Copy());
  49. dsSave.Tables.Add(ds.Tables[6].Clone());
  50. dsSave.Tables.Add(ds.Tables[7].Copy());
  51. dsSave.Tables[0].TableName="ICSInventoryLot";
  52. dsSave.Tables[1].TableName = "ICSWareHouseLotInfo";
  53. dsSave.Tables[2].TableName = "ICSWareHouseLotInfoLog";
  54. dsSave.Tables[3].TableName = "ICSExtension";
  55. dsSave.Tables[4].TableName = "ICSInventoryLotDetail";
  56. string LotNO = "";
  57. Int64 Lot_NO = 0;
  58. DataTable dts = ds.Tables[2];
  59. if (dts != null && dts.Rows.Count > 0)
  60. {
  61. string lot = dts.Rows[0]["LOTNO"].ToString();
  62. if(!string.IsNullOrWhiteSpace(lot))
  63. Lot_NO = Convert.ToInt64(lot.Substring(lot.Length - 5));
  64. }
  65. if (data != null && data.Rows.Count > 0)
  66. {
  67. foreach (DataRow dr in data.Rows)
  68. {
  69. index++;
  70. string OldLotNo = dr["条码"].ToString();
  71. string ItemCode = dr["物料编码"].ToString();
  72. string StackCode = dr["库位"].ToString();
  73. string Date = dr["入库日期"].ToString();
  74. string VENCODE = dr["供应商"].ToString();
  75. string ProductDate = dr["生产日期"].ToString();
  76. string KWQty = "";
  77. decimal MinQty = 0;
  78. decimal Amount = 0;
  79. if (data.Columns.Contains("数量"))
  80. {
  81. Amount = string.IsNullOrWhiteSpace(dr["数量"].ToString())?0:Convert.ToDecimal(dr["数量"].ToString());
  82. }
  83. string ProjectCode = string.Empty;
  84. string BatchCode = string.Empty;
  85. string Version = string.Empty;
  86. string Brand = string.Empty;
  87. string cFree1 = string.Empty;
  88. string cFree2 = string.Empty;
  89. string cFree3 = string.Empty;
  90. string cFree4 = string.Empty;
  91. string cFree5 = string.Empty;
  92. string cFree6 = string.Empty;
  93. string cFree7 = string.Empty;
  94. string cFree8 = string.Empty;
  95. string cFree9 = string.Empty;
  96. string cFree10 = string.Empty;
  97. if (data.Columns.Contains("项目号"))
  98. {
  99. ProjectCode = dr["项目号"].ToString();
  100. }
  101. if (data.Columns.Contains("批次"))
  102. {
  103. BatchCode= dr["批次"].ToString();
  104. }
  105. if (data.Columns.Contains("版本"))
  106. {
  107. Version = dr["版本"].ToString();
  108. }
  109. if (data.Columns.Contains("厂牌"))
  110. {
  111. Brand = dr["厂牌"].ToString();
  112. }
  113. if (data.Columns.Contains("自由项1"))
  114. {
  115. cFree1 = dr["自由项1"].ToString();
  116. }
  117. if (data.Columns.Contains("自由项2"))
  118. {
  119. cFree2 = dr["自由项2"].ToString();
  120. }
  121. if (data.Columns.Contains("自由项3"))
  122. {
  123. cFree3 = dr["自由项3"].ToString();
  124. }
  125. if (data.Columns.Contains("自由项4"))
  126. {
  127. cFree4 = dr["自由项4"].ToString();
  128. }
  129. if (data.Columns.Contains("自由项5"))
  130. {
  131. cFree5 = dr["自由项5"].ToString();
  132. }
  133. if (data.Columns.Contains("自由项6"))
  134. {
  135. cFree6 = dr["自由项6"].ToString();
  136. }
  137. if (data.Columns.Contains("自由项7"))
  138. {
  139. cFree7 = dr["自由项7"].ToString();
  140. }
  141. if (data.Columns.Contains("自由项8"))
  142. {
  143. cFree8 = dr["自由项8"].ToString();
  144. }
  145. if (data.Columns.Contains("自由项9"))
  146. {
  147. cFree9 = dr["自由项9"].ToString();
  148. }
  149. if (data.Columns.Contains("自由项10"))
  150. {
  151. cFree10 = dr["自由项10"].ToString();
  152. }
  153. string Colspan = ProjectCode + "~" + BatchCode + "~" + Version + "~" + Brand + "~" + cFree1 + "~" + cFree2 + "~" + cFree3 + "~" + cFree4 + "~" + cFree5 + "~" + cFree6 + "~" + cFree7 + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  154. DateTime dataTime;
  155. if (Date == "")
  156. {
  157. dataTime = DateTime.Now;
  158. }
  159. else
  160. {
  161. dataTime = Convert.ToDateTime(Date);
  162. }
  163. decimal QTY = 0;
  164. bool result = decimal.TryParse(KWQty, out QTY);
  165. //if (!result)
  166. //{
  167. // throw new Exception("第 " + index + " 行,库位数量:" + KWQty + " 格式不正确!");
  168. //}
  169. //if (decimal.Parse(KWQty) < 0)
  170. //{
  171. // throw new Exception("第 " + index + " 行,库位数量:" + KWQty + " 数量不正确,为负值!");
  172. //}
  173. if (string.IsNullOrWhiteSpace(dr["生产日期"].ToString()))
  174. {
  175. throw new Exception("第 " + index + " 行,生产日期不能为空!");
  176. }
  177. //if (decimal.Parse(dr["最小包装数量"].ToString()) < 0)
  178. //{
  179. // throw new Exception("第 " + index + " 行,最小包装数量:" + dr["最小包装数量"].ToString() + " 数量不正确,为负值!");
  180. //}
  181. int count = 1;
  182. //string ZBCount = (Math.Ceiling(Convert.ToDecimal(KWQty) / Convert.ToDecimal(dr["最小包装数量"].ToString()))).ToString();
  183. //bool resultCount = int.TryParse(ZBCount, out count);
  184. //if (!resultCount)
  185. //{
  186. // throw new Exception("第 " + index + " 行,整盘数:" + dr["整盘数"].ToString() + " 格式不正确!");
  187. //}
  188. var itemdrs = ds.Tables[0].Select(string.Format("InvCode='{0}'", ItemCode));
  189. if (itemdrs == null || itemdrs.Length <= 0)
  190. {
  191. throw new Exception("第 " + index + " 行,物料编码:" + ItemCode + " 不存在!");
  192. }
  193. var itemdrs2 = ds.Tables[1].Select(string.Format("LocationCode='{0}'", StackCode));
  194. if (itemdrs2 == null || itemdrs2.Length <= 0)
  195. {
  196. throw new Exception("第 " + index + " 行,库位:" + StackCode + " 不存在!");
  197. }
  198. else
  199. {
  200. StorageCode = itemdrs2[0]["WarehouseCode"].ToString();
  201. }
  202. var ID = "";
  203. var Extension = ds.Tables[6].Select(string.Format("Colspan='{0}'", Colspan));
  204. if (Extension == null || Extension.Length <= 0)
  205. {
  206. DataRow drExtension = dsSave.Tables[3].NewRow();
  207. ID = GetNewid();
  208. drExtension["ID"] = ID;
  209. drExtension["Colspan"] = Colspan;
  210. drExtension["ProjectCode"] = ProjectCode;
  211. drExtension["BatchCode"] = BatchCode;
  212. drExtension["Version"] = Version;
  213. drExtension["Brand"] = Brand;
  214. drExtension["cFree1"] = cFree1;
  215. drExtension["cFree2"] = cFree2;
  216. drExtension["cFree3"] = cFree3;
  217. drExtension["cFree4"] = cFree4;
  218. drExtension["cFree5"] = cFree5;
  219. drExtension["cFree6"] = cFree6;
  220. drExtension["cFree7"] = cFree7;
  221. drExtension["cFree8"] = cFree8;
  222. drExtension["cFree9"] = cFree9;
  223. drExtension["cFree10"] = cFree10;
  224. drExtension["MUSER"] = MUSER;
  225. drExtension["MUSERName"] = MUSERNAME;
  226. drExtension["MTIME"] = DateTime.Now;
  227. drExtension["WorkPoint"] = WorkPoint;
  228. dsSave.Tables[3].Rows.Add(drExtension);
  229. DataRow drNew = ds.Tables[6].NewRow();
  230. drNew.ItemArray = drExtension.ItemArray;
  231. ds.Tables[6].Rows.Add(drNew);
  232. }
  233. else
  234. {
  235. ID = Extension[0]["ID"].ToString();
  236. }
  237. // var Quantity= Convert.ToDecimal(KWQty);
  238. var logID = GetNewid();
  239. for (int i = count; i > 0; i--)
  240. {
  241. decimal Quantity ;
  242. string SeachEnable = @"select AmountEnable,EATTRIBUTE1 from dbo.ICSInventory where InvCode='" + ItemCode + "'";
  243. DataTable dtEnable = SqlHelper.GetDataTableBySql(SeachEnable);
  244. if (dtEnable.Rows[0]["AmountEnable"].ToString() == "True")
  245. {
  246. Quantity = Amount * Convert.ToDecimal(dtEnable.Rows[0]["EATTRIBUTE1"].ToString());
  247. KWQty = Quantity.ToString();
  248. MinQty = Quantity;
  249. }
  250. else
  251. {
  252. Quantity = Amount;
  253. Amount = 0;
  254. KWQty = Quantity.ToString();
  255. MinQty = Quantity;
  256. }
  257. if (OldLotNo != ""&& Quantity!= Convert.ToDecimal(KWQty))
  258. {
  259. throw new Exception("第 " + index + " 行,条码:" + OldLotNo + " 所填写的最小包装量与库位数量不一致!");
  260. }
  261. if (OldLotNo!="")
  262. {
  263. LotNO = OldLotNo.ToUpper();
  264. string SeachLotNo = @"select * from dbo.ICSInventoryLot where LotNo='"+ LotNO + "'";
  265. DataTable dt = SqlHelper.GetDataTableBySql(SeachLotNo);
  266. if (dt.Rows.Count > 0)
  267. {
  268. throw new Exception("条码:"+ LotNO + "已存在!");
  269. }
  270. }
  271. else
  272. {
  273. LotNO = Tday + (Lot_NO + countLot++).ToString().PadLeft(5, '0');
  274. }
  275. if (count == i)
  276. {
  277. Quantity= Convert.ToDecimal(KWQty)- (Convert.ToDecimal(MinQty) *(Convert.ToDecimal(count) - 1));
  278. }
  279. #region 条码
  280. DataRow drInventory = dsSave.Tables[0].NewRow();
  281. drInventory["ID"] = GetNewid();
  282. drInventory["LotNo"] = LotNO;
  283. drInventory["InvCode"] = ItemCode;
  284. drInventory["ProductDate"] = ProductDate;
  285. //drInventory["ProductDate"] = dataTime;
  286. drInventory["ExpirationDate"] = Convert.ToDateTime("2999-12-31");
  287. drInventory["Quantity"] = Quantity;
  288. drInventory["Amount"] = Amount;
  289. drInventory["Type"] = "0";
  290. drInventory["ExtensionID"] = ID;
  291. drInventory["MUSER"] = MUSER;
  292. drInventory["MUSERName"] = MUSERNAME;
  293. drInventory["MTIME"] = DateTime.Now;
  294. drInventory["WorkPoint"] = WorkPoint;
  295. dsSave.Tables[0].Rows.Add(drInventory);
  296. #endregion
  297. #region 条码关联单据
  298. DataRow drInventoryLotDetail = dsSave.Tables[4].NewRow();
  299. drInventoryLotDetail["LotNo"] = LotNO;
  300. drInventoryLotDetail["TransCode"] = "";
  301. drInventoryLotDetail["TransSequence"] = "";
  302. drInventoryLotDetail["MUSER"] = MUSER;
  303. drInventoryLotDetail["MUSERName"] = MUSERNAME;
  304. drInventoryLotDetail["MTIME"] = DateTime.Now;
  305. drInventoryLotDetail["WorkPoint"] = WorkPoint;
  306. dsSave.Tables[4].Rows.Add(drInventoryLotDetail);
  307. #endregion
  308. #region 库存
  309. DataRow drHouseInfo = dsSave.Tables[1].NewRow();
  310. drHouseInfo["ID"] = GetNewid();
  311. drHouseInfo["LotNo"] = LotNO;
  312. drHouseInfo["WarehouseCode"] = StorageCode;
  313. drHouseInfo["LocationCode"] = StackCode;
  314. drHouseInfo["InvCode"] = ItemCode;
  315. drHouseInfo["Quantity"] = Quantity;
  316. drHouseInfo["InDate"] = dataTime;
  317. drHouseInfo["LockQuantity"] = 0;
  318. drHouseInfo["MUSER"] = MUSER;
  319. drHouseInfo["MUSERName"] = MUSERNAME;
  320. drHouseInfo["MTIME"] = DateTime.Now;
  321. drHouseInfo["WorkPoint"] = WorkPoint;
  322. dsSave.Tables[1].Rows.Add(drHouseInfo);
  323. #endregion
  324. #region 记录表
  325. DataRow drHouseLog = dsSave.Tables[2].NewRow();
  326. drHouseLog["ID"] = GetNewid();
  327. drHouseLog["Identification"] = logID;
  328. drHouseLog["LotNo"] = LotNO;
  329. drHouseLog["InvCode"] = ItemCode;
  330. drHouseLog["ToWarehouseCode"] = StorageCode;
  331. drHouseLog["ToLocationCode"] = StackCode;
  332. drHouseLog["Quantity"] = Quantity;
  333. drHouseLog["Lock"] = 0;
  334. drHouseLog["TransType"] = "1";
  335. drHouseLog["BusinessCode"] = "39";
  336. drHouseLog["ERPUpload"] = 0;
  337. drHouseLog["MUSER"] = MUSER;
  338. drHouseLog["MUSERName"] = MUSERNAME;
  339. drHouseLog["MTIME"] = DateTime.Now;
  340. drHouseLog["WorkPoint"] = WorkPoint;
  341. dsSave.Tables[2].Rows.Add(drHouseLog);
  342. #endregion
  343. }
  344. }
  345. SqlHelper.ExecuteDataSet(dsSave);
  346. }
  347. else
  348. {
  349. return "无有效的导入数据。";
  350. }
  351. return "true";
  352. }
  353. catch (Exception ex)
  354. {
  355. return ex.Message;
  356. }
  357. }
  358. public string GetNewid()
  359. {
  360. string sql = "select newid() AS ID";
  361. return Repository().FindTableBySql(sql, null).Rows[0]["ID"].ToString();
  362. }
  363. /// <summary>
  364. /// 获取仓库信息
  365. /// </summary>
  366. /// <param name="jqgridparam"></param>
  367. /// <param name="queryJson"></param>
  368. /// <returns></returns>
  369. public DataTable GetICSWarehouse(ref Pagination jqgridparam, string queryJson)
  370. {
  371. DataTable dt = new DataTable();
  372. var queryParam = queryJson.ToJObject();
  373. List<DbParameter> parameter = new List<DbParameter>();
  374. string sql = @" SELECT WarehouseCode,WarehouseName,WorkPoint FROM dbo.ICSWarehouse";
  375. sql += " WHERE 1=1 and WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location+"'";
  376. sql = string.Format(sql);
  377. DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  378. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  379. }
  380. public DataTable ICSWarehouseExportAll(string keyvalue)
  381. {
  382. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  383. DataTable dt = new DataTable();
  384. string[] PrintParas = keyvalue.TrimEnd(',').Split(',');
  385. List<ICSWarehouse> list = new List<ICSWarehouse>();
  386. foreach (var p in PrintParas)
  387. {
  388. ICSWarehouse DetailList = new ICSWarehouse();
  389. DetailList.WHCode = p.ToString();
  390. DetailList.WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  391. list.Add(DetailList);
  392. }
  393. string json = JsonConvert.SerializeObject(list);
  394. string msg = "";
  395. string APIURL = ConfigurationManager.ConnectionStrings["ERPAPIURL"].ConnectionString + "CurrentStockNEW/Get";
  396. string result = DeciliterApp.HttpPost(APIURL, json);
  397. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  398. string MessAge = Obj["Message"].ToString();
  399. string Success = Obj["Success"].ToString();
  400. if (Success.ToUpper() == "FALSE")
  401. {
  402. throw new Exception(MessAge);
  403. }
  404. string Data = Obj["Data"].ToString();
  405. if (string.IsNullOrWhiteSpace(Data))
  406. {
  407. throw new Exception("获取现存量失败!");
  408. }
  409. var dataSet = JsonConvert.DeserializeObject<DataSet>(Data);
  410. dt = dataSet.Tables[0];
  411. string sqls = @"SELECT ColCode,ColName,Enable
  412. from ICSExtensionEnable where WorkPoint='" + WorkPoint + "'";
  413. DataTable dtExtension = SqlHelper.GetDataTableBySql(sqls);
  414. foreach (DataRow drE in dtExtension.Rows)
  415. {
  416. if (dt.Columns.Contains(drE["ColCode"].ToString()))
  417. {
  418. if (!Convert.ToBoolean(drE["Enable"]))
  419. {
  420. dt.Columns.Remove(drE["ColCode"].ToString());
  421. }
  422. else if (Convert.ToBoolean(drE["Enable"]))
  423. {
  424. dt.Columns[drE["ColCode"].ToString()].ColumnName = drE["ColName"].ToString();
  425. }
  426. }
  427. }
  428. return dt;
  429. }
  430. public string DeleteInitialImport(string keyValue)
  431. {
  432. //站点信息
  433. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  434. string msg = "";
  435. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  436. string sqlSeach = string.Format(@" select LotNo from dbo.ICSWareHouseLotInfoLog where BusinessCode<>'39' and LotNo in({0}) and WorkPoint in ('{1}')", keyValue.TrimEnd(','), WorkPoint);
  437. DataTable dtASN = SqlHelper.GetDataTableBySql(sqlSeach);
  438. if (dtASN != null && dtASN.Rows.Count > 0)
  439. {
  440. msg = "所选条码已进行过出入库操作,无法删除!";
  441. }
  442. string sql = string.Empty;
  443. sql += string.Format(@"DELETE FROM dbo.ICSInventoryLot WHERE LotNo IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  444. sql += string.Format(@"DELETE FROM dbo.ICSInventoryLotDetail WHERE LotNo IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  445. sql += string.Format(@"DELETE FROM dbo.ICSWareHouseLotInfo WHERE LotNo IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  446. sql += string.Format(@"update ICSWareHouseLotInfoLog set TransType='16' ,MTIME=getdate() where LotNo IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  447. try
  448. {
  449. SqlHelper.CmdExecuteNonQueryLi(sql);
  450. }
  451. catch (Exception ex)
  452. {
  453. throw new Exception(ex.Message);
  454. }
  455. return msg;
  456. }
  457. public string LotNoSetData_PR(String savePath, string Year)
  458. {
  459. //数据获取
  460. try
  461. {
  462. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  463. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  464. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  465. SqlConnection conn = SqlHelper.GetDataCenterConn();
  466. DataTable data = FileToExcel.ExcelToTable(savePath);
  467. int index = 1;
  468. int countLot = 1;
  469. string msg = "";
  470. string StorageCode = "";
  471. DateTime time = DateTime.Now;
  472. string Tday = time.ToString("yyyyMMdd");
  473. string sql = string.Empty;
  474. sql = string.Format(@"select InvCode FROM dbo.ICSInventory where WorkPoint ='{0}' ", WorkPoint);
  475. sql += string.Format(@"select LocationCode ,WarehouseCode FROM dbo.ICSLocation a
  476. inner join ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint where b.Enable='1' and a.WorkPoint ='{0}' ", WorkPoint);
  477. sql += string.Format(@"SELECT MAX(A.LotNO) AS LOTNO FROM ICSInventoryLot A WHERE A.LotNO LIKE '{0}%' and A.WorkPoint='{1}' AND LEN(a.LotNO) = 13", Tday, WorkPoint);
  478. sql += string.Format(@"SELECT top 0 ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,PrintTimes,LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1 FROM ICSInventoryLot ");
  479. sql += string.Format(@"SELECT top 0 ID,LotNo,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1 FROM ICSWareHouseLotInfo ");
  480. sql += string.Format(@"SELECT top 0 ID, Identification, TransCode, TransSequence, LotNo, InvCode, FromWarehouseCode, FromLocationCode, ToWarehouseCode, ToLocationCode, Quantity, Memo, Lock, TransType, BusinessCode, ERPUpload, ERPID, ERPDetailID, ERPCode, ERPSequence, LogID, MergeID, MUSER, MUSERName, MTIME, WorkPoint, EATTRIBUTE1, EATTRIBUTE2, EATTRIBUTE3 FROM dbo.ICSWareHouseLotInfoLog ");
  481. sql += string.Format(@"SELECT ID,Colspan,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,MTIME,MUSER,MUSERName,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5 FROM ICSExtension where WorkPoint='{0}' ", WorkPoint);
  482. sql += string.Format(@"SELECT top 0 LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1 FROM ICSInventoryLotDetail");
  483. DataSet ds = SqlHelper.GetDataSetBySql(sql);
  484. DataSet dsSave = new DataSet();
  485. dsSave.Tables.Add(ds.Tables[3].Copy());
  486. dsSave.Tables.Add(ds.Tables[4].Copy());
  487. dsSave.Tables.Add(ds.Tables[5].Copy());
  488. dsSave.Tables.Add(ds.Tables[6].Clone());
  489. dsSave.Tables.Add(ds.Tables[7].Copy());
  490. dsSave.Tables[0].TableName = "ICSInventoryLot";
  491. dsSave.Tables[1].TableName = "ICSWareHouseLotInfo";
  492. dsSave.Tables[2].TableName = "ICSWareHouseLotInfoLog";
  493. dsSave.Tables[3].TableName = "ICSExtension";
  494. dsSave.Tables[4].TableName = "ICSInventoryLotDetail";
  495. // string LotNO = "";
  496. //string Lot_NO = "";
  497. DataTable dts = ds.Tables[2];
  498. //if (dts != null && dts.Rows.Count > 0)
  499. //{
  500. // string lot = dts.Rows[0]["LOTNO"].ToString();
  501. // if (!string.IsNullOrWhiteSpace(lot))
  502. // Lot_NO = Convert.ToInt64(lot.Substring(lot.Length - 5));
  503. //}
  504. if (data != null && data.Rows.Count > 0)
  505. {
  506. foreach (DataRow dr in data.Rows)
  507. {
  508. index++;
  509. string ItemCode = dr["物料编码"].ToString();
  510. string StackCode = dr["库位"].ToString();
  511. string Date = dr["入库日期"].ToString();
  512. string VENCODE = dr["供应商"].ToString();
  513. string LotNO = dr["条码"].ToString();
  514. decimal Amount = 0;
  515. if (data.Columns.Contains("辅计量数量"))
  516. {
  517. Amount = string.IsNullOrWhiteSpace(dr["辅计量数量"].ToString()) ? 0 : Convert.ToDecimal(dr["辅计量数量"].ToString());
  518. }
  519. string ProjectCode = string.Empty;
  520. string BatchCode = string.Empty;
  521. string Version = string.Empty;
  522. string Brand = string.Empty;
  523. string cFree1 = string.Empty;
  524. string cFree2 = string.Empty;
  525. string cFree3 = string.Empty;
  526. string cFree4 = string.Empty;
  527. string cFree5 = string.Empty;
  528. string cFree6 = string.Empty;
  529. string cFree7 = string.Empty;
  530. string cFree8 = string.Empty;
  531. string cFree9 = string.Empty;
  532. string cFree10 = string.Empty;
  533. if (data.Columns.Contains("项目号"))
  534. {
  535. ProjectCode = dr["项目号"].ToString();
  536. }
  537. if (data.Columns.Contains("批次"))
  538. {
  539. BatchCode = dr["批次"].ToString();
  540. }
  541. if (data.Columns.Contains("版本"))
  542. {
  543. Version = dr["版本"].ToString();
  544. }
  545. if (data.Columns.Contains("厂牌"))
  546. {
  547. Brand = dr["厂牌"].ToString();
  548. }
  549. if (data.Columns.Contains("自由项1"))
  550. {
  551. cFree1 = dr["自由项1"].ToString();
  552. }
  553. if (data.Columns.Contains("自由项2"))
  554. {
  555. cFree2 = dr["自由项2"].ToString();
  556. }
  557. if (data.Columns.Contains("自由项3"))
  558. {
  559. cFree3 = dr["自由项3"].ToString();
  560. }
  561. if (data.Columns.Contains("自由项4"))
  562. {
  563. cFree4 = dr["自由项4"].ToString();
  564. }
  565. if (data.Columns.Contains("自由项5"))
  566. {
  567. cFree5 = dr["自由项5"].ToString();
  568. }
  569. if (data.Columns.Contains("自由项6"))
  570. {
  571. cFree6 = dr["自由项6"].ToString();
  572. }
  573. if (data.Columns.Contains("自由项7"))
  574. {
  575. cFree7 = dr["自由项7"].ToString();
  576. }
  577. if (data.Columns.Contains("自由项8"))
  578. {
  579. cFree8 = dr["自由项8"].ToString();
  580. }
  581. if (data.Columns.Contains("自由项9"))
  582. {
  583. cFree9 = dr["自由项9"].ToString();
  584. }
  585. if (data.Columns.Contains("自由项10"))
  586. {
  587. cFree10 = dr["自由项10"].ToString();
  588. }
  589. string Colspan = ProjectCode + "~" + BatchCode + "~" + Version + "~" + Brand + "~" + cFree1 + "~" + cFree2 + "~" + cFree3 + "~" + cFree4 + "~" + cFree5 + "~" + cFree6 + "~" + cFree7 + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  590. DateTime dataTime;
  591. if (Date == "")
  592. {
  593. dataTime = DateTime.Now;
  594. }
  595. else
  596. {
  597. dataTime = Convert.ToDateTime(Date);
  598. }
  599. decimal QTY = 0;
  600. bool result = decimal.TryParse(dr["库位数量或最小包装数量"].ToString(), out QTY);
  601. if (!result)
  602. {
  603. throw new Exception("第 " + index + " 行,库位数量或最小包装数量:" + dr["库位数量或最小包装数量"].ToString() + " 格式不正确!");
  604. }
  605. if (decimal.Parse(dr["库位数量或最小包装数量"].ToString()) < 0)
  606. {
  607. throw new Exception("第 " + index + " 行,库位数量或最小包装数量:" + dr["库位数量或最小包装数量"].ToString() + " 数量不正确,为负值!");
  608. }
  609. int count = 0;
  610. bool resultCount = int.TryParse(dr["整盘数"].ToString(), out count);
  611. if (!resultCount)
  612. {
  613. throw new Exception("第 " + index + " 行,整盘数:" + dr["整盘数"].ToString() + " 格式不正确!");
  614. }
  615. var itemdrs = ds.Tables[0].Select(string.Format("InvCode='{0}'", ItemCode));
  616. if (itemdrs == null || itemdrs.Length <= 0)
  617. {
  618. throw new Exception("第 " + index + " 行,物料编码:" + ItemCode + " 不存在!");
  619. }
  620. var itemdrs2 = ds.Tables[1].Select(string.Format("LocationCode='{0}'", StackCode));
  621. if (itemdrs2 == null || itemdrs2.Length <= 0)
  622. {
  623. throw new Exception("第 " + index + " 行,库位:" + StackCode + " 不存在!");
  624. }
  625. else
  626. {
  627. StorageCode = itemdrs2[0]["WarehouseCode"].ToString();
  628. }
  629. var ID = "";
  630. var Extension = ds.Tables[6].Select(string.Format("Colspan='{0}'", Colspan));
  631. if (Extension == null || Extension.Length <= 0)
  632. {
  633. DataRow drExtension = dsSave.Tables[3].NewRow();
  634. ID = GetNewid();
  635. drExtension["ID"] = ID;
  636. drExtension["Colspan"] = Colspan;
  637. drExtension["ProjectCode"] = ProjectCode;
  638. drExtension["BatchCode"] = BatchCode;
  639. drExtension["Version"] = Version;
  640. drExtension["Brand"] = Brand;
  641. drExtension["cFree1"] = cFree1;
  642. drExtension["cFree2"] = cFree2;
  643. drExtension["cFree3"] = cFree3;
  644. drExtension["cFree4"] = cFree4;
  645. drExtension["cFree5"] = cFree5;
  646. drExtension["cFree6"] = cFree6;
  647. drExtension["cFree7"] = cFree7;
  648. drExtension["cFree8"] = cFree8;
  649. drExtension["cFree9"] = cFree9;
  650. drExtension["cFree10"] = cFree10;
  651. drExtension["MUSER"] = MUSER;
  652. drExtension["MUSERName"] = MUSERNAME;
  653. drExtension["MTIME"] = DateTime.Now;
  654. drExtension["WorkPoint"] = WorkPoint;
  655. dsSave.Tables[3].Rows.Add(drExtension);
  656. DataRow drNew = ds.Tables[6].NewRow();
  657. drNew.ItemArray = drExtension.ItemArray;
  658. ds.Tables[6].Rows.Add(drNew);
  659. }
  660. else
  661. {
  662. ID = Extension[0]["ID"].ToString();
  663. }
  664. var Quantity = Convert.ToDecimal(dr["库位数量或最小包装数量"].ToString());
  665. var logID = GetNewid();
  666. for (int i = count; i > 0; i--)
  667. {
  668. //LotNO = Lot_NO;
  669. #region 条码
  670. DataRow drInventory = dsSave.Tables[0].NewRow();
  671. drInventory["ID"] = GetNewid();
  672. drInventory["LotNo"] = LotNO;
  673. drInventory["InvCode"] = ItemCode;
  674. drInventory["ProductDate"] = dataTime;
  675. drInventory["ExpirationDate"] = Convert.ToDateTime("2999-12-31");
  676. drInventory["Quantity"] = Quantity;
  677. drInventory["Amount"] = Amount;
  678. drInventory["Type"] = "0";
  679. drInventory["ExtensionID"] = ID;
  680. drInventory["MUSER"] = MUSER;
  681. drInventory["MUSERName"] = MUSERNAME;
  682. drInventory["MTIME"] = DateTime.Now;
  683. drInventory["WorkPoint"] = WorkPoint;
  684. dsSave.Tables[0].Rows.Add(drInventory);
  685. #endregion
  686. #region 条码关联单据
  687. DataRow drInventoryLotDetail = dsSave.Tables[4].NewRow();
  688. drInventoryLotDetail["LotNo"] = LotNO;
  689. drInventoryLotDetail["TransCode"] = "";
  690. drInventoryLotDetail["TransSequence"] = "";
  691. drInventoryLotDetail["MUSER"] = MUSER;
  692. drInventoryLotDetail["MUSERName"] = MUSERNAME;
  693. drInventoryLotDetail["MTIME"] = DateTime.Now;
  694. drInventoryLotDetail["WorkPoint"] = WorkPoint;
  695. dsSave.Tables[4].Rows.Add(drInventoryLotDetail);
  696. #endregion
  697. #region 库存
  698. DataRow drHouseInfo = dsSave.Tables[1].NewRow();
  699. drHouseInfo["ID"] = GetNewid();
  700. drHouseInfo["LotNo"] = LotNO;
  701. drHouseInfo["WarehouseCode"] = StorageCode;
  702. drHouseInfo["LocationCode"] = StackCode;
  703. drHouseInfo["InvCode"] = ItemCode;
  704. drHouseInfo["Quantity"] = Quantity;
  705. drHouseInfo["InDate"] = dataTime;
  706. drHouseInfo["LockQuantity"] = 0;
  707. drHouseInfo["MUSER"] = MUSER;
  708. drHouseInfo["MUSERName"] = MUSERNAME;
  709. drHouseInfo["MTIME"] = DateTime.Now;
  710. drHouseInfo["WorkPoint"] = WorkPoint;
  711. dsSave.Tables[1].Rows.Add(drHouseInfo);
  712. #endregion
  713. #region 记录表
  714. DataRow drHouseLog = dsSave.Tables[2].NewRow();
  715. drHouseLog["ID"] = GetNewid();
  716. drHouseLog["Identification"] = logID;
  717. drHouseLog["LotNo"] = LotNO;
  718. drHouseLog["InvCode"] = ItemCode;
  719. drHouseLog["ToWarehouseCode"] = StorageCode;
  720. drHouseLog["ToLocationCode"] = StackCode;
  721. drHouseLog["Quantity"] = Quantity;
  722. drHouseLog["Lock"] = 0;
  723. drHouseLog["TransType"] = "1";
  724. drHouseLog["BusinessCode"] = "39";
  725. drHouseLog["ERPUpload"] = 0;
  726. drHouseLog["MUSER"] = MUSER;
  727. drHouseLog["MUSERName"] = MUSERNAME;
  728. drHouseLog["MTIME"] = DateTime.Now;
  729. drHouseLog["WorkPoint"] = WorkPoint;
  730. dsSave.Tables[2].Rows.Add(drHouseLog);
  731. #endregion
  732. }
  733. }
  734. SqlHelper.ExecuteDataSet(dsSave);
  735. }
  736. else
  737. {
  738. return "无有效的导入数据。";
  739. }
  740. return "true";
  741. }
  742. catch (Exception ex)
  743. {
  744. return ex.Message;
  745. }
  746. }
  747. }
  748. }