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

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
1 year ago
10 months ago
10 months 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. }