DevopsWorkOrderServiceImpl.java 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809
  1. package com.bizmatics.service.impl;
  2. import cn.afterturn.easypoi.excel.ExcelExportUtil;
  3. import cn.afterturn.easypoi.excel.entity.ExportParams;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.bizmatics.common.core.bean.CommonPage;
  9. import com.bizmatics.common.core.exception.BusinessException;
  10. import com.bizmatics.common.core.util.BeanMapperUtils;
  11. import com.bizmatics.common.core.util.FileUtils;
  12. import com.bizmatics.common.mvc.base.AbstractCrudService;
  13. import com.bizmatics.common.spring.util.GlobalUtils;
  14. import com.bizmatics.model.*;
  15. import com.bizmatics.model.system.SysUser;
  16. import com.bizmatics.model.vo.*;
  17. import com.bizmatics.persistence.mapper.DevopsWorkOrderMapper;
  18. import com.bizmatics.service.*;
  19. import com.bizmatics.service.util.SecurityUtils;
  20. import com.bizmatics.service.vo.DeviceExportVO;
  21. import com.bizmatics.service.vo.ProcessingTimeExportVO;
  22. import org.apache.poi.ss.usermodel.Workbook;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import java.io.File;
  26. import java.io.FileOutputStream;
  27. import java.io.IOException;
  28. import java.text.ParseException;
  29. import java.text.SimpleDateFormat;
  30. import java.util.*;
  31. /**
  32. * 运维管理-工单管理
  33. *
  34. * @author ya
  35. * @since 2021-10-21
  36. */
  37. @Service
  38. public class DevopsWorkOrderServiceImpl extends AbstractCrudService<DevopsWorkOrderMapper, DevopsWorkOrder> implements DevopsWorkOrderService {
  39. @Autowired
  40. private DevopsOrderDeviceService devopsOrderDeviceService;
  41. @Autowired
  42. private DevopsOrderInspectorsService devopsOrderInspectorsService;
  43. @Autowired
  44. private PatrolInspectionRecordService patrolInspectionRecordService;
  45. @Autowired
  46. private PatrolRecordRouteService patrolRecordRouteService;
  47. @Autowired
  48. private PatrolInspectorsService patrolInspectorsService;
  49. @Autowired
  50. private PatrolInspectionTeamService patrolInspectionTeamService;
  51. @Override
  52. public void devopsWorkOrderAdd(DevopsWorkOrderVo devopsWorkOrderVo) {
  53. DevopsWorkOrder devopsWorkOrder = new DevopsWorkOrder();
  54. SysUser user = SecurityUtils.getLoginUser().getUser();
  55. devopsWorkOrder.setWorkOrder(devopsWorkOrderVo.getWorkOrder());
  56. devopsWorkOrder.setSiteId(devopsWorkOrderVo.getSiteId());
  57. devopsWorkOrder.setWorkOrderType(devopsWorkOrderVo.getWorkOrderType());
  58. devopsWorkOrder.setExpectedCompletionTime(devopsWorkOrderVo.getExpectedCompletionTime());
  59. devopsWorkOrder.setTeamId(devopsWorkOrderVo.getTeamId());
  60. devopsWorkOrder.setGenerationMode(devopsWorkOrderVo.getGenerationMode());
  61. devopsWorkOrder.setWorkOrderStatus(3);
  62. devopsWorkOrder.setPicturePathOne(devopsWorkOrderVo.getPicturePathOne());
  63. devopsWorkOrder.setPicturePathTwo(devopsWorkOrderVo.getPicturePathTwo());
  64. devopsWorkOrder.setPicturePathThree(devopsWorkOrderVo.getPicturePathThree());
  65. devopsWorkOrder.setPicturePathFour(devopsWorkOrderVo.getPicturePathFour());
  66. devopsWorkOrder.setPicturePathFive(devopsWorkOrderVo.getPicturePathFive());
  67. devopsWorkOrder.setPicturePathSix(devopsWorkOrderVo.getPicturePathSix());
  68. devopsWorkOrder.setCreator(user.getUserName());
  69. devopsWorkOrder.setCreateTime(new Date());
  70. devopsWorkOrder.setStatus(1);
  71. this.save(devopsWorkOrder);
  72. Integer devopsWorkOrderId = devopsWorkOrder.getId();
  73. String[] inspectionDeviceIdList = devopsWorkOrderVo.getInspectionDeviceId().split(",");
  74. String[] inspectorsIdList = devopsWorkOrderVo.getInspectorsId().split(",");
  75. for (int i = 0; i < inspectionDeviceIdList.length; i++) {
  76. DevopsOrderDevice devopsOrderDevice = new DevopsOrderDevice();
  77. devopsOrderDevice.setWorkOrderId(devopsWorkOrderId);
  78. devopsOrderDevice.setInspectionDeviceId(Integer.parseInt(inspectionDeviceIdList[i]));
  79. devopsOrderDevice.setCreator(user.getUserName());
  80. devopsOrderDevice.setCreateTime(new Date());
  81. devopsOrderDevice.setStatus(1);
  82. devopsOrderDeviceService.save(devopsOrderDevice);
  83. }
  84. for (int i = 0; i < inspectorsIdList.length; i++) {
  85. DevopsOrderInspectors devopsOrderInspectors = new DevopsOrderInspectors();
  86. devopsOrderInspectors.setWorkOrderId(devopsWorkOrderId);
  87. devopsOrderInspectors.setInspectorsId(Integer.parseInt(inspectorsIdList[i]));
  88. devopsOrderInspectors.setCreator(user.getUserName());
  89. devopsOrderInspectors.setCreateTime(new Date());
  90. devopsOrderInspectors.setStatus(1);
  91. devopsOrderInspectorsService.save(devopsOrderInspectors);
  92. }
  93. }
  94. @Override
  95. public void devopsWorkOrderUpdate(DevopsWorkOrderVo devopsWorkOrderVo) {
  96. SysUser user = SecurityUtils.getLoginUser().getUser();
  97. DevopsWorkOrder devopsWorkOrder = new DevopsWorkOrder();
  98. devopsWorkOrder.setId(devopsWorkOrderVo.getId());
  99. devopsWorkOrder.setWorkOrder(devopsWorkOrderVo.getWorkOrder());
  100. devopsWorkOrder.setWorkOrderType(devopsWorkOrderVo.getWorkOrderType());
  101. devopsWorkOrder.setExpectedCompletionTime(devopsWorkOrderVo.getExpectedCompletionTime());
  102. devopsWorkOrder.setTeamId(devopsWorkOrderVo.getTeamId());
  103. devopsWorkOrder.setGenerationMode(devopsWorkOrderVo.getGenerationMode());
  104. devopsWorkOrder.setWorkOrderStatus(devopsWorkOrderVo.getWorkOrderStatus());
  105. devopsWorkOrder.setPicturePathOne(devopsWorkOrderVo.getPicturePathOne());
  106. devopsWorkOrder.setPicturePathTwo(devopsWorkOrderVo.getPicturePathTwo());
  107. devopsWorkOrder.setPicturePathThree(devopsWorkOrderVo.getPicturePathThree());
  108. devopsWorkOrder.setPicturePathFour(devopsWorkOrderVo.getPicturePathFour());
  109. devopsWorkOrder.setPicturePathFive(devopsWorkOrderVo.getPicturePathFive());
  110. devopsWorkOrder.setPicturePathSix(devopsWorkOrderVo.getPicturePathSix());
  111. this.updateById(devopsWorkOrder);
  112. Integer devopsWorkOrderId = devopsWorkOrder.getId();
  113. String[] inspectionDeviceIdList = devopsWorkOrderVo.getInspectionDeviceId().split(",");
  114. String[] inspectorsIdList = devopsWorkOrderVo.getInspectorsId().split(",");
  115. if (inspectionDeviceIdList.length > 0) {
  116. for (int i = 0; i < inspectionDeviceIdList.length; i++) {
  117. DevopsOrderDevice devopsOrderDevice = new DevopsOrderDevice();
  118. devopsOrderDevice.setWorkOrderId(devopsWorkOrderId);
  119. devopsOrderDevice.setInspectionDeviceId(Integer.parseInt(inspectionDeviceIdList[i]));
  120. devopsOrderDevice.setCreator(user.getUserName());
  121. devopsOrderDevice.setCreateTime(new Date());
  122. devopsOrderDevice.setStatus(1);
  123. devopsOrderDeviceService.save(devopsOrderDevice);
  124. }
  125. }
  126. if (inspectorsIdList.length > 0) {
  127. for (int i = 0; i < inspectorsIdList.length; i++) {
  128. DevopsOrderInspectors devopsOrderInspectors = new DevopsOrderInspectors();
  129. devopsOrderInspectors.setWorkOrderId(devopsWorkOrderId);
  130. devopsOrderInspectors.setInspectorsId(Integer.parseInt(inspectorsIdList[i]));
  131. devopsOrderInspectors.setCreator(user.getUserName());
  132. devopsOrderInspectors.setCreateTime(new Date());
  133. devopsOrderInspectors.setStatus(1);
  134. devopsOrderInspectorsService.save(devopsOrderInspectors);
  135. }
  136. }
  137. }
  138. @Override
  139. public void devopsWorkOrderDel(Integer id) {
  140. DevopsWorkOrder devopsWorkOrder = new DevopsWorkOrder();
  141. devopsWorkOrder.setId(id);
  142. devopsWorkOrder.setStatus(0);
  143. this.updateById(devopsWorkOrder);
  144. //巡检设备
  145. LambdaQueryWrapper<DevopsOrderDevice> queryWrapperOne = Wrappers.lambdaQuery();
  146. queryWrapperOne.eq(DevopsOrderDevice::getWorkOrderId, id).eq(DevopsOrderDevice::getStatus, 1);
  147. List<DevopsOrderDevice> devopsOrderDeviceList = devopsOrderDeviceService.list(queryWrapperOne);
  148. //人员
  149. LambdaQueryWrapper<DevopsOrderInspectors> queryWrapperTwo = Wrappers.lambdaQuery();
  150. queryWrapperTwo.eq(DevopsOrderInspectors::getWorkOrderId, id).eq(DevopsOrderInspectors::getStatus, 1);
  151. List<DevopsOrderInspectors> devopsOrderInspectorsList = devopsOrderInspectorsService.list(queryWrapperTwo);
  152. if (devopsOrderDeviceList.size() > 0) {
  153. for (int i = 0; i < devopsOrderDeviceList.size(); i++) {
  154. DevopsOrderDevice devopsOrderDevice = new DevopsOrderDevice();
  155. devopsOrderDevice.setId(devopsOrderDeviceList.get(i).getId());
  156. devopsOrderDevice.setStatus(0);
  157. devopsOrderDeviceService.updateById(devopsOrderDevice);
  158. }
  159. }
  160. if (devopsOrderInspectorsList.size() > 0) {
  161. for (int i = 0; i < devopsOrderInspectorsList.size(); i++) {
  162. DevopsOrderInspectors devopsOrderInspectors = new DevopsOrderInspectors();
  163. devopsOrderInspectors.setId(devopsOrderInspectorsList.get(i).getId());
  164. devopsOrderInspectors.setStatus(0);
  165. devopsOrderInspectorsService.updateById(devopsOrderInspectors);
  166. }
  167. }
  168. }
  169. @Override
  170. public void devopsOrderDeviceDel(Integer inspectionDeviceId) {
  171. DevopsOrderDevice devopsOrderDevice = new DevopsOrderDevice();
  172. devopsOrderDevice.setId(inspectionDeviceId);
  173. devopsOrderDevice.setStatus(0);
  174. devopsOrderDeviceService.updateById(devopsOrderDevice);
  175. }
  176. @Override
  177. public void devopsOrderInspectorsDel(Integer inspectorsId) {
  178. DevopsOrderInspectors devopsOrderInspectors = new DevopsOrderInspectors();
  179. devopsOrderInspectors.setId(inspectorsId);
  180. devopsOrderInspectors.setStatus(0);
  181. devopsOrderInspectorsService.updateById(devopsOrderInspectors);
  182. }
  183. @Override
  184. public CommonPage<DevopsWorkOrderListVo> devopsWorkOrderList(Integer generationMode, Integer workOrderStatus, Integer siteId, Integer inspectorsId, Integer size, Integer current) {
  185. List<DevopsWorkOrderListVo> devopsWorkOrderListTwo = new ArrayList<>();
  186. LambdaQueryWrapper<DevopsOrderInspectors> queryWrapperTwo = Wrappers.lambdaQuery();
  187. queryWrapperTwo.eq(DevopsOrderInspectors::getInspectorsId, inspectorsId).eq(DevopsOrderInspectors::getStatus, 1);
  188. List<DevopsOrderInspectors> devopsOrderInspectorsList = devopsOrderInspectorsService.list(queryWrapperTwo);
  189. List<DevopsWorkOrderListVo> devopsWorkOrderListOne = baseMapper.devopsWorkOrderList(generationMode, workOrderStatus, siteId, devopsOrderInspectorsList, null, 0);
  190. int total = 0;
  191. if (devopsWorkOrderListOne.size() > 0) {
  192. total = devopsWorkOrderListOne.size();
  193. }
  194. int startCurrent = (size - 1) * current;
  195. List<DevopsWorkOrderListVo> devopsWorkOrderList = baseMapper.devopsWorkOrderList(generationMode, workOrderStatus, siteId, devopsOrderInspectorsList, startCurrent, current);
  196. if (devopsWorkOrderList.size() > 0) {
  197. List<PatrolInspectorsVo> patrolInspectorsVoList = baseMapper.patrolInspectorsVoList(0);
  198. for (int i = 0; i < devopsWorkOrderList.size(); i++) {
  199. String inspectorsNameList = "";
  200. for (int j = 0; j < patrolInspectorsVoList.size(); j++) {
  201. if (devopsWorkOrderList.get(i).getId() == patrolInspectorsVoList.get(j).getWorkOrderId()) {
  202. inspectorsNameList = inspectorsNameList + patrolInspectorsVoList.get(j).getInspectorsName() + ",";
  203. }
  204. if (patrolInspectorsVoList.size() - 1 == j) {
  205. inspectorsNameList = inspectorsNameList.substring(0, inspectorsNameList.length() - 1);
  206. }
  207. }
  208. devopsWorkOrderList.get(i).setInspectorsName(inspectorsNameList);
  209. // devopsWorkOrderListTwo.set(i, devopsWorkOrderList.get(i));
  210. }
  211. }
  212. return new CommonPage<>(devopsWorkOrderList, total, current, size);
  213. }
  214. @Override
  215. public List<DevopsWorkOrderDetailsVo> devopsWorkOrderDetails(Integer id) {
  216. List<PatrolRouteContentListVo> patrolRouteContentListVoList = new ArrayList<>();
  217. List<DevopsWorkOrderDetailsVo> devopsWorkOrderList = baseMapper.devopsWorkOrderDetails(id);
  218. List<PatrolInspectorsVo> patrolInspectorsList = baseMapper.patrolInspectorsVoList(id);
  219. List<PatrolInspectionDeviceDetailsVo> PatrolInspectionDeviceList = baseMapper.patrolInspectionDeviceList(id);
  220. devopsWorkOrderList.get(0).setPatrolInspectionDeviceDetailsVo(PatrolInspectionDeviceList);
  221. devopsWorkOrderList.get(0).setPatrolInspectorsVo(patrolInspectorsList);
  222. if (devopsWorkOrderList.get(0).getGenerationMode() == 1) {
  223. LambdaQueryWrapper<PatrolInspectionRecord> queryWrapper = Wrappers.lambdaQuery();
  224. queryWrapper.eq(PatrolInspectionRecord::getId, devopsWorkOrderList.get(0).getInspectionRecordId());
  225. List<PatrolInspectionRecord> patrolInspectionRecordList = patrolInspectionRecordService.list(queryWrapper);
  226. List<PatrolRouteContentListVo> patrolRouteContentList = baseMapper.patrolRouteContentList(patrolInspectionRecordList.get(0).getSiteId(), patrolInspectionRecordList.get(0).getInspectionSchemeId());
  227. for (int i = 0; i < patrolRouteContentList.size(); i++) {
  228. LambdaQueryWrapper<PatrolRecordRoute> queryWrapperTwo = Wrappers.lambdaQuery();
  229. queryWrapperTwo.eq(PatrolRecordRoute::getInspectionRecordId, patrolInspectionRecordList.get(0).getId())
  230. .eq(PatrolRecordRoute::getInspectionContentId, patrolRouteContentList.get(i).getInspectionContentId());
  231. List<PatrolRecordRoute> patrolInspectionSchemeList = patrolRecordRouteService.list(queryWrapperTwo);
  232. PatrolRouteContentListVo patrolRouteContentListVo = new PatrolRouteContentListVo();
  233. patrolRouteContentListVo.setId(patrolRouteContentList.get(i).getId());
  234. patrolRouteContentListVo.setInspectionRouteId(patrolRouteContentList.get(i).getInspectionRouteId());
  235. patrolRouteContentListVo.setInspectionContentId(patrolRouteContentList.get(i).getInspectionContentId());
  236. patrolRouteContentListVo.setInspectionContentName(patrolRouteContentList.get(i).getInspectionContentName());
  237. patrolRouteContentListVo.setInspectionDeviceName(patrolRouteContentList.get(i).getInspectionDeviceName());
  238. patrolRouteContentListVo.setCreator(patrolRouteContentList.get(i).getCreator());
  239. patrolRouteContentListVo.setCreateTime(patrolRouteContentList.get(i).getCreateTime());
  240. patrolRouteContentListVo.setStatus(patrolRouteContentList.get(i).getStatus());
  241. patrolRouteContentListVo.setPatrolRecordRoute(patrolInspectionSchemeList);
  242. List inspectionDeviceAbnormalList = new ArrayList();
  243. for (int j = 0; j < patrolInspectionSchemeList.size(); j++) {
  244. inspectionDeviceAbnormalList.add(patrolInspectionSchemeList.get(j).getStatus());
  245. }
  246. patrolRouteContentListVoList.add(patrolRouteContentListVo);
  247. }
  248. }
  249. devopsWorkOrderList.get(0).setPatrolRouteContentListVoList(patrolRouteContentListVoList);
  250. return devopsWorkOrderList;
  251. }
  252. @Override
  253. public List<PatrolInspectors> patrolInspectorsDroplist() {
  254. SysUser user = SecurityUtils.getLoginUser().getUser();
  255. LambdaQueryWrapper<PatrolInspectors> queryWrapperTwo = Wrappers.lambdaQuery();
  256. queryWrapperTwo.eq(PatrolInspectors::getStatus, 1)
  257. .eq(PatrolInspectors::getUserId, user.getUserId());
  258. List<PatrolInspectors> patrolInspectorsList = patrolInspectorsService.list(queryWrapperTwo);
  259. return patrolInspectorsList;
  260. }
  261. @Override
  262. public List<PatrolInspectionTeamOneVo> PatrolInspectionTeamList() {
  263. List<PatrolInspectionTeamOneVo> patrolInspectionTeamOneVoList = new ArrayList<>();
  264. LambdaQueryWrapper<PatrolInspectionTeam> queryWrapper = Wrappers.lambdaQuery();
  265. queryWrapper.eq(PatrolInspectionTeam::getStatus, 1);
  266. List<PatrolInspectionTeam> patrolInspectionTeamList = patrolInspectionTeamService.list(queryWrapper);
  267. List<PatrolInspectorsOneVo> patrolInspectorsOneVoList = baseMapper.patrolInspectorsOneVoList();
  268. if (patrolInspectionTeamList.size() > 0) {
  269. for (int i = 0; i < patrolInspectionTeamList.size(); i++) {
  270. List<Object> List = new ArrayList<>();
  271. PatrolInspectionTeamOneVo patrolInspectionTeamOneVo = new PatrolInspectionTeamOneVo();
  272. patrolInspectionTeamOneVo.setTeamType(patrolInspectionTeamList.get(i).getTeamType());
  273. patrolInspectionTeamOneVo.setInspectorsId(patrolInspectionTeamList.get(i).getInspectorsId());
  274. patrolInspectionTeamOneVo.setTeamName(patrolInspectionTeamList.get(i).getTeamName());
  275. patrolInspectionTeamOneVo.setCreator(patrolInspectionTeamList.get(i).getCreator());
  276. patrolInspectionTeamOneVo.setCreateTime(patrolInspectionTeamList.get(i).getCreateTime());
  277. patrolInspectionTeamOneVo.setStatus(patrolInspectionTeamList.get(i).getStatus());
  278. patrolInspectionTeamOneVo.setId(patrolInspectionTeamList.get(i).getId());
  279. patrolInspectionTeamOneVo.setUserId(patrolInspectionTeamList.get(i).getUserId());
  280. patrolInspectionTeamOneVo.setReservedField(patrolInspectionTeamList.get(i).getReservedField());
  281. if (patrolInspectorsOneVoList.size() > 0) {
  282. for (int j = 0; j < patrolInspectorsOneVoList.size(); j++) {
  283. if (patrolInspectionTeamList.get(i).getId() == patrolInspectorsOneVoList.get(j).getTeamId()) {
  284. List.add(patrolInspectorsOneVoList.get(j));
  285. }
  286. }
  287. }
  288. patrolInspectionTeamOneVo.setPatrolInspectorsOneVo(List);
  289. patrolInspectionTeamOneVoList.add(patrolInspectionTeamOneVo);
  290. }
  291. }
  292. return patrolInspectionTeamOneVoList;
  293. }
  294. @Override
  295. public List<OpexStatisticsVo> operationCensus(String type) {
  296. String firstDay;
  297. String lastDay;
  298. Date startDate;
  299. Date endDate;
  300. String startTime;
  301. String endTime;
  302. int days = 0;
  303. SysUser user = SecurityUtils.getLoginUser().getUser();
  304. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  305. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  306. SimpleDateFormat yearFormatter = new SimpleDateFormat("yyyy");
  307. Date date = new Date();
  308. String year = yearFormatter.format(date);
  309. String startHms = "00:00:00";
  310. String endHms = "23:59:59";
  311. Integer stayGrabOrdersCount = 0;
  312. Integer stayAppointCount = 0;
  313. Integer stayOrderTakingCount = 0;
  314. Integer stayManageCount = 0;
  315. Integer stayCustomsClearanceCount = 0;
  316. Integer completedCount = 0;
  317. switch (type) {
  318. case "thisMonth":
  319. Calendar calendar = new GregorianCalendar();
  320. calendar.setTime(date);
  321. //获得本月第一天
  322. calendar.add(Calendar.MONTH, 0);
  323. calendar.set(Calendar.DAY_OF_MONTH, 1);
  324. firstDay = sdf.format(calendar.getTime());
  325. startDate = calendar.getTime();
  326. //获得本月最后一天
  327. calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
  328. lastDay = sdf.format(calendar.getTime());
  329. startTime = firstDay + " " + startHms;
  330. endTime = lastDay + " " + endHms;
  331. days = (int) ((date.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  332. break;
  333. case "lastMonth":
  334. //获取前一个月第一天
  335. Calendar calendar1 = Calendar.getInstance();
  336. calendar1.add(Calendar.MONTH, -1);
  337. calendar1.set(Calendar.DAY_OF_MONTH, 1);
  338. firstDay = sdf.format(calendar1.getTime());
  339. startDate = calendar1.getTime();
  340. //获取前一个月最后一天
  341. Calendar calendar2 = Calendar.getInstance();
  342. calendar2.set(Calendar.DAY_OF_MONTH, 0);
  343. lastDay = sdf.format(calendar2.getTime());
  344. endDate = calendar2.getTime();
  345. startTime = firstDay + " " + startHms;
  346. endTime = lastDay + " " + endHms;
  347. days = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  348. break;
  349. case "thisQuarter":
  350. //获取本季度第一天
  351. startDate = getCurrentQuarterStartTime();
  352. firstDay = sdf.format(startDate);
  353. //获取本季度最后一天
  354. endDate = getCurrentQuarterEndTime();
  355. lastDay = sdf.format(endDate);
  356. startTime = firstDay + " " + startHms;
  357. endTime = lastDay + " " + endHms;
  358. days = (int) ((date.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  359. break;
  360. case "lastQuarter":
  361. startDate = getCurrentQuarterStartTime();
  362. endDate = getCurrentQuarterEndTime();
  363. Calendar calendar3 = Calendar.getInstance(); //得到日历
  364. calendar3.setTime(startDate);//把当前时间赋给日历
  365. calendar3.add(calendar3.MONTH, -3); //设置为前3月
  366. date = calendar3.getTime(); //得到前3月的时间
  367. firstDay = sdf.format(date);
  368. calendar3.setTime(endDate);//把当前时间赋给日历
  369. calendar3.add(calendar3.MONTH, -3); //设置为前3月
  370. date = calendar3.getTime(); //得到前3月的时间
  371. lastDay = sdf.format(date);
  372. startTime = firstDay + " " + startHms;
  373. endTime = lastDay + " " + endHms;
  374. days = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  375. break;
  376. case "thisYear":
  377. //获取本年时间
  378. startTime = year + "-01-01 " + startHms;
  379. endTime = year + "-12-31 " + endHms;
  380. try {
  381. startDate = sdf.parse(year + "-01-01");
  382. days = (int) ((date.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  383. } catch (ParseException e) {
  384. e.printStackTrace();
  385. }
  386. break;
  387. case "lastYear":
  388. Calendar c = Calendar.getInstance();
  389. c.add(Calendar.YEAR, -1);
  390. Date yearDate = c.getTime();
  391. String yearTime = yearFormatter.format(yearDate);
  392. startTime = yearTime + "-01-01 " + startHms;
  393. endTime = yearTime + "-12-31 " + endHms;
  394. try {
  395. startDate = sdf.parse(year + "-01-01");
  396. endDate = sdf.parse(yearTime + "-12-31");
  397. days = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  398. } catch (ParseException e) {
  399. e.printStackTrace();
  400. }
  401. break;
  402. default:
  403. String[] time = type.split(",");
  404. startTime = time[0] + " " + startHms;
  405. endTime = time[1] + " " + endHms;
  406. try {
  407. startDate = sdf.parse(time[0]);
  408. endDate = sdf.parse(time[1]);
  409. days = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24)) + 1;
  410. } catch (ParseException e) {
  411. e.printStackTrace();
  412. }
  413. }
  414. //新建工单数量
  415. LambdaQueryWrapper<DevopsWorkOrder> queryWrapper = Wrappers.lambdaQuery();
  416. queryWrapper.eq(DevopsWorkOrder::getStatus, 1)
  417. .between(DevopsWorkOrder::getCreateTime, startTime, endTime);
  418. Integer newWorkOrderCount = this.count(queryWrapper);
  419. //已完成工单
  420. LambdaQueryWrapper<DevopsWorkOrder> queryWrapperOne = Wrappers.lambdaQuery();
  421. queryWrapperOne.eq(DevopsWorkOrder::getStatus, 1)
  422. .eq(DevopsWorkOrder::getWorkOrderStatus, 6)
  423. .between(DevopsWorkOrder::getCreateTime, startTime, endTime);
  424. Integer completedWorkOrder = this.count(queryWrapperOne);
  425. //平均响应时间
  426. Double averageResponseTime = 0.30;
  427. //日均工单数
  428. double workOrderAveCount = newWorkOrderCount / days;
  429. //工作状态
  430. QueryWrapper<DevopsWorkOrder> queryWrapperTwo = new QueryWrapper<>();
  431. queryWrapperTwo.select("work_order_status", "count(*) as count")
  432. .eq("status", 1)
  433. .between("create_time", startTime, endTime)
  434. .groupBy("work_order_status");
  435. List<DevopsWorkOrder> groupingQueryVoList = this.list(queryWrapperTwo);
  436. for (int i = 0; i < groupingQueryVoList.size(); i++) {
  437. switch (groupingQueryVoList.get(i).getWorkOrderStatus()) {
  438. case 1:
  439. stayGrabOrdersCount = groupingQueryVoList.get(i).getCount();
  440. break;
  441. case 2:
  442. stayAppointCount = groupingQueryVoList.get(i).getCount();
  443. break;
  444. case 3:
  445. stayOrderTakingCount = groupingQueryVoList.get(i).getCount();
  446. break;
  447. case 4:
  448. stayManageCount = groupingQueryVoList.get(i).getCount();
  449. break;
  450. case 5:
  451. stayCustomsClearanceCount = groupingQueryVoList.get(i).getCount();
  452. break;
  453. case 6:
  454. completedCount = groupingQueryVoList.get(i).getCount();
  455. break;
  456. default:
  457. }
  458. }
  459. //各站点各类工单数统计
  460. QueryWrapper<DevopsWorkOrder> queryWrapperThree = new QueryWrapper<>();
  461. queryWrapperThree.select("site_id", "work_order_type", "count(*) as count")
  462. .eq("status", 1)
  463. .between("create_time", startTime, endTime)
  464. .groupBy("site_id", "work_order_type");
  465. List<DevopsWorkOrder> WorkOrderStatisticsList = this.list(queryWrapperThree);
  466. List<Object> workOrderStatistics = new ArrayList<>();
  467. List<Site> siteList = baseMapper.SiteList(user.getUserId().intValue(), null);
  468. if (siteList.size() > 0) {
  469. for (int i = 0; i < siteList.size(); i++) {
  470. Map<String, Object> map = new HashMap<>();
  471. Integer safetyValuationCount = 0;
  472. Integer overhaulCount = 0;
  473. Integer rushRepairCount = 0;
  474. Integer otherCount = 0;
  475. Integer maintainCount = 0;
  476. Integer outageMaintenanceCount = 0;
  477. Integer inspectionCount = 0;
  478. if (WorkOrderStatisticsList.size() > 0) {
  479. for (int j = 0; j < WorkOrderStatisticsList.size(); j++) {
  480. if (siteList.get(i).getId() == WorkOrderStatisticsList.get(j).getSiteId()) {
  481. switch (WorkOrderStatisticsList.get(j).getWorkOrderType()) {
  482. case 1:
  483. safetyValuationCount = WorkOrderStatisticsList.get(j).getCount();
  484. break;
  485. case 2:
  486. overhaulCount = WorkOrderStatisticsList.get(j).getCount();
  487. break;
  488. case 3:
  489. rushRepairCount = WorkOrderStatisticsList.get(j).getCount();
  490. break;
  491. case 4:
  492. otherCount = WorkOrderStatisticsList.get(j).getCount();
  493. break;
  494. case 5:
  495. maintainCount = WorkOrderStatisticsList.get(j).getCount();
  496. break;
  497. case 6:
  498. outageMaintenanceCount = WorkOrderStatisticsList.get(j).getCount();
  499. break;
  500. case 7:
  501. inspectionCount = WorkOrderStatisticsList.get(j).getCount();
  502. break;
  503. default:
  504. }
  505. }
  506. map.put("siteName", siteList.get(i).getSiteName());
  507. map.put("safetyValuationCount", safetyValuationCount);
  508. map.put("overhaulCount", overhaulCount);
  509. map.put("rushRepairCount", rushRepairCount);
  510. map.put("otherCount", otherCount);
  511. map.put("maintainCount", maintainCount);
  512. map.put("outageMaintenanceCount", outageMaintenanceCount);
  513. map.put("inspectionCount", inspectionCount);
  514. }
  515. } else {
  516. map.put("siteName", siteList.get(i).getSiteName());
  517. map.put("safetyValuationCount", safetyValuationCount);
  518. map.put("overhaulCount", overhaulCount);
  519. map.put("rushRepairCount", rushRepairCount);
  520. map.put("otherCount", otherCount);
  521. map.put("maintainCount", maintainCount);
  522. map.put("outageMaintenanceCount", outageMaintenanceCount);
  523. map.put("inspectionCount", inspectionCount);
  524. }
  525. workOrderStatistics.add(map);
  526. }
  527. }
  528. //工单数趋势
  529. QueryWrapper<DevopsWorkOrder> queryWrapperFour = new QueryWrapper<>();
  530. queryWrapperFour.select("FROM_UNIXTIME(UNIX_TIMESTAMP(create_time) , '%Y-%m-%d') as create_time", "count(*) as count")
  531. .eq("status", 1)
  532. .between("create_time", startTime, endTime)
  533. .groupBy("site_id", "work_order_type");
  534. List<DevopsWorkOrder> workOrderTrend = this.list(queryWrapperFour);
  535. List<OpexStatisticsVo> list = new ArrayList<>();
  536. list.add(OpexStatisticsVo.builder()
  537. .newWorkOrderCount(newWorkOrderCount)
  538. .completedWorkOrder(completedWorkOrder)
  539. .averageResponseTime(averageResponseTime)
  540. .workOrderAveCount(workOrderAveCount)
  541. .stayGrabOrdersCount(stayGrabOrdersCount)
  542. .stayAppointCount(stayAppointCount)
  543. .stayOrderTakingCount(stayOrderTakingCount)
  544. .stayManageCount(stayManageCount)
  545. .stayCustomsClearanceCount(stayCustomsClearanceCount)
  546. .completedCount(completedCount)
  547. .workOrderStatistics(workOrderStatistics)
  548. .workOrderTrend(workOrderTrend)
  549. .build());
  550. return list;
  551. }
  552. //根据当前日期获取本季度第一天
  553. public static Date getCurrentQuarterStartTime() {
  554. Calendar c = Calendar.getInstance();
  555. int currentMonth = c.get(Calendar.MONTH) + 1;
  556. SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  557. SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
  558. Date now = null;
  559. try {
  560. if (currentMonth <= 3)
  561. c.set(Calendar.MONTH, 0);
  562. else if (currentMonth <= 6)
  563. c.set(Calendar.MONTH, 3);
  564. else if (currentMonth <= 9)
  565. c.set(Calendar.MONTH, 6);
  566. else if (currentMonth <= 12)
  567. c.set(Calendar.MONTH, 9);
  568. c.set(Calendar.DATE, 1);
  569. now = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
  570. } catch (Exception e) {
  571. e.printStackTrace();
  572. }
  573. return now;
  574. }
  575. //根据当前日期获取本季度最后一天
  576. public static Date getCurrentQuarterEndTime() {
  577. Calendar cal = Calendar.getInstance();
  578. cal.setTime(getCurrentQuarterStartTime());
  579. cal.add(Calendar.MONTH, 2);
  580. cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
  581. cal.set(Calendar.HOUR_OF_DAY, 23);
  582. cal.set(Calendar.MINUTE, 59);
  583. cal.set(Calendar.SECOND, 59);
  584. cal.set(Calendar.MILLISECOND, 999);
  585. return cal.getTime();
  586. }
  587. @Override
  588. public CommonPage<ProcessingTimeVo> workloadStatisticsLits(Integer siteId,String startTime,String endTime,Integer size , Integer current){
  589. List<ProcessingTime> processingTimeList = baseMapper.workloadStatisticsLits(siteId, startTime, endTime);
  590. LambdaQueryWrapper<PatrolInspectors> queryWrapper = Wrappers.lambdaQuery();
  591. queryWrapper.eq(PatrolInspectors::getStatus, 1);
  592. List<PatrolInspectors> patrolInspectorsList = patrolInspectorsService.list(queryWrapper);
  593. List<ProcessingTimeVo> Active1 = new ArrayList<ProcessingTimeVo>(); // 存放页面需要展示的数据
  594. List<ProcessingTimeVo> processingTimeVoList1 = new ArrayList<>();
  595. if (patrolInspectorsList.size()>0){
  596. for (int i = 0; i < patrolInspectorsList.size(); i++) {
  597. ProcessingTimeVo processingTimeVo1 = new ProcessingTimeVo();
  598. Map<String, Object> map = new HashMap<>();
  599. Integer orderQuantity = 0;
  600. Integer completedQuantity = 0;
  601. Integer incomplete = 0;
  602. Integer responseTime = 0;
  603. Integer processingTime = 0;
  604. if (processingTimeList.size()>0){
  605. for (Integer j = 0; j < processingTimeList.size(); j++) {
  606. if (patrolInspectorsList.get(i).getId()==processingTimeList.get(j).getId()){
  607. switch (processingTimeList.get(j).getWorkOrderStatus()) {
  608. case 4:
  609. orderQuantity += processingTimeList.get(j).getCount();
  610. incomplete += processingTimeList.get(j).getCount();
  611. break;
  612. case 5:
  613. incomplete += processingTimeList.get(j).getCount();
  614. orderQuantity += processingTimeList.get(j).getCount();
  615. break;
  616. case 6:
  617. orderQuantity += processingTimeList.get(j).getCount();
  618. completedQuantity += processingTimeList.get(j).getCount();
  619. processingTime=processingTimeList.get(j).getProcessingTime();
  620. break;
  621. default:
  622. }
  623. }
  624. }
  625. processingTimeVo1.setId(patrolInspectorsList.get(i).getId());
  626. processingTimeVo1.setInspectorsName(patrolInspectorsList.get(i).getInspectorsName());
  627. processingTimeVo1.setOrderQuantity(orderQuantity);
  628. processingTimeVo1.setCompletedQuantity(completedQuantity);
  629. processingTimeVo1.setIncomplete(incomplete);
  630. processingTimeVo1.setResponseTime(responseTime);
  631. processingTimeVo1.setProcessingTime(processingTime);
  632. processingTimeVo1.setTestimonials("");
  633. }else {
  634. processingTimeVo1.setId(patrolInspectorsList.get(i).getId());
  635. processingTimeVo1.setInspectorsName(patrolInspectorsList.get(i).getInspectorsName());
  636. processingTimeVo1.setOrderQuantity(orderQuantity);
  637. processingTimeVo1.setCompletedQuantity(completedQuantity);
  638. processingTimeVo1.setIncomplete(incomplete);
  639. processingTimeVo1.setResponseTime(responseTime);
  640. processingTimeVo1.setProcessingTime(processingTime);
  641. processingTimeVo1.setTestimonials("");
  642. }
  643. processingTimeVoList1.add(processingTimeVo1);
  644. }
  645. int currIdx = (current > 1 ? (current -1) * size: 0);
  646. for (int i = 0; i < size && i < processingTimeVoList1.size() - currIdx; i++) { // 判断条件十分巧妙,防止List取值越界
  647. ProcessingTimeVo active = processingTimeVoList1.get(currIdx + i);
  648. Active1.add(active);
  649. }
  650. }
  651. return new CommonPage<>(Active1, processingTimeVoList1.size(), size, current);
  652. }
  653. @Override
  654. public String workloadStatisticsExport(Integer siteId,String startTime,String endTime){
  655. Workbook workbook = null;
  656. File file = null;
  657. try {
  658. ExportParams params = new ExportParams(null, "工作量统计");
  659. workbook = ExcelExportUtil.exportBigExcel(params, ProcessingTimeExportVO.class,
  660. (o, i) -> {
  661. List<ProcessingTime> processingTimeList = baseMapper.workloadStatisticsLits(siteId, startTime, endTime);
  662. LambdaQueryWrapper<PatrolInspectors> queryWrapper = Wrappers.lambdaQuery();
  663. queryWrapper.eq(PatrolInspectors::getStatus, 1);
  664. List<PatrolInspectors> patrolInspectorsList = patrolInspectorsService.list(queryWrapper);
  665. List<ProcessingTimeVo> Active1 = new ArrayList<ProcessingTimeVo>(); // 存放页面需要展示的数据
  666. List<ProcessingTimeVo> processingTimeVoList1 = new ArrayList<>();
  667. if (patrolInspectorsList.size()>0){
  668. for (int k = 0; k < patrolInspectorsList.size(); k++) {
  669. ProcessingTimeVo processingTimeVo1 = new ProcessingTimeVo();
  670. Map<String, Object> map = new HashMap<>();
  671. Integer orderQuantity = 0;
  672. Integer completedQuantity = 0;
  673. Integer incomplete = 0;
  674. Integer responseTime = 0;
  675. Integer processingTime = 0;
  676. if (processingTimeList.size()>0){
  677. for (Integer j = 0; j < processingTimeList.size(); j++) {
  678. if (patrolInspectorsList.get(k).getId()==processingTimeList.get(j).getId()){
  679. switch (processingTimeList.get(j).getWorkOrderStatus()) {
  680. case 4:
  681. orderQuantity += processingTimeList.get(j).getCount();
  682. incomplete += processingTimeList.get(j).getCount();
  683. break;
  684. case 5:
  685. incomplete += processingTimeList.get(j).getCount();
  686. orderQuantity += processingTimeList.get(j).getCount();
  687. break;
  688. case 6:
  689. orderQuantity += processingTimeList.get(j).getCount();
  690. completedQuantity += processingTimeList.get(j).getCount();
  691. processingTime=processingTimeList.get(j).getProcessingTime();
  692. break;
  693. default:
  694. }
  695. }
  696. }
  697. processingTimeVo1.setId(patrolInspectorsList.get(k).getId());
  698. processingTimeVo1.setInspectorsName(patrolInspectorsList.get(k).getInspectorsName());
  699. processingTimeVo1.setOrderQuantity(orderQuantity);
  700. processingTimeVo1.setCompletedQuantity(completedQuantity);
  701. processingTimeVo1.setIncomplete(incomplete);
  702. processingTimeVo1.setResponseTime(responseTime);
  703. processingTimeVo1.setProcessingTime(processingTime);
  704. processingTimeVo1.setTestimonials("");
  705. }else {
  706. processingTimeVo1.setId(patrolInspectorsList.get(k).getId());
  707. processingTimeVo1.setInspectorsName(patrolInspectorsList.get(k).getInspectorsName());
  708. processingTimeVo1.setOrderQuantity(orderQuantity);
  709. processingTimeVo1.setCompletedQuantity(completedQuantity);
  710. processingTimeVo1.setIncomplete(incomplete);
  711. processingTimeVo1.setResponseTime(responseTime);
  712. processingTimeVo1.setProcessingTime(processingTime);
  713. processingTimeVo1.setTestimonials("");
  714. }
  715. processingTimeVoList1.add(processingTimeVo1);
  716. }
  717. int currIdx = (i > 1 ? (i -1) * 30: 0);
  718. for (int j = 0; j < 30 && j < processingTimeVoList1.size() - currIdx; j++) { // 判断条件十分巧妙,防止List取值越界
  719. ProcessingTimeVo active = processingTimeVoList1.get(currIdx + j);
  720. Active1.add(active);
  721. }
  722. }
  723. return new ArrayList<>(BeanMapperUtils.mapList(Active1, ProcessingTimeVo.class, ProcessingTimeExportVO.class));
  724. }, null);
  725. if (null != workbook) {
  726. file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "工作量统计", System.currentTimeMillis() + ""));
  727. FileUtils.createFile(file.getAbsolutePath());
  728. FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
  729. workbook.write(allListingFileOutputStream);
  730. } else {
  731. throw new BusinessException("表格数据为空");
  732. }
  733. } catch (Exception e) {
  734. log.error("导出文件失败", e);
  735. throw new BusinessException("导出文件失败");
  736. } finally {
  737. if (workbook != null) {
  738. try {
  739. workbook.close();
  740. } catch (IOException e) {
  741. log.error("===export spec=== 关闭workbook失败", e);
  742. }
  743. }
  744. }
  745. return file.getName();
  746. }
  747. }