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.

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