DevOpsPlanService.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. using AutoMapper;
  2. using FluentEmail.Core;
  3. using LinqKit;
  4. using Microsoft.EntityFrameworkCore;
  5. using Ropin.Inspection.Common.Accessor.Interface;
  6. using Ropin.Inspection.Model;
  7. using Ropin.Inspection.Model.Entities;
  8. using Ropin.Inspection.Model.ViewModel;
  9. using Ropin.Inspection.Model.ViewModel.LGS;
  10. using Ropin.Inspection.Model.ViewModel.MTN;
  11. using Ropin.Inspection.Repository;
  12. using Ropin.Inspection.Repository.Interface;
  13. using Ropin.Inspection.Repository.LGS;
  14. using Ropin.Inspection.Repository.LGS.Interface;
  15. using Ropin.Inspection.Repository.MTN;
  16. using Ropin.Inspection.Repository.MTN.Interface;
  17. using Ropin.Inspection.Service.MTN.Interface;
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Linq;
  21. using System.Text;
  22. using System.Threading.Tasks;
  23. using ZXing.Common;
  24. namespace Ropin.Inspection.Service.MTN
  25. {
  26. public class DevOpsPlanService : IDevOpsPlanService
  27. {
  28. private readonly IDevOpsPlanRepository _devOpsPlanRepository;
  29. private readonly IDevOpsPlanDeviceRepository _devOpsPlanDeviceRepository;
  30. private readonly IDevOpsPlanDeviceContentRepository _devOpsPlanDeviceContentRepository;
  31. private readonly IDevOpsPlanPersonRepository _devOpsPlanPersonRepository;
  32. private readonly IPushMsgService _pushMsgService;
  33. private readonly IClaimsAccessor _claims;
  34. private readonly IMapper _mapper;
  35. private readonly ITispSpotContentRepository _tispSpotContentRepository;
  36. public DevOpsPlanService(IDevOpsPlanRepository devOpsPlanRepository,
  37. IClaimsAccessor claims,
  38. IDevOpsPlanDeviceRepository devOpsPlanDeviceRepository,
  39. IDevOpsPlanDeviceContentRepository devOpsPlanDeviceContentRepository,
  40. IDevOpsPlanPersonRepository devOpsPlanPersonRepository,
  41. ITispSpotContentRepository tispSpotContentRepository,
  42. IPushMsgService pushMsgService,
  43. IMapper mapper)
  44. {
  45. _devOpsPlanRepository = devOpsPlanRepository;
  46. _claims = claims;
  47. _devOpsPlanDeviceRepository = devOpsPlanDeviceRepository;
  48. _devOpsPlanDeviceContentRepository = devOpsPlanDeviceContentRepository;
  49. _devOpsPlanPersonRepository = devOpsPlanPersonRepository;
  50. _pushMsgService = pushMsgService;
  51. _mapper = mapper;
  52. _tispSpotContentRepository = tispSpotContentRepository;
  53. }
  54. public async Task CreateOneAsync(DevOpsPlanModel viewModel)
  55. {
  56. TmtnDevOpsPlan entity = new TmtnDevOpsPlan()
  57. {
  58. CId = Ulid.NewUlid().ToString(),
  59. CName = viewModel.CName,
  60. CStoreCode = viewModel.CStoreCode,
  61. CNumber = viewModel.CNumber,
  62. IType = viewModel.IType,
  63. IGhzQty = viewModel.IGhzQty,
  64. IGhzQtyLat = viewModel.IGhzQtyLat,
  65. DStartDate = viewModel.DStartDate,
  66. DEndDate = viewModel.DEndDate,
  67. IStatus = viewModel.IStatus,
  68. CRemark = viewModel.CRemark,
  69. CCreateBy = _claims.ApiUserId.ToString(),
  70. D_CreateOn = DateTime.Now,
  71. CCreator = _claims.ApiUserName,
  72. IIsDel = false
  73. };
  74. _devOpsPlanRepository.Create(entity);
  75. var result = await _devOpsPlanRepository.SaveAsync();
  76. if (!result)
  77. {
  78. throw new Exception("创建失败");
  79. }
  80. }
  81. public async Task<List<DevOpsPlanModel>> PageAsync(DevOpsPlanInput input)
  82. {
  83. var predicate = PredicateBuilder.New<TmtnDevOpsPlan>(x => x.CStoreCode == input.StoreCode && x.IIsDel == false);//查询条件,推荐后台使用这种方式灵活筛选
  84. if (!string.IsNullOrEmpty(input.Name))
  85. {
  86. predicate = predicate.And(i => i.CName == input.Name);
  87. }
  88. if (input.Type.HasValue)
  89. {
  90. predicate = predicate.And(i => i.IType == input.Type);
  91. }
  92. if (input.Status.HasValue)
  93. {
  94. predicate = predicate.And(i => i.IStatus == input.Status);
  95. }
  96. var pageData = await _devOpsPlanRepository.GetPageAsync(predicate, "-D_CreateOn", input.IsPagination, input.PageIndex, input.PageSize);
  97. input.TotalCount = pageData.Totals;
  98. var result = pageData.Rows.Select(x => new DevOpsPlanModel
  99. {
  100. CId = x.CId,
  101. CName = x.CName,
  102. CNumber = x.CNumber,
  103. CStoreCode = x.CStoreCode,
  104. IType = x.IType,
  105. IGhzQty = x.IGhzQty,
  106. IGhzQtyLat = x.IGhzQtyLat,
  107. DStartDate = x.DStartDate,
  108. DEndDate = x.DEndDate,
  109. IStatus = x.IStatus,
  110. CRemark = x.CRemark,
  111. IIsDel = x.IIsDel,
  112. }).ToList();
  113. return result;
  114. }
  115. public async Task DeleteAsync(string id)
  116. {
  117. var entity = await _devOpsPlanRepository.GetByIdAsync(id);
  118. entity.IIsDel = true;
  119. _devOpsPlanRepository.Update(entity);
  120. var result = await _devOpsPlanRepository.SaveAsync();
  121. }
  122. public async Task<DevOpsPlanModel> GetByIdAsync(string id)
  123. {
  124. var entity = await _devOpsPlanRepository.GetByIdAsync(id);
  125. var model = new DevOpsPlanModel
  126. {
  127. CId = entity.CId,
  128. CName = entity.CName,
  129. CNumber = entity.CNumber,
  130. IType = entity.IType,
  131. IGhzQty = entity.IGhzQty,
  132. IGhzQtyLat = entity.IGhzQtyLat,
  133. DStartDate = entity.DStartDate,
  134. DEndDate = entity.DEndDate,
  135. CRemark = entity.CRemark,
  136. IStatus = entity.IStatus,
  137. CStoreCode = entity.CStoreCode,
  138. IIsDel = entity.IIsDel,
  139. };
  140. return model;
  141. }
  142. public Task<bool> IsExistAsync(string id)
  143. {
  144. throw new NotImplementedException();
  145. }
  146. public async Task<int> UpdateOneAsync(DevOpsPlanModel viewModel, params string[] fields)
  147. {
  148. var entity = await _devOpsPlanRepository.GetByIdAsync(viewModel.CId);
  149. entity.CName = viewModel.CName;
  150. entity.CNumber = viewModel.CNumber;
  151. entity.IType = viewModel.IType;
  152. entity.IGhzQty = viewModel.IGhzQty;
  153. entity.IGhzQtyLat = viewModel.IGhzQtyLat;
  154. entity.DStartDate = viewModel.DStartDate;
  155. entity.DEndDate = viewModel.DEndDate;
  156. entity.CRemark = viewModel.CRemark;
  157. entity.IStatus = viewModel.IStatus;
  158. entity.IIsDel = viewModel.IIsDel;
  159. _devOpsPlanRepository.Update(entity);
  160. var result = await _devOpsPlanRepository.SaveAsync();
  161. return result ? 1 : 0;
  162. }
  163. public async Task AddDeviceAsync(DevOpsPlanDeviceModel devOpsPlanDeviceModel)
  164. {
  165. var delModels = await _devOpsPlanDeviceRepository.GetByConditionAsync(x => x.CDevOpsPlanCode == devOpsPlanDeviceModel.CDevOpsPlanCode && x.CDevStoreCode == devOpsPlanDeviceModel.CDevStoreCode);
  166. delModels.ForEach(x => {
  167. x.IIsDel = true;
  168. _devOpsPlanDeviceRepository.Update(x);
  169. });
  170. List<TmtnDevOpsPlanDevice> entities = new List<TmtnDevOpsPlanDevice>();
  171. devOpsPlanDeviceModel.cSpotCodes.ForEach(x =>
  172. {
  173. var entity = new TmtnDevOpsPlanDevice()
  174. {
  175. CId = Ulid.NewUlid().ToString(),
  176. CDevOpsPlanCode = devOpsPlanDeviceModel.CDevOpsPlanCode,
  177. CSpotCode = x,
  178. CDevStoreCode = devOpsPlanDeviceModel.CDevStoreCode,
  179. CRemark = devOpsPlanDeviceModel.CRemark,
  180. CCreateBy = _claims.ApiUserId.ToString(),
  181. D_CreateOn = DateTime.Now,
  182. CCreator = _claims.ApiUserName,
  183. IIsDel = false,
  184. };
  185. entities.Add(entity);
  186. });
  187. var result = await _devOpsPlanDeviceRepository.CreateRangeAsync(entities);
  188. //await _devOpsPlanDeviceRepository.SaveAsync();
  189. if (result == 0)
  190. {
  191. throw new Exception("创建失败");
  192. }
  193. }
  194. public async Task<List<DevOpsPlanDeviceModel>> DeviceListAsync(string id)
  195. {
  196. var query = from a in _devOpsPlanDeviceRepository.DbContext.TmtnDevOpsPlanDevices
  197. join b in _devOpsPlanDeviceRepository.DbContext.TDEV_DevStore on a.CDevStoreCode equals b.C_ID into temp
  198. from x in temp.DefaultIfEmpty()
  199. join c in _devOpsPlanDeviceRepository.DbContext.TISP_Spot on a.CSpotCode equals c.C_Code.ToString() into temp1
  200. from y in temp1.DefaultIfEmpty()
  201. //join d in _devOpsPlanDeviceRepository.DbContext.TmtnDevOpsPlanContents on a.CId equals d.CDevOpsPlanDeviceCode into temp2
  202. //from z in temp2.DefaultIfEmpty()
  203. where a.CDevOpsPlanCode == id && a.IIsDel == false
  204. select new DevOpsPlanDeviceModel
  205. {
  206. CDevOpsPlanCode = a.CDevOpsPlanCode,
  207. CDevStoreCode = a.CDevStoreCode,
  208. CSpotCode = a.CSpotCode,
  209. CId = a.CId,
  210. CRemark = a.CRemark,
  211. D_CreateOn = a.D_CreateOn,
  212. IIsDel = a.IIsDel,
  213. DevStoreName = x.C_Name,
  214. Url = x.C_Url,
  215. CNumberCode = x.C_NumberCode,
  216. SpotName = y.C_Name,
  217. IsConfig = a.TmtnDevOpsPlanContents.Any(),
  218. };
  219. var result = await query.ToListAsync();
  220. return result;
  221. //var result = await _devOpsPlanDeviceRepository.GetDevOpsPlanDevices(id);
  222. //return result;
  223. }
  224. public async Task DeleteDeviceAsync(string id)
  225. {
  226. var entity = await _devOpsPlanDeviceRepository.GetByIdAsync(id);
  227. entity.IIsDel = true;
  228. _devOpsPlanDeviceRepository.Update(entity);
  229. var result = await _devOpsPlanDeviceRepository.SaveAsync();
  230. }
  231. public async Task DeleteDeviceSpotAsync(string planId, string spotId)
  232. {
  233. var entities = await _devOpsPlanDeviceRepository.GetByConditionAsync(x => x.CDevOpsPlanCode == planId && x.CSpotCode == spotId);
  234. entities.ForEach(x => {
  235. x.IIsDel = true;
  236. _devOpsPlanDeviceRepository.Update(x);
  237. });
  238. var result = await _devOpsPlanDeviceRepository.SaveAsync();
  239. }
  240. public async Task AddDeviceContentAsync(DevOpsPlanContentModel devOpsPlanContentModel)
  241. {
  242. var delModels = await _devOpsPlanDeviceContentRepository.GetByConditionAsync(x => x.CDevOpsPlanDeviceCode == devOpsPlanContentModel.CDevOpsPlanDeviceCode && x.CDevOpsPlanDeviceCode == devOpsPlanContentModel.CDevOpsPlanDeviceCode);
  243. delModels.ForEach(x => {
  244. x.IIsDel = true;
  245. _devOpsPlanDeviceContentRepository.Update(x);
  246. });
  247. List<TmtnDevOpsPlanContent> entities = new List<TmtnDevOpsPlanContent>();
  248. devOpsPlanContentModel.CDevOpsContentCodes.ForEach(x =>
  249. {
  250. var entity = new TmtnDevOpsPlanContent()
  251. {
  252. CId = Ulid.NewUlid().ToString(),
  253. CDevOpsPlanDeviceCode = devOpsPlanContentModel.CDevOpsPlanDeviceCode,
  254. CSpotCode = devOpsPlanContentModel.CSpotCode,
  255. CDevOpsContentCode = x,
  256. ISort = devOpsPlanContentModel.ISort,
  257. IIsDel = false,
  258. CRemark = devOpsPlanContentModel.CRemark,
  259. CCreateBy = _claims.ApiUserId.ToString(),
  260. D_CreateOn = DateTime.Now,
  261. CCreator = _claims.ApiUserName,
  262. };
  263. entities.Add(entity);
  264. });
  265. var result = await _devOpsPlanDeviceContentRepository.CreateRangeAsync(entities);
  266. //await _devOpsPlanDeviceRepository.SaveAsync();
  267. if (result == 0)
  268. {
  269. throw new Exception("创建失败");
  270. }
  271. }
  272. public async Task<List<string>> DeviceContentListAsync(string deviceId, string id)
  273. {
  274. var result = await _devOpsPlanDeviceContentRepository.GetByConditionAsync(x => x.CSpotCode == id && x.CDevOpsPlanDeviceCode == deviceId && x.IIsDel == false);
  275. return result.Select(x => x.CDevOpsContentCode).ToList();
  276. }
  277. public async Task AddPlanPersonAsync(DevOpsPlanPersonModel devOpsPlanContentModel)
  278. {
  279. var dels = await _devOpsPlanPersonRepository.GetByConditionAsync(x => x.CDevOpsPlanCode == devOpsPlanContentModel.CDevOpsPlanCode);
  280. await _devOpsPlanPersonRepository.RemoveRangeAsync(dels);
  281. if (devOpsPlanContentModel.CDevOpsBys.Count <= 0)
  282. {
  283. return;
  284. }
  285. List<TmtnDevOpsPlanPerson> entities = new List<TmtnDevOpsPlanPerson>();
  286. devOpsPlanContentModel.CDevOpsBys.ForEach(x =>
  287. {
  288. var entity = new TmtnDevOpsPlanPerson
  289. {
  290. CId = Ulid.NewUlid().ToString(),
  291. CDevOpsPlanCode = devOpsPlanContentModel.CDevOpsPlanCode,
  292. CDevOpsBy = x,
  293. CCreateBy = _claims.ApiUserId.ToString(),
  294. CCreator = _claims.ApiUserName,
  295. DCreateOn = DateTime.Now
  296. };
  297. entities.Add(entity);
  298. });
  299. var result = await _devOpsPlanPersonRepository.CreateRangeAsync(entities);
  300. if (result == 0)
  301. {
  302. throw new Exception("创建失败");
  303. }
  304. }
  305. public async Task<List<string>> PlanPersonListAsync(string id)
  306. {
  307. var result = await _devOpsPlanPersonRepository.GetByConditionAsync(x => x.CDevOpsPlanCode == id);
  308. return result.Select(x => x.CDevOpsBy).ToList();
  309. }
  310. public async Task<bool> CancelPlan(string id)
  311. {
  312. var entity = await _devOpsPlanRepository.GetByIdAsync(id);
  313. //if (entity.IStatus == 3 || entity.IStatus == 5 || entity.IStatus == 6)
  314. //{
  315. // throw new Exception("计划确认失败");
  316. //}
  317. entity.IStatus = 4;
  318. _devOpsPlanRepository.Update(entity);
  319. var result = await _devOpsPlanRepository.SaveAsync();
  320. return result;
  321. }
  322. public async Task<bool> ConfirmPlan(string id)
  323. {
  324. var entity = await _devOpsPlanRepository.GetByIdAsync(id);
  325. if (entity.IStatus == 3 || entity.IStatus == 5 || entity.IStatus == 6)
  326. {
  327. throw new Exception("计划确认失败");
  328. }
  329. entity.IStatus = 3;
  330. _devOpsPlanRepository.Update(entity);
  331. var result = await _devOpsPlanRepository.SaveAsync();
  332. return result;
  333. }
  334. public async Task<bool> GenerateWorkOrder(string id)
  335. {
  336. var entity = await _devOpsPlanRepository.GetByIdAsync(id);
  337. if (entity.IStatus != 3)
  338. {
  339. throw new Exception("计划未确认,工单生成失败");
  340. }
  341. // 生成工单
  342. if (entity.IType == 1)
  343. {
  344. List<TMTN_DevOps> devOps = new List<TMTN_DevOps>();
  345. List<TMTN_DevOpsRecord> devOpsRecordList = new List<TMTN_DevOpsRecord>();
  346. var devices = (await _devOpsPlanDeviceRepository.GetByConditionAsync(x => x.CDevOpsPlanCode == id && x.IIsDel == false)).ToList();
  347. int number = 1;
  348. for (int i = 0; i < entity.IGhzQty; i++)
  349. {
  350. //生成工单
  351. foreach (var item in devices)
  352. {
  353. var workOrder = new TMTN_DevOps()
  354. {
  355. C_ID = Guid.NewGuid().ToString(),
  356. C_SpotCode = item.CSpotCode,
  357. C_DevOpsPlanCode = entity.CId,
  358. C_DevStoreCode = item.CDevStoreCode,
  359. C_CreateBy = _claims.ApiUserId,
  360. D_CreateOn = DateTime.Now,
  361. C_Status = "1",
  362. C_Name = entity.CName,
  363. C_Remark = entity.CName,
  364. };
  365. workOrder.C_Number = (entity.IType == 1 ? "WB" : "DJ") + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + number.ToString();
  366. var allContents = (await _devOpsPlanDeviceContentRepository.GetByConditionAsync(c => c.CDevOpsPlanDeviceCode == item.CId && c.IIsDel == false)).ToList();
  367. if (allContents == null || !allContents.Any())
  368. {
  369. throw new Exception($"未配置维保内容");
  370. }
  371. //生成维保记录
  372. allContents.ForEach(c =>
  373. {
  374. TMTN_DevOpsRecord record = new TMTN_DevOpsRecord();
  375. record.C_SpotDevOpsContentCode = c.CDevOpsContentCode;
  376. record.C_DevOpsCode = workOrder.C_ID;
  377. record.C_Record = entity.CName;
  378. record.C_Remark = entity.CName;
  379. record.C_ID = Guid.NewGuid().ToString();
  380. record.C_CreateBy = _claims.ApiUserId;
  381. record.D_CreateOn = DateTime.Now;
  382. record.C_Status = "1";
  383. devOpsRecordList.Add(record);
  384. });
  385. //生成维保记录
  386. devOps.Add(workOrder);
  387. number++;
  388. }
  389. }
  390. await _devOpsPlanRepository.DbContext.TMTN_DevOpsRecord.AddRangeAsync(devOpsRecordList);
  391. await _devOpsPlanRepository.DbContext.TMTN_DevOps.AddRangeAsync(devOps);
  392. }
  393. else
  394. {
  395. List<TispInspectionWorkOrder> workOrders = new List<TispInspectionWorkOrder>();
  396. var devices = await _devOpsPlanDeviceRepository.GetByConditionAsync(x => x.CDevOpsPlanCode == id && x.IIsDel == false);
  397. int number = 1;
  398. for (int i = 0; i < entity.IGhzQty; i++)
  399. {
  400. devices.ForEach(x =>
  401. {
  402. var workOrder = new TispInspectionWorkOrder()
  403. {
  404. CId = Guid.NewGuid().ToString(),
  405. CName = "计划生成",
  406. CDevOpsPlanCode = entity.CId,
  407. CSpotCode = x.CSpotCode,
  408. CDevStoreCode = x.CDevStoreCode,
  409. CRemark = "计划生成",
  410. CCreateBy = _claims.ApiUserId.ToString(),
  411. DCreateOn = DateTime.Now,
  412. CStatus = "2",
  413. };
  414. workOrder.CNumber = entity.IType == 1 ? "WB" : "DJ" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + number.ToString();
  415. workOrders.Add(workOrder);
  416. number++;
  417. });
  418. }
  419. await _devOpsPlanDeviceRepository.DbContext.TispInspectionWorkOrders.AddRangeAsync(workOrders);
  420. }
  421. entity.IStatus = 5;
  422. _devOpsPlanRepository.Update(entity);
  423. var result = await _devOpsPlanRepository.SaveAsync();
  424. return result;
  425. }
  426. public async Task<List<TmtnDevOpsDetailViewModel>> GetDevOps(string id, BaseSearchModel searchModel)
  427. {
  428. var entity = await _devOpsPlanRepository.GetByIdAsync(id);
  429. if (entity.IType == 1)
  430. {
  431. var query = from plan in _devOpsPlanRepository.DbContext.TmtnDevOpsPlans
  432. join a in _devOpsPlanRepository.DbContext.TMTN_DevOps on plan.CId equals a.C_DevOpsPlanCode into temp
  433. from ops in temp.DefaultIfEmpty()
  434. join c in _devOpsPlanRepository.DbContext.TISP_Spot on ops.C_SpotCode equals c.C_Code.ToString() into temp1
  435. from spot in temp1.DefaultIfEmpty()
  436. join d in _devOpsPlanRepository.DbContext.TDEV_DevStore on ops.C_DevStoreCode equals d.C_ID into temp2
  437. from store in temp2.DefaultIfEmpty()
  438. join e in _devOpsPlanRepository.DbContext.TMTN_DevOpsRecord on ops.C_ID equals e.C_DevOpsCode into temp3
  439. from record in temp3.DefaultIfEmpty()
  440. join f in _devOpsPlanRepository.DbContext.TSYS_User on record.C_CreateBy equals f.C_UserID into temp4
  441. from user in temp4.DefaultIfEmpty()
  442. where plan.CId == id
  443. select new TmtnDevOpsDetailViewModel
  444. {
  445. OpsId = ops.C_ID,
  446. C_Name = spot.C_Name,
  447. DevStoreName = store.C_Name,
  448. DevOpsName = ops.C_Name,
  449. C_CreateByName = user.C_Name,
  450. D_CreateOn = record.D_CreateOn,
  451. C_Status = record.C_Status,
  452. PlanStartDate = ops.D_PlanStartDate,
  453. PlanEndDate = ops.D_PlanEndDate,
  454. CExamineBy = ops.C_ExamineBy.ToString(),
  455. DExamineOn = ops.D_ExamineOn,
  456. DevOpsStatus = ops.C_Status
  457. };
  458. searchModel.TotalCount = await query.CountAsync();
  459. var result = searchModel.IsPagination ? await query.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize).ToListAsync() : await query.ToListAsync();
  460. return result;
  461. }
  462. else
  463. {
  464. var query = from plan in _devOpsPlanRepository.DbContext.TmtnDevOpsPlans
  465. join a in _devOpsPlanRepository.DbContext.TispInspectionWorkOrders on plan.CId equals a.CDevOpsPlanCode into temp
  466. from ops in temp.DefaultIfEmpty()
  467. join c in _devOpsPlanRepository.DbContext.TISP_Spot on ops.CSpotCode equals c.C_Code.ToString() into temp1
  468. from spot in temp1.DefaultIfEmpty()
  469. join d in _devOpsPlanRepository.DbContext.TDEV_DevStore on ops.CDevStoreCode equals d.C_ID into temp2
  470. from store in temp2.DefaultIfEmpty()
  471. //join e in _devOpsPlanRepository.DbContext.TISP_Record on ops.CId equals e.C_InspectionWorkOrderCode into temp3
  472. //from record in temp3.DefaultIfEmpty()
  473. //join f in _devOpsPlanRepository.DbContext.TSYS_User on record.C_CreateBy equals f.C_UserID into temp4
  474. //from user in temp4.DefaultIfEmpty()
  475. join g in _devOpsPlanRepository.DbContext.TSYS_User on ops.CExamineBy equals g.C_UserID.ToString() into temp5
  476. from user1 in temp5.DefaultIfEmpty()
  477. where plan.CId == id
  478. select new TmtnDevOpsDetailViewModel
  479. {
  480. OpsId = ops.CId,
  481. C_Name = spot.C_Name,
  482. DevStoreName = store.C_Name,
  483. DevOpsName = ops.CName,
  484. //C_CreateByName = user.C_Name,
  485. //D_CreateOn = record.D_CreateOn,
  486. //C_Status = record.C_Status,
  487. PlanStartDate = ops.DPlanStartDate,
  488. PlanEndDate = ops.DPlanEndDate,
  489. CExamineBy = ops.CExamineBy,
  490. DExamineOn = ops.DExamineOn,
  491. DevOpsStatus = ops.CStatus
  492. };
  493. searchModel.TotalCount = await query.CountAsync();
  494. var result = searchModel.IsPagination ? await query.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize).ToListAsync() : await query.ToListAsync();
  495. return result;
  496. }
  497. }
  498. public async Task<bool> SetOpsTime(SetOpsModel model)
  499. {
  500. var plan = await _devOpsPlanRepository.GetByIdAsync(model.PlanId);
  501. if (plan.IType == 1)
  502. {
  503. var entity = await _devOpsPlanRepository.DbContext.TMTN_DevOps.Where(x => x.C_ID == model.Id).FirstOrDefaultAsync();
  504. entity.D_PlanStartDate = model.Start;
  505. entity.D_PlanEndDate = model.End;
  506. var result = await _devOpsPlanRepository.DbContext.SaveChangesAsync();
  507. return result > 0;
  508. }
  509. else
  510. {
  511. var entity = await _devOpsPlanRepository.DbContext.TispInspectionWorkOrders.Where(x => x.CId == model.Id).FirstOrDefaultAsync();
  512. entity.DPlanStartDate = model.Start;
  513. entity.DPlanEndDate = model.End;
  514. var result = await _devOpsPlanRepository.DbContext.SaveChangesAsync();
  515. return result > 0;
  516. }
  517. }
  518. public async Task<TispSpotViewModel> GetSpotContent(GetOpsSpotContentModel model)
  519. {
  520. var entity = await _devOpsPlanRepository.DbContext.TispInspectionWorkOrders.Where(x => x.CId == model.OpsId).FirstOrDefaultAsync();
  521. if (entity is null)
  522. {
  523. throw new Exception("工单不存在");
  524. }
  525. var id = new Guid(entity.CSpotCode);
  526. TispSpotViewModel spotDto = await _devOpsPlanRepository.DbContext.TISP_Spot.Where(x => x.C_Code == id && x.C_StoreCode == model.StoreCode)
  527. .Select(x => new TispSpotViewModel
  528. {
  529. C_Code = x.C_Code,
  530. C_Number = x.C_Number,
  531. C_Name = x.C_Name,
  532. C_QRCode = x.C_QRCode,
  533. C_GPS = x.C_GPS,
  534. I_Offset = x.I_Offset,
  535. F_Map_X = x.F_Map_X,
  536. F_Map_Y = x.F_Map_Y,
  537. }).FirstOrDefaultAsync();
  538. if (spotDto.C_QRCode != model.QrCode)
  539. {
  540. throw new Exception("二维码不正确");
  541. }
  542. //获取运维计划配置的内容
  543. var queryAble1 = from a in _devOpsPlanDeviceContentRepository.DbContext.TmtnDevOpsPlans
  544. join b in _devOpsPlanDeviceContentRepository.DbContext.TmtnDevOpsPlanDevices on a.CId equals b.CDevOpsPlanCode into temp
  545. from c in temp.DefaultIfEmpty()
  546. join d in _devOpsPlanDeviceContentRepository.DbContext.TmtnDevOpsPlanContents on c.CId equals d.CDevOpsPlanDeviceCode into temp1
  547. from e in temp1.DefaultIfEmpty()
  548. join f in _devOpsPlanDeviceContentRepository.DbContext.TISP_Content on e.CDevOpsContentCode equals f.C_ID.ToString() into temp2
  549. from g in temp2.DefaultIfEmpty()
  550. where a.CId == entity.CDevOpsPlanCode && c.CSpotCode == entity.CSpotCode && c.CDevStoreCode == entity.CDevStoreCode
  551. select new TispContentViewModel
  552. {
  553. C_ID = g.C_ID,
  554. C_Name = g.C_Name,
  555. C_AlarmLevel = g.C_AlarmLevel,
  556. C_Number = g.C_Number,
  557. C_Remark = g.C_Remark,
  558. C_Status = g.C_Status,
  559. C_StoreCode = g.C_StoreCode,
  560. I_Sort = g.I_Sort,
  561. D_CreateOn = "",
  562. };
  563. List<TispContentViewModel> spotContentDtoList = await queryAble1.ToListAsync();
  564. spotDto.ContentList = spotContentDtoList;
  565. return spotDto;
  566. }
  567. public async Task SetWorkOrderStatus(GetOpsSpotContentModel model)
  568. {
  569. var entity = await _devOpsPlanRepository.DbContext.TispInspectionWorkOrders.Where(x => x.CId == model.OpsId).FirstOrDefaultAsync();
  570. if (entity is null)
  571. {
  572. throw new Exception("工单不存在");
  573. }
  574. entity.CStatus=model.Status;
  575. _devOpsPlanRepository.DbContext.TispInspectionWorkOrders.Update(entity);
  576. await _devOpsPlanRepository.SaveAsync();
  577. }
  578. }
  579. }