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.

318 lines
14 KiB

3 weeks ago
  1. using NFine.Code;
  2. using NFine.Data.Extensions;
  3. using NFine.Domain._03_Entity.SRM;
  4. using NFine.Repository;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace NFine.Application.WMS
  13. {
  14. public class IntelligentDeviceIntegrationApp: RepositoryFactory<ICSVendor>
  15. {
  16. //获取仓库
  17. public DataTable GetWarehouseID()
  18. {
  19. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  20. string sql = @"
  21. select '' as ID,'' as WarehouseName
  22. union all
  23. SELECT DISTINCT a.ID,a.WarehouseName FROM dbo.ICSWarehouse a where 1=1 and Enable='1' ";
  24. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  25. sql += " and WorkPoint in('" + WorkPoint + "')";
  26. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  27. return dt;
  28. }
  29. //根据仓库获取区域
  30. public DataTable GetRegion(string WHID)
  31. {
  32. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  33. string sql = @"
  34. select '' as Region,'' as RegionName
  35. union all
  36. select distinct Region ,Region+'区' as RegionName from dbo.ICSLocation where 1=1 and WHID='" + WHID + "'";
  37. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  38. sql += " and WorkPoint in('" + WorkPoint + "')";
  39. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  40. return dt;
  41. }
  42. public string OperateICSCoordinate(string keyValue)
  43. {
  44. string msg = "";
  45. try
  46. {
  47. var queryParam = keyValue.ToJObject();
  48. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  49. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  50. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  51. string sql = string.Empty;
  52. sql = @"IF NOT EXISTS(SELECT ID FROM dbo.ICSCoordinate WHERE ID='{8}')
  53. BEGIN
  54. INSERT INTO dbo.ICSCoordinate
  55. (
  56. ID, WHID, Region, X, Y, Z,MUSER,MUSERName,MTIME,WorkPoint
  57. )
  58. VALUES
  59. (newid(),'{0}','{1}','{2}','{3}','{4}','{5}','{6}',getdate(),'{7}')
  60. END
  61. ELSE
  62. BEGIN
  63. UPDATE dbo.ICSCoordinate
  64. SET X='{2}',Y='{3}',Z='{4}',MUSER='{5}',MUSERName='{6}',MTIME=getdate()
  65. WHERE ID='{8}'
  66. END
  67. ";
  68. sql = string.Format(sql, queryParam["WHID"].ToString(), queryParam["Region"].ToString(), queryParam["X"].ToString(), queryParam["Y"].ToString(), queryParam["Z"].ToString(),MUSER, MUSERNAME, WorkPoint, queryParam["ID"].ToString());
  69. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  70. {
  71. }
  72. else
  73. {
  74. msg = "操作失败";
  75. }
  76. }
  77. catch (Exception ex)
  78. {
  79. msg = ex.Message;
  80. }
  81. return msg;
  82. }
  83. public DataTable GetInfo(string ID)
  84. {
  85. DataTable dt = new DataTable();
  86. string sql = @" select a.ID,a.LocationCode,a.LocationName,b.WarehouseCode,a.Region,c.X,c.Y,c.Z,c.Landmark ,isnull(d.X,0) as XMax ,isnull(d.Y,0) as YMax,isnull(d.Z,0) as ZMax,c.EATTRIBUTE1 from dbo.ICSLocation a
  87. left join dbo.ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint
  88. left join ICSCoordinateLandmark c on a.ID=c.LocationID and a.WorkPoint=c.WorkPoint
  89. left join ICSCoordinate d on a.WHID=d.WHID and a.Region=d.Region and a.WorkPoint=d.WorkPoint
  90. where 1=1
  91. and a.ID='" + ID + "' ";
  92. return Repository().FindTableBySql(sql.ToString());
  93. }
  94. public string OperateICSCoordinateLandmark(string keyValue)
  95. {
  96. string msg = "";
  97. try
  98. {
  99. var queryParam = keyValue.ToJObject();
  100. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  101. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  102. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  103. string sql = string.Empty;
  104. string SeachSql = @"select a.ID,a.LocationCode,a.LocationName,b.WarehouseCode,a.Region,c.X,c.Y,c.Z,c.Landmark ,isnull(d.X,0) as XMax ,isnull(d.Y,0) as YMax,isnull(d.Z,0) as ZMax,c.EATTRIBUTE1
  105. from dbo.ICSLocation a
  106. left join dbo.ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint
  107. left join ICSCoordinateLandmark c on a.ID=c.LocationID and a.WorkPoint=c.WorkPoint
  108. left join ICSCoordinate d on a.WHID=d.WHID and a.Region=d.Region and a.WorkPoint=d.WorkPoint
  109. where 1=1 and b.WarehouseCode='{0}' AND c.EATTRIBUTE1='{1}' and isnull(c.EATTRIBUTE1,'')<>'' and a.Region='{2}' ";
  110. SeachSql = string.Format(SeachSql, queryParam["WHCode"].ToString(), queryParam["EATTRIBUTE1"].ToString(), queryParam["Region"].ToString());
  111. DataTable dt = SqlHelper.GetDataTableBySql(SeachSql);
  112. if (dt.Rows.Count>0)
  113. {
  114. msg = "操作失败,所输入的库位分配分配次序在仓库:"+ dt.Rows[0]["WarehouseCode"].ToString() + ",区域:"+ dt.Rows[0]["Region"].ToString() + ",中已存在,请重新输入!";
  115. return msg;
  116. }
  117. sql = @"
  118. IF NOT EXISTS(SELECT LocationID FROM dbo.ICSCoordinateLandmark WHERE LocationID='{0}')
  119. BEGIN
  120. INSERT INTO dbo.ICSCoordinateLandmark
  121. (
  122. ID, LocationID, X, Y, Z,Landmark,state,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1
  123. )
  124. VALUES
  125. (newid(),'{0}','{1}','{2}','{3}','{4}','0','{5}','{6}',getdate(),'{7}','{8}')
  126. END
  127. ELSE
  128. BEGIN
  129. UPDATE dbo.ICSCoordinateLandmark
  130. SET X='{1}',Y='{2}',Z='{3}',Landmark='{4}',MUSER='{5}',MUSERName='{6}',MTIME=getdate(),EATTRIBUTE1='{8}'
  131. WHERE LocationID='{0}'
  132. END
  133. ";
  134. sql = string.Format(sql, queryParam["LocationID"].ToString(), queryParam["X"].ToString(), queryParam["Y"].ToString(), queryParam["Z"].ToString(), queryParam["Landmark"].ToString(), MUSER, MUSERNAME, WorkPoint, queryParam["EATTRIBUTE1"].ToString() );
  135. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  136. {
  137. }
  138. else
  139. {
  140. msg = "操作失败";
  141. }
  142. }
  143. catch (Exception ex)
  144. {
  145. msg = ex.Message;
  146. }
  147. return msg;
  148. }
  149. public DataTable GetRegionRange(string WHID, string region)
  150. {
  151. DataTable dt = new DataTable();
  152. string sql = @"SELECT TOP 1 X, Y FROM dbo.ICSCoordinate
  153. WHERE WHID = '" + WHID + "' AND Region = '" + region + "' ";
  154. return Repository().FindTableBySql(sql.ToString());
  155. }
  156. public DataTable GetLandmarkData(string WHID, string region)
  157. {
  158. DataTable dt = new DataTable();
  159. string sql = @"SELECT cl.X, cl.Y, cl.Landmark, cl.State, cl.LocationID, c.WHID, c.Region
  160. FROM dbo.ICSCoordinateLandmark cl
  161. JOIN dbo.ICSCoordinate c ON cl.X <= c.X AND cl.Y <= c.Y
  162. WHERE WHID = '" + WHID + "' AND Region = '" + region + "' ";
  163. return Repository().FindTableBySql(sql.ToString());
  164. }
  165. public string SetData_PR(String savePath, string Type)
  166. {
  167. string msg = "";
  168. //数据获取
  169. try
  170. {
  171. int index = 1;
  172. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  173. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  174. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  175. SqlConnection conn = SqlHelper.GetDataCenterConn();
  176. string sql = "";
  177. int count = 0;
  178. DataTable data = FileToExcel.ExcelToTable(savePath);
  179. List<Dictionary<string, object>> parametersList = new List<Dictionary<string, object>>();
  180. string SeachSql = string.Format(@"select ID, LocationCode, LocationName, WHID, MUSER, MUSERName, MTIME, WorkPoint, Region, Row, GoodsShelf, Tier, Grid, EATTRIBUTE1, EATTRIBUTE2, EATTRIBUTE3, EATTRIBUTE4, EATTRIBUTE5 from ICSLocation where WorkPoint='{0}'", WorkPoint);
  181. // SeachSql += string.Format(@"select ID, WarehouseCode, WarehouseName, Enable, BatchEnable, Asset, Proxy, InCost, MUSER, MUSERName, MTIME, WorkPoint, EATTRIBUTE1, EATTRIBUTE2, EATTRIBUTE3, EATTRIBUTE4, EATTRIBUTE5 from ICSWarehouse where WorkPoint='{0}'", WorkPoint);
  182. SeachSql += string.Format(@" select a.ID,a.LocationCode,a.LocationName,b.WarehouseCode,b.ID as WHID, a.Region,c.X,c.Y,c.Z,c.Landmark ,isnull(d.X,0) as XMax ,isnull(d.Y,0) as YMax,isnull(d.Z,0) as ZMax,c.EATTRIBUTE1
  183. from dbo.ICSLocation a
  184. left join dbo.ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint
  185. left join ICSCoordinateLandmark c on a.ID=c.LocationID and a.WorkPoint=c.WorkPoint
  186. left join ICSCoordinate d on a.WHID=d.WHID and a.Region=d.Region and a.WorkPoint=d.WorkPoint
  187. where 1=1 and a.WorkPoint='{0}'", WorkPoint);
  188. DataSet ds = SqlHelper.GetDataSetBySql(SeachSql);
  189. foreach (DataRow dr in data.Rows)
  190. {
  191. string WHID = "";
  192. string LocationID = "";
  193. index++;
  194. string LocationCode = dr["库位"].ToString();
  195. string Region = dr["区域"].ToString();
  196. string X = dr["地标X"].ToString();
  197. string Y = dr["地标Y"].ToString();
  198. //string Z = dr["地标Z"].ToString();
  199. string Z = "";
  200. string Landmark = dr["AGV地标码"].ToString();
  201. string EATTRIBUTE1 = dr["库位分配分配次序"].ToString();
  202. if (LocationCode == "" || LocationCode == null)
  203. {
  204. throw new Exception("第 " + index + " 行库位不能为空!");
  205. }
  206. if (Region == "" || Region == null)
  207. {
  208. throw new Exception("第 " + index + " 行区域不能为空!");
  209. }
  210. if (X == "" || X == null)
  211. {
  212. throw new Exception("第 " + index + " 行地标X不能为空!");
  213. }
  214. if (Y == "" || Y == null)
  215. {
  216. throw new Exception("第 " + index + " 行地标Y不能为空!");
  217. }
  218. if (Landmark == "" || Landmark == null)
  219. {
  220. throw new Exception("第 " + index + " 行AGV地标码不能为空!");
  221. }
  222. var itemdrs = ds.Tables[0].Select(string.Format("LocationCode='{0}'", LocationCode));
  223. if (itemdrs == null || itemdrs.Length <= 0)
  224. {
  225. throw new Exception("第 " + index + " 行,库位编码:" + LocationCode + " 不存在!");
  226. }
  227. else
  228. {
  229. WHID = itemdrs[0]["WHID"].ToString();
  230. LocationID = itemdrs[0]["ID"].ToString();
  231. }
  232. var itemdrs2 = ds.Tables[1].Select(string.Format("WHID='{0}' and Region='{1}' and EATTRIBUTE1='{2}' and isnull(EATTRIBUTE1,'')<>''", WHID, Region, EATTRIBUTE1));
  233. if ( itemdrs2.Length > 0)
  234. {
  235. throw new Exception("第 " + index + " 行,库位分配分配次序:" + EATTRIBUTE1 + "在当前仓库区域已存在!");
  236. }
  237. sql += @" INSERT INTO dbo.ICSCoordinateLandmark
  238. (
  239. ID, LocationID, X, Y, Z,Landmark,state,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1
  240. )
  241. VALUES
  242. (newid(),'{0}','{1}','{2}','{3}','{4}','0','{5}','{6}',getdate(),'{7}','{8}')";
  243. sql = string.Format(sql, LocationID, X,Y, Z, Landmark, MUSER, MUSERNAME, WorkPoint,EATTRIBUTE1);
  244. }
  245. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  246. {
  247. msg = "";
  248. }
  249. else
  250. {
  251. msg = "删除失败!";
  252. }
  253. }
  254. catch (Exception ex)
  255. {
  256. msg = ex.Message;
  257. }
  258. return msg;
  259. }
  260. }
  261. }