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.

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