diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java index 4895b70..2bc161d 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java @@ -3,6 +3,7 @@ package org.nl.wms.basedata_manage.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; @@ -18,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.Map; import java.util.Set; @@ -98,6 +100,13 @@ public class GroupController { return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/outReceiveGroup") + @Log("退料组盘") + public ResponseEntity outReceiveGroup(@RequestBody GroupPlate dto) { + iMdPbGroupplateService.outReceiveGroup(dto); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/getPcsn") @Log("获取批次下拉框") public ResponseEntity getPcsn() { diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/controller/BomCallMaterialController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/controller/BomCallMaterialController.java index 40ee127..6f74601 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/controller/BomCallMaterialController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/controller/BomCallMaterialController.java @@ -1,6 +1,7 @@ package org.nl.wms.pdm_manage.controller; +import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; @@ -64,15 +65,21 @@ public class BomCallMaterialController { @PostMapping("/startBom") @Log("提交叫料单") public ResponseEntity startBom(@RequestBody PdmBomCallMaterial dao) { - iPdmBomCallMaterialService.startBom(dao); + iPdmBomCallMaterialService.startBom(dao); return new ResponseEntity<>(HttpStatus.CREATED); } @PostMapping("/confirm") @Log("强制确认叫料单") public ResponseEntity confirm(@RequestBody PdmBomCallMaterial dao) { - iPdmBomCallMaterialService.confirm(dao); + iPdmBomCallMaterialService.confirm(dao); return new ResponseEntity<>(HttpStatus.CREATED); } + @PostMapping("/queryMaterialBom") + @Log("查询当天工单") + public ResponseEntity queryMaterialBom(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(iPdmBomCallMaterialService.queryMaterialBom(whereJson), HttpStatus.OK); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/IPdmBomCallMaterialService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/IPdmBomCallMaterialService.java index 2f46353..a3b01b3 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/IPdmBomCallMaterialService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/IPdmBomCallMaterialService.java @@ -1,11 +1,13 @@ package org.nl.wms.pdm_manage.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.wms.pdm_manage.service.dao.PdmBomCallMaterial; import org.nl.wms.pdm_manage.service.dto.PdmBomCallMaterialDto; +import java.util.List; import java.util.Map; import java.util.Set; @@ -78,5 +80,12 @@ public interface IPdmBomCallMaterialService extends IService */ void confirm(PdmBomCallMaterial dao); - + /** + * 查询当天工单 + * @param whereJson { + * material_id + * } + * @return List + */ + List queryMaterialBom(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/PdmBomCallMaterialDtl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/PdmBomCallMaterialDtl.java index 15060ec..8e920be 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/PdmBomCallMaterialDtl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/PdmBomCallMaterialDtl.java @@ -94,4 +94,14 @@ public class PdmBomCallMaterialDtl implements Serializable { */ private String confirm_time; + /** + * 备注 + */ + private String remark; + + /** + * 组盘标识 + */ + private String group_id; + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/mapper/PdmBomCallMaterialDtlMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/mapper/PdmBomCallMaterialDtlMapper.xml index 7cd2590..fa433cc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/mapper/PdmBomCallMaterialDtlMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/dao/mapper/PdmBomCallMaterialDtlMapper.xml @@ -19,7 +19,7 @@ INNER JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id LEFT JOIN st_ivt_structattr attr ON attr.struct_code = dtl.struct_code - mst.bom_status IN ('3','4') + mst.bom_status IN ('2','3','4') AND (mater.material_code LIKE #{param.material_code} or diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/impl/PdmBomCallMaterialDtlServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/impl/PdmBomCallMaterialDtlServiceImpl.java index e3c2ee1..291b87e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/impl/PdmBomCallMaterialDtlServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm_manage/service/impl/PdmBomCallMaterialDtlServiceImpl.java @@ -149,9 +149,14 @@ public class PdmBomCallMaterialDtlServiceImpl extends ServiceImpl queryMaterialBom(JSONObject whereJson) { + return this.list( + new QueryWrapper().lambda() + .eq(PdmBomCallMaterial::getStart_time, DateUtil.today()) + .eq(PdmBomCallMaterial::getMaterial_id, whereJson.getString("material_id")) + .eq(PdmBomCallMaterial::getBom_status, BomEnum.CALL_BOM_STATUS.code("完成")) + .orderByDesc(PdmBomCallMaterial::getReal_weigh_qty) + ); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java index 93344cb..1519589 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBasePointController.java @@ -109,4 +109,30 @@ public class SchBasePointController { schBasePointService.cleanMaterial(dao); return new ResponseEntity<>(HttpStatus.OK); } + + @Log("获取直接退料载具下拉框") + @PostMapping("/getVehicleCode") + public ResponseEntity getVehicleCode() { + return new ResponseEntity<>(schBasePointService.getVehicleCode(),HttpStatus.OK); + } + + @Log("直接退料") + @PostMapping("/confirmReceive") + public ResponseEntity confirmReceive(@RequestBody JSONObject whereJson) { + schBasePointService.confirmReceive(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("获取二次退料载具下拉框") + @PostMapping("/getTwoVehicleCode") + public ResponseEntity getTwoVehicleCode() { + return new ResponseEntity<>(schBasePointService.getTwoVehicleCode(),HttpStatus.OK); + } + + @Log("二次退料") + @PostMapping("/confirmTwoReceive") + public ResponseEntity confirmTwoReceive(@RequestBody JSONObject whereJson) { + schBasePointService.confirmTwoReceive(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java index 3e88077..b3bc6b1 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dto.SchBasePointQuery; import java.util.List; @@ -124,4 +125,32 @@ public interface ISchBasePointService extends IService { * @param dao 实体类 */ void cleanMaterial(SchBasePoint dao); + + /** + * 获取直接退料载具下拉框 + * @return List + */ + List getVehicleCode(); + + /** + * 直接退料 + * @param whereJson { + * vehicle_code: 载具编码 + * } + */ + void confirmReceive(JSONObject whereJson); + + /** + * 获取二次退料载具下拉框 + * @return List + */ + List getTwoVehicleCode(); + + /** + * 二次退料 + * @param whereJson { + * vehicle_code: 载具编码 + * } + */ + void confirmTwoReceive(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml index 03247df..fd3b319 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml @@ -144,7 +144,8 @@ AND (tc.config_code = #{param.config_code} OR - tc.config_code = 'PdaPointTask') + tc.config_code = 'PdaPointTask' OR + tc.config_code = 'CallReceiveEmpTask') ORDER BY t.create_time DESC diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java index 7bf0364..60d8d3f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java @@ -28,6 +28,8 @@ import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper; import org.nl.wms.sch_manage.service.dao.mapper.SchBaseRegionMapper; import org.nl.wms.sch_manage.service.dto.SchBasePointQuery; import org.nl.wms.sch_manage.service.util.PointUtils; +import org.nl.wms.sch_manage.service.util.tasks.CallReceiveEmpTask; +import org.nl.wms.sch_manage.service.util.tasks.ReceiveOutThreePointTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; @@ -306,4 +308,78 @@ public class SchBasePointServiceImpl extends ServiceImpl getVehicleCode() { + // 查询正在执行的领料出库AGV三点任务 + return iSchBaseTaskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .eq(SchBaseTask::getConfig_code, ReceiveOutThreePointTask.class.getSimpleName()) + .eq(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()) + ); + } + + @Override + public void confirmReceive(JSONObject whereJson) { + // 查询当前载具正在执行的领料出库AGV三点任务 + List vehicleList = iSchBaseTaskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .eq(SchBaseTask::getConfig_code, ReceiveOutThreePointTask.class.getSimpleName()) + .eq(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()) + .eq(SchBaseTask::getVehicle_code, whereJson.getString("vehicle_code")) + ); + if (ObjectUtil.isEmpty(vehicleList)) { + throw new BadRequestException("当前载具没有正在执行的领料任务【"+whereJson.getString("vehicle_code")+"】"); + } + if (vehicleList.size() > 1) { + throw new BadRequestException("当前载具存在多条领料任务【"+whereJson.getString("vehicle_code")+"】"); + } + + // 通知ACS可以离开 + SchBaseTask taskDao = vehicleList.get(0); + JSONObject jsonParam = new JSONObject(); + jsonParam.put("task_type", IOSConstant.TWO); + jsonParam.put("task_code", taskDao.getTask_code()); + jsonParam.put("point_code", taskDao.getPoint_code2()); + wmsToAcsService.confirmAgv(jsonParam); + } + + @Override + public List getTwoVehicleCode() { + // 查询正在执行的空载具出库AGV三点任务 + return iSchBaseTaskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .eq(SchBaseTask::getConfig_code, CallReceiveEmpTask.class.getSimpleName()) + .eq(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()) + ); + } + + @Override + public void confirmTwoReceive(JSONObject whereJson) { + // 查询当前载具正在执行的空载具出库AGV三点任务 + List vehicleList = iSchBaseTaskService.list( + new QueryWrapper().lambda() + .eq(SchBaseTask::getIs_delete, IOSConstant.ZERO) + .eq(SchBaseTask::getConfig_code, CallReceiveEmpTask.class.getSimpleName()) + .eq(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()) + .eq(SchBaseTask::getVehicle_code, whereJson.getString("vehicle_code")) + ); + if (ObjectUtil.isEmpty(vehicleList)) { + throw new BadRequestException("当前载具没有正在执行的空料箱出库AGV任务【"+whereJson.getString("vehicle_code")+"】"); + } + if (vehicleList.size() > 1) { + throw new BadRequestException("当前载具存在多条空料箱出库AGV任务【"+whereJson.getString("vehicle_code")+"】"); + } + + // 通知ACS可以离开 + SchBaseTask taskDao = vehicleList.get(0); + JSONObject jsonParam = new JSONObject(); + jsonParam.put("task_type", IOSConstant.TWO); + jsonParam.put("task_code", taskDao.getTask_code()); + jsonParam.put("point_code", taskDao.getPoint_code2()); + wmsToAcsService.confirmAgv(jsonParam); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java index 45ee891..78fc470 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/BackInTask.java @@ -15,6 +15,11 @@ import org.nl.config.SpringContextHolder; import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.pdm_manage.enums.BomEnum; +import org.nl.wms.pdm_manage.service.IPdmBomCallMaterialDtlService; +import org.nl.wms.pdm_manage.service.IPdmBomCallMaterialService; +import org.nl.wms.pdm_manage.service.dao.PdmBomCallMaterial; +import org.nl.wms.pdm_manage.service.dao.PdmBomCallMaterialDtl; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; @@ -27,16 +32,22 @@ import org.nl.wms.sch_manage.service.util.AcsTaskDto; import org.nl.wms.sch_manage.service.util.TaskType; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; import org.nl.wms.warehouse_management.service.IRawAssistIStorService; +import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.nl.wms.warehouse_management.service.dao.IOStorInv; import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** *

@@ -58,12 +69,33 @@ public class BackInTask extends AbstractTask { @Resource private IOStorInvDisMapper ioStorInvDisMapper; + @Resource + private IOStorInvDtlMapper ioStorInvDtlMapper; + /** * 点位服务 */ @Autowired private ISchBasePointService iSchBasePointService; + /** + * 组盘服务 + */ + @Autowired + private IMdPbGroupplateService iMdPbGroupplateService; + + /** + * BOM服务 + */ + @Autowired + private IPdmBomCallMaterialService iPdmBomCallMaterialService; + + /** + * BOM明细服务 + */ + @Autowired + private IPdmBomCallMaterialDtlService iPdmBomCallMaterialDtlService; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -226,6 +258,17 @@ public class BackInTask extends AbstractTask { ); // 查询主表 IOStorInv mstDao = rawAssistIStorService.getById(disDaiList.get(0).getIostorinv_id()); + // 判断组盘是否是二次退料组盘 + GroupPlate late = iMdPbGroupplateService.getOne( + new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) + ); + if (ObjectUtil.isNotEmpty(late.getBom_list())) { + // 重新计算并分配工单重量 + late.setQty(BigDecimal.valueOf(Double.parseDouble(taskObj.getWeigh_qty()))); + return twoReceive(late, taskObj, disDaiList, mstDao); + } // 校验称重重量与组盘重量是否相符 SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class); @@ -266,4 +309,170 @@ public class BackInTask extends AbstractTask { } return resultJson; } + + /** + * 计算二次退料 + * + * @param dto 组盘实体类 + * @param taskObj 任务实体类 + * @return JSONObject + */ + private JSONObject twoReceive(GroupPlate dto, SchBaseTask taskObj, List disDaiList, IOStorInv mstDao) { + // 返回数据 + JSONObject resultJson = new JSONObject(); + // 查询明细 + List bomDtlList = iPdmBomCallMaterialDtlService.list( + new QueryWrapper().lambda() + .eq(PdmBomCallMaterialDtl::getGroup_id, dto.getGroup_id()) + ); + // 查询主bom + List bomMstList = iPdmBomCallMaterialService.list( + new QueryWrapper().lambda() + .in(PdmBomCallMaterial::getBom_id, bomDtlList.stream() + .map(PdmBomCallMaterialDtl::getBom_id) + .collect(Collectors.toList())) + ); + // 更新bom已用料重量 + for (PdmBomCallMaterialDtl dtl : bomDtlList) { + PdmBomCallMaterial mst = bomMstList.stream() + .filter(row -> row.getBom_id().equals(dtl.getBom_id())) + .findFirst().orElse(null); + mst.setReal_weigh_qty(NumberUtil.add(mst.getReal_weigh_qty(), dtl.getOut_qty())); + mst.setBom_status(BomEnum.CALL_BOM_STATUS.code("完成")); + iPdmBomCallMaterialService.updateById(mst); + } + // 删除明细 + iPdmBomCallMaterialDtlService.removeByIds(bomDtlList.stream() + .map(PdmBomCallMaterialDtl::getBomdtl_id) + .collect(Collectors.toList())); + try { + // 调用重新计算 + outReceiveSum(dto); + // 更新组盘重量 + iMdPbGroupplateService.updateById(dto); + // 更新入库分配明细重量 + disDaiList.forEach(item -> { + item.setPlan_qty(dto.getQty()); + item.setReal_qty(dto.getQty()); + ioStorInvDisMapper.updateById(item); + }); + // 更新明细 + IOStorInvDtl iosDtl = ioStorInvDtlMapper.selectById(disDaiList.get(0).getIostorinvdtl_id()); + iosDtl.setPlan_qty(dto.getQty()); + iosDtl.setReal_qty(dto.getQty()); + iosDtl.setAssign_qty(dto.getQty()); + ioStorInvDtlMapper.updateById(iosDtl); + // 跟更新主表 + mstDao.setTotal_qty(dto.getQty()); + rawAssistIStorService.updateById(mstDao); + + // 更新任务重量 + taskObj.setMaterial_qty(dto.getQty()); + taskService.updateById(taskObj); + resultJson.put("is_weigh", IOSConstant.ONE); + } catch (Exception e) { + // 取消任务 + this.cancelTask(taskObj); + // 备注任务 + SchBaseTask taskDao = taskService.getById(taskObj.getTask_id()); + taskDao.setRemark("已取消-所选工单重量不够退料,请重新退料组盘!称重重量为【" + dto.getQty() + "】"); + taskService.updateById(taskDao); + + // 取消分配及删除单据 + ArrayList tableMater = new ArrayList<>(); + disDaiList.forEach(item -> { + tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); + }); + Map map = new HashMap<>(); + map.put("tableMater", tableMater); + rawAssistIStorService.unDivStruct(map); + // 删除单据 + String[] ids = {mstDao.getIostorinv_id()}; + rawAssistIStorService.deleteAll(ids); + + // 删除组盘信息 + iMdPbGroupplateService.removeById(dto); + resultJson.put("is_weigh", IOSConstant.ZERO); + } + return resultJson; + } + + public void outReceiveSum(GroupPlate dto) { + // 转换为集合 + String cleanStr = dto.getBom_list().trim() + .replaceAll("^\\[|\\]$", "") + .replaceAll("\\s+", ""); + List bomCodeList = new ArrayList<>(); + if (!cleanStr.isEmpty()) { + bomCodeList = Arrays.asList(cleanStr.split(",")); + } + // 查询所选工单 + List bomDaoList = iPdmBomCallMaterialService.list( + new QueryWrapper().lambda() + .in(PdmBomCallMaterial::getBom_code, bomCodeList) + .orderByDesc(PdmBomCallMaterial::getReal_weigh_qty) + ); + // 判断工单总的可退重量是否满足组盘总量 + Double sumQty = bomDaoList.stream() + .map(row -> row.getReal_weigh_qty().doubleValue()) + .reduce(Double::sum) + .orElse(0.00); + + double group_qty = dto.getQty().doubleValue(); + if (sumQty < group_qty) { + throw new BadRequestException("当前所选工单不满足退料重量,当前所选工单重量为【" + sumQty + "】"); + } + + // 进行工单分配重量 + for (PdmBomCallMaterial dao : bomDaoList) { + double bom_qty = dao.getReal_weigh_qty().doubleValue(); + + if (bom_qty >= group_qty) { + // 创建退料明细 + createBomDtl(dao, dto, group_qty); + break; + } else { + // 创建退料明细 + createBomDtl(dao, dto, bom_qty); + group_qty = NumberUtil.sub(group_qty, bom_qty); + } + } + } + + /** + * 创建退料明细 + * + * @param dao bom实体类 + * @param plate 组盘实体类 + * @param qty 需要减扣的数量 + */ + public void createBomDtl(PdmBomCallMaterial dao, GroupPlate plate, double qty) { + // 查询当前随便一个退料明细 + List dtlList = iPdmBomCallMaterialDtlService.list( + new QueryWrapper().lambda() + .eq(PdmBomCallMaterialDtl::getBom_id, dao.getBom_id()) + ); + PdmBomCallMaterialDtl dtlDao = dtlList.get(0); + dtlDao.setBomdtl_id(IdUtil.getStringId()); + dtlDao.setPcsn(plate.getPcsn()); + dtlDao.setVehicle_code(plate.getStoragevehicle_code()); + dtlDao.setBom_status(BomEnum.CALL_BOM_DTL_STATUS.code("完成")); + dtlDao.setOut_qty(BigDecimal.valueOf(qty)); + dtlDao.setWeigh_qty(BigDecimal.ZERO); + // TODO dtlDao.setCreate_id(SecurityUtils.getCurrentUserId()); + // TODO dtlDao.setCreate_name(SecurityUtils.getCurrentNickName()); + dtlDao.setCreate_id("1"); + dtlDao.setCreate_name("管理员"); + + dtlDao.setCreate_time(DateUtil.now()); + dtlDao.setConfirm_time(DateUtil.now()); + dtlDao.setRemark("由退料组盘创建"); + dtlDao.setGroup_id(plate.getGroup_id()); + iPdmBomCallMaterialDtlService.save(dtlDao); + + // 更新主bom + dao.setReal_weigh_qty(NumberUtil.sub(dao.getReal_weigh_qty(), qty)); + dao.setBom_status(BomEnum.CALL_BOM_STATUS.code("完成")); + iPdmBomCallMaterialService.updateById(dao); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallReceiveEmpTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallReceiveEmpTask.java new file mode 100644 index 0000000..24a64ca --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CallReceiveEmpTask.java @@ -0,0 +1,220 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.ACSTaskTypeEnum; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + *

+ * 呼叫退料空载具任务类 + *

+ * + * @author Liuxy + * @since 2026-01-04 + */ +@Component(value = "CallReceiveEmpTask") +@TaskType("CallReceiveEmpTask") +public class CallReceiveEmpTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(CallReceiveEmpTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setPoint_code3(json.getString("point_code3")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setTask_type(TaskEnum.TASK_TYPE.code("载具")); + task.setExt_group_data(json.getString("ext_group_data")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setContact_task(json.getString("contact_task")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 + this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ONE); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + acsTaskDto.setIs_get_pause(IOSConstant.ZERO); + acsTaskDto.setIs_put_pause(IOSConstant.ZERO); + return acsTaskDto; + } + + @Override + @Transactional + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + // 更新明细状态 + this.executing(taskObj); + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Override + @Transactional + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + @Transactional + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { + throw new BadRequestException("只能取消生成中的任务!"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } + + @Override + public JSONObject resultWeigh(SchBaseTask taskObj) { + return null; + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 更新point_code2 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getVehicle_code, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新更新point_code1 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) + ); + // 更新任务 + taskObj.setRemark("已完成"); + taskObj.setUpdate_time(DateUtil.now()); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新point_code1 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新point_code2 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新任务 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } + + private void executing(SchBaseTask taskObj) { + // 更新起点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + ); + // 更新终点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + ); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleOutTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleOutTask.java index b26a598..e876f42 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleOutTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleOutTask.java @@ -64,6 +64,12 @@ public class EmpVehicleOutTask extends AbstractTask { @Resource private PdaPointTask pdaPointTask; + /** + * 呼叫退料空载具任务服务 + */ + @Resource + private CallReceiveEmpTask callReceiveEmpTask; + @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -201,6 +207,11 @@ public class EmpVehicleOutTask extends AbstractTask { if (ObjectUtil.isNotEmpty(taskObj.getPoint_code3())) { createAgvTask(taskObj); } + + // 判断point_code4是否有值; 有值需要生成 呼叫退料空载具任务 + if (ObjectUtil.isNotEmpty(taskObj.getPoint_code4())) { + callOutReceiveTask(taskObj); + } } @Transactional @@ -231,4 +242,18 @@ public class EmpVehicleOutTask extends AbstractTask { jsonTask.put("task_type", TaskEnum.TASK_TYPE.code("载具")); pdaPointTask.create(jsonTask); } + + /** + * 生成退料空载具任务至产线 + * + * @param taskObj 任务实体类 + */ + private void callOutReceiveTask(SchBaseTask taskObj) { + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", IOSConstant.CZW_POINT); + jsonTask.put("point_code2", taskObj.getPoint_code4()); + jsonTask.put("vehicle_code", taskObj.getVehicle_code()); + jsonTask.put("task_type", TaskEnum.TASK_TYPE.code("载具")); + callReceiveEmpTask.create(jsonTask); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutTask.java index 0714a4b..c77a9cc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutTask.java @@ -85,10 +85,10 @@ public class ReceiveOutTask extends AbstractTask { private IPdmBomCallMaterialDtlService iPdmBomCallMaterialDtlService; /** - * 点对点任务类 + * 领料出库三点AGV任务类 */ @Resource - private PdaPointTask pdaPointTask; + private ReceiveOutThreePointTask receiveOutThreePointTask; @Override public String create(JSONObject json) { @@ -278,7 +278,7 @@ public class ReceiveOutTask extends AbstractTask { } /** - * 生成点位点任务:称重位至库外站点 + * 生成退料三点任务:称重位至库外站点 * * @param taskObj 任务实体类 */ @@ -290,6 +290,6 @@ public class ReceiveOutTask extends AbstractTask { jsonTask.put("task_type", TaskEnum.TASK_TYPE.code("料箱")); jsonTask.put("material_id", taskObj.getMaterial_id()); jsonTask.put("material_qty", taskObj.getMaterial_qty()); - pdaPointTask.create(jsonTask); + receiveOutThreePointTask.create(jsonTask); } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutThreePointTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutThreePointTask.java new file mode 100644 index 0000000..5920434 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/ReceiveOutThreePointTask.java @@ -0,0 +1,224 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.sch_manage.service.util.ACSTaskTypeEnum; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.VehicleInService; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + *

+ * 领料出库三点AGV任务类 + *

+ * + * @author Liuxy + * @since 2026-01-04 + */ +@Component(value = "ReceiveOutThreePointTask") +@TaskType("ReceiveOutThreePointTask") +public class ReceiveOutThreePointTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(ReceiveOutThreePointTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setPoint_code3(json.getString("point_code3")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setMaterial_id(json.getString("material_id")); + task.setMaterial_qty(json.getBigDecimal("material_qty")); + task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + task.setExt_group_data(json.getString("ext_group_data")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setContact_task(json.getString("contact_task")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 + this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ONE); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + acsTaskDto.setIs_get_pause(IOSConstant.ZERO); + acsTaskDto.setIs_put_pause(IOSConstant.ZERO); + return acsTaskDto; + } + + @Override + @Transactional + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + // 更新明细状态 + this.executing(taskObj); + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Override + @Transactional + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + @Transactional + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { + throw new BadRequestException("只能取消生成中的任务!"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } + + @Override + public JSONObject resultWeigh(SchBaseTask taskObj) { + return null; + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 更新point_code2 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getVehicle_code, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新更新point_code1 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空载具")) + ); + // 更新任务 + taskObj.setRemark("已完成"); + taskObj.setUpdate_time(DateUtil.now()); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新point_code1 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新point_code2 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新任务 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } + + private void executing(SchBaseTask taskObj) { + // 更新起点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + ); + // 更新终点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) + ); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/VehicleOutController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/VehicleOutController.java index d8a5869..bfb064b 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/VehicleOutController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/VehicleOutController.java @@ -46,4 +46,11 @@ public class VehicleOutController { return new ResponseEntity<>(HttpStatus.CREATED); } + @PostMapping("/confirmOutEmp") + @Log("呼叫退料空载具") + public ResponseEntity confirmOutEmp(@RequestBody JSONObject whereJson) { + vehicleOutService.confirmOutEmp(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java index 61fb225..e30aa90 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java @@ -3,6 +3,7 @@ package org.nl.wms.warehouse_management.service; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.fasterxml.jackson.core.JsonProcessingException; import org.nl.common.domain.query.PageQuery; import org.nl.wms.basedata_manage.service.dao.MdCsSupplierbase; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; @@ -38,8 +39,9 @@ public interface IMdPbGroupplateService extends IService { * 新增组盘记录 * * @param dto 组盘记录实体类 + * @return String */ - void create(GroupPlate dto); + String create(GroupPlate dto); /** * 修改组盘记录 @@ -111,4 +113,10 @@ public interface IMdPbGroupplateService extends IService { * @return PdaResponse */ PdaResponse getPcsn(); + + /** + * 退料组盘 + * @param dto 实体类 + */ + void outReceiveGroup(GroupPlate dto); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/VehicleOutService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/VehicleOutService.java index fa21953..773f60a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/VehicleOutService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/VehicleOutService.java @@ -34,4 +34,14 @@ public interface VehicleOutService { * } */ void create(JSONObject whereJson); + + /** + * 呼叫退料空载具 + * + * @param whereJson { + * point_code: 出库点位 + * sect_code: 库区编码 + * } + */ + void confirmOutEmp(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/GroupPlate.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/GroupPlate.java index eaa0b24..f7cb906 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/GroupPlate.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/GroupPlate.java @@ -1,11 +1,20 @@ package org.nl.wms.warehouse_management.service.dao; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import lombok.Data; +import java.io.IOException; import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** * @author Liuxy @@ -139,4 +148,23 @@ public class GroupPlate implements Serializable { * 是否退料 */ private String is_return; + + /** + * 工单集合 + */ + @JsonDeserialize(using = ArrayToStringDeserializer.class) + private String bom_list; + + // 自定义反序列化逻辑 + static class ArrayToStringDeserializer extends JsonDeserializer { + @Override + public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + GroupPlate groupPlate = JSONObject.parseObject(JSONObject.toJSONString(p.getCurrentValue()), GroupPlate.class); + if (ObjectUtil.isEmpty(groupPlate)) { + List list = p.readValueAs(List.class); + return list.toString(); + } + return null; + } + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java index 1cd85b4..8b6f86a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java @@ -2,13 +2,18 @@ package org.nl.wms.warehouse_management.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.EasyExcel; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; @@ -25,6 +30,11 @@ import org.nl.wms.basedata_manage.service.dao.MdPbMeasureunit; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; import org.nl.wms.pda.general_management.service.PdaInGroupBoxService; import org.nl.wms.pda.util.PdaResponse; +import org.nl.wms.pdm_manage.enums.BomEnum; +import org.nl.wms.pdm_manage.service.IPdmBomCallMaterialDtlService; +import org.nl.wms.pdm_manage.service.IPdmBomCallMaterialService; +import org.nl.wms.pdm_manage.service.dao.PdmBomCallMaterial; +import org.nl.wms.pdm_manage.service.dao.PdmBomCallMaterialDtl; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; @@ -32,15 +42,14 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.math.BigDecimal; +import java.util.*; /** *

@@ -83,6 +92,18 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), @@ -91,7 +112,7 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl bomCodeList = new ArrayList<>(); + if (!cleanStr.isEmpty()) { + bomCodeList = Arrays.asList(cleanStr.split(",")); + } + // 查询所选工单 + List bomDaoList = iPdmBomCallMaterialService.list( + new QueryWrapper().lambda() + .in(PdmBomCallMaterial::getBom_code, bomCodeList) + .orderByDesc(PdmBomCallMaterial::getReal_weigh_qty) + ); + // 判断工单总的可退重量是否满足组盘总量 + Double sumQty = bomDaoList.stream() + .map(row -> row.getReal_weigh_qty().doubleValue()) + .reduce(Double::sum) + .orElse(0.00); + + double group_qty = dto.getQty().doubleValue(); + if (sumQty < group_qty) { + throw new BadRequestException("当前所选工单不满足退料重量,当前所选工单重量为【" + sumQty + "】"); + } + + // 进行工单分配重量 + for (PdmBomCallMaterial dao : bomDaoList) { + double bom_qty = dao.getReal_weigh_qty().doubleValue(); + + if (bom_qty >= group_qty) { + // 创建退料明细 + createBomDtl(dao, dto, group_qty); + break; + } else { + // 创建退料明细 + createBomDtl(dao, dto, bom_qty); + group_qty = NumberUtil.sub(group_qty, bom_qty); + } + } + + } + + /** + * 创建退料明细 + * + * @param dao bom实体类 + * @param plate 组盘实体类 + * @param qty 需要减扣的数量 + */ + public void createBomDtl(PdmBomCallMaterial dao, GroupPlate plate, double qty) { + // 查询当前随便一个退料明细 + List dtlList = iPdmBomCallMaterialDtlService.list( + new QueryWrapper().lambda() + .eq(PdmBomCallMaterialDtl::getBom_id, dao.getBom_id()) + ); + PdmBomCallMaterialDtl dtlDao = dtlList.get(0); + dtlDao.setBomdtl_id(IdUtil.getStringId()); + dtlDao.setPcsn(plate.getPcsn()); + dtlDao.setVehicle_code(plate.getStoragevehicle_code()); + dtlDao.setBom_status(BomEnum.CALL_BOM_DTL_STATUS.code("生成")); + dtlDao.setOut_qty(BigDecimal.valueOf(qty)); + dtlDao.setWeigh_qty(BigDecimal.ZERO); + dtlDao.setCreate_id(SecurityUtils.getCurrentUserId()); + dtlDao.setCreate_name(SecurityUtils.getCurrentNickName()); + dtlDao.setCreate_time(DateUtil.now()); + dtlDao.setConfirm_time( "" ); + dtlDao.setRemark("由退料组盘创建"); + dtlDao.setGroup_id(plate.getGroup_id()); + iPdmBomCallMaterialDtlService.save(dtlDao); + + // 更新主bom + dao.setReal_weigh_qty(NumberUtil.sub(dao.getReal_weigh_qty(), qty)); + dao.setBom_status(BomEnum.CALL_BOM_STATUS.code("退料中")); + iPdmBomCallMaterialService.updateById(dao); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java index 13e5fe9..67d5183 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java @@ -695,6 +695,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl(GroupPlate.class) .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) .set(ioStorInv.getBill_type().equals(IOSEnum.IN_BILL_TYPE.code("退料入库")),GroupPlate::getIs_return, IOSConstant.ONE) + .set(GroupPlate::getBom_list,"") .eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()) .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) .eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id()) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/VehicleOutServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/VehicleOutServiceImpl.java index 297a059..0c46e30 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/VehicleOutServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/VehicleOutServiceImpl.java @@ -10,9 +10,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.Structattr; -import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper; -import org.nl.wms.sch_manage.service.util.tasks.EmpOutMoveTask; import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; @@ -42,12 +40,6 @@ public class VehicleOutServiceImpl implements VehicleOutService { @Autowired private SchBaseTaskMapper schBaseTaskMapper; - /** - * 任务服务 - */ - @Autowired - private ISchBaseTaskService iSchBaseTaskService; - /** * 仓位服务 */ @@ -60,12 +52,6 @@ public class VehicleOutServiceImpl implements VehicleOutService { @Resource private EmpVehicleOutTask empVehicleOutTask; - /** - * 空载具出库移库任务类 - */ - @Autowired - private EmpOutMoveTask empOutMoveTask; - @Override public IPage queryAll(Map whereJson, PageQuery page) { whereJson.put("config_code", EmpVehicleOutTask.class.getSimpleName()); @@ -80,55 +66,7 @@ public class VehicleOutServiceImpl implements VehicleOutService { if (ObjectUtil.isEmpty(attrList)) { throw new BadRequestException("暂时没有可用的空载具!"); } - Structattr structattr = attrList.get(0); - /*String point_code1 = ""; - for (Structattr attrDao : attrList) { - // 判断是深浅货位 - if (attrDao.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) { - // 直接创建出库任务 - structattr = attrDao; - point_code1 = attrDao.getStruct_code(); - break; - } else { - // 深货位:判断浅货位是否有货 - // 查询浅货位 - Structattr shallowAttr = iStructattrService.getOne( - new QueryWrapper().lambda() - .eq(Structattr::getBlock_num, attrDao.getBlock_num()) - .eq(Structattr::getCol_num, attrDao.getCol_num()) - .eq(Structattr::getLayer_num, attrDao.getLayer_num()) - .eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位")) - ); - if (ObjectUtil.isEmpty(shallowAttr)) { - throw new BadRequestException("仓位【" + attrDao.getStruct_code() + "】对应的浅货位不存在,请检查数据!"); - } - - if (ObjectUtil.isEmpty(shallowAttr.getStoragevehicle_code())) { - // 浅货位空位 - if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { - // 直接创建出库任务 - structattr = attrDao; - point_code1 = attrDao.getStruct_code(); - break; - } else { - continue; - } - - } else { - // 浅货位有货 - if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { - // 创建移库任务 - structattr = createMoveTask(attrDao, shallowAttr); - point_code1 = attrDao.getStruct_code(); - break; - } else { - continue; - } - } - } - }*/ - // 锁定仓位 iStructattrService.update( new UpdateWrapper().lambda() @@ -138,60 +76,42 @@ public class VehicleOutServiceImpl implements VehicleOutService { // 创建任务 JSONObject jsonTask = new JSONObject(); + jsonTask.put("vehicle_code", structattr.getStoragevehicle_code()); jsonTask.put("point_code1", structattr.getStruct_code()); jsonTask.put("point_code2", IOSConstant.CZW_POINT); - // 判断终点是否是称重位 + // 判断终点是否是称重位- 正常出库 jsonTask.put("point_code3", whereJson.getString("point_code").equals(IOSConstant.CZW_POINT) ? "" : whereJson.getString("point_code") ); - // 用于任务完成时更新原仓位 - // jsonTask.put("point_code4", structattr.getStruct_code()); - // jsonTask.put("vehicle_code", structattr.getStoragevehicle_code()); - String task_id = empVehicleOutTask.create(jsonTask); - - /* if (ObjectUtil.isNotEmpty(structattr.getTask_id())) { - // 更新空载具出库任务类ext_group_data字段 - iSchBaseTaskService.update( - new UpdateWrapper().lambda() - .set(SchBaseTask::getExt_group_data, task_id) - .eq(SchBaseTask::getTask_id, structattr.getTask_id()) - ); - }*/ + empVehicleOutTask.create(jsonTask); } - /** - * 创建移库任务 - * - * @param attrDao 深货位 - * @param shallowAttr 浅货位 - * @return Structattr 新货位 - */ - private Structattr createMoveTask(Structattr attrDao, Structattr shallowAttr) { - // 锁定起点 + @Override + @Transactional + public void confirmOutEmp(JSONObject whereJson) { + // 根据库区找空载具 + List attrList = autoDivStruct(whereJson); + if (ObjectUtil.isEmpty(attrList)) { + throw new BadRequestException("暂时没有可用的空载具!"); + } + Structattr structattr = attrList.get(0); + // 锁定仓位 iStructattrService.update( new UpdateWrapper().lambda() - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移出锁")) - .eq(Structattr::getStruct_code, shallowAttr.getStruct_code()) - ); - // 锁定终点 - iStructattrService.update( - new UpdateWrapper().lambda() - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("移入锁")) - .eq(Structattr::getStruct_code, attrDao.getStruct_code()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("空托盘出库锁")) + .eq(Structattr::getStruct_code, structattr.getStruct_code()) ); - // 创建移库任务 - JSONObject jsonMoveTask = new JSONObject(); - jsonMoveTask.put("point_code1", shallowAttr.getStruct_code()); - jsonMoveTask.put("point_code2", attrDao.getStruct_code()); - jsonMoveTask.put("vehicle_code", shallowAttr.getStoragevehicle_code()); - jsonMoveTask.put("vehicle_code2", attrDao.getStoragevehicle_code()); - - String task_id = empOutMoveTask.create(jsonMoveTask); - shallowAttr.setTask_id(task_id); - - shallowAttr.setStoragevehicle_code(attrDao.getStoragevehicle_code()); - return shallowAttr; + // 创建任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("vehicle_code", structattr.getStoragevehicle_code()); + jsonTask.put("point_code1", structattr.getStruct_code()); + jsonTask.put("point_code2", IOSConstant.CZW_POINT); + // 判断终点是否是称重位- 退料呼叫空载具 + jsonTask.put("point_code4", whereJson.getString("point_code").equals(IOSConstant.CZW_POINT) + ? "" : whereJson.getString("point_code") + ); + empVehicleOutTask.create(jsonTask); } /** diff --git a/wms/nladmin-ui/src/views/wms/basedata/group/AddReceiveDtl.vue b/wms/nladmin-ui/src/views/wms/basedata/group/AddReceiveDtl.vue new file mode 100644 index 0000000..8b1a146 --- /dev/null +++ b/wms/nladmin-ui/src/views/wms/basedata/group/AddReceiveDtl.vue @@ -0,0 +1,438 @@ + + + + + diff --git a/wms/nladmin-ui/src/views/wms/basedata/group/group.js b/wms/nladmin-ui/src/views/wms/basedata/group/group.js index 3b5b96b..5693aa3 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/group/group.js +++ b/wms/nladmin-ui/src/views/wms/basedata/group/group.js @@ -88,4 +88,13 @@ export function getPcsn(data) { }) } -export default { add, edit, del, queryMater, queryMaterList, checkVehicle, querySupp, copySave, printDelete, excelImport, getPcsn } +export function outReceiveGroup(data) { + return request({ + url: 'api/group/outReceiveGroup', + method: 'post', + data + }) +} + +export default { add, edit, del, queryMater, queryMaterList, checkVehicle, + querySupp, copySave, printDelete, excelImport, getPcsn, outReceiveGroup } diff --git a/wms/nladmin-ui/src/views/wms/basedata/group/index.vue b/wms/nladmin-ui/src/views/wms/basedata/group/index.vue index 1b173f9..fd6ff5f 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/group/index.vue +++ b/wms/nladmin-ui/src/views/wms/basedata/group/index.vue @@ -70,6 +70,16 @@ > 复制新增 + + 退料组盘 + + + + diff --git a/wms/nladmin-ui/src/views/wms/sch/pickandplace/TwoReceiveDialog.vue b/wms/nladmin-ui/src/views/wms/sch/pickandplace/TwoReceiveDialog.vue new file mode 100644 index 0000000..59489d2 --- /dev/null +++ b/wms/nladmin-ui/src/views/wms/sch/pickandplace/TwoReceiveDialog.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/wms/nladmin-ui/src/views/wms/sch/pickandplace/index.vue b/wms/nladmin-ui/src/views/wms/sch/pickandplace/index.vue index f88abc2..e07ed43 100644 --- a/wms/nladmin-ui/src/views/wms/sch/pickandplace/index.vue +++ b/wms/nladmin-ui/src/views/wms/sch/pickandplace/index.vue @@ -53,6 +53,26 @@ > 确认放货 + + 直接退料 + + + 二次退料 + + + + + diff --git a/wms/nladmin-ui/src/views/wms/st/vehicleout/index.vue b/wms/nladmin-ui/src/views/wms/st/vehicleout/index.vue index 2ae041c..95ee03d 100644 --- a/wms/nladmin-ui/src/views/wms/st/vehicleout/index.vue +++ b/wms/nladmin-ui/src/views/wms/st/vehicleout/index.vue @@ -24,7 +24,18 @@ - + + + 呼叫退料空料箱 + + +