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.

825 lines
42 KiB

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