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.

785 lines
23 KiB

3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
5 days ago
3 weeks ago
  1. using log4net.Repository.Hierarchy;
  2. using Newtonsoft.Json.Linq;
  3. using Newtonsoft.Json;
  4. using NFine.Application.SRM;
  5. using NFine.Code;
  6. using NFine.Domain._03_Entity.SRM;
  7. using NPOI.SS.Formula.Functions;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Web;
  14. using System.Web.Mvc;
  15. namespace NFine.Web.Areas.SRM.Controllers
  16. {
  17. public class PriceInquiryController : ControllerBase
  18. {
  19. PriceInquiryApp APP = new PriceInquiryApp();
  20. // GET: SRM/PriceInquiry
  21. public ActionResult Index()
  22. {
  23. return View();
  24. }
  25. /// <summary>
  26. /// 条件非标物料
  27. /// </summary>
  28. /// <returns></returns>
  29. public ActionResult NoProductionMaterialAdd()
  30. {
  31. return View();
  32. }
  33. /// <summary>
  34. /// 新增询价单
  35. /// </summary>
  36. /// <returns></returns>
  37. public ActionResult PriceInquiryAdd()
  38. {
  39. return View();
  40. }
  41. /// <summary>
  42. /// 分配采购
  43. /// </summary>
  44. /// <returns></returns>
  45. public ActionResult PurchaserAllocation()
  46. {
  47. return View();
  48. }
  49. /// <summary>
  50. /// 供应商分配
  51. /// </summary>
  52. /// <returns></returns>
  53. public ActionResult VendorPersAllocation()
  54. {
  55. return View();
  56. }
  57. /// <summary>
  58. /// 报价管理
  59. /// </summary>
  60. /// <returns></returns>
  61. public ActionResult QuotedPriceIndex()
  62. {
  63. return View();
  64. }
  65. /// <summary>
  66. /// 报价明细
  67. /// </summary>
  68. /// <returns></returns>
  69. public ActionResult QuotedPriceDetail()
  70. {
  71. return View();
  72. }
  73. /// <summary>
  74. /// 审核报价
  75. /// </summary>
  76. /// <returns></returns>
  77. public ActionResult ReviewPrice()
  78. {
  79. return View();
  80. }
  81. /// <summary>
  82. /// 生效报价
  83. /// </summary>
  84. /// <returns></returns>
  85. public ActionResult CompPrice()
  86. {
  87. return View();
  88. }
  89. /// <summary>
  90. /// 报价过程查询
  91. /// </summary>
  92. /// <returns></returns>
  93. public ActionResult ComPricelistByPN()
  94. {
  95. return View();
  96. }
  97. /// <summary>
  98. /// 技术需求单发起
  99. /// </summary>
  100. /// <returns></returns>
  101. public ActionResult TechnicalRequirementsForm()
  102. {
  103. return View();
  104. }
  105. /// <summary>
  106. /// 技术需求单(新增界面)
  107. /// </summary>
  108. /// <returns></returns>
  109. public ActionResult TechnicalRequirementsFormAdd()
  110. {
  111. return View();
  112. }
  113. /// <summary>
  114. /// 需求单详情页
  115. /// </summary>
  116. /// <returns></returns>
  117. public ActionResult TechnicalRequirementsFormLook()
  118. {
  119. return View();
  120. }
  121. /// <summary>
  122. /// 选择需求物料
  123. /// </summary>
  124. /// <returns></returns>
  125. public ActionResult VendorPersAddItem()
  126. {
  127. return View();
  128. }
  129. /// <summary>
  130. /// 获取列表
  131. /// </summary>
  132. /// <param name="rfqno"></param>
  133. /// <param name="pagination"></param>
  134. /// <returns></returns>
  135. [HttpGet]
  136. public ActionResult GetInvTabByPN(string rfqno, Pagination pagination)
  137. {
  138. DataTable table = APP.GetInvTabByPN(rfqno);
  139. var JsonData = new
  140. {
  141. total = pagination.total,
  142. page = pagination.page,
  143. records = pagination.records,
  144. rows = table
  145. };
  146. return Content(JsonData.ToJson());
  147. }
  148. //初次加载页面数据
  149. [HttpGet]
  150. [HandlerAjaxOnly]
  151. public ActionResult GetGridJsonByPN(Pagination pagination, string queryJson)
  152. {
  153. DataTable ListData = APP.GetGridJsonByPN(queryJson, ref pagination);
  154. var JsonData = new
  155. {
  156. total = pagination.total,
  157. page = pagination.page,
  158. records = pagination.records,
  159. rows = ListData,
  160. };
  161. return Content(JsonData.ToJson());
  162. }
  163. /// <summary>
  164. /// 根据当前登录的采购获取物料行
  165. /// </summary>
  166. /// <param name="rfqno"></param>
  167. /// <param name="pagination"></param>
  168. /// <returns></returns>
  169. [HttpGet]
  170. public ActionResult GetInvTabByPNForVendor(string rfqno, Pagination pagination)
  171. {
  172. DataTable table = APP.GetInvTabByPNForVendor(rfqno);
  173. var JsonData = new
  174. {
  175. total = pagination.total,
  176. page = pagination.page,
  177. records = pagination.records,
  178. rows = table
  179. };
  180. return Content(JsonData.ToJson());
  181. }
  182. /// <summary>
  183. /// 新增询价单
  184. /// </summary>
  185. /// <param name="details"></param>
  186. /// <returns></returns>
  187. [HttpPost]
  188. public ActionResult AddRFQByPN(ICSSORRFQ details)
  189. {
  190. try
  191. {
  192. APP.AddRFQByPN(details);
  193. return Success("询报价创建成功!");
  194. }
  195. catch (Exception ex)
  196. {
  197. return Error(ex.Message);
  198. }
  199. }
  200. /// <summary>
  201. /// 分配采购人员
  202. /// </summary>
  203. /// <param name="details"></param>
  204. /// <returns></returns>
  205. [HttpPost]
  206. public ActionResult AddRFQByPNPurchasing(ICSSORRFQ details)
  207. {
  208. try
  209. {
  210. APP.AddRFQByPNPurchasing(details);
  211. return Success("询报价创建成功!");
  212. }
  213. catch (Exception ex)
  214. {
  215. return Error(ex.Message);
  216. }
  217. }
  218. /// <summary>
  219. /// 分配供应商
  220. /// </summary>
  221. /// <param name="details"></param>
  222. /// <returns></returns>
  223. [HttpPost]
  224. public ActionResult AddRFQByPNVendorsing(ICSSORRFQ details)
  225. {
  226. try
  227. {
  228. APP.AddRFQByPNVendorsing(details);
  229. return Success("询报价创建成功!");
  230. }
  231. catch (Exception ex)
  232. {
  233. return Error(ex.Message);
  234. }
  235. }
  236. /// <summary>
  237. /// 获取采购人员
  238. /// </summary>
  239. /// <param name="rfqno"></param>
  240. /// <param name="workpoint"></param>
  241. /// <returns></returns>
  242. [HttpGet]
  243. [HandlerAjaxOnly]
  244. public ActionResult GetSelectBuiess(string WorkPoint)
  245. {
  246. DataTable dt = APP.GetSelectBuiess(WorkPoint);
  247. return Content(dt.ToJson());
  248. }
  249. /// <summary>
  250. /// 获取供应商
  251. /// </summary>
  252. /// <param name="rfqno"></param>
  253. /// <param name="workpoint"></param>
  254. /// <returns></returns>
  255. [HttpGet]
  256. [HandlerAjaxOnly]
  257. public ActionResult GetSelectVendor(string WorkPoint)
  258. {
  259. DataTable dt = APP.GetSelectVendor(WorkPoint);
  260. return Content(dt.ToJson());
  261. }
  262. /// <summary>
  263. /// 无聊行退回
  264. /// </summary>
  265. /// <param name="keyValue"></param>
  266. /// <returns></returns>
  267. public ActionResult InvCodeBack(string keyValue, string RFQNO)
  268. {
  269. string msg = APP.InvCodeBack(keyValue, RFQNO);
  270. if (string.IsNullOrEmpty(msg))
  271. {
  272. return Success("退回成功!");
  273. }
  274. else
  275. {
  276. return Error(msg);
  277. }
  278. //return Content(app.DeleteInvTab(json));
  279. }
  280. /// <summary>
  281. /// 获取物料名称、单位、规格型号
  282. /// </summary>
  283. /// <param name="WorkPoint"></param>
  284. /// <returns></returns>
  285. [HttpGet]
  286. [HandlerAjaxOnly]
  287. public ActionResult GetTxtInfoByPN(string RFQCODE)
  288. {
  289. DataTable ListData = APP.GetTxtInfoByPN(RFQCODE);
  290. var JsonData = new
  291. {
  292. RFQCODE = ListData.Rows[0][0].ToString(),
  293. RFQNAME = ListData.Rows[0][1].ToString(),
  294. PURCHUGCODE = ListData.Rows[0][2].ToString(),
  295. ITEMTYPE = ListData.Rows[0][3].ToString(),
  296. PURCHUGNAME = ListData.Rows[0][4].ToString(),
  297. PURCHUGCONECT = ListData.Rows[0][5].ToString(),
  298. VENDORCODE = ListData.Rows[0][6].ToString(),
  299. cVenName = ListData.Rows[0][7].ToString(),
  300. VENDORTYPE = ListData.Rows[0][8].ToString(),
  301. CURRENCY = ListData.Rows[0][9].ToString(),
  302. TAXRATE = ListData.Rows[0][10].ToString(),
  303. PAYMENTCONDITION = ListData.Rows[0][11].ToString(),
  304. MEMO = ListData.Rows[0][12].ToString(),
  305. COMPANYCODE = ListData.Rows[0][13].ToString(),
  306. HASCOSTDETAILS = ListData.Rows[0][14].ToString(),
  307. FileName = ListData.Rows[0][15].ToString(),
  308. //AccountPeriod = ListData.Rows[0][16].ToString(),
  309. };
  310. return Content(JsonData.ToJson());
  311. }
  312. [HttpGet]
  313. [HandlerAjaxOnly]
  314. public ActionResult SelectOfferByPN(string RFQCODE, Pagination pagination, string WorkPoint)
  315. {
  316. DataTable ListData = APP.SelectOfferByPN(RFQCODE, ref pagination, WorkPoint);
  317. var JsonData = new
  318. {
  319. total = pagination.total,
  320. page = pagination.page,
  321. records = pagination.records,
  322. rows = ListData,
  323. };
  324. return Content(JsonData.ToJson());
  325. }
  326. [HttpGet]
  327. [HandlerAjaxOnly]
  328. public ActionResult SecondGetTxtInfoByPN(string RFQCODE, string QUOTATIONCODE)
  329. {
  330. DataTable ListData = APP.SecondGetTxtInfoByPN(RFQCODE, QUOTATIONCODE);
  331. var JsonData = new
  332. {
  333. rows = ListData,
  334. };
  335. return Content(JsonData.ToJson());
  336. }
  337. [HttpGet]
  338. [HandlerAjaxOnly]
  339. public ActionResult SecondSelectOfferByPN(string RFQCODE, string QUOTATIONCODE, Pagination pagination)
  340. {
  341. DataTable ListData = APP.SecondSelectOfferByPN(RFQCODE, QUOTATIONCODE, ref pagination);
  342. var JsonData = new
  343. {
  344. total = pagination.total,
  345. page = pagination.page,
  346. records = pagination.records,
  347. rows = ListData,
  348. };
  349. return Content(JsonData.ToJson());
  350. }
  351. public ActionResult GetGridJson(Pagination pagination, String JSON)
  352. {
  353. DataTable table = APP.GetGridJson(JSON, ref pagination);
  354. var JsonData = new
  355. {
  356. total = pagination.total,
  357. page = pagination.page,
  358. records = pagination.records,
  359. rows = table
  360. };
  361. return Content(JsonData.ToJson());
  362. }
  363. #region 查询技术部需求单列表
  364. public ActionResult GetGridJsonICSSORRFQRequestFrom(Pagination pagination, String JSON)
  365. {
  366. DataTable table = APP.GetGridJsonICSSORRFQRequestFrom(JSON, ref pagination);
  367. var JsonData = new
  368. {
  369. total = pagination.total,
  370. page = pagination.page,
  371. records = pagination.records,
  372. rows = table
  373. };
  374. return Content(JsonData.ToJson());
  375. }
  376. #endregion
  377. #region 查询技术部需求单列表(子表)
  378. [HttpGet]
  379. [HandlerAjaxOnly]
  380. public ActionResult GetSubGridJsonICSSORRFQRequestFrom(string RFQCODE, Pagination pagination, string WorkPoint)
  381. {
  382. DataTable ListData = APP.GetSubGridJsonICSSORRFQRequestFrom(RFQCODE, ref pagination, WorkPoint);
  383. var JsonData = new
  384. {
  385. total = pagination.total,
  386. page = pagination.page,
  387. records = pagination.records,
  388. rows = ListData,
  389. };
  390. return Content(JsonData.ToJson());
  391. }
  392. #endregion
  393. #region 技术部发布申请单
  394. public ActionResult JSPublish(string json)
  395. {
  396. return Content(APP.JSPublish(json));
  397. }
  398. #endregion
  399. #region 删除技术申请单
  400. public ActionResult DELETEICSSORRFQRequestFrom(string json)
  401. {
  402. return Content(APP.DELETEICSSORRFQRequestFrom(json));
  403. }
  404. #endregion
  405. #region 生成申请单号
  406. public ActionResult GetSercodeICSSORRFQRequestFrom(string workpoint)
  407. {
  408. string sercode = APP.GetSercodeICSSORRFQRequestFrom(workpoint);
  409. return Content(sercode);
  410. }
  411. #endregion
  412. #region 查询申请物料信息
  413. public ActionResult GetInvTabICSSORRFQRequestFrom(string rfqno, Pagination pagination)
  414. {
  415. DataTable table = APP.GetInvTabICSSORRFQRequestFrom(rfqno);
  416. var JsonData = new
  417. {
  418. total = pagination.total,
  419. page = pagination.page,
  420. records = pagination.records,
  421. rows = table
  422. };
  423. return Content(JsonData.ToJson());
  424. }
  425. #endregion
  426. #region 查询申请单主表信息,修改
  427. public ActionResult GetICSSORRFQRequestFromrow(string rfqcode)
  428. {
  429. return Content(APP.GetICSSORRFQRequestFromrow(rfqcode).ToJson());
  430. }
  431. #endregion
  432. #region 获取申请单附件信息
  433. [HttpGet]
  434. [HandlerAjaxOnly]
  435. public ActionResult GetICSSORRFQRequestFromVenDorFile(string rfqcode)
  436. {
  437. DataTable ListData = APP.GetICSSORRFQRequestFromVenDorFile(rfqcode);
  438. var JsonData = new
  439. {
  440. rows = ListData,
  441. };
  442. return Content(JsonData.ToJson());
  443. }
  444. #endregion
  445. #region 删除申请的物料信息
  446. public ActionResult DeleteInvRowICSSORRFQRequestFrom(string keyValue)
  447. {
  448. string msg = APP.DeleteInvRowICSSORRFQRequestFrom(keyValue);
  449. if (string.IsNullOrEmpty(msg))
  450. {
  451. return Success("删除成功!");
  452. }
  453. else
  454. {
  455. return Error(msg);
  456. }
  457. //return Content(app.DeleteInvTab(json));
  458. }
  459. #endregion
  460. #region 保存技术申请单方法
  461. [HttpPost]
  462. public ActionResult AddICSSORRFQRequestFromByPN(ICSSORRFQ details)
  463. {
  464. try
  465. {
  466. APP.AddICSSORRFQRequestFromByPN(details);
  467. return Success("询报价创建成功!");
  468. }
  469. catch (Exception ex)
  470. {
  471. return Error(ex.Message);
  472. }
  473. }
  474. #endregion
  475. public ActionResult GetInvTab(string rfqno, Pagination pagination)
  476. {
  477. DataTable table = APP.GetInvTable(rfqno);
  478. var JsonData = new
  479. {
  480. total = pagination.total,
  481. page = pagination.page,
  482. records = pagination.records,
  483. rows = table
  484. };
  485. return Content(JsonData.ToJson());
  486. }
  487. /// <summary>
  488. /// 获取生效价格查询
  489. /// </summary>
  490. /// <param name="pagination">分页</param>
  491. /// <param name="queryJson">传入过滤参数</param>
  492. /// <returns></returns>
  493. [HttpGet]
  494. [HandlerAjaxOnly]
  495. public ActionResult GetGridPriceByPN(Pagination pagination, string queryJson)
  496. {
  497. DataTable ListData = APP.GetGridPriceByPN(queryJson, ref pagination);
  498. var JsonData = new
  499. {
  500. total = pagination.total,
  501. page = pagination.page,
  502. records = pagination.records,
  503. rows = ListData,
  504. };
  505. return Content(JsonData.ToJson());
  506. }
  507. [HttpPost]
  508. [HandlerAjaxOnly]
  509. public ActionResult AgreeByPN(string json)
  510. {
  511. return Content(APP.AgreeByPN(json));
  512. }
  513. [HttpPost]
  514. /// <summary>
  515. /// 文件上传到本地
  516. /// </summary>
  517. public ActionResult UploadFile(string ID, string BidCode, string WorkPoint)
  518. {
  519. try
  520. {
  521. // 检查是否有文件上传
  522. if (Request.Files.Count == 0 || Request.Files[0]?.ContentLength == 0)
  523. {
  524. return Json(new { error = "请选择要上传的文件" }, JsonRequestBehavior.AllowGet);
  525. }
  526. var file = Request.Files[0];
  527. var fileExtension = Path.GetExtension(file.FileName)?.ToLower();
  528. // 验证文件类型
  529. if (fileExtension != ".xls" && fileExtension != ".xlsx")
  530. {
  531. return Json(new { error = "只支持上传Excel(.xls, .xlsx)文件" }, JsonRequestBehavior.AllowGet);
  532. }
  533. // 生成唯一文件名并创建保存路径
  534. var fileName = $"{DateTime.Now:yyyyMMddHHmmss}{Guid.NewGuid()}{fileExtension}";
  535. var uploadDirectory = Server.MapPath("~/File/UPLoadFile/");
  536. // 确保上传目录存在
  537. if (!Directory.Exists(uploadDirectory))
  538. {
  539. Directory.CreateDirectory(uploadDirectory);
  540. }
  541. var savePath = Path.Combine(uploadDirectory, fileName);
  542. // 保存文件
  543. using (var stream = new FileStream(savePath, FileMode.Create))
  544. {
  545. file.InputStream.CopyTo(stream);
  546. }
  547. // 处理上传的Excel文件
  548. var listData = APP.SetData_PR(savePath, ID, BidCode, WorkPoint);
  549. return Content(listData.ToJson());
  550. }
  551. catch (Exception ex)
  552. {
  553. return Error(ex.Message);
  554. }
  555. }
  556. public ActionResult GetPurchasing(string VenCode)
  557. {
  558. string msg = APP.GetPurchasing(VenCode);
  559. var JsonData = new
  560. {
  561. mass = msg,
  562. };
  563. return Content(JsonData.ToJson());
  564. }
  565. [HttpGet]
  566. [HandlerAjaxOnly]
  567. public ActionResult GetVenDorFileSSORByPN(string FPRFQCODE)
  568. {
  569. DataTable ListData = APP.GetVenDorFileSSORByPN(FPRFQCODE);
  570. var JsonData = new
  571. {
  572. rows = ListData,
  573. };
  574. return Content(JsonData.ToJson());
  575. }
  576. [HttpGet]
  577. [HandlerAjaxOnly]
  578. public ActionResult SORRFQCourseHistoryInfoCahrsByPN(string FPRFQCODE, string workpoint, string ITEMCODE)
  579. {
  580. DataTable ListData = APP.SORRFQCourseHistoryInfoCahrsByPN(FPRFQCODE, workpoint, ITEMCODE);
  581. string ss = ListData.ToJson();
  582. return Content(ListData.ToJson());
  583. }
  584. [HttpGet]
  585. [HandlerAjaxOnly]
  586. public ActionResult GetGridMaterialByPN(Pagination pagination, string ITEMCODE, string VenCode, string FPRFQCODE)
  587. {
  588. DataTable ListData = APP.GetGridMaterialByPN(ref pagination, ITEMCODE, VenCode, FPRFQCODE);
  589. var JsonData = new
  590. {
  591. total = pagination.total,
  592. page = pagination.page,
  593. records = pagination.records,
  594. rows = ListData,
  595. };
  596. return Content(JsonData.ToJson());
  597. }
  598. [HttpPost]
  599. [HandlerAjaxOnly]
  600. //[ValidateAntiForgeryToken]
  601. public ActionResult SaveQuotationByPN(string keyValue)
  602. {
  603. string msg = "";
  604. msg = APP.SaveQuotationByPN(keyValue);
  605. if (string.IsNullOrWhiteSpace(msg))
  606. {
  607. return Success("信息保存成功!");
  608. }
  609. else
  610. {
  611. return Error("" + msg + "");
  612. }
  613. }
  614. [HttpGet]
  615. public ActionResult GetPriceInquiryItem(string invcode, Pagination pagination, string workpoint, string InvName, string sfqcode)
  616. {
  617. DataTable ListData = APP.GetPriceInquiryItem(invcode, ref pagination, workpoint, InvName, sfqcode);
  618. var JsonData = new
  619. {
  620. total = pagination.total,
  621. page = pagination.page,
  622. records = pagination.records,
  623. rows = ListData,
  624. };
  625. return Content(JsonData.ToJson());
  626. }
  627. [HttpPost]
  628. public void Export(string RFQCODE, string WorkPoint)
  629. {
  630. RFQCODE = RFQCODE.TrimEnd(',');
  631. //var data = maintainApp.GetList2(ids); //preselldetailApp.GetList2(keyValue, keyword);
  632. DataTable dt = APP.GetSQListExport(RFQCODE, WorkPoint);
  633. AsposeCell.Export(dt);
  634. //NPOIExcel helper = new NPOIExcel();
  635. //string title= DateTime.Now.ToString("yyyyMMddHHmmss");
  636. //string path= Server.MapPath("/File/");
  637. //helper.ToExcel(dt, title, "sheet1", path);
  638. }
  639. public ActionResult DownPreviewLoadPDF()
  640. {
  641. string INVCODE = Request.Form["INVCODE"].ToString();
  642. string msg;
  643. string url = "";
  644. string errormsg = "";
  645. DataTable picdt = new DataTable();
  646. try
  647. {
  648. var reqInterNme = "http://192.168.20.5:8095/ICS/PLMCToken";
  649. string responseStr = CertifiCationApp.HttpPost(reqInterNme, "");
  650. try
  651. {
  652. //JObject res = (JObject)JsonConvert.DeserializeObject(dtsql.Rows[0]["searchKey"].ToString());
  653. JObject res = (JObject)JsonConvert.DeserializeObject(responseStr);
  654. string ID = res["id"].ToString();//获取Tockn
  655. if (!string.IsNullOrWhiteSpace(ID))
  656. {
  657. BUss bs=new BUss();
  658. bs.ItemCode = INVCODE;
  659. bs.Token = ID;
  660. string input = JsonConvert.SerializeObject(bs);
  661. string APIURLBid = "http://192.168.20.5:8095/ICS/PLMCFileDownload";
  662. string resultBid = CertifiCationApp.HttpPost(APIURLBid, input);
  663. JObject resBId = (JObject)JsonConvert.DeserializeObject(resultBid);
  664. url = resBId["Message"].ToString();//获取Tockn
  665. }
  666. }
  667. catch (Exception ex)
  668. {
  669. }
  670. }
  671. catch (Exception ex)
  672. {
  673. errormsg = ex.Message;
  674. }
  675. var JsonData = new
  676. {
  677. result = true,
  678. msg = url,
  679. };
  680. return Content(JsonData.ToJson());
  681. }
  682. public class BUss
  683. {
  684. public string ItemCode { get; set; }
  685. public string Token { get; set; }
  686. }
  687. }
  688. }