diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml index cb992c8..78e2668 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml @@ -87,6 +87,7 @@ 1 = 1 AND ext.status = '02' + AND ext.qty > 0 AND attr.stor_id = #{param.stor_id} @@ -257,6 +258,7 @@ INNER JOIN md_me_materialbase mater ON mater.material_id = ext.material_id 1 = 1 + AND ext.`status` < '03' AND attr.stor_id = #{params.stor_id} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java index dba72ac..bae4f19 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java @@ -394,20 +394,20 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl(Structattr.class) - .set(Structattr::getStoragevehicle_code, m3) - .set(Structattr::getUpdate_optid, currentUserId) - .set(Structattr::getUpdate_optname, nickName) - .set(Structattr::getUpdate_time, now) - .set(Structattr::getLock_type, "0") - .eq(Structattr::getStruct_id, structattr.getStruct_id()) - ); } + //锁定新库存 + iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class) + .set(Structattr::getStoragevehicle_code, m3) + .set(Structattr::getUpdate_optid, currentUserId) + .set(Structattr::getUpdate_optname, nickName) + .set(Structattr::getUpdate_time, now) + .set(Structattr::getLock_type, "0") + .eq(Structattr::getStruct_id, structattr.getStruct_id()) + ); } } } catch (Exception ex) { - throw new BadRequestException("导入失败" + ex.getMessage() + ":" + in); + throw new BadRequestException("导入失败" + ex.getMessage() + ",在表格第" + in+"行,请检查一下。"); } } @@ -512,7 +512,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl(Structattr.class) @@ -421,7 +420,7 @@ public class StructattrServiceImpl extends ServiceImpl bindOrUnbind(@RequestBody JSONObject whereJson) { assertNotBlankJson(whereJson, "请求参数不能为空", "mode"); RedissonUtils.lock(() -> { - if (StringUtils.isBlank(whereJson.getString("siteCode"))&&StringUtils.isBlank( whereJson.getString("shelfCode"))) { + if (StringUtils.isBlank(whereJson.getString("siteCode")) && StringUtils.isBlank(whereJson.getString("shelfCode"))) { throw new BadRequestException("点位编号和载具编号需要扫其中一个,不能同时为空"); } - pdaIosOutService.bindOrUnbind(whereJson.getString("siteCode"), whereJson.getString("shelfCode"), whereJson.getString("mode"),true); + pdaIosOutService.bindOrUnbind(whereJson.getString("siteCode"), whereJson.getString("shelfCode"), whereJson.getString("mode"), true); }, "bindOrUnbind" , null); return new ResponseEntity<>(PdaResponse.requestParamOk(whereJson), HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java index a326b6c..38aaaa5 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java @@ -33,10 +33,13 @@ import org.nl.wms.pda.ios_manage.service.PdaIosInService; import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.sch_manage.enums.StatusEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseRegionService; +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.SchBaseRegion; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; @@ -70,7 +73,8 @@ import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS; @Service @Slf4j public class PdaIosInServiceImpl implements PdaIosInService { - + @Autowired + private ISchBaseTaskService iSchBaseTaskService; @Autowired private Map applyTaskMap; /** @@ -294,7 +298,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { throw new BadRequestException("物料信息错误:" + dataArray.getJSONObject(0).getString("material_id")); } if (StringUtils.isBlank(materInfo.getPlacement_type())) { - throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + ",未绑定货架,请在物料维护界面进行绑定操作"); + throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + ",物料编码为:" + materInfo.getMaterial_code() + ",未绑定货架,请在物料维护界面进行绑定操作"); } //货架人员管理校验,admin不校验 if (!"admin".equals(userName)) { @@ -312,7 +316,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { List rowList = list.stream().map(Structattr::getPlacement_type).map(String::valueOf).collect(Collectors.toList()); //检查物料的用户ID是否在用户绑定的货架行号中 if (!rowList.contains(materInfo.getPlacement_type())) { - throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + ",归属的货架:" + materInfo.getPlacement_type() + ",不属于用户:" + userName + " 的管理范畴或货架库位已满,请检查或修改用户的货架或物料权限!"); + throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + ",物料编码为:" + materInfo.getMaterial_code() + ",归属的货架:" + materInfo.getPlacement_type() + ",不属于用户:" + userName + " 的管理范畴或货架库位已满,请检查或修改用户的货架或物料权限!"); } } } @@ -332,7 +336,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { .set(GroupPlate::getUpdate_time, DateUtil.now()) .set(GroupPlate::getUpdate_optid, userId) .set(GroupPlate::getUpdate_optname, userName) - .set(GroupPlate::getRemark, "载具:" + vehicleDao.getStoragevehicle_code() + "存在物料,于" + DateUtil.now() + "重新组盘,该物料强制清空出库。") + .set(GroupPlate::getRemark, "载具:" + vehicleDao.getStoragevehicle_code() + "于" + DateUtil.now() + "重置,重新入库。") .in(GroupPlate::getGroup_id, groupPlateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet())) ); } @@ -433,8 +437,8 @@ public class PdaIosInServiceImpl implements PdaIosInService { LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda(); String search = MapUtil.getStr(whereJson, "search"); if (ObjectUtil.isNotEmpty(search)) { - queryWrapper.likeRight(MdMeMaterialbase::getMaterial_code, search) - .or(item -> item.likeRight(MdMeMaterialbase::getMaterial_name, search)); + queryWrapper.like(MdMeMaterialbase::getMaterial_code, search) + .or(item -> item.like(MdMeMaterialbase::getMaterial_name, search)); } String regionCode = MapUtil.getStr(whereJson, "region"); if (ObjectUtil.isNotEmpty(regionCode)) { @@ -463,9 +467,55 @@ public class PdaIosInServiceImpl implements PdaIosInService { PageQuery pageQuery = new PageQuery(); IPage regionList = iSchBaseRegionService.queryAll(whereJson, pageQuery); List selectList = new ArrayList<>(); + String regionCode = "YZHJ01"; + String regionName = "预装线货架区"; + if (ObjectUtil.isNotEmpty(whereJson.getString("storagevehicle_code"))) { + List taskList = iSchBaseTaskService.list(new LambdaQueryWrapper().eq(SchBaseTask::getVehicle_code, whereJson.getString("storagevehicle_code")).lt(SchBaseTask::getTask_status, TaskStatus.UNFINISHED.getCode()).orderByDesc(SchBaseTask::getCreate_time).last("LIMIT 50")); + if (ObjectUtil.isNotEmpty(taskList)) { + //去除相同区域转运 + taskList = taskList.stream() + .filter(task -> { + String pointCodeStart = task.getPoint_code1(); + String pointCodeEnd = task.getPoint_code2(); + return StringUtils.isNotBlank(pointCodeStart) && + StringUtils.isNotBlank(pointCodeEnd) && + pointCodeStart.charAt(0) != pointCodeEnd.charAt(0); + }) + .collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(whereJson.getString("pointCode"))) { + //提取与起点相同的终点任务的区域 + taskList = taskList.stream() + .filter(task -> { + String pointCodeStart = whereJson.getString("pointCode"); + String pointCodeEnd = task.getPoint_code2(); + return StringUtils.isNotBlank(pointCodeStart) && + StringUtils.isNotBlank(pointCodeEnd) && + pointCodeStart.charAt(0) == pointCodeEnd.charAt(0); + }) + .collect(Collectors.toList()); + } + //获取区域 + if (ObjectUtil.isNotEmpty(taskList)) { + List schBasePointList = iSchBasePointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, taskList.get(0).getPoint_code1()).eq(SchBasePoint::getIs_used, true)); + regionCode = schBasePointList.get(0).getRegion_code(); + regionName = schBasePointList.get(0).getRegion_name(); + } + } + } + selectList.add(SelectItemVo.builder().text(regionName).value(regionCode).build()); + List finalSelectList = selectList; regionList.getRecords().forEach(r -> - selectList.add(SelectItemVo.builder().text(r.getRegion_name()).value(r.getRegion_code()).build()) + finalSelectList.add(SelectItemVo.builder().text(r.getRegion_name()).value(r.getRegion_code()).build()) ); + Set seenValues = new HashSet<>(); + selectList = selectList.stream() + .filter(item -> { + if ("YZHJ01".equals(item.getValue())) { + return seenValues.add(item.getValue()); + } + return true; + }) + .collect(Collectors.toList()); return selectList; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java index 6e8d0c1..4174f86 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java @@ -16,12 +16,14 @@ import org.apache.commons.lang3.StringUtils; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.vo.SelectItemVo; +import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.exception.BadRequestException; 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.config.SpringContextHolder; +import org.nl.system.service.notice.impl.SysNoticeServiceImpl; import org.nl.wms.basedata_manage.enums.BaseDataEnum; import org.nl.wms.basedata_manage.service.*; import org.nl.wms.basedata_manage.service.dao.*; @@ -492,13 +494,12 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { PageQuery pageQuery = new PageQuery(); pageQuery.setPage(whereJson.getInteger("page") - 1); pageQuery.setSize(100); - whereJson.put("region", "YZHJ"); // 查询条件 LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda(); String search = MapUtil.getStr(whereJson, "search"); if (ObjectUtil.isNotEmpty(search)) { - queryWrapper.likeRight(MdMeMaterialbase::getMaterial_code, search) - .or(item -> item.likeRight(MdMeMaterialbase::getMaterial_name, search)); + queryWrapper.like(MdMeMaterialbase::getMaterial_code, search) + .or(item -> item.like(MdMeMaterialbase::getMaterial_name, search)); } String regionCode = MapUtil.getStr(whereJson, "region"); if (ObjectUtil.isNotEmpty(regionCode)) { @@ -516,6 +517,8 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { @Transactional(rollbackFor = Exception.class) public PdaResponse bindOrUnbind(String siteCode, String shelfCode, String mode, boolean dealGroupPlate) { SchBasePoint sitePoint = new SchBasePoint(); + String siteCode1 = ""; + String shelfCode1 = ""; // 校验站点是否存在、是否可用 if (StringUtils.isNotBlank(siteCode)) { sitePoint = iSchBasePointService.getOne( @@ -526,6 +529,8 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { if (sitePoint == null) { throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); } + siteCode1 = siteCode; + shelfCode1 = sitePoint.getVehicle_code() == null ? ",并清空了该站点货物" : sitePoint.getVehicle_code(); } //绑定 if (IOSEnum.BIND_OR_UNBIND.code("绑定").equals(mode)) { @@ -562,9 +567,13 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { dealGroupPlateStatus(shelfCode, sitePoint.getRegion_code()); } doBind(siteCode, shelfCode); + shelfCode1 = shelfCode; } else { doUnbind(siteCode, sitePoint.getParent_point_code()); + siteCode1 =siteCode; } + String operation = "0".equals(mode) ? "解绑" : "绑定"; + SpringContextHolder.getBean(SysNoticeServiceImpl.class).createNotice(DateUtil.now() + ",手持端操作通知:站点" + siteCode1 + operation + shelfCode1, "操作信息", NoticeTypeEnum.NOTIFICATION.getCode()); return PdaResponse.requestOk(); } @@ -586,6 +595,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()); ; iSchBasePointService.update(wrapper1); + SpringContextHolder.getBean(SysNoticeServiceImpl.class).createNotice(DateUtil.now() + ",手持端操作通知:载具:" + shelfCode + "在新位置:" + siteCode + "重新组盘,旧站点:" + boundPoint.getPoint_code() + "被解绑释放。", "操作信息", NoticeTypeEnum.NOTIFICATION.getCode()); //throw new BadRequestException("当前货架:" + shelfCode + "已绑定在站点:" + boundPoint.getPoint_code() + ",请扫描站点:" + boundPoint.getPoint_code() + "进行解绑,再绑定。"); } wrapper.eq(SchBasePoint::getPoint_code, siteCode) @@ -884,9 +894,20 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")) .eq(SchBasePoint::getPoint_code, startPointCode) ); + SpringContextHolder.getBean(SysNoticeServiceImpl.class).createNotice(DateUtil.now() + ",手持端操作通知:生成点对点任务,站点:" + vehiclePoint.getPoint_code() + "强制解绑载具:" + vehicleCode+",重新绑定到站点:"+startPointCode, "操作信息", NoticeTypeEnum.NOTIFICATION.getCode()); + } + //只有空载具才会自动回原来区域 + int has = iMdPbGroupplateService.count(new LambdaUpdateWrapper() + .eq(GroupPlate::getStoragevehicle_code, vehicleCode) + .lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))); + if (has > 0) { + isCheckIvt = "0"; } //终点为站点 if (StringUtils.isNotBlank(pointCode2)) { + if (startPointCode.equals(pointCode2)) { + throw new BadRequestException("起点和终点不能相同,请检查!"); + } SchBasePoint schBasePoint = iSchBasePointService.getOne( new LambdaQueryWrapper() .eq(SchBasePoint::getPoint_code, pointCode2).eq(SchBasePoint::getIs_used, true) @@ -898,13 +919,32 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { } else { if ("1".equals(isCheckIvt)) { //终点为区域 - List taskList = iSchBaseTaskService.list(new LambdaQueryWrapper().eq(SchBaseTask::getVehicle_code, vehicleCode).eq(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()).orderByDesc(SchBaseTask::getCreate_time).last("LIMIT 50")); + List taskList = iSchBaseTaskService.list(new LambdaQueryWrapper().eq(SchBaseTask::getVehicle_code, vehicleCode).lt(SchBaseTask::getTask_status, TaskStatus.UNFINISHED.getCode()).orderByDesc(SchBaseTask::getCreate_time).last("LIMIT 50")); if (ObjectUtil.isNotEmpty(taskList)) { - List schBasePointList = iSchBasePointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, taskList.get(0).getPoint_code1()).eq(SchBasePoint::getIs_used, true)); - if (ObjectUtil.isNotEmpty(schBasePointList)) { - if (!point.getRegion_code().equals(schBasePointList.get(0).getRegion_code())) { - regionCode = schBasePointList.get(0).getRegion_code(); - } + //去除相同区域转运 + taskList = taskList.stream() + .filter(task -> { + String pointCodeStart = task.getPoint_code1(); + String pointCodeEnd = task.getPoint_code2(); + return StringUtils.isNotBlank(pointCodeStart) && + StringUtils.isNotBlank(pointCodeEnd) && + pointCodeStart.charAt(0) != pointCodeEnd.charAt(0); + }) + .collect(Collectors.toList()); + //提取与起点相同的终点任务的区域 + taskList = taskList.stream() + .filter(task -> { + String pointCodeStart = point.getPoint_code(); + String pointCodeEnd = task.getPoint_code2(); + return StringUtils.isNotBlank(pointCodeStart) && + StringUtils.isNotBlank(pointCodeEnd) && + pointCodeStart.charAt(0) == pointCodeEnd.charAt(0); + }) + .collect(Collectors.toList()); + //获取区域 + if (ObjectUtil.isNotEmpty(taskList)) { + List schBasePointList = iSchBasePointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, taskList.get(0).getPoint_code1()).eq(SchBasePoint::getIs_used, true)); + regionCode = schBasePointList.get(0).getRegion_code(); } } } @@ -933,7 +973,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { //入库分配 SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson); return PdaResponse.requestOk(); - }else{ + } else { throw new BadRequestException("该区域暂无空闲货位,请及时取走该区域的物料!"); } } @@ -942,6 +982,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { JSONObject task = new JSONObject(); task.put("task_type", IOSConstant.PDA_POINT_TASK); task.put("config_code", IOSConstant.PDA_POINT_TASK); + task.put("vehicle_type", vehicleDao.getStoragevehicle_type()); task.put("point_code1", startPointCode); task.put("point_code2", endPointCode); task.put("vehicle_code", vehicleCode); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java index 8f1a81c..d5085bc 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/StatusEnum.java @@ -74,7 +74,7 @@ public enum StatusEnum { TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code, IOBILL_TYPE_OUT.code, IOBILL_TYPE_MOVE.code, EXT_TASK_TYPE.code, OTHER_TASK_TYPE.code)), ACS_TASK_TYPE(ForkMap.of( - "叉车", "1", "ccbyrw01", "CTU入库", "2", "ctubyru01", "潜伏车", "3", "qfbyrw01", "CTU出库", "4", "ctubyru02" + "叉车", "1", "ccbyrw01", "CTU入库", "2", "ctubyru01", "潜伏车", "3", "qfbyrw01", "CTU出库", "4", "ctubyru02", "普通托盘转运", "5", "DNBJBY", "钣金托盘转运", "6", "DNZBBYRW", "高位库普通托盘", "7", "ccbyrw02" )), /** @@ -95,7 +95,7 @@ public enum StatusEnum { PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)), - REGION_INFO(ForkMap.of("商用线5号线", "SYCX01", null, "预装暂存区", "YZZC01", null, "预装线货架区", "YZHJ01", null, "铜管仓", "TGCK01", null, + REGION_INFO(ForkMap.of("商用线5号线", "SYCX01", null, "预装托盘暂存区", "YZZC01", null, "预装线货架区", "YZHJ01", null, "铜管仓", "TGCK01", null, "铜管-烧焊车间", "SHCJ01", null,"两器-烧焊车间", "SHCJ02", null, "来料检验区", "LLJY01", null, "空托存放区", "KTCF01", null, "两器仓", "LQHJ01", null, "满托存放区", "MTCF01", null, "焊接货架区", "LQSH01", null, "原料入库区", "RKQ01", null,"CTU入库点", "CTU01", null,"CTU出库点", "CTU02", null)), diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java index a3be7c5..4862a06 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java @@ -15,8 +15,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; +import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.notice.impl.SysNoticeServiceImpl; import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; @@ -32,7 +35,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -135,6 +141,8 @@ public class SchBasePointServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper(); updateWrapper.eq(SchBasePoint::getPoint_code, entity.getPoint_code()); // 获取region_name @@ -155,8 +163,12 @@ public class SchBasePointServiceImpl extends ServiceImpl new BadRequestException("该区域暂无空闲货位,请及时取走该区域的物料!")) .getPoint_code(); - } else if ((regionCode.equals(StatusEnum.REGION_INFO.code("预装暂存区")))) { - Map> pointMap = pointList.stream().collect(Collectors.groupingBy(SchBasePoint::getParent_point_code)); - if (ObjectUtils.isEmpty(pointMap)) { - throw new RuntimeException("该暂存区已分配或放满了,请及时取走暂存区的物料!"); - } - for (Map.Entry> entry : pointMap.entrySet()) { - List filteredSortedList = entry.getValue(); - filteredSortedList.sort(Comparator.comparingInt(SchBasePoint::getCol_num).reversed()); - boolean hasEmptyVehicle = true; - Optional emptyList = filteredSortedList.stream() - .filter(n -> n.getPoint_status().equals(IOSEnum.POINT_STATUS.code("无货"))) - .findFirst(); - //判断点位外层是否有空载具 - if (emptyList.isPresent()) { - Integer sortSeq = emptyList.get().getCol_num(); - //外层存在有货的阻挡,那么这一列都不能用了 - hasEmptyVehicle = filteredSortedList.stream() - .anyMatch(r -> r.getCol_num() < sortSeq && - r.getPoint_status().equals(IOSEnum.POINT_STATUS.code("有货"))); - } - if (!hasEmptyVehicle) { - pointCode = emptyList.get().getPoint_code(); - break; - } - } - if (StringUtils.isBlank(pointCode)) { - throw new BadRequestException("该暂存区暂无空闲货位,请检查暂存区是否存在同一列有物料阻挡未取走!"); - } - } else { + } + // else if ((regionCode.equals(StatusEnum.REGION_INFO.code("预装托盘暂存区")))) { + // Map> pointMap = pointList.stream().collect(Collectors.groupingBy(SchBasePoint::getParent_point_code)); + // if (ObjectUtils.isEmpty(pointMap)) { + // throw new RuntimeException("该暂存区已分配或放满了,请及时取走暂存区的物料!"); + // } + // for (Map.Entry> entry : pointMap.entrySet()) { + // List filteredSortedList = entry.getValue(); + // filteredSortedList.sort(Comparator.comparingInt(SchBasePoint::getCol_num).reversed()); + // boolean hasEmptyVehicle = true; + // Optional emptyList = filteredSortedList.stream() + // .filter(n -> n.getPoint_status().equals(IOSEnum.POINT_STATUS.code("无货"))) + // .findFirst(); + // //判断点位外层是否有空载具 + // if (emptyList.isPresent()) { + // Integer sortSeq = emptyList.get().getCol_num(); + // //外层存在有货的阻挡,那么这一列都不能用了 + // hasEmptyVehicle = filteredSortedList.stream() + // .anyMatch(r -> r.getCol_num() < sortSeq && + // r.getPoint_status().equals(IOSEnum.POINT_STATUS.code("有货"))); + // } + // if (!hasEmptyVehicle) { + // pointCode = emptyList.get().getPoint_code(); + // break; + // } + // } + // if (StringUtils.isBlank(pointCode)) { + // throw new BadRequestException("该暂存区暂无空闲货位,请检查暂存区是否存在同一列有物料阻挡未取走!"); + // }} + else { //默认升序 pointCode = pointList.stream() .findFirst() diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java index a0668d9..146a636 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java @@ -17,6 +17,7 @@ import org.nl.wms.sch_manage.service.dao.mapper.SchBaseRegionMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; @@ -95,7 +96,7 @@ public class SchBaseRegionServiceImpl extends ServiceImpl getRegionList(SchBaseRegion region) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); if (region != null) { - lambdaQueryWrapper.eq(SchBaseRegion::getStor_code, region.getStor_code()); + lambdaQueryWrapper.like(SchBaseRegion::getStor_code, region.getStor_code()); } lambdaQueryWrapper.orderByAsc(SchBaseRegion::getOrder_seq); return schBaseRegionMapper.selectList(lambdaQueryWrapper); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java index a0ef822..805797c 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java @@ -9,6 +9,7 @@ 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.apache.commons.collections4.CollectionUtils; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; import org.nl.wms.ext.service.WmsToAcsService; @@ -24,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -86,17 +88,40 @@ public abstract class AbstractTask { /** - * 获取任务扩展信息 + * 设置任务扩展信息(物料编码、名称、入库数量、出库数量、批次信息) */ public void getExtInfo(SchBaseTask task) { List groupPlateList = iMdPbGroupplateService.list( new LambdaQueryWrapper() .eq(GroupPlate::getStoragevehicle_code, task.getVehicle_code()) .lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))); - if (ObjectUtil.isNotEmpty(groupPlateList)) { - MdMeMaterialbase mdMeMaterialbase = iMdMeMaterialbaseService.getById(groupPlateList.get(0).getMaterial_id()); - task.setExt_group_data("物料编码:"+mdMeMaterialbase.getMaterial_code() + "-" + "物料名称:"+mdMeMaterialbase.getMaterial_name() + "-" +"入库数量:"+ groupPlateList.get(0).getQty() + "-" +"出库数量:"+ groupPlateList.get(0).getFrozen_qty() + "-" +"批次信息:"+ groupPlateList.get(0).getPcsn()); + if (CollectionUtils.isEmpty(groupPlateList)) { + return; } + // 确定用于构建扩展信息的 GroupPlate 记录 + GroupPlate targetPlate; + if (groupPlateList.size() > 1) { + targetPlate = groupPlateList.stream() + .filter(r -> r.getFrozen_qty().compareTo(BigDecimal.ZERO) > 0) + .findFirst() + .orElse(groupPlateList.get(0)); + } else { + targetPlate = groupPlateList.get(0); + } + MdMeMaterialbase material = iMdMeMaterialbaseService.getById(targetPlate.getMaterial_id()); + if (material == null) { + return; + } + // 获取数量 + BigDecimal outQty = targetPlate.getFrozen_qty(); + BigDecimal inQty = targetPlate.getFrozen_qty().compareTo(BigDecimal.ZERO) > 0 ? BigDecimal.ZERO : targetPlate.getQty(); + String extInfo = String.format("物料编码:%s-物料名称:%s-入库数量:%s-出库数量:%s-批次信息:%s", + material.getMaterial_code(), + material.getMaterial_name(), + inQty, + outQty, + targetPlate.getPcsn()); + task.setExt_group_data(extInfo); } /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/PointUtils.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/PointUtils.java index 2e8646d..b8282cb 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/PointUtils.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/PointUtils.java @@ -1,7 +1,6 @@ package org.nl.wms.sch_manage.service.util; import com.alibaba.fastjson.JSONObject; -import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.service.dao.SchBaseTask; /** @@ -32,7 +31,19 @@ public class PointUtils { public static String getRcsTraceId(SchBaseTask task) { if (task.getVehicle_code().contains("T")) { - return "ccbyrw01"; + if (task.getPoint_code1().contains("A") || task.getPoint_code2().contains("A")) { + //普通托盘 + return "ccbyrw02"; + } else { + //tofix 产线转运 叉车钣金铁托盘 ccbyrw01 + //普通托盘 + if ("1".equals(task.getVehicle_type())) { + return "DNZBBYRW"; + } else { + //钣金托盘 + return "DNBJBY"; + } + } } else if (task.getVehicle_code().contains("LX")) { return task.getConfig_code().contains("In") ?"ctubyru01":"ctubyru02"; } else { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java index bf34610..c1fddf7 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java @@ -825,7 +825,6 @@ public class OutBillServiceImpl extends ServiceImpl ioStorInvDis.setQty_unit_id(dtl.getQty_unit_id()); ioStorInvDis.setQty_unit_name(dtl.getQty_unit_name()); ioStorInvDis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("未生成")); - // 未分配数量 - 该库位上的可用数量 < 0 目前做整出 // double canuse_qty = outAllocation.getCanuse_qty().doubleValue(); // if (unassign_qty-canuse_qty>=0){ @@ -838,7 +837,7 @@ public class OutBillServiceImpl extends ServiceImpl // unassign_qty=0; // } if (unassign_qty <= 0){ - throw new BadRequestException("已全部分配完,未分配数量为0"); + continue; } unassign_qty = unassign_qty-canuse_qty; if (unassign_qty<0){ @@ -1199,6 +1198,7 @@ public class OutBillServiceImpl extends ServiceImpl finish_map.put("inv_type", null); finish_map.put("inv_id", null); finish_map.put("inv_code", null); + String now = DateUtil.now(); iStructattrService.updateStatusByCode("1", finish_map); //更新终点 LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); @@ -1231,13 +1231,12 @@ public class OutBillServiceImpl extends ServiceImpl .set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()); iSchBasePointService.update(wrapper); - //绑定载具 - pdaIosOutService.bindOrUnbind(task.getPoint_code2(), task.getVehicle_code(), IOSEnum.BIND_OR_UNBIND.code("绑定"),false); + //绑定目标点位载具 + pdaIosOutService.bindOrUnbind(task.getPoint_code2(), task.getVehicle_code(), IOSEnum.BIND_OR_UNBIND.code("绑定"), false); //是否处理单据及分配信息 if (BaseDataEnum.IS_YES_NOT.code("是").equals(task.getHandle_status())) { String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); List ioStorInvDisList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class) .eq(IOStorInvDis::getTask_id, task.getTask_id()) ); @@ -1248,15 +1247,20 @@ public class OutBillServiceImpl extends ServiceImpl ioStorInvDisMapper.update(null, new LambdaUpdateWrapper<>(IOStorInvDis.class) .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成")) .in(IOStorInvDis::getIostorinvdis_id, ioStorInvDisList.stream().map(IOStorInvDis::getIostorinvdis_id).collect(Collectors.toList()))); - ioStorInvDisList.forEach(r -> { - //库存变动:根据冻结数更新物料库存 + //库存变动:根据冻结数更新物料库存,潜伏车和叉车都是自动确认 + boolean inBound = true; + if (!"qfbyrw01".equals(task.getAcs_trace_id())) { + inBound = false; + } else if (!task.getVehicle_code().contains("T")) { + inBound = false; + } StructattrChangeDto changeDto = StructattrChangeDto.builder() .inv(r.getIostorinv_id()) .storagevehicleCode(r.getStoragevehicle_code()) .structCode(r.getStruct_code()) .taskType(task.getConfig_code()) - .inBound(!"qfbyrw01".equals(task.getAcs_trace_id())).build(); + .inBound(inBound).build(); iStructattrService.changeStruct(changeDto); int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) .eq(IOStorInvDis::getIostorinvdtl_id, r.getIostorinvdtl_id()) diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java index 41134b8..fc13b3a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java @@ -82,8 +82,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl extraInfo = new HashMap<>(); // extraInfo.put("s", "1"); // extraInfo.put("d", "2"); diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml index c682a12..9384616 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -11,7 +11,7 @@ spring: freemarker: check-template-location: false profiles: - active: prod + active: dev jackson: time-zone: GMT+8730 885 969 data: diff --git a/nladmin-ui/package.json b/nladmin-ui/package.json index 361f471..6123943 100644 --- a/nladmin-ui/package.json +++ b/nladmin-ui/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "scripts": { "dev": "vue-cli-service serve", + "dev1": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "dev_mac": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build:prod": "vue-cli-service build", "build:stage": "vue-cli-service build --mode staging", diff --git a/nladmin-ui/src/views/features/401.vue b/nladmin-ui/src/views/features/401.vue index 8a3b69e..a34b2cd 100644 --- a/nladmin-ui/src/views/features/401.vue +++ b/nladmin-ui/src/views/features/401.vue @@ -17,6 +17,7 @@ 回首页 +