package com.bofeng.service; import com.baomidou.mybatisplus.toolkit.IdWorker; import com.bofeng.dao.*; import com.bofeng.entity.*; import lombok.SneakyThrows; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @Service @Transactional(readOnly = true) public class ScanService { @Autowired private OutScanMapper outScanMapper; @Autowired private OutScanEstateMapper outScanEstateMapper; @Autowired private UserOpenMapper userOpenMapper; @Autowired private OutUserMapper outUserMapper; @Autowired private MsReportMapper msReportMapper; @Autowired private ReturnWorkLyMapper returnWorkLyMapper; @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void saveOutScan(Long userId, Integer inType, String coord, String address, Long uptownId, Long doorId, Integer status, String errorInfo) { String longitude = ""; String latitude = ""; if (!"".equals(coord)) { String[] coor = coord.split(","); longitude = coor[0]; latitude = coor[1]; } OutScan outScan = new OutScan(); outScan.setScanId(IdWorker.getId()); outScan.setUserId(userId); outScan.setUptownId(uptownId); outScan.setDoorId(doorId); outScan.setInType(inType); outScan.setDayDate(new Date()); outScan.setDate(new DateTime()); outScan.setLongitude(longitude); outScan.setLatitude(latitude); outScan.setAddress(address); outScan.setGoStatus(status); outScan.setErrorInfo(errorInfo); outScan.setUserCreate(userId); outScan.setUserUpdate(userId); outScanMapper.insert(outScan); } @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void saveOutScanEstate(Long userId, Integer status, String errorInfo) { OutScanEstate o = new OutScanEstate(); o.setSeId(IdWorker.getId()); o.setUserId(userId); o.setDayDate(new Date()); o.setScanDate(new DateTime()); o.setGoStatus(status); o.setErrorInfo(errorInfo); o.setUserCreate(userId); o.setUserUpdate(userId); outScanEstateMapper.insert(o); } /** * 根据经纬度查询距离 * * @param longitudeFrom * @param latitudeFrom * @param longitudeTo * @param latitudeTo * @return */ public double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) { GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom); GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo); return new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target).getEllipsoidalDistance(); } /** * 复工导出 * @param unitId */ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void returnWorkLY(Long unitId) { new Runnable() { @SneakyThrows @Override public void run() { returnWorkLyMapper.deleteReturnWork(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); List opens = userOpenMapper.getUsersByunitId(1238790987234L, unitId); ReturnWorkLy r = new ReturnWorkLy(); for (int i = 0; i < opens.size(); i++) { OutUser outUser1 = outUserMapper.getOutUserByPhone(4, opens.get(i).getLinkman(), Long.parseLong(opens.get(i).getPhone())); if (outUser1 != null) { continue; } OutUser outUser = outUserMapper.getOutUserByPhone(1, opens.get(i).getLinkman(), Long.parseLong(opens.get(i).getPhone())); if (outUser != null) { r.setRwId(IdWorker.getId()); r.setUserId(opens.get(i).getUserId()); r.setTimeCreate(new DateTime()); returnWorkLyMapper.insert(r); continue; } Boolean ly2 = false; String startDate = ""; int intSize = 3; OutUser outUser2 = outUserMapper.getOutUserByPhoneNotTime(5, opens.get(i).getLinkman(), Long.parseLong(opens.get(i).getPhone())); if (outUser2 != null) { ly2 = true; startDate = s.format(outUser2.getStartDate()); Long day = (new Date().getTime() - outUser2.getStartDate().getTime()) / (1000 * 60 * 60 * 24) -1; intSize = Integer.parseInt(Long.toString(day)) < 3 ? Integer.parseInt(Long.toString(day)) : 3; } MsReport msReport = msReportMapper.queryMsReportIsXG(opens.get(i).getUserId()); if (msReport != null) { if (ly2 && outUser2.getStartDate().getTime() < msReport.getReportDate().getTime()) { continue; } else if (!ly2) { continue; } } List msReportList = msReportMapper.queryMsReportIsXGHome(opens.get(i).getUserId()); if (msReportList.size() > 0) { if (ly2 && outUser2.getStartDate().getTime() < msReportList.get(0).getReportDate().getTime()) { continue; } else if (!ly2) { continue; } } List msReports = msReportMapper.selectMsReportLate(opens.get(i).getUserId(), startDate); if (msReports.size() < intSize) { continue; } List msReports2 = msReportMapper.selectMsReportThereError(opens.get(i).getUserId(), startDate); if (msReports2.size() > 0) { continue; } List msReports3 = msReportMapper.selectMsReportThereErrorFamily(opens.get(i).getUserId(), startDate); if (msReports3.size() > 0) { continue; } // MsTripDet work = msReportMapper.returnWork(opens.get(i).getUserId()); // if (work != null) { // if (ly2 && outUser2.getStartDate().getTime() < s.parse(work.getReturnWork()).getTime()) { // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) { // continue; // } // } else if (!ly2) { // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) { // continue; // } // } // } // MsReport msReport1 = msReportMapper.msAddr(opens.get(i).getUserId()); // if (msReport1 != null &&msReport1.getWorkMsg() != null &&msReport1.getTodayMsg() != null && !msReport1.getWorkMsg().equals(msReport1.getTodayMsg()) && !compareWhere(msReport1.getWorkMsg(), msReport1.getTodayMsg())) { // continue; // } r.setRwId(IdWorker.getId()); r.setUserId(opens.get(i).getUserId()); r.setTimeCreate(new DateTime()); returnWorkLyMapper.insert(r); } } }.run(); } /** * 页面复工检索 */ public int returnWorkLYlist(Long userId, String linkman, String phone, String workAddr) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); OutUser outUser1 = outUserMapper.getOutUserByPhone(4, linkman, Long.parseLong(phone)); if (outUser1 != null) { return 0; } OutUser outUser = outUserMapper.getOutUserByPhone(1, linkman, Long.parseLong(phone)); if (outUser != null) { // 六类 return 1; } Boolean ly2 = false; String startDate = ""; int intSize = 3; OutUser outUser2 = outUserMapper.getOutUserByPhoneNotTime(5, linkman, Long.parseLong(phone)); if (outUser2 != null) { ly2 = true; startDate = s.format(outUser2.getStartDate()); Long day = (new Date().getTime() - outUser2.getStartDate().getTime()) / (1000 * 60 * 60 * 24) -1; intSize = Integer.parseInt(Long.toString(day)) < 3 ? Integer.parseInt(Long.toString(day)) : 3; } MsReport msReport = msReportMapper.queryMsReportIsXG(userId); if (msReport != null) { if (ly2 && outUser2.getStartDate().getTime() < msReport.getReportDate().getTime()) { return 0; } else if (!ly2) { return 0; } } List msReportList = msReportMapper.queryMsReportIsXGHome(userId); if (msReportList.size() > 0) { if (ly2 && outUser2.getStartDate().getTime() < msReportList.get(0).getReportDate().getTime()) { return 0; } else if (!ly2) { return 0; } } List msReports = msReportMapper.selectMsReportLate(userId, startDate); if (msReports.size() < intSize) { return 0; } List msReports2 = msReportMapper.selectMsReportThereError(userId, startDate); if (msReports2.size() > 0) { return 0; } List msReports3 = msReportMapper.selectMsReportThereErrorFamily(userId, startDate); if (msReports3.size() > 0) { return 0; } List msReports4 = msReportMapper.selectMsReportThirtyError(userId); if (msReports4.size() > 0) { return 0; } MsReport msReport1 = msReportMapper.msAddr(userId); if (msReport1 != null && !msReport1.getAutoLocal().equals(workAddr)) { return 0; } // MsTripDet work = msReportMapper.returnWork(userId); // if (work != null) { // if (ly2 && outUser2.getStartDate().getTime() < s.parse(work.getReturnWork()).getTime()) { // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) { // return 0; // } // } else if (!ly2) { // if (sdf.parse(work.getReturnWork() + " 00:00:00").getTime() + 1000L * 3600 * 24 * 15 > sdf.parse(s.format(new Date()) + " 00:00:00").getTime()) { // return 0; // } // } // } // MsReport msReport1 = msReportMapper.msAddr(userId); // if (msReport1 != null &&msReport1.getWorkMsg() != null &&msReport1.getTodayMsg() != null && !msReport1.getWorkMsg().equals(msReport1.getTodayMsg()) && !compareWhere(msReport1.getWorkMsg(), msReport1.getTodayMsg())) { // return 0; // } return 1; } /** * 比较出发地和目地地是否一样, 一样返回true,不一样返回false */ public Boolean compareWhere(String str1, String str2) { Boolean type = false; if ((str1.equals("2") || str1.equals("3")) && (str2.equals("2") || str2.equals("3"))) { type = true; } return type; } }