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 dbe2914..7a68df1 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,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(); + } + /** * 修改订单 */ 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 new file mode 100644 index 0000000..a727395 --- /dev/null +++ b/cpxt-admin/src/main/java/com/cpxt/web/controller/biz/LargeScreenController.java @@ -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 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 result = new HashMap<>(); + List keys = new ArrayList<>(); + List> values = new ArrayList<>(); + List 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 map = new HashMap<>(); + for (String customerName : customerNameList) { + LambdaQueryWrapper 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 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,"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> entries = new ArrayList<>(map.entrySet()); + entries.sort(Map.Entry.comparingByValue().reversed()); + // 取前5个 + List> deliveryOrderTop5 = entries.stream().limit(5).collect(Collectors.toList()); + + // 使用Stream API提取所有的键和值 + List keyList = deliveryOrderTop5.stream().map(Map.Entry::getKey).collect(Collectors.toList()); + List 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 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::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> entries = new ArrayList<>(map.entrySet()); + entries.sort(Map.Entry.comparingByValue().reversed()); + // 取前5个 + List> deliveryDistanceTop5 = entries.stream().limit(5).collect(Collectors.toList()); + + // 使用Stream API提取所有的键和值 + List keyList = deliveryDistanceTop5.stream().map(Map.Entry::getKey).collect(Collectors.toList()); + List 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 result = new HashMap<>(); + List keyList = bizOrderMapper.selectAreaNameOverview(); + List valueList = bizOrderMapper.selectAreaCountOverview(); + result.put("keys",keyList); + result.put("values",valueList); + largeScreenEntity.setAreaOverview(result); + return AjaxResult.success(largeScreenEntity); + } + + private long getOrder() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.ne(BizOrder::getOrderStatus,"4"); + queryWrapper.eq(BizOrder::getStatus,1); + return bizOrderMapper.selectCount(queryWrapper); + } + + private long getShop() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizCustomerShop::getStatus,1); + return bizCustomerShopMapper.selectCount(queryWrapper); + } + + private long getCustomer() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizCustomer::getStatus,1); + return bizCustomerMapper.selectCount(queryWrapper); + } + + private long getOnDutyCar() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizCar::getStatus,1); + return bizCarMapper.selectCount(queryWrapper); + } + + private long getOnDutyDriver() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizDriver::getStatus,1); + return bizDriverMapper.selectCount(queryWrapper); + } + + private List getBizDriverClockList(String today) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(BizDriverClock::getClockTime,today); + queryWrapper.eq(BizDriverClock::getStatus,1); + return bizDriverClockMapper.selectList(queryWrapper); + } + + private long getIncompleteOrder(String today) { + LambdaQueryWrapper 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 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 queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizOrder::getOrderStatus,"3"); + queryWrapper.eq(BizOrder::getStatus,1); + List 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 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; + } +} diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerShop.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerShop.java index d8c35e3..1b3e32d 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerShop.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerShop.java @@ -44,6 +44,10 @@ public class BizCustomerShop @Excel(name = "联系电话") private String linkphone; + /** 所属地区 */ + @Excel(name = "所属地区") + private String area; + /** 店铺地址 */ @Excel(name = "店铺地址") private String address; diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerWarehouse.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerWarehouse.java index 1809a9d..4be701a 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerWarehouse.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizCustomerWarehouse.java @@ -44,6 +44,10 @@ public class BizCustomerWarehouse @Excel(name = "联系电话") private String linkphone; + /** 所属地区 */ + @Excel(name = "所属地区") + private String area; + /** 仓库地址 */ @Excel(name = "仓库地址") private String address; diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverClock.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverClock.java index c9020d3..99c0c86 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverClock.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizDriverClock.java @@ -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; 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 dcefc1f..8d3922f 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 @@ -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 = "创建时间") diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrderSub.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrderSub.java index fa598a1..b6e3d96 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrderSub.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/BizOrderSub.java @@ -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; + } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/domain/LargeScreenEntity.java b/cpxt-system/src/main/java/com/cpxt/biz/domain/LargeScreenEntity.java new file mode 100644 index 0000000..b1c3c72 --- /dev/null +++ b/cpxt-system/src/main/java/com/cpxt/biz/domain/LargeScreenEntity.java @@ -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 bizDriverClockList; + + + /** + * 总体概览 + */ + // 在岗司机 + private long onDutyDriver; + + // 在岗车辆 + private long onDutyCar; + + // 合作伙伴 + private long customer; + + // 配送门店 + private long shop; + + // 配送订单 + private long order; + + + /** + * 订单配送情况 + */ + private Map customerDeliverySituation; + + /** + * 近30天配送订单top5 + */ + private Map deliveryOrderTop5; + + /** + * 近30天配送里程top5 + */ + private Map deliveryDistanceTop5; + + /** + * 订单地区分配情况 + */ + private Map areaOverview; + +} diff --git a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizCustomerMapper.java b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizCustomerMapper.java index 452092b..252eca4 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizCustomerMapper.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizCustomerMapper.java @@ -21,5 +21,8 @@ public interface BizCustomerMapper extends BaseMapper @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 getCustomerName(); } 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 5d85c88..c6dab22 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 @@ -19,4 +19,6 @@ public interface BizDriverMapper extends BaseMapper @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 selectDriverName(); } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizOrderMapper.java b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizOrderMapper.java index 4eec992..d890456 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizOrderMapper.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/mapper/BizOrderMapper.java @@ -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 { @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 queryWrapper); + + @Select("SELECT receiver_area as area,COUNT(receiver_area) as count FROM biz_order WHERE order_status != '4' GROUP BY receiver_area") + List> 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 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 selectAreaCountOverview(); + + @Select("select * from biz_order where order_sn = #{orderSn} and status = 1") + BizOrder selectByOrderSn(String orderSn); } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/service/IBizOrderService.java b/cpxt-system/src/main/java/com/cpxt/biz/service/IBizOrderService.java index 1a57043..d2df7d9 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/service/IBizOrderService.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/service/IBizOrderService.java @@ -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 orderList, boolean updateSupport); Page selectBizOrderPageByDriver(String orderStatus,int pageNum, int pageSize); + + public void insertBizOrderSub(Map map); } diff --git a/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizOrderServiceImpl.java b/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizOrderServiceImpl.java index bc86576..106376a 100644 --- a/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizOrderServiceImpl.java +++ b/cpxt-system/src/main/java/com/cpxt/biz/service/impl/BizOrderServiceImpl.java @@ -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 subList = (List) 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); + } + } + } + /** * 修改订单 *