From 8dd2ea5d0c2e97cf8b3e859f79e606bab369ddda Mon Sep 17 00:00:00 2001 From: zhangzq Date: Thu, 18 Jul 2024 14:00:19 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E8=A7=84=E5=88=99=EF=BC=8Cfifo=E5=BF=85=E9=A1=BB?= =?UTF-8?q?=E4=B8=BA=E7=AC=AC=E4=B8=80=E4=B8=AA=E5=87=BA=E5=BA=93=E8=A7=84?= =?UTF-8?q?=E5=88=99=EF=BC=9Bopt:=E6=89=98=E7=9B=98=E5=87=BA=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E6=B7=BB=E5=8A=A0=E6=A0=A1=E9=AA=8C=EF=BC=9B=E6=89=8B?= =?UTF-8?q?=E6=8C=81=E7=BB=84=E7=9B=98=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=BA=93=E4=BD=8D=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/AppRun.java | 2 +- .../domain/constant/DictConstantPool.java | 1 + .../vehicle/service/dto/VehicleQuery.java | 1 + .../chainer/impl/StartDecisionChainer.java | 3 +- .../decisioner/impl/base/FIFORuleHandler.java | 19 ++++++---- .../service/impl/MdGruopDickServiceImpl.java | 23 +++++++++--- .../MdPbVehicleMaterController.java | 35 +++++++++++-------- .../wms/pda_manage/group/GroupController.java | 15 +++----- .../service/PalletIostorinvService.java | 35 ++++++++++++++++++- .../dao/mapper/xml/StIvtStructattrMapper.xml | 3 ++ .../views/wms/base_manage/vehicle/index.vue | 26 ++++++-------- 11 files changed, 109 insertions(+), 54 deletions(-) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java index 53e9f80c..b24571cb 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/AppRun.java @@ -45,7 +45,7 @@ public class AppRun implements CommandLineRunner { @Override public void run(String... args) { - HeartClientServer heartServer = new HeartClientServer(new InetSocketAddress("192.168.10.48", 20889)); +// HeartClientServer heartServer = new HeartClientServer(new InetSocketAddress("192.168.10.60", 20889)); System.out.println("--------项目启动完成--------"); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/domain/constant/DictConstantPool.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/domain/constant/DictConstantPool.java index 5ac74b96..dc7f7a2a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/domain/constant/DictConstantPool.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/domain/constant/DictConstantPool.java @@ -12,5 +12,6 @@ public class DictConstantPool { public static final String DICT_SYS_CODE = "system_type"; public static final String DICT_SYS_NAME = "所属系统"; + public static final int STRUCT_COUNT = 5; public static final Map PRODUCT_OUT_POINT = MapOf.of("A1","1101","A2","2114","A3","3204"); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dto/VehicleQuery.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dto/VehicleQuery.java index 6ca8f797..4f97921e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dto/VehicleQuery.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dto/VehicleQuery.java @@ -14,6 +14,7 @@ import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; public class VehicleQuery extends BaseQuery { private String vehicle_code_begin; + private String vehicle_code; private String vehicle_code_end; private String vehicle_type; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java index cfdd74dc..188b2ae6 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java @@ -45,7 +45,7 @@ public class StartDecisionChainer extends DecisionerChain { @Override protected List execute(List from) { - List list; + List list = new ArrayList(); boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type); IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class); if (in_storage){ @@ -56,6 +56,7 @@ public class StartDecisionChainer extends DecisionerChain { query.isNull("vehicle_code"); list = iStIvtStructattrService.list(query); }else { + //出库流程由于有货货位较多:会生成多个对象容易内存益出,在fifo中直接通过materilal过滤目标 list = iStIvtStructattrService.structVehicle(MapOf.of("stor_code",startParam.getString("stor_code"))); } return list; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java index ac1a9d5f..11255e5b 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/FIFORuleHandler.java @@ -46,9 +46,10 @@ public class FIFORuleHandler extends Decisioner handler(List list, JSONObject param) { // 判断仓位是否为空 - if (ObjectUtil.isEmpty(list)) { - throw new BadRequestException("库存分配失败:库存不足!"); - } +// if (ObjectUtil.isEmpty(list)) { +// throw new BadRequestException("库存分配失败:库存不足!"); +// } +// List need = list.stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList()); //分配数量 int plan_qty = param.getInteger("qty"); //当前条件只有id,批次 @@ -56,15 +57,17 @@ public class FIFORuleHandler extends Decisioner (o.getQty().intValue() - finalPlan_qty))); - List need = list.stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList()); + List disList = new ArrayList<>(); for (StructattrVechielDto structattr : vechielDtos) { - if (need.contains(structattr.getVehicle_code()) && structattr.getFrozen_qty().intValue()==0){ +// if (need.contains(structattr.getVehicle_code()) && structattr.getFrozen_qty().intValue()==0){ + if (structattr.getFrozen_qty().intValue()==0){ int cause_qty = structattr.getQty().subtract(structattr.getFrozen_qty()).intValue(); int sub = plan_qty - cause_qty; disList.add(structattr); @@ -74,8 +77,12 @@ public class FIFORuleHandler extends Decisioner0){ + throw new BadRequestException("库存不足:物料"+param.getString("material_id")+"当前库存可用数"+(param.getInteger("qty").intValue()-finalPlan_qty)); + } return disList; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java index be4df8b0..d8b3d869 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java @@ -8,13 +8,11 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; +import org.nl.common.domain.constant.DictConstantPool; import org.nl.common.domain.entity.PageQuery; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; -import org.nl.common.utils.CodeUtil; -import org.nl.common.utils.IdUtil; -import org.nl.common.utils.MapOf; -import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.*; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; @@ -26,6 +24,8 @@ import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.wms.md_manage.group_dick.service.dto.GroupDickQuery; import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -58,6 +58,8 @@ public class MdGruopDickServiceImpl extends ServiceImpl{ + QueryWrapper query = new QueryWrapper() + .eq("is_used", true) + .eq("lock_type", StatusEnum.LOCK.code("无锁")) + .eq("stor_code", forms.getString("stor_code")) + .isNull("vehicle_code");; + int structCount = iStIvtStructattrService.count(query); + if (structCount< DictConstantPool.STRUCT_COUNT){ + throw new BadRequestException("入库失败:当前仓库可用库位小于"+DictConstantPool.STRUCT_COUNT); + } + }, StatusEnum.STRATEGY_TYPE.code("入库")+forms.getString("stor_code"),5); + List tableData = (ArrayList)forms.remove("item"); String now = DateUtil.now(); forms.put("create_name",SecurityUtils.getCurrentNickName()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/controller/MdPbVehicleMaterController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/controller/MdPbVehicleMaterController.java index b52c9b2c..d807d8f4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/controller/MdPbVehicleMaterController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/controller/MdPbVehicleMaterController.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; import org.nl.common.domain.entity.PageQuery; @@ -53,15 +54,19 @@ public class MdPbVehicleMaterController { public ResponseEntity getMaterialByVehicle(@PathVariable String vehicle_code) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(MdPbVehicleMater::getVehicle_code, vehicle_code); + lqw.eq(MdPbVehicleMater::getIs_delete,false); MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(lqw); JSONObject res = new JSONObject(); res.put("vehicle_code", vehicle_code); if (ObjectUtil.isNotEmpty(one)) { MdMeMaterialbase materialbase = materialbaseService.getById(one.getMaterial_id()); res.put("material_id", one.getMaterial_id()); + res.put("id", one.getId()); res.put("pcsn", one.getPcsn()); res.put("material_code", materialbase.getMaterial_code()); - res.put("storage_qty", one.getQty()); + res.put("qty", one.getQty()); + res.put("frozen_qty", one.getFrozen_qty()); + res.put("proc_inst_id", one.getProc_inst_id()); res.put("material_spec", materialbase.getMaterial_spec()); } return new ResponseEntity<>(res, HttpStatus.OK); @@ -85,21 +90,21 @@ public class MdPbVehicleMaterController { @PostMapping("/updateVehicleMaterial") public ResponseEntity updateVehicleMaterial(@RequestBody JSONObject req) { - String vehicle_code = req.getString("vehicle_code"); - Assert.notBlank(vehicle_code); - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(MdPbVehicleMater::getVehicle_code, vehicle_code); - MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(lqw); - if (ObjectUtil.isEmpty(one)) { - throw new BadRequestException("载具物料表中不存在该载具信息!"); + if (StringUtils.isNotEmpty((req.getString("id")))){ + if (StringUtils.isEmpty(req.getString("material_id"))){ + throw new BadRequestException("载具物料不能为空"); + }else { + MdPbVehicleMater mater = new MdPbVehicleMater(); + mater.setId(req.getString("id")); + mater.setMaterial_id(req.getString("material_id")); + mater.setPcsn(req.getString("pcsn")); + mater.setQty(req.getBigDecimal("qty")); + mater.setFrozen_qty(req.getBigDecimal("frozen_qty")); + mater.setPcsn(req.getString("pcsn")); + mater.setProc_inst_id(req.getString("proc_inst_id")); + iMdPbVehicleMaterService.updateById(mater); + } } - MdMeMaterialbase materialbase = materialbaseService.getOne(new LambdaQueryWrapper().eq(MdMeMaterialbase::getMaterial_code, req.getString("material_code"))); - MdPbVehicleMater mater = new MdPbVehicleMater(); - mater.setId(one.getId()); - mater.setMaterial_id(materialbase.getMaterial_id()); - mater.setPcsn(req.getString("pcsn")); - mater.setQty(req.getBigDecimal("storage_qty")); - iMdPbVehicleMaterService.updateById(mater); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java index b8a546cd..2f83d4b4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java @@ -5,6 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; +import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -27,23 +28,15 @@ import org.springframework.web.bind.annotation.RestController; public class GroupController { @Autowired - private PalletIostorinvService palletIostorinvService; + private IMdGruopDickService iMdGruopDickService; @PostMapping("in") @SaIgnore - @Log("手持托盘入库") + @Log("手持组盘操作") public ResponseEntity inStorage(@RequestBody JSONObject form) { - palletIostorinvService.inStorage(form); + iMdGruopDickService.groupDick(form); return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } - @PostMapping("out") - @SaIgnore - @Log("手持托盘出库") - public ResponseEntity outStorage(@RequestBody JSONObject form) { - palletIostorinvService.outStorage(form); - return new ResponseEntity<>(HttpStatus.OK); - } - } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java index ffc853ac..4187d032 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/palletio/service/PalletIostorinvService.java @@ -5,17 +5,25 @@ import cn.hutool.core.lang.Assert; 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.domain.constant.DictConstantPool; import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.enums.StatusEnum; import org.nl.common.publish.BussEventMulticaster; import org.nl.common.utils.*; +import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler; import org.nl.wms.flow_manage.monitor.event.FlowStartEvent; import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.List; +import java.util.Map; /* * @author ZZQ @@ -26,6 +34,8 @@ public class PalletIostorinvService { @Autowired private IMdPbVehicleMaterService iMdPbVehicleMaterService; + @Autowired + private IStIvtStructattrService iStIvtStructattrService; //托盘库 static String STOR_CODE = "FStockPallet"; public void inStorage(JSONObject form){ @@ -36,6 +46,17 @@ public class PalletIostorinvService { if (count>0){ throw new BadRequestException("入库失败:当前载具信息已经存在"); } + RedissonUtils.lock(()->{ + QueryWrapper query = new QueryWrapper() + .eq("is_used", true) + .eq("lock_type", StatusEnum.LOCK.code("无锁")) + .eq("stor_code", STOR_CODE) + .isNull("vehicle_code");; + int structCount = iStIvtStructattrService.count(query); + if (structCount< DictConstantPool.STRUCT_COUNT){ + throw new BadRequestException("入库失败:当前仓库可用库位小于"+DictConstantPool.STRUCT_COUNT); + } + }, StatusEnum.STRATEGY_TYPE.code("入库")+STOR_CODE,5); MdPbVehicleMater vehicleMater = new MdPbVehicleMater(); vehicleMater.setId(IdUtil.getStringId()); vehicleMater.setCreate_time(DateUtil.now()); @@ -66,7 +87,19 @@ public class PalletIostorinvService { flowData.put("stor_code",STOR_CODE); JSONObject auxParam = new JSONObject(); auxParam.put("target_point",form.getString("target_point")); - + RedissonUtils.lock(()->{ + List vechielDtos = iStIvtStructattrService.collectVechicle( + MapOf.of("material_id", form.getString("material_id") + , "pcsn", form.getString("pcsn") + , "stor_code", STOR_CODE + , "plan_qty", form.getInteger("qty") + , "is_lock", "false" + , "order_by", "ABS(qty-#{plan_qty}) asc,update_time asc") + ); + if (vechielDtos.size() { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml index 33f1087d..06ca7eec 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml @@ -82,6 +82,9 @@ #{value} + + md_pb_vehicleMater.is_lock == false + order by ${order_by} diff --git a/wms_pro/qd/src/views/wms/base_manage/vehicle/index.vue b/wms_pro/qd/src/views/wms/base_manage/vehicle/index.vue index 747779e3..94834372 100644 --- a/wms_pro/qd/src/views/wms/base_manage/vehicle/index.vue +++ b/wms_pro/qd/src/views/wms/base_manage/vehicle/index.vue @@ -31,20 +31,10 @@ - - - - - - + + + + + + + + +