人民医院API

FaultRepairController.cs 42KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085
  1. using RMYY_CallCenter_Api.DB;
  2. using RMYY_CallCenter_Api.Models;
  3. using RMYY_CallCenter_Api.Models.Enum;
  4. using RMYY_CallCenter_Api.Models.Input;
  5. using RMYY_CallCenter_Api.Utility;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Web;
  12. using System.Web.Mvc;
  13. namespace RMYY_CallCenter_Api.Controllers
  14. {
  15. public class FaultRepairController : BaseController
  16. {
  17. private BLL .T_FaultRepair_Base baseBll = new BLL.T_FaultRepair_Base();
  18. private BLL.T_FaultRepair_Evaluate evaBll = new BLL.T_FaultRepair_Evaluate();
  19. private BLL.T_FaultRepair_OperationLog logBll = new BLL.T_FaultRepair_OperationLog();
  20. private BLL.T_FaultRepair_Process dealBll = new BLL.T_FaultRepair_Process();
  21. Bll.T_Sys_GongDan gdbll = new Bll.T_Sys_GongDan();
  22. private Bll.T_Sys_SystemConfig configBll = new Bll.T_Sys_SystemConfig();
  23. private Bll.T_Sys_DictionaryValue dictionaryValueBLL = new Bll.T_Sys_DictionaryValue();
  24. /// <summary>
  25. /// 上传附件
  26. /// </summary>
  27. /// <returns></returns>
  28. //[Authority]
  29. public ActionResult UploadFile()
  30. {
  31. #region 多个上传
  32. HttpFileCollectionBase files = Request.Files;
  33. if (files.Count > 0)
  34. {
  35. List<Model.T_Sys_Accessories> acs = new List<Model.T_Sys_Accessories>();
  36. string path = "/Upload/Files/" + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/";
  37. for (int i = 0; i < files.Count; i++)
  38. {
  39. HttpPostedFileBase file = files[i];
  40. string name = FileHelper.Upload(file, path);
  41. Model.T_Sys_Accessories model_T_Sys_Accessories = new Model.T_Sys_Accessories();
  42. model_T_Sys_Accessories.F_AddTime = DateTime.Now;//上传时间
  43. model_T_Sys_Accessories.F_FileName = name;//附件名称
  44. model_T_Sys_Accessories.F_FileType = Path.GetExtension(file.FileName);//附件类型
  45. model_T_Sys_Accessories.F_FileUrl = path + name;//附件地址
  46. model_T_Sys_Accessories.F_Size = file.ContentLength;
  47. model_T_Sys_Accessories.F_UserCode = User.F_UserCode;//上传人
  48. int id = new Bll.T_Sys_Accessories().Add(model_T_Sys_Accessories);
  49. model_T_Sys_Accessories.F_FileId = id;
  50. acs.Add(model_T_Sys_Accessories);
  51. }
  52. return Success("成功", acs);
  53. }
  54. else
  55. {
  56. return Error("请选择要上传的文件");
  57. }
  58. #endregion
  59. }
  60. //添加工单
  61. /// <summary>
  62. ///添加
  63. /// </summary>
  64. /// <param name="input"></param>
  65. /// <returns></returns>
  66. public ActionResult AddFaultRepairWorkOrder(T_FaultRepairBaseinput input)
  67. {
  68. Model.T_FaultRepair_Base model = new Model.T_FaultRepair_Base();
  69. model.F_Applicant = input.Applicant;
  70. model.F_ApplicationDept = input.ApplicationDept.Trim();
  71. model.F_Phone = input.Phone;
  72. model.F_Applicantsphone = input.Applicantsphone;
  73. model.F_WorkOrderCategory = input.WorkOrderCategory.Trim();
  74. model.F_Content = input.Content;
  75. model.F_PlaceOfRepair = input.PlaceOfRepair;
  76. model.F_File = input.File;
  77. model.F_WorkOrderCode = DateTime.Now.ToString("yyyyMMddHHmmssfff");//工单编号
  78. if (input.IsEnd == 1)
  79. {
  80. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  81. }
  82. else if (!string.IsNullOrEmpty(input.Maintenancer) && !string.IsNullOrEmpty(input.MaintenanceDept))
  83. {
  84. model.F_AssignTime = DateTime.Now;
  85. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_ParentID=0 and F_Name='故障报修'");
  86. int timeout = listgd.First().F_TimeOut;
  87. model.F_Deadline = DateTime.Now.AddHours(timeout);
  88. model.F_MaintenanceDept = input.MaintenanceDept;
  89. model.F_Maintenancer = input.Maintenancer;
  90. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  91. }
  92. else
  93. {
  94. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  95. }
  96. model.F_CreateTime = DateTime.Now;
  97. model.F_CreateUser = User.F_UserCode;
  98. model.F_CreateUserDept = User.F_DeptId.ToString();
  99. if (baseBll.Add(model) > 0)
  100. {
  101. AddAddlog(model.F_WorkOrderCode);
  102. if ( !string.IsNullOrEmpty(input.MaintenanceDept))
  103. {
  104. AddAssignlog(model.F_WorkOrderCode, input.MaintenanceDept);
  105. }
  106. if (input.IsEnd == 1)
  107. {
  108. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, model.F_WorkOrderCode);
  109. }
  110. return Success("添加成功!");
  111. }
  112. else return Error("添加失败!");
  113. }
  114. //编辑工单
  115. /// <summary>
  116. ///编辑
  117. /// </summary>
  118. /// <param name="input"></param>
  119. /// <returns></returns>
  120. public ActionResult UpdateFaultRepairWorkOrder(T_FaultRepairBaseinput input)
  121. {
  122. Model.T_FaultRepair_Base model= baseBll.GetModel(input.WorkOrderCode);
  123. model.F_Applicant = input.Applicant;
  124. model.F_ApplicationDept = input.ApplicationDept;
  125. model.F_Phone = input.Phone;
  126. model.F_Applicantsphone = input.Applicantsphone;
  127. model.F_WorkOrderCategory = input.WorkOrderCategory;
  128. model.F_Content = input.Content;
  129. model.F_PlaceOfRepair = input.PlaceOfRepair;
  130. model.F_File = input.File;
  131. bool addassignlog = false;
  132. if (input.IsEnd == 1)
  133. {
  134. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  135. }
  136. else if (string.IsNullOrEmpty(model.F_MaintenanceDept))
  137. {
  138. if (!string.IsNullOrEmpty(input.MaintenanceDept))
  139. {
  140. model.F_AssignTime = DateTime.Now;
  141. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_ParentID=0 and F_Name='故障报修'");
  142. int timeout = listgd.First().F_TimeOut;
  143. model.F_Deadline = DateTime.Now.AddHours(timeout);
  144. model.F_MaintenanceDept = input.MaintenanceDept;
  145. model.F_Maintenancer = input.Maintenancer;
  146. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  147. addassignlog = true;
  148. }
  149. }
  150. else
  151. {
  152. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  153. }
  154. model.F_UpdateTime = DateTime.Now;
  155. if (baseBll.Update(model) )
  156. {
  157. if (addassignlog)
  158. {
  159. AddAssignlog(model.F_WorkOrderCode, input.MaintenanceDept);
  160. }
  161. if (input.IsEnd == 1)
  162. {
  163. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, model.F_WorkOrderCode);
  164. }
  165. return Success("编辑成功!");
  166. }
  167. else return Error("编辑失败!");
  168. }
  169. //查收
  170. public ActionResult CheckWorkOrder(string WorkOrderCode)
  171. {
  172. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  173. if (model != null)
  174. {
  175. if (model.F_Maintenancer == User.F_UserCode)
  176. {
  177. model.F_UpdateTime = DateTime.Now;
  178. model.F_Maintenancer = User.F_UserCode;
  179. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.dealing;
  180. AddOperatorLog("查收了工单", (int)EnumOperatorType.check, model.F_WorkOrderCode);
  181. return Success(" 查收成功!");
  182. }
  183. else
  184. {
  185. return Error("你没有权限查收!");
  186. }
  187. }
  188. return Error("工单不存在!");
  189. }
  190. //退单
  191. public ActionResult BackWorkOrder(string WorkOrderCode,string BackReason)
  192. {
  193. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  194. if (model != null)
  195. {
  196. if (model.F_MaintenanceDept == User.F_DeptId.ToString())
  197. {
  198. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  199. model.F_Maintenancer = "";
  200. model.F_MaintenanceDept = "";
  201. model.F_AssignTime = null;
  202. model.F_UpdateTime = DateTime.Now;
  203. model.F_Deadline = null;
  204. string s = "";
  205. if (!string.IsNullOrEmpty(BackReason))
  206. {
  207. s += ",退回原因:" + BackReason;
  208. }
  209. AddOperatorLog("退回了工单" + s, (int)EnumOperatorType.back, model.F_WorkOrderCode);
  210. return Success(" 退回成功!");
  211. }
  212. else
  213. {
  214. return Error("你没有权限退回!");
  215. }
  216. }
  217. return Error("工单不存在!");
  218. }
  219. //处理完成 、异常完结 Type=0 正常完成 Type=1异常完结 判断是不是返修的工单
  220. public ActionResult DealWorkOrder(string WorkOrderCode, int Type, string Result,string File)
  221. {
  222. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  223. //判断是不是返修的,
  224. string sql = "select * from T_FaultRepair_Process where F_WorkOrderCode='" + WorkOrderCode + "' and F_ReturnReason is not null and F_Maintenancer='" + User.F_UserCode + "'";
  225. DataTable dt = DbHelperSQL.Query(sql).Tables[0];
  226. if (model != null)
  227. {
  228. if (Type == 0)
  229. {
  230. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.dealed;
  231. //是返修的工单
  232. if (dt != null && dt.Columns.Count > 0)
  233. {
  234. int procid= Convert.ToInt32( dt.Rows[0]["F_ProcessId"].ToString());
  235. string updatesql = "UPDATE T_FaultRepair_Process set F_ProcessingTime=GETDATE() ,F_Result='"+ Result + "' ,F_File='"+ File + "',F_Maintenancer='"+User.F_UserCode+"',F_MaintenanceDept='"+User.F_DeptId+"' where F_ProcessId='"+procid+"'";
  236. if (DbHelperSQL.ExecuteSql(updatesql) > 0)
  237. {
  238. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, WorkOrderCode);
  239. return Success("处理完成");
  240. }
  241. else
  242. return Error("处理失败");
  243. }
  244. Model.T_FaultRepair_Process promodel = new Model.T_FaultRepair_Process();
  245. promodel.F_Isdelete = 0;
  246. promodel.F_MaintenanceDept = model.F_MaintenanceDept;
  247. promodel.F_Maintenancer = model.F_Maintenancer;
  248. promodel.F_ProcessingTime = DateTime.Now;
  249. promodel.F_Result = Result;
  250. promodel.F_File = File;
  251. promodel.F_WorkOrderCode = WorkOrderCode;
  252. if (dealBll.Add(promodel) > 0)
  253. {
  254. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, WorkOrderCode);
  255. return Success("处理完成");
  256. }
  257. else
  258. return Error("处理失败");
  259. }
  260. else
  261. {
  262. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.exceptionended;
  263. //是返修的工单
  264. if (dt != null && dt.Columns.Count > 0)
  265. {
  266. int procid = Convert.ToInt32(dt.Rows[0]["F_ProcessId"].ToString());
  267. string updatesql = "UPDATE T_FaultRepair_Process set F_ProcessingTime=GETDATE() ,F_Result='" + Result + "' ,F_File='" + File + "',F_UpdateTime= GETDATE() where F_ProcessId='" + procid + "'";
  268. if (DbHelperSQL.ExecuteSql(updatesql) > 0)
  269. {
  270. AddOperatorLog("异常完结了工单", (int)EnumOperatorType.exceptionended, WorkOrderCode);
  271. return Success("异常完结");
  272. }
  273. else
  274. return Error("异常完结失败");
  275. }
  276. Model.T_FaultRepair_Process promodel = new Model.T_FaultRepair_Process();
  277. promodel.F_Isdelete = 0;
  278. promodel.F_MaintenanceDept = model.F_MaintenanceDept;
  279. promodel.F_Maintenancer = model.F_Maintenancer;
  280. promodel.F_ProcessingTime = DateTime.Now;
  281. promodel.F_Result = Result;
  282. promodel.F_File = File;
  283. promodel.F_WorkOrderCode = WorkOrderCode;
  284. if (dealBll.Add(promodel) > 0)
  285. {
  286. AddOperatorLog("异常完结了工单", (int)EnumOperatorType.exceptionended, WorkOrderCode);
  287. return Success("异常完结");
  288. }
  289. else
  290. return Error("异常完结失败");
  291. }
  292. }
  293. return Error("工单不存在");
  294. }
  295. //协助.内外协助都生成新工单 Type 0是内部协助 1是外部协助
  296. public ActionResult AssistWorkOrder(string WorkOrderCode,string WorkOrderCategory, string Maintenancer,string Content,int Type)
  297. {
  298. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  299. Model.T_FaultRepair_Base newmodel = new Model.T_FaultRepair_Base();
  300. if (Type == 0)
  301. {
  302. if (!string.IsNullOrEmpty(Maintenancer))
  303. {
  304. return Error("请选择维修人");
  305. }
  306. newmodel.F_Applicant = model.F_Applicant;
  307. newmodel.F_Applicantsphone = model.F_Applicantsphone;
  308. newmodel.F_ApplicationDept = model.F_ApplicationDept;
  309. newmodel.F_Phone = model.F_Phone;
  310. newmodel.F_WorkOrderCategory = WorkOrderCategory;
  311. newmodel.F_Content = Content;
  312. newmodel.F_PlaceOfRepair = model.F_PlaceOfRepair;
  313. newmodel.F_Maintenancer = Maintenancer;
  314. newmodel.F_MaintenanceDept = model.F_MaintenanceDept;
  315. newmodel.F_AssignTime = DateTime.Now;
  316. newmodel.F_File = model.F_File;
  317. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_ParentID=0 and F_Name='故障报修'");
  318. int timeout = listgd.First().F_TimeOut;
  319. newmodel.F_Deadline = DateTime.Now.AddHours(timeout);
  320. newmodel.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  321. newmodel.F_WorkOrderCode = DateTime.Now.ToString("yyyyMMddHHmmssfff");//工单编号
  322. newmodel.F_CreateTime = DateTime.Now;
  323. newmodel.F_CreateUser = User.F_UserCode;
  324. newmodel.F_CreateUserDept = User.F_DeptId.ToString();
  325. if (baseBll.Add(newmodel) > 0)
  326. {
  327. AddAddlog(newmodel.F_WorkOrderCode);
  328. if (!string.IsNullOrEmpty(Maintenancer))
  329. {
  330. AddAssignlog(newmodel.F_WorkOrderCode, Maintenancer);
  331. }
  332. //更新model
  333. if (!string.IsNullOrEmpty(model.F_InternalWorkOrderCode))
  334. {
  335. model.F_InternalWorkOrderCode +=","+ newmodel.F_WorkOrderCode;
  336. }
  337. else
  338. {
  339. model.F_InternalWorkOrderCode = newmodel.F_WorkOrderCode;
  340. }
  341. model.F_UpdateTime = DateTime.Now;
  342. baseBll.Update(model);
  343. AddInternalasslog(model.F_WorkOrderCode, newmodel.F_WorkOrderCode);
  344. return Success("添加成功!");
  345. }
  346. else return Error("添加失败!");
  347. }
  348. //外协作
  349. else
  350. {
  351. newmodel.F_Applicant = model.F_Applicant;
  352. newmodel.F_Applicantsphone = model.F_Applicantsphone;
  353. newmodel.F_ApplicationDept = model.F_ApplicationDept;
  354. newmodel.F_Phone = model.F_Phone;
  355. newmodel.F_WorkOrderCategory = WorkOrderCategory;
  356. newmodel.F_Content = Content;
  357. newmodel.F_PlaceOfRepair = model.F_PlaceOfRepair;
  358. newmodel.F_Maintenancer = Maintenancer;
  359. newmodel.F_MaintenanceDept = model.F_MaintenanceDept;
  360. newmodel.F_File = model.F_File;
  361. newmodel.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  362. newmodel.F_WorkOrderCode = DateTime.Now.ToString("yyyyMMddHHmmssfff");//工单编号
  363. newmodel.F_CreateTime = DateTime.Now;
  364. newmodel.F_CreateUser = User.F_UserCode;
  365. newmodel.F_CreateUserDept = User.F_DeptId.ToString();
  366. if (baseBll.Add(newmodel) > 0)
  367. {
  368. AddOperatorLog("创建了工单", (int)EnumOperatorType.add, newmodel.F_WorkOrderCode);
  369. //更新原来的工单model
  370. if (!string.IsNullOrEmpty(model.F_ExternalWorkOrderCode))
  371. {
  372. model.F_ExternalWorkOrderCode += "," + newmodel.F_WorkOrderCode;
  373. }
  374. else
  375. {
  376. model.F_ExternalWorkOrderCode = newmodel.F_WorkOrderCode;
  377. }
  378. model.F_UpdateTime = DateTime.Now;
  379. baseBll.Update(model);
  380. AddExternalasslog(model.F_WorkOrderCode, newmodel.F_WorkOrderCode);
  381. return Success("添加成功!");
  382. }
  383. else return Error("添加失败!");
  384. }
  385. }
  386. //维修员的列表 待接单 待完成 已完成
  387. public ActionResult MaintenancerList( )
  388. {
  389. string sql = " and F_IsDelete=0 ";
  390. //待接单1 待完成 2 已完成 3
  391. string strpageindex = RequestString.GetQueryString("page");
  392. int pageindex = 1;
  393. string strpagesize = RequestString.GetQueryString("pagesize");
  394. int pagesize = 10;
  395. int strstate = RequestString.GetInt("state", -1);
  396. string strname = HttpUtility.UrlDecode(RequestString.GetQueryString("name"));
  397. string strtel = HttpUtility.UrlDecode(RequestString.GetQueryString("tel"));
  398. string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
  399. string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
  400. string strworkcode = HttpUtility.UrlDecode(RequestString.GetQueryString("workordercode"));
  401. //当前登录人只能看到当前部门的工单。管理员可以查看所有的工单
  402. if (User.F_RoleCode != "GLY")
  403. {
  404. sql += " and F_MaintenanceDept='" + User.F_DeptId + "'";
  405. }
  406. #region 搜索条件
  407. if (strpageindex.Trim() != "")
  408. {
  409. pageindex = Convert.ToInt32(strpageindex);
  410. }
  411. if (strpagesize.Trim() != "")
  412. {
  413. pagesize = Convert.ToInt32(strpagesize);
  414. }
  415. if (strname.Trim() != "" && strname != "undefined")
  416. {
  417. sql += " and F_Applicant = '" + strname + "' ";
  418. }
  419. if (strtel.Trim() != "" && strtel != "undefined")
  420. {
  421. sql += " and (F_Applicantsphone like '%" + strtel + "%' or F_Phone like '%" + strtel + "%') ";
  422. }
  423. if (strworkcode.Trim() != "" && strworkcode != "undefined")
  424. {
  425. sql += " and F_WorkOrderCode='" + strworkcode + "'";
  426. }
  427. if (strstarttime.Trim() != "" && strstarttime != "undefined")
  428. {
  429. if (strendtime.Trim() != "" && strendtime != "undefined")
  430. {
  431. sql += " and F_CreateTime between '" + strstarttime +
  432. "' AND '" + strendtime + "'";
  433. }
  434. else
  435. {
  436. sql += " and F_CreateTime>='" + strstarttime + "' ";
  437. }
  438. }
  439. else
  440. {
  441. if (strendtime.Trim() != "" && strendtime != "undefined")
  442. {
  443. sql += " and F_CreateTime<='" + strendtime + "' ";
  444. }
  445. }
  446. #endregion
  447. switch (strstate)
  448. {
  449. case 1:
  450. sql += " and F_WorkOrderState=1";
  451. break;
  452. case 2:
  453. sql += " and F_WorkOrderState=2";
  454. break;
  455. case 3:
  456. sql += " and F_WorkOrderState>3";
  457. break;
  458. }
  459. int recordCount = 0;
  460. DataTable datatable = Bll.PagerBll.GetListPager
  461. ("T_FaultRepair_Base ",
  462. "F_WorkOrderId",
  463. "*",
  464. sql,
  465. "order by F_WorkOrderId desc",
  466. pagesize,
  467. pageindex,
  468. true,
  469. out recordCount
  470. );
  471. datatable.Columns.Add("GapTime", typeof(string));//执行时限
  472. datatable.Columns.Add("AssistanceState", typeof(string));//协作工单的状态
  473. datatable.Columns.Add("StateName", typeof(string));//协作工单的状态
  474. datatable.Columns.Add("Buttons", typeof(object));//操作按钮
  475. foreach (DataRow dr in datatable.Rows)
  476. {
  477. #region 执行时限 不是已完成的工单 展示这个字段
  478. if (Convert.ToInt32(dr["F_WorkOrderState"]) < 3)
  479. {
  480. if (!string.IsNullOrEmpty(dr["F_Deadline"].ToString()))
  481. {
  482. DateTime deadline = Convert.ToDateTime(dr["F_Deadline"]);
  483. TimeSpan ts = deadline.Subtract(DateTime.Now);
  484. double tss = double.Parse(Math.Round(ts.TotalSeconds, 0).ToString());
  485. if (tss < 0) { tss = -tss; }
  486. string gshsj = DateTimeConvert.parseTimeSeconds(tss, 1);
  487. if (deadline > DateTime.Now)
  488. {
  489. dr["GapTime"] = "剩余" + gshsj;
  490. }
  491. else
  492. {
  493. dr["GapTime"] = "超时" + gshsj;
  494. }
  495. }
  496. }
  497. #endregion
  498. #region 协作工单的状态
  499. if (!string.IsNullOrEmpty(dr["F_InternalWorkOrderCode"].ToString()) || !string.IsNullOrEmpty(dr["F_ExternalWorkOrderCode"].ToString()))
  500. {
  501. List<Model.T_FaultRepair_Base> modellist = baseBll.GetModelList("F_WorkOrderCode in ('" + dr["F_InternalWorkOrderCode"].ToString() + "') or F_WorkOrderCode in('" + dr["F_ExternalWorkOrderCode"].ToString() + "')");
  502. List<Model.T_FaultRepair_Base> modellistnew = modellist.Where(x => x.F_WorkOrderState < 3).ToList();
  503. if (modellistnew != null && modellistnew.Count > 0)
  504. {
  505. dr["AssistanceState"] = "未完成";
  506. }
  507. else
  508. {
  509. dr["AssistanceState"] = "已完成";
  510. }
  511. }
  512. #endregion
  513. #region 展示的工单状态
  514. if (Convert.ToInt32(dr["F_WorkOrderState"]) ==(int) EnumFaultRepairWorkOrderState.receive)
  515. {
  516. dr["StateName"] = "待接单";
  517. }
  518. else if (Convert.ToInt32( dr["F_WorkOrderState"] ) ==(int) EnumFaultRepairWorkOrderState.dealing)
  519. {
  520. dr["StateName"] = "待完成";
  521. }
  522. else
  523. {
  524. dr["StateName"] = "已完成";
  525. }
  526. #endregion
  527. #region 操作按钮
  528. var btns = new List<FaultButtonGroup.button>();
  529. //待查收 -查收 退回
  530. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive)
  531. {
  532. btns.Add(FaultButtonGroup.check());
  533. btns.Add(FaultButtonGroup.back());
  534. }
  535. if (dr["F_Maintenancer"].ToString() == User.F_UserCode)
  536. {
  537. //待完成 -协作 完成
  538. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing)
  539. {
  540. //没有协作
  541. if (!string.IsNullOrEmpty(dr["AssistanceState"].ToString()))
  542. {
  543. btns.Add(FaultButtonGroup.assistance());
  544. btns.Add(FaultButtonGroup.assign());
  545. btns.Add(FaultButtonGroup.finish());
  546. }
  547. else if (dr["AssistanceState"].ToString() == "未完成")
  548. {
  549. btns.Add(FaultButtonGroup.assistance());
  550. btns.Add(FaultButtonGroup.assign());
  551. }
  552. else
  553. {
  554. btns.Add(FaultButtonGroup.finish());
  555. }
  556. }
  557. dr["Buttons"] = btns;
  558. }
  559. #endregion
  560. }
  561. var obj = new
  562. {
  563. state = "success",
  564. message = "成功",
  565. rows = datatable,
  566. total = recordCount
  567. };
  568. return Content(obj.ToJson());
  569. }
  570. //报修人的列表 已上报 待评价 已完结
  571. public ActionResult MyCreateList()
  572. {
  573. DataTable dt = new DataTable();
  574. string sql = " and F_IsDelete=0 and F_CreateUser='"+User.F_UserCode+"'";
  575. string strpageindex = RequestString.GetQueryString("page");
  576. int pageindex = 1;
  577. string strpagesize = RequestString.GetQueryString("pagesize");
  578. int pagesize = 10;
  579. //待处理传2 已处理传3
  580. int strstate = RequestString.GetInt("state", -1);
  581. string strname = HttpUtility.UrlDecode(RequestString.GetQueryString("name"));
  582. string strtel = HttpUtility.UrlDecode(RequestString.GetQueryString("tel"));
  583. string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
  584. string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
  585. string strworkcode = HttpUtility.UrlDecode(RequestString.GetQueryString("workordercode"));
  586. #region 搜索条件
  587. if (strpageindex.Trim() != "")
  588. {
  589. pageindex = Convert.ToInt32(strpageindex);
  590. }
  591. if (strpagesize.Trim() != "")
  592. {
  593. pagesize = Convert.ToInt32(strpagesize);
  594. }
  595. if (strname.Trim() != "" && strname != "undefined")
  596. {
  597. sql += " and F_Applicant = '" + strname + "' ";
  598. }
  599. if (strtel.Trim() != "" && strtel != "undefined")
  600. {
  601. sql += " and (F_Applicantsphone like '%" + strtel + "%' or F_Phone like '%" + strtel + "%') ";
  602. }
  603. if (strworkcode.Trim() != "" && strworkcode != "undefined")
  604. {
  605. sql += " and F_WorkOrderCode='" + strworkcode + "'";
  606. }
  607. if (strstarttime.Trim() != "" && strstarttime != "undefined")
  608. {
  609. if (strendtime.Trim() != "" && strendtime != "undefined")
  610. {
  611. sql += " and F_CreateTime between '" + strstarttime +
  612. "' AND '" + strendtime + "'";
  613. }
  614. else
  615. {
  616. sql += " and F_CreateTime>='" + strstarttime + "' ";
  617. }
  618. }
  619. else
  620. {
  621. if (strendtime.Trim() != "" && strendtime != "undefined")
  622. {
  623. sql += " and F_CreateTime<='" + strendtime + "' ";
  624. }
  625. }
  626. #endregion
  627. switch (strstate)
  628. {
  629. case 2:
  630. sql += " and F_WorkOrderState<=2";
  631. break;
  632. case 3:
  633. sql += " and F_WorkOrderState>3";
  634. break;
  635. }
  636. int recordCount = 0;
  637. dt= Bll.PagerBll.GetListPager
  638. ("T_FaultRepair_Base ",
  639. "F_WorkOrderId",
  640. "*",
  641. sql,
  642. "order by F_WorkOrderId desc",
  643. pagesize,
  644. pageindex,
  645. true,
  646. out recordCount
  647. );
  648. dt.Columns.Add("GapTime", typeof(string));//执行时限
  649. dt.Columns.Add("AssistanceState", typeof(string));//协作工单的状态
  650. dt.Columns.Add("StateName", typeof(object));//展示的工单状态值
  651. dt.Columns.Add("Buttons", typeof(object));//操作按钮
  652. foreach (DataRow dr in dt.Rows)
  653. {
  654. #region 执行时限 不是已完成的工单 展示这个字段
  655. if (Convert.ToInt32(dr["F_WorkOrderState"]) < 3)
  656. {
  657. if (!string.IsNullOrEmpty(dr["F_Deadline"].ToString()))
  658. {
  659. DateTime deadline = Convert.ToDateTime(dr["F_Deadline"]);
  660. TimeSpan ts = deadline.Subtract(DateTime.Now);
  661. double tss = double.Parse(Math.Round(ts.TotalSeconds, 0).ToString());
  662. if (tss < 0) { tss = -tss; }
  663. string gshsj = DateTimeConvert.parseTimeSeconds(tss, 1);
  664. if (deadline > DateTime.Now)
  665. {
  666. dr["GapTime"] = "剩余" + gshsj;
  667. }
  668. else
  669. {
  670. dr["GapTime"] = "超时" + gshsj;
  671. }
  672. }
  673. }
  674. #endregion
  675. #region 展示的工单状态
  676. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.neworder || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive)
  677. {
  678. dr["StateName"] = "待接单";
  679. }
  680. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing)
  681. {
  682. dr["StateName"] = "已接单";
  683. }
  684. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealed)
  685. {
  686. dr["StateName"] = "待评价";
  687. }
  688. else {
  689. dr["StateName"] = "已完成";
  690. }
  691. #endregion
  692. #region 操作按钮
  693. var btns = new List<FaultButtonGroup.button>();
  694. //待接单 已接单 -自行解决
  695. if ( Convert.ToInt32( dr["F_WorkOrderState"]) ==(int)EnumFaultRepairWorkOrderState.neworder ||
  696. Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive ||
  697. Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing
  698. )
  699. {
  700. btns.Add(FaultButtonGroup.solve());
  701. }
  702. //待评价 评价
  703. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealed)
  704. {
  705. btns.Add(FaultButtonGroup.evaluate());
  706. }
  707. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.exceptionended)
  708. {
  709. btns.Add(FaultButtonGroup.evaluate());
  710. }
  711. dr["Buttons"] = btns;
  712. #endregion
  713. }
  714. var obj = new
  715. {
  716. state = "success",
  717. message = "成功",
  718. rows = dt,
  719. total = recordCount
  720. };
  721. return Content(obj.ToJson());
  722. }
  723. //工单详情
  724. public ActionResult GetWorkOrder()
  725. {
  726. string strworkorderid = HttpUtility.UrlDecode(RequestString.GetQueryString("WorkOrderCode"));
  727. Model.T_FaultRepair_Base model = baseBll.GetModel(strworkorderid);
  728. int type = RequestString.GetInt("type", 0);//0基本信息1处理结果2协作工单3工单流程4维修记录5评价
  729. if (!string.IsNullOrEmpty(strworkorderid))
  730. {
  731. switch (type)
  732. {
  733. case 0:
  734. //基本信息
  735. string sql = "select * from T_FaultRepair_Base where F_WorkOrderCode='" + strworkorderid + "'";
  736. DataTable dtbase = DbHelperSQL.Query(sql).Tables[0];
  737. return Success("获取成功", dtbase);
  738. case 1://处理结果
  739. string sqlcl = "select * from T_FaultRepair_Process where F_WorkOrderCode='" + strworkorderid + "'";
  740. DataTable dtcl = DbHelperSQL.Query(sqlcl).Tables[0];
  741. return Success("获取处理结果成功", dtcl);
  742. case 2://协作工单
  743. var internallist= baseBll.GetModelList(" F_WorkOrderCode in ('" + model.F_InternalWorkOrderCode + "')");
  744. var externallist = baseBll.GetModelList(" F_WorkOrderCode in ('" + model.F_ExternalWorkOrderCode + "')");
  745. var obj3 = new
  746. {
  747. internaldata = internallist,
  748. externaldata= externallist
  749. };
  750. return Success("获取协作工单成功", obj3);
  751. case 3://工单流程
  752. //var loglist= logBll.GetModelList(" F_WorkOrderCode='" + strworkorderid + "'" + " order by F_OperationTime desc");
  753. var sqllog = "select *,[dbo].[GetUserName] username from T_FaultRepair_OperationLog where F_WorkOrderCode = '" + strworkorderid + "' " + " order by F_OperationTime desc";
  754. DataTable dtlog = DbHelperSQL.Query(sqllog).Tables[0];
  755. return Success("获取工单流程成功", dtlog);
  756. case 4://维修记录
  757. string sqlcl2 = "select * from T_FaultRepair_Process where F_WorkOrderCode='" + strworkorderid + "'";
  758. DataTable dtcl2 = DbHelperSQL.Query(sqlcl2).Tables[0];
  759. return Success("获取处理结果成功", dtcl2);
  760. case 5://评价
  761. string sqle = "select * from T_FaultRepair_Evaluate where F_WorkOrderCode='" + strworkorderid + "'";
  762. DataTable dte = DbHelperSQL.Query(sqle).Tables[0];
  763. return Success("获取处理结果成功", dte);
  764. }
  765. }
  766. return Error("没传参数");
  767. }
  768. //转派 ,派给自己的工单 转给同部门的别的人
  769. public ActionResult Transfer(string WorkOrderCode,string ToUserCode)
  770. {
  771. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  772. if (model != null && model.F_Maintenancer == User.F_UserCode)
  773. {
  774. model.F_Maintenancer = ToUserCode;
  775. AddOperatorLog("转派工单给" + ToUserCode, (int)EnumOperatorType.transfer, WorkOrderCode);
  776. }
  777. return Error("暂时没有权限操作");
  778. }
  779. // 返修
  780. public ActionResult ReturnWorkOrder(string WorkOrderCode, string ReturnReason)
  781. {
  782. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  783. if (model != null && model.F_CreateUser==User.F_UserCode)
  784. {
  785. //判断返工是不是规定的时间内,工单状态是已完结的工单
  786. Model.T_FaultRepair_Process promodel = new Model.T_FaultRepair_Process();
  787. promodel.F_Isdelete = 0;
  788. promodel.F_MaintenanceDept = model.F_MaintenanceDept;
  789. promodel.F_Maintenancer = model.F_Maintenancer;
  790. promodel.F_ReturnReason = ReturnReason;
  791. promodel.F_WorkOrderCode = WorkOrderCode;
  792. if (dealBll.Add(promodel) > 0)
  793. {
  794. AddOperatorLog("提交了返工", (int)EnumOperatorType.submitreturn, WorkOrderCode);
  795. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.dealing;
  796. model.F_ReturnNum += model.F_ReturnNum + 1;
  797. model.F_UpdateTime = DateTime.Now;
  798. baseBll.Update(model);
  799. return Success("返工成功");
  800. }
  801. return Error("返工失败");
  802. }
  803. return Error("暂时没有权限操作");
  804. }
  805. //评价
  806. public ActionResult EvaluateWorkOrder(string WorkOrderCode, int Attitude, int Quality, string EvaluateContent )
  807. {
  808. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  809. Model.T_FaultRepair_Evaluate evamodel = new Model.T_FaultRepair_Evaluate();
  810. if (model != null)
  811. {
  812. if (model.F_CreateUser == User.F_UserCode)
  813. {
  814. evamodel.F_EvaluateContent = EvaluateContent;
  815. evamodel.F_Quality = Quality;
  816. evamodel.F_Attitude = Attitude;
  817. evamodel.F_Evaluator = User.F_UserCode;
  818. evamodel.F_EvaluationTime = DateTime.Now;
  819. evamodel.F_Isdelete = 0;
  820. evamodel.F_WorkOrderCode = WorkOrderCode;
  821. BLL.T_FaultRepair_Evaluate evabll = new BLL.T_FaultRepair_Evaluate();
  822. if (evabll.Add(evamodel) > 0)
  823. {
  824. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  825. model.F_UpdateTime = DateTime.Now;
  826. baseBll.Update(model);
  827. AddOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, model.F_WorkOrderCode);
  828. return Success("评价成功");
  829. }
  830. return Error("评价失败");
  831. }
  832. else
  833. {
  834. return Error("没有权限评价");
  835. }
  836. }
  837. return Error("评价失败");
  838. }
  839. #region 添加操作记录
  840. public bool AddOperatorLog(string content,int type,string workordercode)
  841. {
  842. Model.T_FaultRepair_OperationLog model = new Model.T_FaultRepair_OperationLog();
  843. model.F_LogContent = content;
  844. model.F_OperationTime = DateTime.Now;
  845. model.F_OperationType = type;
  846. model.F_Operator = User.F_UserCode;
  847. model.F_WorkOrderCode = workordercode;
  848. logBll.Add(model);
  849. return true;
  850. }
  851. public void AddAddlog(string workordercode)
  852. {
  853. AddOperatorLog("创建报修工单", (int)EnumOperatorType.add, workordercode);
  854. }
  855. public void AddAssignlog(string workordercode,string maintenancer)
  856. {
  857. AddOperatorLog("指派工单给" + maintenancer, (int)EnumOperatorType.assign, workordercode);
  858. }
  859. public void AddInternalasslog(string workordercode, string newworkordercode)
  860. {
  861. AddOperatorLog("创建内协作工单" + newworkordercode, (int)EnumOperatorType.internalassistance, workordercode);
  862. }
  863. public void AddExternalasslog(string workordercode, string newworkordercode)
  864. {
  865. AddOperatorLog("创建外协作工单" + newworkordercode, (int)EnumOperatorType.externalassistance, workordercode);
  866. }
  867. #endregion
  868. }
  869. }