2个文件已添加
13个文件已修改
348 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/CrnController.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TaskWrkController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasCrnError.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/importexcle/ImportCrnErrDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/importexcle/ImportCrnErrListener.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ToWmsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskReportScheduler.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wms/js/locMast/locMast.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/taskWrkLog/taskWrkLog.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -1,5 +1,6 @@
package com.zy.asrs.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
@@ -13,11 +14,12 @@
import com.zy.asrs.domain.vo.CrnListVo;
import com.zy.asrs.domain.vo.CrnMsgTableVo;
import com.zy.asrs.domain.vo.CrnStateTableVo;
import com.zy.asrs.entity.BasCrnError;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.*;
import com.zy.asrs.importexcle.ImportCrnErrDto;
import com.zy.asrs.importexcle.ImportCrnErrListener;
import com.zy.asrs.mapper.BasCrnErrorMapper;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.service.BasCrnErrorService;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
@@ -37,8 +39,12 @@
import com.zy.core.properties.SystemProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -63,6 +69,30 @@
    private BasCrnpService basCrnpService;
    @Autowired
    private LocMastService locMastService;
    @Resource
    private TaskWrkMapper taskWrkMapper;
    @Resource
    private BasCrnErrorService basCrnErrorService;
    @PostMapping("/importCrnErr")
    @ManagerAuth(memo = "导入堆垛机异常表")
    public R importCrnErr(@RequestParam("file") MultipartFile multipartFile) {
        try {
            importCrnErrExec(multipartFile);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error(e.getMessage());
        }
        return R.ok("导入成功");
    }
    @Transactional(rollbackFor = Exception.class)
    public void importCrnErrExec(MultipartFile multipartFile) throws IOException {
        EasyExcel.read(multipartFile.getInputStream(), ImportCrnErrDto.class,
                new ImportCrnErrListener(basCrnErrorService)).sheet().doReadSync();
    }
    @ManagerAuth(memo = "进行中的命令")
@@ -186,13 +216,14 @@
            vo.setWorkNo(crnProtocol.getTaskNo());  //  任务号
            if (crnProtocol.getTaskNo() > 0) {
                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                if (wrkMast != null) {
                    vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  源站
                    vo.setStaNo(wrkMast.getStaNo$());   //  目标站
                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  源库位
                    vo.setLocNo(wrkMast.getLocNo());    //  目标库位
//                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(crnProtocol.getTaskNo()));
                if (taskWrk != null) {
                    vo.setStatus(CrnStatusType.process(taskWrk.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(taskWrk.getStartPoint());    //  源站
                    vo.setStaNo(taskWrk.getTargetPoint());   //  目标站
                    vo.setSourceLocNo(taskWrk.getStartPoint());    //  源库位
                    vo.setLocNo(taskWrk.getTargetPoint());    //  目标库位
                }
            } else {
                vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO) ? CrnStatusType.MACHINE_AUTO.getDesc() : CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  模式状态
src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -216,6 +216,7 @@
        }
//        toWmsService.addReportLog(taskWrk);
        locMastService.updateById(locMast);
        taskWrk.setCompleteTime(new Date());
        taskWrk.setStatus(7);//手动完成任务
        taskWrk.setModiTime(new Date());
        taskWrkService.updateById(taskWrk);
@@ -265,7 +266,7 @@
        }
//        toWmsService.addReportLog(taskWrk);
        taskWrk.setCompleteTime(now);//完结时间
        taskWrk.setCancelTime(now);//完结时间
        taskWrkService.updateById(taskWrk);
        return R.ok();
    }
src/main/java/com/zy/asrs/entity/BasCrnError.java
@@ -3,7 +3,6 @@
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.system.entity.User;
@@ -23,7 +22,7 @@
     * 异常代号
     */
    @ApiModelProperty(value = "异常代号")
    @TableId(value = "error_code", type = IdType.AUTO)
    @TableId(value = "error_code")
    @TableField("error_code")
    private Long errorCode;
src/main/java/com/zy/asrs/importexcle/ImportCrnErrDto.java
New file
@@ -0,0 +1,20 @@
package com.zy.asrs.importexcle;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
 * @author pang.jiabao
 * @description 导入堆垛机异常代码dto
 * @createDate 2024/9/2 9:55
 */
@Data
public class ImportCrnErrDto {
    @ExcelProperty(value = "序号",index = 0)
    private Long column1;
    @ExcelProperty(value = "异常描述",index = 1)
    private String column2;
}
src/main/java/com/zy/asrs/importexcle/ImportCrnErrListener.java
New file
@@ -0,0 +1,96 @@
package com.zy.asrs.importexcle;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.zy.asrs.entity.BasCrnError;
import com.zy.asrs.service.BasCrnErrorService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
 * @author pang.jiabao
 * @description 导入垛机异常表监听器
 * @createDate 2024/9/2 9:56
 */
@Slf4j
public class ImportCrnErrListener extends AnalysisEventListener<ImportCrnErrDto> {
    /**
     * 每隔1000条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 400;
    private int count = 0;
    List<ImportCrnErrDto> list = new ArrayList<>();
    /**
     * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
     */
    private final BasCrnErrorService basCrnErrorService;
    /**
     * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     */
    public ImportCrnErrListener(BasCrnErrorService basCrnErrorService) {
            this.basCrnErrorService = basCrnErrorService;
    }
    /**
     * 这个每一条数据解析都会来调用
     */
    @SneakyThrows
    @Override
    public void invoke(ImportCrnErrDto data, AnalysisContext context) {
        log.info("解析到第 {} 条数据:{}", ++count, JSON.toJSONString(data));
        if (!data.getColumn2().equals("<No value>")) {
            list.add(data);
        }
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            list.clear();
        }
    }
    /**
     * 所有数据解析完成了 都会来调用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
        if (list.size() > 0) {
            saveData();
        }
        log.info("所有数据解析完成!");
    }
    /**
     * 加上存储数据库
     */
    private void saveData() {
        log.info("{}条数据,开始存储数据库!", list.size());
        List<BasCrnError> basCrnErrors = new ArrayList<>();
        list.forEach(importCrnErrDto -> {
            BasCrnError basCrnError = new BasCrnError();
            basCrnError.setErrorCode(importCrnErrDto.getColumn1());
            basCrnError.setErrName(importCrnErrDto.getColumn2());
            basCrnErrors.add(basCrnError);
        });
        basCrnErrorService.insertBatch(basCrnErrors);
        log.info("存储数据库成功!");
    }
    /**
     *解析出现错误会进入该方法 具体看源代码或文档
     */
    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        log.error("处理异常:" + exception.getMessage());
        throw exception;
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -104,12 +104,6 @@
    @Value("${loc-move.enable}")
    private boolean enable;
    @Value("${loc-move.crn1}")
    private boolean crn1;
    @Value("${loc-move.crn2}")
    private boolean crn2;
    @Value("${loc-move.crn3}")
    private boolean crn3;
    public synchronized void generateStoreWrkFile() {
@@ -163,7 +157,6 @@
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                            && !staProtocol.isEmptyMk() && workNo >= 9000 && staProtocol.isPakMk()) {
//                    if(true){
                        // 获取条码扫描仪信息
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                        if (barcodeThread == null) {
@@ -178,15 +171,6 @@
                        if (!Cools.isEmpty(taskWrk1)) {
                            log.info("托盘码:" + BoxNo + "任务档存在");
                            continue;
//                            if (taskWrk1.getIoType() == 1 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) {
//                                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
//                                        .eq("crn_no", taskWrk1.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId()));
//                                if (Cools.isEmpty(staDesc)) {
//                                    return;
//                                } else {
//                                    continue;
//                                }
//                            }
                        }
                        if (back) {
                            storageEscalationParam.setWCSStatus(1);
@@ -210,23 +194,6 @@
                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                            staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            //添加上报日志
//                            toWmsService.addReportLog(taskWrk);
//                            if (!Cools.isEmpty(taskWrk)) {
//                                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
//                                        .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId()));
//                                staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
//                                staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
//                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                                //添加上报日志
//                                toWmsService.addReportLog(taskWrk);
//                            } else {
//                                log.info("创建工作档失败==>{}", taskWrk.getTaskNo());
//                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
//                                devpThread.setPakMk(staProtocol.getSiteId(), false);
//                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                            }
                        }
                    }
@@ -246,8 +213,6 @@
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            // 遍历堆垛机出库站
            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
//                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
//                for (StaDesc staDesc : staDescs) {
                    try {
                        // 获取堆垛机出库站信息
                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
@@ -263,13 +228,6 @@
                            if (taskWrk == null) {
                                continue;
                            }
                            // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档
//                            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, taskWrk.getCrnNo());
//                            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
//                            log.info(crnProtocol.statusType+""+crnProtocol.getForkPosType());
//                            if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(taskWrk.getWrkNo().shortValue())
//                                    && crnProtocol.statusType == CrnStatusType.HANDLING_COMPLETED
//                                    && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                                log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk));
                                staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                                staProtocol.setStaNo(Short.valueOf(taskWrk.getTargetPoint()));
@@ -284,6 +242,7 @@
                                    log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk));
                                    taskWrk.setStatus(5);
                                    taskWrk.setWrkSts(14);
                                    taskWrk.setCompleteTime(new Date());
                                    taskWrkService.updateById(taskWrk);
                                } else {
@@ -396,11 +355,12 @@
//                int workNo = commonService.getWorkNo(WorkNoType.PAKIN.type);//获取入库工作号
//                taskWrk.setWrkNo(workNo);//工作号
                taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态
                taskWrk.setAssignTime(new Date());//派发时间
                taskWrk.setExecuteTime(new Date());
//                taskWrk.setAssignTime(new Date());//派发时间
                taskWrk.setWrkSts(3);//工作状态 3.吊车入库
                taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号
                taskWrk.setModiTime(new Date());
                taskWrk.setModiUser(9988L);
//                taskWrk.setModiTime(new Date());
//                taskWrk.setModiUser(9988L);
                // 命令下发区 --------------------------------------------------------------------------
                CrnCommand crnCommand = new CrnCommand();
@@ -543,7 +503,7 @@
                                Date now = new Date();
                                taskWrk.setWrkSts(12);
                                taskWrk.setStatus(2);
                                taskWrk.setModiTime(now);
                                taskWrk.setExecuteTime(now);
                                if (taskWrkMapper.updateById(taskWrk) == 0) {
                                    log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                                }
@@ -616,6 +576,7 @@
                    Date now = new Date();
                    taskWrk.setWrkSts(12);
                    taskWrk.setStatus(2);
                    taskWrk.setExecuteTime(now);
                    taskWrk.setModiTime(now);
                    if (taskWrkMapper.updateById(taskWrk) == 0) {
                        log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
@@ -696,6 +657,7 @@
                        locMast1.setModiUser(9999L);
                        locMastService.updateById(locMast1);
                    }
                    taskWrk.setCompleteTime(new Date());
                    taskWrkService.updateById(taskWrk);
                }
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -78,14 +78,7 @@
        taskWrk.setWrkNo(workNo1);
        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
        taskWrk.setCreateTime(now);
//        try {
//            if (param.getIoType() > 1) {
//                if (Utils.locNoRowBoolean(locMast.getRow1())) {
//                    param.setTaskPriority(11);
//                }
//            }
//        } catch (Exception e) {
//        }
        taskWrk.setAssignTime(now);
        taskWrk.setIoType(param.getIoType());//任务类型
        taskWrk.setIoPri(param.getTaskPriority());//优先级
        taskWrk.setBarcode(param.getBarcode());//条码
src/main/java/com/zy/asrs/service/impl/ToWmsServiceImpl.java
@@ -171,6 +171,7 @@
        taskWrk.setWrkNo(workNo1);
        taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//任务状态:派发
        taskWrk.setCreateTime(now);
        taskWrk.setAssignTime(now);
        taskWrk.setIoType(1);//任务类型
        taskWrk.setIoPri(13);//优先级
        taskWrk.setBarcode(barcode);//条码
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -103,7 +103,7 @@
                locSts = "D";
                // 库位转移 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 11) {
                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
                locSts = "F";
                // 库位转移:目标库位
                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                if (Cools.isEmpty(locMast)) {
src/main/java/com/zy/asrs/task/TaskReportScheduler.java
@@ -7,12 +7,19 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.TaskWrkReport;
import com.zy.asrs.entity.TaskWrkReportLog;
import com.zy.asrs.entity.wms.WmsFeedback;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.TaskWrkReportLogService;
import com.zy.asrs.service.TaskWrkReportService;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.Synchro;
import lombok.extern.slf4j.Slf4j;
@@ -21,6 +28,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
@@ -46,6 +54,15 @@
    @Value("${wms.taskExecCallback}")
    private String TaskExecCallback;
    @Resource
    private TaskWrkMapper taskWrkMapper;
    @Resource
    private LocMastService locMastService;
    @Resource
    private CommonService commonService;
    @Scheduled(cron = "0/5 * * * * ? ")
@@ -99,6 +116,61 @@
    }
//    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void autoMoveLoc() {
        int flag = 1; // 1.跑23号堆垛机前7列,1号堆垛机1,9层 2.跑23号堆垛机后8-12列,1号堆垛机2-8层
        for(int i = 1; i <= 3; i++ ){
            // 获取堆垛机对应任务
            Integer count = taskWrkMapper.selectCount(new EntityWrapper<TaskWrk>().eq("crn_no", i));
            if (count == 0) {
                // 获取堆垛机巷道在库库位
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("crn_no", i));
                if (locMast != null) {
                    // 获取一个移动的目标库位
                    LocMast locMast1;
                    if (flag == 1) {
                        if (i == 1) {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").in("lev1",1,9));
                        } else {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").le("bay1",7));
                        }
                    } else {
                        if (i == 1) {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").in("lev1",2,3,4,5,6,7,8));
                        } else {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").gt("bay1",7));
                        }
                    }
                    if (locMast1 != null) {
                        // 创建移库任务
                        TaskWrk taskWrk = new TaskWrk();
                        Date now = new Date();
                        taskWrk.setTaskNo(locMast1.getLocNo());//任务号
                        taskWrk.setWrkNo(commonService.getWorkNo(WorkNoType.PAKIN.type));
                        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
                        taskWrk.setCreateTime(now);
                        taskWrk.setIoType(3);//任务类型
                        taskWrk.setIoPri(11);//优先级
                        taskWrk.setBarcode(locMast.getBarcode());//条码
                        taskWrk.setCrnNo(locMast.getCrnNo());
                        taskWrk.setWrkSts(11);
                        taskWrk.setStartPoint(locMast.getLocNo());//起点
                        taskWrk.setTargetPoint(locMast1.getLocNo());
                        taskWrkMapper.insert(taskWrk);
                        locMast1.setStatus("1");
                        locMastService.updateById(locMast1);
                    }
                }
            }
        }
    }
    private WmsFeedback getWmsFeedback(TaskWrkReport taskWrk) {
        WmsFeedback feedback = new WmsFeedback();
src/main/resources/application.yml
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://10.227.21.31:1433;databasename=glccwcs
    url: jdbc:sqlserver://10.227.21.34:1433;databasename=cosmawcs_cc
    username: cccwms
    password: pass-8686
src/main/resources/mapper/TaskWrkMapper.xml
@@ -126,7 +126,7 @@
    <select id="selectToBeHistoryData" resultMap="BaseResultMap">
        select * from dbo.wcs_task_wrk
        where 1=1
        and ((wrk_sts=14 and status=5) or status=7 or status=4 or (wrk_sts=4 and status=5))
        and ((wrk_sts=14 and status=5 and wrk_no not in (select wrk_no from asr_bas_devp)) or status=7 or status=4 or (wrk_sts=4 and status=5))
        order by io_pri desc,create_time,wrk_no ASC
    </select>
src/main/webapp/static/wms/js/locMast/locMast.js
@@ -1,11 +1,11 @@
var pageCurr;
layui.use(['table','laydate', 'form'], function(){
layui.use(['table','laydate', 'form','upload','layer'], function(){
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var upload = layui.upload;
    // 数据渲染
    tableIns = table.render({
        elem: '#locMast',
@@ -93,6 +93,28 @@
        }
    });
    upload.render({
        elem: '#uploadExcel', // 绑定元素
        url: baseUrl+'/importCrnErr', // 上传接口,替换为你的后端接口
        headers:{'token': localStorage.getItem('token')},
        accept: 'file', // 允许上传的文件类型
        exts: 'xls|xlsx', // 允许上传的文件后缀
        done: function(res){
            // 上传完毕回调
            if(res.code === 200){
                layer.msg(res.msg);
                console.log('文件数据:', res.data);
            } else {
                layer.msg(res.msg || '上传失败');
            }
        },
        error: function(){
            // 请求异常回调
            layer.msg('上传失败,请重试');
        }
    });
    // 监听排序事件
    table.on('sort(locMast)', function (obj) {
        var searchData = {};
src/main/webapp/views/locMast/locMast.html
@@ -90,6 +90,7 @@
        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>
        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">删除</button>
        <button class="layui-btn layui-btn-primary" id="btn-init" lay-event="init">初始化</button>
<!--        <button id="uploadExcel" class="layui-btn layui-btn-primary layui-btn-sm" >产品校验</button>-->
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">导出</button>
    </div>
</script>
src/main/webapp/views/taskWrkLog/taskWrkLog.html
@@ -24,7 +24,7 @@
                            <el-input v-model="tableSearchParam.wrk_no" placeholder="工作号"></el-input>
                        </el-form-item>
                        <el-form-item label="">
                            <el-input v-model="tableSearchParam.barcode" placeholder="箱号"></el-input>
                            <el-input v-model="tableSearchParam.barcode" placeholder="条码"></el-input>
                        </el-form-item>
                        <el-form-item label="">
                            <el-input v-model="tableSearchParam.start_point" placeholder="起始位"></el-input>
@@ -55,7 +55,7 @@
                        </el-table-column>
                        <el-table-column property="wrkNo" label="工作号">
                        </el-table-column>
                        <el-table-column property="createTime$" label="任务时间">
                        <el-table-column property="createTime$" label="创建时间">
                        </el-table-column>
                        <el-table-column property="durationTime" label="持续时长">
                        </el-table-column>