From d14d7c40c147ab76be3b679043a7a12e809d15e9 Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 15 Oct 2025 16:54:11 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=89=8B?= =?UTF-8?q?=E6=8C=81=E7=82=B9=E5=AF=B9=E7=82=B9=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ios_manage/service/PdaIosOutService.java | 6 + .../service/impl/PdaIosInServiceImpl.java | 15 +- .../service/impl/PdaIosOutServiceImpl.java | 87 ++++++- .../controller/PdaSchPointController.java | 7 + .../service/PdaSchPointService.java | 12 + .../service/impl/PdaSchPointServiceImpl.java | 213 ++++++++++++++++++ .../impl/RawAssistIStorServiceImpl.java | 2 +- 7 files changed, 339 insertions(+), 3 deletions(-) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java index 8f3e16d..89e6b05 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java @@ -31,4 +31,10 @@ public interface PdaIosOutService { * @return PdaResponse */ PdaResponse confirm(JSONObject whereJson); + + /** + * 创建出库单并下发 + * @param whereJson 、 + */ + void createIos(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java index c9d130f..1eaa6b0 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java @@ -387,9 +387,14 @@ public class PdaIosInServiceImpl implements PdaIosInService { Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id")); // 组织主数据 Map jsonMst = new HashMap<>(); - jsonMst.put("checked", true); jsonMst.put("sect_id", sectDao.getSect_id()); jsonMst.put("stor_id", sectDao.getStor_id()); + if (ObjectUtil.isNotEmpty(whereJson.getString("struct_code"))) { + jsonMst.put("checked", false); + } else { + jsonMst.put("checked", true); + } + // 组织明细数据 IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( new QueryWrapper().lambda() @@ -402,6 +407,14 @@ public class PdaIosInServiceImpl implements PdaIosInService { // 类型转换 ArrayList tableMater = new ArrayList<>(); disDtl.forEach(item -> { + if (ObjectUtil.isNotEmpty(whereJson.getString("struct_code"))) { + item.setSect_id(whereJson.getString("sect_id")); + item.setSect_code(whereJson.getString("sect_code")); + item.setSect_name(whereJson.getString("sect_name")); + item.setStruct_id(whereJson.getString("struct_id")); + item.setStruct_code(whereJson.getString("struct_code")); + item.setStruct_name(whereJson.getString("struct_name")); + } tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); }); jsonMst.put("tableMater", tableMater); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java index a90e153..8624791 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java @@ -1,13 +1,18 @@ package org.nl.wms.pda.ios_manage.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.nl.common.exception.BadRequestException; +import org.nl.wms.basedata_manage.service.IBsrealStorattrService; +import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService; import org.nl.wms.basedata_manage.service.IStructattrService; -import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.basedata_manage.service.dao.*; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.util.PdaResponse; @@ -17,6 +22,7 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.util.tasks.BackInTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IOutBillService; 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.IOStorInvDis; @@ -31,6 +37,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** *

@@ -49,6 +59,12 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { @Autowired private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper; + /** + * 库存信息服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + /** * 点位服务 */ @@ -94,6 +110,15 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { @Resource private GroupPlateMapper groupPlateMapper; + @Resource + private IBsrealStorattrService iBsrealStorattrService; + + @Resource + private IMdMeMaterialbaseService iMdMeMaterialbaseService; + + @Resource + private IOutBillService iOutBillService; + @Override public PdaResponse getDtl(JSONObject whereJson) { return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.getIosDtl(whereJson)); @@ -186,4 +211,64 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { } return PdaResponse.requestOk(); } + + @Override + @Transactional + public void createIos(JSONObject whereJson) { + // --------------- 组织主表数据 --------------- + JSONObject jsonMst = new JSONObject(); + jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成")); + jsonMst.put("bill_type", IOSEnum.BILL_TYPE_OUT.code("手工出库")); + jsonMst.put("biz_date", DateUtil.now()); + jsonMst.put("detail_count", 1); + BsrealStorattr storDao = iBsrealStorattrService.getById(IOSConstant.STOR_ID); + jsonMst.put("stor_id", storDao.getStor_id()); + jsonMst.put("stor_code", storDao.getStor_code()); + jsonMst.put("stor_name", storDao.getStor_name()); + + // --------------- 组织明细数据 --------------- + JSONArray tableData = new JSONArray(); + JSONObject jsonDtl = new JSONObject(); + + // 查询库存信息 + MdPbStoragevehicleext ivtDao = iMdPbStoragevehicleextService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, whereJson.getString("vehicle_code")) + ); + jsonDtl.put("frozen_qty", ivtDao.getFrozen_qty()); + // 查询物料信息 + MdMeMaterialbase materialDao = iMdMeMaterialbaseService.getById(ivtDao.getMaterial_id()); + jsonDtl.put("material_id", materialDao.getMaterial_id()); + jsonDtl.put("material_code", materialDao.getMaterial_code()); + jsonDtl.put("material_name", materialDao.getMaterial_name()); + jsonDtl.put("pcsn", ivtDao.getPcsn()); + jsonDtl.put("plan_qty", ivtDao.getCanuse_qty()); + jsonDtl.put("qty", ivtDao.getCanuse_qty()); + jsonDtl.put("qty_unit_id", ivtDao.getQty_unit_id()); + jsonDtl.put("qty_unit_name", ivtDao.getQty_unit_name()); + jsonDtl.put("storagevehicleext_id", ivtDao.getStoragevehicleext_id()); + jsonDtl.put("storagevehicle_code", ivtDao.getStoragevehicle_code()); + // 查询仓位 + Structattr attrDao = iStructattrService.getByCode(whereJson.getString("point_code1")); + jsonDtl.put("sect_id", attrDao.getSect_id()); + jsonDtl.put("struct_id", attrDao.getStruct_id()); + jsonDtl.put("turnout_sect_code", attrDao.getSect_code()); + jsonDtl.put("turnout_sect_name", attrDao.getSect_name()); + jsonDtl.put("turnout_struct_code", attrDao.getStruct_code()); + tableData.add(jsonDtl); + + jsonMst.put("total_qty", ivtDao.getCanuse_qty()); + jsonMst.put("tableData", tableData); + // 调用新增 + String iostorinv_id = iOutBillService.insertDtl(jsonMst); + + // --------------- 调用分配 --------------- + whereJson.put("iostorinv_id",iostorinv_id); + iOutBillService.allDiv(whereJson); + + // --------------- 调用下发 --------------- + whereJson.put("point_code", whereJson.getString("point_code2")); + whereJson.put("checked", false); + iOutBillService.allSetPoint(whereJson); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java index b8b3e0b..a1d600e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java @@ -53,4 +53,11 @@ public class PdaSchPointController { return new ResponseEntity<>(pdaSchPointService.dissect(whereJson), HttpStatus.OK); } + @PostMapping("/pointToPoint") + @Log("下发点对点任务") + @SaIgnore + public ResponseEntity pointToPoint(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaSchPointService.pointToPoint(whereJson), HttpStatus.OK); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java index 86b527b..dd212a1 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java @@ -46,4 +46,16 @@ public interface PdaSchPointService extends IService { */ PdaResponse dissect(JSONObject whereJson); + /** + * 下发点对点任务 + * @param whereJson { + * "point_code1": "起点编码" + * "point_code2": "终点编码" + * "vehicle_code": "载具编码" + * "task_type": "载具任务类型" -- 【1-入库,2-出库】 + * "is_vehicle": "是否空载具" -- 【1-是,2-否】 + * } + * @return PdaResponse + */ + PdaResponse pointToPoint(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchPointServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchPointServiceImpl.java index 622d9ec..7f3e6f9 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchPointServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchPointServiceImpl.java @@ -1,17 +1,35 @@ package org.nl.wms.pda.sch_manage.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; +import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; +import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; +import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.pda.ios_manage.service.PdaIosInService; +import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.sch_manage.service.PdaSchPointService; import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleInTask; +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; +import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; +import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** *

* 手持点位操作 实现类 @@ -29,6 +47,48 @@ public class PdaSchPointServiceImpl extends ServiceImpl attrList = iStructattrService.list( + new QueryWrapper().lambda() + .eq(Structattr::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) + ); + if (ObjectUtil.isNotEmpty(attrList)) { + throw new BadRequestException("当前载具已入库!"); + } + + if (whereJson.getString("is_vehicle").equals(IOSConstant.UPDATE_IVT_TYPE_ADD_FROZEN)) { + // 入物料:校验是否有组盘信息 + GroupPlate groupDao = iMdPbGroupplateService.getOne( + new QueryWrapper().lambda() + .eq(GroupPlate::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) + ); + if (ObjectUtil.isEmpty(groupDao)) { + throw new BadRequestException("托盘【"+vehicleDao.getStoragevehicle_code()+"】组盘信息不存在,请先进行物料组盘!"); + } + + // 调用成品入库 + JSONObject jsonIosParam = new JSONObject(); + jsonIosParam.put("storagevehicle_code", vehicleDao.getStoragevehicle_code()); + jsonIosParam.put("point_code", whereJson.getString("point_code1")); + jsonIosParam.put("sect_id", attrDao.getSect_id()); + jsonIosParam.put("sect_code", attrDao.getSect_code()); + jsonIosParam.put("sect_name", attrDao.getSect_name()); + jsonIosParam.put("struct_id", attrDao.getStruct_id()); + jsonIosParam.put("struct_code", attrDao.getStruct_code()); + jsonIosParam.put("struct_name", attrDao.getStruct_name()); + pdaIosInService.confirmIn(jsonIosParam); + + } else { + // 锁定仓位 + attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘入库锁")); + iStructattrService.updateById(attrDao); + + // 创建载具入库任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", whereJson.getString("point_code1")); + jsonTask.put("point_code2", whereJson.getString("point_code2")); + jsonTask.put("vehicle_code", whereJson.getString("vehicle_code")); + jsonTask.put("Priority", IOSConstant.IS_DELETE_YES); + empVehicleInTask.create(jsonTask); + } + } + + /** + * 点对点出库 + * @param whereJson 、 + */ + private void outTask(JSONObject whereJson) { + // 校验起点 + Structattr attrDao = iStructattrService.getByCode(whereJson.getString("point_code1")); + if (!attrDao.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + throw new BadRequestException("当前起点处于锁定状态不可使用!"); + } + if (ObjectUtil.isEmpty(attrDao.getStoragevehicle_code())) { + throw new BadRequestException("当前起点没有载具!"); + } + if (attrDao.getIs_delete().equals(IOSConstant.IS_DELETE_YES) || attrDao.getIs_used().equals(IOSConstant.IS_DELETE_NO)) { + throw new BadRequestException("当前起点未启用或已删除不可使用!"); + } + + // 校验终点 + SchBasePoint pointDao = this.getById(whereJson.getString("point_code2")); + if (ObjectUtil.isEmpty(pointDao)) { + throw new BadRequestException("当前终点不存在【" + whereJson.getString("point_code2") + "】"); + } + + // --------------- 校验载具 --------------- + MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code")); + // 校验托盘是否在仓位中存在 + Structattr attrVehicle = iStructattrService.getOne( + new QueryWrapper().lambda() + .eq(Structattr::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) + .eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES) + .eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO) + ); + if (ObjectUtil.isEmpty(attrVehicle)) { + throw new BadRequestException("当前载具不在库内不可出库!"); + } + if (!attrVehicle.getStruct_code().equals(whereJson.getString("point_code1"))) { + throw new BadRequestException("当前载具与仓位库存载具不符!"); + } + + if (whereJson.getString("is_vehicle").equals(IOSConstant.UPDATE_IVT_TYPE_ADD_FROZEN)) { + // 出物料:判断是否有库存 + MdPbStoragevehicleext ivtDao = iMdPbStoragevehicleextService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) + ); + if (ObjectUtil.isEmpty(ivtDao)) { + throw new BadRequestException("当前载具没有物料库存信息!"); + } + // 调用创建出库单 + pdaIosOutService.createIos(whereJson); + } else { + // 出空载具 + if (ObjectUtil.isEmpty(attrVehicle.getIs_emptyvehicle()) || !attrVehicle.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES)) { + throw new BadRequestException("当前仓位不是空载具!"); + } + + // 锁定起点 + attrVehicle.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘出库锁")); + iStructattrService.updateById(attrVehicle); + // 创建任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", whereJson.getString("point_code1")); + jsonTask.put("point_code2", whereJson.getString("point_code2")); + jsonTask.put("vehicle_code", vehicleDao.getStoragevehicle_code()); + jsonTask.put("Priority", IOSConstant.IS_DELETE_YES); + empVehicleOutTask.create(jsonTask); + } + } } 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 ce03a37..4a9d169 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 @@ -387,7 +387,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl