From 5a184130b5e9a79eabde284c6cf08ffb9928a753 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Thu, 27 Nov 2025 14:45:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8E=9F=E8=BE=85=E6=96=99=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ISectattrService.java | 1 + .../service/impl/SectattrServiceImpl.java | 8 + .../impl/PdaPreTreatmentServiceImpl.java | 142 ++++++++++++++++-- 3 files changed, 136 insertions(+), 15 deletions(-) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java index 2192e84..3d955de 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/ISectattrService.java @@ -34,6 +34,7 @@ public interface ISectattrService extends IService { * @return Sectattr */ Sectattr findById(String sect_id); + Sectattr findByCode(String sect_code, Boolean flag); /** diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java index 8c2be1c..4ad3c4d 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/SectattrServiceImpl.java @@ -71,6 +71,14 @@ public class SectattrServiceImpl extends ServiceImpl i return sectattr; } + @Override + public Sectattr findByCode(String sect_code, Boolean flag) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(Sectattr.class) + .eq(Sectattr::getSect_code, sect_code) + .eq(flag, Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")); + return sectattrMapper.selectOne(queryWrapper); + } + @Override @Transactional(rollbackFor = Exception.class) public void create(Sectattr dto) { diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPreTreatmentServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPreTreatmentServiceImpl.java index d4dc146..1b1f97d 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPreTreatmentServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPreTreatmentServiceImpl.java @@ -1,18 +1,34 @@ package org.nl.wms.pda.general_management.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +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 lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.wms.basedata_manage.service.ISectattrService; +import org.nl.wms.basedata_manage.service.dao.Sectattr; import org.nl.wms.pda.general_management.service.PdaPreTreatmentService; import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; +import org.nl.wms.warehouse_management.service.IRawAssistIStorService; +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.nl.wms.warehouse_management.service.dto.IOStorInvDisDto; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.List; +import java.util.*; +import java.util.concurrent.TimeUnit; /** * @Author: lyd @@ -25,6 +41,16 @@ public class PdaPreTreatmentServiceImpl implements PdaPreTreatmentService { private ISchBasePointService pointService; @Resource private IMdPbGroupplateService groupplateService; + @Resource + private IRawAssistIStorService rawAssistIStorService; + @Resource + private ISectattrService sectattrService; + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + @Resource + private IOStorInvDtlMapper ioStorInvDtlMapper; + @Resource + private RedissonClient redissonClient; @Override public PdaResponse getPalletAssembly(JSONObject param) { String search = param.getString("search"); @@ -42,24 +68,110 @@ public class PdaPreTreatmentServiceImpl implements PdaPreTreatmentService { return PdaResponse.requestParamOk(groups); } + @SneakyThrows @Override public PdaResponse confirmPalletAssemblyIn(JSONObject param) { log.info("拆包缓冲间确认入库:{}", param); - // param:search(点位), rows - String search = param.getString("search"); - if (ObjectUtil.isEmpty(search)) { - throw new BadRequestException("请输入点位编码!"); + RLock lock = redissonClient.getLock("lock:confirmPalletAssemblyIn"); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + // param:search(点位), rows + String search = param.getString("search"); + if (ObjectUtil.isEmpty(search)) { + throw new BadRequestException("请输入点位编码!"); + } + SchBasePoint startPoint = pointService.getByPointCode(search, true); + if (ObjectUtil.isEmpty(startPoint)) { + throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!"); + } + Sectattr sectattr = sectattrService.findByCode("WYL01", true); + if (ObjectUtil.isEmpty(sectattr)) { + throw new BadRequestException("库区【物料室原料区】不存在或者被禁用!"); + } + // 1 创建入库单、明细、分配明细 + Map invObj = doBuildInvObj(param.getJSONArray("rows")); + String invId = rawAssistIStorService.insertDtl(invObj); + // 2 调用分配 (WYL01) + Map divObj = buildDivStructData(sectattr, invId); + rawAssistIStorService.divStruct(divObj); + // 3 创建任务 + Map jsonMst = buildTaskData(startPoint, invId); + rawAssistIStorService.divPoint(jsonMst); + } else { + throw new BadRequestException("速度太快啦,稍后再试..."); + } + } finally { + if (tryLock) { + lock.unlock(); + } } - SchBasePoint startPoint = pointService.getByPointCode(search, true); - if (ObjectUtil.isEmpty(startPoint)) { - throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!"); - } - // 1 创建入库单、明细、分配明细 - JSONObject insertInvObj = new JSONObject(); - - // 2 调用分配 - - // 3 创建任务 return PdaResponse.requestOk(); } + + private Map buildTaskData(SchBasePoint startPoint, String invId) { + Map jsonMst = new HashMap<>(); + jsonMst.put("point_code", startPoint.getPoint_code()); + // 组织明细数据 + IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( + new QueryWrapper().lambda() + .eq(IOStorInvDtl::getIostorinv_id, invId) + ); + // 查找分配明细 + Map map = new HashMap<>(); + map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id()); + List disDtl = rawAssistIStorService.getDisDtl(map); + // 类型转换 + ArrayList tableMater = new ArrayList<>(); + disDtl.forEach(item -> tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class))); + jsonMst.put("tableMater", tableMater); + return jsonMst; + } + + private Map buildDivStructData(Sectattr sect, String invId) { + Map divObj = new HashMap<>(); + divObj.put("sect_code", sect.getSect_code()); + divObj.put("stor_code", sect.getStor_id()); + divObj.put("checked", true); + List ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper() + .eq(IOStorInvDis::getIostorinv_id, invId)); + if (ioStorInvDis.size() == 0) { + throw new BadRequestException("分配明细不存在!"); + } + // 类型转换 + ArrayList tables = new ArrayList<>(); + ioStorInvDis.forEach(item -> tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class))); + divObj.put("tableMater", tables); + return divObj; + } + + private Map doBuildInvObj(JSONArray rows) { + Map res = new HashMap<>(); + ArrayList tableData = new ArrayList<>(); + res.put("tableData", tableData); + // 物料室仓库 + res.put("stor_id", "1582991156504039424"); + res.put("bill_status", "10"); + res.put("detail_count", rows.size()); + res.put("bill_type", "0011"); + res.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); + for (int i = 0; i < rows.size(); i++) { + HashMap table = new HashMap<>(); + JSONObject row = rows.getJSONObject(i); + table.put("group_id", row.getString("group_id")); + table.put("storagevehicle_code", row.getString("")); + table.put("material_id", row.getString("material_id")); + table.put("pcsn", row.getString("pcsn")); + table.put("qty", row.getBigDecimal("qty")); + table.put("qty_unit_id", row.getString("qty_unit_id")); + table.put("qty_unit_name", row.getString("qty_unit_name")); + table.put("status", "01"); + table.put("bag_no", row.getString("bag_no")); + table.put("material_code", row.getString("material_code")); + table.put("material_name", row.getString("material_name")); + table.put("material_spec", row.getString("material_spec")); + tableData.add(table); + } + return res; + } }