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());