大屏相关接口
parent
7ba947a94b
commit
a86d5d61ac
|
|
@ -1,6 +1,7 @@
|
|||
package com.cpxt.web.controller.biz;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
|
@ -144,6 +145,16 @@ public class BizOrderController extends BaseController {
|
|||
return toAjax(bizOrderService.insertBizOrder(bizOrder));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增订单子单
|
||||
*/
|
||||
@Log(title = "订单", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/sub/add")
|
||||
public AjaxResult add(@RequestBody Map map) {
|
||||
bizOrderService.insertBizOrderSub(map);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改订单
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,353 @@
|
|||
package com.cpxt.web.controller.biz;
|
||||
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.cpxt.biz.domain.*;
|
||||
import com.cpxt.biz.mapper.*;
|
||||
import com.cpxt.common.annotation.Anonymous;
|
||||
import com.cpxt.common.core.controller.BaseController;
|
||||
import com.cpxt.common.core.domain.AjaxResult;
|
||||
import com.cpxt.common.utils.DateUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 大屏Controller
|
||||
*
|
||||
* @author Luo.J
|
||||
* @date 2024-12-16
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/biz/largeScreen")
|
||||
@Anonymous
|
||||
public class LargeScreenController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private BizDriverMapper bizDriverMapper;
|
||||
|
||||
@Autowired
|
||||
private BizOrderMapper bizOrderMapper;
|
||||
|
||||
@Autowired
|
||||
private BizCarMapper bizCarMapper;
|
||||
|
||||
@Autowired
|
||||
private BizCustomerMapper bizCustomerMapper;
|
||||
|
||||
@Autowired
|
||||
private BizCustomerShopMapper bizCustomerShopMapper;
|
||||
|
||||
@Autowired
|
||||
private BizDriverClockMapper bizDriverClockMapper;
|
||||
|
||||
private final String today = DateUtil.format(new Date(), "yyyy-MM-dd");
|
||||
|
||||
private final LargeScreenEntity largeScreenEntity = new LargeScreenEntity();
|
||||
|
||||
/**
|
||||
* 司机概览
|
||||
*/
|
||||
@GetMapping("/driver/overview")
|
||||
public AjaxResult driverOverview()
|
||||
{
|
||||
long onlineDrive = getDriveCount(1);
|
||||
long offlineDrive = getDriveCount(0);
|
||||
double onlineRate = commonComputeRatio(onlineDrive, onlineDrive + offlineDrive);
|
||||
double deliveryMileage = getDeliveryMileage();
|
||||
largeScreenEntity.setOnlineDrive(onlineDrive);
|
||||
largeScreenEntity.setOfflineDrive(offlineDrive);
|
||||
largeScreenEntity.setOnlineRate(onlineRate);
|
||||
largeScreenEntity.setDeliveryMileage(deliveryMileage);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 今日订单概览
|
||||
*/
|
||||
@GetMapping("/order/overview")
|
||||
public AjaxResult orderOverview()
|
||||
{
|
||||
long completedOrder = getCompletedOrder(today);
|
||||
long incompleteOrder = getIncompleteOrder(today);
|
||||
double completedRate = commonComputeRatio(completedOrder,completedOrder + incompleteOrder);
|
||||
double incompleteRate = commonComputeRatio(incompleteOrder,completedOrder + incompleteOrder);
|
||||
largeScreenEntity.setCompletedOrder(completedOrder);
|
||||
largeScreenEntity.setIncompleteOrder(incompleteOrder);
|
||||
largeScreenEntity.setCompletedRate(completedRate);
|
||||
largeScreenEntity.setIncompleteRate(incompleteRate);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 司机提醒
|
||||
*/
|
||||
@GetMapping("/driver/remind")
|
||||
public AjaxResult driverRemind()
|
||||
{
|
||||
List<BizDriverClock> bizDriverClockList = getBizDriverClockList(today);
|
||||
for (BizDriverClock bizDriverClock : bizDriverClockList) {
|
||||
bizDriverClock.setDriverName(bizDriverMapper.selectById(bizDriverClock.getDriverId()).getName());
|
||||
}
|
||||
largeScreenEntity.setBizDriverClockList(bizDriverClockList);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 总体概览
|
||||
*/
|
||||
@GetMapping("/overall/overview")
|
||||
public AjaxResult overallOverview()
|
||||
{
|
||||
long onDutyDriver = getOnDutyDriver();
|
||||
long onDutyCar = getOnDutyCar();
|
||||
long customer = getCustomer();
|
||||
long shop = getShop();
|
||||
long order = getOrder();
|
||||
largeScreenEntity.setOnDutyDriver(onDutyDriver);
|
||||
largeScreenEntity.setOnDutyCar(onDutyCar);
|
||||
largeScreenEntity.setCustomer(customer);
|
||||
largeScreenEntity.setShop(shop);
|
||||
largeScreenEntity.setOrder(order);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 门店配送情况
|
||||
*/
|
||||
@GetMapping("/customer/deliverySituation")
|
||||
public AjaxResult customerDeliverySituation()
|
||||
{
|
||||
DateTime offset = DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, -15);
|
||||
Map<String,Object> result = new HashMap<>();
|
||||
List<String> keys = new ArrayList<>();
|
||||
List<Map<String,Long>> values = new ArrayList<>();
|
||||
List<String> customerNameList = bizCustomerMapper.getCustomerName();
|
||||
for (int i = 0; i <= 15; i++) {
|
||||
DateTime time = DateUtil.offset(offset, DateField.DAY_OF_MONTH, i);
|
||||
String thatDay = DateUtil.format(time, "yyyy-MM-dd");
|
||||
String day = DateUtil.format(time, "MM-dd");
|
||||
keys.add(day);
|
||||
Map<String,Long> map = new HashMap<>();
|
||||
for (String customerName : customerNameList) {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
queryWrapper.ne(BizOrder::getOrderStatus,"4");
|
||||
queryWrapper.eq(BizOrder::getCustomerName,customerName);
|
||||
queryWrapper.like(BizOrder::getCreateTime,thatDay);
|
||||
Long aLong = bizOrderMapper.selectCount(queryWrapper);
|
||||
map.put(customerName,aLong);
|
||||
}
|
||||
values.add(map);
|
||||
}
|
||||
result.put("keys",keys);
|
||||
result.put("values",values);
|
||||
result.put("customerNameList",customerNameList);
|
||||
largeScreenEntity.setCustomerDeliverySituation(result);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 近30天配送订单top5
|
||||
*/
|
||||
@GetMapping("/driver/deliveryOrderTop5")
|
||||
public AjaxResult deliveryOrderTop5()
|
||||
{
|
||||
DateTime offset = DateUtil.offset(new Date(), DateField.MONTH, -1);
|
||||
DateTime dateTime = DateUtil.beginOfDay(offset);
|
||||
String startTime = DateUtil.format(dateTime, DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
String endTime = DateUtil.format(new Date(),DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
Map<String,Object> result = new HashMap<>();
|
||||
List<String> driverNameList = bizDriverMapper.selectDriverName();
|
||||
Map<String,Long> map = new HashMap<>();
|
||||
for (String driverName : driverNameList) {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
queryWrapper.ne(BizOrder::getOrderStatus,"4");
|
||||
queryWrapper.and(wq -> wq.eq(BizOrder::getDriverName,driverName).or().eq(BizOrder::getCopilotName,driverName));
|
||||
queryWrapper.ge(BizOrder::getUpdateTime,startTime);
|
||||
queryWrapper.le(BizOrder::getUpdateTime,endTime);
|
||||
Long aLong = bizOrderMapper.selectCount(queryWrapper);
|
||||
map.put(driverName,aLong);
|
||||
}
|
||||
// 倒序
|
||||
List<Map.Entry<String, Long>> entries = new ArrayList<>(map.entrySet());
|
||||
entries.sort(Map.Entry.<String, Long>comparingByValue().reversed());
|
||||
// 取前5个
|
||||
List<Map.Entry<String, Long>> deliveryOrderTop5 = entries.stream().limit(5).collect(Collectors.toList());
|
||||
|
||||
// 使用Stream API提取所有的键和值
|
||||
List<String> keyList = deliveryOrderTop5.stream().map(Map.Entry::getKey).collect(Collectors.toList());
|
||||
List<Long> valueList = deliveryOrderTop5.stream().map(Map.Entry::getValue).collect(Collectors.toList());
|
||||
result.put("keys",keyList);
|
||||
result.put("values",valueList);
|
||||
|
||||
largeScreenEntity.setDeliveryOrderTop5(result);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 近30天配送距离top5
|
||||
*/
|
||||
@GetMapping("/driver/deliveryDistanceTop5")
|
||||
public AjaxResult deliveryDistanceTop5()
|
||||
{
|
||||
DateTime offset = DateUtil.offset(new Date(), DateField.MONTH, -1);
|
||||
DateTime dateTime = DateUtil.beginOfDay(offset);
|
||||
String startTime = DateUtil.format(dateTime, DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
String endTime = DateUtil.format(new Date(),DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
Map<String,Object> result = new HashMap<>();
|
||||
List<String> driverNameList = bizDriverMapper.selectDriverName();
|
||||
Map<String,Double> map = new HashMap<>();
|
||||
for (String driverName : driverNameList) {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
queryWrapper.ne(BizOrder::getOrderStatus,"3");
|
||||
queryWrapper.and(wq -> wq.eq(BizOrder::getDriverName,driverName).or().eq(BizOrder::getCopilotName,driverName));
|
||||
queryWrapper.ge(BizOrder::getUpdateTime,startTime);
|
||||
queryWrapper.le(BizOrder::getUpdateTime,endTime);
|
||||
Double distance = bizOrderMapper.selectSumDistance(queryWrapper);
|
||||
if (distance == null){
|
||||
map.put(driverName, (double) 0);
|
||||
}else {
|
||||
map.put(driverName,distance);
|
||||
}
|
||||
}
|
||||
// 倒序
|
||||
List<Map.Entry<String, Double>> entries = new ArrayList<>(map.entrySet());
|
||||
entries.sort(Map.Entry.<String, Double>comparingByValue().reversed());
|
||||
// 取前5个
|
||||
List<Map.Entry<String, Double>> deliveryDistanceTop5 = entries.stream().limit(5).collect(Collectors.toList());
|
||||
|
||||
// 使用Stream API提取所有的键和值
|
||||
List<String> keyList = deliveryDistanceTop5.stream().map(Map.Entry::getKey).collect(Collectors.toList());
|
||||
List<Double> valueList = deliveryDistanceTop5.stream().map(Map.Entry::getValue).collect(Collectors.toList());
|
||||
result.put("keys",keyList);
|
||||
result.put("values",valueList);
|
||||
largeScreenEntity.setDeliveryDistanceTop5(result);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 地区分布情况
|
||||
*/
|
||||
@GetMapping("/area/overview")
|
||||
public AjaxResult areaOverview()
|
||||
{
|
||||
Map<String,Object> result = new HashMap<>();
|
||||
List<String> keyList = bizOrderMapper.selectAreaNameOverview();
|
||||
List<Long> valueList = bizOrderMapper.selectAreaCountOverview();
|
||||
result.put("keys",keyList);
|
||||
result.put("values",valueList);
|
||||
largeScreenEntity.setAreaOverview(result);
|
||||
return AjaxResult.success(largeScreenEntity);
|
||||
}
|
||||
|
||||
private long getOrder() {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.ne(BizOrder::getOrderStatus,"4");
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
return bizOrderMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private long getShop() {
|
||||
LambdaQueryWrapper<BizCustomerShop> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizCustomerShop::getStatus,1);
|
||||
return bizCustomerShopMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private long getCustomer() {
|
||||
LambdaQueryWrapper<BizCustomer> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizCustomer::getStatus,1);
|
||||
return bizCustomerMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private long getOnDutyCar() {
|
||||
LambdaQueryWrapper<BizCar> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizCar::getStatus,1);
|
||||
return bizCarMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private long getOnDutyDriver() {
|
||||
LambdaQueryWrapper<BizDriver> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizDriver::getStatus,1);
|
||||
return bizDriverMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private List<BizDriverClock> getBizDriverClockList(String today) {
|
||||
LambdaQueryWrapper<BizDriverClock> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.like(BizDriverClock::getClockTime,today);
|
||||
queryWrapper.eq(BizDriverClock::getStatus,1);
|
||||
return bizDriverClockMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
private long getIncompleteOrder(String today) {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.like(BizOrder::getUpdateTime, today);
|
||||
queryWrapper.in(BizOrder::getOrderStatus,"1","2");
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
return bizOrderMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private long getCompletedOrder(String today) {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.like(BizOrder::getUpdateTime,today);
|
||||
queryWrapper.eq(BizOrder::getOrderStatus,"3");
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
return bizOrderMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
private double getDeliveryMileage() {
|
||||
LambdaQueryWrapper<BizOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizOrder::getOrderStatus,"3");
|
||||
queryWrapper.eq(BizOrder::getStatus,1);
|
||||
List<BizOrder> bizOrders = bizOrderMapper.selectList(queryWrapper);
|
||||
double deliveryMileage = 0;
|
||||
for (BizOrder bizOrder : bizOrders) {
|
||||
if (ObjectUtil.isNotEmpty(bizOrder.getLineDistance())) deliveryMileage += bizOrder.getLineDistance();
|
||||
}
|
||||
return deliveryMileage;
|
||||
}
|
||||
|
||||
private long getDriveCount(Integer onlineStatus) {
|
||||
LambdaQueryWrapper<BizDriver> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BizDriver::getOnlineStatus,onlineStatus);
|
||||
queryWrapper.eq(BizDriver::getStatus,1);
|
||||
return bizDriverMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 公共方法-计算比率
|
||||
* @param divisor 除数
|
||||
* @param dividend 被除数
|
||||
* @return
|
||||
*/
|
||||
private double commonComputeRatio(long divisor, long dividend) {
|
||||
double ratio = 0d;
|
||||
if (divisor == 0) return ratio;
|
||||
if (dividend !=0 ){
|
||||
// 比率 = 某条件下的项目数 / 总项目数
|
||||
ratio = (double) divisor / dividend * 100;
|
||||
ratio = this.keepTwoDecimals(ratio);//保留两位小数
|
||||
}
|
||||
return ratio;
|
||||
}
|
||||
|
||||
/**
|
||||
* 公共方法-保留两位小数
|
||||
*/
|
||||
private double keepTwoDecimals(double nums){
|
||||
if (nums != 0){
|
||||
return new BigDecimal(nums).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();//保留两位小数
|
||||
}
|
||||
return 0d;
|
||||
}
|
||||
}
|
||||
|
|
@ -44,6 +44,10 @@ public class BizCustomerShop
|
|||
@Excel(name = "联系电话")
|
||||
private String linkphone;
|
||||
|
||||
/** 所属地区 */
|
||||
@Excel(name = "所属地区")
|
||||
private String area;
|
||||
|
||||
/** 店铺地址 */
|
||||
@Excel(name = "店铺地址")
|
||||
private String address;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,10 @@ public class BizCustomerWarehouse
|
|||
@Excel(name = "联系电话")
|
||||
private String linkphone;
|
||||
|
||||
/** 所属地区 */
|
||||
@Excel(name = "所属地区")
|
||||
private String area;
|
||||
|
||||
/** 仓库地址 */
|
||||
@Excel(name = "仓库地址")
|
||||
private String address;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package com.cpxt.biz.domain;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
|
|
@ -26,6 +28,9 @@ public class BizDriverClock
|
|||
@Excel(name = "司机ID")
|
||||
private Long driverId;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String driverName;
|
||||
|
||||
/** 打卡类型 上班 下班 */
|
||||
@Excel(name = "打卡类型 上班 下班")
|
||||
private Integer clockType;
|
||||
|
|
|
|||
|
|
@ -103,6 +103,10 @@ public class BizOrder
|
|||
@Excel(name = "发件人电话")
|
||||
private String senderPhone;
|
||||
|
||||
/** 发件人所属地区 */
|
||||
@Excel(name = "发件人所属地区")
|
||||
private String senderArea;
|
||||
|
||||
/** 发件人地址 */
|
||||
@Excel(name = "发件人地址")
|
||||
private String senderAddress;
|
||||
|
|
@ -131,6 +135,10 @@ public class BizOrder
|
|||
@Excel(name = "收件人电话")
|
||||
private String receiverPhone;
|
||||
|
||||
/** 收件人所属地区 */
|
||||
@Excel(name = "收件人所属地区")
|
||||
private String receiverArea;
|
||||
|
||||
/** 收件人地址 */
|
||||
@Excel(name = "收件人地址")
|
||||
private String receiverAddress;
|
||||
|
|
@ -259,6 +267,10 @@ public class BizOrder
|
|||
@Excel(name = "到达纬度")
|
||||
private BigDecimal arriveLat;
|
||||
|
||||
/** 运单状态 */
|
||||
@Excel(name = "运单状态")
|
||||
private Integer subStatus;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Excel(name = "创建时间")
|
||||
|
|
|
|||
|
|
@ -50,4 +50,20 @@ public class BizOrderSub
|
|||
@Excel(name = "高", readConverterExp = "米=")
|
||||
private BigDecimal height;
|
||||
|
||||
/** 物品类型 */
|
||||
@Excel(name = "物品类型")
|
||||
private String goodsType;
|
||||
|
||||
/** 物品名称 */
|
||||
@Excel(name = "物品名称")
|
||||
private String goodsName;
|
||||
|
||||
/** 订单费用 */
|
||||
@Excel(name = "订单费用")
|
||||
private BigDecimal orderFee;
|
||||
|
||||
/** 备注 */
|
||||
@Excel(name = "备注")
|
||||
private String remark;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
package com.cpxt.biz.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 客户对象 biz_customer
|
||||
*
|
||||
* @author YIN
|
||||
* @date 2024-12-16
|
||||
*/
|
||||
@Data
|
||||
public class LargeScreenEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 司机概览
|
||||
*/
|
||||
// 今日在线司机
|
||||
private long onlineDrive;
|
||||
|
||||
// 今日离线司机
|
||||
private long offlineDrive;
|
||||
|
||||
// 今日在线率
|
||||
private double onlineRate;
|
||||
|
||||
// 今日配送里程
|
||||
private double deliveryMileage;
|
||||
|
||||
|
||||
/**
|
||||
* 订单概览
|
||||
*/
|
||||
// 今日已完成订单
|
||||
private long completedOrder;
|
||||
|
||||
// 今日未完成订单
|
||||
private long incompleteOrder;
|
||||
|
||||
// 今日订单完成率
|
||||
private double completedRate;
|
||||
|
||||
// 今日订单未完成率
|
||||
private double incompleteRate;
|
||||
|
||||
|
||||
/**
|
||||
* 司机提醒
|
||||
*/
|
||||
// 今日上下班打卡记录
|
||||
List<BizDriverClock> bizDriverClockList;
|
||||
|
||||
|
||||
/**
|
||||
* 总体概览
|
||||
*/
|
||||
// 在岗司机
|
||||
private long onDutyDriver;
|
||||
|
||||
// 在岗车辆
|
||||
private long onDutyCar;
|
||||
|
||||
// 合作伙伴
|
||||
private long customer;
|
||||
|
||||
// 配送门店
|
||||
private long shop;
|
||||
|
||||
// 配送订单
|
||||
private long order;
|
||||
|
||||
|
||||
/**
|
||||
* 订单配送情况
|
||||
*/
|
||||
private Map<String,Object> customerDeliverySituation;
|
||||
|
||||
/**
|
||||
* 近30天配送订单top5
|
||||
*/
|
||||
private Map<String,Object> deliveryOrderTop5;
|
||||
|
||||
/**
|
||||
* 近30天配送里程top5
|
||||
*/
|
||||
private Map<String,Object> deliveryDistanceTop5;
|
||||
|
||||
/**
|
||||
* 订单地区分配情况
|
||||
*/
|
||||
private Map<String,Object> areaOverview;
|
||||
|
||||
}
|
||||
|
|
@ -21,5 +21,8 @@ public interface BizCustomerMapper extends BaseMapper<BizCustomer>
|
|||
|
||||
@Select("select * from biz_customer where name = #{customerName} and status = 1")
|
||||
BizCustomer selectByName(String customerName);
|
||||
|
||||
@Select("select name from biz_customer where status = 1")
|
||||
List<String> getCustomerName();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,4 +19,6 @@ public interface BizDriverMapper extends BaseMapper<BizDriver>
|
|||
@Select("select * from biz_driver where user_id = ${userId} and status = 1")
|
||||
BizDriver selectByUserId(Long userId);
|
||||
|
||||
@Select("select name from biz_driver where status = 1")
|
||||
List<String> selectDriverName();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
package com.cpxt.biz.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.cpxt.biz.domain.BizOrder;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
/**
|
||||
|
|
@ -18,4 +21,19 @@ public interface BizOrderMapper extends BaseMapper<BizOrder>
|
|||
{
|
||||
@Select("select * from biz_order order by id desc limit 1")
|
||||
BizOrder selectLastestOrder();
|
||||
|
||||
@Select("select SUM(line_distance) as distance from biz_order ${ew.customSqlSegment}")
|
||||
Double selectSumDistance(@Param("ew") LambdaQueryWrapper<BizOrder> queryWrapper);
|
||||
|
||||
@Select("SELECT receiver_area as area,COUNT(receiver_area) as count FROM biz_order WHERE order_status != '4' GROUP BY receiver_area")
|
||||
List<Map<String, Long>> selectAreaOverview();
|
||||
|
||||
@Select("SELECT t.area from (SELECT receiver_area as area,COUNT(receiver_area) as count FROM biz_order WHERE order_status != '4' GROUP BY receiver_area) t")
|
||||
List<String> selectAreaNameOverview();
|
||||
|
||||
@Select("SELECT t.count from (SELECT receiver_area as area,COUNT(receiver_area) as count FROM biz_order WHERE order_status != '4' GROUP BY receiver_area) t")
|
||||
List<Long> selectAreaCountOverview();
|
||||
|
||||
@Select("select * from biz_order where order_sn = #{orderSn} and status = 1")
|
||||
BizOrder selectByOrderSn(String orderSn);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.cpxt.biz.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.cpxt.biz.domain.BizOrder;
|
||||
|
|
@ -70,4 +71,6 @@ public interface IBizOrderService
|
|||
String importOrderCustomer(List<BizOrderVoCustomer> orderList, boolean updateSupport);
|
||||
|
||||
Page<BizOrder> selectBizOrderPageByDriver(String orderStatus,int pageNum, int pageSize);
|
||||
|
||||
public void insertBizOrderSub(Map map);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.cpxt.biz.service.impl;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
|
|
@ -23,6 +24,7 @@ import org.springframework.beans.BeanUtils;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.cpxt.biz.service.IBizOrderService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.validation.Validator;
|
||||
|
||||
|
|
@ -43,6 +45,9 @@ public class BizOrderServiceImpl implements IBizOrderService {
|
|||
@Autowired
|
||||
private BizOrderMapper bizOrderMapper;
|
||||
|
||||
@Autowired
|
||||
private BizOrderSubMapper bizOrderSubMapper;
|
||||
|
||||
@Autowired
|
||||
private BizCustomerMapper bizCustomerMapper;
|
||||
|
||||
|
|
@ -310,6 +315,12 @@ public class BizOrderServiceImpl implements IBizOrderService {
|
|||
Long carId = bizOrder.getCarId(); // 配送车辆id
|
||||
Long driverId = bizOrder.getDriverId(); // 配送司机id
|
||||
Long copilotId = bizOrder.getCopilotId(); // 副驾司机id
|
||||
BigDecimal length = bizOrder.getLength();
|
||||
BigDecimal width = bizOrder.getWidth();
|
||||
BigDecimal height = bizOrder.getHeight();
|
||||
if (ObjectUtil.isNotEmpty(length) && ObjectUtil.isNotEmpty(width) && ObjectUtil.isNotEmpty(height)){
|
||||
bizOrder.setVolume(length.multiply(width).multiply(height));
|
||||
}
|
||||
|
||||
setBizOrderSn(bizOrder); // 填充订单编号
|
||||
|
||||
|
|
@ -330,6 +341,42 @@ public class BizOrderServiceImpl implements IBizOrderService {
|
|||
return bizOrderMapper.insert(bizOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增订单子单
|
||||
*
|
||||
* @param map 子单信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void insertBizOrderSub(Map map) {
|
||||
String orderSn = (String) map.get("orderSn");
|
||||
List<Map> subList = (List<Map>) map.get("subList");
|
||||
for (Map map1 : subList) {
|
||||
if (map1.get("orderSn").equals(orderSn)){
|
||||
BizOrderSub bizOrderSub = new BizOrderSub();
|
||||
bizOrderSub.setOrderSn(orderSn);
|
||||
bizOrderSub.setSubOrderSn((String) map.get("subOrderSn"));
|
||||
bizOrderSub.setWeight((BigDecimal) map.get("weight"));
|
||||
bizOrderSub.setLength((BigDecimal) map.get("length"));
|
||||
bizOrderSub.setWidth((BigDecimal) map.get("width"));
|
||||
bizOrderSub.setHeight((BigDecimal) map.get("height"));
|
||||
if (ObjectUtil.isNotEmpty(map.get("length")) && ObjectUtil.isNotEmpty(map.get("width")) && ObjectUtil.isNotEmpty(map.get("height"))){
|
||||
bizOrderSub.setVolume(((BigDecimal) map.get("length")).multiply((BigDecimal) map.get("width")).multiply((BigDecimal) map.get("height")));
|
||||
}
|
||||
bizOrderSub.setGoodsType((String) map.get("goodsType"));
|
||||
bizOrderSub.setGoodsName((String) map.get("goodsName"));
|
||||
bizOrderSub.setOrderFee((BigDecimal) map.get("orderFee"));
|
||||
bizOrderSub.setRemark((String) map.get("remark"));
|
||||
bizOrderSubMapper.insert(bizOrderSub);
|
||||
// 同步更新订单表的运单状态
|
||||
BizOrder bizOrder = bizOrderMapper.selectByOrderSn(orderSn);
|
||||
bizOrder.setSubStatus(1);
|
||||
bizOrderMapper.updateById(bizOrder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改订单
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue