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.

888 lines
46 KiB

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