纽威
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.

238 lines
11 KiB

3 years ago
3 years ago
  1. using NFine.Data.Extensions;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using NFine.Code;
  9. using NFine.Repository;
  10. using System.Data.Common;
  11. using NFine.Domain._03_Entity.SRM;
  12. using ICS.Application.Entity;
  13. using Newtonsoft.Json;
  14. using System.Configuration;
  15. using System.Data.SqlClient;
  16. using ICS.Data;
  17. using Newtonsoft.Json.Linq;
  18. namespace NFine.Application.WMS
  19. {
  20. public class ICSDisassemblyDocApp : RepositoryFactory<ICSVendor>
  21. {
  22. public DataTable GetGridJson(string queryJson, ref Pagination jqgridparam)
  23. {
  24. DataTable dt = new DataTable();
  25. var queryParam = queryJson.ToJObject();
  26. List<DbParameter> parameter = new List<DbParameter>();
  27. #region [SQL]
  28. string sql = @"
  29. select a.DABDOCType,
  30. a.DABDOCCode as Code,
  31. a.Sequence as Seq,
  32. a.Quantity as Qty,
  33. a.InvCode,
  34. a.WHCode,
  35. b.InvName,
  36. CASE WHEN c.TransSequence IS NOT NULL THEN '' ELSE '' END AS isInput,
  37. CASE WHEN f.TransCode IS NOT NULL THEN '' ELSE '' END AS isCreate,e.*
  38. from ICSDisassemblyDoc a
  39. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  40. left join (select TransCode,TransSequence,WorkPoint FROM ICSWareHouseLotInfoLog WHERE BusinessCode='37' group by TransCode,TransSequence,WorkPoint)c
  41. ON a.DABDOCCode=c.TransCode AND a.Sequence=c.TransSequence AND a.WorkPoint=c.WorkPoint
  42. left join (select TransCode,WorkPoint FROM ICSInventoryLotDetail group by TransCode,WorkPoint)f
  43. ON a.DABDOCCode=f.TransCode AND a.WorkPoint=f.WorkPoint
  44. LEFT JOIN ICSWarehouse d ON a.WHCode=d.WarehouseCode AND a.WorkPoint=d.WorkPoint
  45. left join ICSExtension e on a.ExtensionID=e.ID and a.WorkPoint=e.WorkPoint
  46. where a.DABDOCType='1'";
  47. sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
  48. #endregion
  49. if (!string.IsNullOrWhiteSpace(queryJson))
  50. {
  51. if (!string.IsNullOrWhiteSpace(queryParam["DABDOCCode"].ToString()))
  52. {
  53. sql += " and a.DABDOCCode like '%" + queryParam["DABDOCCode"].ToString() + "%' ";
  54. }
  55. }
  56. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  57. {
  58. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  59. }
  60. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  61. }
  62. public DataTable GetSubGridJson(string Code)
  63. {
  64. DataTable dt = new DataTable();
  65. //var queryParam = queryJson.ToJObject();
  66. string sql = string.Empty;
  67. List<DbParameter> parameter = new List<DbParameter>();
  68. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  69. sql = @"select
  70. a.Sequence,
  71. a.DABDOCType,
  72. a.DABDOCCode as Code,
  73. a.Quantity as Qty,
  74. a.InvCode,
  75. a.WHCode,
  76. e.BatchCode,
  77. b.InvName,
  78. f.LotNo
  79. from ICSDisassemblyDoc a
  80. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  81. left join (select TransCode,TransSequence,WorkPoint,LotNo FROM ICSInventoryLotDetail group by TransCode,TransSequence,WorkPoint,LotNo)f
  82. ON a.DABDOCCode=f.TransCode AND a.Sequence=f.TransSequence AND a.WorkPoint=f.WorkPoint
  83. LEFT JOIN ICSWarehouse d ON a.WHCode=d.WarehouseCode AND a.WorkPoint=d.WorkPoint
  84. left join ICSExtension e on a.ExtensionID=e.ID and a.WorkPoint=e.WorkPoint
  85. where a.DABDOCType='2' and a.DABDOCCode='{0}'
  86. order by a.Sequence";
  87. sql = string.Format(sql, Code, WorkPoint);
  88. return Repository().FindTableBySql(sql.ToString());
  89. }
  90. //查询符合套件的在库条码
  91. public DataTable GetLotNoByKit(string InvCode, string WHCode, string BatchCode, ref Pagination jqgridparam)
  92. {
  93. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  94. List<DbParameter> parameter = new List<DbParameter>();
  95. DataTable table = new DataTable();
  96. string sql = string.Empty;
  97. sql = @"select a.LotNo,a.InvCode,a.WarehouseCode,a.LocationCode,c.BatchCode,a.Quantity from dbo.ICSWareHouseLotInfo a
  98. left join dbo.ICSInventoryLot b on a.LotNo=b.LotNo and a.WorkPoint=b.WorkPoint
  99. left join ICSExtension c on b.ExtensionID=c.ID and b.WorkPoint=c.WorkPoint
  100. where a.InvCode='{0}' and a.WarehouseCode='{1}' and isnull(c.BatchCode,'')='{2}'";
  101. sql = string.Format(sql, InvCode, WHCode, BatchCode);
  102. //return Repository().FindTableBySql(sql.ToString());
  103. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  104. }
  105. //绑定套件
  106. public string CreateLogByKit(string Code, string Parameter)
  107. {
  108. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  109. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  110. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  111. string msg = "";
  112. string sql = string.Empty;
  113. JArray res = (JArray)JsonConvert.DeserializeObject(Parameter);
  114. string Identification = Guid.NewGuid().ToString();
  115. foreach (var item in res)
  116. {
  117. JObject jo = (JObject)item;
  118. sql += @"update ICSWareHouseLotInfo set LockQuantity='{6}' where LotNo='{2}' and WorkPoint='{9}'";
  119. sql += @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,FromWarehouseCode,FromLocationCode,
  120. ToWarehouseCode,ToLocationCode,Quantity,Memo,Lock,TransType,BusinessCode,ERPUpload,
  121. ERPID,ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  122. Values(NEWID(),'{0}','{1}','1','{2}','{3}','{4}','{5}','','','{6}','',1,'11','37',0,'','','','','{7}','{8}',getdate(),'{9}','')";
  123. sql = string.Format(sql, Identification, Code, jo["LotNo"].ToString(), jo["InvCode"].ToString(), jo["WHCode"].ToString(), jo["LocationCode"].ToString(), jo["Quantity"].ToString(), MUSER, MUSERNAME, WorkPoint);
  124. }
  125. try
  126. {
  127. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  128. {
  129. }
  130. else
  131. {
  132. msg = "绑定失败";
  133. }
  134. }
  135. catch (Exception ex)
  136. {
  137. throw new Exception(ex.Message);
  138. }
  139. return msg;
  140. }
  141. //批量生成条码
  142. public string CreateInventoryLot(string Code)
  143. {
  144. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  145. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  146. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  147. string msg = "";
  148. string sql = string.Empty;
  149. string sqls= string.Empty;
  150. string sqlLot = string.Empty;
  151. sqls = @"select DABDOCCode,Sequence,InvCode,Quantity,Amount,ExtensionID from ICSDisassemblyDoc where DABDOCType='2' and DABDOCCode='{0}'";
  152. sqls = string.Format(sqls, Code);
  153. var parent = Repository().FindTableBySql(sqls.ToString());
  154. sqlLot = string.Format(@"SELECT A.LotNO AS LOTNO FROM ICSInventoryLot A WHERE A.LotNO LIKE '{0}%'", Code);
  155. var parentLot = Repository().FindTableBySql(sqlLot.ToString());
  156. foreach (DataRow dts in parent.Rows)
  157. {
  158. string LotNo = "";
  159. string DABDOCCode = dts["DABDOCCode"].ToString();
  160. string Sequence = dts["Sequence"].ToString();
  161. var drs=parentLot.Select("LOTNO", "LOTNO DESC");
  162. if (drs.Length==0)
  163. {
  164. LotNo = DABDOCCode + Sequence + "00001";
  165. }
  166. else
  167. {
  168. var OldLotNo = drs[0]["LOTNO"].ToString();
  169. LotNo = DABDOCCode + Sequence + (Convert.ToInt64(OldLotNo.Substring(OldLotNo.Length - 5))+1).ToString().PadLeft(5,'0');
  170. }
  171. sql += @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,AmountRate,ExtensionID,Type,
  172. PrintTimes,LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,WorkPoint)
  173. Values(NEWID(),'{0}','{1}',getdate(),'2999-12-31','{2}','{3}','{4}','9','','','','{5}','{6}',getdate(),'{7}')";
  174. sql+= @"INSERT INTO ICSInventoryLotDetail( LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  175. Values('{0}','{8}','{9}','{5}','{6}',getdate(),'{7}')";
  176. sql = string.Format(sql, LotNo, dts["InvCode"].ToString(), dts["Quantity"].ToString(), dts["Amount"].ToString(), dts["ExtensionID"].ToString(), MUSER, MUSERNAME, WorkPoint, dts["DABDOCCode"].ToString(), dts["Sequence"].ToString());
  177. }
  178. try
  179. {
  180. if (SqlHelper.CmdExecuteNonQueryLi(sql.ToString()) > 0)
  181. {
  182. }
  183. else
  184. {
  185. msg = "生成失败";
  186. }
  187. }
  188. catch (Exception ex)
  189. {
  190. throw new Exception(ex.Message);
  191. }
  192. return msg;
  193. }
  194. //批量删除条码
  195. public string DeleteInventoryLot(string Code)
  196. {
  197. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  198. string msg = string.Empty;
  199. string sql = string.Format(@"select * from dbo.ICSInventoryLot a
  200. inner join dbo.ICSInventoryLotDetail b on a.LotNo=b.LotNo and a.WorkPoint=b.WorkPoint
  201. inner join dbo.ICSWareHouseLotInfo c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  202. where b.TransCode='{0}' and a.WorkPoint='{1}'", Code, WorkPoint);
  203. DataTable dtASN = SqlHelper.GetDataTableBySql(sql);
  204. if (dtASN != null && dtASN.Rows.Count > 0)
  205. {
  206. msg = "该单据下的条码已入库,无法删除!";
  207. }
  208. if (string.IsNullOrEmpty(msg))
  209. {
  210. string sqls = string.Format("delete a from ICSInventoryLot a inner join ICSInventoryLotDetail b on a.LotNo=b.LotNo and a.WorkPoint=b.WorkPoint where b.TransCode='{0}' and a.WorkPoint='{1}'", Code, WorkPoint);
  211. sqls += string.Format("delete from ICSInventoryLotDetail where TransCode='{0}' and WorkPoint='{1}'", Code, WorkPoint);
  212. SqlHelper.CmdExecuteNonQueryLi(sqls);
  213. }
  214. return msg;
  215. }
  216. }
  217. }