RiderPositionController.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.ruoyi.app.user;
  2. import java.util.List;
  3. import java.util.Objects;
  4. import java.util.Date;
  5. import jakarta.servlet.http.HttpServletResponse;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.alibaba.fastjson2.JSON;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.ruoyi.common.annotation.Anonymous;
  10. import com.ruoyi.common.annotation.RepeatSubmit;
  11. import com.ruoyi.system.domain.InfoUser;
  12. import com.ruoyi.system.domain.VipUser;
  13. import com.ruoyi.system.service.IInfoUserService;
  14. import com.ruoyi.system.utils.Auth;
  15. import com.ruoyi.system.utils.JwtUtil;
  16. import org.springframework.security.access.prepost.PreAuthorize;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.dao.DuplicateKeyException;
  19. import org.springframework.web.bind.annotation.*;
  20. import com.ruoyi.common.annotation.Log;
  21. import com.ruoyi.common.core.controller.BaseController;
  22. import com.ruoyi.common.core.domain.AjaxResult;
  23. import com.ruoyi.common.enums.BusinessType;
  24. import com.ruoyi.system.domain.RiderPosition;
  25. import com.ruoyi.system.service.IRiderPositionService;
  26. import com.ruoyi.common.utils.MessageUtils;
  27. import com.ruoyi.common.utils.poi.ExcelUtil;
  28. import com.ruoyi.common.core.page.TableDataInfo;
  29. /**
  30. * RiderPositionController
  31. *
  32. * @author ruoyi
  33. * @date 2023-07-31
  34. */
  35. @RestController
  36. @RequestMapping("/system/position")
  37. public class RiderPositionController extends BaseController
  38. {
  39. @Autowired
  40. private IRiderPositionService riderPositionService;
  41. @Autowired
  42. private IInfoUserService infoUserService;
  43. /**
  44. * 更新验手位置
  45. * @param token
  46. * @param riderPosition
  47. * @return
  48. */
  49. @Anonymous
  50. @Auth
  51. @RepeatSubmit(interval = 1000, message = "请求过于频繁")
  52. @PostMapping("/setRiderposition")
  53. public AjaxResult setRiderposition(@RequestHeader String token, @RequestBody RiderPosition riderPosition) {
  54. JwtUtil jwtUtil = new JwtUtil();
  55. String id = jwtUtil.getusid(token);
  56. System.out.println("setRiderposition更新定位,用户id"+id);
  57. logger.info("setRiderposition更新定位,用户id"+id);
  58. InfoUser user = infoUserService.getById(id);
  59. QueryWrapper<RiderPosition> queryWrapper= new QueryWrapper<>();
  60. queryWrapper.eq("rider_id",id);
  61. // 骑手定位一人一条:历史重复行取第一条继续更新,不再抛 selectOne 多行异常
  62. RiderPosition position = riderPositionService.getOne(queryWrapper, false);
  63. RiderPosition rider = new RiderPosition();
  64. if(position==null){
  65. rider.setRiderId(Long.valueOf(id));
  66. rider.setLatitude(riderPosition.getLatitude());
  67. rider.setLongitude(riderPosition.getLongitude());
  68. rider.setReportedAt(new Date());
  69. if(user.getCid()!=null && !Objects.equals(user.getCid(), "")){
  70. rider.setCid(user.getCid());
  71. }
  72. System.out.println("setRiderposition更新定位,用户id,新增信息:"+ JSON.toJSONString( rider));
  73. logger.info("setRiderposition更新定位,用户id,新增信息:"+ JSON.toJSONString( rider));
  74. Boolean org;
  75. try {
  76. org = riderPositionService.saveOrUpdate(rider);
  77. } catch (DuplicateKeyException e) {
  78. // 并发上传同时查空双双插入,撞 rider_id 唯一索引时转按骑手更新已有记录
  79. logger.info("setRiderposition并发插入撞唯一索引转更新,用户id"+id);
  80. org = riderPositionService.update(rider, queryWrapper);
  81. }
  82. if(org){
  83. return success();
  84. }else {
  85. return error();
  86. }
  87. }else {
  88. rider.setId(position.getId());
  89. rider.setRiderId(Long.valueOf(id));
  90. rider.setLatitude(riderPosition.getLatitude());
  91. rider.setLongitude(riderPosition.getLongitude());
  92. rider.setReportedAt(new Date());
  93. if(user.getCid()!=null && !Objects.equals(user.getCid(), "")){
  94. rider.setCid(user.getCid());
  95. }
  96. System.out.println("setRiderposition更新定位,用户id,修改信息:"+ JSON.toJSONString( rider));
  97. logger.info("setRiderposition更新定位,用户id,修改信息:"+ JSON.toJSONString( rider));
  98. Boolean org = riderPositionService.saveOrUpdate(rider);
  99. if(org){
  100. return success();
  101. }else {
  102. return error();
  103. }
  104. }
  105. }
  106. /**
  107. * 通过骑手用户id获取骑手经纬度
  108. *
  109. * @param token 登录令牌
  110. * @param riderId 骑手用户id
  111. * @return 骑手定位记录(含 latitude/longitude),骑手尚无定位记录时 data 为 null
  112. */
  113. @Anonymous
  114. @Auth
  115. @GetMapping("/getRiderposition")
  116. public AjaxResult getRiderposition(@RequestHeader String token, @RequestParam Long riderId) {
  117. QueryWrapper<RiderPosition> queryWrapper = new QueryWrapper<>();
  118. queryWrapper.eq("rider_id", riderId);
  119. // 一人一条:历史重复行取第一条,不抛 selectOne 多行异常
  120. RiderPosition position = riderPositionService.getOne(queryWrapper, false);
  121. return success(position);
  122. }
  123. /**
  124. * 查询RiderPosition列表
  125. */
  126. @PreAuthorize("@ss.hasPermi('system:position:list')")
  127. @GetMapping("/list")
  128. public TableDataInfo list(RiderPosition riderPosition)
  129. {
  130. startPage();
  131. List<RiderPosition> list = riderPositionService.selectRiderPositionList(riderPosition);
  132. return getDataTable(list);
  133. }
  134. /**
  135. * 导出RiderPosition列表
  136. */
  137. @PreAuthorize("@ss.hasPermi('system:position:export')")
  138. @Log(title = "RiderPosition", businessType = BusinessType.EXPORT)
  139. @PostMapping("/export")
  140. public void export(HttpServletResponse response, RiderPosition riderPosition)
  141. {
  142. List<RiderPosition> list = riderPositionService.selectRiderPositionList(riderPosition);
  143. ExcelUtil<RiderPosition> util = new ExcelUtil<RiderPosition>(RiderPosition.class);
  144. util.exportExcel(response, list, MessageUtils.message("no.export.excel.riderposition"));
  145. }
  146. /**
  147. * 获取RiderPosition详细信息
  148. */
  149. @PreAuthorize("@ss.hasPermi('system:position:query')")
  150. @GetMapping(value = "/{id}")
  151. public AjaxResult getInfo(@PathVariable("id") Long id)
  152. {
  153. return success(riderPositionService.selectRiderPositionById(id));
  154. }
  155. /**
  156. * 新增RiderPosition
  157. */
  158. @PreAuthorize("@ss.hasPermi('system:position:add')")
  159. @Log(title = "RiderPosition", businessType = BusinessType.INSERT)
  160. @PostMapping
  161. public AjaxResult add(@RequestBody RiderPosition riderPosition)
  162. {
  163. return toAjax(riderPositionService.insertRiderPosition(riderPosition));
  164. }
  165. /**
  166. * 修改RiderPosition
  167. */
  168. @PreAuthorize("@ss.hasPermi('system:position:edit')")
  169. @Log(title = "RiderPosition", businessType = BusinessType.UPDATE)
  170. @PutMapping
  171. public AjaxResult edit(@RequestBody RiderPosition riderPosition)
  172. {
  173. return toAjax(riderPositionService.updateRiderPosition(riderPosition));
  174. }
  175. /**
  176. * 删除RiderPosition
  177. */
  178. @PreAuthorize("@ss.hasPermi('system:position:remove')")
  179. @Log(title = "RiderPosition", businessType = BusinessType.DELETE)
  180. @DeleteMapping("/{ids}")
  181. public AjaxResult remove(@PathVariable Long[] ids)
  182. {
  183. return toAjax(riderPositionService.deleteRiderPositionByIds(ids));
  184. }
  185. }