From 08e7c8701249185a864d95526f18a78dcda9daf6 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 8 Sep 2025 18:57:26 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E5=B9=B3=E6=9D=BF=E7=A7=BB?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/controller/AcsToWmsController.java | 7 + .../nl/wms/ext/service/AcsToWmsService.java | 12 ++ .../ext/service/impl/AcsToWmsServiceImpl.java | 6 + .../impl/PadLargeMaterialBoxServiceImpl.java | 179 +++++++++++++++++- .../service/dao/StIvtMoveinvdtl.java | 7 + .../dao/mapper/StIvtMoveinvdtlMapper.xml | 95 ++++++---- .../service/impl/StIvtMoveinvServiceImpl.java | 62 +++--- 7 files changed, 296 insertions(+), 72 deletions(-) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java index 9ccba63..5d719eb 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java @@ -42,4 +42,11 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.resultCar(whereJson), HttpStatus.OK); } + @PostMapping("/resultWeigh") + @Log(value = "ACS给WMS反馈称重重量") + @SaIgnore + public ResponseEntity resultWeigh(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToWmsService.resultWeigh(whereJson), HttpStatus.OK); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java index 13e8675..450fe27 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java @@ -35,4 +35,16 @@ public interface AcsToWmsService { * @return BaseResponse */ BaseResponse resultCar(JSONObject whereJson); + + /** + * ACS客户端--->WMS服务端 + * ACS给WMS反馈称重重量 + * @param whereJson { + * task_id: 任务标识 + * task_code: 任务编码 + * weigh_qty: 称重重量 + * } + * @return BaseResponse + */ + BaseResponse resultWeigh(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java index 2c2c70d..6a6c2a8 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -127,4 +127,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } return BaseResponse.responseOk(); } + + @Override + @Transactional(rollbackFor = Exception.class) + public BaseResponse resultWeigh(JSONObject whereJson) { + return null; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/large_material_box/service/impl/PadLargeMaterialBoxServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/large_material_box/service/impl/PadLargeMaterialBoxServiceImpl.java index 474873c..34349d8 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/large_material_box/service/impl/PadLargeMaterialBoxServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/large_material_box/service/impl/PadLargeMaterialBoxServiceImpl.java @@ -2,11 +2,14 @@ package org.nl.wms.pda.large_material_box.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; @@ -19,18 +22,15 @@ 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; -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.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.*; +import org.nl.wms.warehouse_management.service.dao.*; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_management.service.dao.mapper.StIvtCheckdtlMapper; import org.nl.wms.warehouse_management.service.dao.mapper.StIvtMoveinvdtlMapper; +import org.nl.wms.warehouse_management.service.dto.MoveInsertDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -78,6 +78,14 @@ public class PadLargeMaterialBoxServiceImpl implements PdaLargeMaterialBoxServic private IRawAssistIStorService rawAssistIStorService; @Autowired private IPdmBomCallMaterialDtlService pdmBomCallMaterialDtlService; + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + @Autowired + private IStIvtMoveinvdtlService iStIvtMoveinvdtlService; + @Autowired + private IStIvtMoveinvService iStIvtMoveinvService; + @Autowired + private IMdPbMeasureunitService iMdPbMeasureunitService; @Override @Transactional(rollbackFor = Exception.class) @@ -412,9 +420,158 @@ public class PadLargeMaterialBoxServiceImpl implements PdaLargeMaterialBoxServic @Override public PdaResponse materialBoxMoveConfirm(JSONObject reqParam) { + JSONObject jsonOut = reqParam.getJSONArray("rows_out").toJavaList(JSONObject.class).get(0); + JSONObject jsonIn = reqParam.getJSONArray("rows_in").toJavaList(JSONObject.class).get(0); + + // 判断移出货位是库存物料 + if (ObjectUtil.isEmpty(jsonOut.getString("qty"))) { + throw new BadRequestException("请选择库内库存物料!"); + } + // 判断是否有单据 + if (ObjectUtil.isNotEmpty(jsonOut.getString("moveinv_id"))) { + // 查询移入货位 + Structattr attrIn = structattrService.getByCode(jsonIn.getString("struct_code")); + // 调用移库单确认 + StIvtMoveinvdtl dtlDao = iStIvtMoveinvdtlService.getById(jsonOut.getString("moveinvdtl_id")); + + // 判断移入货位是否是空载具 + if (!attrIn.getIs_emptyvehicle().equals(IOSConstant.ONE) && ObjectUtil.isNotEmpty(attrIn.getStoragevehicle_code())) { + // 更新移入库存信息 + iMdPbStoragevehicleextService.update( + new UpdateWrapper().lambda() + .set(MdPbStoragevehicleext::getCanuse_qty, NumberUtil.add(jsonOut.getBigDecimal("qty"),jsonIn.getBigDecimal("qty"))) + .eq(MdPbStoragevehicleext::getStoragevehicle_code, jsonIn.getString("storagevehicle_code")) + .eq(MdPbStoragevehicleext::getMaterial_id, jsonIn.getString("material_id")) + .eq(MdPbStoragevehicleext::getPcsn, jsonIn.getString("pcsn")) + ); + + // 更新组盘信息 + mdPbGroupplateService.update( + new UpdateWrapper().lambda() + .set(GroupPlate::getQty, NumberUtil.add(jsonOut.getBigDecimal("qty"),jsonIn.getBigDecimal("qty"))) + .eq(GroupPlate::getGroup_id, jsonIn.getString("group_id")) + ); + + // 删除移出货位组盘信息 + mdPbGroupplateService.removeById(jsonOut.getString("group_id")); + + // 删除库存信息 + iMdPbStoragevehicleextService.remove( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, jsonOut.getString("storagevehicle_code")) + ); + + // 更新移出仓位为空载具 + Structattr attrOutNew = structattrService.getByCode(jsonOut.getString("struct_code")); + attrOutNew.setIs_emptyvehicle(IOSConstant.ONE); + structattrService.updateById(attrOutNew); + + dtlDao.setIs_update_point(IOSConstant.ZERO); + } + iStIvtMoveinvService.confirmTask(dtlDao); + } else { + // 创建移库单据并确认 + createPdaMove(jsonOut,jsonIn); + } + return PdaResponse.requestOk(); } + /** + * 创建移库单据 + * @param jsonOut 移出数据 + * @param jsonIn 移入数据 + */ + private void createPdaMove(JSONObject jsonOut, JSONObject jsonIn) { + // 查询移出货位 + Structattr attrOut = structattrService.getByCode(jsonOut.getString("struct_code")); + if (!attrOut.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + throw new BadRequestException("当前移出货位被锁定!"); + } + // 查询移入货位 + Structattr attrIn = structattrService.getByCode(jsonIn.getString("struct_code")); + if (!attrIn.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + throw new BadRequestException("当前移入货位被锁定!"); + } + + // 组织主表 + MoveInsertDto moveInsertDto = new MoveInsertDto(); + moveInsertDto.setBill_type(IOSEnum.MOVE_BILL_TYPE.code("库内移库")); + moveInsertDto.setBiz_date(DateUtil.today()); + moveInsertDto.setStor_id(attrOut.getStor_id()); + moveInsertDto.setTotal_qty(jsonOut.getBigDecimal("qty")); + moveInsertDto.setDetail_count(BigDecimal.ONE); + moveInsertDto.setBill_status(IOSEnum.MOVE_MST_STATUS.code("生成")); + moveInsertDto.setRemark("由平板移库创建!"); + + // 组织明细 + List dtlList = new ArrayList<>(); + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("turnout_sect_code", attrOut.getSect_code()); + jsonDtl.put("turnout_struct_code", attrOut.getStruct_code()); + MdMeMaterialbase materDao = mdMeMaterialbaseService.getById(jsonOut.getString("material_id")); + jsonDtl.put("material_code", materDao.getMaterial_code()); + jsonDtl.put("material_id", materDao.getMaterial_id()); + jsonDtl.put("pcsn", jsonOut.getString("pcsn")); + MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode("KG"); + jsonDtl.put("qty_unit_id", unitDao.getMeasure_unit_id()); + jsonDtl.put("qty_unit_name", unitDao.getUnit_name()); + jsonDtl.put("qty", jsonOut.getBigDecimal("qty")); + jsonDtl.put("turnin_sect_code", attrIn.getSect_code()); + jsonDtl.put("turnin_struct_code", attrIn.getStruct_code()); + jsonDtl.put("work_status", IOSEnum.MOVE_DTL_STATUS.code("生成")); + jsonDtl.put("storagevehicle_code", attrOut.getStoragevehicle_code()); + jsonDtl.put("storagevehicle_code2", attrIn.getStoragevehicle_code()); + dtlList.add(jsonDtl); + moveInsertDto.setTableData(dtlList); + // 调用移库单新增 + String move_id = iStIvtMoveinvService.create(moveInsertDto); + + StIvtMoveinvdtl paramDtl = iStIvtMoveinvdtlService.list( + new QueryWrapper().lambda() + .eq(StIvtMoveinvdtl::getMoveinv_id, move_id) + ).get(0); + + // 判断移入货位是否是空载具 + if (!attrIn.getIs_emptyvehicle().equals(IOSConstant.ONE) && ObjectUtil.isNotEmpty(attrIn.getStoragevehicle_code())) { + // 更新移入库存信息 + iMdPbStoragevehicleextService.update( + new UpdateWrapper().lambda() + .set(MdPbStoragevehicleext::getCanuse_qty, NumberUtil.add(jsonOut.getBigDecimal("qty"),jsonIn.getBigDecimal("qty"))) + .eq(MdPbStoragevehicleext::getStoragevehicle_code, jsonIn.getString("storagevehicle_code")) + .eq(MdPbStoragevehicleext::getMaterial_id, jsonIn.getString("material_id")) + .eq(MdPbStoragevehicleext::getPcsn, jsonIn.getString("pcsn")) + ); + + // 更新组盘信息 + mdPbGroupplateService.update( + new UpdateWrapper().lambda() + .set(GroupPlate::getQty, NumberUtil.add(jsonOut.getBigDecimal("qty"),jsonIn.getBigDecimal("qty"))) + .eq(GroupPlate::getGroup_id, jsonIn.getString("group_id")) + ); + + // 删除库存信息 + iMdPbStoragevehicleextService.remove( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, jsonOut.getString("storagevehicle_code")) + ); + + // 删除移出货位组盘信息 + mdPbGroupplateService.removeById(jsonOut.getString("group_id")); + + // 更新移出仓位为空载具 + Structattr attrOutNew = structattrService.getByCode(jsonOut.getString("struct_code")); + attrOutNew.setIs_emptyvehicle(IOSConstant.ONE); + structattrService.updateById(attrOutNew); + + paramDtl.setIs_update_point(IOSConstant.ZERO); + } + + // 确认移库单据 + iStIvtMoveinvService.confirmTask(paramDtl); + + } + @Override public PdaResponse materialBoxInventoryConfirm(JSONObject reqParam) { return PdaResponse.requestOk(); @@ -600,9 +757,15 @@ public class PadLargeMaterialBoxServiceImpl implements PdaLargeMaterialBoxServic String type = reqParam.getString("type"); Assert.notBlank(type, "移库类型不能为空!"); String vehicleStructCode = reqParam.getString("vehicleStructCode"); - Assert.notBlank(vehicleStructCode, "载具编码或点位编码不能为空!"); + if(ObjectUtil.isEmpty(vehicleStructCode)) { + if (ObjectUtil.isEmpty(reqParam.getString("moveinvdtl_id"))) { + throw new BadRequestException("载具编码或点位编码不能为空!"); + } + } + JSONObject param = new JSONObject(); param.put("vehicleStructCode", vehicleStructCode); + param.put("moveinvdtl_id", reqParam.getString("moveinvdtl_id")); List> mapList = new ArrayList<>(); if (StrUtil.equals("1", type)) { mapList = stIvtMoveinvdtlMapper.getOutMoveDtlByVehicleStructCode(param); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtMoveinvdtl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtMoveinvdtl.java index fd9dc81..24af20c 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtMoveinvdtl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/StIvtMoveinvdtl.java @@ -1,5 +1,6 @@ package org.nl.wms.warehouse_management.service.dao; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -119,5 +120,11 @@ public class StIvtMoveinvdtl implements Serializable { */ private String remark; + /** + * 是否更新点位 + */ + @TableField(exist = false) + private String is_update_point; + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtMoveinvdtlMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtMoveinvdtlMapper.xml index 162575f..9c6335f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtMoveinvdtlMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/StIvtMoveinvdtlMapper.xml @@ -41,59 +41,70 @@ diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java index 53a1967..59226b2 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/StIvtMoveinvServiceImpl.java @@ -200,29 +200,47 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl().lambda() - .eq(Structattr::getStruct_code, dtlDao.getTurnout_struct_code()) - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - .set(Structattr::getStoragevehicle_code, dtlDao.getStoragevehicle_code2()) - .set(Structattr::getIs_emptyvehicle, - inStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES - : IOSConstant.IS_DELETE_NO - ) - ); + if (ObjectUtil.isEmpty(dtlDao.getIs_update_point()) || !dtlDao.getIs_update_point().equals(IOSConstant.ZERO)) { + // 更新起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, dtlDao.getTurnout_struct_code()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(Structattr::getStoragevehicle_code, dtlDao.getStoragevehicle_code2()) + .set(Structattr::getIs_emptyvehicle, + inStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES + : IOSConstant.IS_DELETE_NO + ) + ); - // 更新终点 - iStructattrService.update( - new UpdateWrapper().lambda() - .eq(Structattr::getStruct_code, dtlDao.getTurnin_struct_code()) - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - .set(Structattr::getStoragevehicle_code, dtlDao.getStoragevehicle_code()) - .set(Structattr::getIs_emptyvehicle, - outStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES - : IOSConstant.IS_DELETE_NO - ) - ); + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, dtlDao.getTurnin_struct_code()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(Structattr::getStoragevehicle_code, dtlDao.getStoragevehicle_code()) + .set(Structattr::getIs_emptyvehicle, + outStruct.getIs_emptyvehicle().equals(IOSConstant.IS_DELETE_YES) ? IOSConstant.IS_DELETE_YES + : IOSConstant.IS_DELETE_NO + ) + ); + } else { + // 更新起点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, dtlDao.getTurnout_struct_code()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES) + ); + + // 更新终点 + iStructattrService.update( + new UpdateWrapper().lambda() + .eq(Structattr::getStruct_code, dtlDao.getTurnin_struct_code()) + .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(Structattr::getIs_emptyvehicle,IOSConstant.IS_DELETE_NO) + ); + } // 更新明细状态 dtlDao.setWork_status(IOSEnum.MOVE_DTL_STATUS.code("完成"));