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.

620 lines
26 KiB

3 weeks ago
  1. 
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using NFine.Code;
  5. using NFine.Data.Extensions;
  6. using NFine.Domain._03_Entity.SRM;
  7. using NFine.Repository;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Configuration;
  11. using System.Data;
  12. using System.Data.Common;
  13. using System.Diagnostics;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Net;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. namespace NFine.Application.KBSWMS
  20. {
  21. public class ICSUpdateMoPickApp : RepositoryFactory<ICSVendor>
  22. {
  23. public DataTable GetICSMOPickInfo(string queryJson, ref Pagination jqgridparam)
  24. {
  25. DataTable dt = new DataTable();
  26. var queryParam = queryJson.ToJObject();
  27. List<DbParameter> parameter = new List<DbParameter>();
  28. string sql = @" select b.ID,a.MOCode,b.Sequence,b.InvCode,c.InvName,b.Quantity,b.IssueQuantity from dbo.ICSMO a
  29. left join dbo.ICSMOPick b on a.MODetailID=b.MODetailID and a.WorkPoint=b.WorkPoint
  30. left join dbo.ICSInventory c on b.InvCode=c.InvCode and b.WorkPoint=c.WorkPoint
  31. where a.MOCode='" + queryParam["Code"].ToString() + "'";
  32. //if (!string.IsNullOrWhiteSpace(queryJson))
  33. //{
  34. // if (!string.IsNullOrWhiteSpace(queryParam["Code"].ToString()))
  35. // {
  36. // sql += " and a.ApplyNegCode like '%" + queryParam["Code"].ToString() + "%' ";
  37. // }
  38. //}
  39. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  40. }
  41. public string UpdateMopickInfoByCode(string Code)
  42. {
  43. string msg = "";
  44. try
  45. {
  46. //检验输入的工单号是否存在
  47. string sqlSeach = @"select * from dbo.ICSMO where MOCode='" + Code + "'";
  48. DataTable dtMoInfo = SqlHelper.GetDataTableBySql(sqlSeach);
  49. if (dtMoInfo == null )
  50. {
  51. throw new Exception("所输入的工单号未查询到相关单据信息!");
  52. }
  53. //调用同步方法更新子件数据
  54. msg= ExecuteMoPick(Code);
  55. }
  56. catch (Exception ex)
  57. {
  58. msg=ex.Message;
  59. }
  60. return msg;
  61. }
  62. public string ExecuteMoPick(string Code)
  63. {
  64. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  65. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  66. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  67. string msg=string.Empty;
  68. string sqlSeachMopickInfo = @"select b.PickID from dbo.ICSMO a
  69. left join dbo.ICSMOPick b on a.MODetailID=b.MODetailID and a.WorkPoint=b.WorkPoint
  70. where a.MOCode='" + Code + "'";
  71. DataTable dtMoPickInfo = SqlHelper.GetDataTableBySql(sqlSeachMopickInfo);
  72. string ERPUrl = ConfigurationManager.ConnectionStrings["MopickERPMUrl"].ConnectionString;
  73. string Namespace = this.GetType().Namespace;
  74. string Class = this.GetType().Name + WorkPoint;
  75. StringBuilder sql = new StringBuilder();
  76. QueryModel input = new QueryModel();
  77. input.time = "2000-01-01";
  78. input.pageSize = 2000;
  79. input.workorder = Code;
  80. //获取token
  81. string token = GetToken.GetTokenInfermation();
  82. string Inputstr = JsonConvert.SerializeObject(input);
  83. string resultStr = HTTPHelper.HttpPost("生产备料", ERPUrl + "KBS_erp_wms_sfq", Inputstr, token);
  84. ResultModel result = new ResultModel();
  85. result = JsonConvert.DeserializeObject<ResultModel>(resultStr);
  86. if (result.success && result.count > 0)
  87. {
  88. try
  89. {
  90. string extensionID = string.Empty;
  91. //获取ICSExtensionID
  92. string IDString = $@"SELECT ID from ICSExtension WHERE WorkPoint='{WorkPoint}' AND Colspan='~~~~~~~~~~~~~'";
  93. var IDdt = SqlHelper.ExecuteTable(IDString);
  94. if (IDdt.Rows.Count > 0)
  95. {
  96. extensionID = IDdt.Rows[0]["ID"].ToString();
  97. }
  98. else
  99. {
  100. extensionID = SqlHelper.GetNewid();
  101. Dictionary<string, string> extensionvalue = new Dictionary<string, string>
  102. {
  103. { "ID", $"'{extensionID}'" },
  104. { "BatchCode", "''" },
  105. { "version", "''" },
  106. { "Brand", "''" },
  107. { "ProjectCode", "''" },
  108. { "cFree1", "''" },
  109. { "cFree2", "''" },
  110. { "cFree3", "''" },
  111. { "cFree4", "''" },
  112. { "cFree5", "''" },
  113. { "cFree6", "''" },
  114. { "cFree7", "''" },
  115. { "cFree8", "''" },
  116. { "cFree9", "''" },
  117. { "cFree10", "''" },
  118. { "Colspan", "'" + "~~~~~~~~~~~~~" + "'" },
  119. { "MTIME", "GETDATE()" },
  120. { "MUSER", "'" + MUSER + "'" },
  121. { "MUSERName", "'" + MUSERNAME + "'" },
  122. { "WorkPoint", "'" + WorkPoint + "'" }
  123. };
  124. sql.Append(SqlHelper.InsertSQLKingDeeEx("ICSExtension", extensionvalue, WorkPoint));
  125. }
  126. var res = (List<SFAModel>)JsonConvert.DeserializeObject(result.data.list.ToString(), typeof(List<SFAModel>));
  127. var sw1 = new Stopwatch();
  128. sw1.Start();
  129. //获取数据库的委外备料子件数据
  130. string moPickString = $@"SELECT max(Cast(Sequence as int)) as Sequence, MODetailID,WorkPoint from ICSMOPick
  131. GROUP BY MODetailID,WorkPoint";
  132. var moPickdt = SqlHelper.ExecuteTable( moPickString);
  133. //自由项
  134. Dictionary<string, string> value = new Dictionary<string, string>();
  135. var groups = res.GroupBy(o => o.SFB01).ToList();
  136. sw1.Stop();
  137. // Debug.WriteLine("查询时间" + sw1.Elapsed.TotalSeconds);
  138. var sw = new Stopwatch();
  139. sw.Restart();
  140. foreach (var item in groups)
  141. {
  142. var data = item.OrderBy(o => o.RNUM).ToList();
  143. for (int idx = 0; idx < data.Count; idx++)
  144. {
  145. //处理查询到的工单子件信息
  146. string currentPickID = $"{data[idx].SFB01}~1~{data[idx].SFA27}";
  147. for (int i = dtMoPickInfo.Rows.Count - 1; i >= 0; i--)
  148. {
  149. if (dtMoPickInfo.Rows[i]["PickID"].ToString() == currentPickID)
  150. {
  151. dtMoPickInfo.Rows.RemoveAt(i);
  152. break;
  153. }
  154. }
  155. Dictionary<string, string> values = new Dictionary<string, string>();
  156. //委外备料
  157. var MODetailID = $"'{data[idx].SFB01}~1'";
  158. //查询数据库中有没有备料信息,获取行号信息
  159. var Seqence = 0;
  160. if (moPickdt != null && moPickdt.Rows.Count > 0)
  161. {
  162. var tmp = moPickdt.Select($"MODetailID = {MODetailID} and WorkPoint = '{data[idx].LEGAL}'");
  163. if (tmp.Length > 0)
  164. {
  165. Seqence = int.Parse(tmp[0]["Sequence"].ToString()) + idx + 1;
  166. }
  167. else
  168. {
  169. Seqence = idx + 1;
  170. }
  171. }
  172. else
  173. {
  174. Seqence = idx + 1;
  175. }
  176. values.Add("Sequence", $"'{Seqence}'");
  177. values.Add("MODetailID", MODetailID);
  178. values.Add("PickID", $"'{data[idx].SFB01}~1~{data[idx].SFA27}'");
  179. values.Add("InvCode", $"'{data[idx].SFA27}'");
  180. values.Add("Quantity", $"(SELECT ISnull((SELECT top 1 InvRate FROM ICSInventory WHERE InvCode='{data[idx].SFA27}' AND workPoint='{data[idx].LEGAL}'),1)* {data[idx].SFA05})");
  181. values.Add("ParentQuantity", "'0'");
  182. values.Add("ParentAmount", "'0'");
  183. values.Add("Amount", $"'{data[idx].SFA05}'");
  184. values.Add("WHCode", "''");
  185. values.Add("SupplyType", "'3'");
  186. values.Add("ExtensionID", $"'{extensionID}'");
  187. values.Add("MTIME", $"'{data[idx].SFBDATE}'");
  188. values.Add("WorkPoint", $"'{data[idx].LEGAL}'");
  189. values.Add("ID", "NEWID()");
  190. //values.Add("IssueQuantity", $" CASE WHEN IssueQuantity>0 THEN IssueQuantity ELSE (SELECT ISnull((SELECT top 1 InvRate FROM ICSInventory WHERE InvCode='{data[idx].SFA27}' AND workPoint='{data[idx].LEGAL}'),1)* {data[idx].SFA06}) END");
  191. values.Add("IssueQuantity", $" (SELECT ISnull((SELECT top 1 InvRate FROM ICSInventory WHERE InvCode='{data[idx].SFA27}' AND workPoint='{data[idx].LEGAL}'),1)* {data[idx].SFA06})");
  192. values.Add("MUSER", $"'{data[idx].SFBMODU}'");
  193. values.Add("MUSERName", $"'{data[idx].GEN02}'");
  194. values.Add("EATTRIBUTE1", $"'0'");
  195. sql.Append(SqlHelper.InsertSQLKingDee("ICSMOPick", values, $"MODetailID = {MODetailID} and InvCode= '{data[idx].SFA27}' and WorkPoint='{data[idx].LEGAL}' "));
  196. }
  197. }
  198. // 构建删除 SQL 语句
  199. if (dtMoPickInfo.Rows.Count > 0)
  200. {
  201. StringBuilder deleteSql = new StringBuilder();
  202. deleteSql.Append("DELETE FROM ICSMOPick WHERE PickID IN (");
  203. for (int i = 0; i < dtMoPickInfo.Rows.Count; i++)
  204. {
  205. if (i > 0)
  206. {
  207. deleteSql.Append(",");
  208. }
  209. deleteSql.Append($"'{dtMoPickInfo.Rows[i]["PickID"]}'");
  210. }
  211. deleteSql.Append(")");
  212. SqlHelper.ExecuteDate(deleteSql.ToString());
  213. }
  214. SqlHelper.ExecuteDate( $"{sql}");
  215. sql = new StringBuilder();
  216. sw.Stop();
  217. }
  218. catch (Exception ex)
  219. {
  220. msg = ex.Message;
  221. }
  222. }
  223. return msg;
  224. }
  225. public string UpdateMoInfoByCode(string Code)
  226. {
  227. string msg = "";
  228. try
  229. {
  230. //检验输入的工单号是否存在
  231. string sqlSeach = @"select * from dbo.ICSMO where MOCode='" + Code + "'";
  232. DataTable dtMoInfo = SqlHelper.GetDataTableBySql(sqlSeach);
  233. if (dtMoInfo == null)
  234. {
  235. throw new Exception("所输入的工单号未查询到相关单据信息!");
  236. }
  237. //调用同步方法更新工单数据
  238. msg = ExecuteMo(Code);
  239. }
  240. catch (Exception ex)
  241. {
  242. msg = ex.Message;
  243. }
  244. return msg;
  245. }
  246. public string ExecuteMo(string Code)
  247. {
  248. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  249. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  250. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  251. string ERPUrl = ConfigurationManager.ConnectionStrings["MopickERPMUrl"].ConnectionString;
  252. string msg = string.Empty;
  253. string Namespace = this.GetType().Namespace;
  254. string Class = this.GetType().Name + WorkPoint;
  255. StringBuilder sql = new StringBuilder();
  256. QueryModel input = new QueryModel();
  257. input.time = "2000-01-01";
  258. input.workorder = Code;
  259. //获取token
  260. string token = GetToken.GetTokenInfermation();
  261. string Inputstr = JsonConvert.SerializeObject(input);
  262. string resultStr = HTTPHelper.HttpPost("生产订单", ERPUrl + "KBS_erp_wms_sfb", Inputstr, token);
  263. ResultModel result = new ResultModel();
  264. result = JsonConvert.DeserializeObject<ResultModel>(resultStr);
  265. if (result.success && result.count > 0)
  266. {
  267. try
  268. {
  269. JArray res = (JArray)JsonConvert.DeserializeObject(result.data.list.ToString());
  270. var sw = new Stopwatch();
  271. sw.Start();
  272. //自由项
  273. Dictionary<string, string> value = new Dictionary<string, string>();
  274. value.Add("ID", "newid()");
  275. value.Add("BatchCode", "''");
  276. value.Add("version", "''");
  277. value.Add("Brand", "''");
  278. value.Add("ProjectCode", "''");
  279. value.Add("cFree1", "''");
  280. value.Add("cFree2", "''");
  281. value.Add("cFree3", "''");
  282. value.Add("cFree4", "''");
  283. value.Add("cFree5", "''");
  284. value.Add("cFree6", "''");
  285. value.Add("cFree7", "''");
  286. value.Add("cFree8", "''");
  287. value.Add("cFree9", "''");
  288. value.Add("cFree10", "''");
  289. value.Add("Colspan", "'" + "~~~~~~~~~~~~~" + "'");
  290. value.Add("MTIME", "GETDATE()");
  291. value.Add("MUSER", "'" + MUSER + "'");
  292. value.Add("MUSERName", "'" + MUSERNAME + "'");
  293. value.Add("WorkPoint", "'" + WorkPoint + "'");
  294. sql.Append(SqlHelper.InsertSQLKingDeeEx("ICSExtension", value,WorkPoint));
  295. int i = 1;
  296. foreach (var item in res)
  297. {
  298. JObject det = (JObject)item;
  299. if (i % 1000 == 0)
  300. {
  301. SqlHelper.ExecuteDate( $"{sql}");
  302. sql = new StringBuilder();
  303. }
  304. //采购订单
  305. Dictionary<string, string> values = new Dictionary<string, string>();
  306. values.Add("MOCODE", "'" + det["SFB01"].ToString().Trim() + "'");//工单号
  307. values.Add("Sequence", "'1'");//行号(鼎捷不返回)
  308. values.Add("InvCode", "'" + det["SFB05"].ToString().Trim() + "'");//物料代码
  309. values.Add("Quantity", "'" + det["SFB08"].ToString().Trim() + "'");//数量
  310. values.Add("Amount", "'0'");//辅计量
  311. values.Add("DepCode", "'" + det["SFB82"].ToString().Trim() + "'");//部门代码
  312. values.Add("WHCode", "'" + det["SFB30"].ToString().Trim() + "'");//仓库代码
  313. values.Add("StartDate", "'" + det["SFB25"].ToString().Trim() + "'");//开工日期
  314. values.Add("DueDate", "'" + det["SFB18"].ToString().Trim() + "'");//完工日期
  315. values.Add("MOSTATUS", "'1'");//工单状态
  316. values.Add("MOMemo", "''");//备注
  317. values.Add("CreatePerson", "'" + det["SFBORIU"].ToString() + "'");//创建人
  318. values.Add("CreateDateTime", "'" + det["SFB81"].ToString().Trim() + "'");//创建时间
  319. values.Add("ERPStatus", "'2'");//生产订单状态(???怎么判断的)
  320. values.Add("MOID", $"'{det["SFB01"]}'");
  321. values.Add("MODetailID", $"'{det["SFB01"]}~1'");
  322. values.Add("ExtensionID", $"(select id from ICSExtension where Colspan = '~~~~~~~~~~~~~' and WorkPoint = '{det["LEGAL"]}') ");//自由项需要最后update
  323. values.Add("ID", "newid()");
  324. values.Add("MUSER", "'" + det["SFBMODU"].ToString().Trim() + "'");
  325. values.Add("MUSERName", "'" + det["GEN02"].ToString().Trim() + "'");
  326. values.Add("WorkPoint", "'" + det["LEGAL"].ToString().Trim() + "'");
  327. values.Add("MTIME", "'" + det["SFBDATE"].ToString().Trim() + "'");
  328. sql.Append(SqlHelper.InsertSQLKingDee("ICSMO", values, "MOCODE ='" + det["SFB01"].ToString().Trim() + $"' and MODetailID='{det["SFB01"]}~{1}' and WorkPoint='{det["LEGAL"]}'"));
  329. i++;
  330. }
  331. SqlHelper.ExecuteDate($"{sql}");
  332. sw.Stop();
  333. }
  334. catch (Exception ex)
  335. {
  336. msg = ex.Message;
  337. }
  338. }
  339. return msg;
  340. }
  341. /// <summary>
  342. /// 查询接口Model
  343. /// </summary>
  344. public class QueryModel
  345. {
  346. /// <summary>
  347. /// 时间
  348. /// </summary>
  349. public string time { get; set; }
  350. /// <summary>
  351. /// 页码
  352. /// </summary>
  353. public int pageIndex { get; set; } = 1;
  354. /// <summary>
  355. /// 页数
  356. /// </summary>
  357. public int pageSize { get; set; } = int.MaxValue;
  358. public string workorder { get; set; }
  359. }
  360. public class TokenModel
  361. {
  362. public string token { get; set; }
  363. }
  364. public class ResultModel
  365. {
  366. public bool success { get; set; }
  367. public string message { get; set; }
  368. public int code { get; set; }
  369. public int count { get; set; }
  370. public DateTime? maxTime { get; set; }
  371. public DataList data { get; set; }
  372. }
  373. public class DataList
  374. {
  375. public object count { get; set; }
  376. public object list { get; set; }
  377. }
  378. public class SFAModel
  379. {
  380. /// <summary>
  381. ///
  382. /// </summary>
  383. public string SFB01 { get; set; }
  384. /// <summary>
  385. ///
  386. /// </summary>
  387. public string SFA27 { get; set; }
  388. /// <summary>
  389. ///
  390. /// </summary>
  391. public decimal SFA05 { get; set; }
  392. /// <summary>
  393. ///
  394. /// </summary>
  395. public decimal SFA06 { get; set; }
  396. /// <summary>
  397. ///
  398. /// </summary>
  399. public string SFBMODU { get; set; }
  400. /// <summary>
  401. /// 李晓粉
  402. /// </summary>
  403. public string GEN02 { get; set; }
  404. /// <summary>
  405. ///
  406. /// </summary>
  407. public DateTime SFBDATE { get; set; }
  408. /// <summary>
  409. ///
  410. /// </summary>
  411. public string LEGAL { get; set; }
  412. /// <summary>
  413. ///
  414. /// </summary>
  415. public int RNUM { get; set; }
  416. }
  417. public class GetToken
  418. {
  419. // private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  420. public static string GetTokenInfermation()
  421. {
  422. try
  423. {
  424. string resultStr = HTTPHelper.QueryPostparamsService("获取token", $@"https://weapp.lexy.cn/lexyapi/getToken?ent_id=qy202307311690791200&ent_secret=66cc4211eaa37f79f3608353e4e28c36");
  425. var tokenString = JsonConvert.DeserializeObject<TokenModel>(resultStr);
  426. if (string.IsNullOrEmpty(tokenString.token))
  427. {
  428. throw new Exception("获取token失败");
  429. }
  430. return tokenString.token;
  431. }
  432. catch (System.Net.WebException ex)
  433. {
  434. throw new Exception(ex.Message);
  435. }
  436. }
  437. }
  438. public class HTTPHelper
  439. {
  440. // private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  441. public static string HttpPost(string apiName, string url, string body)
  442. {
  443. try
  444. {
  445. //log.Debug(url + Environment.NewLine + body);
  446. Encoding encoding = Encoding.UTF8;
  447. System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
  448. request.Method = "POST";
  449. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  450. request.ContentType = "application/json; charset=utf-8";
  451. // request.ContentType = "text/html, application/xhtml+xml";
  452. byte[] buffer = encoding.GetBytes(body);
  453. request.ContentLength = buffer.Length;
  454. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  455. System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
  456. using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
  457. {
  458. return reader.ReadToEnd();
  459. }
  460. }
  461. catch (System.Net.WebException ex)
  462. {
  463. // log.Error(ex.ToString() + Environment.NewLine + url + Environment.NewLine + body);
  464. throw new Exception(apiName + "调用失败," + ex.Message);
  465. }
  466. }
  467. public static string HttpPost(string apiName, string url, string body, string headers = "")
  468. {
  469. try
  470. {
  471. //log.Debug(url + Environment.NewLine + body);
  472. Encoding encoding = Encoding.UTF8;
  473. System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
  474. request.Method = "POST";
  475. request.Headers.Add("token", headers);
  476. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  477. request.ContentType = "application/json; charset=utf-8";
  478. // request.ContentType = "text/html, application/xhtml+xml";
  479. byte[] buffer = encoding.GetBytes(body);
  480. request.ContentLength = buffer.Length;
  481. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  482. System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
  483. using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
  484. {
  485. return reader.ReadToEnd();
  486. }
  487. }
  488. catch (System.Net.WebException ex)
  489. {
  490. // log.Error(ex.ToString() + Environment.NewLine + url + Environment.NewLine + body);
  491. throw new Exception(apiName + "调用失败," + ex.Message);
  492. }
  493. }
  494. public static string QueryPostparamsService(string apiName, string url)
  495. {
  496. string result = "";
  497. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  498. req.Method = "Get";
  499. //req.Headers.Add()
  500. try
  501. {
  502. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  503. Stream stream = resp.GetResponseStream();
  504. //获取内容
  505. using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
  506. {
  507. result = reader.ReadToEnd();
  508. }
  509. }
  510. catch (Exception ex)
  511. {
  512. // log.Error(ex.ToString() + Environment.NewLine + url + Environment.NewLine);
  513. throw new Exception(apiName + "调用失败," + ex.Message);
  514. }
  515. return result;
  516. }
  517. }
  518. }
  519. }