zk 2 жил өмнө
parent
commit
0b99f54b1b

+ 57 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -0,0 +1,57 @@
+package com.sckw.transport.controller;
+
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.SendCarDto1;
+import com.sckw.transport.service.KwtWaybillOrderService;
+import com.sckw.transport.model.dto.ValidList;
+import jakarta.validation.Valid;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author lfq
+ * @desc 车辆运单
+ * @date 2023/7/19 0019
+ */
+@Slf4j
+@RestController
+@RequestMapping("/kwtWaybillOrder")
+public class KwtWaybillOrderController {
+
+    @Autowired
+    KwtWaybillOrderService waybillOrderService;
+
+    //
+    /**
+     * @param params {}
+     * @description 派车-趟次/循环
+     * @author zk
+     * @date 2023/5/30
+     **/
+    @PostMapping("/sendCar")
+    public HttpResult commitSendCar(@RequestBody @Valid ValidList<SendCarDto1> params){
+        if (CollectionUtils.isEmpty(params)) {
+            return HttpResult.error("请选择委派车辆信息!");
+        }
+        return waybillOrderService.commitSendCar(params);
+    }
+
+
+    //取消派车(未接单前)
+    //更换车辆(趟次派车(-出车前)/循环派车(接单后-出车前))
+    //更换司机(趟次派车(-卸货前)/循环派车(接单后-卸货前))
+    //确认接单-趟次/循环
+    //拒绝接单-趟次/循环
+    //确认/拒绝出车
+    //到达装货地点
+    //确认装货
+    //到达卸货地点
+    //确认卸货
+
+
+}

+ 80 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDto1.java

@@ -0,0 +1,80 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc TODO
+ * @date 2023/7/19 0019
+ */
+@Data
+public class SendCarDto1 {
+
+    /**
+     * 派车类型(1:趟次:2:循环)
+     */
+    @JsonProperty("type")
+    @NotNull(message = "派车类型不能为空")
+    private Integer type;
+
+    /**
+     * 物流订单id
+     */
+    @JsonProperty("lOrderId")
+    @NotNull(message = "物流订单ID不能为空")
+    private Long lOrderId;
+
+    /**
+     * 司机id
+     */
+    @JsonProperty("driverId")
+    @NotNull(message = "司机信息ID不能为空")
+    private Long driverId;
+
+    /**
+     * 车牌号
+     */
+    @JsonProperty("truckNo")
+    @NotNull(message = "车牌号不能为空")
+    private String truckNo;
+
+    /**
+     * 上游给运单委派量
+     */
+    @JsonProperty("loadAmount")
+    @NotNull(message = "核定载量不能为空")
+    @DecimalMin(value= "0", inclusive=false, message = "核定载量必须等于或大于0")
+    private Double entrustAmount;
+
+    /**
+     * 趟次
+     */
+    @JsonProperty("count")
+    @DecimalMin(value= "0", inclusive=false, message = "趟次必须等于或大于0")
+    private Integer count;
+
+    /**
+     * 装货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "开始时间不能为空")
+    private Date loadDateTime;
+
+    /**
+     * 卸货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "结束时间不能为空")
+    private Date unloadDateTime;
+
+}

+ 138 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ValidList.java

@@ -0,0 +1,138 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.Valid;
+import java.util.*;
+
+/**
+ * @author zk
+ * @desc TODO
+ * @date 2023/7/19 0019
+ */
+public class ValidList<E> implements List<E> {
+
+    @Valid
+    private List<E> list = new ArrayList<>();
+
+    public List<E> getList() {
+        return list;
+    }
+
+    public void setList(List<E> list) {
+        this.list = list;
+    }
+
+    @Override
+    public int size() {
+        return list.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return list.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+        return list.contains(o);
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+        return list.iterator();
+    }
+
+    @Override
+    public Object[] toArray() {
+        return list.toArray();
+    }
+
+    @Override
+    public <T> T[] toArray(T[] a) {
+        return list.toArray(a);
+    }
+
+    @Override
+    public boolean add(E e) {
+        return list.add(e);
+    }
+
+    @Override
+    public boolean remove(Object o) {
+        return list.remove(o);
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> c) {
+        return list.contains(c);
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends E> c) {
+        return list.addAll(c);
+    }
+
+    @Override
+    public boolean addAll(int index, Collection<? extends E> c) {
+        return list.addAll(index, c);
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+        return list.removeAll(c);
+    }
+
+    @Override
+    public boolean retainAll(Collection<?> c) {
+        return list.retainAll(c);
+    }
+
+    @Override
+    public void clear() {
+        list.clear();
+    }
+
+    @Override
+    public E get(int index) {
+        return list.get(index);
+    }
+
+    @Override
+    public E set(int index, E element) {
+        return list.set(index, element);
+    }
+
+    @Override
+    public void add(int index, E element) {
+        list.add(index, element);
+    }
+
+    @Override
+    public E remove(int index) {
+        return list.remove(index);
+    }
+
+    @Override
+    public int indexOf(Object o) {
+        return list.indexOf(o);
+    }
+
+    @Override
+    public int lastIndexOf(Object o) {
+        return list.lastIndexOf(o);
+    }
+
+    @Override
+    public ListIterator<E> listIterator() {
+        return list.listIterator();
+    }
+
+    @Override
+    public ListIterator<E> listIterator(int index) {
+        return list.listIterator(index);
+    }
+
+    @Override
+    public List<E> subList(int fromIndex, int toIndex) {
+        return list.subList(fromIndex, toIndex);
+    }
+}

+ 70 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -0,0 +1,70 @@
+package com.sckw.transport.service;
+
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.dao.KwtLogisticsOrderMapper;
+import com.sckw.transport.model.KwtLogisticsOrder;
+import com.sckw.transport.model.dto.SendCarDto1;
+import com.sckw.transport.model.dto.ValidList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zk
+ * @desc TODO
+ * @date 2023/7/19 0019
+ */
+@Service
+public class KwtWaybillOrderService {
+
+    @Autowired
+    KwtLogisticsOrderMapper logisticsOrderDao;
+
+    /**
+     * @param params
+     * @desc 派车
+     * @author zk
+     * @date 2023/7/19
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult commitSendCar(ValidList<SendCarDto1> params) {
+        /**校验是车辆委托量否超过物流订单剩余量**/
+        //承运单信息
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(params.get(0).getLOrderId());
+        if (logisticsOrder == null) {
+            return HttpResult.error("订单已不存在!" );
+        }
+
+        //下游司机委派量累加
+        BigDecimal ranksAmount = new BigDecimal(0);
+        for (SendCarDto1 sendCarDto:params) {
+            if (sendCarDto.getEntrustAmount() == null || sendCarDto.getEntrustAmount() <= 0) {
+                return HttpResult.error(sendCarDto.getTruckNo() + "核定载量必须大于0,请确认!" );
+            }
+            if (sendCarDto.getType() == Global.NUMERICAL_ONE) {
+                ranksAmount.add(new BigDecimal(sendCarDto.getEntrustAmount()));
+
+                if (sendCarDto.getCount() == null || sendCarDto.getCount() <= 0) {
+                    return HttpResult.error(sendCarDto.getTruckNo() + "趟次必须等于或大于0!" );
+                }
+            }
+        }
+
+        //当前下游司机委派量 + 历史下游司机委派量 + 分包量
+        ranksAmount.add(logisticsOrder.getEntrustAmount()).add(logisticsOrder.getSubcontractAmount());
+        if (ranksAmount.compareTo(logisticsOrder.getAmount()) > 0) {
+            return HttpResult.error("派车量已大于剩余可运量!" );
+        }
+
+        /**数据处理**/
+
+
+
+
+        return HttpResult.ok();
+    }
+
+}