自动化立体仓库 - WMS系统
#
lsh
2025-04-07 644054957e6c926cee03cf99b1869ae2b1523ff4
#
3个文件已修改
1个文件已添加
92 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/StockOutParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/YyyyMmddUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java
@@ -169,7 +169,9 @@
        param.setLocDetls(locDetls);
        List<StockOutParam> stockOutParams = OutboundAllocationUtil.OutboundClassification(param);
        Date now = new Date();
        for (StockOutParam stockOutParam : stockOutParams){
            stockOutParam.setNowTime(now);
            workService.startupFullTakeStore(stockOutParam, getUserId());
        }
src/main/java/com/zy/asrs/entity/param/StockOutParam.java
@@ -2,6 +2,7 @@
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
@@ -14,6 +15,7 @@
    private Integer outSite;
    private String orderNo;
    private String cstmrName;
    private Date nowTime;
    // 物料编号集合
    private List<LocDetl> locDetls;
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -20,6 +20,7 @@
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.utils.YyyyMmddUtils;
import com.zy.common.web.WcsController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -165,6 +166,7 @@
    @Transactional
    public void startupFullTakeStore(StockOutParam param, Long userId) {
        // 目标站点状态检测
        Date now = param.getNowTime();
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
@@ -180,6 +182,7 @@
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") ){
                // 启动出库开始 101.出库
                staNo.setModiTime(now);
                stockOut(staNo, locDetlDtos, null, userId);
            }else {
                throw new CoolException("所选库位存在状态不为F、D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$());
@@ -394,6 +397,7 @@
    @Transactional
    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
        Date now = new Date();
        Date nowPri = staNo.getModiTime();
        // 合并同类项
        Set<String> locNos = new HashSet<>();
        List<OutLocDto> dtos = new ArrayList<>();
@@ -439,7 +443,9 @@
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(ioType); // 入出库状态
            Integer pri = YyyyMmddUtils.convertPri(nowPri);
            wrkMast.setIoType(pri); // 入出库状态
            wrkMast.setIoPri(13D); // 优先级:13
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
src/main/java/com/zy/common/utils/YyyyMmddUtils.java
New file
@@ -0,0 +1,80 @@
package com.zy.common.utils;
import com.core.common.DateUtils;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
public class YyyyMmddUtils {
    public static String convertYyyyMMdd() {
        return DateUtils.convert(new Date(), "MMdd");
    }
    public static String convertYyyyMMdd(Date date) {
        return DateUtils.convert(date, "MMdd");
    }
    public static long convertYyyyMMdd100000() {
        String convert = convertYyyyMMdd();
        return 100000*(Long.valueOf(convert));
    }
    public static long convertYyyyMMdd100000(Date date) {
        String convert = convertYyyyMMdd(date);
        return 100000*(Long.valueOf(convert));
    }
    public static LocalTime convertToBeijingTime(Date date) {
        return date.toInstant()                       // Date -> Instant(时间戳)
                .atZone(ZoneId.of("Asia/Shanghai"))    // 绑定北京时区(UTC+8)
                .toLocalTime();                       // 提取时间部分
    }
    public static LocalDateTime convert(Date date) {
        return date.toInstant()                     // 将 Date 转换为 Instant(时间戳)
                .atZone(ZoneId.systemDefault())     // 绑定系统默认时区
                .toLocalDateTime();                 // 提取无时区的日期时间
    }
    // 基于 java.time 的实现(线程安全且简洁)
    public static long getSecondsOfDay(Date date) {
        // 1. 获取当天零点时间(系统时区)
        LocalDateTime startOfDay = LocalDateTime.now().with(LocalTime.MIN);
        // 2. 获取当前时间
        LocalDateTime currentTime = convert(date);
        // 3. 计算时间差的秒数
        long secondsSinceMidnight = Duration.between(startOfDay, currentTime).getSeconds();
        return secondsSinceMidnight;
    }
    // 原方法改造(带 Date 参数)
    public static long convertYyyyMMdd100000ioPri(Date data) {
        long ioPri = convertYyyyMMdd100000(data);
        long secondsOfDay = getSecondsOfDay(data);
        System.out.println(secondsOfDay);
        return ioPri + (1000000 - secondsOfDay);
    }
    // 重载方法(兼容无 Date 参数的调用)
    public static long convertYyyyMMdd1000000ioPri() {
        return convertYyyyMMdd100000ioPri(new Date());
    }
    // 重载方法(兼容无 Date 参数的调用)
    public static Integer convertPri(Date date) {
        long datePri = convertYyyyMMdd100000ioPri(date);
        return (int)datePri;
    }
    public static void main(String[] args) {
        Date now = new Date();
        long result = YyyyMmddUtils.convertYyyyMMdd100000ioPri(now);
        System.out.println("计算值:" + result);
        System.out.println("计算值:" + (int)result);
    }
}