package org.springblade.modules.location.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.modules.FTP.FtpUtil; import org.springblade.modules.location.entity.LiveLocation; import org.springblade.modules.location.entity.Locus; import org.springblade.modules.location.service.LiveLocationService; import org.springblade.modules.location.service.LocusService; import org.springblade.modules.location.vo.LiveLocationVOTest; import org.springblade.modules.location.vo.LiveLocationVo; import org.springblade.modules.location.vo.LocusVo; import org.springblade.modules.system.service.MyAsyncService; import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * @author zhongrj * @time 2021-07-21 * @desc 实时位置控制层 */ @RestController @AllArgsConstructor @RequestMapping("/liveLocation") public class LiveLocationController { private final LiveLocationService liveLocationService; private final LocusService locusService; private final MyAsyncService myAsyncService; /** * 自定义分页 * * @param query page,size * @param liveLocation 实时位置信息对象 */ @GetMapping("/page") public R> page(LiveLocationVo liveLocation, Query query) { IPage pages = liveLocationService.selectLiveLocationPage(Condition.getPage(query), liveLocation); return R.data(pages); } /** * 新增 * * @param liveLocation 实时位置信息对象 */ @PostMapping("/save") @ApiOperation(value = "新增", notes = "传入liveLocation") public R save(@RequestBody LiveLocation liveLocation) { return R.status(liveLocationService.save(liveLocation)); } /** * 实时位置信息新增,同时新增到轨迹表中 * * @param liveLocation 实时位置信息对象 */ @PostMapping("/saveLiveLocationAndLocus") @ApiOperation(value = "新增", notes = "传入liveLocation") public R saveLiveLocationAndLocus(@RequestBody LiveLocation liveLocation) { //先查询是否已有实时位置信息,如果有,则更新,没有则插入 LiveLocation liveLocationInfo = liveLocationService.getLiveLocationInfo(liveLocation); boolean status = false; if (null == liveLocationInfo) { //新增 liveLocation.setRecordTime(new Date()); status = liveLocationService.save(liveLocation); if (status) { //数据推送 String s1 = "insert into sys_live_location(id,type,worker_id,longitude,latitude,record_time,location) " + "values(" + "'" + liveLocation.getId() + "'" + "," + "'" + liveLocation.getType() + "'" + "," + "'" + liveLocation.getWorkerId() + "'" + "," + "'" + liveLocation.getLongitude() + "'" + "," + "'" + liveLocation.getLatitude() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(liveLocation.getRecordTime()) + "'" + "," + "'" + liveLocation.getLocation() + "'" + ")"; //FtpUtil.sqlFileUpload(s1); myAsyncService.dataSync(s1); } } else { //更新 liveLocationInfo.setRecordTime(new Date()); liveLocationInfo.setLongitude(liveLocation.getLongitude()); liveLocationInfo.setLatitude(liveLocation.getLatitude()); status = liveLocationService.updateById(liveLocationInfo); if (status) { //内网同步 String s1 = "update sys_live_location set type = " + "'" + liveLocation.getType() + "'" + ",worker_id = " + "'" + liveLocation.getWorkerId() + "'" + ",longitude = " + "'" + liveLocation.getLongitude() + "'" + ",latitude = " + "'" + liveLocation.getLatitude() + "'" + ",record_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(liveLocation.getRecordTime()) + "'" + ",location = " + "'" + liveLocation.getLocation() + "'" + " " + "where id = " + "'" + liveLocation.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.dataSync(s1); } } if (status) { //新增轨迹 Locus locus = new Locus(); //封装数据 if (null != liveLocationInfo) { locus.setLiveLocationId(liveLocationInfo.getId()); } else { locus.setLiveLocationId(liveLocation.getId()); } if (null != liveLocation.getLatitude() && null != liveLocation.getLongitude()) { locus.setLatitude(liveLocation.getLatitude()); locus.setLongitude(liveLocation.getLongitude()); } locus.setRecordTime(new Date()); //新增轨迹 boolean save1 = locusService.save(locus); //数据推送 String s2 = "insert into sys_locus(id,live_location_id,record_time,longitude,latitude) " + "values(" + "'" + locus.getId() + "'" + "," + "'" + locus.getLiveLocationId() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(locus.getRecordTime()) + "'" + "," + "'" + locus.getLongitude() + "'" + "," + "'" + locus.getLatitude() + "'" + ")"; //FtpUtil.sqlFileUpload(s2); myAsyncService.dataSync(s2); if (save1) { //返回数据 return R.status(true); } } //返回数据 return R.status(false); } /** * 实时位置信息新增,同时新增到轨迹表中 * * @param locationVOTest 实时位置信息对象 */ @PostMapping("/saveLiveLocationAndLocusAsTest") @ApiOperation(value = "新增", notes = "传入liveLocation") public R saveLiveLocationAndLocusAsTest(@RequestBody LiveLocationVOTest locationVOTest) { //获取数据 LiveLocation liveLocation = new LiveLocation(); liveLocation.setLongitude(locationVOTest.getLongitude().toString()); liveLocation.setLatitude(locationVOTest.getLatitude().toString()); liveLocation.setType(2); liveLocation.setWorkerId("16L"); //先查询是否已有实时位置信息,如果有,则更新,没有则插入 LiveLocation liveLocationInfo = liveLocationService.getLiveLocationInfo(liveLocation); boolean status = false; if (null == liveLocationInfo) { //新增 liveLocation.setRecordTime(new Date()); status = liveLocationService.save(liveLocation); if (status) { //数据推送 String s1 = "insert into sys_live_location(id,type,worker_id,longitude,latitude,record_time,location) " + "values(" + "'" + liveLocation.getId() + "'" + "," + "'" + liveLocation.getType() + "'" + "," + "'" + liveLocation.getWorkerId() + "'" + "," + "'" + liveLocation.getLongitude() + "'" + "," + "'" + liveLocation.getLatitude() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(liveLocation.getRecordTime()) + "'" + "," + "'" + liveLocation.getLocation() + "'" + ")"; //FtpUtil.sqlFileUpload(s1); myAsyncService.dataSync(s1); } } else { //更新 liveLocationInfo.setRecordTime(new Date()); liveLocationInfo.setLongitude(liveLocation.getLongitude()); liveLocationInfo.setLatitude(liveLocation.getLatitude()); status = liveLocationService.updateById(liveLocationInfo); if (status) { //内网同步 String s1 = "update sys_live_location set type = " + "'" + liveLocation.getType() + "'" + ",worker_id = " + "'" + liveLocation.getWorkerId() + "'" + ",longitude = " + "'" + liveLocation.getLongitude() + "'" + ",latitude = " + "'" + liveLocation.getLatitude() + "'" + ",record_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(liveLocation.getRecordTime()) + "'" + ",location = " + "'" + liveLocation.getLocation() + "'" + " " + "where id = " + "'" + liveLocation.getId() + "'"; //FtpUtil.sqlFileUpload(s1); myAsyncService.dataSync(s1); } } if (status) { //新增轨迹 Locus locus = new Locus(); //封装数据 if (null != liveLocationInfo) { locus.setLiveLocationId(liveLocationInfo.getId()); } else { locus.setLiveLocationId(liveLocation.getId()); } if (null != liveLocation.getLatitude() && null != liveLocation.getLongitude()) { locus.setLatitude(liveLocation.getLatitude()); locus.setLongitude(liveLocation.getLongitude()); } locus.setRecordTime(new Date()); //新增轨迹 boolean save1 = locusService.save(locus); //数据推送 String s2 = "insert into sys_locus(id,live_location_id,record_time,longitude,latitude) " + "values(" + "'" + locus.getId() + "'" + "," + "'" + locus.getLiveLocationId() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(locus.getRecordTime()) + "'" + "," + "'" + locus.getLongitude() + "'" + "," + "'" + locus.getLatitude() + "'" + ")"; myAsyncService.dataSync(s2); //FtpUtil.sqlFileUpload(s2); if (save1) { //返回数据 return R.status(true); } } //返回数据 return R.status(false); } /** * 修改 * * @param liveLocation 实时位置信息对象 */ @PostMapping("/update") public R update(@RequestBody LiveLocation liveLocation) { return R.status(liveLocationService.updateById(liveLocation)); } /** * 新增或修改 * * @param liveLocation 实时位置信息对象 */ @PostMapping("/submit") public R submit(@RequestBody LiveLocation liveLocation) { return R.status(liveLocationService.saveOrUpdate(liveLocation)); } /** * 删除 * * @param ids 实时位置信息ids 数组 */ @PostMapping("/remove") public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { return R.status(liveLocationService.removeByIds(Func.toLongList(ids))); } /** * 详情 * * @param liveLocation 实时位置信息对象 */ @GetMapping("/detail") @ApiOperation(value = "详情", notes = "传入liveLocation") public R detail(LiveLocation liveLocation) { LiveLocation detail = liveLocationService.getOne(Condition.getQueryWrapper(liveLocation)); return R.data(detail); } /** * 获取轨迹数据 * * @param liveLocationVo 实时对象信息 * @return */ @GetMapping("/getLocusInfoList") public R> getLocusInfoList(LiveLocationVo liveLocationVo) { return R.data(liveLocationService.getLocusInfoList(liveLocationVo)); } /** * 首页实时定位 * * @return */ @GetMapping("/getLiveLocationVoList") public R> getLiveLocationVoList(LiveLocationVo liveLocationVo) { return R.data(liveLocationService.getLiveLocationVoList(liveLocationVo)); } }