From b5893f1bb3ce307ac1133138cb085d361cb2394b Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 22 五月 2023 23:56:42 +0800
Subject: [PATCH] 新增订单添加功能

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java |   87 +++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 83 insertions(+), 4 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
index dd68d6a..f86cfce 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -1,11 +1,16 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.controller.resp.DataStatisticsOrderYearResp;
 import com.stylefeng.guns.modular.system.controller.resp.PerformanceTableResp;
 import com.stylefeng.guns.modular.system.controller.resp.TOrderResp;
 import com.stylefeng.guns.modular.system.controller.resp.TOrderServerResp;
+import com.stylefeng.guns.modular.system.controller.util.UUIDUtil;
 import com.stylefeng.guns.modular.system.dao.TAppUserMapper;
 import com.stylefeng.guns.modular.system.dao.TBranchOfficeMapper;
 import com.stylefeng.guns.modular.system.dao.TDriverMapper;
@@ -15,14 +20,17 @@
 import com.stylefeng.guns.modular.system.model.TBranchOffice;
 import com.stylefeng.guns.modular.system.model.TDriver;
 import com.stylefeng.guns.modular.system.model.TOrder;
+import com.stylefeng.guns.modular.system.service.ITAppUserService;
 import com.stylefeng.guns.modular.system.service.ITOrderService;
 import com.stylefeng.guns.modular.system.util.DateUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.Model;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -39,14 +47,20 @@
 @Service
 public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements ITOrderService {
 
-    @Autowired
+    @Resource
     private TOrderMapper tOrderMapper;
-    @Autowired
+
+    @Resource
     private TAppUserMapper tAppUserMapper;
-    @Autowired
+
+    @Resource
     private TDriverMapper tDriverMapper;
-    @Autowired
+
+    @Resource
     private TBranchOfficeMapper tBranchOfficeMapper;
+
+    @Autowired
+    private ITAppUserService appUserService;
 
     @Override
     public List<TOrderResp> getOrderList(String createTime, String code, Integer source, String userName, String userPhone, Integer state, String driverName,Integer isException) {
@@ -351,4 +365,69 @@
         // 查询司机当月有效订单数量
         return tOrderMapper.getValidOrderCount(driverId,orderMoney,month);
     }
+
+
+    @Override
+    public ResultUtil add(TOrder tOrder) {
+        String startAddress = tOrder.getStartAddress();
+        String endAddress = tOrder.getEndAddress();
+        String userPhone = tOrder.getUserPhone();
+        int count = this.selectCount(new EntityWrapper<TOrder>().eq("userPhone", userPhone).eq("status", 1).in("state", Arrays.asList(101, 102, 103, 104, 105, 106, 201)));
+        if(count > 0){
+            return ResultUtil.error("该用户还有未完成的订单", "");
+        }
+        TAppUser tAppUser = appUserService.selectOne(new EntityWrapper<TAppUser>().eq("phone", userPhone).eq("status", 1));
+        if(null != tAppUser){
+            tOrder.setUserId(tAppUser.getId());
+        }
+        JSONObject jsonObject = JSON.parseObject(startAddress);
+        tOrder.setStartAddress(jsonObject.getString("address"));
+        tOrder.setStartLat(jsonObject.getString("lat"));
+        tOrder.setStartLng(jsonObject.getString("lon"));
+        tOrder.setSource(3);
+        if(ToolUtil.isNotEmpty(endAddress)){
+            jsonObject = JSON.parseObject(endAddress);
+            tOrder.setEndAddress(jsonObject.getString("address"));
+            tOrder.setEndLat(jsonObject.getString("lat"));
+            tOrder.setEndLng(jsonObject.getString("lon"));
+        }
+        tOrder.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(3));
+        Double d = 0D;
+        if(ToolUtil.isNotEmpty(endAddress)){
+            Map<String, String> distance = MapUtil.getDistance(tOrder.getStartLng() + "," + tOrder.getStartLat(), tOrder.getEndLng() + "," + tOrder.getEndLat(), 1);
+            if(null == distance){
+                return ResultUtil.error("获取预估距离出错", "");
+            }
+            d = Double.valueOf(distance.get("distance")) / 1000;
+            order.setEstimatedMileage(d);
+            order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
+        }
+        String city = "";
+        District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
+        if(null != geocode){
+            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
+                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
+            city = null != weatherCity ? weatherCity.getId().toString() : "";
+        }
+        order = getOrderPrice(1, d, 0, order, city);
+        order.setState(null == order.getDriverId() ? 101 : 102);
+        order.setStatus(1);
+        order.setCreateTime(new Date());
+        this.insert(order);
+        driverService.updateById(driver);
+        //推送状态
+        if(null != order.getDriverId()){
+            pushUtil.pushOrderStatus(uid, 2, order.getId(), order.getStatus());
+        }else{
+            //开始推单
+            Order finalOrder = order;
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    pushOrder(finalOrder);
+                }
+            }).start();
+        }
+        return ResultUtil.success(order.getState() == 102 ? order.getId() : null);
+    }
 }

--
Gitblit v1.7.1