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.

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