人民医院API

FaultRepairController.cs 94KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206
  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.ComponentModel;
  9. using System.Data;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Reflection;
  13. using System.Web;
  14. using System.Web.Mvc;
  15. namespace RMYY_CallCenter_Api.Controllers
  16. {
  17. public class FaultRepairController : BaseController
  18. {
  19. private BLL .T_FaultRepair_Base baseBll = new BLL.T_FaultRepair_Base();
  20. private BLL.T_FaultRepair_Evaluate evaBll = new BLL.T_FaultRepair_Evaluate();
  21. private BLL.T_FaultRepair_OperationLog logBll = new BLL.T_FaultRepair_OperationLog();
  22. private BLL.T_FaultRepair_Process dealBll = new BLL.T_FaultRepair_Process();
  23. Bll.T_Sys_GongDan gdbll = new Bll.T_Sys_GongDan();
  24. private Bll.T_Sys_SystemConfig configBll = new Bll.T_Sys_SystemConfig();
  25. private Bll.T_Sys_DictionaryValue dictionaryValueBLL = new Bll.T_Sys_DictionaryValue();
  26. private Bll.T_Sys_Department departmentBLL = new Bll.T_Sys_Department();
  27. private Bll.T_InvolvedEquip_RepairProcess equipbll = new Bll.T_InvolvedEquip_RepairProcess();
  28. public DataTable GetFileData(string ids, string prefix)
  29. {
  30. DataTable dt = DbHelperSQL.Query("select * from T_Sys_Accessories WITH(NOLOCK) where F_FileId in (" + ids + ")").Tables[0];
  31. foreach (DataRow dr in dt.Rows)
  32. {
  33. dr["F_FileUrl"] = prefix + dr["F_FileUrl"].ToString();
  34. }
  35. return dt;
  36. }
  37. /// <summary>
  38. /// 上传附件
  39. /// </summary>
  40. /// <returns></returns>
  41. //[Authority]
  42. public ActionResult UploadFile()
  43. {
  44. #region 多个上传
  45. HttpFileCollectionBase files = Request.Files;
  46. if (files.Count > 0)
  47. {
  48. List<Model.T_Sys_Accessories> acs = new List<Model.T_Sys_Accessories>();
  49. string path = "/Upload/Files/" + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/";
  50. for (int i = 0; i < files.Count; i++)
  51. {
  52. HttpPostedFileBase file = files[i];
  53. string name = FileHelper.Upload(file, path);
  54. Model.T_Sys_Accessories model_T_Sys_Accessories = new Model.T_Sys_Accessories();
  55. model_T_Sys_Accessories.F_AddTime = DateTime.Now;//上传时间
  56. model_T_Sys_Accessories.F_FileName = name;//附件名称
  57. model_T_Sys_Accessories.F_FileType = Path.GetExtension(file.FileName);//附件类型
  58. model_T_Sys_Accessories.F_FileUrl = path + name;//附件地址
  59. model_T_Sys_Accessories.F_Size = file.ContentLength;
  60. model_T_Sys_Accessories.F_UserCode = User.F_UserCode;//上传人
  61. int id = new Bll.T_Sys_Accessories().Add(model_T_Sys_Accessories);
  62. model_T_Sys_Accessories.F_FileId = id;
  63. acs.Add(model_T_Sys_Accessories);
  64. }
  65. return Success("成功", acs);
  66. }
  67. else
  68. {
  69. return Error("请选择要上传的文件");
  70. }
  71. #endregion
  72. }
  73. //添加工单
  74. /// <summary>
  75. ///添加
  76. /// </summary>
  77. /// <param name="input"></param>
  78. /// <returns></returns>
  79. public ActionResult AddFaultRepairWorkOrder(T_FaultRepairBaseinput input)
  80. {
  81. Model.T_FaultRepair_Base model = new Model.T_FaultRepair_Base();
  82. model.F_Applicant = input.Applicant;
  83. if (string.IsNullOrEmpty(input.ApplicationDept))
  84. {
  85. return Error("申请部门是必填");
  86. }
  87. model.F_ApplicationDept = input.ApplicationDept.Trim();
  88. model.F_Phone = input.Phone;
  89. model.F_Applicantsphone = input.Applicantsphone;
  90. if (string.IsNullOrEmpty(input.WorkOrderCategory))
  91. {
  92. return Error("工单类别是必填");
  93. }
  94. model.F_WorkOrderCategory = input.WorkOrderCategory.Trim();
  95. model.F_Content = input.Content;
  96. model.F_PlaceOfRepair = input.PlaceOfRepair;
  97. model.F_File = input.File;
  98. model.F_WorkOrderCode = DateTime.Now.ToString("yyyyMMddHHmmssfff");//工单编号
  99. if (input.IsEnd == 1)
  100. {
  101. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  102. model.F_MaintenanceDept = User.F_DeptId.ToString();
  103. model.F_Maintenancer = User.F_UserCode;
  104. model.F_Endtime = DateTime.Now;
  105. model.F_Deadline = DateTime.Now;
  106. }
  107. else if (!string.IsNullOrEmpty(input.MaintenanceDept))
  108. {
  109. model.F_MaintenanceDept = input.MaintenanceDept;
  110. if (!string.IsNullOrEmpty(input.Maintenancer))
  111. {
  112. model.F_Maintenancer = input.Maintenancer;
  113. model.F_AssignTime = DateTime.Now;
  114. model.F_AssignUser = User.F_UserCode;
  115. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='"+model.F_WorkOrderCategory+"'");
  116. int timeout = listgd.First().F_TimeOut;
  117. model.F_Deadline = DateTime.Now.AddHours(timeout);
  118. }
  119. else
  120. {
  121. var user = GetBeOnDuty(input.MaintenanceDept);
  122. if (user != null && user.Count > 1)
  123. {
  124. model.F_Maintenancer = user[0];
  125. input.Maintenancer = user[0];
  126. model.F_AssignTime = DateTime.Now;
  127. model.F_AssignUser = User.F_UserCode;
  128. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  129. int timeout = listgd.First().F_TimeOut;
  130. model.F_Deadline = DateTime.Now.AddHours(timeout);
  131. }
  132. else
  133. {
  134. return Error("请选择指派人员");
  135. }
  136. }
  137. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  138. }
  139. else
  140. {
  141. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  142. }
  143. model.F_CreateTime = DateTime.Now;
  144. model.F_CreateUser = User.F_UserCode;
  145. model.F_CreateUserDept = User.F_DeptId.ToString();
  146. if (input.LeaveRecordId != null && input.LeaveRecordId > 0)
  147. {
  148. var ld = new Bll.T_Call_LeaveRecord().GetModel(input.LeaveRecordId.Value);
  149. if (ld != null)
  150. {
  151. ld.F_Status = 1;
  152. ld.F_DealTime = DateTime.Now;
  153. ld.F_UserId = User.F_UserId;
  154. ld.F_UserCode = User.F_UserCode;
  155. ld.F_UserName = User.F_UserName;
  156. new Bll.T_Call_LeaveRecord().Update(ld);
  157. model.F_LeaveRecordId = input.LeaveRecordId;
  158. }
  159. }
  160. //if (input.CallRecordsId!=null && input.CallRecordsId>0)
  161. //{
  162. // var rd = new Bll.T_Call_CallRecords().GetModelByRecordId(input.CallRecordsId.ToString());
  163. // if (rd != null)
  164. // {
  165. // model.F_CallId = rd.CallId;
  166. // rd.WorkOrderId = model.F_WorkOrderCode;//.F_WorkOrderId;
  167. // rd.IsExitWorkOrder = true;
  168. // new Bll.T_Call_CallRecords().Update(rd);
  169. // model.F_CallRecordId = rd.CallRecordsId;
  170. // }
  171. //}
  172. //else
  173. if (!string.IsNullOrEmpty(input.CallId))
  174. {
  175. model.F_CallId = input.CallId;
  176. var rd = new Bll.T_Call_CallRecords().GetModelByCallId(input.CallId);
  177. if (rd != null)
  178. {
  179. rd.WorkOrderId = model.F_WorkOrderCode;//.F_WorkOrderId;
  180. rd.IsExitWorkOrder = true;
  181. new Bll.T_Call_CallRecords().Update(rd);
  182. model.F_CallRecordId = rd.CallRecordsId;
  183. }
  184. }
  185. int returnid = baseBll.Add(model);
  186. if (returnid > 0)
  187. {
  188. AddAddlog(model.F_WorkOrderCode);
  189. if ( !string.IsNullOrEmpty(input.MaintenanceDept))
  190. {
  191. AddAssignlog(model.F_WorkOrderCode, input.MaintenanceDept,input.Maintenancer);
  192. }
  193. if (input.IsEnd == 1)
  194. {
  195. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, model.F_WorkOrderCode);
  196. }
  197. return Success("添加成功!",returnid);
  198. }
  199. else return Error("添加失败!");
  200. }
  201. //综合保障中心编辑工单
  202. /// <summary>
  203. ///编辑
  204. /// </summary>
  205. /// <param name="input"></param>
  206. /// <returns></returns>
  207. public ActionResult UpdateFaultRepairWorkOrder(T_FaultRepairBaseinput input)
  208. {
  209. Model.T_FaultRepair_Base model= baseBll.GetModel(input.WorkOrderCode);
  210. model.F_Applicant = input.Applicant;
  211. model.F_ApplicationDept = input.ApplicationDept;
  212. model.F_Phone = input.Phone;
  213. model.F_Applicantsphone = input.Applicantsphone;
  214. model.F_WorkOrderCategory = input.WorkOrderCategory;
  215. model.F_Content = input.Content;
  216. model.F_PlaceOfRepair = input.PlaceOfRepair;
  217. model.F_File = input.File;
  218. bool addassignlog = false;
  219. //综合保障中心没有直接结束的按钮
  220. if (input.IsEnd == 1)
  221. {
  222. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  223. model.F_MaintenanceDept = User.F_DeptId.ToString();
  224. model.F_Endtime = DateTime.Now;
  225. model.F_Maintenancer = User.F_UserCode;
  226. }
  227. else if (!string.IsNullOrEmpty(input.MaintenanceDept))
  228. {
  229. if ( string.IsNullOrEmpty(model.F_MaintenanceDept))
  230. {
  231. model.F_AssignTime = DateTime.Now;
  232. model.F_AssignUser = User.F_UserCode;
  233. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  234. int timeout = listgd.First().F_TimeOut;
  235. model.F_Deadline = DateTime.Now.AddHours(timeout);
  236. model.F_MaintenanceDept = input.MaintenanceDept;
  237. if (!string .IsNullOrEmpty(input.Maintenancer))
  238. model.F_Maintenancer = input.Maintenancer;
  239. else
  240. {
  241. var user = GetBeOnDuty(input.MaintenanceDept);
  242. if (user != null && user.Count > 1)
  243. {
  244. model.F_Maintenancer = user[0];
  245. }
  246. else
  247. {
  248. return Error("请选择指派人员");
  249. }
  250. }
  251. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  252. addassignlog = true;
  253. }
  254. }
  255. else
  256. {
  257. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  258. }
  259. model.F_UpdateTime = DateTime.Now;
  260. if (baseBll.Update(model) )
  261. {
  262. if (addassignlog)
  263. {
  264. AddAssignlog(model.F_WorkOrderCode, input.MaintenanceDept, input.Maintenancer);
  265. }
  266. if (input.IsEnd == 1)
  267. {
  268. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, model.F_WorkOrderCode);
  269. }
  270. return Success("编辑成功!");
  271. }
  272. else return Error("编辑失败!");
  273. }
  274. //查收
  275. public ActionResult CheckWorkOrder(string WorkOrderCode)
  276. {
  277. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  278. if (model != null)
  279. {
  280. if (model.F_MaintenanceDept == User.F_DeptId.ToString())
  281. {
  282. if (!string.IsNullOrEmpty(model.F_Maintenancer) && User.F_UserCode!=model.F_Maintenancer)
  283. {
  284. return Error("你没有权限查收!");
  285. }
  286. model.F_UpdateTime = DateTime.Now;
  287. model.F_Maintenancer = User.F_UserCode;
  288. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.dealing;
  289. baseBll.Update(model);
  290. AddOperatorLog("查收了工单", (int)EnumOperatorType.check, model.F_WorkOrderCode);
  291. return Success(" 查收成功!");
  292. }
  293. else
  294. {
  295. return Error("你没有权限查收!");
  296. }
  297. }
  298. return Error("工单不存在!");
  299. }
  300. //退单
  301. public ActionResult BackWorkOrder(string WorkOrderCode,string BackReason)
  302. {
  303. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  304. if (model != null)
  305. {
  306. if (model.F_MaintenanceDept == User.F_DeptId.ToString())
  307. {
  308. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  309. model.F_Maintenancer = "";
  310. model.F_MaintenanceDept = "";
  311. model.F_AssignTime = null;
  312. model.F_AssignUser = "";
  313. model.F_UpdateTime = DateTime.Now;
  314. model.F_Deadline = null;
  315. baseBll.Update(model);
  316. string s = "";
  317. if (!string.IsNullOrEmpty(BackReason))
  318. {
  319. s += ",退回原因:" + BackReason;
  320. }
  321. AddOperatorLog("退回了工单" + s, (int)EnumOperatorType.back, model.F_WorkOrderCode);
  322. return Success(" 退回成功!");
  323. }
  324. else
  325. {
  326. return Error("你没有权限退回!");
  327. }
  328. }
  329. return Error("工单不存在!");
  330. }
  331. //维修员能看见当前部门的所有的工单 ,对于所有的工单都能去处理
  332. //处理完成 、异常完结 Type=0 正常完成 Type=1异常完结 判断是不是返修的工单
  333. //点击正常完成的时候添加“是否涉及设备,是否涉及设备点击是,出现下拉框可多选设备,选择之后可输入对应的数量和价格
  334. public ActionResult DealWorkOrder(string WorkOrderCode, int Type, string Result,string File, List<Model.T_InvolvedEquip_RepairProcess> equipmodellist, int ExceptionType = 0, int IsInvolvedEquip = 0)
  335. {
  336. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  337. if (Type == 0 && model.F_WorkOrderState != 6) {
  338. return Error("没有到达之前不能处理工单");
  339. }
  340. //判断是不是返修的,
  341. string sql = "select * from T_FaultRepair_Process where F_WorkOrderCode='" + WorkOrderCode + "' and F_ReturnReason is not null and F_Maintenancer='" + User.F_UserCode + "'";
  342. DataTable dt = DbHelperSQL.Query(sql).Tables[0];
  343. if (model != null)
  344. {
  345. //正常完成
  346. if (Type == 0)
  347. {
  348. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.dealed;
  349. model.F_Endtime = DateTime.Now;
  350. //是返修的工单
  351. if (dt != null && dt.Rows.Count > 0)
  352. {
  353. int procid= Convert.ToInt32( dt.Rows[0]["F_ProcessId"].ToString());
  354. 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+ "',F_DealType='"+ (int)EnumFaultRepairDealType.normal + "', F_IsInvolvedEquip='"+ IsInvolvedEquip + "' where F_ProcessId='" + procid+"'";
  355. int updateid = DbHelperSQL.ExecuteSql(updatesql);
  356. if (IsInvolvedEquip == 1)
  357. {
  358. string ids = "";
  359. foreach (Model.T_InvolvedEquip_RepairProcess item in equipmodellist)
  360. {
  361. item.F_CreateTime = DateTime.Now;
  362. item.F_IsDelete = 0;
  363. item.F_RepairProcessId = procid;
  364. item.F_WorkOrderCode = WorkOrderCode;
  365. int equipid = equipbll.Add(item);
  366. ids += equipid + ",";
  367. }
  368. Model.T_FaultRepair_Process promodelnew = dealBll.GetModel(procid);
  369. promodelnew.F_EquipDetail = ids.Substring(0, ids.LastIndexOf(','));
  370. dealBll.Update(promodelnew);
  371. }
  372. if (updateid > 0)
  373. {
  374. baseBll.Update(model);
  375. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, WorkOrderCode);
  376. return Success("处理完成");
  377. }
  378. else
  379. return Error("处理失败");
  380. }
  381. Model.T_FaultRepair_Process promodel = new Model.T_FaultRepair_Process();
  382. promodel.F_Isdelete = 0;
  383. promodel.F_MaintenanceDept = User.F_DeptId.ToString();// model.F_MaintenanceDept;
  384. promodel.F_Maintenancer = User.F_UserCode;// model.F_Maintenancer;
  385. promodel.F_ProcessingTime = DateTime.Now;
  386. promodel.F_Result = Result;
  387. promodel.F_File = File;
  388. promodel.F_WorkOrderCode = WorkOrderCode;
  389. promodel.F_IsInvolvedEquip = IsInvolvedEquip;//0 是否 1 是 是
  390. promodel.F_DealType = (int)EnumFaultRepairDealType.normal;
  391. int id = dealBll.Add(promodel);
  392. //是否涉及设备点击是,出现下拉框可多选设备,选择之后可输入对应的数量和价格
  393. if (id > 0 && IsInvolvedEquip == 1)
  394. {
  395. string ids = "";
  396. foreach (Model.T_InvolvedEquip_RepairProcess item in equipmodellist)
  397. {
  398. item.F_CreateTime = DateTime.Now;
  399. item.F_IsDelete = 0;
  400. item.F_RepairProcessId = id;
  401. item.F_WorkOrderCode = WorkOrderCode;
  402. int equipid= equipbll.Add(item);
  403. ids += equipid + ",";
  404. }
  405. Model.T_FaultRepair_Process promodelnew= dealBll.GetModel(id);
  406. promodelnew.F_EquipDetail = ids.Substring(0, ids.LastIndexOf(','));
  407. dealBll.Update(promodelnew);
  408. }
  409. if (id > 0)
  410. {
  411. baseBll.Update(model);
  412. AddOperatorLog("完结了工单", (int)EnumOperatorType.dealed, WorkOrderCode);
  413. return Success("处理完成");
  414. }
  415. else
  416. return Error("处理失败");
  417. }
  418. else
  419. {
  420. int dealtype = 0;
  421. // "自行解决";
  422. if (User.F_DeptId.ToString() == model.F_ApplicationDept)//创建工单的人是处理人,存自行解决
  423. {
  424. dealtype = (int)EnumFaultRepairDealType.resolve;// "自行解决";
  425. }
  426. else
  427. {
  428. dealtype = (int)EnumFaultRepairDealType.abnormal;
  429. }
  430. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.exceptionended;
  431. model.F_Endtime = DateTime.Now;
  432. //是返修的工单
  433. if (dt != null && dt.Rows.Count > 0)
  434. {
  435. // promodel.F_ExceptionType = ExceptionType;
  436. int procid = Convert.ToInt32(dt.Rows[0]["F_ProcessId"].ToString());
  437. string updatesql = "UPDATE T_FaultRepair_Process set F_ProcessingTime=GETDATE() ,F_Result='" + Result + "' ,F_File='" + File + "',F_UpdateTime= GETDATE(),dealtype='"+dealtype+ "' ,F_ExceptionType='"+ ExceptionType + "' where F_ProcessId='" + procid + "'";
  438. if (DbHelperSQL.ExecuteSql(updatesql) > 0)
  439. {
  440. baseBll.Update(model);
  441. AddOperatorLog("异常完结了工单", (int)EnumOperatorType.exceptionended, WorkOrderCode);
  442. return Success("异常完结");
  443. }
  444. else
  445. return Error("异常完结失败");
  446. }
  447. //异常完结工单
  448. Model.T_FaultRepair_Process promodel = new Model.T_FaultRepair_Process();
  449. promodel.F_Isdelete = 0;
  450. promodel.F_MaintenanceDept = User.F_DeptId.ToString();// model.F_MaintenanceDept;
  451. promodel.F_Maintenancer = User.F_UserCode;// model.F_Maintenancer;
  452. promodel.F_ProcessingTime = DateTime.Now;
  453. promodel.F_Result = Result;
  454. promodel.F_File = File;
  455. promodel.F_WorkOrderCode = WorkOrderCode;
  456. promodel.F_ExceptionType = ExceptionType;
  457. promodel.F_DealType = dealtype;
  458. if (dealBll.Add(promodel) > 0)
  459. {
  460. baseBll.Update(model);
  461. AddOperatorLog("异常完结了工单", (int)EnumOperatorType.exceptionended, WorkOrderCode);
  462. return Success("异常完结");
  463. }
  464. else
  465. return Error("异常完结失败");
  466. }
  467. }
  468. return Error("工单不存在");
  469. }
  470. //操作:挂起(挂起的工单超时时限不记录到超时时限中,只有处理中未完结的工单可挂起),另外列表显示一列“是否挂起”字段
  471. //协助.内外协助都生成新工单 Type 0是内部协助 1是外部协助
  472. public ActionResult AssistWorkOrder(string WorkOrderCode,string WorkOrderCategory, string Maintenancer,string Content,int Type)
  473. {
  474. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  475. Model.T_FaultRepair_Base newmodel = new Model.T_FaultRepair_Base();
  476. if (Type == 0)
  477. {
  478. if (string.IsNullOrEmpty(Maintenancer))
  479. {
  480. return Error("请选择维修人");
  481. }
  482. newmodel.F_Applicant = model.F_Applicant;
  483. newmodel.F_Applicantsphone = model.F_Applicantsphone;
  484. newmodel.F_ApplicationDept = model.F_ApplicationDept;
  485. newmodel.F_Phone = model.F_Phone;
  486. newmodel.F_WorkOrderCategory = WorkOrderCategory;
  487. newmodel.F_Content = Content;
  488. newmodel.F_PlaceOfRepair = model.F_PlaceOfRepair;
  489. newmodel.F_Maintenancer = Maintenancer;
  490. newmodel.F_MaintenanceDept = model.F_MaintenanceDept;
  491. newmodel.F_AssignTime = DateTime.Now;
  492. newmodel.F_AssignUser = User.F_UserCode;
  493. newmodel.F_File = model.F_File;
  494. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  495. int timeout = listgd.First().F_TimeOut;
  496. newmodel.F_Deadline = DateTime.Now.AddHours(timeout);
  497. newmodel.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  498. newmodel.F_WorkOrderCode = DateTime.Now.ToString("yyyyMMddHHmmssfff");//工单编号
  499. newmodel.F_CreateTime = DateTime.Now;
  500. newmodel.F_CreateUser = User.F_UserCode;
  501. newmodel.F_CreateUserDept = User.F_DeptId.ToString();
  502. if (baseBll.Add(newmodel) > 0)
  503. {
  504. AddAddlog(newmodel.F_WorkOrderCode);
  505. if (!string.IsNullOrEmpty(Maintenancer))
  506. {
  507. AddAssignlog(newmodel.F_WorkOrderCode,model.F_MaintenanceDept, Maintenancer);
  508. }
  509. //更新model
  510. if (!string.IsNullOrEmpty(model.F_InternalWorkOrderCode))
  511. {
  512. model.F_InternalWorkOrderCode +=","+ newmodel.F_WorkOrderCode;
  513. }
  514. else
  515. {
  516. model.F_InternalWorkOrderCode = newmodel.F_WorkOrderCode;
  517. }
  518. model.F_UpdateTime = DateTime.Now;
  519. baseBll.Update(model);
  520. AddInternalasslog(model.F_WorkOrderCode, newmodel.F_WorkOrderCode);
  521. return Success("添加成功!");
  522. }
  523. else return Error("添加失败!");
  524. }
  525. //外协作
  526. else
  527. {
  528. newmodel.F_Applicant = model.F_Applicant;
  529. newmodel.F_Applicantsphone = model.F_Applicantsphone;
  530. newmodel.F_ApplicationDept = model.F_ApplicationDept;
  531. newmodel.F_Phone = model.F_Phone;
  532. newmodel.F_WorkOrderCategory = WorkOrderCategory;
  533. newmodel.F_Content = Content;
  534. newmodel.F_PlaceOfRepair = model.F_PlaceOfRepair;
  535. //newmodel.F_Maintenancer = Maintenancer;
  536. //newmodel.F_MaintenanceDept = model.F_MaintenanceDept;
  537. newmodel.F_File = model.F_File;
  538. newmodel.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  539. newmodel.F_WorkOrderCode = DateTime.Now.ToString("yyyyMMddHHmmssfff");//工单编号
  540. newmodel.F_CreateTime = DateTime.Now;
  541. newmodel.F_CreateUser = User.F_UserCode;
  542. newmodel.F_CreateUserDept = User.F_DeptId.ToString();
  543. if (baseBll.Add(newmodel) > 0)
  544. {
  545. AddOperatorLog("创建了工单", (int)EnumOperatorType.add, newmodel.F_WorkOrderCode);
  546. //更新原来的工单model
  547. if (!string.IsNullOrEmpty(model.F_ExternalWorkOrderCode))
  548. {
  549. model.F_ExternalWorkOrderCode += "," + newmodel.F_WorkOrderCode;
  550. }
  551. else
  552. {
  553. model.F_ExternalWorkOrderCode = newmodel.F_WorkOrderCode;
  554. }
  555. model.F_UpdateTime = DateTime.Now;
  556. baseBll.Update(model);
  557. AddExternalasslog(model.F_WorkOrderCode, newmodel.F_WorkOrderCode);
  558. return Success("添加成功!");
  559. }
  560. else return Error("添加失败!");
  561. }
  562. }
  563. //维修员的列表 待接单 待完成 已完成
  564. public ActionResult MaintenancerList( )
  565. {
  566. string sql = " and F_IsDelete=0 ";
  567. //待接单1 待完成 2 已完成 3
  568. string strpageindex = RequestString.GetQueryString("page");
  569. int pageindex = 1;
  570. string strpagesize = RequestString.GetQueryString("pagesize");
  571. int pagesize = 10;
  572. int strstate = RequestString.GetInt("state", -1);
  573. string strname = HttpUtility.UrlDecode(RequestString.GetQueryString("name"));
  574. string strtel = HttpUtility.UrlDecode(RequestString.GetQueryString("tel"));
  575. string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
  576. string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
  577. string strworkcode = HttpUtility.UrlDecode(RequestString.GetQueryString("workordercode"));
  578. //当前登录人只能看到当前部门的工单。管理员可以查看所有的工单
  579. if (User.F_RoleCode != "GLY")
  580. {
  581. sql += " and F_MaintenanceDept='" + User.F_DeptId + "'";
  582. }
  583. #region 搜索条件
  584. if (strpageindex.Trim() != "")
  585. {
  586. pageindex = Convert.ToInt32(strpageindex);
  587. }
  588. if (strpagesize.Trim() != "")
  589. {
  590. pagesize = Convert.ToInt32(strpagesize);
  591. }
  592. if (strname.Trim() != "" && strname != "undefined")
  593. {
  594. sql += " and F_Applicant = '" + strname + "' ";
  595. }
  596. if (strtel.Trim() != "" && strtel != "undefined")
  597. {
  598. sql += " and (F_Applicantsphone like '%" + strtel + "%' or F_Phone like '%" + strtel + "%') ";
  599. }
  600. if (strworkcode.Trim() != "" && strworkcode != "undefined")
  601. {
  602. sql += " and F_WorkOrderCode like'%" + strworkcode + "%'";
  603. }
  604. if (strstarttime.Trim() != "" && strstarttime != "undefined")
  605. {
  606. if (strendtime.Trim() != "" && strendtime != "undefined")
  607. {
  608. sql += " and F_CreateTime between '" + strstarttime +
  609. "' AND '" + strendtime + "'";
  610. }
  611. else
  612. {
  613. sql += " and F_CreateTime>='" + strstarttime + "' ";
  614. }
  615. }
  616. else
  617. {
  618. if (strendtime.Trim() != "" && strendtime != "undefined")
  619. {
  620. sql += " and F_CreateTime<='" + strendtime + "' ";
  621. }
  622. }
  623. #endregion
  624. switch (strstate)
  625. {
  626. case 1:
  627. sql += " and F_WorkOrderState=1";
  628. break;
  629. case 2:
  630. sql += " and (F_WorkOrderState=2 or F_WorkOrderState=6)";
  631. break;
  632. case 3:
  633. sql += " and (F_WorkOrderState>=3 and F_WorkOrderState!=6 )";
  634. break;
  635. }
  636. int recordCount = 0;
  637. DataTable datatable = Bll.PagerBll.GetListPager
  638. ("T_FaultRepair_Base ",
  639. "F_WorkOrderId",
  640. "*,[dbo].[GetUserName](F_Maintenancer) Maintenancer,[dbo].[GetUserName](F_Applicant) Applicant,[dbo].[GetAssistanceState](F_WorkOrderCode) AssistanceState,(case F_isstop when 1 then '是' when 0 then '否' else '' end ) ishangup",
  641. sql,
  642. "order by F_WorkOrderId desc",
  643. pagesize,
  644. pageindex,
  645. true,
  646. out recordCount
  647. );
  648. datatable = WorkOrderBase.SetOtherField(datatable, MENUENUM.报修列表, User.F_RoleId, 3000);
  649. var obj = new
  650. {
  651. state = "success",
  652. message = "成功",
  653. rows = datatable,
  654. total = recordCount
  655. };
  656. return Content(obj.ToJson());
  657. }
  658. //报修人的列表 已上报 待评价 已完结
  659. //public ActionResult MyCreateList()
  660. //{
  661. // DataTable dt = new DataTable();
  662. // string sql = " and F_IsDelete=0 and F_CreateUser='" + User.F_UserCode + "'";
  663. // string strpageindex = RequestString.GetQueryString("page");
  664. // int pageindex = 1;
  665. // string strpagesize = RequestString.GetQueryString("pagesize");
  666. // int pagesize = 10;
  667. // //待处理传2 已处理传3
  668. // int strstate = RequestString.GetInt("state", -1);
  669. // string strname = HttpUtility.UrlDecode(RequestString.GetQueryString("name"));
  670. // string strtel = HttpUtility.UrlDecode(RequestString.GetQueryString("tel"));
  671. // string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
  672. // string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
  673. // string strworkcode = HttpUtility.UrlDecode(RequestString.GetQueryString("workordercode"));
  674. // #region 搜索条件
  675. // if (strpageindex.Trim() != "")
  676. // {
  677. // pageindex = Convert.ToInt32(strpageindex);
  678. // }
  679. // if (strpagesize.Trim() != "")
  680. // {
  681. // pagesize = Convert.ToInt32(strpagesize);
  682. // }
  683. // if (strname.Trim() != "" && strname != "undefined")
  684. // {
  685. // sql += " and F_Applicant = '" + strname + "' ";
  686. // }
  687. // if (strtel.Trim() != "" && strtel != "undefined")
  688. // {
  689. // sql += " and (F_Applicantsphone like '%" + strtel + "%' or F_Phone like '%" + strtel + "%') ";
  690. // }
  691. // if (strworkcode.Trim() != "" && strworkcode != "undefined")
  692. // {
  693. // sql += " and F_WorkOrderCode like'%" + strworkcode + "%'";
  694. // }
  695. // if (strstarttime.Trim() != "" && strstarttime != "undefined")
  696. // {
  697. // if (strendtime.Trim() != "" && strendtime != "undefined")
  698. // {
  699. // sql += " and F_CreateTime between '" + strstarttime +
  700. // "' AND '" + strendtime + "'";
  701. // }
  702. // else
  703. // {
  704. // sql += " and F_CreateTime>='" + strstarttime + "' ";
  705. // }
  706. // }
  707. // else
  708. // {
  709. // if (strendtime.Trim() != "" && strendtime != "undefined")
  710. // {
  711. // sql += " and F_CreateTime<='" + strendtime + "' ";
  712. // }
  713. // }
  714. // #endregion
  715. // //报修人 待处理2 已处理3
  716. // switch (strstate)
  717. // {
  718. // case 2:
  719. // sql += " and F_WorkOrderState<=3";
  720. // break;
  721. // case 3:
  722. // sql += " and F_WorkOrderState>3";
  723. // break;
  724. // }
  725. // int recordCount = 0;
  726. // dt = Bll.PagerBll.GetListPager
  727. // ("T_FaultRepair_Base ",
  728. // "F_WorkOrderId",
  729. // "*,[dbo].[GetUserName](F_Maintenancer) Maintenancer,[dbo].[GetUserName](F_Applicant) Applicant",
  730. // sql,
  731. // "order by F_WorkOrderId desc",
  732. // pagesize,
  733. // pageindex,
  734. // true,
  735. // out recordCount
  736. // );
  737. // dt.Columns.Add("GapTime", typeof(string));//执行时限
  738. // dt.Columns.Add("AssistanceState", typeof(string));//协作工单的状态
  739. // dt.Columns.Add("StateName", typeof(object));//展示的工单状态值
  740. // dt.Columns.Add("Buttons", typeof(object));//操作按钮
  741. // foreach (DataRow dr in dt.Rows)
  742. // {
  743. // #region 执行时限 不是已完成的工单 展示这个字段
  744. // if (Convert.ToInt32(dr["F_WorkOrderState"]) < 3)
  745. // {
  746. // if (!string.IsNullOrEmpty(dr["F_Deadline"].ToString()))
  747. // {
  748. // DateTime deadline = Convert.ToDateTime(dr["F_Deadline"]);
  749. // TimeSpan ts = deadline.Subtract(DateTime.Now);
  750. // double tss = double.Parse(Math.Round(ts.TotalSeconds, 0).ToString());
  751. // if (tss < 0) { tss = -tss; }
  752. // string gshsj = DateTimeConvert.parseTimeSeconds(tss, 1);
  753. // if (deadline > DateTime.Now)
  754. // {
  755. // dr["GapTime"] = "剩余" + gshsj;
  756. // }
  757. // else
  758. // {
  759. // dr["GapTime"] = "超时" + gshsj;
  760. // }
  761. // }
  762. // }
  763. // #endregion
  764. // #region 展示的工单状态
  765. // if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.neworder || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive)
  766. // {
  767. // dr["StateName"] = "待接单";
  768. // }
  769. // else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing)
  770. // {
  771. // dr["StateName"] = "已接单";
  772. // }
  773. // else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealed)
  774. // {
  775. // dr["StateName"] = "待评价";
  776. // }
  777. // else {
  778. // dr["StateName"] = "已完成";
  779. // }
  780. // #endregion
  781. // #region 操作按钮
  782. // var btns = new List<FaultButtonGroup.button>();
  783. // //待接单 已接单 -自行解决
  784. // if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.neworder ||
  785. // Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive ||
  786. // Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing
  787. // )
  788. // {
  789. // btns.Add(FaultButtonGroup.solve());
  790. // }
  791. // //待评价 评价
  792. // else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealed)
  793. // {
  794. // btns.Add(FaultButtonGroup.evaluate());
  795. // }
  796. // else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.exceptionended ||
  797. // Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.finish
  798. // )
  799. // {
  800. // btns.Add(FaultButtonGroup.returndeal());
  801. // }
  802. // dr["Buttons"] = btns;
  803. // #endregion
  804. // }
  805. // var obj = new
  806. // {
  807. // state = "success",
  808. // message = "成功",
  809. // rows = dt,
  810. // total = recordCount
  811. // };
  812. // return Content(obj.ToJson());
  813. //}
  814. //工单详情
  815. public ActionResult GetWorkOrder()
  816. {
  817. var configfj = configBll.GetModelList(" F_ParamCode='FileUrlPath' ").FirstOrDefault();
  818. string strworkorderid = HttpUtility.UrlDecode(RequestString.GetQueryString("WorkOrderCode"));
  819. Model.T_FaultRepair_Base model = baseBll.GetModel(strworkorderid);
  820. int type = RequestString.GetInt("type", 0);//0基本信息1处理结果2协作工单3工单流程4维修记录5评价
  821. if (!string.IsNullOrEmpty(strworkorderid))
  822. {
  823. switch (type)
  824. {
  825. case 6:
  826. string sqlfx = " select top 1 F_ReturnReason from T_FaultRepair_Process where F_ReturnReason is not null and F_WorkOrderCode='" + strworkorderid + "' order by F_ProcessingTime desc";
  827. object dtfx = DbHelperSQL.GetSingle(sqlfx);
  828. if (dtfx != null && !string.IsNullOrEmpty( dtfx.ToString()))
  829. {
  830. return Success("是返修", dtfx.ToString());
  831. }
  832. return Success("不是返修");
  833. case 0:
  834. //基本信息
  835. string sql = "select *,[dbo].[GetUserName](F_Applicant) applicantname from T_FaultRepair_Base where F_WorkOrderCode='" + strworkorderid + "'";
  836. DataTable dtbase = DbHelperSQL.Query(sql).Tables[0];
  837. dtbase.Columns.Add("FileUrl",typeof(object));
  838. dtbase.Columns.Add("StateName");
  839. dtbase.Columns.Add("TypeName");
  840. foreach (DataRow dr in dtbase.Rows)
  841. {
  842. dr["TypeName"] = "故障报修";
  843. if (configfj != null && ! string.IsNullOrEmpty(dr["F_File"].ToString()))
  844. {
  845. dr["FileUrl"] = GetFileData(dr["F_File"].ToString(), configfj.F_ParamValue);
  846. }
  847. if (User.F_RoleCode == "DDZX" || User.F_RoleCode == "GLY")
  848. {
  849. #region weixiuyuan展示的工单状态
  850. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.neworder)
  851. {
  852. dr["StateName"] = "待派单";
  853. }
  854. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive)
  855. {
  856. dr["StateName"] = "待查收";
  857. }
  858. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.arrive)
  859. {
  860. dr["StateName"] = "待完成";
  861. }
  862. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealed)
  863. {
  864. dr["StateName"] = "已处理";
  865. }
  866. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.exceptionended)
  867. {
  868. dr["StateName"] = "异常完结";
  869. }
  870. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.finish)
  871. {
  872. dr["StateName"] = "已完结";
  873. }
  874. #endregion
  875. }
  876. else if (User.F_RoleCode == "WXY")
  877. {
  878. #region weixiuyuan展示的工单状态
  879. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.neworder)
  880. {
  881. dr["StateName"] = "待接单";
  882. }
  883. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.arrive)
  884. {
  885. dr["StateName"] = "待完成";
  886. }
  887. else
  888. {
  889. dr["StateName"] = "已完成";
  890. }
  891. #endregion
  892. }
  893. else //报修人
  894. {
  895. #region 展示的工单状态
  896. if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.neworder || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.receive)
  897. {
  898. dr["StateName"] = "待接单";
  899. }
  900. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealing || Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.arrive)
  901. {
  902. dr["StateName"] = "已接单";
  903. }
  904. else if (Convert.ToInt32(dr["F_WorkOrderState"]) == (int)EnumFaultRepairWorkOrderState.dealed)
  905. {
  906. dr["StateName"] = "待评价";
  907. }
  908. else
  909. {
  910. dr["StateName"] = "已完成";
  911. }
  912. #endregion
  913. }
  914. }
  915. return Success("获取成功", dtbase);
  916. case 1://处理结果
  917. string sqlcl = "select *,[dbo].[GetUserName](F_Maintenancer) username,[dbo].[GetPhoneByUserCode](F_Maintenancer) usertel ,case F_DealType when 0 then '正常完成' when 1 then '异常完成' when 2 then '自行解决' else '' end dealtype from T_FaultRepair_Process where F_WorkOrderCode='" + strworkorderid + "'";
  918. DataTable dtcl = DbHelperSQL.Query(sqlcl).Tables[0];
  919. dtcl.Columns.Add("FileUrl", typeof(object));
  920. foreach (DataRow dr in dtcl.Rows)
  921. {
  922. if (configfj != null && !string.IsNullOrEmpty(dr["F_File"].ToString()))
  923. {
  924. dr["FileUrl"] = GetFileData(dr["F_File"].ToString(), configfj.F_ParamValue);
  925. }
  926. }
  927. return Success("获取处理结果成功", dtcl);
  928. case 2://协作工单
  929. string internalsql = " select F_WorkOrderCode,F_Content,F_MaintenanceDept,F_CreateTime,F_WorkOrderState from T_FaultRepair_Base where F_WorkOrderCode in " +
  930. "(select col from [dbo].[SplitToNvarchar]('" + model.F_InternalWorkOrderCode + "',',' )) ";
  931. DataTable internaldt = DbHelperSQL.Query(internalsql).Tables[0];
  932. string externalsql = " select F_WorkOrderCode,F_Content,F_MaintenanceDept,F_CreateTime,F_WorkOrderState from T_FaultRepair_Base where F_WorkOrderCode in " +
  933. "(select col from [dbo].[SplitToNvarchar]('" + model.F_ExternalWorkOrderCode + "',',' )) ";
  934. DataTable externaldt = DbHelperSQL.Query(externalsql).Tables[0];
  935. if (internaldt != null && internaldt.Rows.Count > 0)
  936. {
  937. internaldt.Columns.Add("StateName", typeof( String));
  938. internaldt.Columns.Add("Mode", typeof(String));
  939. foreach (DataRow item in internaldt.Rows)
  940. {
  941. if (Convert.ToInt32(item["F_WorkOrderState"]) < 3)
  942. {
  943. item["StateName"] = "未完成";
  944. }
  945. else
  946. {
  947. item["StateName"] = "已完成";
  948. }
  949. item["Mode"] = "内部协作";
  950. }
  951. }
  952. if (externaldt != null && externaldt.Rows.Count > 0)
  953. {
  954. externaldt.Columns.Add("StateName", typeof(String));
  955. externaldt.Columns.Add("Mode", typeof(String));
  956. foreach (DataRow item in externaldt.Rows)
  957. {
  958. if (Convert.ToInt32(item["F_WorkOrderState"]) < 3)
  959. {
  960. item["StateName"] = "未完成";
  961. }
  962. else
  963. {
  964. item["StateName"] = "已完成";
  965. }
  966. item["Mode"] = "外部协作";
  967. }
  968. }
  969. DataTable dtt = new DataTable();
  970. dtt.Columns.Add("F_WorkOrderCode", typeof(String));
  971. dtt.Columns.Add("F_Content", typeof(String));
  972. dtt.Columns.Add("F_MaintenanceDept", typeof(String));
  973. dtt.Columns.Add("F_WorkOrderState", typeof(String));
  974. dtt.Columns.Add("F_CreateTime", typeof(DateTime));
  975. dtt.Columns.Add("StateName", typeof(String));
  976. dtt.Columns.Add("Mode", typeof(String));
  977. if (internaldt!=null && internaldt.Rows.Count>0)
  978. {
  979. foreach (DataRow row in internaldt.Rows)
  980. {
  981. dtt.ImportRow(row);
  982. }
  983. }
  984. if (externaldt != null && externaldt.Rows.Count > 0)
  985. {
  986. foreach (DataRow row in externaldt.Rows)
  987. {
  988. dtt.ImportRow(row);
  989. }
  990. }
  991. var obj3 = new
  992. {
  993. data = dtt,
  994. };
  995. return Success("获取协作工单成功", obj3);
  996. case 3://工单流程
  997. var sqllog = "select *,[dbo].[GetUserName](F_Operator) username from T_FaultRepair_OperationLog where F_WorkOrderCode = '" + strworkorderid + "' " + " order by F_OperationId desc";
  998. DataTable dtlog = DbHelperSQL.Query(sqllog).Tables[0];
  999. return Success("获取工单流程成功", dtlog);
  1000. case 4://维修记录
  1001. string sqlcl2 = "select *,[dbo].[GetUserName](F_Maintenancer) username,[dbo].[GetPhoneByUserCode](F_Maintenancer) usertel from T_FaultRepair_Process where F_WorkOrderCode='" + strworkorderid + "'";
  1002. DataTable dtcl2 = DbHelperSQL.Query(sqlcl2).Tables[0];
  1003. dtcl2.Columns.Add("FileUrl", typeof(object));
  1004. foreach (DataRow dr in dtcl2.Rows)
  1005. {
  1006. if (configfj != null && !string.IsNullOrEmpty(dr["F_File"].ToString()))
  1007. {
  1008. dr["FileUrl"] = GetFileData(dr["F_File"].ToString(), configfj.F_ParamValue);
  1009. }
  1010. }
  1011. return Success("获取处理结果成功", dtcl2);
  1012. case 5://评价
  1013. string sqle = "select top 1 * from T_FaultRepair_Evaluate where F_WorkOrderCode='" + strworkorderid + "'"+ " order by F_EvaluationTime desc";
  1014. DataTable dte = DbHelperSQL.Query(sqle).Tables[0];
  1015. return Success("获取处理结果成功", dte);
  1016. }
  1017. }
  1018. return Error("没传参数");
  1019. }
  1020. //转派 ,派给自己的工单 转给同部门的别的人
  1021. //0 是转同事 1 是转组长
  1022. public ActionResult Transfer(string WorkOrderCode,string ToUserCode,int type =0)
  1023. {
  1024. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  1025. if (model != null && model.F_Maintenancer == User.F_UserCode)
  1026. {
  1027. if (type == 0)
  1028. {
  1029. //转同事
  1030. model.F_Maintenancer = ToUserCode;
  1031. model.F_UpdateTime = DateTime.Now;
  1032. AddOperatorLog("转派工单给" + GetDeptModel(model.F_MaintenanceDept) + "部门" + GetUserModel(ToUserCode), (int)EnumOperatorType.transfer, WorkOrderCode);
  1033. baseBll.Update(model);
  1034. return Success("转派成功");
  1035. }
  1036. else
  1037. {
  1038. //是转组长
  1039. var role = new Bll.T_Sys_Role().GetModelList("F_RoleCode='WXBZZ' and F_State =1");
  1040. var userzz = new Bll.T_Sys_UserAccount().GetModelList("F_DeptId='" + model.F_MaintenanceDept + "' and F_DeleteFlag=0 " +
  1041. "and F_RoleId = '" + role.FirstOrDefault().F_RoleId + "'");
  1042. if (userzz != null && userzz.Count > 0)
  1043. {
  1044. //转同事
  1045. model.F_Maintenancer = userzz.First().F_UserCode;
  1046. model.F_UpdateTime = DateTime.Now;
  1047. AddOperatorLog("转派工单给" + GetDeptModel(model.F_MaintenanceDept) + "部门" + GetUserModel(userzz.First().F_UserCode), (int)EnumOperatorType.transfer, WorkOrderCode);
  1048. baseBll.Update(model);
  1049. return Success("转派成功");
  1050. }
  1051. else
  1052. {
  1053. return Error("没有维修部组长");
  1054. }
  1055. }
  1056. }
  1057. return Error("暂时没有权限操作");
  1058. }
  1059. //调度中心转派
  1060. public ActionResult DDZXTransfer(string WorkOrderCode, string ToUserCode,string ToDept)
  1061. {
  1062. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  1063. if (model != null && !string.IsNullOrEmpty(ToUserCode) && !string.IsNullOrEmpty(ToDept))
  1064. {
  1065. model.F_AssignUser = User.F_UserCode;
  1066. model.F_AssignTime = DateTime.Now;
  1067. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  1068. int timeout = listgd.First().F_TimeOut;
  1069. model.F_Deadline = DateTime.Now.AddHours(timeout);
  1070. string message = "";
  1071. //当工单没有选择指派部门的时候,当前工单类型shezhi指派部门,该工单默认到这个指派的部门
  1072. if (string.IsNullOrEmpty(ToDept))
  1073. {
  1074. //根据工单类别判断 是否有指派部门
  1075. List<Model.T_Sys_GongDan> gd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  1076. int deptid = listgd.First().F_AutoDept!=null? listgd.First().F_AutoDept.Value:0;
  1077. if (deptid == 0)
  1078. {
  1079. return Error("当前工单类型没有设置指派部门,请前往设置或者选择指派部门");
  1080. }
  1081. else
  1082. ToDept = deptid.ToString();
  1083. }
  1084. if (!string .IsNullOrEmpty (ToUserCode))
  1085. {
  1086. model.F_Maintenancer = ToUserCode;
  1087. message = "转派工单给" + GetDeptModel(ToDept) + "部门" + GetUserModel(ToUserCode);
  1088. }
  1089. else
  1090. {
  1091. //部门下没有人员不可进行转派
  1092. var usercount = new Bll.T_Sys_UserAccount().GetModelList("F_DeptId='" + ToDept + "' and F_DeleteFlag=0 ");
  1093. if (usercount == null || usercount.Count == 0)
  1094. {
  1095. return Error("当前部门没有人员 ,不可进行转派");
  1096. }
  1097. var user = GetBeOnDuty(ToDept);
  1098. if (user!=null && user.Count >1)
  1099. {
  1100. model.F_Maintenancer = user[0];
  1101. message = user[1];
  1102. }
  1103. else
  1104. {
  1105. return Error("请选择指派人员");
  1106. }
  1107. }
  1108. model.F_MaintenanceDept = ToDept;
  1109. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  1110. model.F_UpdateTime = DateTime.Now;
  1111. AddOperatorLog(message, (int)EnumOperatorType.assign, WorkOrderCode);
  1112. baseBll.Update(model);
  1113. return Success("转派成功");
  1114. }
  1115. return Error("暂时没有权限操作");
  1116. }
  1117. /// <summary>
  1118. /// 自动评价
  1119. /// </summary>
  1120. /// <returns></returns>
  1121. [AllowAnonymous]
  1122. public ActionResult Evaluate()
  1123. {
  1124. var dicvalue = new Bll.T_Sys_DictionaryValue().
  1125. GetModelList("F_DictionaryFlag='PJSX' and F_State=1");
  1126. int SX = 2;
  1127. try
  1128. {
  1129. if (dicvalue != null && dicvalue.Count > 0)
  1130. {
  1131. SX = int.Parse(dicvalue.FirstOrDefault().F_Name);
  1132. }
  1133. }
  1134. catch
  1135. {
  1136. SX = 2;
  1137. }
  1138. var FaultRepair_Base = new BLL.T_FaultRepair_Base().GetModelList(" F_WorkOrderState=3 and F_IsDelete=0 " +
  1139. "and datediff(minute , F_Endtime , getdate())>'" + SX *60+ "'");
  1140. if (FaultRepair_Base != null && FaultRepair_Base.Count > 0)
  1141. {
  1142. foreach (var model in FaultRepair_Base)
  1143. {
  1144. Model.T_FaultRepair_Evaluate evamodel = new Model.T_FaultRepair_Evaluate();
  1145. if (model != null)
  1146. {
  1147. evamodel.F_EvaluateContent = SX+ "小时未评价自动评价满意";
  1148. evamodel.F_Quality = 5;
  1149. evamodel.F_Attitude = 5;
  1150. evamodel.F_Efficiency = 5;
  1151. evamodel.F_Evaluator = "";
  1152. evamodel.F_EvaluationTime = DateTime.Now;
  1153. evamodel.F_Isdelete = 0;
  1154. evamodel.F_WorkOrderCode = model.F_WorkOrderCode ;
  1155. BLL.T_FaultRepair_Evaluate evabll = new BLL.T_FaultRepair_Evaluate();
  1156. if (evabll.Add(evamodel) > 0)
  1157. {
  1158. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  1159. model.F_UpdateTime = DateTime.Now;
  1160. model.F_Score =15;
  1161. baseBll.Update(model);
  1162. AddEvaluateOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, model.F_WorkOrderCode);
  1163. #region 评价的时候如果有协作工单,协作工单评价数据和主工单保持一致,同时需要记录操作流程
  1164. if (!string.IsNullOrEmpty(model.F_InternalWorkOrderCode))
  1165. {
  1166. string[] codes = model.F_InternalWorkOrderCode.Split(',');
  1167. foreach (string item in codes)
  1168. {
  1169. Model.T_FaultRepair_Evaluate evamodel1 = new Model.T_FaultRepair_Evaluate();
  1170. evamodel1 = evamodel;
  1171. evamodel.F_WorkOrderCode = item;
  1172. evabll.Add(evamodel1);
  1173. AddEvaluateOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, item);
  1174. }
  1175. }
  1176. if (!string.IsNullOrEmpty(model.F_ExternalWorkOrderCode))
  1177. {
  1178. string[] codes = model.F_ExternalWorkOrderCode.Split(',');
  1179. foreach (string item in codes)
  1180. {
  1181. Model.T_FaultRepair_Evaluate evamodel1 = new Model.T_FaultRepair_Evaluate();
  1182. evamodel1 = evamodel;
  1183. evamodel.F_WorkOrderCode = item;
  1184. evabll.Add(evamodel1);
  1185. AddEvaluateOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, item);
  1186. }
  1187. }
  1188. #endregion
  1189. }
  1190. else
  1191. continue;
  1192. }
  1193. }
  1194. }
  1195. return Success ("评价完成");
  1196. }
  1197. public bool AddEvaluateOperatorLog(string content, int type, string workordercode)
  1198. {
  1199. Model.T_FaultRepair_OperationLog model = new Model.T_FaultRepair_OperationLog();
  1200. model.F_LogContent = content;
  1201. model.F_OperationTime = DateTime.Now;
  1202. model.F_OperationType = type;
  1203. model.F_Operator = "";
  1204. model.F_WorkOrderCode = workordercode;
  1205. logBll.Add(model);
  1206. return true;
  1207. }
  1208. /// <summary>
  1209. /// 自动流转
  1210. /// </summary>
  1211. /// <returns></returns>
  1212. [AllowAnonymous]
  1213. public ActionResult Automatic()
  1214. {
  1215. var dicvalue = new Bll.T_Sys_DictionaryValue().
  1216. GetModelList("F_DictionaryFlag='JDSX' and F_State=1");
  1217. string SX = "10";
  1218. if (dicvalue!=null && dicvalue.Count >0)
  1219. {
  1220. SX = dicvalue.FirstOrDefault ().F_Name;
  1221. }
  1222. var FaultRepair_Base = new BLL.T_FaultRepair_Base().GetModelList(" F_WorkOrderState=1and F_IsDelete=0 " +
  1223. "and datediff(minute , F_AssignTime , getdate())>'"+ SX + "'");
  1224. var GroupClass1 = new Bll.T_Sys_GroupClass().GetModelList("F_IsDelete=0 and F_IsAutomatic=1 and datediff(day , F_Date , getdate())= 0 " +
  1225. " order by F_Id asc");
  1226. if (FaultRepair_Base !=null && FaultRepair_Base.Count >0)
  1227. {
  1228. foreach (var model in FaultRepair_Base)
  1229. {
  1230. model.F_AssignTime = DateTime.Now;
  1231. model.F_AssignUser = User.F_UserCode;
  1232. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  1233. int timeout = listgd.First().F_TimeOut;
  1234. model.F_Deadline = DateTime.Now.AddHours(timeout);
  1235. string user = "";
  1236. var GroupClass = GroupClass1.Where(x => x.F_DeptId.ToString () == model.F_MaintenanceDept)
  1237. .OrderBy (x=>x.F_Id );
  1238. if (GroupClass != null && GroupClass.Count() > 1)
  1239. {
  1240. var Class = GroupClass.Where(x => x.F_State == 1);
  1241. if (Class != null && Class.Count() > 0)
  1242. {
  1243. var Class1 = GroupClass.Where(x => x.F_State == 0 && x.F_Id > Class.LastOrDefault().F_Id);
  1244. if (Class1 != null && Class1.Count() > 0)
  1245. {
  1246. user = Class1.FirstOrDefault().F_UserCode;
  1247. Class1.FirstOrDefault().F_State = 1;
  1248. new Bll.T_Sys_GroupClass().Update(GroupClass.FirstOrDefault ());
  1249. Class.LastOrDefault().F_State = 0;
  1250. new Bll.T_Sys_GroupClass().Update(Class.LastOrDefault());
  1251. }
  1252. else
  1253. {
  1254. user = GroupClass.FirstOrDefault().F_UserCode;
  1255. GroupClass.FirstOrDefault().F_State = 1;
  1256. new Bll.T_Sys_GroupClass().Update(GroupClass.FirstOrDefault());
  1257. Class.LastOrDefault().F_State = 0;
  1258. new Bll.T_Sys_GroupClass().Update(Class.LastOrDefault());
  1259. }
  1260. }
  1261. else
  1262. {
  1263. user = GroupClass.FirstOrDefault().F_UserCode;
  1264. GroupClass.FirstOrDefault().F_State = 1;
  1265. new Bll.T_Sys_GroupClass().Update(GroupClass.FirstOrDefault());
  1266. }
  1267. }
  1268. else
  1269. {
  1270. continue;
  1271. }
  1272. model.F_Maintenancer = user;
  1273. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  1274. model.F_UpdateTime = DateTime.Now;
  1275. AddOperatorLog("超十分钟未接单,自动流转给" + GetDeptModel(model.F_MaintenanceDept) + "部门" + GetUserModel(user), (int)EnumOperatorType.assign, model.F_WorkOrderCode );
  1276. baseBll.Update(model);
  1277. }
  1278. }
  1279. return Success("");
  1280. }
  1281. /// <summary>
  1282. /// 获取值班人员
  1283. /// </summary>
  1284. /// <param name="ToDept"></param>
  1285. /// <returns></returns>
  1286. private List <string > GetBeOnDuty(string ToDept)
  1287. {
  1288. List<string> user = new List<string>();
  1289. var role = new Bll.T_Sys_Role().GetModelList("F_RoleCode='WXBZZ' and F_State =1");
  1290. var GroupClass = new Bll.T_Sys_GroupClass().GetModelList("F_IsDelete=0 and F_IsAutomatic=1 and datediff(day , F_Date , getdate())= 0 " +
  1291. "and F_DeptId='" + ToDept + "' order by F_Id asc");
  1292. if (GroupClass != null && GroupClass.Count > 0)
  1293. {
  1294. if (GroupClass.Count==1)
  1295. {
  1296. user.Add ( GroupClass[0].F_UserCode);
  1297. user.Add("有值班人员,自动流转给" + GetDeptModel(ToDept) + "部门" + GetUserModel(GroupClass[0].F_UserCode));
  1298. }
  1299. else
  1300. {
  1301. var Class = GroupClass.Where(x => x.F_State == 1);
  1302. if (Class!=null && Class.Count() > 0)
  1303. {
  1304. var Class1 = GroupClass.Where(x => x.F_State == 0&& x .F_Id > Class.LastOrDefault ().F_Id);
  1305. if (Class1!=null && Class1.Count()>0)
  1306. {
  1307. user.Add (Class1.FirstOrDefault ().F_UserCode);
  1308. user.Add("有值班人员,自动流转给" + GetDeptModel(ToDept) + "部门" + GetUserModel(Class1.FirstOrDefault().F_UserCode));
  1309. Class1.FirstOrDefault().F_State = 1;
  1310. new Bll.T_Sys_GroupClass().Update(GroupClass[0]);
  1311. Class.LastOrDefault().F_State = 0;
  1312. new Bll.T_Sys_GroupClass().Update(Class.LastOrDefault());
  1313. }
  1314. else
  1315. {
  1316. user.Add(GroupClass[0].F_UserCode);
  1317. user.Add("有值班人员,自动流转给" + GetDeptModel(ToDept) + "部门" + GetUserModel( GroupClass[0].F_UserCode));
  1318. GroupClass[0].F_State = 1;
  1319. new Bll.T_Sys_GroupClass().Update(GroupClass[0]);
  1320. Class.LastOrDefault().F_State = 0;
  1321. new Bll.T_Sys_GroupClass().Update(Class.LastOrDefault());
  1322. }
  1323. }
  1324. else
  1325. {
  1326. user.Add(GroupClass[0].F_UserCode);
  1327. user.Add("有值班人员,自动流转给" + GetDeptModel(ToDept) + "部门" + GetUserModel(GroupClass[0].F_UserCode));
  1328. GroupClass[0].F_State = 1;
  1329. new Bll.T_Sys_GroupClass().Update(GroupClass[0]);
  1330. }
  1331. }
  1332. }
  1333. else
  1334. {
  1335. if (role!=null && role.Count >0)
  1336. {
  1337. var userzz = new Bll.T_Sys_UserAccount().GetModelList("F_DeptId='" + ToDept + "' and F_DeleteFlag=0 " +
  1338. "and F_RoleId = '" + role.FirstOrDefault().F_RoleId + "'");
  1339. if (userzz != null && userzz.Count > 0)
  1340. {
  1341. user.Add(userzz.FirstOrDefault().F_UserCode);
  1342. user.Add("无值班人员,派送给" + GetDeptModel(ToDept) + "部门" + userzz.FirstOrDefault().F_UserName);
  1343. }
  1344. else
  1345. {
  1346. //无值班人员无班组长,随机派送
  1347. var userww = new Bll.T_Sys_UserAccount().GetModelList("F_DeptId='" + ToDept + "' and F_DeleteFlag=0 ");
  1348. user.Add(userww.FirstOrDefault().F_UserCode);
  1349. user.Add("无值班人员无班组长,随机派送给" + GetDeptModel(ToDept) + "部门" + userww.FirstOrDefault().F_UserName);
  1350. }
  1351. }
  1352. }
  1353. return user;
  1354. }
  1355. //删除工单
  1356. public ActionResult DeleteWorkOrder(string WorkOrderCode)
  1357. {
  1358. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  1359. model.F_IsDelete = 1;
  1360. if (baseBll.Update(model))
  1361. {
  1362. AddOperatorLog("删除了工单", (int)EnumOperatorType.delete, WorkOrderCode);
  1363. return Success("删除成功");
  1364. }
  1365. else
  1366. return Error("删除失败");
  1367. }
  1368. // 返修 是申请人提交的返修
  1369. //退回至维修部门班组长(角色),如果没有该角色退回到原来的处理人
  1370. public ActionResult ReturnWorkOrder(string WorkOrderCode, string ReturnReason)
  1371. {
  1372. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  1373. if (model != null && model.F_ApplicationDept==User.F_DeptId.ToString())
  1374. {
  1375. //判断返工是不是规定的时间内,工单状态是已完结的工单
  1376. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  1377. int limittime = listgd.First().F_RepairTimeLimit;
  1378. if (model.F_Endtime.Value.AddHours(limittime) >= DateTime.Now)
  1379. {
  1380. Model.T_FaultRepair_Process promodel = new Model.T_FaultRepair_Process();
  1381. promodel.F_Isdelete = 0;
  1382. promodel.F_MaintenanceDept = User.F_DeptId.ToString();// model.F_MaintenanceDept;
  1383. promodel.F_Maintenancer = User.F_UserCode;// model.F_Maintenancer;
  1384. promodel.F_ReturnReason = ReturnReason;
  1385. promodel.F_WorkOrderCode = WorkOrderCode;
  1386. if (dealBll.Add(promodel) > 0)
  1387. {
  1388. AddOperatorLog("提交了返工", (int)EnumOperatorType.submitreturn, WorkOrderCode);
  1389. string sql = " select top 1 F_UserCode from T_Sys_UserAccount where F_RoleId in (select F_RoleId from T_Sys_Role where F_RoleCode = 'WXBZZ')";
  1390. string usercode= DbHelperSQL.GetSingle(sql).ToString();
  1391. if (!string.IsNullOrEmpty(usercode))
  1392. {
  1393. model.F_Maintenancer = usercode;
  1394. }
  1395. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.dealing;
  1396. model.F_ReturnNum += model.F_ReturnNum + 1;
  1397. model.F_UpdateTime = DateTime.Now;
  1398. baseBll.Update(model);
  1399. return Success("返工成功");
  1400. }
  1401. return Error("返工失败");
  1402. }
  1403. else
  1404. {
  1405. return Error("已超出提交返修期限");
  1406. }
  1407. }
  1408. return Error("暂时没有权限操作");
  1409. }
  1410. //评价
  1411. public ActionResult EvaluateWorkOrder(string WorkOrderCode, int Attitude, int Quality, int Efficiency,string EvaluateContent )
  1412. {
  1413. Model.T_FaultRepair_Base model = baseBll.GetModel(WorkOrderCode);
  1414. Model.T_FaultRepair_Evaluate evamodel = new Model.T_FaultRepair_Evaluate();
  1415. if (model != null)
  1416. {
  1417. if (model.F_ApplicationDept.Trim() == User.F_DeptId.ToString())
  1418. {
  1419. evamodel.F_EvaluateContent = EvaluateContent;
  1420. evamodel.F_Quality = Quality;
  1421. evamodel.F_Attitude = Attitude;
  1422. evamodel.F_Efficiency = Efficiency;
  1423. evamodel.F_Evaluator = User.F_UserCode;
  1424. evamodel.F_EvaluationTime = DateTime.Now;
  1425. evamodel.F_Isdelete = 0;
  1426. evamodel.F_WorkOrderCode = WorkOrderCode;
  1427. BLL.T_FaultRepair_Evaluate evabll = new BLL.T_FaultRepair_Evaluate();
  1428. if (evabll.Add(evamodel) > 0)
  1429. {
  1430. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.finish;
  1431. model.F_UpdateTime = DateTime.Now;
  1432. model.F_Score = Attitude + Quality+ Efficiency;
  1433. baseBll.Update(model);
  1434. AddOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, model.F_WorkOrderCode);
  1435. #region 评价的时候如果有协作工单,协作工单评价数据和主工单保持一致,同时需要记录操作流程
  1436. if (!string.IsNullOrEmpty(model.F_InternalWorkOrderCode))
  1437. {
  1438. string[] codes = model.F_InternalWorkOrderCode.Split(',');
  1439. foreach (string item in codes)
  1440. {
  1441. Model.T_FaultRepair_Evaluate evamodel1 = new Model.T_FaultRepair_Evaluate();
  1442. evamodel1 = evamodel;
  1443. evamodel.F_WorkOrderCode = item;
  1444. evabll.Add(evamodel1);
  1445. AddOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, item);
  1446. }
  1447. }
  1448. if (!string.IsNullOrEmpty(model.F_ExternalWorkOrderCode))
  1449. {
  1450. string[] codes = model.F_ExternalWorkOrderCode.Split(',');
  1451. foreach (string item in codes)
  1452. {
  1453. Model.T_FaultRepair_Evaluate evamodel1 = new Model.T_FaultRepair_Evaluate();
  1454. evamodel1 = evamodel;
  1455. evamodel.F_WorkOrderCode = item;
  1456. evabll.Add(evamodel1);
  1457. AddOperatorLog("评价了工单", (int)EnumOperatorType.evaluate, item);
  1458. }
  1459. }
  1460. #endregion
  1461. return Success("评价成功");
  1462. }
  1463. return Error("评价失败");
  1464. }
  1465. else
  1466. {
  1467. return Error("没有权限评价");
  1468. }
  1469. }
  1470. return Error("评价失败");
  1471. }
  1472. /// <summary>
  1473. /// 获取枚举值的描述属性
  1474. /// </summary>
  1475. /// <param name="enumValue"></param>
  1476. /// <returns></returns>
  1477. private string GetEnumDescription(Enum enumValue)
  1478. {
  1479. string value = enumValue.ToString();
  1480. FieldInfo field = enumValue.GetType().GetField(value);
  1481. object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); //获取描述属性
  1482. if (objs == null || objs.Length == 0) //当描述属性没有时,直接返回名称
  1483. return value;
  1484. DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
  1485. return descriptionAttribute.Description;
  1486. }
  1487. #region 添加操作记录
  1488. public bool AddOperatorLog(string content,int type,string workordercode)
  1489. {
  1490. Model.T_FaultRepair_OperationLog model = new Model.T_FaultRepair_OperationLog();
  1491. model.F_LogContent = content;
  1492. model.F_OperationTime = DateTime.Now;
  1493. model.F_OperationType = type;
  1494. model.F_Operator = User.F_UserCode;
  1495. model.F_WorkOrderCode = workordercode;
  1496. logBll.Add(model);
  1497. return true;
  1498. }
  1499. public void AddAddlog(string workordercode)
  1500. {
  1501. AddOperatorLog("创建报修工单", (int)EnumOperatorType.add, workordercode);
  1502. }
  1503. public void AddAssignlog(string workordercode,string dept, string maintenancer)
  1504. {
  1505. AddOperatorLog("指派工单给" + GetDeptModel(dept)+"部门"+ GetUserModel(maintenancer), (int)EnumOperatorType.assign, workordercode);
  1506. }
  1507. public void AddInternalasslog(string workordercode, string newworkordercode)
  1508. {
  1509. AddOperatorLog("创建内协作工单" + newworkordercode, (int)EnumOperatorType.internalassistance, workordercode);
  1510. }
  1511. public void AddExternalasslog(string workordercode, string newworkordercode)
  1512. {
  1513. AddOperatorLog("创建外协作工单" + newworkordercode, (int)EnumOperatorType.externalassistance, workordercode);
  1514. }
  1515. #endregion
  1516. public string GetDeptModel( string deptId = "")
  1517. {
  1518. string sql = " 1=1 ";
  1519. if (!string.IsNullOrWhiteSpace(deptId))
  1520. {
  1521. sql += " and F_DeptId='" + deptId + "'";
  1522. }
  1523. if (string.IsNullOrWhiteSpace(sql))
  1524. return "";
  1525. var role = departmentBLL.GetModelList(sql).FirstOrDefault();
  1526. string name = role.F_DeptName;
  1527. return name;
  1528. }
  1529. public string GetUserModel( string usercode = "")
  1530. {
  1531. string sql = " 1=1 ";
  1532. if (!string.IsNullOrWhiteSpace(usercode))
  1533. {
  1534. sql += " and F_UserCode='" + usercode + "'";
  1535. }
  1536. if (string.IsNullOrEmpty(usercode) )
  1537. return "";
  1538. Model.T_Sys_UserAccount ua = new Bll.T_Sys_UserAccount().GetModelList(sql).FirstOrDefault();
  1539. if (ua != null)
  1540. {
  1541. return ua.F_UserName;
  1542. }
  1543. return "";
  1544. }
  1545. //故障报修综合报表
  1546. public ActionResult ExportList()
  1547. {
  1548. string sql = " and F_IsDelete=0 ";
  1549. int isexport = RequestString.GetInt("isexport", -1);
  1550. string strpageindex = RequestString.GetQueryString("page");
  1551. int pageindex = 1;
  1552. string strpagesize = RequestString.GetQueryString("pagesize");
  1553. int pagesize = 10;
  1554. //创建时间 报修人 工单类别 工单状态 维修人 调度人
  1555. string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
  1556. string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
  1557. int category = RequestString.GetInt("category", -1);
  1558. int strstate = RequestString.GetInt("state", -1);
  1559. string applicant= HttpUtility.UrlDecode(RequestString.GetQueryString("applicant"));
  1560. string maintenancer = HttpUtility.UrlDecode(RequestString.GetQueryString("maintenancer"));
  1561. string createuser= HttpUtility.UrlDecode(RequestString.GetQueryString("createuser"));
  1562. Bll.T_Sys_UserAccount blluser = new Bll.T_Sys_UserAccount();
  1563. List<Model.T_Sys_UserAccount> listuser = blluser.GetModelList("F_DeleteFlag=0");
  1564. if (!string.IsNullOrEmpty(createuser))
  1565. {
  1566. try
  1567. {
  1568. int usercode= Convert.ToInt32(createuser);
  1569. sql += " and F_AssignUser='" + usercode + "'";
  1570. }
  1571. catch (Exception)
  1572. {
  1573. Model.T_Sys_UserAccount model = listuser.Find(x => x.F_UserName == createuser);
  1574. if (model != null)
  1575. {
  1576. sql += " and F_AssignUser='" + model.F_UserCode + "'";
  1577. }
  1578. }
  1579. }
  1580. if (!string.IsNullOrEmpty(maintenancer))
  1581. {
  1582. try
  1583. {
  1584. int usercode = Convert.ToInt32(maintenancer);
  1585. sql += " and F_Maintenancer='" + usercode + "'";
  1586. }
  1587. catch (Exception)
  1588. {
  1589. Model.T_Sys_UserAccount model = listuser.Find(x => x.F_UserName == maintenancer);
  1590. if (model != null)
  1591. {
  1592. sql += " and F_Maintenancer='" + model.F_UserCode + "'";
  1593. }
  1594. }
  1595. }
  1596. if (!string.IsNullOrEmpty(applicant))
  1597. {
  1598. try
  1599. {
  1600. int usercode = Convert.ToInt32(applicant);
  1601. sql += " and F_Applicant='" + usercode + "'";
  1602. }
  1603. catch (Exception)
  1604. {
  1605. Model.T_Sys_UserAccount model = listuser.Find(x => x.F_UserName == applicant);
  1606. if (model != null)
  1607. {
  1608. sql += " and F_Applicant='" + model.F_UserCode + "'";
  1609. }
  1610. }
  1611. }
  1612. #region 搜索条件
  1613. if (strpageindex.Trim() != "")
  1614. {
  1615. pageindex = Convert.ToInt32(strpageindex);
  1616. }
  1617. if (strpagesize.Trim() != "")
  1618. {
  1619. pagesize = Convert.ToInt32(strpagesize);
  1620. }
  1621. if (strstarttime.Trim() != "" && strstarttime != "undefined")
  1622. {
  1623. if (strendtime.Trim() != "" && strendtime != "undefined")
  1624. {
  1625. sql += " and F_CreateTime between '" + strstarttime +
  1626. "' AND '" + strendtime + "'";
  1627. }
  1628. else
  1629. {
  1630. sql += " and F_CreateTime>='" + strstarttime + "' ";
  1631. }
  1632. }
  1633. else
  1634. {
  1635. if (strendtime.Trim() != "" && strendtime != "undefined")
  1636. {
  1637. sql += " and F_CreateTime<='" + strendtime + "' ";
  1638. }
  1639. }
  1640. #endregion
  1641. if (strstate > 0)
  1642. {
  1643. sql += " and F_WorkOrderState='"+strstate+"'";
  1644. }
  1645. if (category > 0)
  1646. {
  1647. sql += " and F_WorkOrderCategory='" + category + "'";
  1648. }
  1649. int recordCount = 0;
  1650. if (isexport==1)
  1651. {
  1652. //执行时限 服务评价
  1653. string exportsql = "select F_WorkOrderCode 工单编号,F_CreateTime 创建时间,dbo.GetDepName (F_ApplicationDept) 报工科室,[dbo].[GetUserName](F_Applicant) 报修人,F_WorkOrderCategory 工单类别, F_Content 工单内容,(case F_WorkOrderState when 0 then '新工单' when 1 then '待查收'when 2 then '待完成'when 3 then '已处理'when 4 then '异常完结'when 5 then '已完结' when 6 then '已到达' else '' end ) 工单状态,[dbo].[GetUserName](F_Maintenancer) 维修员,F_Endtime 维修时间,dbo.[GetConvertSecond](DATEDIFF(ss,F_CreateTime,F_Endtime)) 工单耗时,[dbo].[GetGapTime](F_Deadline,F_CreateTime,F_Endtime,F_IsStop,F_StopTime) 执行时限, F_Score 服务评价,dbo.GetUserName(F_AssignUser) 调度人 from T_FaultRepair_Base where 1=1" + sql;
  1654. var dtdc = DbHelperSQL.Query(exportsql).Tables[0];
  1655. var msg = new NPOIHelper().ExportToExcel("故障报修综合报表", dtdc);
  1656. if (msg == "")
  1657. {
  1658. return Success("导出成功");
  1659. }
  1660. else
  1661. {
  1662. return Error("导出失败");
  1663. }
  1664. }
  1665. DataTable datatable = Bll.PagerBll.GetListPager
  1666. ("T_FaultRepair_Base ",
  1667. "F_WorkOrderId",
  1668. "F_WorkOrderId,F_WorkOrderCode ,F_CreateTime ,dbo.GetDepName(F_ApplicationDept) deptname ,[dbo].[GetUserName](F_Applicant) applicantname ,F_WorkOrderCategory , F_Content ,(case F_WorkOrderState when 0 then '新工单' when 1 then '待查收'when 2 then '待完成'when 3 then '已处理'when 4 then '异常完结'when 5 then '已完结' when 6 then '已到达' else '' end ) workorderstatename,[dbo].[GetUserName](F_Maintenancer) maintenancer,F_Endtime ,dbo.[GetConvertSecond](DATEDIFF(ss,F_CreateTime,F_Endtime)) spendtime ,[dbo].[GetGapTime](F_Deadline,F_CreateTime,F_Endtime,F_isStop,F_StopTime) gaptime , F_Score ,dbo.GetUserName(F_AssignUser) createname",
  1669. sql,
  1670. "order by F_WorkOrderId desc",
  1671. pagesize,
  1672. pageindex,
  1673. true,
  1674. out recordCount
  1675. );
  1676. var obj = new
  1677. {
  1678. state = "success",
  1679. message = "成功",
  1680. rows = datatable,
  1681. total = recordCount
  1682. };
  1683. return Content(obj.ToJson());
  1684. }
  1685. //挂起
  1686. public ActionResult HangUp(string workordercode)
  1687. {
  1688. Model.T_FaultRepair_Base model = baseBll.GetModel(workordercode);
  1689. if (model != null && model.F_WorkOrderState!=2 && model.F_WorkOrderState != 6)
  1690. {
  1691. return Error("挂起失败");
  1692. }
  1693. model.F_IsStop = 1;
  1694. model.F_StopTime = DateTime.Now;
  1695. baseBll.Update(model);
  1696. AddOperatorLog(User.F_UserCode + "挂起了工单", (int)EnumOperatorType.hangup, model.F_WorkOrderCode);
  1697. return Success("挂起成功");
  1698. }
  1699. //到达操作 arrive
  1700. public ActionResult Arrive(string workordercode)
  1701. {
  1702. Model.T_FaultRepair_Base model = baseBll.GetModel(workordercode);
  1703. if (model == null)
  1704. {
  1705. return Error("没有获取到工单号");
  1706. }
  1707. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.arrive;
  1708. model.F_ArriveTime = DateTime.Now;
  1709. baseBll.Update(model);
  1710. AddOperatorLog(User.F_UserName +"已到达", (int)EnumOperatorType.arrive, model.F_WorkOrderCode);
  1711. return Success("到达操作成功");
  1712. }
  1713. // 退回(工单状态gai为“待提交”)
  1714. public ActionResult ReBack(string workordercode)
  1715. {
  1716. Model.T_FaultRepair_Base model = baseBll.GetModel(workordercode);
  1717. if (model == null)
  1718. {
  1719. return Error("没有获取到工单号");
  1720. }
  1721. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.waitsubmit;
  1722. baseBll.Update(model);
  1723. AddOperatorLog(User.F_UserName + "退回了工单", (int)EnumOperatorType.reback, model.F_WorkOrderCode);
  1724. return Success("退回操作成功");
  1725. }
  1726. // 撤回(已指派未接单的可进行撤回,工单状态为“待指派”)
  1727. public ActionResult Retract(string workordercode)
  1728. {
  1729. Model.T_FaultRepair_Base model = baseBll.GetModel(workordercode);
  1730. if (model == null)
  1731. {
  1732. return Error("没有获取到工单号");
  1733. }
  1734. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  1735. model.F_Maintenancer = "";
  1736. model.F_MaintenanceDept = "";
  1737. baseBll.Update(model);
  1738. AddOperatorLog(User.F_UserName + "撤回了工单", (int)EnumOperatorType.retract, model.F_WorkOrderCode);
  1739. return Success("撤回操作成功");
  1740. }
  1741. //综合保障中心里 指派(撤回之后可重新转派),同时需要记录操作流程
  1742. public ActionResult Assign(string workordercode,string maintenancer,string maintenanceDept)
  1743. {
  1744. Model.T_FaultRepair_Base model = baseBll.GetModel(workordercode);
  1745. if (model == null)
  1746. {
  1747. return Error("没有获取到工单号");
  1748. }
  1749. if (!string.IsNullOrEmpty(maintenanceDept))
  1750. {
  1751. model.F_AssignTime = DateTime.Now;
  1752. model.F_AssignUser = User.F_UserCode;
  1753. List<Model.T_Sys_GongDan> listgd = gdbll.GetModelList(" F_GDId='" + model.F_WorkOrderCategory + "'");
  1754. int timeout = listgd.First().F_TimeOut;
  1755. model.F_Deadline = DateTime.Now.AddHours(timeout);
  1756. model.F_MaintenanceDept = maintenanceDept;
  1757. if (!string .IsNullOrEmpty (maintenancer))
  1758. model.F_Maintenancer = maintenancer;
  1759. else
  1760. {
  1761. var user = GetBeOnDuty(maintenancer);
  1762. if (user != null && user.Count > 1)
  1763. {
  1764. model.F_Maintenancer = user[0];
  1765. }
  1766. else
  1767. {
  1768. return Error("请选择指派人员");
  1769. }
  1770. }
  1771. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.receive;
  1772. }
  1773. baseBll.Update(model);
  1774. AddAssignlog(model.F_WorkOrderCode, maintenanceDept, maintenancer);
  1775. return Success("指派操作成功");
  1776. }
  1777. #region 我的提交页面的操作
  1778. //撤回(未指派的工单可撤回,工单状态“待提交”)
  1779. public ActionResult MyRetract(string workordercode)
  1780. {
  1781. Model.T_FaultRepair_Base model = baseBll.GetModel(workordercode);
  1782. if (model == null)
  1783. {
  1784. return Error("没有获取到工单号");
  1785. }
  1786. if (model.F_WorkOrderState == 0)
  1787. {
  1788. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.waitsubmit;
  1789. baseBll.Update(model);
  1790. AddOperatorLog(User.F_UserName + "撤回了工单", (int)EnumOperatorType.myretract, model.F_WorkOrderCode);
  1791. return Success("撤回操作成功");
  1792. }
  1793. else
  1794. {
  1795. return Error("不能撤回");
  1796. }
  1797. }
  1798. //我的提交里编辑工单
  1799. /// <summary>
  1800. ///编辑
  1801. /// </summary>
  1802. /// <param name="input"></param>
  1803. /// <returns></returns>
  1804. public ActionResult MyUpdateFaultRepairWorkOrder(T_FaultRepairBaseinput input)
  1805. {
  1806. Model.T_FaultRepair_Base model = baseBll.GetModel(input.WorkOrderCode);
  1807. model.F_WorkOrderCategory = input.WorkOrderCategory;
  1808. model.F_Content = input.Content;
  1809. model.F_PlaceOfRepair = input.PlaceOfRepair;
  1810. model.F_File = input.File;
  1811. model.F_WorkOrderState = (int)EnumFaultRepairWorkOrderState.neworder;
  1812. model.F_UpdateTime = DateTime.Now;
  1813. if (baseBll.Update(model))
  1814. {
  1815. AddOperatorLog(User.F_UserName+"编辑了工单", (int)EnumOperatorType.update, model.F_WorkOrderCode);
  1816. return Success("编辑成功!");
  1817. }
  1818. else return Error("编辑失败!");
  1819. }
  1820. #endregion
  1821. }
  1822. }