#
24. PDA出库成功后,界面数据重置,避免重复操作 (已修复)
25. PDA接口请求,添加一个Loading遮档 (已修复)
27. 非平库单据,在平库可做入库操作 (已修复)
29. 平库入库后,订单明细没有添加(已修复)
30. 平库入库后,单据类型没有修改(已修复)
31. 没有绑定播种位,不能进行播种,前后端都需加判定(已修复)
33. 平库入库未修改入库已完成数量(已修复)
7个文件已修改
2个文件已添加
212 ■■■■ 已修改文件
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WaveManagentController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/request/RfidSingalRequest.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/response/RfidResponse.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WaveManagentController.java
@@ -3,6 +3,8 @@
import com.mysql.cj.util.StringUtils;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.apis.wcs.entity.request.RfidSingalRequest;
import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse;
import com.zy.asrs.wms.apis.wcs.services.WaveManagentService;
import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam;
import com.zy.asrs.wms.system.controller.BaseController;
@@ -12,6 +14,9 @@
import java.util.Map;
import java.util.Objects;
/**
 * 大屏操作基本功能
 */
@RestController
@RequestMapping("/wave")
public class WaveManagentController extends BaseController {
@@ -45,6 +50,7 @@
    /**
     * 大屏获取任务明细
     * 获取当前播种中具体任务明细
     * @param param
     * @return
     */
@@ -73,6 +79,7 @@
    /***
     * 大屏获取出库列表
     * 获取当前播种中执行数据
     * @return
     */
    @GetMapping("/sow/tasks")
@@ -81,7 +88,8 @@
    }
    /**
     * 审核播种状态任务
     * 波次播种
     * 播种明细数量修改
     * @param reviewParam
     * @return
     */
@@ -126,4 +134,18 @@
        return waveManagentService.getAllOrders(waveNo);
    }
    /**
     * 信号回传接口,回传电子标签状态变化内容给上游系统。
     * 当人为操作(比如拍灯,更改数字,放箱等)导致电子标签的状态和信号等发生变化、或设备本身发生异常时,ESS接收到信号后,通过该接口将信号回传给上游系统。
     * @param request
     * @return
     */
    @PostMapping("/")
    public R rfidCallback(@RequestBody RfidSingalRequest request) {
        return R.ok();
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/request/RfidSingalRequest.java
New file
@@ -0,0 +1,48 @@
package com.zy.asrs.wms.apis.wcs.entity.request;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
public class RfidSingalRequest implements Serializable {
    /**
     * 事件名称:
     * LIGHT_OFF:灭灯。
     * DISPLAY_CHANGE:显示数字的变化。
     * TAG_ABNORMAL:电子标签异常。
     * SIGNAL:光电信号。
     */
    private String eventCode;
    /**
     * 控制器code,需要与控制器配置ptlController里code对应。
     */
    private String controllerCode;
    /**
     * 电子标签编号,需要与电子标签ptlTag里的 code对应。
     */
    private String tagCode;
    /**
     * 显示信息,数量改变时回传。
     */
    private String display;
    /**
     * 电子标签状态:
     * 0:作业完成。
     * 1:电子标签异常。
     * 2:作业取消。
     * 3:命令错误。
     * 4:连接失败
     */
    private Integer status;
    /**
     * 是否有箱子的信号:
     * 1:有箱。
     * 2:无箱。
     */
    private Integer signal;
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/response/RfidResponse.java
New file
@@ -0,0 +1,49 @@
package com.zy.asrs.wms.apis.wcs.entity.response;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
public class RfidResponse implements Serializable {
    //http://{IP:PORT}/expand/api/equipment/ptl/sendCommand
    /**
     * 控制器code,需要与控制器配置ptlController里的code对应。
     */
    private String controllerCode;
    /**
     * 电子标签序号,需要与电子标签ptlTag里的index对应。
     */
    private String index;
    /**
     * 电子标签编号,需要与电子标签ptlTag里的code对应。
     */
    private String tagCode;
    /**
     * 颜色:
     * RED
     * GREEN
     * BLUE
     */
    private String color;
    /**
     * 工作模式:
     * LIGHT:亮灯
     * DARK:灭灯
     * FLASH:闪灯
     */
    private String mode;
    /**
     * 常用于显示数字,支持3位数。
     */
    private String display;
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
@@ -150,6 +150,7 @@
    /**
     * //fixme 弃用
     * 出库任务---通知容器流动
     * 每隔3秒,获取当前出库任务列表状态为COMPLETE_OUT的任务,并通知ESS流动输送线
     */
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -995,7 +995,7 @@
    }
    /**
     * 根据不同库位类型生成出库拣单及TUC任务档
     * 根据不同库位类型生成出库拣单及CTU任务档
     *
     * @param dto
     * @param wave
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -11,6 +11,7 @@
import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam;
import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams;
import com.zy.asrs.wms.asrs.mapper.CacheSiteMapper;
import com.zy.asrs.wms.asrs.mapper.OrderDetlLogMapper;
import com.zy.asrs.wms.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.wms.asrs.mapper.SeedSitesMapper;
import com.zy.asrs.wms.asrs.service.*;
@@ -69,6 +70,9 @@
    @Autowired
    private OrderDetlMapper orderDetlMapper;
    @Autowired
    private OrderDetlLogService orderDetlLogService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean batchMergeOrders(BatchMergeOrdersParam ordersParam) {
@@ -107,8 +111,6 @@
            if (workService.generatePakIn(generatePakInParam)) {
                return true;
            }
        } else {
            //fixme 平库是否需要预约入库
        }
        return false;
    }
@@ -183,6 +185,7 @@
        waitPakins.forEach(waitPakin -> {
            WaitPakinLog pakinLog = new WaitPakinLog();
            BeanUtils.copyProperties(waitPakin, pakinLog);
            pakinLog.setIoStatus(1);
            if (!waitPakinLogService.saveOrUpdate(pakinLog)) {
                throw new CoolException("组拖历史档更新失败");
            }
@@ -199,6 +202,9 @@
            if (order.getOrderType() != OrderType.PK_IN_ORDER.id) {
                throw new CoolException("当前订单类型:" + order.getOrderType() + ",不可做平库上架操作!!");
            }
            //修改订单状态为已完成
            order.setOrderSettle(OrderSettleType.COMPLETE.val());
            OrderLog orderLog = new OrderLog();
            BeanUtils.copyProperties(order, orderLog);
            if (!orderLogService.save(orderLog)) {
@@ -210,10 +216,24 @@
        if (!orderService.removeBatchByIds(orders)) {
            throw new CoolException("订单删除失败!!");
        }
//        //删除订单明细数据
//        if (orderDetlMapper.delete(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list)) < 1) {
//            throw new CoolException("订单明细删除失败!!");
//        }
        List<OrderDetl> detls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list));
        List<OrderDetlLog> detlLogs = new ArrayList<>();
        detls.forEach(delt ->{
            OrderDetlLog detlLog = new OrderDetlLog();
            BeanUtils.copyProperties(delt, detlLog);
            detlLogs.add(detlLog);
        });
        //订单明细转历史档
        if (!orderDetlLogService.saveBatch(detlLogs)) {
            throw new CoolException("订单明细转历史失败!!");
        }
        //删除订单明细数据
        if (!orderDetlService.remove(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list))) {
            throw new CoolException("订单明细删除失败!!");
        }
        return true;
    }
@@ -317,7 +337,7 @@
        if (!remove) {
            throw new CoolException("原始订单明细删除失败!!");
        }
        if (orderService.remove(new LambdaQueryWrapper<Order>().in(Order::getId, list))) {
        if (!orderService.remove(new LambdaQueryWrapper<Order>().in(Order::getId, list))) {
            throw new CoolException("原始订单删除失败!!");
        }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java
@@ -4,15 +4,9 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds;
import com.zy.asrs.wms.asrs.entity.Order;
import com.zy.asrs.wms.asrs.entity.OrderDetl;
import com.zy.asrs.wms.asrs.entity.TaskDetl;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam;
import com.zy.asrs.wms.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.wms.asrs.mapper.OrderMapper;
import com.zy.asrs.wms.asrs.mapper.TaskDetlMapper;
import com.zy.asrs.wms.asrs.mapper.WaveSeedMapper;
import com.zy.asrs.wms.asrs.entity.WaveSeed;
import com.zy.asrs.wms.asrs.mapper.*;
import com.zy.asrs.wms.asrs.service.OrderDetlService;
import com.zy.asrs.wms.asrs.service.WaveSeedService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -35,6 +29,9 @@
    private OrderDetlMapper orderDetlMapper;
    @Autowired
    private TaskDetlMapper taskDetlMapper;
    @Autowired
    private CacheSiteMapper cacheSiteMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -60,7 +57,10 @@
            throw new CoolException("播种数据不存在");
        }
        List<CacheSite> sites = cacheSiteMapper.selectList(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, waveSeed.getOrderNo()));
        if (sites.isEmpty()) {
            throw new CoolException("当前订单未绑定播种库位,请绑定后再操作!!");
        }
        Double stock = Optional.of(waveSeed.getAnfme() - waveSeed.getWorkQty()).orElse(0.0D);
        if (stock - param.getReviewNum() < 0) {
@@ -81,6 +81,9 @@
            throw new CoolException("当前播种订单明细不存在!!");
        }
        orderDetl.setWorkQty(orderDetl.getWorkQty() + param.getReviewNum());
        if (orderDetl.getWorkQty() + orderDetl.getQty() > orderDetl.getAnfme()) {
            throw new CoolException("请核对明细数量后,再进行操作!!");
        }
        if (orderDetlMapper.updateById(orderDetl) < 1) {
            throw new CoolException("订单明细数量更新失败");
        }
@@ -89,7 +92,6 @@
        if (!this.updateById(waveSeed)) {
            throw new CoolException("播种复核更新失败");
        }
    }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -226,7 +226,7 @@
                    return defaultLoc;
                }
            }
            //fixme 如果没有相邻库位是否考虑推荐库位
            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) {
                //获取推荐库位
                List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), batch, locTypeHeight, laneRowList, currentLev);
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -155,19 +155,6 @@
                task.setTaskSts(TaskStsType.UPDATED_OUT.id);//200.库存更新完成
                if (!taskService.updateById(task)) {
                    throw new CoolException("库存更新失败");
                } else {
                    //CacheSite 释放已被占用的通道 //fixme 播种功能完成后,需要将这里注释掉
//                    List<TaskDetl> detls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId()));
//                    if (!Collections.isEmpty(detls)) {
//                        List<Long> waveIds = detls.stream().map(TaskDetl::getWaveId).collect(Collectors.toList());
//                        List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getWaveId, waveIds));
//                        List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
//                        cacheSiteService.update(new LambdaUpdateWrapper<CacheSite>()
//                                .in(CacheSite::getOrderId, orderIds)
//                                .set(CacheSite::getSiteStatus, 0)
//                                .set(CacheSite::getOrderId, null)
//                                .set(CacheSite::getOrderNo, null));
//                    }
                }
            }
        } catch (Exception e) {
@@ -216,10 +203,9 @@
            if (!locDetlService.save(locDetl)) {
                throw new CoolException("插入库存明细失败");
            }
            //fixme 暂时关闭HOSTID,后续打开机构ID
            //添加库存明细扩展字段
//            List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId));
            List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()));
            List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId));
            for (TaskDetlField detlField : detlFields) {
                LocDetlField locDetlField = new LocDetlField();
                locDetlField.setDetlId(locDetl.getId());
@@ -232,10 +218,8 @@
                }
            }
        }
        //fixme 暂时关闭HOSTID,后续打开机构ID
        //组托通知档转历史档
//        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, task.getBarcode()).eq(WaitPakin::getHostId, hostId));
        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, task.getBarcode()));
        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, task.getBarcode()).eq(WaitPakin::getHostId, hostId));
        if (waitPakins.isEmpty()) {
            throw new CoolException("组托通知档不存在");
        }
@@ -342,8 +326,8 @@
    private void executeTask53(Task task) {
        Long hostId = task.getHostId();
        //fixme 将任务当前
//        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()).eq(Loc::getHostId, hostId));
        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()));
        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()).eq(Loc::getHostId, hostId));
//        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()));
        if (loc == null) {
            throw new CoolException("库位不存在");
        }
@@ -385,9 +369,7 @@
            }
            //添加库存明细扩展字段
            //fixme 注释
//            List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId));
            List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()));
            List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()).eq(TaskDetlField::getHostId, hostId));
            for (TaskDetlField detlField : detlFields) {
                LocDetlField locDetlField = new LocDetlField();
                locDetlField.setDetlId(locDetl.getId());