Selaa lähdekoodia

feat:运单新增结算里程字段

wangweiyu 4 vuotta sitten
vanhempi
commit
ecd4dcc92b

+ 123 - 74
src/main/java/com/aoyang/tms/controller/WorkOrderManageController.java

@@ -9,16 +9,11 @@ import com.aoyang.common.result.Result;
 import com.aoyang.tms.common.ErrCodeEnum;
 import com.aoyang.tms.common.WorkOrderEnum;
 import com.aoyang.tms.controller.param.WorkManagePageParam;
+import com.aoyang.tms.controller.vo.AddWorkOrderVO;
 import com.aoyang.tms.controller.vo.TruckOrderManageVO;
 import com.aoyang.tms.controller.vo.TruckOrderStatisticsVO;
-import com.aoyang.tms.entity.Truck;
-import com.aoyang.tms.entity.TruckDriver;
-import com.aoyang.tms.entity.TruckEscort;
-import com.aoyang.tms.entity.WorkOrder;
-import com.aoyang.tms.service.TruckDriverService;
-import com.aoyang.tms.service.TruckEscortService;
-import com.aoyang.tms.service.TruckService;
-import com.aoyang.tms.service.WorkOrderService;
+import com.aoyang.tms.entity.*;
+import com.aoyang.tms.service.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -26,6 +21,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.cloud.netflix.ribbon.apache.HttpClientUtils;
 import org.springframework.web.bind.annotation.*;
 import sun.net.www.http.HttpClient;
@@ -35,6 +31,7 @@ import java.io.UnsupportedEncodingException;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
 
@@ -60,6 +57,8 @@ public class WorkOrderManageController {
     private TruckEscortService truckEscortService;
     @Resource
     private TruckDriverService truckDriverService;
+    @Resource
+    private WorkSpotService workSpotService;
 
     @ApiOperation(value = "获取运力调度列表",notes="")
     @PostMapping("/list")
@@ -79,50 +78,134 @@ public class WorkOrderManageController {
         return new Result<>(workOrderService.getTruckOrderStatistics(orgId));
     }
 
-    @ApiOperation(value = "新增装车派单", notes = "调度员派单操作")
-    @PostMapping("/add_order")
+    @ApiOperation(value = "新增装车派单", notes = "调度员派单操作")
+    @PostMapping("/add_load_order")
     public Result add(@RequestHeader(value = "orgId") Long orgId,
                       @RequestHeader(value = "userId") Long userId,
                       @RequestHeader("userName") String userName,
-                      @RequestBody WorkOrder workOrder) {
-        log.info("运力调度派单,调用/tms/work_order_manage/add_order param:{} ", JSON.toJSONString(workOrder));
-        if (workOrder == null || workOrder.getDeptId() == null || workOrder.getSpotId() == null ||
-                workOrder.getTruckId() == null) {
+                      @RequestBody AddWorkOrderVO orderVO) {
+        log.info("运力调度派单,调用/tms/work_order_manage/add_order param:{} ", JSON.toJSONString(orderVO));
+        if (orderVO == null || orderVO.getShipperId() == null || orderVO.getSpotId() == null ||
+                StringUtils.isBlank(orderVO.getTruckIds())) {
             return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
-        workOrder.setOrderStatus(WorkOrderEnum.TODO.orderStatus());
-        workOrder.setOrgId(orgId);
-        Truck truck = truckService.getById(workOrder.getTruckId());
-        workOrder.setOrgId(truck.getOrgId());
-        workOrder.setOrgName(truck.getOrgName());
-        workOrder.setOrgShortName(truck.getOrgShortName());
-        workOrder.setCarNumber(truck.getCarNumber());
-        workOrder.setTrailerNumber(truck.getTrailerNumber());
-        TruckEscort query = new TruckEscort();
-        query.setTruckId(truck.getTruckId());
-        TruckEscort truckEscort = truckEscortService.findTruckEscort(query);
-        if (truckEscort != null) {
-            workOrder.setEscortId(truckEscort.getEscortId());
-            workOrder.setEscortName(truckEscort.getEscortName());
+        try {
+            userName = URLDecoder.decode(userName, "UTF-8");
+        } catch (UnsupportedEncodingException ignored) {
         }
-        List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(truck.getTruckId());
-        if (truckDrivers != null && truckDrivers.size() > 0) {
-            workOrder.setDriverIdOne(truckDrivers.get(0).getDriverId());
-            workOrder.setDriverNameOne(truckDrivers.get(0).getDriverName());
-            if (truckDrivers.size() > 1) {
-                workOrder.setDriverIdTwo(truckDrivers.get(1).getDriverId());
-                workOrder.setDriverNameOne(truckDrivers.get(1).getDriverName());
+        String ids = orderVO.getTruckIds();
+        String[] truckIds = ids.split(",");
+        List<WorkOrder> workOrders = new ArrayList<>(truckIds.length);
+        for (String truckId : truckIds) {
+            WorkOrder workOrder = new WorkOrder();
+            BeanUtils.copyProperties(orderVO, workOrder);
+            workOrder.setTruckId(Long.parseLong(truckId));
+            workOrder.setType(1);
+            workOrder.setOrderStatus(WorkOrderEnum.TODO.orderStatus());
+            workOrder.setOrgId(orgId);
+            Truck truck = truckService.getById(workOrder.getTruckId());
+            workOrder.setOrgId(truck.getOrgId());
+            workOrder.setOrgName(truck.getOrgName());
+            workOrder.setOrgShortName(truck.getOrgShortName());
+            workOrder.setCarNumber(truck.getCarNumber());
+            workOrder.setTrailerNumber(truck.getTrailerNumber());
+            workOrder.setDeptId(truck.getDeptId());
+            workOrder.setDeptName(truck.getDeptName());
+            TruckEscort query = new TruckEscort();
+            query.setTruckId(truck.getTruckId());
+            TruckEscort truckEscort = truckEscortService.findTruckEscort(query);
+            if (truckEscort != null) {
+                workOrder.setEscortId(truckEscort.getEscortId());
+                workOrder.setEscortName(truckEscort.getEscortName());
+            }
+            List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(truck.getTruckId());
+            if (truckDrivers != null && truckDrivers.size() > 0) {
+                workOrder.setDriverIdOne(truckDrivers.get(0).getDriverId());
+                workOrder.setDriverNameOne(truckDrivers.get(0).getDriverName());
+                if (truckDrivers.size() > 1) {
+                    workOrder.setDriverIdTwo(truckDrivers.get(1).getDriverId());
+                    workOrder.setDriverNameOne(truckDrivers.get(1).getDriverName());
+                }
             }
+            workOrder.setCreater(userId);
+            workOrder.setCreaterName(userName);
+            workOrder.setCreateDate(LocalDateTime.now());
+
+            workOrders.add(workOrder);
+        }
+        Boolean flag = workOrderService.saveBatch(workOrders);
+        return new Result<>(flag);
+    }
+
+    @ApiOperation(value = "新增卸车派单", notes = "调度员派单操作")
+    @PostMapping("/add_unload_order")
+    public Result addUnload(@RequestHeader(value = "orgId") Long orgId,
+                            @RequestHeader(value = "userId") Long userId,
+                            @RequestHeader("userName") String userName,
+                            @RequestBody AddWorkOrderVO orderVO) {
+        log.info("运力调度派单,调用/tms/work_order_manage/add_unload_order param:{} ", JSON.toJSONString(orderVO));
+        if (orderVO == null || orderVO.getShipperId() == null || orderVO.getSpotId() == null ||
+                orderVO.getTruckIds() == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
-        // 创建者信息
         try {
             userName = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
-        workOrder.setCreater(userId);
-        workOrder.setCreaterName(userName);
-        workOrder.setCreateDate(LocalDateTime.now());
-        Boolean flag = workOrderService.save(workOrder);
+        String ids = orderVO.getTruckIds();
+        String[] truckIds = ids.split(",");
+        List<WorkOrder> workOrders = new ArrayList<>(truckIds.length);
+        for (String truckId : truckIds) {
+            WorkOrder workOrder = new WorkOrder();
+            BeanUtils.copyProperties(orderVO, workOrder);
+            workOrder.setTruckId(Long.parseLong(truckId));
+            workOrder.setType(2);
+            workOrder.setOrderStatus(WorkOrderEnum.TODO.orderStatus());
+            workOrder.setOrgId(orgId);
+            Truck truck = truckService.getById(workOrder.getTruckId());
+            workOrder.setOrgId(truck.getOrgId());
+            workOrder.setOrgName(truck.getOrgName());
+            workOrder.setOrgShortName(truck.getOrgShortName());
+            workOrder.setCarNumber(truck.getCarNumber());
+            workOrder.setTrailerNumber(truck.getTrailerNumber());
+            workOrder.setDeptId(truck.getDeptId());
+            workOrder.setDeptName(truck.getDeptName());
+            TruckEscort query = new TruckEscort();
+            query.setTruckId(truck.getTruckId());
+            TruckEscort truckEscort = truckEscortService.findTruckEscort(query);
+            if (truckEscort != null) {
+                workOrder.setEscortId(truckEscort.getEscortId());
+                workOrder.setEscortName(truckEscort.getEscortName());
+            }
+            List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(truck.getTruckId());
+            if (truckDrivers != null && truckDrivers.size() > 0) {
+                workOrder.setDriverIdOne(truckDrivers.get(0).getDriverId());
+                workOrder.setDriverNameOne(truckDrivers.get(0).getDriverName());
+                if (truckDrivers.size() > 1) {
+                    workOrder.setDriverIdTwo(truckDrivers.get(1).getDriverId());
+                    workOrder.setDriverNameOne(truckDrivers.get(1).getDriverName());
+                }
+            }
+            workOrder.setCreater(userId);
+            workOrder.setCreaterName(userName);
+            workOrder.setCreateDate(LocalDateTime.now());
+
+            workOrders.add(workOrder);
+        }
+        Boolean flag = workOrderService.saveBatch(workOrders);
+
+        // 保存卸车点
+        WorkSpot workSpot = new WorkSpot();
+        workSpot.setOrgId(orgId);
+        workSpot.setType(2);
+        workSpot.setSpotName(orderVO.getSpotName());
+        workSpot.setContactName(orderVO.getContactName());
+        workSpot.setContactPhone(orderVO.getContactPhone());
+        workSpot.setCreater(userId);
+        workSpot.setCreaterName(userName);
+        workSpot.setCreateDate(LocalDateTime.now());
+        flag = workSpotService.save(workSpot);
+
         return new Result<>(flag);
     }
 
@@ -140,38 +223,4 @@ public class WorkOrderManageController {
 //        return new Result<>(flag);
 //    }
 
-    public static String getProvince(String log, String lat){
-        //lat 小  log 大
-        //参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
-        String urlString = "http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+log+"&type=010";
-        String res = "";
-        try {
-            URL url = new URL(urlString);
-            java.net.HttpURLConnection conn = (java.net.HttpURLConnection)url.openConnection();
-            conn.setDoOutput(true);
-            conn.setRequestMethod("POST");
-            java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));
-            String line;
-            while ((line = in.readLine()) != null) {
-                res += line+"\n";
-            }
-            in.close();
-        } catch (Exception e) {
-            System.out.println("error in wapaction,and e is " + e.getMessage());
-        }
-        System.out.println(res);
-        JSONObject jsonObject = JSONObject.parseObject(res);
-        JSONArray jsonArray = JSON.parseArray(jsonObject.getString("addrList"));
-        JSONObject jsonObject1 = jsonArray.getJSONObject(0);
-        String arr[] = jsonObject1.get("admName").toString().split(",");
-        System.out.println(arr[0]);
-        return arr[0];
-    }
-
-    public static void main(String[] args) {
-        String log = "116.42654793612228";
-        String lat = "39.944177062241515";
-        System.out.println("@@@ " + getProvince(log, lat));
-    }
-
 }

+ 99 - 0
src/main/java/com/aoyang/tms/controller/vo/AddWorkOrderVO.java

@@ -0,0 +1,99 @@
+package com.aoyang.tms.controller.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+    * 运单运单表
+    * </p>
+ *
+ * @author guoyong
+ * @since 2022-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("tms_work_order")
+@ApiModel(value="WorkOrder对象", description="运单运单表")
+public class AddWorkOrderVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "分配卡车id,批量id以逗号分隔")
+    @TableField("truck_id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private String truckIds;
+
+    @ApiModelProperty(value = "运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已报废60")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value = "运单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "物流公司id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long orgId;
+
+    @ApiModelProperty(value = "物流公司名称")
+    private String orgName;
+
+    @ApiModelProperty(value = "物流公司简称")
+    private String orgShortName;
+
+    @ApiModelProperty(value = "托运方id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long shipperId;
+
+    @ApiModelProperty(value = "托运方名称")
+    @TableField("shipper_name")
+    private String shipperName;
+
+    @ApiModelProperty(value = "1装车、2卸车")
+    @TableField("type")
+    private Integer type;
+
+    @ApiModelProperty(value = "装车作业地点id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long spotId;
+
+    @ApiModelProperty(value = "卸车作业地点名")
+    private String spotName;
+
+    @ApiModelProperty(value = "卸车作业地点具体地址")
+    private String address;
+
+    @ApiModelProperty(value = "卸车作业'联系人")
+    private String contactName;
+
+    @ApiModelProperty(value = "卸车作业'联系人电话")
+    private String contactPhone;
+
+    @ApiModelProperty(value = "计划到达时间")
+    private LocalDateTime planReachTime;
+
+    @ApiModelProperty(value = "计划离开时间")
+    private LocalDateTime planLeaveTime;
+
+    @ApiModelProperty(value = "计划重量")
+    private Integer planWeight;
+
+    @ApiModelProperty(value = "调度人员备注")
+    private String note;
+
+    @ApiModelProperty(value = "结算里程(km)")
+    private String settleTrip;
+
+
+}

+ 4 - 0
src/main/java/com/aoyang/tms/entity/WorkOrder.java

@@ -228,6 +228,10 @@ public class WorkOrder implements Serializable {
     @TableField("complete_time")
     private LocalDateTime completeTime;
 
+    @ApiModelProperty(value = "结算里程(km)")
+    @TableField("settle_trip")
+    private String settleTrip;
+
     @ApiModelProperty(value = "创建人id")
     @TableField("creater")
     @JsonFormat(shape = JsonFormat.Shape.STRING)

+ 2 - 1
src/main/java/com/aoyang/tms/job/SpotCheckJob.java

@@ -81,7 +81,8 @@ public class SpotCheckJob {
                 }
                 List<WorkOrder> workOrders = workOrderService.list(new QueryWrapper<WorkOrder>().eq("cycle_id", workCycle.getId()));
                 for (WorkOrder workOrder : workOrders) {
-                    if (workOrder.getLeaveTime() != null) {
+                    // 卸车点无围栏信息
+                    if (workOrder.getType() == 2 || workOrder.getLeaveTime() != null) {
                         // 已离开围栏
                         continue;
                     }

+ 7 - 0
src/main/java/com/aoyang/tms/service/CommonService.java

@@ -7,6 +7,7 @@ import com.aoyang.tms.entity.User;
 import com.aoyang.tms.feign.result.Org;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @Description: 常用工具类,如获取组织信息、用户信息、卡车信息、验证Result、验证通联返回值
@@ -109,4 +110,10 @@ public interface CommonService {
      */
     LocationVO getLocationByDate(Long truckId, LocalDateTime date);
 
+
+    /**
+     * 根据时间根据truckId获取车辆路线坐标集合
+     */
+    List<String> getLocationtrip(Long truckId, LocalDateTime startDate, LocalDateTime endDate);
+
 }

+ 7 - 0
src/main/java/com/aoyang/tms/service/WorkOrderService.java

@@ -61,6 +61,13 @@ public interface WorkOrderService extends IService<WorkOrder> {
     Result<IPage<TruckOrderManageVO>> getTruckOrderManageList(PageParam<WorkManagePageParam> pageParam);
 
     /**
+     * 运营端终止运单
+     *
+     * @return
+     */
+    Result<Boolean> cancelWorkOrder(WorkOrder workOrder);
+
+    /**
      * @return
      * @Author chengang
      * @Description 获取运单分页列表

+ 22 - 0
src/main/java/com/aoyang/tms/service/impl/CommonServiceImpl.java

@@ -21,6 +21,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -269,4 +271,24 @@ public class CommonServiceImpl implements CommonService {
         return location;
     }
 
+    @Override
+    public List<String> getLocationtrip(Long truckId, LocalDateTime startDate, LocalDateTime endDate) {
+        QueryWrapper<TruckSimCard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("truck_id", truckId);
+        TruckSimCard truckSimCard = truckSimCardService.getOne(queryWrapper);
+        if (truckSimCard == null) {
+            return Collections.EMPTY_LIST;
+        }
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getClientId());
+        criteria.andOperator(Criteria.where("dateTime").gt(startDate));
+        criteria.andOperator(Criteria.where("dateTime").lt(endDate));
+        Query query = new Query(criteria);
+        List<TmsMongoDoc> tmsMongoDocs = mongoTemplate.find(query, TmsMongoDoc.class);
+        List<String> result = new ArrayList<>();
+        for (TmsMongoDoc tmsMongoDoc : tmsMongoDocs) {
+            result.add(tmsMongoDoc.getLatitude() + "," + tmsMongoDoc.getLongitude());
+        }
+        return result;
+    }
+
 }

+ 14 - 0
src/main/java/com/aoyang/tms/service/impl/WorkOrderServiceImpl.java

@@ -195,6 +195,20 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         return new Result<>(truckOrderRecords);
     }
 
+    @Override
+    public Result<Boolean> cancelWorkOrder(WorkOrder workOrder) {
+        if (workOrder == null || workOrder.getId() == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkOrder order = getById(workOrder.getId());
+        if (order.getOrderStatus() > WorkOrderEnum.ZHUANGCHE_RESULT_SUBMIT.orderStatus()) {
+            return new Result<>(ErrCodeEnum.ORDER_STATUS_ERROR.getCode(), ErrCodeEnum.ORDER_STATUS_ERROR.getMessage());
+        }
+
+        order.setOrderStatus(WorkOrderEnum.CONCELED.orderStatus());
+
+        return new Result<>(updateById(order));
+    }
 
     @Override
     public IPage<WorkOrderPageListVO> findPage(PageParam<WorkOrderPageParam> pageParam) {