소스 검색

志愿者开始与结束订单时,传入经纬度,并计算距离且存储

LiRong 3 달 전
부모
커밋
50b573b3fc

+ 21 - 8
leromro-core/src/main/java/com/leromro/core/controller/volunteerOrderController.java

@@ -7,9 +7,11 @@ import com.leromro.common.core.controller.BaseController;
 import com.leromro.common.core.domain.AjaxResult;
 import com.leromro.common.core.domain.R;
 import com.leromro.common.core.page.TableDataInfo;
+import com.leromro.common.utils.GeoUtils;
 import com.leromro.common.utils.SecurityUtils;
 import com.leromro.core.domain.PlatformFinance;
 import com.leromro.core.domain.SecondOrder;
+import com.leromro.core.domain.dto.VolunteerStartOrderDTO;
 import com.leromro.core.domain.vo.AppSecoundOrderInfoVO;
 import com.leromro.core.domain.vo.VolunteerOrderStatisticsVO;
 import com.leromro.core.domain.vo.VolunteerOrdersVO;
@@ -70,22 +72,33 @@ public class volunteerOrderController extends BaseController {
         return R.ok(webSecondOrderInfo);
     }
 
-    @ApiOperation(value = "志愿者滑动,开始订单", notes = "目前只传secondOrderId(第二版再根据地址判断)")
-    @GetMapping("/getTimesByDate/{secondOrderId}")
-    public AjaxResult volunteerStartWork(@PathVariable Long secondOrderId){
+    @ApiOperation(value = "志愿者滑动,开始订单", notes = "目传secondOrderId,以及当前地址和收货地址的距离")
+    @PostMapping("/volunteerStartSecondOrder")
+    public AjaxResult volunteerStartWork(SecondOrder secondOrder){
         UpdateWrapper<SecondOrder> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.eq("second_order_id",secondOrderId).set("order_status","3").set("update_time", DateTimeUtil.getNowTime()).set("service_start_time",DateTimeUtil.getNowTime());
+        SecondOrder secondOrder1 = secondOrderService.getById(secondOrder.getSecondOrderId());
+        //计算距离:
+        double v;
+        if (secondOrder.getServiceStartLongitude().isEmpty() && secondOrder.getServiceStartLatitude().isEmpty()){
+            throw new RuntimeException("获取您当前位置失败,请保持网络通畅并且打开位置权限后重新开始订单");
+        }else {
+             v = GeoUtils.calculateDistance( Double.parseDouble(secondOrder.getServiceStartLongitude()),
+                     Double.parseDouble(secondOrder.getServiceStartLatitude()),
+                     Double.parseDouble(secondOrder1.getLongitude()),
+                     Double.parseDouble(secondOrder1.getLatitude()));
+        }
+        updateWrapper.eq("second_order_id",secondOrder.getSecondOrderId()).set("order_status","3").set("update_time", DateTimeUtil.getNowTime())
+                .set("service_start_time",DateTimeUtil.getNowTime()).set("start_service_distance",v).set("service_start_longitude",secondOrder.getServiceStartLongitude()).set("service_start_latitude",secondOrder.getServiceStartLatitude());
         secondOrderService.update(updateWrapper);
         //订单开始 根据secondOrderId修改主订单状态 修改为3
-        mainOrderService.startService(secondOrderId);
+        mainOrderService.startService(secondOrder.getSecondOrderId());
         // 通过websocket向客户发送消息,提示服务已开始
-
         return AjaxResult.success();
     }
 
-    @ApiOperation(value = "志愿者滑动,结束订单并上传图片", notes = "传入seconderOrderId,以及图片拼接在一起的字符串 json对象参数")
+    @ApiOperation(value = "志愿者滑动,结束订单并上传图片", notes = "传入seconderOrderId,以及图片拼接在一起的字符串 普通参数")
     @PostMapping("/volunteerFinishSecondOrder")
-    public AjaxResult volunteerFinishWork(@RequestBody SecondOrder secondOrder){
+    public AjaxResult volunteerFinishWork(SecondOrder secondOrder){
         return  secondOrderService.volunteerFinishWork(secondOrder);
     }
 

+ 26 - 0
leromro-core/src/main/java/com/leromro/core/domain/SecondOrder.java

@@ -8,6 +8,7 @@ import java.util.Date;
 
 import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.leromro.common.annotation.Sensitive;
 import io.swagger.annotations.ApiOperation;
@@ -46,6 +47,7 @@ public class SecondOrder extends BaseEntity
     /** 主键 小订单表id */
     @Excel(name = "小订单id")
     @ApiModelProperty("主键 小订单表id")
+    @TableId
     private Long secondOrderId;
 
     /** 订单id */
@@ -221,6 +223,30 @@ public class SecondOrder extends BaseEntity
     @ApiModelProperty("纬度")
     private String latitude;
 
+    @TableField("service_start_longitude")
+    @ApiModelProperty("服务开始时志愿者经度")
+    private String serviceStartLongitude;
+
+    @TableField("service_start_latitude")
+    @ApiModelProperty("服务开始时志愿者纬度")
+    private String serviceStartLatitude;
+
+    @TableField("start_service_distance")
+    @ApiModelProperty("开始订单时,志愿者与收货地址的距离")
+    private String startServiceDistance;
+
+    @TableField("service_finish_longitude")
+    @ApiModelProperty("服务结束时志愿者经度")
+    private String serviceFinishLongitude;
+
+    @TableField("service_finish_latitude")
+    @ApiModelProperty("服务结束时志愿者纬度")
+    private String serviceFinishLatitude;
+
+    @TableField("finish_service_distance")
+    @ApiModelProperty("结束订单时,志愿者与收货地址的距离")
+    private String finishServiceDistance;
+
     @TableField("out_trade_no")
     @ApiModelProperty("业务单号")
     private String outTradeNo;

+ 13 - 0
leromro-core/src/main/java/com/leromro/core/domain/dto/VolunteerStartOrderDTO.java

@@ -0,0 +1,13 @@
+package com.leromro.core.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class VolunteerStartOrderDTO {
+    //小订单id
+    private Long secondOrderId;
+    //志愿者当前经度
+    private String volunteerLongitude;
+    //志愿者当前纬度
+    private String volunteerLatitude;
+}

+ 6 - 4
leromro-core/src/main/java/com/leromro/core/service/impl/SecondOrdersServiceImpl.java

@@ -13,6 +13,7 @@ import com.leromro.common.core.domain.ListPermission;
 import com.leromro.common.enums.AreaSettlementStatusEnum;
 import com.leromro.common.enums.ServiceCentreSettlementStatusEnum;
 import com.leromro.common.utils.DateUtils;
+import com.leromro.common.utils.GeoUtils;
 import com.leromro.common.utils.PageUtils;
 import com.leromro.common.utils.SecurityUtils;
 import com.leromro.core.domain.*;
@@ -61,9 +62,7 @@ public class SecondOrdersServiceImpl extends ServiceImpl<SecondOrdersMapper, Sec
     public AjaxResult volunteerFinishWork(SecondOrder secondOrder) {
         secondOrder.setVolunteerId(SecurityUtils.getUserId());
         Long secondOrderId = secondOrder.getSecondOrderId();
-        QueryWrapper<SecondOrder> SecondOrderWrapper = new QueryWrapper<SecondOrder>().eq("second_order_id", secondOrderId);
-        SecondOrder secondOrderInfo = secondOrdersMapper.selectList(SecondOrderWrapper).get(0);
-       // SecondOrder secondOrderInfo = secondOrdersMapper.selectById(secondOrderId);
+        SecondOrder secondOrderInfo = secondOrdersMapper.selectById(secondOrderId);
         //BigDecimal onePrice = secondOrderInfo.getServiceOnePrice();
         BigDecimal oneServiceTotalPrice = secondOrderInfo.getServiceTotalPrice();
         //默认平台佣金以及志愿者到手钱数
@@ -83,9 +82,12 @@ public class SecondOrdersServiceImpl extends ServiceImpl<SecondOrdersMapper, Sec
         if (secondOrderInfo.getOrderStatus().equals("4")){
             throw new RuntimeException("订单已完成,请勿重复完成");
         }
+        //计算订单结束时候的距离
+        double v = GeoUtils.calculateDistance(Double.parseDouble(secondOrderInfo.getLongitude()), Double.parseDouble(secondOrderInfo.getLatitude()), Double.parseDouble(secondOrder.getServiceFinishLongitude()), Double.parseDouble(secondOrder.getServiceFinishLatitude()));
         UpdateWrapper<SecondOrder> updateWrapper = new UpdateWrapper<>();
         updateWrapper.eq("second_order_id",secondOrder.getSecondOrderId()).set("order_status",4)
-                .set("volunteer_review",secondOrder.getVolunteerReview()).set("volunteer_picture",secondOrder.getVolunteerPicture()).set("update_time",DateTimeUtil.getNowTime()).set("service_end_time",DateTimeUtil.getNowTime());
+                .set("volunteer_review",secondOrder.getVolunteerReview()).set("volunteer_picture",secondOrder.getVolunteerPicture())
+                .set("update_time",DateTimeUtil.getNowTime()).set("service_end_time",DateTimeUtil.getNowTime()).set("finish_service_distance",v).set("service_finish_longitude",secondOrder.getServiceFinishLongitude()).set("service_finish_latitude",secondOrder.getServiceFinishLatitude());
         secondOrdersMapper.update(null,updateWrapper);
         //更新志愿者账户中的冻结资金 =  之前的余额 + 志愿者 (先按照默认的比例,把默认的钱数,放入冻结资金表中)
         QueryWrapper<VolunteerAccount> queryWrapper = new QueryWrapper<>();

+ 0 - 1
leromro-core/src/main/java/com/leromro/core/ttl/Monitor.java

@@ -3,7 +3,6 @@ package com.leromro.core.ttl;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.leromro.common.enums.UserPointChangeTypeEnum;
 import com.leromro.core.domain.*;

+ 11 - 1
leromro-core/src/main/resources/mapper/core/SecondOrdersMapper.xml

@@ -39,6 +39,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         address,
         latitude,
         longitude,
+        startServiceDistance,
+        finishServiceDistance,
         area_distribution_ratio,
         area_distribution_id,
         area_settlement_status,
@@ -83,6 +85,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 #{secondOrder.address},
                 #{secondOrder.latitude},
                 #{secondOrder.longitude},
+                #{secondOrder.startServiceDistance},
+                #{secondOrder.finishServiceDistance},
                 #{secondOrder.areaDistributionRatio},
                 #{secondOrder.areaDistributionId},
                 #{secondOrder.areaSettlementStatus},
@@ -278,8 +282,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         lso.address,
         lso.latitude,
         lso.longitude,
+        lso.startServiceDistance,
+        lso.finishServiceDistance,
         lso.service_start_time,
         lso.service_end_time,
+        lso.service_start_longitude,
+        lso.service_start_latitude,
+        lso.service_finish_longitude,
+        lso.service_finish_latitude,
         lmo.user_id,
         lmo.address         as address,
         lmo.client_name       as name,
@@ -455,7 +465,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select
             lso.second_order_id,lso.score,lso.service_total_price,lso.order_status,lso.volunteer_settlement_status,lso.address,
             lso.volunteer_review,lso.volunteer_picture,lso.service_category,lso.user_review,lso.user_picture,
-            lso.ability_score,lso.clothing_score,lso.protocol_score,lso.quality_score,lso.province_code,lso.province_name,lso.city_name,lso.city_code,lso.service_start_time,lso.service_end_time,
+            lso.ability_score,lso.clothing_score,lso.protocol_score,lso.quality_score,lso.province_code,lso.province_name,lso.city_name,lso.city_code,lso.service_start_time,lso.service_end_time,lso.start_service_distance,lso.finish_service_distance,
             lso.work_date,lso.work_start_time,lso.single_quantity,lso.work_number,lso.out_trade_no as secondOutTradeNo,lso.service_duration,
             (select sd.dept_name from sys_dept sd where lso.area_distribution_id = sd.dept_id) as areaDistributionName,
             (select sd.dept_name from sys_dept sd where lso.service_center_id = sd.dept_id) as serviceCenterName

+ 4 - 3
leromro-core/src/main/resources/mapper/core/VolunteerInfoMapper.xml

@@ -58,16 +58,17 @@
         where app_status = 2
         and lvi.business_management_id in (select lbm.business_management_id from l_business_management lbm
             where find_in_set(#{info.businessManagementId},lbm.ancestors) or lbm.business_management_id = #{info.businessManagementId})
-
         <if test="info.name != null  and info.name != ''"> and lvi.name like concat('%', #{info.name}, '%')</if>
         <if test="info.score != null "> and lvi.score = #{info.score}</if>
         <if test="info.serviceCategory != null and info.serviceCategory != ''"> and lvi.service_category = #{info.serviceCategory}</if>
         <if test="info.skillDescribe != null  and info.skillDescribe != ''"> and lvi.skill_describe = #{info.skillDescribe}</if>
         <if test="info.city != null  and info.city != ''"> and lvi.city = #{info.city}</if>
         <if test="info.address != null  and info.address != ''"> and lvi.address = #{info.address}</if>
-
-
+        <if test="info.provinceCode != null and info.provinceCode != ''">and lvi.province_code = #{info.provinceCode}</if>
+        <if test="info.cityCode != null and info.cityCode != ''">and lvi.city_code = #{info.cityCode}</if>
+        <if test="info.districtCode != null and info.districtCode != ''">and lvi.district_code = #{info.districtCode}</if>
     </select>
+
     <select id="getCurrentOrgVolunteerList" resultType="com.leromro.core.domain.VolunteerInfo">
         select * from l_volunteer_info
         where app_status = 2