Lot3Controller.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. using EInk.Dtos;
  2. using EInk.Models;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Newtonsoft.Json;
  5. using SqlSugar;
  6. using System;
  7. using System.ComponentModel;
  8. using System.Xml.Linq;
  9. using System;
  10. using System.Threading;
  11. using System.Text;
  12. using EInk.Dtos;
  13. using System.Reflection.Metadata;
  14. using Microsoft.AspNetCore.Mvc.Rendering;
  15. using EInk.Tools;
  16. using EInk.Lot2Lot3.Models;
  17. using Microsoft.Extensions.DependencyInjection;
  18. using Microsoft.Extensions.Options;
  19. using System.Reflection;
  20. namespace EInk.Controllers
  21. {
  22. [Route("api/[controller]")]
  23. [ApiController]
  24. public class Lot3Controller : ControllerBase
  25. {
  26. private readonly ISqlSugarClient _db;
  27. private readonly IConfiguration _configuration;
  28. private readonly AppearancePixelEquivalent _appearancepixelequivalent;
  29. private readonly List<string> _Lot3AppearancePatternList;
  30. public Lot3Controller(ISqlSugarClient db)
  31. {
  32. _db = db;
  33. _configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
  34. _appearancepixelequivalent = _configuration.GetSection("AppearancePixelEquivalent").Get<AppearancePixelEquivalent>();
  35. _Lot3AppearancePatternList = _configuration.GetValue<string>("Lot3AppearancePatternList").Split(",").ToList();
  36. }
  37. [HttpPost("UploadLot3")]
  38. public IActionResult Lot3Data([FromBody] Lot3Dto lot3Data)
  39. {
  40. string jsonStr = JsonConvert.SerializeObject(lot3Data);
  41. try
  42. {
  43. LogerHelper.RecordLogTxt($"UploadLot3, Data:{jsonStr}");
  44. try
  45. {
  46. lot3Data.Valid();
  47. }
  48. catch (Exception ex)
  49. {
  50. LogerHelper.RecordLogTxt($"UploadLot3, Valid Fail, Data:{jsonStr}, Message:{ex.Message}");
  51. return Ok(ResultDto.Fail(ex.Message));
  52. }
  53. //外观检像素当量
  54. if (_appearancepixelequivalent.enable && lot3Data.result == "NG")
  55. {
  56. foreach (var item in lot3Data.itemCheckDatas)
  57. {
  58. //像素 = 实际长度 / 像素当量
  59. switch (item.pattern)
  60. {
  61. case "PositiveAppearance":
  62. foreach (var detail_item in item.details)
  63. {
  64. var (flag, height, width) = detail_item.Valid_HeightWidth();
  65. if (flag)
  66. {
  67. detail_item.height = (Math.Round(height / _appearancepixelequivalent.PositiveAppearance, 2)).ToString();
  68. detail_item.width = (Math.Round(width / _appearancepixelequivalent.PositiveAppearance, 2)).ToString();
  69. }
  70. }
  71. break;
  72. case "BackAppearance":
  73. foreach (var detail_item in item.details)
  74. {
  75. var (flag, height, width) = detail_item.Valid_HeightWidth();
  76. if (flag)
  77. {
  78. detail_item.height = (Math.Round(height / _appearancepixelequivalent.BackAppearance, 2)).ToString();
  79. detail_item.width = (Math.Round(width / _appearancepixelequivalent.BackAppearance, 2)).ToString();
  80. }
  81. }
  82. break;
  83. case "BackFPC":
  84. foreach (var detail_item in item.details)
  85. {
  86. var (flag, height, width) = detail_item.Valid_HeightWidth();
  87. if (flag)
  88. {
  89. detail_item.height = (Math.Round(height / _appearancepixelequivalent.BackFPC, 2)).ToString();
  90. detail_item.width = (Math.Round(width / _appearancepixelequivalent.BackFPC, 2)).ToString();
  91. }
  92. }
  93. break;
  94. case "PositiveFPC":
  95. foreach (var detail_item in item.details)
  96. {
  97. var (flag, height, width) = detail_item.Valid_HeightWidth();
  98. if (flag)
  99. {
  100. detail_item.height = (Math.Round(height / _appearancepixelequivalent.PositiveFPC, 2)).ToString();
  101. detail_item.width = (Math.Round(width / _appearancepixelequivalent.PositiveFPC, 2)).ToString();
  102. }
  103. }
  104. break;
  105. default:
  106. break;
  107. }
  108. }
  109. }
  110. Lot2Lot3Model lot3model = new()
  111. {
  112. lot_id = lot3Data.id,
  113. is_send = 0,
  114. product_no = lot3Data.slidesNumber,
  115. create_time = DateTime.Now,
  116. is_repeatupload = Convert.ToInt32(lot3Data.isrepeatupload),
  117. operation_time = Convert.ToDateTime(lot3Data.createTime),
  118. content = JsonConvert.SerializeObject(new Lot2Lot3Dto(lot3Data))
  119. };
  120. //根据guid查看是否为重复插入
  121. if (_db.Ado.GetInt(string.Format("select count(*) from lot2lot3_info where lot_id='{0}'", lot3Data.id)) > 0 || lot3Data.slidesNumber == "NA")
  122. {
  123. lot3model.is_send = 3;
  124. }
  125. _db.Insertable(lot3model).ExecuteCommand();
  126. return Ok(ResultDto.Success());
  127. }
  128. catch (Exception ex)
  129. {
  130. LogerHelper.RecordLogTxt($"UploadLot3, Data:{jsonStr}, StackTrace:{ex.StackTrace}, Message:{ex.Message}");
  131. return Ok(ResultDto.Fail("error:" + ex.Message));
  132. }
  133. }
  134. [HttpPost("UploadLot3List")]
  135. public IActionResult Lot3DataList([FromBody] List<Lot3Dto> lot3Datalist)
  136. {
  137. Lot3Dto Lot3tempData = new Lot3Dto();
  138. try
  139. {
  140. foreach (var item in lot3Datalist)
  141. {
  142. Lot3tempData = item;
  143. item.Valid();
  144. }
  145. }
  146. catch (Exception ex)
  147. {
  148. LogerHelper.RecordLogTxt($"UploadLot3, Valid Fail, Data:{JsonConvert.SerializeObject(Lot3tempData)}, Message:{ex.Message}");
  149. //return Ok(ResultDto.Fail(ex.Message));
  150. return Ok(ResultDto.Fail($"Valid Fail, Data:{JsonConvert.SerializeObject(Lot3tempData)}, Message:{ex.Message}"));
  151. }
  152. try
  153. {
  154. _db.Ado.BeginTran();
  155. foreach (var Lot3item in lot3Datalist)
  156. {
  157. Lot3tempData = Lot3item;
  158. //外观检像素当量
  159. if (_appearancepixelequivalent.enable && Lot3item.result == "NG")
  160. {
  161. foreach (var item in Lot3item.itemCheckDatas)
  162. {
  163. //像素 = 实际长度 / 像素当量
  164. switch (item.pattern)
  165. {
  166. case "PositiveAppearance":
  167. foreach (var detail_item in item.details)
  168. {
  169. var (flag, height, width) = detail_item.Valid_HeightWidth();
  170. if (flag)
  171. {
  172. detail_item.height = (Math.Round(height / _appearancepixelequivalent.PositiveAppearance, 2)).ToString();
  173. detail_item.width = (Math.Round(width / _appearancepixelequivalent.PositiveAppearance, 2)).ToString();
  174. }
  175. }
  176. break;
  177. case "BackAppearance":
  178. foreach (var detail_item in item.details)
  179. {
  180. var (flag, height, width) = detail_item.Valid_HeightWidth();
  181. if (flag)
  182. {
  183. detail_item.height = (Math.Round(height / _appearancepixelequivalent.BackAppearance, 2)).ToString();
  184. detail_item.width = (Math.Round(width / _appearancepixelequivalent.BackAppearance, 2)).ToString();
  185. }
  186. }
  187. break;
  188. case "BackFPC":
  189. foreach (var detail_item in item.details)
  190. {
  191. var (flag, height, width) = detail_item.Valid_HeightWidth();
  192. if (flag)
  193. {
  194. detail_item.height = (Math.Round(height / _appearancepixelequivalent.BackFPC, 2)).ToString();
  195. detail_item.width = (Math.Round(width / _appearancepixelequivalent.BackFPC, 2)).ToString();
  196. }
  197. }
  198. break;
  199. case "PositiveFPC":
  200. foreach (var detail_item in item.details)
  201. {
  202. var (flag, height, width) = detail_item.Valid_HeightWidth();
  203. if (flag)
  204. {
  205. detail_item.height = (Math.Round(height / _appearancepixelequivalent.PositiveFPC, 2)).ToString();
  206. detail_item.width = (Math.Round(width / _appearancepixelequivalent.PositiveFPC, 2)).ToString();
  207. }
  208. }
  209. break;
  210. default:
  211. break;
  212. }
  213. }
  214. }
  215. Lot2Lot3Model lot3model = new()
  216. {
  217. lot_id = Lot3item.id,
  218. is_send = 0,
  219. product_no = Lot3item.slidesNumber,
  220. create_time = DateTime.Now,
  221. is_repeatupload = Convert.ToInt32(Lot3item.isrepeatupload),
  222. operation_time = Convert.ToDateTime(Lot3item.createTime),
  223. content = JsonConvert.SerializeObject(new Lot2Lot3Dto(Lot3item))
  224. };
  225. //根据guid查看是否为重复插入
  226. if (_db.Ado.GetInt(string.Format("select count(*) from lot2lot3_info where lot_id='{0}'", Lot3item.id)) > 0 || Lot3item.slidesNumber == "NA")
  227. {
  228. lot3model.is_send = 3;
  229. }
  230. _db.Insertable(lot3model).ExecuteCommand();
  231. }
  232. _db.Ado.CommitTran();
  233. return Ok(ResultDto.Success());
  234. }
  235. catch (Exception ex)
  236. {
  237. _db.Ado.RollbackTran(); ;
  238. LogerHelper.RecordLogTxt($"UploadLot3, Data:{JsonConvert.SerializeObject(Lot3tempData)}, StackTrace:{ex.StackTrace}, Message:{ex.Message}");
  239. return Ok(ResultDto.Fail("error:" + ex.Message));
  240. }
  241. }
  242. [HttpPost("UploadColourCast")]
  243. public IActionResult ColourCastData([FromBody] ColourCastDto ColourCastData)
  244. {
  245. string jsonStr = JsonConvert.SerializeObject(ColourCastData);
  246. try
  247. {
  248. try
  249. {
  250. ColourCastData.Valid();
  251. }
  252. catch (Exception ex)
  253. {
  254. LogerHelper.RecordLogTxt($"UploadColourCast, Valid Fail, Data:{jsonStr}, Message:{ex.Message}");
  255. return Ok(ResultDto.Fail(ex.Message));
  256. };
  257. ColourCastModel colourcastmodel = new()
  258. {
  259. gid = ColourCastData.id,
  260. slidesNumber = ColourCastData.slidesNumber,
  261. is_send = 0,
  262. content = jsonStr,
  263. create_time = DateTime.Now
  264. };
  265. //根据guid查看是否为重复插入
  266. if (_db.Ado.GetInt(string.Format("select count(*) from colourcast_info where gid='{0}'", ColourCastData.id)) > 0)
  267. {
  268. colourcastmodel.is_send = 3;
  269. }
  270. _db.Insertable(colourcastmodel).ExecuteCommand();
  271. return Ok(ResultDto.Success());
  272. }
  273. catch (Exception ex)
  274. {
  275. LogerHelper.RecordLogTxt($"UploadColourCast, Data:{jsonStr}, StackTrace:{ex.StackTrace}, Message:{ex.Message}");
  276. return Ok(ResultDto.Fail("error:" + ex.Message));
  277. }
  278. }
  279. [HttpPost("UpdateDefectInfo")]
  280. public IActionResult UpdateDefectInfo(IFormFile file)
  281. {
  282. if (file == null || file.Length == 0)
  283. {
  284. return Ok(ResultDto.Fail("No file selected"));
  285. }
  286. string line;
  287. try
  288. {
  289. _db.Ado.BeginTran();
  290. _db.Deleteable<DefectModel>().ExecuteCommand();
  291. using (var reader = new StreamReader(file.OpenReadStream(), Encoding.GetEncoding("gb2312")))
  292. {
  293. var header = reader.ReadLine();
  294. var headers = header.Split(',');
  295. while ((line = reader.ReadLine()) != null)
  296. {
  297. string[] linelist = line.Split(",");
  298. _db.Insertable(new DefectModel
  299. {
  300. id = Convert.ToInt32(linelist[0]),
  301. defect_code = linelist[1],
  302. defect_name = linelist[2],
  303. classification = linelist[3].Replace(';', ',')
  304. }).ExecuteCommand();
  305. }
  306. }
  307. _db.Ado.CommitTran();
  308. }
  309. catch (Exception ex)
  310. {
  311. _db.Ado.RollbackTran();
  312. return Ok(ResultDto.Fail(ex.Message));
  313. }
  314. return Ok(ResultDto.Success());
  315. }
  316. }
  317. }