diff --git a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverClockController.java b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverClockController.java index 1a2dc0c..1078db0 100644 --- a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverClockController.java +++ b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverClockController.java @@ -74,7 +74,6 @@ public class BizDriverClockController extends BaseController /** * 新增司机打卡记录 */ - @PreAuthorize("@ss.hasPermi('system:clock:add')") @Log(title = "司机打卡记录", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody BizDriverClock bizDriverClock) diff --git a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverStateController.java b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverStateController.java new file mode 100644 index 0000000..ade4c8e --- /dev/null +++ b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizDriverStateController.java @@ -0,0 +1,36 @@ +package com.cpxt.web.controller.biz; + +import com.cpxt.biz.domain.BizCar; +import com.cpxt.biz.domain.BizDriverState; +import com.cpxt.biz.service.BizDriverStateService; +import com.cpxt.common.annotation.Log; +import com.cpxt.common.core.domain.AjaxResult; +import com.cpxt.common.enums.BusinessType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +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; + +@RestController +@RequestMapping("/biz/driver/state") +public class BizDriverStateController { + + @Autowired + private BizDriverStateService bizDriverStateService; + + /** + * 新增司机轨迹 + */ + @PostMapping("/add") + @Transactional + public AjaxResult add(@RequestBody BizDriverState bizDriverState) + { + // 同步新增到司机对应的轨迹表中 + bizDriverStateService.insertDriveDriveState(bizDriverState); + bizDriverState.setId(null); + return AjaxResult.success(bizDriverStateService.save(bizDriverState)); + } +} diff --git a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizOrderController.java b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizOrderController.java index a0565de..ebfd83b 100644 --- a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizOrderController.java +++ b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/BizOrderController.java @@ -1,15 +1,20 @@ package com.cpxt.web.controller.biz; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Queue; +import java.util.stream.Collectors; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cpxt.biz.domain.*; import com.cpxt.biz.domain.vo.BizCustomerRouteVo; +import com.cpxt.biz.domain.vo.BizOrderSubVo; import com.cpxt.biz.domain.vo.BizOrderVo; import com.cpxt.biz.domain.vo.BizOrderVoCustomer; import com.cpxt.biz.mapper.*; @@ -23,6 +28,7 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.BeanUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -65,6 +71,12 @@ public class BizOrderController extends BaseController { @Autowired private SysDictDataMapper sysDictDataMapper; + @Autowired + private BizOrderMapper bizOrderMapper; + + @Autowired + private BizOrderSubMapper bizOrderSubMapper; + /** * 查询订单列表(分页) */ @@ -271,9 +283,81 @@ public class BizOrderController extends BaseController { @Log(title = "订单", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, BizOrder bizOrder) { - List list = bizOrderService.selectBizOrderList(bizOrder); - ExcelUtil util = new ExcelUtil(BizOrder.class); - util.exportExcel(response, list, "订单数据"); + List importIdList = bizOrder.getImportIdList(); + if (bizOrder.getImportType().equals("1")){ + // 导出订单 + if (importIdList != null && importIdList.size() != 0){ + // 导出选中订单 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizOrder::getId,importIdList); + List list = bizOrderMapper.selectList(queryWrapper); + ExcelUtil util = new ExcelUtil(BizOrder.class); + util.exportExcel(response, list, "订单数据"); + }else { + // 导出当前条件订单 + List list = bizOrderService.selectBizOrderList(bizOrder); + ExcelUtil util = new ExcelUtil(BizOrder.class); + util.exportExcel(response, list, "订单数据"); + } + }else { + // 导出该订单下的运单 + if (importIdList != null && importIdList.size() != 0){ + // 导出选中订单下的运单 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizOrder::getId,importIdList); + List list = bizOrderMapper.selectList(queryWrapper); + List orderSnList = list.stream().map(BizOrder::getOrderSn).collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.in(BizOrderSub::getOrderSn,orderSnList); + List bizOrderSubList = bizOrderSubMapper.selectList(queryWrapper1); + List bizOrderSubVoList = new ArrayList<>(); + for (BizOrderSub bizOrderSub : bizOrderSubList) { + BizOrder bizOrder1 = bizOrderMapper.selectByOrderSn(bizOrderSub.getOrderSn()); + BizOrderSubVo bizOrderSubVo = new BizOrderSubVo(); + BeanUtils.copyProperties(bizOrder1,bizOrderSubVo); + bizOrderSubVo.setSubOrderSn(bizOrderSub.getSubOrderSn()); + bizOrderSubVo.setSubWeight(bizOrderSub.getWeight()); + bizOrderSubVo.setSubVolume(bizOrderSub.getVolume()); + bizOrderSubVo.setSubLength(bizOrderSub.getLength()); + bizOrderSubVo.setSubWidth(bizOrderSub.getWidth()); + bizOrderSubVo.setSubHeight(bizOrderSub.getHeight()); + bizOrderSubVo.setSubGoodsType(bizOrderSub.getGoodsType()); + bizOrderSubVo.setSubGoodsName(bizOrderSub.getGoodsName()); + bizOrderSubVo.setSubOrderFee(bizOrderSub.getOrderFee()); + bizOrderSubVo.setSubRemark(bizOrderSub.getRemark()); + bizOrderSubVoList.add(bizOrderSubVo); + } + ExcelUtil util = new ExcelUtil(BizOrderSubVo.class); + util.exportExcel(response, bizOrderSubVoList, "订单及运单数据"); + }else { + // 导出当前条件下订单的运单 + List list = bizOrderService.selectBizOrderList(bizOrder); + List orderSnList = list.stream().map(BizOrder::getOrderSn).collect(Collectors.toList()); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.in(BizOrderSub::getOrderSn,orderSnList); + List bizOrderSubList = bizOrderSubMapper.selectList(queryWrapper1); + List bizOrderSubVoList = new ArrayList<>(); + for (BizOrderSub bizOrderSub : bizOrderSubList) { + BizOrder bizOrder1 = bizOrderMapper.selectByOrderSn(bizOrderSub.getOrderSn()); + BizOrderSubVo bizOrderSubVo = new BizOrderSubVo(); + BeanUtils.copyProperties(bizOrder1,bizOrderSubVo); + bizOrderSubVo.setSubOrderSn(bizOrderSub.getSubOrderSn()); + bizOrderSubVo.setSubWeight(bizOrderSub.getWeight()); + bizOrderSubVo.setSubVolume(bizOrderSub.getVolume()); + bizOrderSubVo.setSubLength(bizOrderSub.getLength()); + bizOrderSubVo.setSubWidth(bizOrderSub.getWidth()); + bizOrderSubVo.setSubHeight(bizOrderSub.getHeight()); + bizOrderSubVo.setSubGoodsType(bizOrderSub.getGoodsType()); + bizOrderSubVo.setSubGoodsName(bizOrderSub.getGoodsName()); + bizOrderSubVo.setSubOrderFee(bizOrderSub.getOrderFee()); + bizOrderSubVo.setSubRemark(bizOrderSub.getRemark()); + bizOrderSubVoList.add(bizOrderSubVo); + } + ExcelUtil util = new ExcelUtil(BizOrderSubVo.class); + util.exportExcel(response, bizOrderSubVoList, "订单及运单数据"); + } + } + } /** diff --git a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/LargeScreenController.java b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/LargeScreenController.java index f662e69..eb75acd 100644 --- a/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/LargeScreenController.java +++ b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/LargeScreenController.java @@ -49,6 +49,9 @@ public class LargeScreenController extends BaseController { @Autowired private BizCustomerRouteMapper bizCustomerRouteMapper; + @Autowired + private StatCarMapper statCarMapper; + @Autowired private BizCustomerWarehouseMapper bizCustomerWarehouseMapper; @@ -188,41 +191,39 @@ public class LargeScreenController extends BaseController { } /** - * 近30天配送距离top5 + * 近30天配送里程top5(人) */ @GetMapping("/driver/deliveryDistanceTop5") - public AjaxResult deliveryDistanceTop5() + public AjaxResult deliveryDistanceTop5Driver() { + Map result = new HashMap<>(); 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 result = new HashMap<>(); - List driverNameList = bizDriverMapper.selectDriverName(); - Map map = new HashMap<>(); - for (String driverName : driverNameList) { - LambdaQueryWrapper 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::getCreateTime,startTime); - queryWrapper.le(BizOrder::getCreateTime,endTime); - Double distance = bizOrderMapper.selectSumDistance(queryWrapper); - if (distance == null){ - map.put(driverName, (double) 0); - }else { - map.put(driverName,distance); - } - } - // 倒序 - List> entries = new ArrayList<>(map.entrySet()); - entries.sort(Map.Entry.comparingByValue().reversed()); - // 取前5个 - List> deliveryDistanceTop5 = entries.stream().limit(5).collect(Collectors.toList()); + String startTime = DateUtil.format(dateTime, DateUtils.YYYY_MM_DD); + String endTime = DateUtil.format(new Date(),DateUtils.YYYY_MM_DD); - // 使用Stream API提取所有的键和值 - List keyList = deliveryDistanceTop5.stream().map(Map.Entry::getKey).collect(Collectors.toList()); - List valueList = deliveryDistanceTop5.stream().map(Map.Entry::getValue).collect(Collectors.toList()); + List keyList = statCarMapper.selectOdometerTop5CarNo(startTime,endTime); + List valueList = statCarMapper.selectOdometerTop5Odometer(startTime,endTime); + result.put("keys",keyList); + result.put("values",valueList); + largeScreenEntity.setDeliveryDistanceTop5(result); + return AjaxResult.success(largeScreenEntity); + } + + /** + * 近30天配送里程top5(车辆) + */ + @GetMapping("/car/deliveryDistanceTop5") + public AjaxResult deliveryDistanceTop5Car() + { + Map result = new HashMap<>(); + DateTime offset = DateUtil.offset(new Date(), DateField.MONTH, -1); + DateTime dateTime = DateUtil.beginOfDay(offset); + String startTime = DateUtil.format(dateTime, DateUtils.YYYY_MM_DD); + String endTime = DateUtil.format(new Date(),DateUtils.YYYY_MM_DD); + + List keyList = statCarMapper.selectOdometerTop5CarNo(startTime,endTime); + List valueList = statCarMapper.selectOdometerTop5Odometer(startTime,endTime); result.put("keys",keyList); result.put("values",valueList); largeScreenEntity.setDeliveryDistanceTop5(result); diff --git a/cpxt-admin/src/main/java/com/cpxt/web/task/GetLocationTask.java b/cpxt-admin/src/main/java/com/cpxt/web/task/GetLocationTask.java index 05595c4..63bf6aa 100644 --- a/cpxt-admin/src/main/java/com/cpxt/web/task/GetLocationTask.java +++ b/cpxt-admin/src/main/java/com/cpxt/web/task/GetLocationTask.java @@ -78,7 +78,7 @@ public class GetLocationTask { if (!Helper.NStr(info.getGpsTime()).equals("")) newstate.setGpsTime(DateUtils.parseDate(Helper.NStr(info.getGpsTime()).replace(".0",""))); newstate.setSpeed(Helper.FLong(info.getSpeed())); - newstate.setOdometer(new BigDecimal(Helper.FDouble(info.getOdometer())) ); + newstate.setOdometer(BigDecimal.valueOf(Helper.FDouble(info.getOdometer()))); newstate.setLat(info.getLat02()); newstate.setLon(info.getLon02()); newstate.setDirection(Helper.FInt(info.getDirection())); diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverState.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverState.java new file mode 100644 index 0000000..48b3032 --- /dev/null +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverState.java @@ -0,0 +1,116 @@ +package com.cpxt.biz.domain; + +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 java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +/** + * 司机定位状态 + * @TableName biz_driver_state + */ +@TableName(value ="biz_driver_state") +@Data +public class BizDriverState implements Serializable { + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 司机ID + */ + private Integer driverId; + + /** + * 司机姓名 + */ + private String driverName; + + /** + * 定位设备ID + */ + private String vin; + + /** + * 定位时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gpsTime; + + /** + * 纬度 + */ + private BigDecimal lat; + + /** + * 经度 + */ + private BigDecimal lng; + + /** + * 速度 + */ + private Double speed; + + /** + * 方向 + */ + private Integer direction; + + /** + * 位置名称 + */ + private String placeName; + + /** + * 省 + */ + private String provice; + + /** + * 市 + */ + private String city; + + /** + * 区 + */ + private String district; + + /** + * 路名信息 + */ + private String roadName; + + /** + * 地标名称 + */ + private String areaName; + + /** + * 海拔高度 单位 米 + */ + private Double height; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 状态 + */ + private String status; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrder.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrder.java index cfceb79..b58fcc0 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrder.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrder.java @@ -2,6 +2,7 @@ package com.cpxt.biz.domain; import java.math.BigDecimal; import java.util.Date; +import java.util.List; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; @@ -30,15 +31,15 @@ public class BizOrder private String orderSn; /** 订单状态 */ - @Excel(name = "订单状态") + @Excel(name = "订单状态",dictType = "sys_order_status") private String orderStatus; /** 订单类型 */ - @Excel(name = "订单类型") + @Excel(name = "订单类型",dictType = "sys_order_type") private String orderType; /** 客户ID */ - @Excel(name = "客户ID") +// @Excel(name = "客户ID") private Long customerId; /** 客户名称 */ @@ -46,7 +47,7 @@ public class BizOrder private String customerName; /** 路线ID */ - @Excel(name = "路线ID") +// @Excel(name = "路线ID") private Long routeId; /** 路线名称 */ @@ -54,7 +55,7 @@ public class BizOrder private String routeName; /** 仓库ID */ - @Excel(name = "仓库ID") +// @Excel(name = "仓库ID") private Long warehouseId; /** 仓库名称 */ @@ -62,7 +63,7 @@ public class BizOrder private String warehouseName; /** 店铺ID */ - @Excel(name = "店铺ID") +// @Excel(name = "店铺ID") private Long shopId; /** 店铺名称 */ @@ -70,7 +71,7 @@ public class BizOrder private String shopName; /** 配送车辆ID */ - @Excel(name = "配送车辆ID") +// @Excel(name = "配送车辆ID") private Long carId; /** 配送车牌号 */ @@ -78,7 +79,7 @@ public class BizOrder private String carNo; /** 配送司机ID */ - @Excel(name = "配送司机ID") +// @Excel(name = "配送司机ID") private Long driverId; /** 配送司机名称 */ @@ -86,7 +87,7 @@ public class BizOrder private String driverName; /** 副驾司机ID */ - @Excel(name = "副驾司机ID") +// @Excel(name = "副驾司机ID") private Long copilotId; /** 副驾司机名称 */ @@ -106,7 +107,7 @@ public class BizOrder private String senderPhone; /** 发件人所属地区 */ - @Excel(name = "发件人所属地区") +// @Excel(name = "发件人所属地区") private String senderArea; /** 发件人地址 */ @@ -114,11 +115,11 @@ public class BizOrder private String senderAddress; /** 发件人经度 */ - @Excel(name = "发件人经度") +// @Excel(name = "发件人经度") private BigDecimal senderLng; /** 发件人纬度 */ - @Excel(name = "发件人纬度") +// @Excel(name = "发件人纬度") private BigDecimal senderLat; /** 发件人公司名称 */ @@ -138,7 +139,7 @@ public class BizOrder private String receiverPhone; /** 收件人所属地区 */ - @Excel(name = "收件人所属地区") +// @Excel(name = "收件人所属地区") private String receiverArea; /** 收件人地址 */ @@ -146,11 +147,11 @@ public class BizOrder private String receiverAddress; /** 收件人经度 */ - @Excel(name = "收件人经度") +// @Excel(name = "收件人经度") private BigDecimal receiverLng; /** 收件人纬度 */ - @Excel(name = "收件人纬度") +// @Excel(name = "收件人纬度") private BigDecimal receiverLat; /** 收件人公司名称 */ @@ -158,11 +159,11 @@ public class BizOrder private String receiverCompany; /** 直接距离 */ - @Excel(name = "直接距离") +// @Excel(name = "订单距离") private Double lineDistance; /** 物品类型 */ - @Excel(name = "物品类型") + @Excel(name = "物品类型",dictType = "sys_goods_type") private String goodsType; /** 物品名称 */ @@ -194,15 +195,15 @@ public class BizOrder private Integer totalQuantity; /** 是否保价 */ - @Excel(name = "是否保价") +// @Excel(name = "是否保价") private Integer insured; /** 保价金额 */ - @Excel(name = "保价金额") +// @Excel(name = "保价金额") private BigDecimal insuredMoney; /** 保价费用 */ - @Excel(name = "保价费用") +// @Excel(name = "保价费用") private BigDecimal insuredFee; /** 订单费用 */ @@ -210,41 +211,41 @@ public class BizOrder private BigDecimal orderFee; /** 是否取消 */ - @Excel(name = "是否取消") +// @Excel(name = "是否取消") private Integer isCancel; /** 取消原因 */ - @Excel(name = "取消原因") +// @Excel(name = "取消原因") private String cancelReason; /** 取消时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") +// @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date cancelTime; /** 支付类型 寄付,到付,月结 */ - @Excel(name = "支付类型 寄付,到付,月结") + @Excel(name = "支付类型 寄付,到付,月结",dictType = "sys_pay_type") private String payType; /** 支付方式 支付宝,微信 */ - @Excel(name = "支付方式 支付宝,微信") + @Excel(name = "支付方式 支付宝,微信",dictType = "sys_pay_mode") private String payMode; /** 支付系统订单号 */ - @Excel(name = "支付系统订单号") +// @Excel(name = "支付系统订单号") private String payId; /** 支付状态 */ - @Excel(name = "支付状态") +// @Excel(name = "支付状态") private Integer payStatus; /** 支付时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") +// @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date payTime; /** 状态 */ - @Excel(name = "状态") +// @Excel(name = "状态") private Integer status; /** 开始配送时间 */ @@ -262,29 +263,29 @@ public class BizOrder private String arriveRemark; /** 现场图片 */ - @Excel(name = "现场图片") +// @Excel(name = "现场图片") private String arriveImg; /** 到达经度 */ - @Excel(name = "到达经度") +// @Excel(name = "到达经度") private BigDecimal arriveLng; /** 到达纬度 */ - @Excel(name = "到达纬度") +// @Excel(name = "到达纬度") private BigDecimal arriveLat; /** 运单状态 */ - @Excel(name = "运单状态") +// @Excel(name = "运单状态") private Integer subStatus; /** 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "创建时间") + @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** 更新时间 */ - @Excel(name = "更新时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** 备注 */ @@ -296,4 +297,11 @@ public class BizOrder // 下单结束时间 @TableField(exist = false) private String endTime; + + // 导出类型 1 订单 2 运单 + @TableField(exist = false) + private String importType; + // 选中订单id + @TableField(exist = false) + private List importIdList; } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderSubVo.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderSubVo.java new file mode 100644 index 0000000..350c9cb --- /dev/null +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderSubVo.java @@ -0,0 +1,288 @@ +package com.cpxt.biz.domain.vo; + +import com.cpxt.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 订单导入模板对象(调度员) + * + * @author YIN + * @date 2024-12-16 + */ +@Data +public class BizOrderSubVo +{ + private static final long serialVersionUID = 1L; + + /** ID */ + private Long id; + + /** 订单号 */ + @Excel(name = "订单号") + private String orderSn; + + /** 订单状态 */ + @Excel(name = "订单状态",dictType = "sys_order_status") + private String orderStatus; + + /** 订单类型 */ + @Excel(name = "订单类型",dictType = "sys_order_type") + private String orderType; + + /** 客户ID */ + private Long customerId; + + /** 客户名称 */ + @Excel(name = "客户名称") + private String customerName; + + /** 路线ID */ + private Long routeId; + + /** 路线名称 */ + @Excel(name = "路线名称") + private String routeName; + + /** 仓库ID */ + private Long warehouseId; + + /** 仓库名称 */ + @Excel(name = "仓库名称") + private String warehouseName; + + /** 店铺ID */ + private Long shopId; + + /** 店铺名称 */ + @Excel(name = "店铺名称") + private String shopName; + + /** 配送车辆ID */ + private Long carId; + + /** 配送车牌号 */ + @Excel(name = "配送车牌号") + private String carNo; + + /** 配送司机ID */ + private Long driverId; + + /** 配送司机名称 */ + @Excel(name = "配送司机名称") + private String driverName; + + /** 副驾司机ID */ + private Long copilotId; + + /** 副驾司机名称 */ + @Excel(name = "副驾司机名称") + private String copilotName; + + /** 发件人名称 */ + @Excel(name = "发件人名称") + private String senderName; + + /** 发件联系人 */ + @Excel(name = "发件联系人") + private String senderLinkman; + + /** 发件人电话 */ + @Excel(name = "发件人电话") + private String senderPhone; + + /** 发件人地址 */ + @Excel(name = "发件人地址") + private String senderAddress; + + /** 发件人经度 */ + private BigDecimal senderLng; + + /** 发件人纬度 */ + private BigDecimal senderLat; + + /** 发件人公司名称 */ + @Excel(name = "发件人公司名称") + private String senderCompany; + + /** 收件人名称 */ + @Excel(name = "收件人名称") + private String receiverName; + + /** 收件联系人 */ + @Excel(name = "收件联系人") + private String receiverLinkman; + + /** 收件人电话 */ + @Excel(name = "收件人电话") + private String receiverPhone; + + /** 收件人地址 */ + @Excel(name = "收件人地址") + private String receiverAddress; + + /** 收件人经度 */ + private BigDecimal receiverLng; + + /** 收件人纬度 */ + private BigDecimal receiverLat; + + /** 收件人公司名称 */ + @Excel(name = "收件人公司名称") + private String receiverCompany; + + /** 订单距离 */ +// @Excel(name = "订单距离") + private Double lineDistance; + + /** 物品类型 */ + @Excel(name = "物品类型",dictType = "sys_goods_type") + private String goodsType; + + /** 物品名称 */ + @Excel(name = "物品名称") + private String goodsName; + + /** 重量 */ + @Excel(name = "重量") + private BigDecimal weight; + + /** 物品体积 */ + @Excel(name = "体积") + private BigDecimal volume; + + /** 长(米) */ + @Excel(name = "长") + private BigDecimal length; + + /** 宽(米) */ + @Excel(name = "宽") + private BigDecimal width; + + /** 高(米) */ + @Excel(name = "高") + private BigDecimal height; + + /** 包裹总件数 */ + @Excel(name = "包裹总件数") + private Integer totalQuantity; + + /** 是否保价 */ + private Integer insured; + + /** 保价金额 */ + private BigDecimal insuredMoney; + + /** 保价费用 */ + private BigDecimal insuredFee; + + /** 订单费用 */ + @Excel(name = "订单费用") + private BigDecimal orderFee; + + /** 是否取消 */ + private Integer isCancel; + + /** 取消原因 */ + private String cancelReason; + + /** 取消时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date cancelTime; + + /** 支付类型 寄付,到付,月结 */ + @Excel(name = "支付类型 寄付,到付,月结",dictType = "sys_pay_type") + private String payType; + + /** 支付方式 支付宝,微信 */ + @Excel(name = "支付方式 支付宝,微信",dictType = "sys_pay_mode") + private String payMode; + + /** 支付系统订单号 */ + private String payId; + + /** 支付状态 */ + private Integer payStatus; + + /** 支付时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date payTime; + + /** 状态 */ + private Integer status; + + /** 开始配送时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "开始配送时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** 到达时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "到达时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date arriveTime; + + /** 到达备注 */ + @Excel(name = "到达备注") + private String arriveRemark; + + /** 到达经度 */ + private BigDecimal arriveLng; + + /** 到达纬度 */ + private BigDecimal arriveLat; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 订单备注 */ + @Excel(name = "订单备注") + private String remark; + + /** 运单号 */ + @Excel(name = "子单号") + private String subOrderSn; + + /** 运单物品重量 */ + @Excel(name = "运单物品重量") + private BigDecimal subWeight; + + /** 运单物品体积 */ + @Excel(name = "运单物品体积") + private BigDecimal subVolume; + + /** 运单物品长(米) */ + @Excel(name = "运单物品长", readConverterExp = "米=") + private BigDecimal subLength; + + /** 运单物品宽(米) */ + @Excel(name = "运单物品宽", readConverterExp = "米=") + private BigDecimal subWidth; + + /** 运单物品高(米) */ + @Excel(name = "运单物品高", readConverterExp = "米=") + private BigDecimal subHeight; + + /** 运单物品类型 */ + @Excel(name = "运单物品类型") + private String subGoodsType; + + /** 运单物品名称 */ + @Excel(name = "运单物品名称") + private String subGoodsName; + + /** 运单费用 */ + @Excel(name = "运单费用") + private BigDecimal subOrderFee; + + /** 运单备注 */ + @Excel(name = "运单备注") + private String subRemark; +} diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderVo.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderVo.java index 2efd902..a50b9df 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderVo.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/vo/BizOrderVo.java @@ -22,6 +22,7 @@ public class BizOrderVo private Long id; /** 订单号 */ + @Excel(name = "订单号") private String orderSn; /** 订单状态 */ diff --git a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverMapper.java b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverMapper.java index c6dab22..087416c 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverMapper.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverMapper.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.cpxt.biz.domain.BizDriver; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; /** * 司机Mapper接口 @@ -21,4 +22,13 @@ public interface BizDriverMapper extends BaseMapper @Select("select name from biz_driver where status = 1") List selectDriverName(); + + @Update("create table ${tableName} as select * from biz_driver_state_temp") + void createTable(String tableName); + + @Update("ALTER TABLE ${tableName} MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT") + void addPrimaryKey(String tableName); + + @Update("ALTER TABLE ${tableName} ADD PRIMARY KEY (id)") + void setAutoIncrement(String tableName); } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverStateMapper.java b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverStateMapper.java new file mode 100644 index 0000000..09dfb42 --- /dev/null +++ b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizDriverStateMapper.java @@ -0,0 +1,21 @@ +package com.cpxt.biz.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cpxt.biz.domain.BizDriverState; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author LuoJian +* @description 针对表【biz_driver_state(司机定位状态)】的数据库操作Mapper +* @createDate 2025-01-03 09:28:09 +* @Entity com.cpxt.biz.domain.BizDriverState +*/ +@Mapper +public interface BizDriverStateMapper extends BaseMapper { + + int insertBizDriverState(BizDriverState bizDriverState); +} + + + + diff --git a/cpxt-system/src/main/java/com/cpxt/biz/mapper/StatCarMapper.java b/cpxt-system/src/main/java/com/cpxt/biz/mapper/StatCarMapper.java index fd8f34c..01c0b8e 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/mapper/StatCarMapper.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/mapper/StatCarMapper.java @@ -1,10 +1,12 @@ package com.cpxt.biz.mapper; -import java.util.List; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.cpxt.biz.domain.StatCar; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * 车辆统计Mapper接口 @@ -16,4 +18,10 @@ import org.apache.ibatis.annotations.Mapper; public interface StatCarMapper extends BaseMapper { + @Select("select t.car_no from (SELECT car_no,SUM(odometer) sumo FROM `stat_car` where stat_date >= #{startTime} and stat_date <= #{endTime} GROUP BY car_no ORDER BY sumo desc limit 5) t") + List selectOdometerTop5CarNo(@Param("startTime") String startTime,@Param("endTime") String endTime); + + + @Select("select t.sumo from (SELECT car_no,SUM(odometer) sumo FROM `stat_car` where stat_date >= #{startTime} and stat_date <= #{endTime} GROUP BY car_no ORDER BY sumo desc limit 5) t") + List selectOdometerTop5Odometer(@Param("startTime")String startTime,@Param("endTime") String endTime); } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/service/BizDriverStateService.java b/cpxt-system/src/main/java/com/cpxt/biz/service/BizDriverStateService.java new file mode 100644 index 0000000..6bfc7fa --- /dev/null +++ b/cpxt-system/src/main/java/com/cpxt/biz/service/BizDriverStateService.java @@ -0,0 +1,14 @@ +package com.cpxt.biz.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.cpxt.biz.domain.BizDriverState; + +/** +* @author LuoJian +* @description 针对表【biz_driver_state(司机定位状态)】的数据库操作Service +* @createDate 2025-01-03 09:28:09 +*/ +public interface BizDriverStateService extends IService { + + public int insertDriveDriveState(BizDriverState bizDriverState); +} diff --git a/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverServiceImpl.java b/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverServiceImpl.java index b0c5aec..6f3a6b8 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverServiceImpl.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverServiceImpl.java @@ -119,22 +119,24 @@ public class BizDriverServiceImpl implements IBizDriverService public int insertBizDriver(BizDriver bizDriver) { bizDriver.setDeptName(sysDeptMapper.selectDeptById(bizDriver.getDeptId()).getDeptName()); - SysUser user = sysUserMapper.selectUserByUserName(bizDriver.getPhone()); - if (ObjectUtil.isEmpty(user)){ - SysUser sysUser = new SysUser(); - setSysUser(bizDriver,sysUser); - sysUserMapper.insertUser(sysUser); - - SysUserRole sysUserRole = new SysUserRole(); - sysUserRole.setUserId(sysUser.getUserId()); - sysUserRole.setRoleId(102L); // 司机 - sysUserRoleMapper.insert(sysUserRole); - - bizDriver.setUserId(sysUser.getUserId()); - }else { - bizDriver.setUserId(user.getUserId()); + SysUser sysUser = new SysUser(); + setSysUser(bizDriver,sysUser); + sysUserMapper.insertUser(sysUser); + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setUserId(sysUser.getUserId()); + sysUserRole.setRoleId(102L); // 司机 + sysUserRoleMapper.insert(sysUserRole); + bizDriver.setUserId(sysUser.getUserId()); + int insert = bizDriverMapper.insert(bizDriver); + // 新增完司机后,创建该司机的行驶轨迹表 + if (insert > 0){ + Long id = bizDriver.getId(); + String tableName = "track_driver_" + id; + bizDriverMapper.createTable(tableName); // 创建该司机的行驶轨迹表 + bizDriverMapper.addPrimaryKey(tableName); // 添加主键 + bizDriverMapper.setAutoIncrement(tableName); // 设置自增 } - return bizDriverMapper.insert(bizDriver); + return insert; } private void setSysUser(BizDriver bizDriver, SysUser sysUser) { @@ -158,6 +160,11 @@ public class BizDriverServiceImpl implements IBizDriverService @Override public int updateBizDriver(BizDriver bizDriver) { + if (ObjectUtil.isNotEmpty(bizDriver.getPhoto())){ + SysUser user = sysUserMapper.selectUserById(bizDriver.getUserId()); + user.setAvatar(bizDriver.getPhoto()); + sysUserMapper.updateUser(user); + } return bizDriverMapper.updateById(bizDriver); } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverStateServiceImpl.java b/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverStateServiceImpl.java new file mode 100644 index 0000000..87ad02f --- /dev/null +++ b/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizDriverStateServiceImpl.java @@ -0,0 +1,30 @@ +package com.cpxt.biz.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cpxt.biz.domain.BizDriverState; +import com.cpxt.biz.mapper.BizDriverStateMapper; +import com.cpxt.biz.service.BizDriverStateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** +* @author LuoJian +* @description 针对表【biz_driver_state(司机定位状态)】的数据库操作Service实现 +* @createDate 2025-01-03 09:28:09 +*/ +@Service +public class BizDriverStateServiceImpl extends ServiceImpl + implements BizDriverStateService { + + @Autowired + private BizDriverStateMapper bizDriverStateMapper; + + @Override + public int insertDriveDriveState(BizDriverState bizDriverState) { + return bizDriverStateMapper.insertBizDriverState(bizDriverState); + } +} + + + + diff --git a/cpxt-system/src/main/java/com/cpxt/system/mapper/SysDeptMapper.java b/cpxt-system/src/main/java/com/cpxt/system/mapper/SysDeptMapper.java index 0319935..e7f8281 100644 --- a/cpxt-system/src/main/java/com/cpxt/system/mapper/SysDeptMapper.java +++ b/cpxt-system/src/main/java/com/cpxt/system/mapper/SysDeptMapper.java @@ -1,6 +1,9 @@ package com.cpxt.system.mapper; import java.util.List; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.cpxt.common.core.domain.entity.SysDept; @@ -9,7 +12,8 @@ import com.cpxt.common.core.domain.entity.SysDept; * * @author ruoyi */ -public interface SysDeptMapper +@Mapper +public interface SysDeptMapper extends BaseMapper { /** * 查询部门管理数据 diff --git a/cpxt-system/src/main/resources/mapper/biz/BizDriverStateMapper.xml b/cpxt-system/src/main/resources/mapper/biz/BizDriverStateMapper.xml new file mode 100644 index 0000000..68fcb16 --- /dev/null +++ b/cpxt-system/src/main/resources/mapper/biz/BizDriverStateMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into track_driver_${driverId} + + driver_id, + driver_name, + vin, + gps_time, + lat, + lng, + speed, + direction, + place_name, + provice, + city, + district, + road_name, + area_name, + height, + create_time, + status, + + + #{driverId}, + #{driverName}, + #{vin}, + #{gpsTime}, + #{lat}, + #{lng}, + #{speed}, + #{direction}, + #{placeName}, + #{provice}, + #{city}, + #{district}, + #{roadName}, + #{areaName}, + #{height}, + #{createTime}, + #{status}, + + + \ No newline at end of file