ScanService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package com.bofeng.service;
  2. import com.baomidou.mybatisplus.toolkit.IdWorker;
  3. import com.bofeng.dao.*;
  4. import com.bofeng.entity.*;
  5. import lombok.SneakyThrows;
  6. import org.gavaghan.geodesy.Ellipsoid;
  7. import org.gavaghan.geodesy.GeodeticCalculator;
  8. import org.gavaghan.geodesy.GlobalCoordinates;
  9. import org.joda.time.DateTime;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Propagation;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import java.text.ParseException;
  15. import java.text.SimpleDateFormat;
  16. import java.util.Date;
  17. import java.util.List;
  18. @Service
  19. @Transactional(readOnly = true)
  20. public class ScanService {
  21. @Autowired
  22. private OutScanMapper outScanMapper;
  23. @Autowired
  24. private OutScanEstateMapper outScanEstateMapper;
  25. @Autowired
  26. private UserOpenMapper userOpenMapper;
  27. @Autowired
  28. private OutUserMapper outUserMapper;
  29. @Autowired
  30. private MsReportMapper msReportMapper;
  31. @Autowired
  32. private ReturnWorkLyMapper returnWorkLyMapper;
  33. @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
  34. public void saveOutScan(Long userId, Integer inType, String coord, String address, Long uptownId, Long doorId, Integer status, String errorInfo) {
  35. String longitude = "";
  36. String latitude = "";
  37. if (!"".equals(coord)) {
  38. String[] coor = coord.split(",");
  39. longitude = coor[0];
  40. latitude = coor[1];
  41. }
  42. OutScan outScan = new OutScan();
  43. outScan.setScanId(IdWorker.getId());
  44. outScan.setUserId(userId);
  45. outScan.setUptownId(uptownId);
  46. outScan.setDoorId(doorId);
  47. outScan.setInType(inType);
  48. outScan.setDayDate(new Date());
  49. outScan.setDate(new DateTime());
  50. outScan.setLongitude(longitude);
  51. outScan.setLatitude(latitude);
  52. outScan.setAddress(address);
  53. outScan.setGoStatus(status);
  54. outScan.setErrorInfo(errorInfo);
  55. outScan.setUserCreate(userId);
  56. outScan.setUserUpdate(userId);
  57. outScanMapper.insert(outScan);
  58. }
  59. @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
  60. public void saveOutScanEstate(Long userId, Integer status, String errorInfo) {
  61. OutScanEstate o = new OutScanEstate();
  62. o.setSeId(IdWorker.getId());
  63. o.setUserId(userId);
  64. o.setDayDate(new Date());
  65. o.setScanDate(new DateTime());
  66. o.setGoStatus(status);
  67. o.setErrorInfo(errorInfo);
  68. o.setUserCreate(userId);
  69. o.setUserUpdate(userId);
  70. outScanEstateMapper.insert(o);
  71. }
  72. /**
  73. * 根据经纬度查询距离
  74. *
  75. * @param longitudeFrom
  76. * @param latitudeFrom
  77. * @param longitudeTo
  78. * @param latitudeTo
  79. * @return
  80. */
  81. public double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
  82. GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
  83. GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
  84. return new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target).getEllipsoidalDistance();
  85. }
  86. /**
  87. * 复工导出
  88. * @param unitId
  89. */
  90. @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
  91. public void returnWorkLY(Long unitId) {
  92. new Runnable() {
  93. @SneakyThrows
  94. @Override
  95. public void run() {
  96. returnWorkLyMapper.deleteReturnWork();
  97. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  98. SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
  99. List<UserOpen> opens = userOpenMapper.getUsersByunitId(1238790987234L, unitId);
  100. ReturnWorkLy r = new ReturnWorkLy();
  101. for (int i = 0; i < opens.size(); i++) {
  102. OutUser outUser1 = outUserMapper.getOutUserByPhone(4, opens.get(i).getLinkman(), Long.parseLong(opens.get(i).getPhone()));
  103. if (outUser1 != null) {
  104. continue;
  105. }
  106. OutUser outUser = outUserMapper.getOutUserByPhone(1, opens.get(i).getLinkman(), Long.parseLong(opens.get(i).getPhone()));
  107. if (outUser != null) {
  108. r.setRwId(IdWorker.getId());
  109. r.setUserId(opens.get(i).getUserId());
  110. r.setTimeCreate(new DateTime());
  111. returnWorkLyMapper.insert(r);
  112. continue;
  113. }
  114. Boolean ly2 = false;
  115. String startDate = "";
  116. int intSize = 3;
  117. OutUser outUser2 = outUserMapper.getOutUserByPhoneNotTime(5, opens.get(i).getLinkman(), Long.parseLong(opens.get(i).getPhone()));
  118. if (outUser2 != null) {
  119. ly2 = true;
  120. startDate = s.format(outUser2.getStartDate());
  121. Long day = (new Date().getTime() - outUser2.getStartDate().getTime()) / (1000 * 60 * 60 * 24) -1;
  122. intSize = Integer.parseInt(Long.toString(day)) < 3 ? Integer.parseInt(Long.toString(day)) : 3;
  123. }
  124. MsReport msReport = msReportMapper.queryMsReportIsXG(opens.get(i).getUserId());
  125. if (msReport != null) {
  126. if (ly2 && outUser2.getStartDate().getTime() < msReport.getReportDate().getTime()) {
  127. continue;
  128. } else if (!ly2) {
  129. continue;
  130. }
  131. }
  132. List<MsReport> msReportList = msReportMapper.queryMsReportIsXGHome(opens.get(i).getUserId());
  133. if (msReportList.size() > 0) {
  134. if (ly2 && outUser2.getStartDate().getTime() < msReportList.get(0).getReportDate().getTime()) {
  135. continue;
  136. } else if (!ly2) {
  137. continue;
  138. }
  139. }
  140. List<MsReport> msReports = msReportMapper.selectMsReportLate(opens.get(i).getUserId(), startDate);
  141. if (msReports.size() < intSize) {
  142. continue;
  143. }
  144. List<MsReport> msReports2 = msReportMapper.selectMsReportThereError(opens.get(i).getUserId(), startDate);
  145. if (msReports2.size() > 0) {
  146. continue;
  147. }
  148. List<MsReport> msReports3 = msReportMapper.selectMsReportThereErrorFamily(opens.get(i).getUserId(), startDate);
  149. if (msReports3.size() > 0) {
  150. continue;
  151. }
  152. // MsTripDet work = msReportMapper.returnWork(opens.get(i).getUserId());
  153. // if (work != null) {
  154. // if (ly2 && outUser2.getStartDate().getTime() < s.parse(work.getReturnWork()).getTime()) {
  155. // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) {
  156. // continue;
  157. // }
  158. // } else if (!ly2) {
  159. // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) {
  160. // continue;
  161. // }
  162. // }
  163. // }
  164. // MsReport msReport1 = msReportMapper.msAddr(opens.get(i).getUserId());
  165. // if (msReport1 != null &&msReport1.getWorkMsg() != null &&msReport1.getTodayMsg() != null && !msReport1.getWorkMsg().equals(msReport1.getTodayMsg()) && !compareWhere(msReport1.getWorkMsg(), msReport1.getTodayMsg())) {
  166. // continue;
  167. // }
  168. r.setRwId(IdWorker.getId());
  169. r.setUserId(opens.get(i).getUserId());
  170. r.setTimeCreate(new DateTime());
  171. returnWorkLyMapper.insert(r);
  172. }
  173. }
  174. }.run();
  175. }
  176. /**
  177. * 页面复工检索
  178. */
  179. public int returnWorkLYlist(Long userId, String linkman, String phone, String workAddr) throws ParseException {
  180. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  181. SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
  182. OutUser outUser1 = outUserMapper.getOutUserByPhone(4, linkman, Long.parseLong(phone));
  183. if (outUser1 != null) {
  184. return 0;
  185. }
  186. OutUser outUser = outUserMapper.getOutUserByPhone(1, linkman, Long.parseLong(phone));
  187. if (outUser != null) {
  188. // 六类
  189. return 1;
  190. }
  191. Boolean ly2 = false;
  192. String startDate = "";
  193. int intSize = 3;
  194. OutUser outUser2 = outUserMapper.getOutUserByPhoneNotTime(5, linkman, Long.parseLong(phone));
  195. if (outUser2 != null) {
  196. ly2 = true;
  197. startDate = s.format(outUser2.getStartDate());
  198. Long day = (new Date().getTime() - outUser2.getStartDate().getTime()) / (1000 * 60 * 60 * 24) -1;
  199. intSize = Integer.parseInt(Long.toString(day)) < 3 ? Integer.parseInt(Long.toString(day)) : 3;
  200. }
  201. MsReport msReport = msReportMapper.queryMsReportIsXG(userId);
  202. if (msReport != null) {
  203. if (ly2 && outUser2.getStartDate().getTime() < msReport.getReportDate().getTime()) {
  204. return 0;
  205. } else if (!ly2) {
  206. return 0;
  207. }
  208. }
  209. List<MsReport> msReportList = msReportMapper.queryMsReportIsXGHome(userId);
  210. if (msReportList.size() > 0) {
  211. if (ly2 && outUser2.getStartDate().getTime() < msReportList.get(0).getReportDate().getTime()) {
  212. return 0;
  213. } else if (!ly2) {
  214. return 0;
  215. }
  216. }
  217. List<MsReport> msReports = msReportMapper.selectMsReportLate(userId, startDate);
  218. if (msReports.size() < intSize) {
  219. return 0;
  220. }
  221. List<MsReport> msReports2 = msReportMapper.selectMsReportThereError(userId, startDate);
  222. if (msReports2.size() > 0) {
  223. return 0;
  224. }
  225. List<MsReport> msReports3 = msReportMapper.selectMsReportThereErrorFamily(userId, startDate);
  226. if (msReports3.size() > 0) {
  227. return 0;
  228. }
  229. List<MsReport> msReports4 = msReportMapper.selectMsReportThirtyError(userId);
  230. if (msReports4.size() > 0) {
  231. return 0;
  232. }
  233. MsReport msReport1 = msReportMapper.msAddr(userId);
  234. if (msReport1 != null && !msReport1.getAutoLocal().equals(workAddr)) {
  235. return 0;
  236. }
  237. // MsTripDet work = msReportMapper.returnWork(userId);
  238. // if (work != null) {
  239. // if (ly2 && outUser2.getStartDate().getTime() < s.parse(work.getReturnWork()).getTime()) {
  240. // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) {
  241. // return 0;
  242. // }
  243. // } else if (!ly2) {
  244. // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) {
  245. // return 0;
  246. // }
  247. // }
  248. // }
  249. // MsReport msReport1 = msReportMapper.msAddr(userId);
  250. // if (msReport1 != null &&msReport1.getWorkMsg() != null &&msReport1.getTodayMsg() != null && !msReport1.getWorkMsg().equals(msReport1.getTodayMsg()) && !compareWhere(msReport1.getWorkMsg(), msReport1.getTodayMsg())) {
  251. // return 0;
  252. // }
  253. return 1;
  254. }
  255. /**
  256. * 比较出发地和目地地是否一样, 一样返回true,不一样返回false
  257. */
  258. public Boolean compareWhere(String str1, String str2) {
  259. Boolean type = false;
  260. if ((str1.equals("2") || str1.equals("3")) && (str2.equals("2") || str2.equals("3"))) {
  261. type = true;
  262. }
  263. return type;
  264. }
  265. }