|
|
@@ -11,13 +11,17 @@ import com.yr.warehouse.admin.driver.data.*;
|
|
|
import com.yr.warehouse.admin.driver.mapper.*;
|
|
|
import com.yr.warehouse.admin.driver.menu.DriverGoodsLossIntervalStockTakingType;
|
|
|
import com.yr.warehouse.admin.driver.vo.DriverGoodsLossIntervalVo;
|
|
|
+import com.yr.warehouse.admin.replenish.data.ReplenishOrderInfo;
|
|
|
+import com.yr.warehouse.admin.replenish.mapper.ReplenishOrderInfoMapper;
|
|
|
import com.yr.warehouse.admin.service.driver.DriverGoodsLossIntervalService;
|
|
|
import com.yr.warehouse.admin.service.statistics.DriverStatisticsService;
|
|
|
import com.yr.warehouse.admin.statistics.vo.DriverStatisticsVo;
|
|
|
import jakarta.annotation.Resource;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.support.TransactionTemplate;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -31,6 +35,12 @@ public class DriverGoodsLossIntervalServiceImpl implements DriverGoodsLossInterv
|
|
|
private DriverStatisticsService driverStatisticsService;
|
|
|
|
|
|
@Resource
|
|
|
+ private DriverGoodsLossRecordMapper driverGoodsLossRecordMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private DriverEquipmentLossRecordMapper driverEquipmentLossRecordMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
private OperatorComponent operatorComponent;
|
|
|
|
|
|
@Resource
|
|
|
@@ -49,6 +59,9 @@ public class DriverGoodsLossIntervalServiceImpl implements DriverGoodsLossInterv
|
|
|
private DriverWarehouseMapper driverWarehouseMapper;
|
|
|
|
|
|
@Resource
|
|
|
+ private ReplenishOrderInfoMapper replenishOrderInfoMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
private TransactionTemplate transactionTemplate;
|
|
|
|
|
|
|
|
|
@@ -59,6 +72,8 @@ public class DriverGoodsLossIntervalServiceImpl implements DriverGoodsLossInterv
|
|
|
if (null == areaStaffVos || areaStaffVos.isEmpty()) {
|
|
|
throw new MessageException("当前仓库下没有司机");
|
|
|
}
|
|
|
+ bo.setIntervalStartTime(LocalDateTime.parse(bo.getIntervalStartTime().toLocalDate() + " 04:00:00"));
|
|
|
+ bo.setIntervalEndTime(LocalDateTime.parse(bo.getIntervalEndTime().toLocalDate() + " 03:59:59"));
|
|
|
|
|
|
bo.setBeginStatDate(bo.getIntervalStartTime().toLocalDate());
|
|
|
bo.setEndStatDate(bo.getIntervalEndTime().toLocalDate());
|
|
|
@@ -75,8 +90,11 @@ public class DriverGoodsLossIntervalServiceImpl implements DriverGoodsLossInterv
|
|
|
bo.setAreaStaffIds(operatorAreaStaffIds);
|
|
|
}
|
|
|
|
|
|
+ // 获取司机未补货的补货单列表
|
|
|
+ List<ReplenishOrderInfo> replenishOrderInfos = replenishOrderInfoMapper.selectUnReplenish(bo.getAreaStaffIds(), bo.getIntervalStartTime(), bo.getIntervalEndTime());
|
|
|
+
|
|
|
// 获取上一次司机的货损统计记录
|
|
|
- DriverGoodsLossIntervalMain lastDriverGoodsLossIntervalMain = driverGoodsLossIntervalMainMapper.queryLastByOperatorId(bo.getOperatorId(), bo.getWarehouseId());
|
|
|
+ DriverGoodsLossIntervalMain lastDriverGoodsLossIntervalMain = driverGoodsLossIntervalMainMapper.queryLastByOperatorId(bo.getOperatorId(), bo.getWarehouseId(), bo.getIntervalStartTime());
|
|
|
List<DriverGoodsLossIntervalDetail> lastDriverGoodsLossIntervalDetails = null;
|
|
|
List<EquipmentLossIntervalDetail> lastEquipmentLossIntervalDetails = null;
|
|
|
if (null != lastDriverGoodsLossIntervalMain) {
|
|
|
@@ -89,18 +107,14 @@ public class DriverGoodsLossIntervalServiceImpl implements DriverGoodsLossInterv
|
|
|
Map<Long, DriverOnRouteAccountRecordMain> driverOnRouteAccountRecordMainMap = driverOnRouteAccountRecordMains.stream().collect(Collectors.toMap(DriverOnRouteAccountRecordMain::getAreaStaffId, Function.identity()));
|
|
|
|
|
|
// 基于开始时间及结束时间抽取这段时间内每日统计的司机货损记录及设备货损记录
|
|
|
- // List<DriverGoodsLossRecord> driverGoodsLossRecords = driverGoodsLossRecordMapper.searchGeneratorParam(bo);
|
|
|
-
|
|
|
- DriverStatisticsVo driverStatisticsVo = driverStatisticsService.generatorDriverStatisticsVo(bo.getAreaStaffIds(), bo.getIntervalStartTime(), bo.getIntervalEndTime());
|
|
|
-
|
|
|
-
|
|
|
- // List<DriverEquipmentLossRecord> driverEquipmentLossRecords = driverEquipmentLossRecordMapper.searchGeneratorParam(bo);
|
|
|
+ List<DriverGoodsLossRecord> driverGoodsLossRecords = driverGoodsLossRecordMapper.searchGeneratorParam(bo);
|
|
|
+ List<DriverEquipmentLossRecord> driverEquipmentLossRecords = driverEquipmentLossRecordMapper.searchGeneratorParam(bo);
|
|
|
|
|
|
// 基于司机货损记录及设备货损记录生成司机对应的货损统计记录
|
|
|
Map<Long, DriverGoodsLossIntervalVo> driverGoodsLossIntervalDetailMap = generatorDriverGoodsLossIntervalDetailMap(bo.getAreaStaffIds(),
|
|
|
driverOnRouteAccountRecordMainMap,
|
|
|
- driverStatisticsVo.getDriverGoodsLossRecords(),
|
|
|
- driverStatisticsVo.getDriverEquipmentLossRecords(),
|
|
|
+ driverGoodsLossRecords,
|
|
|
+ driverEquipmentLossRecords,
|
|
|
lastDriverGoodsLossIntervalDetails,
|
|
|
lastEquipmentLossIntervalDetails);
|
|
|
|
|
|
@@ -217,34 +231,53 @@ public class DriverGoodsLossIntervalServiceImpl implements DriverGoodsLossInterv
|
|
|
for (Long areaStaffId : areaStaffIds) {
|
|
|
DriverOnRouteAccountRecordMain driverOnRouteAccountRecordMain = driverOnRouteAccountRecordMainMap.get(areaStaffId);
|
|
|
|
|
|
+ // 司机货损统计记录表
|
|
|
List<DriverGoodsLossRecord> driverGoodsLossRecordList = areaStaffDriverGoodsLossRecordMap.get(areaStaffId);
|
|
|
+ // 司机设备货损统计记录表
|
|
|
List<DriverEquipmentLossRecord> driverEquipmentLossRecordList = areaStaffDriverEquipmentLossRecordMap.get(areaStaffId);
|
|
|
|
|
|
+ // 上一次的司机货损统计记录表
|
|
|
DriverGoodsLossIntervalDetail lastDriverGoodsLossIntervalDetail = lastDriverGoodsLossIntervalDetailMap.get(areaStaffId);
|
|
|
+ // 上一次的司机设备货损统计记录表
|
|
|
EquipmentLossIntervalDetail lastEquipmentLossIntervalDetail = lastEquipmentLossIntervalDetailMap.get(areaStaffId);
|
|
|
|
|
|
-
|
|
|
+ // 生成司机货损统计
|
|
|
DriverGoodsLossIntervalDetail driverGoodsLossIntervalDetail = new DriverGoodsLossIntervalDetail();
|
|
|
driverGoodsLossIntervalDetail.setAreaStaffId(areaStaffId);
|
|
|
buildDriverGoodsLossRecord(driverGoodsLossIntervalDetail, lastDriverGoodsLossIntervalDetail, driverGoodsLossRecordList, driverOnRouteAccountRecordMain);
|
|
|
|
|
|
+ // 生成设备货损统计
|
|
|
EquipmentLossIntervalDetail equipmentLossIntervalDetail = new EquipmentLossIntervalDetail();
|
|
|
equipmentLossIntervalDetail.setAreaStaffId(areaStaffId);
|
|
|
buildDriverEquipmentLossRecord(equipmentLossIntervalDetail, lastEquipmentLossIntervalDetail, driverEquipmentLossRecordList);
|
|
|
|
|
|
- DriverGoodsLossIntervalVo driverGoodsLossIntervalVo = new DriverGoodsLossIntervalVo();
|
|
|
- driverGoodsLossIntervalVo.setDriverGoodsLossIntervalDetail(driverGoodsLossIntervalDetail);
|
|
|
- driverGoodsLossIntervalVo.setEquipmentLossIntervalDetail(equipmentLossIntervalDetail);
|
|
|
- if (null !=driverOnRouteAccountRecordMain) {
|
|
|
- driverGoodsLossIntervalVo.setUseDriverOnRouteAccountRecordMainId(driverOnRouteAccountRecordMain.getId());
|
|
|
- }
|
|
|
-
|
|
|
+ // 响应视图
|
|
|
+ DriverGoodsLossIntervalVo driverGoodsLossIntervalVo = buildGoodsLossIntervalVo(driverGoodsLossIntervalDetail, equipmentLossIntervalDetail, driverOnRouteAccountRecordMain);
|
|
|
result.put(areaStaffId, driverGoodsLossIntervalVo);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 构建司机货损区间统计视图
|
|
|
+ *
|
|
|
+ * @param driverGoodsLossIntervalDetail 货损统计数据
|
|
|
+ * @param equipmentLossIntervalDetail 设备货损统计数据
|
|
|
+ * @param driverOnRouteAccountRecordMain 区域员工账户统计数据
|
|
|
+ * @return 货损区间统计视图
|
|
|
+ */
|
|
|
+ @NotNull
|
|
|
+ private static DriverGoodsLossIntervalVo buildGoodsLossIntervalVo(DriverGoodsLossIntervalDetail driverGoodsLossIntervalDetail, EquipmentLossIntervalDetail equipmentLossIntervalDetail, DriverOnRouteAccountRecordMain driverOnRouteAccountRecordMain) {
|
|
|
+ DriverGoodsLossIntervalVo driverGoodsLossIntervalVo = new DriverGoodsLossIntervalVo();
|
|
|
+ driverGoodsLossIntervalVo.setDriverGoodsLossIntervalDetail(driverGoodsLossIntervalDetail);
|
|
|
+ driverGoodsLossIntervalVo.setEquipmentLossIntervalDetail(equipmentLossIntervalDetail);
|
|
|
+ if (null != driverOnRouteAccountRecordMain) {
|
|
|
+ driverGoodsLossIntervalVo.setUseDriverOnRouteAccountRecordMainId(driverOnRouteAccountRecordMain.getId());
|
|
|
+ }
|
|
|
+ return driverGoodsLossIntervalVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 构建司机货损统计数据
|
|
|
*
|
|
|
* @param driverGoodsLossIntervalDetail 货损统计数据
|