人民医院API

FaultRepairController.cs 44KB

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