颐和api

MessageController.cs 87KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Mvc;
  6. using MadRunFabric.Common;
  7. using Microsoft.AspNetCore.Authorization;
  8. using Microsoft.Extensions.Logging;
  9. using MessageApi.IRepositories;
  10. using MadRunFabric.Common.Enums;
  11. using MadRunFabric.Model;
  12. using System.Security.Claims;
  13. using Microsoft.Extensions.Caching.Distributed;
  14. using MadRunFabric.Model.MessageApi;
  15. using MessageApi.Model;
  16. using Microsoft.Extensions.Configuration;
  17. using System.Security.Cryptography.X509Certificates;
  18. using NetTaste;
  19. namespace MessageApi.Controllers
  20. {
  21. /// <summary>
  22. /// 消息通知 - 工单
  23. /// </summary>
  24. [Authorize]
  25. [ApiVersion("6.0")]
  26. [Produces("application/json")]
  27. [Route("api/[controller]")]
  28. public class MessageController : BaseController
  29. {
  30. private readonly ILogger<MessageController> _logger;
  31. private readonly IDistributedCache _cache;
  32. private readonly IWo_Repair_BaseRepository _wo_repair_baseRepository;
  33. private readonly IWo_Maintain_BaseRepository _wo_maintain_baserepository;
  34. private readonly IWo_Maintain_PlanRepository _wo_maintain_planrepository;
  35. private readonly IWo_EquipmentRunningRepository _wo_equipmentrunningrepository;
  36. private readonly IEqp_Equipment_InfoRepository _eqp_equipment_inforepository;
  37. private readonly IWo_Order_User_MapRepository _wo_order_user_maprepository;
  38. private readonly IWo_TimeOutRepository _wo_timeoutrepository;
  39. private readonly ISys_Role_InfoRepository _sys_roleinfoRepository;
  40. private readonly ISys_User_AccountRepository _sys_user_accountRepository;
  41. private readonly IDistri_WorkorderRepository _distri_workorderrepository;
  42. private readonly ISys_ClassGroupRepository _sys_classgrouprepository;
  43. private readonly IDistri_Workorder_PlanTaskRepository _distri_workorder_plantaskrepository;
  44. private readonly ISys_ClassGroup_User_MapRepository _sys_classgroup_user_maprepository;
  45. private readonly IConfiguration _configuration;
  46. private readonly IWo_MattersRepository _wo_mattersRepository;
  47. private readonly IusercoldandclintidRepository _usercoldandclintidRepository;
  48. public MessageController(
  49. ILogger<MessageController> logger,
  50. IDistributedCache cache,
  51. IWo_Repair_BaseRepository wo_repair_baseRepository,
  52. IWo_Maintain_BaseRepository wo_maintain_baserepository,
  53. IWo_Maintain_PlanRepository wo_maintain_planrepository,
  54. IWo_EquipmentRunningRepository wo_equipmentrunningrepository,
  55. IEqp_Equipment_InfoRepository eqp_equipment_inforepository,
  56. IWo_Order_User_MapRepository wo_order_user_maprepository,
  57. IWo_TimeOutRepository wo_timeoutrepository,
  58. ISys_Role_InfoRepository sys_roleinfoRepository,
  59. ISys_User_AccountRepository sys_user_accountRepository,
  60. IDistri_WorkorderRepository distri_workorderrepository,
  61. ISys_ClassGroupRepository sys_classgrouprepository,
  62. IDistri_Workorder_PlanTaskRepository distri_workorder_plantaskrepository,
  63. ISys_ClassGroup_User_MapRepository sys_classgroup_user_maprepository,
  64. IConfiguration configuration, IWo_MattersRepository wo_mattersRepository,
  65. IusercoldandclintidRepository usercoldandclintidRepository
  66. )
  67. {
  68. _logger = logger;
  69. _cache = cache;
  70. _wo_repair_baseRepository = wo_repair_baseRepository;
  71. _wo_maintain_baserepository = wo_maintain_baserepository;
  72. _wo_maintain_planrepository = wo_maintain_planrepository;
  73. _wo_equipmentrunningrepository = wo_equipmentrunningrepository;
  74. _eqp_equipment_inforepository = eqp_equipment_inforepository;
  75. _wo_order_user_maprepository = wo_order_user_maprepository;
  76. _wo_timeoutrepository = wo_timeoutrepository;
  77. _sys_roleinfoRepository = sys_roleinfoRepository;
  78. _sys_user_accountRepository = sys_user_accountRepository;
  79. _distri_workorderrepository = distri_workorderrepository;
  80. _sys_classgrouprepository = sys_classgrouprepository;
  81. _distri_workorder_plantaskrepository = distri_workorder_plantaskrepository;
  82. _sys_classgroup_user_maprepository = sys_classgroup_user_maprepository;
  83. _configuration = configuration;
  84. _wo_mattersRepository = wo_mattersRepository;
  85. _usercoldandclintidRepository = usercoldandclintidRepository;
  86. }
  87. /// <summary>
  88. /// 保存App客户端ClientId值
  89. /// </summary>
  90. /// <returns></returns>
  91. [HttpPost("putpushclientinfo")]
  92. public async Task<IActionResult> PutAppClientIdAsync(string clientid, int apptype = 1)
  93. {
  94. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  95. #region 丢弃不用
  96. //var list = new List<AppClientListDto>();
  97. ////获取角色code: 运维员工 YWYG 、运维主管 YWZG 、运营副经理 YWFJL 、运营经理 YWJL 、运营总监 YWZJ 、运营副总 YWFZ 、运营总经理 YWZJL
  98. ////配送:电梯岗 SSY_DTG 、配送岗 SSY_PSG 、配送主管 SSY_ZG
  99. //string rolecode = "";
  100. //var modelUser = await _sys_user_accountRepository.GetSingle(x => x.usercode == usercode);
  101. //if (modelUser != null)
  102. //{
  103. // var roleinfo = await _sys_roleinfoRepository.GetSingle(x => x.id == modelUser.role_id);
  104. // rolecode = roleinfo.role_code;
  105. //}
  106. ////获取redis缓存
  107. //var clientidStr = await _cache.GetStringAsync("clientidlist");
  108. //if (!string.IsNullOrEmpty(clientidStr) && clientidStr != "null")
  109. // list = clientidStr.ToList<AppClientListDto>();
  110. //var rolecodeStr = "YWYG,YWZG,YWFJL,YWJL,YWZJ,YWFZ,YWZJL,SSY_DTG,SSY_PSG,SSY_ZG";
  111. //if (rolecodeStr.Contains(rolecode))
  112. //{
  113. // if (!string.IsNullOrEmpty(clientid))
  114. // {
  115. // var count = 0;
  116. // #region 去重 - 保证只有一个坐席账号,且只往一个登录账号的手机上推送
  117. // var lists = list.Where(x => x.usercode == usercode).ToList();
  118. // if (lists != null) count = lists.Count();
  119. // if (count > 0)
  120. // {
  121. // foreach (var item in lists)
  122. // {
  123. // list.Remove(item);
  124. // }
  125. // }
  126. // //存入redis缓存
  127. // list.Add(new AppClientListDto
  128. // {
  129. // apptype = apptype,
  130. // clientid = clientid,
  131. // usercode = usercode
  132. // });
  133. // await _cache.SetStringAsync($"clientidlist", list.ToJson());
  134. // #endregion
  135. // return Success("保存ClientId成功");
  136. // }
  137. // return Success("没有获取到该设备clientid");
  138. //}
  139. #endregion
  140. // var usercode = "888888";
  141. ///判断数据库中有没有存这条记录
  142. var isclintid = await _usercoldandclintidRepository.GetSingle(p=>p.usercode==usercode);
  143. if (isclintid == null)
  144. {
  145. MadRunFabric.Model.EquipmentApi.Model.usercoldandclintid userclint = new MadRunFabric.Model.EquipmentApi.Model.usercoldandclintid();
  146. userclint.usercode = usercode;
  147. userclint.clintid = clientid;
  148. userclint.apptype = apptype;
  149. var a = _usercoldandclintidRepository.AddRetID(userclint);
  150. if (a.Result != null || a.Result != "")
  151. {
  152. return Success("成功");
  153. }
  154. else
  155. {
  156. return Error("失败");
  157. }
  158. }
  159. else
  160. {
  161. isclintid.clintid = clientid;
  162. var a = _usercoldandclintidRepository.UpdateOne(isclintid);
  163. if (a.Result)
  164. {
  165. return Success("成功");
  166. }
  167. else
  168. {
  169. return Error("失败");
  170. }
  171. }
  172. }
  173. /// <summary>
  174. /// 获取App客户端ClientId列表
  175. /// </summary>
  176. /// <returns></returns>
  177. [AllowAnonymous]
  178. [HttpGet("getclientidlist")]
  179. public async Task<IActionResult> GetAppClientIdlistAsync()
  180. {
  181. var list = new List<AppClientListDto>();
  182. ////获取redis缓存
  183. //var clientidStr = await _cache.GetStringAsync("clientidlist");
  184. //if (!string.IsNullOrEmpty(clientidStr) && clientidStr != "null")
  185. // list = clientidStr.ToList<AppClientListDto>();
  186. return Success("获取客户端ClientId列表", list);
  187. }
  188. /// <summary>
  189. /// 记录已推送信息
  190. /// </summary>
  191. /// <param name="wocode"></param>
  192. /// <param name="channelcode">//工单类型(枚举EnumOrderState) 维修工单 = 1, 保养工单 = 2, 运行工单 = 3, 超时工单 = 4, 配送工单 = 5, 计划工单 = 6</param>
  193. /// <returns></returns>
  194. [AllowAnonymous]
  195. [HttpGet("addappmessage")]
  196. public async Task<IActionResult> addAppMessageAsync(string woid, string wocode, int wostate, string usercode, int channelcode = 0)
  197. {
  198. if (!string.IsNullOrEmpty(wocode))
  199. {
  200. #region 标记消息提醒工单(消息提醒,App推送)
  201. if (channelcode > 0)
  202. {
  203. #region 查询 4个表 by channelcode
  204. var content = string.Empty;
  205. if (channelcode == 1)
  206. {
  207. //维修工单 - 未处理完成
  208. var listrepair_base = await _wo_repair_baseRepository.Get(x => x.wostate < 3 && x.isdelete == 0);
  209. var model_repair_base = listrepair_base.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
  210. if (model_repair_base != null)
  211. content = "故障说明:" + model_repair_base.faultdescripe;
  212. }
  213. if (channelcode == 2)
  214. {
  215. //保养工单 - 未处理完成
  216. var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.wostate < 3 && x.isdelete == false);
  217. var model_maintain_base = listmaintain_base.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
  218. if (model_maintain_base != null)
  219. content = model_maintain_base.woname + (string.IsNullOrEmpty(model_maintain_base.maintaincontent) ? "" : ",保养内容:" + model_maintain_base.maintaincontent);
  220. }
  221. if (channelcode == 3)
  222. {
  223. //设备巡检工单 - 未处理完成
  224. var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.wostate <= 3 && x.isdelete == 0);
  225. var model_equipmentrunning = listequipmentrunning.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
  226. if (model_equipmentrunning != null)
  227. content = model_equipmentrunning.woname + (string.IsNullOrEmpty(model_equipmentrunning.wocontent) ? "" : ",工单内容:" + model_equipmentrunning.wocontent) + (string.IsNullOrEmpty(model_equipmentrunning.checkcontent) ? "" : ",异常说明:" + model_equipmentrunning.checkcontent);
  228. }
  229. if (channelcode == 4)
  230. {
  231. //超时工单 - 所有
  232. var listetimeout = await _wo_timeoutrepository.Get(x => x.isdelete == false && x.istimeout == 1);
  233. var model_etimeout = listetimeout.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
  234. if (model_etimeout != null)
  235. content = "超时原因:" + model_etimeout.timeoutreason; //超时原因
  236. }
  237. if (channelcode == 5)
  238. {
  239. //配送工单 - 所有
  240. var listdistri = await _distri_workorderrepository.Get(x => x.isdelete == 0 && x.wostate == (int)EnumDistributionState.create);
  241. var model_distri = listdistri.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
  242. if (model_distri != null)
  243. {
  244. string goodsDetail = (model_distri.goodslist != null && model_distri.goodslist.Count > 0) ? ",配送物品:" + model_distri.goodslist.Select(x => x.goodsname).ToJson() : "";
  245. content = "配送内容:" + model_distri.detail + goodsDetail; //配送内容
  246. }
  247. }
  248. if (channelcode == 6)
  249. {
  250. //超时工单 - 所有
  251. var listdistri = await _distri_workorder_plantaskrepository.Get(x => x.isdelete == 0 && x.planwostate == (int)EnumDistriWorkOrderPlanWOstate.create);
  252. var model_distri = listdistri.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
  253. if (model_distri != null)
  254. {
  255. string goodsDetail = (model_distri.goodslist != null && model_distri.goodslist.Count > 0) ? ",配送计划工单物品:" + model_distri.goodslist.Select(x => x.goodsname).ToJson() : "";
  256. content = "配送计划工单内容:" + model_distri.content + goodsDetail; //配送内容
  257. }
  258. }
  259. #endregion
  260. //维修工单号
  261. var listmap = await _wo_order_user_maprepository.Get(x => x.wocode == wocode && x.wostate.Equals(wostate) && x.woid == woid && x.channelcode == channelcode && x.readby == usercode);
  262. var modelmap = listmap.FirstOrDefault();
  263. if (modelmap == null)
  264. {
  265. //添加是否已读关系表
  266. modelmap = new Wo_Order_User_Map();
  267. modelmap.woid = woid;
  268. modelmap.wocode = wocode;
  269. modelmap.wostate = wostate;
  270. modelmap.readby = usercode;
  271. modelmap.channelcode = channelcode; //工单类型(枚举EnumOrderState) 维修工单 = 1, 保养工单 = 2, 运行工单 = 3, 超时工单 = 4
  272. modelmap.ispush = 1;
  273. modelmap.isread = 0;
  274. modelmap.readtime = DateTime.Now;
  275. modelmap.note = content;
  276. bool b = await _wo_order_user_maprepository.Add(modelmap);
  277. }
  278. else
  279. {
  280. if (modelmap.ispush != 1)
  281. {
  282. modelmap.ispush = 1;
  283. modelmap.note = content;
  284. bool b = await _wo_order_user_maprepository.UpdateOne(modelmap);
  285. }
  286. }
  287. return Success("推送记录成功");
  288. }
  289. #endregion
  290. }
  291. return Success("参数错误");
  292. }
  293. /// <summary>
  294. /// Push 消息通知 - 设备维修(报修工单)
  295. /// 维修工单/保养工单/巡检工单/超时工单
  296. /// </summary>
  297. /// <param name="messagetype">消息类型 (1消息通知信息,2推送信息)</param>
  298. /// <returns></returns>
  299. [HttpGet("getmessagelists")]
  300. [AllowAnonymous]
  301. public async Task<IActionResult> GetMessagesLists(string usercode)
  302. {
  303. #region 不同地方
  304. //int messagetype = 2; //推送
  305. //运维员工YWYG,运维主管YWZG
  306. string rolecode = "";
  307. string projectlist = "";
  308. //获取角色code,运维员工维护项目id
  309. var modelUser = await _sys_user_accountRepository.GetSingle(x => x.usercode == usercode);
  310. if (modelUser != null)
  311. {
  312. var roleinfo = await _sys_roleinfoRepository.GetSingle(x => x.id == modelUser.role_id);
  313. rolecode = roleinfo.role_code;
  314. projectlist = string.Join(",", modelUser.projectlist);
  315. }
  316. //工单用户查看关系表 - 已查看订单
  317. var listmap = await _wo_order_user_maprepository.Get(x => x.readby.Equals(usercode)); // && x.isread == 1
  318. listmap = listmap.Where(x => x.ispush == 1);
  319. #endregion
  320. //维修工单 - 未处理完成
  321. var listrepair_base = await _wo_repair_baseRepository.Get(x => x.wostate < 3 && x.isdelete == 0);
  322. //保养工单 - 未处理完成
  323. var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.wostate < 3 && x.isdelete == false);
  324. //设备巡检工单 - 未处理完成
  325. var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.wostate <= 3 && x.isdelete == 0);
  326. //超时工单 - 所有
  327. var listetimeout = await _wo_timeoutrepository.Get(x=>x.isdelete == false && x.istimeout == 1);
  328. //配送工单 - 新工单,派单(派单/强制派单)
  329. var listdistri = await _distri_workorderrepository.Get(x => x.wostate <= (int)EnumDistributionState.assign && x.isdelete == 0 && x.totype != (int)EnumDistributionTotype.robbery); //&& (x.totype == (int)EnumDistributionTotype.send || x.totype == (int)EnumDistributionTotype.assign)
  330. //班次
  331. var query_classgroup = await _sys_classgrouprepository.Get(x => x.isdelete == 0);
  332. //排班
  333. var query_usermap = await _sys_classgroup_user_maprepository.Get(x => x.isdelete == 0 && x.isstatus == 1);//配送工单 - 新工单,派单(派单/强制派单)
  334. //计划工单
  335. var listwotask = await _distri_workorder_plantaskrepository.Get(x => x.isdelete == 0 && x.planwostate != (int)EnumDistriWorkOrderPlanWOstate.start);
  336. //设备信息
  337. var listequipment_info = await _eqp_equipment_inforepository.Get(x => x.isdelete == 0);
  338. //检查事项
  339. var listmatter = await _wo_mattersRepository.Get(x => x.isdelete == false);
  340. var list = new List<MessageListDto>();
  341. #region 条件判断 - 工单消息提醒和推送流程
  342. //1、运维员工 YWYG < 2、运维主管 YWZG < 3、运营副经理 YWFJL < 4、运营经理 YWJL < 5、运营总监 YWZJ < 6、运营副总 YWFZ < 7、运营总经理 YWZJL
  343. //说明工单(延迟时间配置DelayPushTime):
  344. // 1、新单未抢单 和 未转派 运维员工;(例如9:00)
  345. // 2、超过 1 * 几分钟 无人抢单行为推送给 运维主管;(例如9:05)
  346. // 3、超过 3 * 几分钟 无派单行为推送给 运营副经理;(例如9:15)
  347. // 4、超过 4 * 几分钟 无管理行为推送给 运营经理和运营总监;(例如9:20)
  348. // 5、超过 6 * 几分钟 无管理行为推送给 运营副总和运营总经理;(例如9:30)
  349. int timespan = 0;
  350. int.TryParse(_configuration["PushMessage:DelayPushTime"], out timespan);
  351. DateTime nowTime = DateTime.Now.ToLocalTime();
  352. listrepair_base = listrepair_base.Where(x => projectlist.Contains(x.projectid));
  353. listmaintain_base = listmaintain_base.Where(x =>projectlist.Contains(x.projectid));
  354. listequipmentrunning = listequipmentrunning.Where(x => projectlist.Contains(x.projectid));
  355. ////listetimeout = listetimeout.Where(x => projectlist.Contains(x.projectid));
  356. listdistri = listdistri.Where(x => projectlist.Contains(x.projectid));
  357. #region 配送工单 参与 排班条件
  358. //随机工单
  359. DateTime dtnow = DateTime.Now;
  360. string nowDay = dtnow.ToString("yyyy-MM-dd");
  361. var listClassUser = query_usermap.Where(x => x.date == nowDay).ToList(); //.Where(x=>x.date == nowDay)
  362. //var query_result = new List<Distri_WorkorderDto>();
  363. //此法写的原因是要查询对应时间段的工单,需要或||拼接 ----------------------------------------------
  364. var list_distri = new List<Distri_Workorder>();
  365. if (!string.IsNullOrEmpty(rolecode))
  366. {
  367. //var query1 = new List<Distri_WorkorderDto>();
  368. ////条件拼接(时间段查询) -----------------
  369. //非值班 && x.roleList.Select(r => r.rolecode).Contains(rolecode) 以排班的选中角色为准
  370. var listClass = query_classgroup.ToList();
  371. if (rolecode.Equals("SSY_DTG"))
  372. listClass = query_classgroup.ToList().Where(x => x.iswork == false).ToList();
  373. if (listClass != null && listClass.Count > 0)
  374. {
  375. #region 获取新工单 by 排班/班次 - 电梯岗 -----------------------------------------
  376. //获取新工单
  377. var query_zero = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create).ToList();
  378. listClassUser = listClassUser.Where(x => x.date == nowDay && x.usercode == usercode).ToList();
  379. foreach (var item in listClassUser)
  380. {
  381. #region 调用条件 - 日期和班别code
  382. //获取条件 - 日期和班别code
  383. var list_code = new List<string> { }; //班别code
  384. var dayone = item.date;
  385. var list_r = item.classgroupList.ToList();
  386. foreach (var item_r in list_r)
  387. {
  388. if (item_r.roleList != null && item_r.roleList.Count > 0)
  389. {
  390. //角色 - 班别
  391. var mode_r = item_r.roleList.FirstOrDefault(x => x.ischeck == true); //rolecode SSY_PSG // && x.rolecode == rolecode
  392. if (mode_r != null)
  393. list_code.Add(item_r.code);
  394. }
  395. }
  396. if (list_code != null && list_code.Count > 0)
  397. {
  398. listClass = listClass.Where(x => list_code.Contains(x.code)).ToList();
  399. var model_Class = listClass.FirstOrDefault(x => DateTime.Parse(nowDay + " " + x.starttime) <= dtnow && DateTime.Parse(nowDay + " " + x.endtime) >= dtnow);
  400. if (model_Class != null)
  401. {
  402. list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + model_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + model_Class.endtime))).ToList();
  403. }
  404. //foreach (var item_Class in listClass)
  405. //{
  406. // list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + item_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + item_Class.endtime))).ToList();
  407. //}
  408. }
  409. #endregion
  410. }
  411. #endregion
  412. }
  413. }
  414. #endregion
  415. if (rolecode.Equals("YWYG"))
  416. {
  417. //1、已抢单 和 已转派 运维员工 <--> 新单 - 未抢单 和 未转派 运维员工 -- 合并两List
  418. listrepair_base = listrepair_base.Where(x => x.wostate == 1 && x.touser.Contains(usercode))
  419. .Concat(listrepair_base.Where(x => x.wostate == 0));
  420. listmaintain_base = listmaintain_base.Where(x => x.wostate == 1 && x.maintainuser.Contains(usercode))
  421. .Concat(listmaintain_base.Where(x => x.wostate == 0));
  422. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 1 && x.checkby.Equals(usercode))
  423. .Concat(listequipmentrunning.Where(x => x.wostate == 0));
  424. listetimeout = listetimeout.Where(x => x.touser.Equals(usercode));
  425. }
  426. else if (rolecode.Equals("SSY_PSG"))
  427. {
  428. //rolecode.Equals("SSY_DTG") ||
  429. //20、配送岗 <--> 新单 、派单(派单/强制派单) -- 合并两List
  430. //listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
  431. // .Concat(listdistri.Where(x => x.wostate == (int)EnumDistributionState.create));
  432. listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
  433. .Concat(list_distri); //合并新建工单,和接单工单
  434. listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
  435. }
  436. else if (rolecode.Equals("SSY_DTG"))
  437. {
  438. listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
  439. }
  440. else if (rolecode.Equals("SSY_ZG"))
  441. {
  442. DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
  443. //21、无人抢单 - 配送主管 <--> 新单 、派单(派单/强制派单) -- 合并两List
  444. listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create && x.createtime < dTime);
  445. }
  446. else if (rolecode.Equals("YWZG"))
  447. {
  448. DateTime dTime = nowTime.AddMinutes(timespan * 1); //推迟1 * 几分钟
  449. //2、无人抢单 - 运维主管
  450. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  451. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  452. listequipmentrunning = listequipmentrunning.Where(x => (x.wostate == 0 && x.createtime < dTime) || x.wostate == 3); //包含完成工单(完成巡检后给对应的管理员发送信息)
  453. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  454. }
  455. else if (rolecode.Equals("YWFJL"))
  456. {
  457. DateTime dTime = nowTime.AddMinutes(timespan * 3); //推迟3 * 几分钟
  458. //3、无派单 - 运营副经理
  459. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  460. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  461. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
  462. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  463. }
  464. else if (rolecode.Equals("YWJL") || rolecode.Equals("YWZJ"))
  465. {
  466. DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
  467. //无管理 - 运营经理 和 运营总监
  468. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  469. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  470. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
  471. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  472. }
  473. else if (rolecode.Equals("YWFZ") || rolecode.Equals("YWZJL"))
  474. {
  475. DateTime dTime = nowTime.AddMinutes(timespan * 6); //推迟6 * 几分钟
  476. //无管理 - 运营副总 和 运营总经理
  477. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  478. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  479. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
  480. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  481. }
  482. else
  483. {
  484. //其他角色或空是,不显示消息提醒
  485. return Success("角色(" + rolecode + ")不获取消息提醒", new { rows = new List<MessageListDto>(), total = -1 });
  486. }
  487. #endregion
  488. if (rolecode.Equals("SSY_PSG") || rolecode.Equals("SSY_DTG"))
  489. {
  490. #region 配送计划工单 - 配送
  491. foreach (var item in listwotask)
  492. {
  493. string statename = string.Empty;
  494. if (item.planwostate == (int)EnumDistriWorkOrderPlanWOstate.start)
  495. statename = "新建计划工单";
  496. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.planwostate) && x.channelcode == (int)EnumOrderState.配送计划工单);
  497. var modelmap = listmapwo.FirstOrDefault();
  498. //未推送
  499. if (modelmap == null)
  500. {
  501. string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送计划物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
  502. list.Add(new MessageListDto
  503. {
  504. id = item.id,
  505. woid = item.id,
  506. channelcode = (int)EnumOrderState.配送计划工单,
  507. wotype = (int)EnumWoType.配送计划,
  508. wocode = item.wocode,
  509. proname = "配送计划工单:" + item.wocode,
  510. title = item.wocode,
  511. content = "配送计划工单说明:" + item.content + goodsDetail,
  512. wostate = item.planwostate,
  513. statename = statename, //工单状态
  514. checkby = string.Join(",", item.joinuserlist), //接单人
  515. createby = item.createtby,
  516. createtime = item.createtime,
  517. isread = 0,
  518. });
  519. }
  520. }
  521. #endregion
  522. #region 配送工单
  523. foreach (var item in listdistri)
  524. {
  525. string statename = string.Empty;
  526. if (item.wostate == (int)EnumDistributionState.create)
  527. statename = "新建工单";
  528. if (item.wostate == (int)EnumDistributionState.assign)
  529. statename = "派单/强制派单";
  530. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.配送工单);
  531. var modelmap = listmapwo.FirstOrDefault();
  532. //未推送
  533. if (modelmap == null)
  534. {
  535. string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
  536. list.Add(new MessageListDto
  537. {
  538. id = item.id,
  539. woid = item.id,
  540. channelcode = (int)EnumOrderState.配送工单,
  541. wotype = (int)EnumWoType.配送,
  542. wocode = item.wocode,
  543. proname = "配送工单:" + item.wocode,
  544. title = item.wocode,
  545. content = "配送说明:" + item.detail + goodsDetail,
  546. wostate = item.wostate,
  547. statename = statename, //工单状态
  548. checkby = string.Join(",", item.touser), //接单人
  549. createby = item.createtby,
  550. createtime = item.createtime,
  551. isread = 0,
  552. });
  553. }
  554. }
  555. #endregion
  556. }
  557. else
  558. {
  559. #region 维修工单
  560. foreach (var item in listrepair_base)
  561. {
  562. string statename = string.Empty;
  563. if (item.wostate == (int)EnumWorkOrderState.create)
  564. statename = "新建工单";
  565. if (item.wostate == (int)EnumWorkOrderState.assign)
  566. statename = "已转派/已抢单";
  567. if (item.wostate >= (int)EnumWorkOrderState.deal)
  568. statename = "已完成";
  569. if (item.wostate == (int)EnumWorkOrderState.hangup)
  570. statename = "已挂起";
  571. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.维修工单);
  572. var modelmap = listmapwo.FirstOrDefault();
  573. //未推送
  574. if (modelmap == null)
  575. {
  576. list.Add(new MessageListDto
  577. {
  578. id = item.id,
  579. woid = item.id,
  580. channelcode = (int)EnumOrderState.维修工单,
  581. wotype = (int)EnumWoType.维修,
  582. wocode = item.wocode,
  583. proname = "维修工单:" + item.wocode, // + " " + item.proname,
  584. title = item.wocode,
  585. content = "故障说明:" + item.faultdescripe,
  586. wostate = item.wostate,
  587. statename = statename, //工单状态
  588. checkby = string.Join(",", item.touser), //接单人
  589. createby = item.createuser,
  590. createtime = item.createtime,
  591. isread = 0,
  592. });
  593. }
  594. }
  595. #endregion
  596. #region 保养工单
  597. foreach (var item in listmaintain_base)
  598. {
  599. string statename = string.Empty;
  600. if (item.wostate == (int)EnumWorkOrderState.create)
  601. statename = "新建工单";
  602. if (item.wostate == (int)EnumWorkOrderState.assign)
  603. statename = "已转派/已抢单";
  604. if (item.wostate >= (int)EnumWorkOrderState.deal)
  605. statename = "已完成";
  606. if (item.wostate == (int)EnumWorkOrderState.hangup)
  607. statename = "已挂起";
  608. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.保养工单);
  609. var modelmap = listmapwo.FirstOrDefault();
  610. //未推送
  611. if (modelmap == null)
  612. {
  613. list.Add(new MessageListDto
  614. {
  615. id = item.id,
  616. woid = item.id,
  617. channelcode = (int)EnumOrderState.保养工单,
  618. wotype = (int)EnumWoType.保养,
  619. wocode = item.wocode,
  620. proname = "保养工单:" + item.wocode, // + " " + item.proname,
  621. title = item.wocode,
  622. content = item.woname + (string.IsNullOrEmpty(item.maintaincontent) ? "" : ",保养内容:" + item.maintaincontent), //保养内容
  623. wostate = item.wostate,
  624. statename = statename, //工单状态
  625. //checkby = item.maintainman, //保修人
  626. checkby = string.Join(",", item.maintainuser),
  627. createby = item.createby,
  628. createtime = item.createtime,
  629. isread = 0,
  630. });
  631. }
  632. }
  633. #endregion
  634. #region 设备巡检工单
  635. foreach (var item in listequipmentrunning)
  636. {
  637. #region 检查事项
  638. var matternames = "";
  639. if (item.matterids != null && item.matterids.Count() > 0)
  640. {
  641. var matterids = string.Join(",", item.matterids);
  642. if (!string.IsNullOrEmpty(matterids))
  643. {
  644. var mattermodel = listmatter.FirstOrDefault(x => matterids.Contains(x.id));
  645. matternames = mattermodel != null ? mattermodel.matter : "";
  646. }
  647. }
  648. #endregion
  649. #region
  650. ////判断巡检中设备id是否为空
  651. //var modelequname = new Eqp_Equipment_Info();
  652. //if (item.equipmentid != null && item.equipmentid.Count() > 0)
  653. //{
  654. // var equipmentids = string.Join(",", item.equipmentid);
  655. // if (!string.IsNullOrEmpty(equipmentids))
  656. // modelequname = listequipment_info.FirstOrDefault(x => equipmentids.Contains(x.id));
  657. //}
  658. //string equipmentname = string.Empty;
  659. //equipmentname = modelequname != null ? modelequname.equipment_name : "";
  660. #endregion
  661. string statename = string.Empty;
  662. if (item.wostate == (int)EnumWorkOrderState.create)
  663. statename = "新建工单";
  664. if (item.wostate == (int)EnumWorkOrderState.assign)
  665. statename = "已转派/已抢单";
  666. if (item.wostate >= (int)EnumEquipmentRunningState.grab && item.wostate < (int)EnumEquipmentRunningState.deal)
  667. statename = "未完成";
  668. if (item.wostate >= (int)EnumEquipmentRunningState.deal)
  669. statename = "已完成";
  670. if (item.wostate == (int)EnumEquipmentRunningState.hangup)
  671. statename = "已挂起";
  672. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.巡检工单);
  673. #region 条件 - 工单需要提醒时
  674. if (item.wostate == 0 || (item.wostate == 3 && item.isreturnmsg == 1))
  675. {
  676. listmapwo = listmapwo.Where(x => x.wostate == item.wostate);
  677. }
  678. #endregion
  679. var modelmap = listmapwo.FirstOrDefault();
  680. var orderStateTitle = item.wostate == 3 ? "已完成" : "";
  681. //var contentStr = "设备名称:" + equipmentname;
  682. var contentStr = "检查事项:" + matternames;
  683. if (item.quipmenttype == 0)
  684. contentStr += "运维异常说明:" + item.checkcontent;
  685. //未推送
  686. if (modelmap == null)
  687. {
  688. list.Add(new MessageListDto
  689. {
  690. id = item.id,
  691. woid = item.id,
  692. channelcode = (int)EnumOrderState.巡检工单,
  693. wotype = (int)EnumWoType.巡检,
  694. wocode = item.wocode,
  695. //proname = "设备运行工单:" + item.wocode + orderStateTitle + " 设备名称:" + equipmentname,
  696. proname = "设备运行工单:" + item.wocode + orderStateTitle + " 检查事项:" + matternames,
  697. title = item.wocode,
  698. content = item.woname + (string.IsNullOrEmpty(item.wocontent) ? "" : ",工单内容:" + item.wocontent) + (string.IsNullOrEmpty(item.checkcontent) ? "" : ",异常说明:" + item.checkcontent), //运维内容
  699. wostate = item.wostate,
  700. statename = statename, //工单状态
  701. checkby = item.checkby, //巡检人
  702. createby = item.createby,
  703. createtime = item.createtime,
  704. isread = 0,
  705. });
  706. }
  707. }
  708. #endregion
  709. #region 超时工单
  710. foreach (var item in listetimeout)
  711. {
  712. string statename = string.Empty;
  713. if (item.isover == true)
  714. statename = "已完结";
  715. else
  716. statename = "否完结";
  717. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.channelcode == (int)EnumOrderState.超时工单);
  718. var modelmap = listmapwo.FirstOrDefault();
  719. //未推送
  720. if (modelmap == null)
  721. {
  722. list.Add(new MessageListDto
  723. {
  724. id = item.id,
  725. woid = item.id,
  726. channelcode = (int)EnumOrderState.超时工单,
  727. wotype = item.wotype,
  728. wocode = item.wocode,
  729. proname = "超时工单(" + Enum.GetName(typeof(EnumWoType), item.wotype) + "):" + item.wocode + ",延迟时长:" + item.times,
  730. title = item.wocode,
  731. content = "超时原因:" + item.timeoutreason, //超时原因
  732. wostate = 99, //超时工单无需根据状态处理转派,故默认写个参数值99
  733. statename = statename, //工单状态
  734. createby = item.manager,
  735. createtime = item.createtime,
  736. isread = 0,
  737. });
  738. }
  739. }
  740. #endregion
  741. }
  742. //升序排序 - (跟消息提醒排序相反,推送时先推日期比较早的工单,后推送日期比较晚的工单,故短信排在手机最上面)
  743. list = list.OrderBy(x => x.createtime).ToList();
  744. var obj = new
  745. {
  746. rows = list,
  747. total = list.Count, //消息数
  748. };
  749. return Success("获取成功", obj);
  750. }
  751. /// <summary>
  752. /// 测试 - 批量修改消息内容和id
  753. /// </summary>
  754. /// <returns></returns>
  755. [HttpGet("getmessagelist_ceshi")]
  756. public async Task<IActionResult> GetMessagesList_ceshi()
  757. {
  758. var listrepair_bases = await _wo_repair_baseRepository.Get(x => x.isdelete == 0);
  759. var listmaintain_bases = await _wo_maintain_baserepository.Get(x => x.isdelete == false);
  760. var listequipmentrunnings = await _wo_equipmentrunningrepository.Get(x => x.isdelete == 0);
  761. var listetimeouts = await _wo_timeoutrepository.Get(x => x.isdelete == false);
  762. var listmap = await _wo_order_user_maprepository.GetAll();
  763. int i = 0;
  764. foreach (var item in listmap)
  765. {
  766. string statename = string.Empty;
  767. var woid = string.Empty;
  768. string content = string.Empty;
  769. #region 获取工单id
  770. //维修工单
  771. if (item.channelcode == 1 && !string.IsNullOrEmpty(item.wocode))
  772. {
  773. //var listWorkOrder = listrepair_bases.Where(x => x.wocode.Equals(item.wocode));
  774. var modelWorkOrder = listrepair_bases.Where(x => x.wocode.Equals(item.wocode)).FirstOrDefault();
  775. if (modelWorkOrder != null)
  776. {
  777. woid = modelWorkOrder.id;
  778. content = "故障说明:" + modelWorkOrder.faultdescripe;
  779. }
  780. }
  781. //保养工单
  782. if (item.channelcode == 2 && !string.IsNullOrEmpty(item.wocode))
  783. {
  784. var listWorkOrder = listmaintain_bases.Where(x => x.wocode.Equals(item.wocode));
  785. var modelWorkOrder = listWorkOrder.FirstOrDefault();
  786. if (modelWorkOrder != null)
  787. {
  788. woid = modelWorkOrder.id;
  789. content = modelWorkOrder.woname + (string.IsNullOrEmpty(modelWorkOrder.maintaincontent) ? "" : ",保养内容:" + modelWorkOrder.maintaincontent);
  790. }
  791. }
  792. //设备巡检工单
  793. if (item.channelcode == 3 && !string.IsNullOrEmpty(item.wocode))
  794. {
  795. var listWorkOrder = listequipmentrunnings.Where(x => x.wocode.Equals(item.wocode));
  796. var modelWorkOrder = listWorkOrder.FirstOrDefault();
  797. if (modelWorkOrder != null)
  798. {
  799. woid = modelWorkOrder.id;
  800. content = modelWorkOrder.woname + (string.IsNullOrEmpty(modelWorkOrder.wocontent) ? "" : ",工单内容:" + modelWorkOrder.wocontent) + (string.IsNullOrEmpty(modelWorkOrder.checkcontent) ? "" : ",异常说明:" + modelWorkOrder.checkcontent);
  801. }
  802. }
  803. //超时工单
  804. if (item.channelcode == 4 && !string.IsNullOrEmpty(item.wocode))
  805. {
  806. var listWorkOrder = listetimeouts.Where(x => x.wocode.Equals(item.wocode));
  807. var modelWorkOrder = listWorkOrder.FirstOrDefault();
  808. if (modelWorkOrder != null)
  809. {
  810. woid = modelWorkOrder.id;
  811. content = "超时原因:" + modelWorkOrder.timeoutreason;
  812. }
  813. }
  814. #endregion
  815. if (!string.IsNullOrEmpty(woid))
  816. {
  817. i += 1;
  818. item.woid = woid;
  819. item.note = content;
  820. await _wo_order_user_maprepository.Update(item);
  821. }
  822. }
  823. return Success("更新工单id,和内容,num:" + i);
  824. }
  825. /// <summary>
  826. /// 消息通知 - 设备维修(报修工单)
  827. /// 维修工单/保养工单/巡检工单/超时工单
  828. /// </summary>
  829. /// <param name="messagetype">消息类型 (1消息通知信息,2推送信息)</param>
  830. /// <returns></returns>
  831. [HttpGet("getmessagelist")]
  832. public async Task<IActionResult> GetMessagesList()
  833. {
  834. #region 不同地方
  835. //int messagetype = 1; //消息通知
  836. //运维员工YWYG,运维主管YWZG
  837. string rolecode = User.Claims.FirstOrDefault(c => c.Type == "RoleCode").Value;
  838. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;//工单用户查看关系表 - 已查看订单
  839. //string rolecode = "XTWH";
  840. // string usercode = "8000";
  841. string projectlist = "";
  842. //获取角色code
  843. var modelUser = await _sys_user_accountRepository.GetSingle(x => x.usercode == usercode);
  844. if (modelUser != null)
  845. {
  846. projectlist = string.Join(",", modelUser.projectlist);
  847. }
  848. var listmap = await _wo_order_user_maprepository.Get(x => x.readby == usercode); // && x.isread == 1
  849. listmap = listmap.Where(x => x.isnotice == 1 && x.isread == 1);
  850. #endregion
  851. int topNum = 0;
  852. int.TryParse(_configuration["PushMessage:MessageNoReadNum"], out topNum);
  853. //维修工单 - 未处理完成
  854. var listrepair_base = await _wo_repair_baseRepository.Get(x => x.wostate == 1 && x.isdelete == 0);
  855. //保养工单 - 未处理完成
  856. var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.wostate == 1 && x.isdelete == false);
  857. //设备巡检工单 - 未处理完成
  858. var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.wostate==1 && x.isdelete == 0);
  859. //超时工单 - 所有
  860. var listetimeout = await _wo_timeoutrepository.Get(x => x.isdelete == false && x.istimeout == 1);
  861. //配送工单 - 新工单,派单(派单/强制派单)
  862. var listdistri = await _distri_workorderrepository.Get(x => x.wostate <= (int)EnumDistributionState.assign && x.isdelete == 0 && x.totype != (int)EnumDistributionTotype.robbery); // && (x.totype == (int)EnumDistributionTotype.send || x.totype == (int)EnumDistributionTotype.assign)
  863. //班次
  864. var query_classgroup = await _sys_classgrouprepository.Get(x => x.isdelete == 0);
  865. //排班
  866. var query_usermap = await _sys_classgroup_user_maprepository.Get(x => x.isdelete == 0 && x.isstatus == 1);
  867. //计划工单
  868. var listwotask = await _distri_workorder_plantaskrepository.Get(x => x.isdelete == 0 && x.planwostate != (int)EnumDistriWorkOrderPlanWOstate.start);
  869. //设备信息
  870. var listequipment_info = await _eqp_equipment_inforepository.Get(x => x.isdelete == 0);
  871. //检查事项
  872. var listmatter = await _wo_mattersRepository.Get(x => x.isdelete == false);
  873. var list = new List<MessageListDto>();
  874. var list_noread = new List<MessageListDto>();
  875. var list_read = new List<MessageListDto>();
  876. #region 条件判断 - 工单消息提醒和推送流程
  877. //1、运维员工 YWYG < 2、运维主管 YWZG < 3、运营副经理 YWFJL < 4、运营经理 YWJL < 5、运营总监 YWZJ < 6、运营副总 YWFZ < 7、运营总经理 YWZJL
  878. //说明工单(延迟时间配置DelayPushTime):
  879. // 1、新单出现 运维员工 抢单;(例如9:00)
  880. // 2、超过 1 * 几分钟 无人抢单行为推送给 运维主管;(例如9:05)
  881. // 3、超过 3 * 几分钟 无派单行为推送给 运营副经理;(例如9:15)
  882. // 4、超过 4 * 几分钟 无管理行为推送给 运营经理和运营总监;(例如9:20)
  883. // 5、超过 6 * 几分钟 无管理行为推送给 运营副总和运营总经理;(例如9:30)
  884. int timespan = 0;
  885. int.TryParse(_configuration["PushMessage:DelayPushTime"], out timespan);
  886. DateTime nowTime = DateTime.Now.ToLocalTime();
  887. var listrepair_base2 = await _wo_repair_baseRepository.GetAll();
  888. listrepair_base = listrepair_base.Where(x => projectlist.Contains(x.projectid));
  889. listmaintain_base = listmaintain_base.Where(x => projectlist.Contains(x.projectid));
  890. listequipmentrunning = listequipmentrunning.Where(x => projectlist.Contains(x.projectid));
  891. //listetimeout = listetimeout.Where(x => projectlist.Contains(x.projectid));
  892. listdistri = listdistri.Where(x => projectlist.Contains(x.projectid));
  893. #region 配送工单 参与 排班条件
  894. //随机工单
  895. DateTime dtnow = DateTime.Now;
  896. string nowDay = dtnow.ToString("yyyy-MM-dd");
  897. var listClassUser = query_usermap.Where(x => x.date == nowDay).ToList(); //.Where(x=>x.date == nowDay)
  898. //var query_result = new List<Distri_WorkorderDto>();
  899. //此法写的原因是要查询对应时间段的工单,需要或||拼接 ----------------------------------------------
  900. var list_distri = new List<Distri_Workorder>();
  901. if (!string.IsNullOrEmpty(rolecode))
  902. {
  903. //var query1 = new List<Distri_WorkorderDto>();
  904. ////条件拼接(时间段查询) -----------------
  905. //非值班 && x.roleList.Select(r => r.rolecode).Contains(rolecode) 以排班的选中角色为准
  906. var listClass = query_classgroup.ToList();
  907. if (rolecode.Equals("SSY_DTG"))
  908. listClass = query_classgroup.ToList().Where(x => x.iswork == false).ToList();
  909. if (listClass != null && listClass.Count > 0)
  910. {
  911. #region 获取新工单 by 排班/班次 - 电梯岗 -----------------------------------------
  912. //获取新工单
  913. var query_zero = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create).ToList();
  914. listClassUser = listClassUser.Where(x => x.date == nowDay && x.usercode == usercode).ToList();
  915. foreach (var item in listClassUser)
  916. {
  917. #region 调用条件 - 日期和班别code
  918. //获取条件 - 日期和班别code
  919. var list_code = new List<string> { }; //班别code
  920. var dayone = item.date;
  921. var list_r = item.classgroupList.ToList();
  922. foreach (var item_r in list_r)
  923. {
  924. if (item_r.roleList != null && item_r.roleList.Count > 0)
  925. {
  926. //角色 - 班别
  927. var mode_r = item_r.roleList.FirstOrDefault(x => x.ischeck == true); //rolecode SSY_PSG // && x.rolecode == rolecode
  928. if (mode_r != null)
  929. list_code.Add(item_r.code);
  930. }
  931. }
  932. if (list_code != null && list_code.Count > 0)
  933. {
  934. listClass = listClass.Where(x => list_code.Contains(x.code)).ToList();
  935. var model_Class = listClass.FirstOrDefault(x => DateTime.Parse(nowDay + " " + x.starttime) <= dtnow && DateTime.Parse(nowDay + " " + x.endtime) >= dtnow);
  936. if (model_Class != null)
  937. {
  938. list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + model_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + model_Class.endtime))).ToList();
  939. }
  940. //foreach (var item_Class in listClass)
  941. //{
  942. // list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + item_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + item_Class.endtime))).ToList();
  943. //}
  944. }
  945. #endregion
  946. }
  947. #endregion
  948. }
  949. }
  950. #endregion
  951. if (rolecode.Equals("YWYG"))
  952. {
  953. //1、已抢单 和 已转派 运维员工 <--> 新单 - 未抢单 和 未转派 运维员工 -- 合并两List
  954. listrepair_base = listrepair_base.Where(x => x.wostate == 1 && x.touser.Contains(usercode))
  955. .Concat(listrepair_base.Where(x => x.wostate == 0));
  956. listmaintain_base = listmaintain_base.Where(x => x.wostate == 1 && x.maintainuser.Contains(usercode))
  957. .Concat(listmaintain_base.Where(x => x.wostate == 0));
  958. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 1 && x.checkby.Equals(usercode))
  959. .Concat(listequipmentrunning.Where(x => x.wostate == 0));
  960. listetimeout = listetimeout.Where(x => x.touser.Equals(usercode));
  961. }
  962. else if (rolecode.Equals("SSY_PSG"))
  963. {
  964. //rolecode.Equals("SSY_DTG") ||
  965. //20、配送岗 <--> 新单 、派单(派单/强制派单) -- 合并两List
  966. //listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
  967. // .Concat(listdistri.Where(x => x.wostate == (int)EnumDistributionState.create));
  968. //var list_d = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode)).ToList();
  969. listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
  970. .Concat(list_distri); //合并新建工单,和接单工单
  971. listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
  972. }
  973. else if (rolecode.Equals("SSY_DTG"))
  974. {
  975. listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
  976. }
  977. else if (rolecode.Equals("SSY_ZG"))
  978. {
  979. DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
  980. //21、无人抢单 - 配送主管 <--> 新单 、派单(派单/强制派单) -- 合并两List
  981. listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create && x.createtime < dTime);
  982. }
  983. else if (rolecode.Equals("YWZG"))
  984. {
  985. DateTime dTime = nowTime.AddMinutes(timespan * 1); //推迟1 * 几分钟
  986. //2、无人抢单 - 运维主管
  987. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  988. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  989. listequipmentrunning = listequipmentrunning.Where(x => (x.wostate == 0 && x.createtime < dTime) || x.wostate == 3); //包含完成工单(完成巡检后给对应的管理员发送信息)
  990. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  991. }
  992. else if (rolecode.Equals("YWFJL"))
  993. {
  994. DateTime dTime = nowTime.AddMinutes(timespan * 3); //推迟3 * 几分钟
  995. //3、无人派单 - 运营副经理
  996. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  997. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  998. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
  999. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  1000. }
  1001. else if (rolecode.Equals("YWJL") || rolecode.Equals("YWZJ"))
  1002. {
  1003. DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
  1004. //无人管理 - 运营经理 和 运营总监
  1005. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  1006. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  1007. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
  1008. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  1009. }
  1010. else if (rolecode.Equals("YWFZ") || rolecode.Equals("YWZJL"))
  1011. {
  1012. DateTime dTime = nowTime.AddMinutes(timespan * 6); //推迟6 * 几分钟
  1013. //无人管理 - 运营副总 和 运营总经理
  1014. listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  1015. listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
  1016. listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
  1017. listetimeout = listetimeout.Where(x => x.createtime < dTime);
  1018. }
  1019. else
  1020. {
  1021. //其他角色或空是,不显示消息提醒
  1022. return Success("角色(" + rolecode + ")不获取消息提醒", new { rows = new List<MessageListDto>(), total = -1 });
  1023. }
  1024. #endregion
  1025. if (rolecode.Equals("SSY_PSG") || rolecode.Equals("SSY_DTG"))
  1026. {
  1027. #region 配送计划工单 - 配送
  1028. foreach (var item in listwotask)
  1029. {
  1030. string statename = string.Empty;
  1031. if (item.planwostate == (int)EnumDistriWorkOrderPlanWOstate.start)
  1032. statename = "新建计划工单";
  1033. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.planwostate) && x.channelcode == (int)EnumOrderState.配送计划工单);
  1034. var modelmap = listmapwo.FirstOrDefault();
  1035. //未推送
  1036. if (modelmap == null)
  1037. {
  1038. string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送计划物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
  1039. list.Add(new MessageListDto
  1040. {
  1041. id = item.id,
  1042. woid = item.id,
  1043. channelcode = (int)EnumOrderState.配送计划工单,
  1044. wotype = (int)EnumWoType.配送计划,
  1045. wocode = item.wocode,
  1046. proname = "配送计划工单:" + item.wocode,
  1047. title = item.wocode,
  1048. content = "配送计划工单说明:" + item.content + goodsDetail,
  1049. wostate = item.planwostate,
  1050. statename = statename, //工单状态
  1051. checkby = string.Join(",", item.joinuserlist), //接单人
  1052. createby = item.createtby,
  1053. createtime = item.createtime,
  1054. isread = 0,
  1055. });
  1056. }
  1057. }
  1058. #endregion
  1059. #region 配送工单
  1060. foreach (var item in listdistri)
  1061. {
  1062. string statename = string.Empty;
  1063. if (item.wostate == (int)EnumDistributionState.create)
  1064. statename = "新建工单";
  1065. if (item.wostate == (int)EnumDistributionState.assign)
  1066. statename = "派单/强制派单";
  1067. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.配送工单);
  1068. var modelmap = listmapwo.FirstOrDefault();
  1069. if (modelmap == null)
  1070. {
  1071. string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
  1072. //未读
  1073. list_noread.Add(new MessageListDto
  1074. {
  1075. id = item.id,
  1076. woid = item.id,
  1077. channelcode = (int)EnumOrderState.配送工单,
  1078. wotype = (int)EnumWoType.配送,
  1079. wocode = item.wocode,
  1080. proname = "配送工单:" + item.wocode,
  1081. title = item.wocode,
  1082. content = "配送说明:" + item.detail + goodsDetail,
  1083. wostate = item.wostate,
  1084. statename = statename, //工单状态
  1085. checkby = string.Join(",", item.touser), //接单人
  1086. createby = item.createtby,
  1087. createtime = item.createtime,
  1088. isread = 0,
  1089. });
  1090. }
  1091. }
  1092. #endregion
  1093. }
  1094. else
  1095. {
  1096. #region 维修工单
  1097. foreach (var item in listrepair_base)
  1098. {
  1099. string statename = string.Empty;
  1100. if (item.wostate == (int)EnumWorkOrderState.create)
  1101. statename = "新建工单";
  1102. if (item.wostate == (int)EnumWorkOrderState.assign)
  1103. statename = "已转派/已抢单";
  1104. if (item.wostate >= (int)EnumWorkOrderState.deal)
  1105. statename = "已完成";
  1106. if (item.wostate == (int)EnumWorkOrderState.hangup)
  1107. statename = "已挂起";
  1108. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.维修工单);
  1109. var modelmap = listmapwo.FirstOrDefault();
  1110. if (modelmap == null)
  1111. {
  1112. //未读
  1113. list_noread.Add(new MessageListDto
  1114. {
  1115. id = item.id,
  1116. woid = item.id,
  1117. channelcode = (int)EnumOrderState.维修工单,
  1118. wotype = (int)EnumWoType.维修,
  1119. wocode = item.wocode,
  1120. proname = "维修工单:" + item.wocode, // + " " + item.proname,
  1121. title = item.wocode,
  1122. content = "故障说明:" + item.faultdescripe,
  1123. wostate = item.wostate,
  1124. statename = statename, //工单状态
  1125. checkby = string.Join(",", item.touser), //接单人
  1126. createby = item.createuser,
  1127. createtime = item.createtime,
  1128. isread = 0,
  1129. });
  1130. }
  1131. }
  1132. #endregion
  1133. #region 保养工单
  1134. foreach (var item in listmaintain_base)
  1135. {
  1136. string statename = string.Empty;
  1137. if (item.wostate == (int)EnumWorkOrderState.create)
  1138. statename = "新建工单";
  1139. if (item.wostate == (int)EnumWorkOrderState.assign)
  1140. statename = "已转派/已抢单";
  1141. if (item.wostate >= (int)EnumWorkOrderState.deal)
  1142. statename = "已完成";
  1143. if (item.wostate == (int)EnumWorkOrderState.hangup)
  1144. statename = "已挂起";
  1145. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.保养工单);
  1146. var modelmap = listmapwo.FirstOrDefault();
  1147. if (modelmap == null)
  1148. {
  1149. //未读
  1150. list_noread.Add(new MessageListDto
  1151. {
  1152. id = item.id,
  1153. woid = item.id,
  1154. channelcode = (int)EnumOrderState.保养工单,
  1155. wotype = (int)EnumWoType.保养,
  1156. wocode = item.wocode,
  1157. proname = "保养工单:" + item.wocode, // + " " + item.proname,
  1158. title = item.wocode,
  1159. content = item.woname + (string.IsNullOrEmpty(item.maintaincontent) ? "" : ",保养内容:" + item.maintaincontent), //保养内容
  1160. wostate = item.wostate,
  1161. statename = statename, //工单状态
  1162. //checkby = item.maintainman, //保修人
  1163. checkby = item.maintainuser.ToString(), //保修人
  1164. createby = item.createby,
  1165. createtime = item.createtime,
  1166. isread = 0,
  1167. });
  1168. }
  1169. }
  1170. #endregion
  1171. #region 设备巡检工单
  1172. foreach (var item in listequipmentrunning)
  1173. {
  1174. #region 检查事项
  1175. var matternames = "";
  1176. if (item.matterids != null && item.matterids.Count() > 0)
  1177. {
  1178. var matterids = string.Join(",", item.matterids);
  1179. if (!string.IsNullOrEmpty(matterids))
  1180. {
  1181. var mattermodel = listmatter.FirstOrDefault(x => matterids.Contains(x.id));
  1182. matternames = mattermodel != null ? mattermodel.matter : "";
  1183. }
  1184. }
  1185. #endregion
  1186. string statename = string.Empty;
  1187. if (item.wostate == (int)EnumWorkOrderState.create)
  1188. statename = "新建工单";
  1189. if (item.wostate == (int)EnumWorkOrderState.assign)
  1190. statename = "已转派/已抢单";
  1191. if (item.wostate >= (int)EnumEquipmentRunningState.deal)
  1192. statename = "已完成";
  1193. if (item.wostate == (int)EnumEquipmentRunningState.hangup)
  1194. statename = "已挂起";
  1195. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.巡检工单);
  1196. #region 条件 - 工单需要提醒时
  1197. if (item.wostate == 0 || (item.wostate == 3 && item.isreturnmsg == 1))
  1198. {
  1199. listmapwo = listmapwo.Where(x => x.wostate == item.wostate);
  1200. }
  1201. #endregion
  1202. //未读
  1203. var modelmap = listmapwo.FirstOrDefault();
  1204. var orderStateTitle = item.wostate == 3 ? "已完成" : "";
  1205. //var contentStr = "运维设备:" + equipmentname;
  1206. var contentStr = "检查事项:" + matternames;
  1207. if (item.quipmenttype == 0)
  1208. contentStr += "异常说明:" + item.checkcontent;
  1209. if (modelmap == null)
  1210. {
  1211. //未读
  1212. list_noread.Add(new MessageListDto
  1213. {
  1214. id = item.id,
  1215. woid = item.id,
  1216. channelcode = (int)EnumOrderState.巡检工单,
  1217. wotype = (int)EnumWoType.巡检,
  1218. wocode = item.wocode,
  1219. //proname = "设备运行工单:" + item.wocode + orderStateTitle + " 设备名称:" + equipmentname,
  1220. proname = "设备运行工单:" + item.wocode + orderStateTitle + " 检查事项:" + matternames,
  1221. title = item.wocode,
  1222. content = item.woname + (string.IsNullOrEmpty(item.wocontent) ? "" : ",工单内容:" + item.wocontent) + (string.IsNullOrEmpty(item.checkcontent) ? "" : ",异常说明:" + item.checkcontent), //运维内容
  1223. wostate = item.wostate,
  1224. statename = statename, //工单状态
  1225. checkby = item.checkby, //巡检人
  1226. createby = item.createby,
  1227. createtime = item.createtime,
  1228. isread = 0,
  1229. });
  1230. }
  1231. }
  1232. #endregion
  1233. #region 超时工单
  1234. foreach (var item in listetimeout)
  1235. {
  1236. string statename = string.Empty;
  1237. if (item.isover == true)
  1238. statename = "已完结";
  1239. else
  1240. statename = "否完结";
  1241. var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.channelcode == (int)EnumOrderState.超时工单);
  1242. var modelmap = listmapwo.FirstOrDefault();
  1243. if (modelmap == null)
  1244. {
  1245. //未读
  1246. list_noread.Add(new MessageListDto
  1247. {
  1248. id = item.id,
  1249. woid = item.id,
  1250. channelcode = (int)EnumOrderState.超时工单,
  1251. wotype = item.wotype,
  1252. wocode = item.wocode,
  1253. proname = "超时工单(" + Enum.GetName(typeof(EnumWoType), item.wotype) + "):" + item.wocode + ",延迟时长:" + item.times,
  1254. title = item.wocode,
  1255. content = "超时原因:" + item.timeoutreason, //超时原因
  1256. wostate = 99, //超时工单无需根据状态处理转派,故默认写个参数值99
  1257. statename = statename, //工单状态
  1258. createby = item.manager,
  1259. createtime = item.createtime,
  1260. isread = 0,
  1261. });
  1262. }
  1263. }
  1264. #endregion
  1265. #region 已读 - 注释
  1266. //自己看自己的
  1267. var listmaps = listmap.Where(x => x.readby == usercode).OrderByDescending(x => x.readtime).Take(topNum);
  1268. foreach (var item in listmaps)
  1269. {
  1270. string statename = string.Empty;
  1271. var woid = string.Empty;
  1272. string content = string.Empty;
  1273. if (item.wostate == (int)EnumWorkOrderState.create)
  1274. statename = "新建工单";
  1275. if (item.wostate == (int)EnumWorkOrderState.assign)
  1276. statename = "已转派/已抢单";
  1277. if (item.wostate >= (int)EnumWorkOrderState.deal)
  1278. statename = "已完成";
  1279. if (item.wostate == (int)EnumWorkOrderState.hangup)
  1280. statename = "已挂起";
  1281. //已读
  1282. list_read.Add(new MessageListDto
  1283. {
  1284. id = item.woid, //工单id
  1285. woid = item.woid, //工单id
  1286. channelcode = item.channelcode,
  1287. wotype = item.channelcode,
  1288. wocode = item.wocode,
  1289. proname = Enum.GetName(typeof(EnumOrderState), item.channelcode) + ":" + item.wocode,
  1290. title = item.wocode,
  1291. content = item.note, //保养内容
  1292. wostate = item.wostate,
  1293. statename = statename, //工单状态
  1294. checkby = item.readby, //保修人
  1295. createby = "",
  1296. createtime = item.readtime,
  1297. isread = 1,
  1298. });
  1299. }
  1300. #endregion
  1301. }
  1302. //降序排序,获取前50条,合并未读列表 OrderByDescending(x => x.createtime).Take(topNum)
  1303. list = list_read.Concat(list_noread).ToList();
  1304. //降序排序
  1305. list = list.OrderByDescending(x => x.createtime).ToList();
  1306. var obj = new
  1307. {
  1308. rows = list,
  1309. total_read = list_read.Count > topNum ? topNum : list_read.Count, //已读消息数
  1310. total = list_noread.Count, //未读消息数
  1311. };
  1312. return Success("获取成功", obj);
  1313. }
  1314. /// <summary>
  1315. /// 消息通知 - 设备维修(报修工单) - old通过时间(不用)
  1316. /// </summary>
  1317. /// <returns></returns>
  1318. [AllowAnonymous]
  1319. [HttpGet("getmessagelist2")]
  1320. public async Task<IActionResult> GetMessagesList2(string stime)
  1321. {
  1322. if (string.IsNullOrEmpty(stime))
  1323. stime = DateTime.Now.ToLocalTime().ToString();
  1324. //服务器时间
  1325. DateTime nowtime = DateTime.Now.ToLocalTime();
  1326. var listrepair_base = await _wo_repair_baseRepository.Get(x => x.isdelete == 0 && x.createtime > Convert.ToDateTime(stime)); //x => x.isdelete == false && x.createtime >= Convert.ToDateTime(stime)
  1327. var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.isdelete == false && x.createtime > Convert.ToDateTime(stime));
  1328. var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.isdelete == 0 && x.createtime > Convert.ToDateTime(stime));
  1329. var listequipment_info = (await _eqp_equipment_inforepository.Get(x => x.isdelete == 0)).ToList();
  1330. //检查事项
  1331. var listmatter = await _wo_mattersRepository.Get(x => x.isdelete == false);
  1332. var list = new List<MessageListDto>();
  1333. //维修工单
  1334. foreach (var item in listrepair_base)
  1335. {
  1336. string statename = string.Empty;
  1337. if (item.wostate < (int)EnumWorkOrderState.deal)
  1338. statename = "未完成";
  1339. if (item.wostate >= (int)EnumWorkOrderState.deal)
  1340. statename = "已完成";
  1341. if (item.wostate == (int)EnumWorkOrderState.hangup)
  1342. statename = "已挂起";
  1343. list.Add(new MessageListDto
  1344. {
  1345. id = item.id,
  1346. channelcode = (int)EnumOrderState.维修工单,
  1347. wocode = item.wocode,
  1348. proname = "维修工单:" + item.wocode, // + " " + item.proname,
  1349. title = item.wocode,
  1350. content = item.faultdescripe,
  1351. statename = statename, //工单状态
  1352. checkby = item.touser.ToString(),
  1353. createby = item.createuser,
  1354. createtime = item.createtime,
  1355. });
  1356. }
  1357. //保养工单
  1358. foreach (var item in listmaintain_base)
  1359. {
  1360. string statename = string.Empty;
  1361. if (item.wostate < (int)EnumWorkOrderState.deal)
  1362. statename = "未完成";
  1363. if (item.wostate >= (int)EnumWorkOrderState.deal)
  1364. statename = "已完成";
  1365. if (item.wostate == (int)EnumWorkOrderState.hangup)
  1366. statename = "已挂起";
  1367. list.Add(new MessageListDto
  1368. {
  1369. id = item.id,
  1370. channelcode = (int)EnumOrderState.保养工单,
  1371. wocode = item.wocode,
  1372. proname = "保养工单:" + item.wocode, // + " " + item.proname,
  1373. title = item.wocode,
  1374. content = item.maintaincontent, //保养内容
  1375. statename = statename, //工单状态
  1376. //checkby = item.dealby, //接单人(转派)
  1377. checkby = item.maintainuser.ToString(), //接单人(转派)
  1378. createby = item.createby,
  1379. createtime = item.createtime,
  1380. });
  1381. }
  1382. //设备运行工单
  1383. foreach (var item in listequipmentrunning)
  1384. {
  1385. #region 检查事项
  1386. var matternames = "";
  1387. if (item.matterids != null && item.matterids.Count() > 0)
  1388. {
  1389. var matterids = string.Join(",", item.matterids);
  1390. if (!string.IsNullOrEmpty(matterids))
  1391. {
  1392. var mattermodel = listmatter.FirstOrDefault(x => matterids.Contains(x.id));
  1393. matternames = mattermodel != null ? mattermodel.matter : "";
  1394. }
  1395. }
  1396. #endregion
  1397. #region
  1398. //var modelequname = listequipment_info.FirstOrDefault(x => item.equipmentid.Contains(x.id));
  1399. //string equipmentname = string.Empty;
  1400. //equipmentname = modelequname != null ? modelequname.equipment_name : "";
  1401. #endregion
  1402. string statename = string.Empty;
  1403. if (item.wostate < (int)EnumEquipmentRunningState.deal)
  1404. statename = "未完成";
  1405. if (item.wostate >= (int)EnumEquipmentRunningState.deal)
  1406. statename = "已完成";
  1407. if (item.wostate == (int)EnumEquipmentRunningState.hangup)
  1408. statename = "已挂起";
  1409. list.Add(new MessageListDto
  1410. {
  1411. id = item.id,
  1412. channelcode = (int)EnumOrderState.巡检工单,
  1413. wocode = item.wocode,
  1414. //proname = "设备运行工单:" + item.wocode + " " + equipmentname,
  1415. proname = "设备运行工单:" + item.wocode + " 检查事项:" + matternames,
  1416. title = item.wocode,
  1417. content = "上次运维内容:" + item.checkcontent, //运维内容
  1418. statename = statename, //工单状态
  1419. checkby = item.checkby, //接单人(转派)
  1420. createby = item.createby,
  1421. createtime = item.createtime,
  1422. });
  1423. }
  1424. //降序排序
  1425. list = list.OrderByDescending(x => x.createtime).ToList();
  1426. var obj = new
  1427. {
  1428. rows = list,
  1429. nowtime = nowtime, //当前时间
  1430. total = list.Count, //消息数
  1431. };
  1432. return Success("获取成功", obj);
  1433. }
  1434. [HttpGet("getbxmessagelist")]
  1435. public async Task<IActionResult> GetBxMessageList(int isread) {
  1436. string nowusercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  1437. var listmap = await _wo_order_user_maprepository.Get(x => x.channelcode == 1 && x.readby == nowusercode);
  1438. var list= new List<MessageListDto>();
  1439. if (isread == 0)
  1440. {
  1441. var listnoreadmaps = listmap.Where(x => x.isread == 0).OrderByDescending(x => x.readtime).Take(50);
  1442. foreach (var item in listnoreadmaps)
  1443. {
  1444. list.Add(new MessageListDto
  1445. {
  1446. id = item.id,
  1447. woid = item.woid,
  1448. channelcode = (int)EnumOrderState.维修工单,
  1449. wotype = (int)EnumWoType.维修,
  1450. wocode = item.wocode,
  1451. proname = "维修工单:" + item.wocode, // + " " + item.proname,
  1452. title = "待处理提醒",
  1453. content = item.note,
  1454. wostate = item.wostate,
  1455. statename = "", //工单状态
  1456. checkby = "", //接单人
  1457. createby = "",
  1458. isread = 0,
  1459. });
  1460. }
  1461. }
  1462. else {
  1463. var listreadmaps = listmap.Where(x => x.isread == 1).OrderByDescending(x => x.readtime).Take(50);
  1464. foreach (var item in listreadmaps)
  1465. {
  1466. list.Add(new MessageListDto
  1467. {
  1468. id = item.id,
  1469. woid = item.id,
  1470. channelcode = (int)EnumOrderState.维修工单,
  1471. wotype = (int)EnumWoType.维修,
  1472. wocode = item.wocode,
  1473. proname = "维修工单:" + item.wocode, // + " " + item.proname,
  1474. title = item.wocode,
  1475. content = item.note,
  1476. wostate = item.wostate,
  1477. statename = "", //工单状态
  1478. checkby = "", //接单人
  1479. createby = "",
  1480. isread = 1,
  1481. });
  1482. }
  1483. }
  1484. var obj = new
  1485. {
  1486. rows = list,
  1487. total=list.Count
  1488. };
  1489. return Success("获取成功", obj);
  1490. }
  1491. [HttpGet("getyd")]
  1492. public async Task<IActionResult> GetYdList(string id) {
  1493. string nowusercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  1494. // string nowusercode="1003";
  1495. var listmap = await _wo_order_user_maprepository.Get(x => x.channelcode == 1 && x.readby == nowusercode && x.id==id);
  1496. if (listmap != null)
  1497. {
  1498. var modelmap = listmap.FirstOrDefault();
  1499. if (modelmap != null)
  1500. {
  1501. modelmap.isread = 1;
  1502. modelmap.isnotice = 1;
  1503. modelmap.readtime = DateTime.Now;
  1504. bool b = await _wo_order_user_maprepository.UpdateOne(modelmap);
  1505. }
  1506. return Success("已读成功");
  1507. }
  1508. else {
  1509. return Success( nowusercode+listmap.ToJson());
  1510. }
  1511. }
  1512. /// <summary>
  1513. /// 消息通知类型
  1514. /// </summary>
  1515. public enum EnumOrderState
  1516. {
  1517. 维修工单 = 1,
  1518. 保养工单 = 2,
  1519. 巡检工单 = 3,
  1520. 超时工单 = 4,
  1521. 配送工单 = 5,
  1522. 配送计划工单 = 6
  1523. }
  1524. /// <summary>
  1525. /// 工单类型:1报修,2保养,3巡检,5配送
  1526. /// </summary>
  1527. public enum EnumWoType
  1528. {
  1529. 维修 = 1,
  1530. 保养 = 2,
  1531. 巡检 = 3,
  1532. 配送 = 5,
  1533. 配送计划 = 6
  1534. }
  1535. }
  1536. }