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.

376 lines
20 KiB

11 months ago
  1. using ICSSoft.ERPWMS.Entity;
  2. using Microsoft.Data.SqlClient;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace ICSSoft.ERPWMS.SQL
  11. {
  12. public class CreateOrDeleteASNInfo
  13. {
  14. public static Result Create(List<CreateASNEntity> entityList)
  15. {
  16. Result res = new Result();
  17. try
  18. {
  19. string jsonstr = JsonConvert.SerializeObject(entityList);
  20. Log.WriteLogFile(jsonstr, "创建删除送货单日志");
  21. StringBuilder sb = new StringBuilder();//接口返回Message
  22. foreach (CreateASNEntity entity in entityList)
  23. {
  24. SqlConnection conn = new SqlConnection(ICSHelper.ReadConfig(ICSHelper.FileNameCompanyCon)["WMS"].ToString());
  25. conn.Open();
  26. SqlTransaction sqlTran = conn.BeginTransaction();
  27. SqlCommand cmd = new SqlCommand();
  28. cmd.Transaction = sqlTran;
  29. cmd.Connection = conn;
  30. try
  31. {
  32. if (string.IsNullOrWhiteSpace(entity.ASNCode))
  33. {
  34. throw new Exception("存在送货单号为空!!!");
  35. }
  36. if (string.IsNullOrWhiteSpace(entity.ID))
  37. {
  38. throw new Exception("表头ID为空!!!");
  39. }
  40. if (string.IsNullOrWhiteSpace(entity.VenCode))
  41. {
  42. throw new Exception("供应商编码为空!!!");
  43. }
  44. if (string.IsNullOrWhiteSpace(entity.Status))
  45. {
  46. throw new Exception("状态为空!!!");
  47. }
  48. if (string.IsNullOrWhiteSpace(entity.WorkPoint))
  49. {
  50. throw new Exception("表头站点参数为空!!!");
  51. }
  52. string WorkPoint = ICSHelper.GetConnectStringTest(entity.WorkPoint);
  53. if (WorkPoint == "NotExit")
  54. {
  55. throw new Exception("表头站点编码不存在!");
  56. }
  57. //检查供应商编码是否存在
  58. string Vensql = "Select * from ICSVendor where Vencode ='{0}' and workpoint ='{1}'";
  59. Vensql = string.Format(Vensql, entity.VenCode, WorkPoint);
  60. DataTable dtVen = ICSHelper.SQlReturnData(Vensql, cmd);
  61. if (dtVen.Rows.Count < 1)
  62. {
  63. throw new Exception("供应商编码不存在!");
  64. }
  65. //查询送货单
  66. string sqlCheck = "Select ASNCode from ICSASN where workpoint='{0}' and ASNCode='{1}'";
  67. sqlCheck = string.Format(sqlCheck, WorkPoint, entity.ASNCode);
  68. DataTable dtCheck = ICSHelper.SQlReturnData(sqlCheck, cmd);
  69. if (dtCheck != null && dtCheck.Rows.Count > 0)
  70. {
  71. //检查送货单是否绑定到货单
  72. string sqlDN = "Select ASNCode from ICSDeliveryNotice Where workpoint='{0}' and ASNCode ='{1}'";
  73. sqlDN = string.Format(sqlDN, WorkPoint, entity.ASNCode);
  74. DataTable dtDN = ICSHelper.SQlReturnData(sqlDN, cmd);
  75. if (dtDN != null && dtDN.Rows.Count > 0)
  76. {
  77. throw new Exception("送货单已绑定到货单,不能删除!");
  78. }
  79. //删除送货单表头
  80. string DeleteSql = "Delete ICSASN Where workpoint='{0}' and ASNCode ='{1}';";
  81. DeleteSql = string.Format(DeleteSql, WorkPoint, entity.ASNCode);
  82. Log.WriteLogFile(DeleteSql, "创建删除送货单SQL日志");
  83. if (!ICSHelper.ExecuteNonQuery(DeleteSql, cmd))
  84. {
  85. throw new Exception("删除送货单表表头失败!");
  86. }
  87. //删除送货单表体
  88. string CheckDetailSql = "Select LotNO,workpoint from ICSASNDetail Where workpoint='{0}' and ASNCode ='{1}'";
  89. CheckDetailSql = string.Format(CheckDetailSql, WorkPoint, entity.ASNCode);
  90. DataTable dtCheckDetail = ICSHelper.SQlReturnData(CheckDetailSql, cmd);
  91. if (dtCheckDetail != null && dtCheckDetail.Rows.Count > 0)
  92. {
  93. DeleteSql = "Delete ICSASNDetail Where workpoint='{0}' and ASNCode ='{1}';";
  94. DeleteSql = string.Format(DeleteSql, WorkPoint, entity.ASNCode);
  95. Log.WriteLogFile(DeleteSql, "创建删除送货单SQL日志");
  96. if (!ICSHelper.ExecuteNonQuery(DeleteSql, cmd))
  97. {
  98. throw new Exception("删除送货单表表体失败!");
  99. }
  100. foreach (DataRow dr in dtCheckDetail.Rows)
  101. {
  102. //删除自由项表
  103. //string sqlExten = "Select ExtensionID from ICSInventoryLot where workpoint='{0}' and LotNo = '{1}'";
  104. //sqlExten = string.Format(sqlExten, WorkPoint, dr["LotNO"].ToString());
  105. //DataTable dtExtension = ICSHelper.SQlReturnData(sqlExten, cmd);
  106. //if (dtExtension != null && dtExtension.Rows.Count > 0)
  107. //{
  108. // string Extensql = "Select ID From ICSExtension where workpoint='{0}' and ID = '{1}'";
  109. // Extensql = string.Format(Extensql, WorkPoint, dtExtension.Rows[0]["ExtensionID"].ToString());
  110. // DataTable dtNew = ICSHelper.SQlReturnData(Extensql, cmd);
  111. // if (dtNew!=null&&dtNew.Rows.Count>0)
  112. // {
  113. // DeleteSql = "Delete ICSExtension where workpoint='{0}' and ID = '{1}'";
  114. // DeleteSql = string.Format(DeleteSql, WorkPoint, dtExtension.Rows[0]["ExtensionID"].ToString());
  115. // Log.WriteLogFile(DeleteSql, "创建删除送货单SQL日志");
  116. // if (!ICSHelper.ExecuteNonQuery(DeleteSql, cmd))
  117. // {
  118. // throw new Exception("删除自由项表失败!");
  119. // }
  120. // }
  121. //}
  122. //删除条码表表头
  123. DeleteSql = "Delete ICSInventoryLot where workpoint='{0}' and LotNo = '{1}'";
  124. DeleteSql = string.Format(DeleteSql, WorkPoint, dr["LotNO"].ToString());
  125. Log.WriteLogFile(DeleteSql, "创建删除送货单SQL日志");
  126. if (!ICSHelper.ExecuteNonQuery(DeleteSql, cmd))
  127. {
  128. throw new Exception("删除条码表表头失败!");
  129. }
  130. //删除条码表表体
  131. DeleteSql = "Delete ICSInventoryLotDetail where workpoint='{0}' and LotNo = '{1}'";
  132. DeleteSql = string.Format(DeleteSql, WorkPoint, dr["LotNO"].ToString());
  133. Log.WriteLogFile(DeleteSql, "创建删除送货单SQL日志");
  134. if (!ICSHelper.ExecuteNonQuery(DeleteSql, cmd))
  135. {
  136. throw new Exception("删除条码表表体失败!");
  137. }
  138. }
  139. }
  140. cmd.Transaction.Commit();
  141. }
  142. else
  143. {
  144. //if (!string.IsNullOrWhiteSpace(entity.MUSER))
  145. //{
  146. // string sqlUser = "Select F_RealName from Sys_SRM_User where f_location='{0}' and F_Account='{1}'";
  147. // sqlUser = string.Format(sqlUser, WorkPoint, entity.MUSER);
  148. // DataTable dtUser = ICSHelper.SQlReturnData(sqlUser, cmd);
  149. // if (dtUser != null && dtUser.Rows.Count > 0)
  150. // {
  151. // if (!string.IsNullOrWhiteSpace(entity.MUSERName))
  152. // {
  153. // if (dtUser.Rows[0]["F_RealName"].ToString() != entity.MUSERName)
  154. // {
  155. // throw new Exception("表头操作人编码对应的人员名称与传入人员名称不一致!");
  156. // }
  157. // else
  158. // {
  159. // entity.MUSERName = dtUser.Rows[0]["F_RealName"].ToString();
  160. // }
  161. // }
  162. // }
  163. // else
  164. // {
  165. // throw new Exception("表头操作人不存在!");
  166. // }
  167. //}
  168. //新增送货单表头
  169. string sql = "Insert into ICSASN (ID,ASNCode,VenCode,Status,MUSER,MUSERName,WorkPoint,MTIME,EATTRIBUTE1)";
  170. sql += " Values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}');";
  171. sql = string.Format(sql, entity.ID, entity.ASNCode, entity.VenCode, entity.Status, entity.MUSER, entity.MUSERName,
  172. WorkPoint, entity.MTIME, entity.EATTRIBUTE1);
  173. Log.WriteLogFile(sql, "创建删除送货单SQL日志");
  174. if (!ICSHelper.ExecuteNonQuery(sql, cmd))
  175. {
  176. throw new Exception("新增送货单表头失败!");
  177. }
  178. if (entity.list.Count > 0)
  179. {
  180. bool InserFlag = true;
  181. string sqldetail = "";
  182. int m = 1;
  183. foreach (CreateASNDetailEntity detail in entity.list)
  184. {
  185. if (string.IsNullOrWhiteSpace(detail.ASNCode))
  186. {
  187. InserFlag = false;
  188. sb.Append("存在表体送货单号为空,表头送货单号为:" + entity.ASNCode + "!!!");
  189. break;
  190. }
  191. if (detail.ASNCode != entity.ASNCode)
  192. {
  193. InserFlag = false;
  194. sb.Append("存在表体送货单与表头送货单不同,表头送货单号为:" + entity.ASNCode + ",表体送货单号为:" + detail.ASNCode + "!!!");
  195. break;
  196. }
  197. if (string.IsNullOrWhiteSpace(detail.ID))
  198. {
  199. InserFlag = false;
  200. sb.Append("表体ID为空,送货单号为:" + detail.ASNCode + "!!!");
  201. break;
  202. }
  203. //if (string.IsNullOrWhiteSpace(detail.Sequence))
  204. //{
  205. // InserFlag = false;
  206. // sb.Append("表体行号为空,送货单号为:" + detail.ASNCode + "!!!");
  207. // break;
  208. //}
  209. if (string.IsNullOrWhiteSpace(detail.LotNo))
  210. {
  211. InserFlag = false;
  212. sb.Append("表体条码为空,送货单号为:" + detail.ASNCode + "!!!");
  213. break;
  214. }
  215. if (detail.Quantity == null)
  216. {
  217. InserFlag = false;
  218. sb.Append("表体数量为空,送货单号为:" + detail.ASNCode + "!!!");
  219. break;
  220. }
  221. if (string.IsNullOrWhiteSpace(detail.WorkPoint))
  222. {
  223. InserFlag = false;
  224. sb.Append("表体站点参数为空,送货单号为:" + detail.ASNCode + "!!!");
  225. break;
  226. }
  227. string WorkPointdetail = ICSHelper.GetConnectStringTest(detail.WorkPoint);
  228. if (WorkPointdetail == "NotExit")
  229. {
  230. InserFlag = false;
  231. sb.Append("表体站点编码不存在,送货单号为:" + detail.ASNCode + "!!!");
  232. break;
  233. }
  234. //if (!string.IsNullOrWhiteSpace(detail.MUSER))
  235. //{
  236. // string sqlUser = "Select F_RealName from Sys_SRM_User where f_location='{0}' and F_Account='{1}'";
  237. // sqlUser = string.Format(sqlUser, WorkPointdetail, detail.MUSER);
  238. // DataTable dtUser = ICSHelper.SQlReturnData(sqlUser, cmd);
  239. // if (dtUser != null && dtUser.Rows.Count > 0)
  240. // {
  241. // if (!string.IsNullOrWhiteSpace(detail.MUSERName))
  242. // {
  243. // if (dtUser.Rows[0]["F_RealName"].ToString() != detail.MUSERName)
  244. // {
  245. // InserFlag = false;
  246. // sb.Append("表体操作人编码对应的人员名称与传入人员名称不一致!,送货单号为:" + detail.ASNCode + "!!!");
  247. // break;
  248. // }
  249. // else
  250. // {
  251. // detail.MUSERName = dtUser.Rows[0]["F_RealName"].ToString();
  252. // }
  253. // }
  254. // }
  255. // else
  256. // {
  257. // InserFlag = false;
  258. // sb.Append("表体操作人不存在!,送货单号为:" + detail.ASNCode + "!!!");
  259. // break;
  260. // }
  261. //}
  262. //检查条码是否存在
  263. string sqlLot = "Select Lotno from ICSInventoryLot Where workpoint='{0}' and Lotno ='{1}'";
  264. sqlLot = string.Format(sqlLot, WorkPointdetail, detail.LotNo);
  265. DataTable dtLot = ICSHelper.SQlReturnData(sqlLot, cmd);
  266. if (dtLot.Rows.Count < 1)
  267. {
  268. InserFlag = false;
  269. sb.Append("表体条码不存在,送货单号为:" + detail.ASNCode + ",条码为:" + detail.LotNo + "!!!");
  270. break;
  271. }
  272. //新增送货单表体
  273. sqldetail += " Insert into ICSASNDetail (ID,ASNCode,Sequence,LotNo,Quantity,Amount,DNQuantity,DNAmount,MUSER,MUSERName,WorkPoint,MTIME)";
  274. sqldetail += " Values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')";
  275. sqldetail = string.Format(sqldetail, detail.ID, detail.ASNCode, m, detail.LotNo, detail.Quantity, detail.Amount, detail.DNQuantity,
  276. detail.DNAmount, detail.MUSER, detail.MUSERName, WorkPointdetail, detail.MTIME);
  277. m++;
  278. }
  279. if (InserFlag)
  280. {
  281. Log.WriteLogFile(sqldetail, "创建删除送货单SQL日志");
  282. if (!ICSHelper.ExecuteNonQuery(sqldetail, cmd))
  283. {
  284. throw new Exception("新增送货单表体失败!");
  285. }
  286. cmd.Transaction.Commit();
  287. }
  288. else
  289. {
  290. cmd.Transaction.Rollback();
  291. }
  292. }
  293. else
  294. {
  295. cmd.Transaction.Rollback();
  296. sb.Append("表体为空,表头送货单号为:" + entity.ASNCode + "!!!");
  297. continue;
  298. }
  299. }
  300. }
  301. catch (Exception ex)
  302. {
  303. cmd.Transaction.Rollback();
  304. sb.Append("执行报错,送货单号为:" + entity.ASNCode + ",报错信息:" + ex.Message + "!!!");
  305. continue;
  306. }
  307. finally
  308. {
  309. if (conn.State == ConnectionState.Open)
  310. {
  311. conn.Close();
  312. }
  313. conn.Dispose();
  314. }
  315. }
  316. if (sb.Length > 0)
  317. {
  318. res.IsSuccess = false;
  319. res.Message = sb.ToString();
  320. }
  321. else
  322. {
  323. res.IsSuccess = true;
  324. res.Message = "执行成功!";
  325. }
  326. return res;
  327. }
  328. catch (Exception ex)
  329. {
  330. res.IsSuccess = false;
  331. res.Message = ex.Message;
  332. return res;
  333. }
  334. }
  335. }
  336. }