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.

489 lines
18 KiB

4 days ago
  1. using NFine.Application;
  2. using NFine.Application.ProductManage;
  3. using NFine.Code;
  4. using NFine.Data.Extensions;
  5. using NFine.Domain.Entity.ProductManage;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.Data.SqlClient;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Threading;
  13. using System.Web;
  14. using System.Web.Mvc;
  15. namespace NFine.Web.Areas.SRM.Controllers
  16. {
  17. public class CAManageController : ControllerBase
  18. {
  19. private CAManageApp App = new CAManageApp();
  20. /// <summary>
  21. /// 最新对账主表信息
  22. /// </summary>
  23. /// <param name="pagination"></param>
  24. /// <param name="queryJson"></param>
  25. /// <returns></returns>
  26. [HttpGet]
  27. [HandlerAjaxOnly]
  28. public ActionResult GetGridJson(Pagination pagination, string queryJson)
  29. {
  30. DataTable ListData = App.GetGridJson(queryJson, ref pagination);
  31. var JsonData = new
  32. {
  33. total = pagination.total,
  34. page = pagination.page,
  35. records = pagination.records,
  36. rows = ListData,
  37. };
  38. return Content(JsonData.ToJson());
  39. }
  40. /// <summary>
  41. /// 最新对账子表信息
  42. /// 20230217 变更从计算合计-取U8入库单原币价税合计
  43. /// </summary>
  44. /// <param name="ID"></param>
  45. /// <param name="pagination"></param>
  46. /// <param name="WorkPoint"></param>
  47. /// <returns></returns>
  48. [HttpGet]
  49. [HandlerAjaxOnly]
  50. public ActionResult GetSubGridJson(string ID, Pagination pagination, string WorkPoint)
  51. {
  52. DataTable ListData = App.GetSubGridJson(ID, ref pagination, WorkPoint);
  53. var JsonData = new
  54. {
  55. total = pagination.total,
  56. page = pagination.page,
  57. records = pagination.records,
  58. rows = ListData,
  59. };
  60. return Content(JsonData.ToJson());
  61. }
  62. public ActionResult ChridenList(string keyValue, string WorkPoint)
  63. {
  64. string result = App.ChridenList(keyValue, WorkPoint);
  65. var JsonData = new
  66. {
  67. result = result
  68. };
  69. return Content(JsonData.ToJson());
  70. }
  71. [HttpGet]
  72. [HandlerAjaxOnly]
  73. public ActionResult GetSubGridJson_Add(string queryJson, Pagination pagination)
  74. {
  75. DataTable ListData = App.GetSubGridJson_Add(queryJson, ref pagination);
  76. var JsonData = new
  77. {
  78. total = pagination.total,
  79. page = pagination.page,
  80. records = pagination.records,
  81. rows = ListData,
  82. };
  83. return Content(JsonData.ToJson());
  84. }
  85. public ActionResult Index()
  86. {
  87. return View();
  88. }
  89. public ActionResult IndexByYL()
  90. {
  91. return View();
  92. }
  93. //[HttpGet]
  94. //[HandlerAjaxOnly]
  95. //public ActionResult GetFormJson(string keyValue)
  96. //{
  97. // //var data = maintainAppApp.GetForm(keyValue);
  98. // //return Content(data.ToJson());
  99. //}
  100. [HttpPost]
  101. [HandlerAjaxOnly]
  102. [ValidateAntiForgeryToken]
  103. public ActionResult SubmitForm(string POCode, string PORow, string keyValue)
  104. {
  105. int i = App.CreateItemLotNo(POCode, PORow, keyValue);
  106. if (i > 0)
  107. {
  108. return Success("发布成功!");
  109. }
  110. else
  111. {
  112. return Error("发布失败!");
  113. }
  114. }
  115. [HttpGet]
  116. [HandlerAjaxOnly]
  117. public ActionResult GetSubGridJsonByCreate(string POCode, string PORow)
  118. {
  119. DataTable ListData = App.GetSubGridJsonByCreate(POCode, PORow);
  120. var JsonData = new
  121. {
  122. rows = ListData,
  123. };
  124. return Content(JsonData.ToJson());
  125. }
  126. [HttpGet]
  127. [HandlerAjaxOnly]
  128. public ActionResult GetVendorLotNo(string VenCode, string WorkPoint)
  129. {
  130. DataTable ListData = App.GetVendorLotNo(VenCode, WorkPoint);
  131. var JsonData = new
  132. {
  133. VendorLotNo = ListData.Rows[0][0].ToString(),
  134. };
  135. return Content(JsonData.ToJson());
  136. }
  137. [HttpPost]
  138. [HandlerAjaxOnly]
  139. [ValidateAntiForgeryToken]
  140. public ActionResult DeleteDocNo(string keyValue, string WorkPoint)
  141. {
  142. string msg = App.DeleteDocNo(keyValue, WorkPoint);
  143. if (string.IsNullOrEmpty(msg))
  144. {
  145. return Success("删除成功!");
  146. }
  147. else
  148. {
  149. return Error(msg);
  150. }
  151. }
  152. [HttpPost]
  153. [HandlerAjaxOnly]
  154. [ValidateAntiForgeryToken]
  155. public ActionResult UpDateByDocNo(string keyValue, string Status, string WorkPoint)
  156. {
  157. int result = App.UpDateByDocNo(keyValue, Status, WorkPoint);
  158. if (result > 0)
  159. {
  160. return Success("操作成功!");
  161. }
  162. else
  163. {
  164. return Error("操作失败!");
  165. }
  166. }
  167. [HttpGet]
  168. [HandlerAjaxOnly]
  169. public ActionResult CheckIsAll(string STNO)
  170. {
  171. string _result = App.CheckIsAll(STNO);
  172. var JsonData = new
  173. {
  174. result = _result
  175. };
  176. return Content(JsonData.ToJson());
  177. }
  178. #region 打印
  179. /// <summary>
  180. /// 打印数据参数:服务器的URL+打印的文件名,转化为Base64编码
  181. /// </summary>
  182. protected string strPrintData;
  183. /// <summary>
  184. /// 标识是否安装了控件
  185. /// </summary>
  186. protected bool bIsInstallPrintControl = true;
  187. /// <summary>
  188. /// 打印控件的Cookie值
  189. /// </summary>
  190. protected string strPrintControlCookie = "";
  191. /// <summary>
  192. /// 获取Url中去掉文件名的路径
  193. /// </summary>
  194. /// <returns></returns>
  195. private string GetUrlPath()
  196. {
  197. string strUrl = Request.Url.ToString();
  198. int iEnd = strUrl.LastIndexOf("/");
  199. strUrl = strUrl.Substring(0, iEnd + 1);
  200. return strUrl;
  201. }
  202. /// <summary>
  203. /// 设置控件调用的Cookie值,判断是否安装了打印控件
  204. /// </summary>
  205. /// <param name="pJson"></param>
  206. private void SetCookieAndURL(PrintJson pJson)
  207. {
  208. bIsInstallPrintControl = false;
  209. strPrintControlCookie = "";
  210. HttpCookie pCookieInstall = Request.Cookies["InstallPrintControl"];
  211. if (pCookieInstall != null)
  212. { //Cookie存在
  213. strPrintControlCookie = pCookieInstall.Value.ToString();
  214. //以Cookie值查找在数据表中是否存在
  215. string strSql = @"Select * From sys_SRM_CheckInstall Where Cookie = @Cookie";
  216. SqlParameter[] pmcCookie = { new SqlParameter("Cookie", strPrintControlCookie) };
  217. using (SqlDataReader drCookie = DbHelper.ExecuteReader(DbHelper.ConnectionString, CommandType.Text, strSql, pmcCookie))
  218. {
  219. if (drCookie.Read())
  220. { //标识为已经安装
  221. bIsInstallPrintControl = true;
  222. }
  223. drCookie.Close();
  224. }
  225. //更新Cookie的保存时间
  226. pCookieInstall.Expires = DateTime.Now.AddYears(10);
  227. Response.SetCookie(pCookieInstall);
  228. }
  229. else
  230. {//Cookie不存在,则新建Cookie
  231. strPrintControlCookie = System.Guid.NewGuid().ToString();
  232. pCookieInstall = new HttpCookie("InstallPrintControl", strPrintControlCookie);
  233. pCookieInstall.Expires = DateTime.Now.AddYears(10);
  234. Response.Cookies.Add(pCookieInstall);
  235. }
  236. string strUrl = Server.MapPath("/PrintTemp/") + "IsCheckInstall";
  237. pJson.SetCookieAndURL(strPrintControlCookie, strUrl);
  238. }
  239. /// <summary>
  240. /// 写日志(用于跟踪)
  241. /// </summary>
  242. private void WriteLog(string strMessage)
  243. {
  244. string strLogFile = Server.MapPath("./Cookie_Log.txt");
  245. StreamWriter swLogFile = null;
  246. try
  247. {
  248. if (!System.IO.File.Exists(strLogFile))
  249. {
  250. swLogFile = System.IO.File.CreateText(strLogFile);
  251. }
  252. else
  253. {
  254. swLogFile = System.IO.File.AppendText(strLogFile);
  255. }
  256. swLogFile.WriteLine(strMessage);
  257. }
  258. catch
  259. {
  260. }
  261. finally
  262. {
  263. if (swLogFile != null)
  264. swLogFile.Close();
  265. }
  266. }
  267. /// <summary>
  268. ///判断数据表中是否存在,若不存在则新建一条记录,若存在则更新最后访问的时间
  269. /// </summary>
  270. /// <param name="strCookie"></param>
  271. private void UpdateCheckInstall(string strCookie)
  272. {
  273. bool bIsExist = false;
  274. //判断记录是否存在
  275. GetLastAccessTime(strCookie, ref bIsExist);
  276. string strSql = "";
  277. SqlParameter[] pmcCookie = { new SqlParameter("Cookie", strCookie) };
  278. if (bIsExist)
  279. { //存在则更新最后访问的时间
  280. strSql = @"Update sys_SRM_CheckInstall
  281. Set LastAccessTime = getDate()
  282. Where Cookie = @Cookie";
  283. }
  284. else
  285. { //不存在则新建一条记录
  286. strSql = @"Insert into sys_SRM_CheckInstall(Cookie, LastAccessTime)
  287. Values( @Cookie, getDate() )";
  288. }
  289. DbHelper.ExecuteNonQuery(DbHelper.ConnectionString, CommandType.Text, strSql, pmcCookie);
  290. }
  291. public DateTime ToDateTime(object SrcValue)
  292. {
  293. if (Convert.IsDBNull(SrcValue) == true)
  294. return DateTime.MinValue;
  295. else
  296. {
  297. try
  298. {
  299. return Convert.ToDateTime(SrcValue);
  300. }
  301. catch
  302. {
  303. return DateTime.MinValue;
  304. }
  305. }
  306. }
  307. /// <summary>
  308. /// 获取此Cookie的最后访问时间
  309. /// </summary>
  310. /// <param name="strCookie"></param>
  311. /// <returns></returns>
  312. private DateTime GetLastAccessTime(string strCookie, ref bool bIsExist)
  313. {
  314. DateTime dtLastAccessTime = DateTime.MinValue;
  315. bIsExist = false;
  316. string strSql = @"Select * From sys_SRM_CheckInstall Where Cookie = @Cookie";
  317. SqlParameter[] pmcCookie = { new SqlParameter("Cookie", strCookie) };
  318. using (SqlDataReader drCookie = DbHelper.ExecuteReader(DbHelper.ConnectionString, CommandType.Text, strSql, pmcCookie))
  319. {
  320. if (drCookie.Read())
  321. {
  322. dtLastAccessTime = ToDateTime(drCookie["LastAccessTime"]);
  323. bIsExist = true;
  324. }
  325. drCookie.Close();
  326. }
  327. return dtLastAccessTime;
  328. }
  329. [HttpGet]
  330. [HandlerAjaxOnly]
  331. public ActionResult IsCheckInstall(string checkInstall)
  332. {
  333. string strValue = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 访问,");
  334. if (Request.QueryString["cookie"] != null)
  335. { //有控件上传的Cookie值
  336. string strCookie = Request.QueryString["cookie"].ToString();
  337. //判断数据表中是否存在,若不存在则新建一条记录,若存在则更新最后访问的时间
  338. UpdateCheckInstall(strCookie);
  339. strValue = strValue + "上传的cookie:" + strCookie;
  340. }
  341. else if (checkInstall != null)
  342. {//Ajax检查控件是否安装了,防止那种客户把打印控件卸装了,打印时无法检测到的情况
  343. string strCookie = checkInstall;
  344. //读取最后访问的时间
  345. string strResult = "PrintControlInstall";
  346. bool bIsExist = false;
  347. DateTime dtLastAccessTime = GetLastAccessTime(strCookie, ref bIsExist);
  348. if (!bIsExist || dtLastAccessTime.AddSeconds(30) < DateTime.Now)
  349. {
  350. strResult = "NOT";
  351. }
  352. Response.Clear();
  353. Response.Write(strResult);
  354. strValue = strValue + "检测安装的值:" + strCookie;
  355. }
  356. WriteLog(strValue);
  357. return null;
  358. }
  359. [HttpGet]
  360. [HandlerAjaxOnly]
  361. public ActionResult IsCheckInstall()
  362. {
  363. string strValue = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 访问,");
  364. if (Request.QueryString["cookie"] != null)
  365. { //有控件上传的Cookie值
  366. string strCookie = Request.QueryString["cookie"].ToString();
  367. //判断数据表中是否存在,若不存在则新建一条记录,若存在则更新最后访问的时间
  368. UpdateCheckInstall(strCookie);
  369. strValue = strValue + "上传的cookie:" + strCookie;
  370. }
  371. else if (Request.QueryString["checkInstall"] != null)
  372. {//Ajax检查控件是否安装了,防止那种客户把打印控件卸装了,打印时无法检测到的情况
  373. string strCookie = Request.QueryString["checkInstall"];
  374. //读取最后访问的时间
  375. string strResult = "PrintControlInstall";
  376. bool bIsExist = false;
  377. DateTime dtLastAccessTime = GetLastAccessTime(strCookie, ref bIsExist);
  378. if (!bIsExist || dtLastAccessTime.AddSeconds(30) < DateTime.Now)
  379. {
  380. strResult = "NOT";
  381. }
  382. Response.Clear();
  383. Response.Write(strResult);
  384. strValue = strValue + "检测安装的值:" + strCookie;
  385. }
  386. WriteLog(strValue);
  387. return null;
  388. }
  389. #endregion
  390. [HttpPost]
  391. public void Export(string DocNo, string WorkPoint)
  392. {
  393. DocNo = DocNo.TrimEnd(',');
  394. //var data = maintainApp.GetList2(ids); //preselldetailApp.GetList2(keyValue, keyword);
  395. DataTable dt = App.GetPOListExport(DocNo, WorkPoint);
  396. AsposeCell.Export(dt);
  397. //NPOIExcel helper = new NPOIExcel();
  398. //string title= DateTime.Now.ToString("yyyyMMddHHmmss");
  399. //string path= Server.MapPath("/File/");
  400. //helper.ToExcel(dt, title, "sheet1", path);
  401. }
  402. [HttpPost]
  403. [HandlerAjaxOnly]
  404. public ActionResult PrintItemLot(string keyValue, string WorkPoint)
  405. {
  406. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  407. string strPrintFileName = Server.MapPath("/ReportFile/") + "ASN - 对账单.fr3";
  408. PrintJson pJson = new PrintJson(Server.MapPath("./PrintTemp"), strPrintFileName);
  409. pJson.CheckRegister("苏州智合诚信息科技有限公司", "56DD3B4C172D0D140841CAC98A58A819F4E28EDA5D6E45711DDD64F6A439F68B6A7870CD7DAFD69A919CB870207FE4BB206F92BE3D53C221B019E0797E739EBA4"); //注册信息
  410. pJson.MasterOptions(1, "STNO", false); //主从关系
  411. SetCookieAndURL(pJson);// 设置控件调用的Cookie值,判断是否安装了打印控件
  412. string strSql = @"SELECT DocNO,MTIME,MUSERName FROM icsCAnew a
  413. WHERE a.DocNO IN (" + keyValue.TrimEnd(',') + ") and a.WorkPoint='" + WorkPoint + "'";
  414. DataTable dtInInfo = DbHelper.ExecuteTable(DbHelper.ConnectionString, CommandType.Text, strSql, true, null);
  415. // strSql = @"SELECT Row_Number() OVER (partition by a.STNO ORDER BY a.CREATETIME desc) AS rowno,
  416. //c.STNO,c.ITEMCODE,c.PLANQTY,c.LotnoQTY,c.CartonNOQTY,b.INVNAME,b.INVSTD,b.INVPARSETYPE,b.INVTYPE,b.INVDESC,b.INVUOM,b.INVMACHINETYPE,d.StorageName
  417. //FROM
  418. // (select aa.stno,aa.itemcode,aa.WorkPoint,sum(aa.PLANQTY) PLANQTY,count(aa.lotno) LotnoQTY,count(bb.CartonNO) CartonNOQTY
  419. // from ICSASNDETAIL aa
  420. // left join ICSITEMLot2Carton bb on aa.LOTNO=bb.lotno
  421. // group by aa.stno,aa.itemcode,aa.WorkPoint ) c
  422. // left join ICSASN a on c.stno=a.stno and c.WorkPoint=a.WorkPoint
  423. //LEFT JOIN dbo.ICSINVENTORY b ON c.ITEMCODE=b.INVCODE AND b.WorkPoint=c.WorkPoint
  424. //left join dbo.icsstorage d on b.INVMACHINETYPE=d.StorageCode
  425. // WHERE c.STNO IN (" + keyValue.TrimEnd(',') + ") and c.WorkPoint='" + WorkPoint + "'";
  426. //DataTable dtInMaterial = DbHelper.ExecuteTable(DbHelper.ConnectionString, CommandType.Text, strSql, true, null);
  427. string strPrintTempFile = pJson.ShowReport(dtInInfo); //产生JSON文件内容
  428. //把服务器的URL + 此文件名 传递给控件,由控件下载还原数据进行打印
  429. string strServerURL = GetUrlPath() + "PrintTemp/";
  430. string strData = strServerURL + strPrintTempFile;
  431. strPrintData = PrintFunction.EnBase64(strData);
  432. var JsonData = new
  433. {
  434. strPrintData_1 = strPrintData,
  435. bIsInstallPrintControl_1 = bIsInstallPrintControl,
  436. strPrintControlCookie_1 = strPrintControlCookie
  437. };
  438. string sql = @"UPDATE dbo.ICSASN
  439. SET ADDITION1=ISNULL(ADDITION1,0)+1,
  440. ADDITION2=CONVERT(varchar(100), GETDATE(), 21)
  441. WHERE STNO in (" + keyValue.TrimEnd(',') + ") and WorkPoint='" + WorkPoint + "'";
  442. SqlHelper.ExecuteNonQuery(sql);
  443. return Content(JsonData.ToJson());
  444. }
  445. }
  446. }