颐和api

BaseWorkOrderController.cs 32KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  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 WorkOrderApi.IRepositories;
  10. using WorkOrderApi.Input;
  11. using MadRunFabric.Model.WorkOrderApi;
  12. using System.Security.Claims;
  13. using MongoDB.Driver;
  14. using Microsoft.Extensions.Configuration;
  15. using SignTokenApi.IRepositories;
  16. namespace WorkOrderApi.Areas.Hy_Order.Controllers
  17. {
  18. /// <summary>
  19. /// 工单 - 售后管理系统
  20. /// </summary>
  21. [Authorize]
  22. [ApiVersion("6.0")]
  23. [Route("api/[controller]")]
  24. [Produces("application/json")]
  25. public class BaseWorkOrderController : BaseController
  26. {
  27. private readonly ILogger<WorkOrderController> _logger;
  28. private readonly IBus_WorkOrder_BaseRepository _bus_workorder_baseRepository;
  29. private readonly IBus_WorkOrder_ItemRepository _bus_workorder_itemRepository;
  30. private readonly IBus_Msg_ListRepository _bus_msg_listRepository;
  31. private readonly IConfiguration _configuration;
  32. private readonly ISys_User_AccountRepository _sys_user_accountRepository;
  33. public BaseWorkOrderController(
  34. ILogger<WorkOrderController> logger,
  35. IBus_WorkOrder_BaseRepository bus_workorder_baseRepository,
  36. IBus_WorkOrder_ItemRepository bus_workorder_itemRepository,
  37. IBus_Msg_ListRepository bus_msg_listRepository,
  38. IConfiguration configuration,
  39. ISys_User_AccountRepository sys_user_accountRepository
  40. )
  41. {
  42. _logger = logger;
  43. _bus_workorder_baseRepository = bus_workorder_baseRepository;
  44. _bus_workorder_itemRepository = bus_workorder_itemRepository;
  45. _bus_msg_listRepository = bus_msg_listRepository;
  46. _configuration = configuration;
  47. _sys_user_accountRepository = sys_user_accountRepository;
  48. }
  49. /// <summary>
  50. /// 获取工单分页
  51. /// </summary>
  52. [HttpGet("getlistbypage")]
  53. public IActionResult GetListsByPageAsync(string ordercode, string keyword, string phone, string province, string city, string sourceid,
  54. string typeid, string deptid, string stime, string etime, int state = -1, int pageindex = 1, int pagesize = 10)
  55. {
  56. int recordCount = 0;
  57. var result = _bus_workorder_baseRepository.GetListsByPage(ordercode, keyword, phone, province, city, sourceid, typeid, deptid,
  58. stime, etime, state, pageindex, pagesize, out recordCount);
  59. var obj = new
  60. {
  61. rows = result.ToList(),
  62. total = recordCount
  63. };
  64. return Success("获取成功", obj);
  65. }
  66. /// <summary>
  67. /// 获取工单详情
  68. /// </summary>
  69. [HttpGet("getsingle")]
  70. public async Task<IActionResult> GetSingleAsync(string ordercode)
  71. {
  72. var cls = await _bus_workorder_baseRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0);
  73. var clmodel = cls.FirstOrDefault();
  74. if (clmodel != null)
  75. {
  76. var model = _bus_workorder_baseRepository.GetDetails(ordercode);
  77. var item = await _bus_workorder_itemRepository.Get(s => s.ordercode.Equals(clmodel.ordercode) & s.isdelete == 0);
  78. var obj = new
  79. {
  80. model,
  81. item,
  82. };
  83. return Success("获取成功", obj);
  84. }
  85. else
  86. return Error("获取失败");
  87. }
  88. /// <summary>
  89. /// 添加工单
  90. /// </summary>
  91. [HttpPost("add")]
  92. public async Task<IActionResult> AddAsync(WorkOrderInput input)
  93. {
  94. #region 判断验证
  95. if (string.IsNullOrWhiteSpace(input.name))
  96. return Error("请输入客户姓名");
  97. if (string.IsNullOrEmpty(input.phone))
  98. return Error("请输入客户电话");
  99. //if (string.IsNullOrEmpty(input.content))
  100. // return Error("请输入内容");
  101. #endregion
  102. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  103. string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  104. var model = new Bus_WorkOrder_Base();
  105. #region model 添加工单对象
  106. model.unique_id = input.unique_id;
  107. model.ordercode = DateTime.Now.ToString("yyyyMMddHHmmssfff"); //工单编号 - 时间戳
  108. model.callrecordid = input.callrecordid;
  109. model.typeid = input.typeid;
  110. model.state = (int)EnumOrderType.create; //工单状态:0未处理,1已处理
  111. model.customerid = input.customerid;
  112. model.name = input.name;
  113. model.company = input.company;
  114. model.callintel = input.callintel;
  115. model.phone = input.phone;
  116. model.province = input.province; //省
  117. model.city = input.city; //市
  118. model.proid = input.proid;
  119. model.projectname = input.projectname;
  120. model.address = input.address;
  121. model.faulty_equipment = input.faulty_equipment;
  122. model.content = input.content;
  123. model.faulty_typeid = input.faulty_typeid;
  124. model.faulty_type2id = input.faulty_type2id;
  125. model.sourceid = input.sourceid;
  126. model.productive = input.productive;
  127. model.deptid = input.deptid;
  128. model.createuser = usercode;
  129. model.createusername = username;
  130. model.createtime = DateTime.Now;
  131. model.touser = input.touser;
  132. model.businesstype = input.businesstype;
  133. model.dealinstantly = input.dealinstantly;
  134. model.iseffective = input.iseffective;
  135. #endregion
  136. bool bl = await _bus_workorder_baseRepository.Add(model);
  137. if (bl)
  138. {
  139. #region 添加item
  140. var modelb = new Bus_WorkOrder_Item();
  141. #region model 添加工单对象
  142. modelb.ordercode = model.ordercode;//DateTime.Now.ToString("yyyyMMddHHmmssfff"); //工单编号 - 时间戳
  143. modelb.typeid = input.typeid;
  144. modelb.state = (int)EnumOrderType.create; //工单状态:0未处理,1已处理
  145. modelb.createuser = usercode;
  146. modelb.createusername = username;
  147. modelb.createtime = DateTime.Now;
  148. #endregion
  149. bool b = await _bus_workorder_itemRepository.Add(modelb);
  150. #endregion
  151. AddItems(model.ordercode, model.state, usercode + "(" + username + ") 创建", usercode, username);
  152. return Success("保存成功");
  153. }
  154. else
  155. return Error("保存失败");
  156. }
  157. /// <summary>
  158. /// 修改工单
  159. /// </summary>
  160. [HttpPost("update")]
  161. public async Task<IActionResult> UpdateAsync(WorkOrderInput input)
  162. {
  163. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  164. string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  165. var model = (await _bus_workorder_baseRepository.Get(p => p.ordercode == input.ordercode && p.isdelete == 0)).FirstOrDefault();
  166. if (model != null && model.createuser == usercode && model.state == (int)EnumOrderType.create)
  167. {
  168. #region 判断验证
  169. if (string.IsNullOrWhiteSpace(input.name))
  170. return Error("请输入客户姓名");
  171. if (string.IsNullOrEmpty(input.callintel))
  172. return Error("请输入来电电话");
  173. //if (string.IsNullOrEmpty(input.content))
  174. // return Error("请输入内容");
  175. #endregion
  176. #region model 添加工单对象
  177. model.typeid = input.typeid;
  178. model.name = input.name;
  179. model.company = input.company;
  180. model.phone = input.phone;
  181. model.province = input.province; //省
  182. model.city = input.city; //市
  183. model.projectname = input.projectname;
  184. model.address = input.address;
  185. model.faulty_equipment = input.faulty_equipment;
  186. model.content = input.content;
  187. model.faulty_typeid = input.faulty_typeid;
  188. model.faulty_type2id = input.faulty_type2id;
  189. model.sourceid = input.sourceid;
  190. model.productive = input.productive;
  191. model.dealinstantly = input.dealinstantly;
  192. model.iseffective = input.iseffective;
  193. model.deptid = input.deptid;
  194. model.touser = input.touser;
  195. model.businesstype = input.businesstype;
  196. #endregion
  197. bool b = await _bus_workorder_baseRepository.UpdateOne(model);
  198. if (b)
  199. {
  200. AddItems(model.ordercode, model.state, usercode + "(" + username + ") 修改", usercode, username);
  201. return Success("保存成功");
  202. }
  203. else
  204. return Error("保存失败");
  205. }
  206. return Error("操作失败");
  207. }
  208. /// <summary>
  209. /// 处理
  210. /// </summary>
  211. [HttpPost("deal")]
  212. public async Task<IActionResult> DealAsync(string ordercode, string result)
  213. {
  214. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  215. string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  216. #region 判断验证
  217. if (string.IsNullOrWhiteSpace(ordercode))
  218. return Error("参数错误");
  219. if (string.IsNullOrWhiteSpace(result))
  220. return Error("请输入处理结果");
  221. #endregion
  222. var model = (await _bus_workorder_baseRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  223. if (model != null && model.state == (int)EnumOrderType.create)
  224. {
  225. model.state = (int)EnumOrderType.complete;
  226. model.dealuser = usercode;
  227. model.dealusername = username;
  228. model.result = result;
  229. model.dealtime = DateTime.Now;
  230. await _bus_workorder_baseRepository.UpdateOne(model);
  231. AddItems(model.ordercode, model.state, usercode + "(" + username + ") 处理,结果:" + result, usercode, username);
  232. return Success("处理成功");
  233. }
  234. return Error("处理失败");
  235. }
  236. /// <summary>
  237. /// 删除工单
  238. /// </summary>
  239. /// <param name="ids"></param>
  240. /// <returns></returns>
  241. [HttpPost("delete")]
  242. public async Task<IActionResult> DeleteAsync(string[] ids)
  243. {
  244. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  245. string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  246. //使用逻辑删除
  247. var res = 0;
  248. if (ids != null && ids.Length > 0)
  249. {
  250. foreach (var id in ids)
  251. {
  252. var model = await _bus_workorder_baseRepository.GetSingle(id);
  253. model.isdelete = 1;
  254. model.deleteuser = usercode;
  255. model.deletetime = DateTime.Now;
  256. if (await _bus_workorder_baseRepository.UpdateOne(model))
  257. {
  258. res += 1;
  259. AddItems(model.ordercode, model.state, usercode + "(" + username + ") 删除", usercode, username);
  260. }
  261. }
  262. if (res == ids.Length)
  263. return Success("删除成功");
  264. else if (res > 0 && res < ids.Length)
  265. return Error("部分删除失败");
  266. else
  267. return Error("删除失败");
  268. }
  269. else
  270. return Error("请选择要删除的记录");
  271. }
  272. /// <summary>
  273. /// 添加操作记录
  274. /// </summary>
  275. /// <param name="wocode">编号</param>
  276. /// <param name="wostate">状态</param>
  277. /// <param name="detail">处理说明</param>
  278. /// <param name="optuser">当前操作人</param>
  279. /// <param name="optusername">当前操作人姓名</param>
  280. private async void AddItems(string ordercode, int state, string detail, string usercode, string username)
  281. {
  282. var model = new Bus_Msg_List();
  283. model.ordercode = ordercode;
  284. model.state = state;
  285. model.createuser = usercode;
  286. model.createusername = username;
  287. model.createtime = DateTime.Now;
  288. model.detail = detail;
  289. await _bus_msg_listRepository.Add(model);
  290. }
  291. /// <summary>
  292. /// 获取工单动态
  293. /// </summary>
  294. [HttpGet("getdt")]
  295. public async Task<IActionResult> GetDTAsync(string ordercode)
  296. {
  297. var cls = await _bus_msg_listRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0);
  298. if (cls != null)
  299. {
  300. return Success("获取成功", cls);
  301. }
  302. else
  303. return Error("获取失败");
  304. }
  305. //2019-5-7添加工单指派
  306. /// <summary>
  307. /// 获取待指派工单
  308. /// </summary>
  309. [HttpGet("getdzplist")]
  310. public IActionResult GetDZPListAsync(string ordercode, string keyword, string phone, string province, string city, string sourceid,
  311. string typeid, string deptid, string stime, string etime, int state = -1, int pageindex = 1, int pagesize = 10)
  312. {
  313. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  314. var list = _sys_user_accountRepository.Get(x => x.usercode == usercode && x.delete_flag == false);
  315. if (list.Result != null)
  316. {
  317. foreach (var item in list.Result)
  318. {
  319. int seatright = item.seat_right;
  320. if (seatright == 1)
  321. {
  322. usercode = "";
  323. }
  324. }
  325. }
  326. int recordcount = 0;
  327. //var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 0, "", "", "", "", pageindex, pagesize, out recordcount);
  328. var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 0, "", "", "", usercode, phone, province, city, sourceid, typeid, deptid, pageindex, pagesize, out recordcount, 0);
  329. var obj = new
  330. {
  331. rows = result.ToList(),
  332. total = recordcount
  333. };
  334. return Success("获取成功", obj);
  335. }
  336. /// <summary>
  337. /// 获取待接单列表
  338. /// </summary>
  339. /// <returns></returns>
  340. [HttpGet("getdjdlist")]
  341. public IActionResult GetDJDListAsync(string ordercode, string keyword, string phone, string province, string city, string sourceid,
  342. string typeid, string deptid, string stime, string etime, int state = -1, int pageindex = 1, int pagesize = 10)
  343. {
  344. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  345. var list = _sys_user_accountRepository.Get(x => x.usercode == usercode && x.delete_flag == false);
  346. if (list.Result != null)
  347. {
  348. foreach (var item in list.Result)
  349. {
  350. int seatright = item.seat_right;
  351. if (seatright == 1)
  352. {
  353. usercode = "";
  354. }
  355. }
  356. }
  357. int recordcount = 0;
  358. //var result = _bus_workorder_baseRepository.GetOrderListsByPage("","","","",2,"" ,"","","", pageindex, pagesize,out recordcount);
  359. var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 2, usercode, "", "", "", phone, province, city, sourceid, typeid, deptid, pageindex, pagesize, out recordcount, 0);
  360. var obj = new
  361. {
  362. rows = result.ToList(),
  363. total = recordcount
  364. };
  365. return Success("获取成功", obj);
  366. }
  367. /// <summary>
  368. /// 获取待处理列表
  369. /// </summary>
  370. /// <returns></returns>
  371. [HttpGet("getdcllist")]
  372. public IActionResult GetDCLListAsync(string ordercode, string keyword, string phone, string province, string city, string sourceid,
  373. string typeid, string deptid, string stime, string etime, int state = -1, int pageindex = 1, int pagesize = 10)
  374. {
  375. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  376. var list = _sys_user_accountRepository.Get(x => x.usercode == usercode && x.delete_flag == false);
  377. if (list.Result != null)
  378. {
  379. foreach (var item in list.Result)
  380. {
  381. int seatright = item.seat_right;
  382. if (seatright == 1)
  383. {
  384. usercode = "";
  385. }
  386. }
  387. }
  388. int recordcount = 0;
  389. //var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 3,"", "", "", "", pageindex, pagesize, out recordcount);
  390. var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 3, "", usercode, "", "", phone, province, city, sourceid, typeid, deptid, pageindex, pagesize, out recordcount, 0);
  391. var obj = new
  392. {
  393. rows = result.ToList(),
  394. total = recordcount
  395. };
  396. return Success("获取成功", obj);
  397. }
  398. /// <summary>
  399. /// 获取已处理列表
  400. /// </summary>
  401. /// <returns></returns>
  402. [HttpGet("getycllist")]
  403. public IActionResult GetYCLListAsync(string ordercode, string keyword, string phone, string province, string city, string sourceid,
  404. string typeid, string deptid, string stime, string etime, int state = -1, int pageindex = 1, int pagesize = 10)
  405. {
  406. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  407. var list = _sys_user_accountRepository.Get(x => x.usercode == usercode && x.delete_flag == false);
  408. if (list.Result != null)
  409. {
  410. foreach (var item in list.Result)
  411. {
  412. int seatright = item.seat_right;
  413. if (seatright == 1)
  414. {
  415. usercode = "";
  416. }
  417. }
  418. }
  419. int recordcount = 0;
  420. //var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 9, "", "", "", "", pageindex, pagesize, out recordcount);
  421. var result = _bus_workorder_baseRepository.GetOrderListsByPage("", "", "", "", 9, "", usercode, "", "", phone, province, city, sourceid, typeid, deptid, pageindex, pagesize, out recordcount, 0);
  422. var obj = new
  423. {
  424. rows = result.ToList(),
  425. total = recordcount
  426. };
  427. return Success("获取成功", obj);
  428. }
  429. /// <summary>
  430. /// 处理工单
  431. /// </summary>
  432. [HttpPost("dealorder")]
  433. public async Task<IActionResult> DealWAsync(string ordercode, string result, string touser, string todept, string helper, string helpcontent, int dealtype = 0)//dealtype为0时指派,为1时接单,为2时处理,3为撤回,4为退回
  434. {
  435. string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  436. string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  437. #region 判断验证
  438. if (string.IsNullOrWhiteSpace(ordercode))
  439. return Error("参数错误");
  440. //if (string.IsNullOrWhiteSpace(result))
  441. // return Error("请输入处理结果");
  442. #endregion
  443. var model0 = (await _bus_workorder_baseRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  444. if (model0 != null && dealtype == 0)//指派工单model0.state == (int)EnumOrderType.create
  445. {
  446. if (model0.zptime == null || model0.zptime.ToString() == "")//记录指派时间用于计算工单时效
  447. {
  448. model0.zptime = DateTime.Now;
  449. }
  450. model0.zpusercode = usercode;
  451. model0.state = (int)EnumOrderType.appoint;
  452. await _bus_workorder_baseRepository.UpdateOne(model0);
  453. var model = (await _bus_workorder_itemRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  454. if (model != null)
  455. {
  456. model.state = (int)EnumOrderType.appoint;
  457. model.touser = touser;
  458. model.todept = todept;
  459. model.zpcontent = result;
  460. model.zptime = DateTime.Now;
  461. model.zpusercode = usercode;
  462. await _bus_workorder_itemRepository.UpdateOne(model);
  463. }
  464. AddItems(model.ordercode, model.state, usercode + "向" + touser + "指派了工单:" + ordercode, usercode, username);
  465. return Success("指派成功");
  466. }
  467. else if (model0 != null && dealtype == 1)
  468. {
  469. model0.state = (int)EnumOrderType.accept;
  470. await _bus_workorder_baseRepository.UpdateOne(model0);
  471. var model = (await _bus_workorder_itemRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  472. if (model != null)
  473. {
  474. model.state = (int)EnumOrderType.accept;
  475. model.sureuser = usercode;
  476. model.suretime = DateTime.Now;
  477. await _bus_workorder_itemRepository.UpdateOne(model);
  478. }
  479. AddItems(model.ordercode, model.state, usercode + "已接工单:" + ordercode, usercode, username);
  480. return Success("接单成功");
  481. }
  482. else if (model0 != null && dealtype == 2)
  483. {
  484. model0.dealuser = usercode;
  485. model0.dealtime = DateTime.Now;
  486. model0.state = (int)EnumOrderType.complete;
  487. model0.result = result;
  488. await _bus_workorder_baseRepository.UpdateOne(model0);
  489. var model = (await _bus_workorder_itemRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  490. if (model != null)
  491. {
  492. model.state = (int)EnumOrderType.complete;
  493. model.dealuser = usercode;
  494. model.dealtime = DateTime.Now;
  495. model.helper = helper;
  496. model.helpcontent = helpcontent;
  497. await _bus_workorder_itemRepository.UpdateOne(model);
  498. }
  499. AddItems(model.ordercode, model.state, usercode + "处理工单:" + ordercode, usercode, username);
  500. return Success("处理成功");
  501. }
  502. else if (model0 != null && dealtype == 3)//撤回
  503. {
  504. model0.state = (int)EnumOrderType.create;
  505. await _bus_workorder_baseRepository.UpdateOne(model0);
  506. var model = (await _bus_workorder_itemRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  507. if (model != null)
  508. {
  509. model.state = (int)EnumOrderType.create;
  510. model.touser = "";
  511. model.touser = "";
  512. await _bus_workorder_itemRepository.UpdateOne(model);
  513. }
  514. AddItems(model.ordercode, model.state, usercode + "撤回工单:" + ordercode, usercode, username);
  515. return Success("撤回成功");
  516. }
  517. else if (model0 != null && dealtype == 4)//退回
  518. {
  519. model0.state = (int)EnumOrderType.create;
  520. await _bus_workorder_baseRepository.UpdateOne(model0);
  521. var model = (await _bus_workorder_itemRepository.Get(p => p.ordercode == ordercode && p.isdelete == 0)).FirstOrDefault();
  522. if (model != null)
  523. {
  524. model.state = (int)EnumOrderType.create;
  525. model.touser = "";
  526. model.touser = "";
  527. await _bus_workorder_itemRepository.UpdateOne(model);
  528. }
  529. AddItems(model.ordercode, model.state, usercode + "退回工单:" + ordercode, usercode, username);
  530. return Success("退回成功");
  531. }
  532. return Error("处理失败");
  533. }
  534. //获取工单统计数据
  535. #region 获取工单统计数据
  536. /// <summary>
  537. /// 获取日周月年工单状态数量统计
  538. /// </summary>
  539. [HttpGet("getworkorderstatecount")]
  540. public async Task<IActionResult> GetWorkOrderStateCountReportAsync(int datetype = 0)
  541. {
  542. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  543. string stime = string.Empty; string etime = string.Empty;
  544. if (datetype != 0)
  545. {
  546. GetStartEndTime(datetype, out stime, out etime);
  547. }
  548. //根据条件查询集合
  549. var flist = new List<FilterDefinition<Bus_WorkOrder_Base>>();
  550. flist.Add(Builders<Bus_WorkOrder_Base>.Filter.Eq("isdelete", 0));
  551. var wwcflist = flist.ToList();
  552. var ywcflist = flist.ToList();
  553. if (!string.IsNullOrWhiteSpace(stime))
  554. {
  555. wwcflist.Add(Builders<Bus_WorkOrder_Base>.Filter.Gt("createtime", DateTime.Parse(stime.Trim())));
  556. ywcflist.Add(Builders<Bus_WorkOrder_Base>.Filter.Gt("dealtime", DateTime.Parse(stime.Trim())));
  557. }
  558. if (!string.IsNullOrWhiteSpace(etime))
  559. {
  560. wwcflist.Add(Builders<Bus_WorkOrder_Base>.Filter.Lt("createtime", DateTime.Parse(etime.Trim())));
  561. ywcflist.Add(Builders<Bus_WorkOrder_Base>.Filter.Lt("dealtime", DateTime.Parse(etime.Trim())));
  562. }
  563. wwcflist.Add(Builders<Bus_WorkOrder_Base>.Filter.Eq("state", (int)EnumOrderType.create));
  564. var wwcfilter = Builders<Bus_WorkOrder_Base>.Filter.And(wwcflist);
  565. ywcflist.Add(Builders<Bus_WorkOrder_Base>.Filter.Eq("state", (int)EnumOrderType.deal));
  566. var ywcfilter = Builders<Bus_WorkOrder_Base>.Filter.And(ywcflist);
  567. var wwccount = await _bus_workorder_baseRepository.CountAsync(wwcfilter);
  568. var ywccount = await _bus_workorder_baseRepository.CountAsync(ywcfilter);
  569. var obj = new
  570. {
  571. wwccount,
  572. ywccount
  573. };
  574. return Success("获取成功", obj);
  575. }
  576. /// <summary>
  577. /// 获取日周月年工单类型统计
  578. /// </summary>
  579. [HttpGet("getworkordertypecount")]
  580. public IActionResult GetWorkOrderTypeCountReport(int datetype = 0)
  581. {
  582. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  583. string stime = string.Empty; string etime = string.Empty;
  584. if (datetype != 0)
  585. {
  586. GetStartEndTime(datetype, out stime, out etime);
  587. }
  588. var result = _bus_workorder_baseRepository.GetWorkOrderTypeCountReport(stime, etime, optuser);
  589. return Success("获取成功", result);
  590. }
  591. /// <summary>
  592. /// 获取日周月年工单来源统计
  593. /// </summary>
  594. [HttpGet("getworkordersourcecount")]
  595. public IActionResult GetWorkOrderSourceCountReport(int datetype = 0)
  596. {
  597. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  598. string stime = string.Empty; string etime = string.Empty;
  599. if (datetype != 0)
  600. {
  601. GetStartEndTime(datetype, out stime, out etime);
  602. }
  603. var result = _bus_workorder_baseRepository.GetWorkOrderSourceCountReport(stime, etime, optuser);
  604. return Success("获取成功", result);
  605. }
  606. /// <summary>
  607. /// 获取日周月年工单24小时统计
  608. /// </summary>
  609. [HttpGet("getworkorder24count")]
  610. public IActionResult GetWorkOrder24CountReport(int datetype = 0)
  611. {
  612. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  613. if (optuser == "8000")
  614. {
  615. optuser = "";//8000帐号可以查看所有数据
  616. }
  617. string stime = string.Empty; string etime = string.Empty;
  618. if (datetype != 0)
  619. {
  620. GetStartEndTime(datetype, out stime, out etime);
  621. }
  622. var result = _bus_workorder_baseRepository.GetWorkOrder24CountReport(stime, etime, optuser);
  623. return Success("获取成功", result);
  624. }
  625. /// <summary>
  626. /// 获取用户工单排行榜
  627. /// </summary>
  628. [HttpGet("getusercountrank")]
  629. public IActionResult GetUserCountRank(int top = 0, int datetype = 0)
  630. {
  631. string stime = string.Empty; string etime = string.Empty;
  632. if (datetype != 0)
  633. {
  634. GetStartEndTime(datetype, out stime, out etime);
  635. }
  636. var result = _bus_workorder_baseRepository.GetUserCountRank(top, stime, etime);
  637. return Success("获取成功", result);
  638. }
  639. /// <summary>
  640. /// 获取当天、本周、本月、本年、累计时间
  641. /// </summary>
  642. /// <param name="datetype"></param>
  643. /// <param name="start"></param>
  644. /// <param name="end"></param>
  645. public void GetStartEndTime(int datetype, out string start, out string end)
  646. {
  647. start = string.Empty;
  648. end = string.Empty;
  649. var datenow = DateTime.Now;
  650. var datestart = datenow;
  651. var dateend = datenow;
  652. switch (datetype)
  653. {
  654. case 1://当天
  655. break;
  656. case 2://本周
  657. int n = (int)datenow.DayOfWeek == 0 ? 7 : (int)datenow.DayOfWeek;
  658. datestart = datenow.AddDays(1 - n);//本周周一
  659. dateend = datestart.AddDays(6);//本周周日
  660. break;
  661. case 3://本月
  662. datestart = datenow.AddDays(1 - datenow.Day); //本月月初
  663. dateend = datestart.AddMonths(1).AddDays(-1); //本月月末
  664. break;
  665. case 4://本年
  666. datestart = new DateTime(datenow.Year, 1, 1); //本年年初
  667. dateend = new DateTime(datenow.Year, 12, 31); //本年年末
  668. break;
  669. default:
  670. break;
  671. }
  672. start = datestart.ToString("yyyy-MM-dd") + " 00:00:00";
  673. end = dateend.ToString("yyyy-MM-dd") + " 23:59:59";
  674. }
  675. #endregion
  676. }
  677. }