圣珀
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.

246 lines
13 KiB

2 years ago
  1. using ICS.WCF.Base;
  2. using ICSSoft.Entity;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Linq;
  8. using System.Text;
  9. namespace ICS.LotNoInfoGet
  10. {
  11. public class GetLotNoInfo
  12. {
  13. /// <summary>
  14. /// 获取物料条码信息生成条码
  15. /// </summary>
  16. public FormICSCreatedArrivalNoticeModel CustGetLotNoInfo(List<LotNoValues> lstl)
  17. {
  18. FormICSCreatedArrivalNoticeModel result = new FormICSCreatedArrivalNoticeModel();
  19. using (SqlConnection conn = new SqlConnection(Appconfig.GetMESStr()))
  20. {
  21. conn.Open();
  22. using (SqlTransaction trans = conn.BeginTransaction())
  23. {
  24. try
  25. {
  26. string sql = "";
  27. int flag = 0;
  28. SqlCommand cmd = new SqlCommand();
  29. cmd.Connection = conn;
  30. cmd.Transaction = trans;
  31. StringBuilder str = new StringBuilder();
  32. foreach (LotNoValues l in lstl)
  33. {
  34. string chksql = @"select * from ICSItemLot where LotNo='{0}' AND WorkPoint='{1}'";
  35. chksql = string.Format(chksql, l.LotNo, l.WorkPoint);
  36. DataTable chkdt = SQlReturnData(chksql, cmd);
  37. if (chkdt.Rows.Count != 0)
  38. {
  39. str.AppendLine("传入条码:" + l.LotNo + "已存在");
  40. continue;
  41. }
  42. if (l.LotType == 0)
  43. {
  44. foreach (POInfo poinfo in l.PoInfoList)
  45. {
  46. chksql = @"select * from ICSPO_PoMain
  47. where POCode='{0}' AND PORow='{1}'";
  48. chksql = string.Format(chksql, poinfo.POCode, poinfo.PORow);
  49. chkdt = SQlReturnData(chksql, cmd);
  50. if (chkdt.Rows.Count == 0)
  51. {
  52. throw new Exception("传入采购订单号:" + poinfo.POCode + ",行号:" + poinfo.PORow + "不存在,无法创建条码!");
  53. }
  54. }
  55. sql = @"INSERT INTO ICSITEMLot
  56. ( ID ,LotNO ,ItemCODE ,TransNO ,TransLine ,VENDORITEMCODE ,VENDORCODE ,
  57. VenderLotNO ,PRODUCTDATE ,LOTQTY ,ACTIVE ,Exdate ,WorkPoint ,
  58. MUSER ,MUSERName ,MTIME ,TYPE,ORDERNO)
  59. SELECT NEWID(),'" + l.LotNo + "',InvCode,'','','',VenCode,'" + l.VendorLot + "',GETDATE(),'" +
  60. l.LOTQTY + "','Y','2999-12-31 00:00:00.000','" + l.WorkPoint + "','" +
  61. l.MUSER + "','" + l.MUSERNAME + @"',GETDATE(),'采购原料',ORDERNO
  62. FROM dbo.ICSPO_PoMain WHERE POCode='" + l.PoInfoList[0].POCode + "' AND PORow='"
  63. + l.PoInfoList[0].PORow + "' AND WorkPoint='" + l.WorkPoint + "'";
  64. cmd.CommandText = sql;
  65. flag = cmd.ExecuteNonQuery();
  66. StringBuilder resultlog = new StringBuilder();
  67. if (flag <= 0)
  68. {
  69. resultlog.AppendLine("生成物料条码失败");
  70. resultlog.AppendLine("查询sql:" + sql);
  71. Appconfig.WriteLogFile(resultlog.ToString(), "获取生成条码接口日志");
  72. throw new Exception("生成条码失败");
  73. }
  74. foreach (POInfo p in l.PoInfoList)
  75. {
  76. sql = @"INSERT INTO ICSLot2Doc (ID,LotNO,DocType,TransNO,TransLine,LinkQty,MTIME,MUSER,MUSERNAME,WorkPoint)
  77. select NEWID(),LotNO,'','" + p.POCode + "','" + p.PORow +
  78. "'," + p.LinkQty + ",MTIME,MUSER,MUSERName,WorkPoint from ICSITEMLot where LotNO='" + l.LotNo + "' ";
  79. cmd.CommandText = sql;
  80. flag = cmd.ExecuteNonQuery();
  81. if (flag <= 0)
  82. {
  83. resultlog.AppendLine("物料内箱信息添加失败");
  84. resultlog.AppendLine("查询sql:" + sql);
  85. Appconfig.WriteLogFile(resultlog.ToString(), "获取生成条码接口日志");
  86. throw new Exception("物料内箱信息添加失败");
  87. }
  88. }
  89. }
  90. else if (l.LotType == 1)
  91. {
  92. string WHID = "";
  93. string StackID = "";
  94. string BinCode = fenge(l.BinCode);
  95. if (!string.IsNullOrWhiteSpace(l.WHCode) && !string.IsNullOrWhiteSpace(BinCode))
  96. {
  97. chksql = @"select Serial from ICSStorage
  98. WHERE StorageCode='{0}' and WorkPoint='{1}'";
  99. chksql = string.Format(chksql, l.WHCode, l.WorkPoint);
  100. chkdt = SQlReturnData(chksql, cmd);
  101. if (chkdt.Rows.Count == 0)
  102. {
  103. throw new Exception("传入仓库:" + l.WHCode + "不存在,无法创建条码!");
  104. }
  105. else
  106. {
  107. WHID = chkdt.Rows[0]["Serial"].ToString();
  108. }
  109. chksql = @"select Serial from ICSStack
  110. WHERE StackCode = '{0}' and Storage_Serial='{1}' and WorkPoint='{2}'";
  111. chksql = string.Format(chksql, BinCode, WHID, l.WorkPoint);
  112. chkdt = SQlReturnData(chksql, cmd);
  113. if (chkdt.Rows.Count == 0)
  114. {
  115. str.AppendLine("传入库位:" + BinCode + "不存在!");
  116. continue;
  117. }
  118. else
  119. {
  120. StackID = chkdt.Rows[0]["Serial"].ToString();
  121. }
  122. }
  123. sql = @"insert into ICSWareHouseLotInfo
  124. Values
  125. (NEWID(),'" + l.LotNo + "','" + WHID + "','" + l.WHCode + "','" + StackID + "','"
  126. + BinCode + "','1002107293539020','1250020051' ,'" + l.LOTQTY + "',GETDATE(),'" + l.WorkPoint + "','" + l.MUSER + "','"
  127. + l.MUSERNAME + "',GETDATE(),'期初',null,0,'')";
  128. cmd.CommandText = sql;
  129. flag = cmd.ExecuteNonQuery();
  130. StringBuilder resultlog = new StringBuilder();
  131. if (flag <= 0)
  132. {
  133. throw new Exception("生成库存失败");
  134. }
  135. sql = @"INSERT INTO ICSITEMLot
  136. ( ID ,LotNO ,ItemCODE ,TransNO ,TransLine ,VENDORITEMCODE ,VENDORCODE ,
  137. VenderLotNO ,PRODUCTDATE ,LOTQTY ,ACTIVE ,Exdate ,WorkPoint ,
  138. MUSER ,MUSERName ,MTIME ,EATTRIBUTE1,TYPE,ORDERNO)
  139. values (NEWID(),'" + l.LotNo + "','1250020051','','','','','" + l.VendorLot + "',GETDATE(),'" +
  140. l.LOTQTY + "','Y','2999-12-31 00:00:00.000','" + l.WorkPoint + "','" +
  141. l.MUSER + "','" + l.MUSERNAME + @"',GETDATE(),'期初','原材料','')";
  142. cmd.CommandText = sql;
  143. flag = cmd.ExecuteNonQuery();
  144. resultlog = new StringBuilder();
  145. if (flag <= 0)
  146. {
  147. throw new Exception("生成条码失败");
  148. }
  149. if (l.PoInfoList != null && l.PoInfoList.Count > 0)
  150. {
  151. foreach (POInfo p in l.PoInfoList)
  152. {
  153. sql = @"INSERT INTO ICSLot2Doc (ID,LotNO,DocType,TransNO,TransLine,LinkQty,MTIME,MUSER,MUSERNAME,WorkPoint)
  154. select NEWID(),LotNO,'','" + p.POCode + "','" + p.PORow +
  155. "'," + p.LinkQty + ",MTIME,MUSER,MUSERName,WorkPoint from ICSITEMLot where LotNO='" + l.LotNo + "' ";
  156. cmd.CommandText = sql;
  157. flag = cmd.ExecuteNonQuery();
  158. if (flag <= 0)
  159. {
  160. throw new Exception("物料内箱信息添加失败");
  161. }
  162. }
  163. }
  164. }
  165. else
  166. {
  167. throw new Exception("传入数据错误");
  168. }
  169. }
  170. trans.Commit();
  171. Appconfig.WriteLogFile(str.ToString(), "获取生成条码接口日志(无效数据)");
  172. result.Code = 0;
  173. result.ResMsg = "物料条码生成成功";
  174. result.ResData = "{}";
  175. result.IsCompress = false;
  176. result.IsSuccess = true;
  177. }
  178. catch (Exception ex)
  179. {
  180. StringBuilder str = new StringBuilder();
  181. result.Code = -1;
  182. result.ResMsg = ex.Message;
  183. result.ResData = "{}";
  184. result.IsCompress = false;
  185. result.IsSuccess = true;
  186. str.AppendLine("物料信息获取失败");
  187. str.AppendLine("失败原因:" + ex.Message);
  188. Appconfig.WriteLogFile(str.ToString(), "获取生成条码接口日志");
  189. trans.Rollback();
  190. }
  191. }
  192. conn.Close();
  193. }
  194. return result;
  195. }
  196. //库位转换
  197. public string fenge(string sourceString)
  198. {
  199. StringBuilder sb = new StringBuilder();
  200. for (int i = 0; i < sourceString.Length; i++)
  201. {
  202. if (i == 0 || i == 3)
  203. {
  204. sb.Append(sourceString[i].ToString()).Append("-");
  205. }
  206. else
  207. {
  208. sb.Append(sourceString[i]);
  209. }
  210. }
  211. return sb.ToString();
  212. }
  213. /// <summary>
  214. /// 送货单返回值
  215. /// </summary>
  216. public class FormICSCreatedArrivalNoticeModel
  217. {
  218. //0 :正常数据,-1:失败。
  219. public int Code { get; set; }
  220. public string ResMsg { get; set; }
  221. public Object ResData { get; set; }
  222. public bool IsCompress { get; set; }
  223. public bool IsSuccess { get; set; }
  224. }
  225. /// <summary>
  226. /// SQL执行方法
  227. /// </summary>
  228. /// <param name="SQl"></param>
  229. /// <param name="cmd"></param>
  230. /// <returns></returns>
  231. public static DataTable SQlReturnData(string SQl, SqlCommand cmd)
  232. {
  233. DataTable dt = new DataTable();
  234. cmd.CommandText = SQl;
  235. SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
  236. dr.SelectCommand = cmd;
  237. dr.Fill(dt);
  238. return dt;
  239. }
  240. }
  241. }