diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/DateUtil.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/DateUtil.java index 2316c83..15782f6 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/DateUtil.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/DateUtil.java @@ -16,6 +16,8 @@ package org.nl.common.utils; +import cn.hutool.core.date.DatePattern; + import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Date; @@ -158,6 +160,17 @@ public class DateUtil { return LocalDateTime.from(DFY_MD_HMS.parse(localDateTime)); } + + /** + * 返回当前年月日 + * + * @return / + */ + public static String getDateTimeFormatyMd() { + return cn.hutool.core.date.DateUtil.format(cn.hutool.core.date.DateUtil.date(), DatePattern.PURE_DATE_PATTERN); + } + + /** * 字符串转 yyyy-MM-dd * diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Sectattr.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Sectattr.java index 9164404..d80f621 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Sectattr.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Sectattr.java @@ -48,7 +48,7 @@ public class Sectattr implements Serializable { /** * 仓库标识 */ - private String stor_id; + private String stor_code; /** * 仓库类型 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 8067845..753f752 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 @@ -72,6 +72,7 @@ attr.struct_name, attr.stor_name, attr.sect_name, + attr.lock_type, mater.material_code, mater.material_name FROM diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/SectattrMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/SectattrMapper.xml index 386172a..f247ea3 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/SectattrMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/SectattrMapper.xml @@ -2,7 +2,7 @@ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/BsrealStorattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/BsrealStorattrServiceImpl.java index e6ced6f..26545e2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/BsrealStorattrServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/BsrealStorattrServiceImpl.java @@ -56,6 +56,8 @@ public class BsrealStorattrServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { @@ -198,22 +200,21 @@ public class BsrealStorattrServiceImpl extends ServiceImpl(Sectattr.class) .set(Sectattr::getIs_used, is_used) .set(Sectattr::getUpdate_optid, currentUserId) .set(Sectattr::getUpdate_optname, nickName) .set(Sectattr::getUpdate_time, now) - .eq(Sectattr::getStor_id, stor_id) + .eq(Sectattr::getStor_code, stor_code) ); - iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class) .set(Structattr::getIs_used, is_used) .set(Structattr::getUpdate_optid, currentUserId) .set(Structattr::getUpdate_optname, nickName) .set(Structattr::getUpdate_time, now) - .eq(Structattr::getStor_id, stor_id) + .eq(Structattr::getStor_code, stor_code) ); } } 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 9a0bd72..3540630 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 @@ -8,6 +8,7 @@ import cn.hutool.poi.excel.ExcelUtil; 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.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -23,6 +24,7 @@ import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper; import org.nl.wms.ext.service.WmsToErpService; +import org.nl.wms.pda.ios_manage.service.PdaIosInService; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.springframework.beans.factory.annotation.Autowired; @@ -51,6 +53,13 @@ import java.util.stream.Collectors; @Service public class MdMeMaterialbaseServiceImpl extends ServiceImpl implements IMdMeMaterialbaseService { + + /** + * 手持服务 + */ + @Autowired + private PdaIosInService pdaIosInService; + /** * wms调用erp服务 */ @@ -58,19 +67,20 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl 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)); } + String regionCode = MapUtil.getStr(whereJson, "region"); + if (ObjectUtil.isNotEmpty(regionCode)) { + queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode); + } queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time); - return this.baseMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()), queryWrapper ); @@ -102,9 +114,11 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl list = read.get(i); String m1 = String.valueOf(list.get(0)); String m2 = String.valueOf(list.get(1)); - String m3 = ObjectUtil.isEmpty(list.get(2))?null:String.valueOf(list.get(2)); - String m4 = ObjectUtil.isEmpty(list.get(3))?null:String.valueOf(list.get(3)); - String m5 = ObjectUtil.isEmpty(list.get(4))?null:String.valueOf(list.get(4)); + String m3 = ObjectUtil.isEmpty(list.get(2)) ? null : String.valueOf(list.get(2)); + String m4 = ObjectUtil.isEmpty(list.get(3)) ? null : String.valueOf(list.get(3)); + String m5 = ObjectUtil.isEmpty(list.get(4)) ? null : String.valueOf(list.get(4)); // 根据物料编码查询是否有相同物料编码的物料 MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne( new QueryWrapper().lambda() @@ -167,9 +181,90 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl> read = excelReader.read(); + if (read.size() > 1) { + for (int i = 1; i < read.size(); i++) { + List list = read.get(i); + if (ObjectUtil.isEmpty(list.get(0)) || ObjectUtil.isEmpty(list.get(2)) || ObjectUtil.isEmpty(list.get(3)) || ObjectUtil.isEmpty(list.get(4))) { + if (ObjectUtil.isEmpty(list.get(1))) { + throw new BadRequestException("第" + i + "行,物料编码不能为空,请检查。"); + } + if (ObjectUtil.isEmpty(list.get(4))) { + throw new BadRequestException("第" + i + "行,库位编号不能为空,请检查。"); + } + if (ObjectUtil.isEmpty(list.get(5))) { + throw new BadRequestException("第" + i + "行,托盘编号不能为空,请检查。"); + } + if (ObjectUtil.isEmpty(list.get(6))) { + throw new BadRequestException("第" + i + "行,库存数量不能为空,请检查。"); + } + } + //物料编码 + String m1 = String.valueOf(list.get(1)).trim(); + MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne( + new QueryWrapper().lambda() + .eq(MdMeMaterialbase::getMaterial_code, m1) + ); + if (ObjectUtil.isEmpty(mdMeMaterialbase)) { + throw new BadRequestException("第" + i + "行,物料编码不存在【" + m1 + "】,请检查。"); + } + //库位编号 + String m2 = String.valueOf(list.get(4)).trim(); + Structattr structattr = iStructattrService.getOne( + new QueryWrapper().lambda() + .eq(Structattr::getStruct_code, m2) + ); + if (ObjectUtil.isEmpty(structattr)) { + throw new BadRequestException("第" + i + "行,库位编号不存在【" + m1 + "】,请检查。"); + } + //托盘编号 + String m3 = String.valueOf(list.get(5)).trim(); + MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class) + .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, m3) + ); + if (ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) { + throw new BadRequestException("第" + i + "行,托盘编号不存在【" + m1 + "】,请检查。"); + } + //物料数量 + Integer m4 = Integer.parseInt(String.valueOf(list.get(6)).trim()); + JSONObject whereJson = new JSONObject(); + whereJson.put("store_id", structattr.getStor_id()); + whereJson.put("material_id", mdMeMaterialbase.getMaterial_id()); + whereJson.put("material_code", mdMeMaterialbase.getMaterial_code()); + whereJson.put("pcsn", ""); + whereJson.put("qty", m4); + whereJson.put("vehicle_code", mdPbStoragevehicleinfo.getStoragevehicle_code()); + whereJson.put("groupStatus", "02"); + whereJson.put("remark", "该库存通过仓库数据初始化进行仓库盘点,手动导入库存。"); + pdaIosInService.groupPlate(whereJson); + iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class) + .set(Structattr::getStoragevehicle_code, mdPbStoragevehicleinfo.getStoragevehicle_code()) + .set(Structattr::getUpdate_optid, currentUserId) + .set(Structattr::getUpdate_optname, nickName) + .set(Structattr::getUpdate_time, now) + .eq(Structattr::getStruct_id, structattr.getStruct_id()) + ); + } + } + } catch (Exception ex) { + throw new BadRequestException("导入失败" + ex.getMessage()); + } + } + + /** + * 仓库导入 + */ + @Transactional + public void excelImport98(MultipartFile file, HttpServletRequest request, HttpServletResponse response) { try { InputStream inputStream = file.getInputStream(); ExcelReader excelReader = ExcelUtil.getReader(inputStream); @@ -244,7 +339,6 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl i Sectattr sectattr = sectattrMapper.selectOne(new LambdaQueryWrapper<>(Sectattr.class) .eq(Sectattr::getSect_id, dto.getSect_code()) - .eq(Sectattr::getStor_id, dto.getStor_id()) + .eq(Sectattr::getStor_code, dto.getStor_code()) ); if (ObjectUtil.isNotEmpty(sectattr)) { @@ -124,7 +124,7 @@ public class SectattrServiceImpl extends ServiceImpl i List sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper() .eq(Sectattr::getSect_code,sect_code) - .eq(Sectattr::getStor_id,dto.getStor_id()) + .eq(Sectattr::getStor_code,dto.getStor_code()) ); if (sectattrList.size() > 1) { throw new BadRequestException("存在相同仓库的库区编号"); @@ -185,7 +185,7 @@ public class SectattrServiceImpl extends ServiceImpl i List sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<>(Sectattr.class) .select(Sectattr::getSect_id,Sectattr::getSect_name) - .eq(StrUtil.isNotEmpty(stor_jo.getStor_id()),Sectattr::getStor_id,stor_jo.getStor_id()) + .eq(StrUtil.isNotEmpty(stor_jo.getStor_id()),Sectattr::getStor_code,stor_jo.getStor_code()) .eq(StrUtil.isNotEmpty(sect_type_attr),Sectattr::getSect_type_attr,sect_type_attr) .eq(Sectattr::getIs_delete,BaseDataEnum.IS_YES_NOT.code("否")) .eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是")) diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index 969d2c9..bc8e969 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java @@ -139,7 +139,7 @@ public class StructattrServiceImpl extends ServiceImpl apply(@RequestBody InteracteDto form) { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/gateway/service/impl/GateWayServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/gateway/service/impl/GateWayServiceImpl.java index 24d835b..98f65dd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/gateway/service/impl/GateWayServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/gateway/service/impl/GateWayServiceImpl.java @@ -173,7 +173,7 @@ public class GateWayServiceImpl implements IGateWayService { status = TaskStatus.UNFINISHED; break; case EXECUTE_FAIL: - status = TaskStatus.UNFINISHED; + status = TaskStatus.CANCELED; break; case ISSUE: status = TaskStatus.ISSUED; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java index e1a1055..8170c22 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java @@ -82,10 +82,10 @@ public class PdaIosInController { /** - * 组盘获取物料列表 + * 出库管理组盘获取物料列表 */ @PostMapping("/getMaterialList") - @Log("获取物料列表") + @Log("出库管理组盘获取物料列表") public ResponseEntity> getMaterialList(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaIosInService.getMaterialList(whereJson), HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosOutController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosOutController.java index 30bb1ff..b9d93b7 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosOutController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosOutController.java @@ -5,12 +5,16 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.vo.SelectItemVo; import org.nl.common.exception.BadRequestException; import org.nl.common.logging.annotation.Log; import org.nl.common.utils.MapOf; import org.nl.common.utils.RedissonUtils; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; +import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.util.PdaResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +27,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import static org.nl.common.utils.ValidationUtil.assertNotBlankJson; @@ -36,6 +42,8 @@ import static org.nl.common.utils.ValidationUtil.assertNotBlankJson; @RestController @RequiredArgsConstructor @RequestMapping("/api/pda/iosOut") + + @SaIgnore @Slf4j public class PdaIosOutController { @@ -65,10 +73,10 @@ public class PdaIosOutController { /** - * 线边库物料出库确认 + * 线边库仓物料点确认出库 */ @PostMapping("/materialConfirm") - @Log("线边库物料出库确认") + @Log("线边库仓物料点确认出库") public ResponseEntity materialConfirm(@RequestBody JSONObject whereJson) { assertNotBlankJson(whereJson, "请求参数不能为空", "sect_id", "siteCode"); RedissonUtils.lock(() -> { @@ -79,10 +87,10 @@ public class PdaIosOutController { /** - * 线边库物料出库确认 + * 产线叫料出库点确认出库 */ @PostMapping("/callMaterialConfirm") - @Log("产线叫料出库点确认") + @Log("产线叫料出库点确认出库") public ResponseEntity callMaterialConfirm(@RequestBody JSONObject whereJson) { assertNotBlankJson(whereJson, "请求参数不能为空", "region_code", "siteCode"); RedissonUtils.lock(() -> { @@ -97,13 +105,28 @@ public class PdaIosOutController { @PostMapping("bindOrUnbind") @Log("绑定或解绑") public ResponseEntity bindOrUnbind(@RequestBody JSONObject whereJson) { - assertNotBlankJson(whereJson, "请求参数不能为空", "siteCode", "shelfCode", "mode"); + assertNotBlankJson(whereJson, "请求参数不能为空", "mode"); RedissonUtils.lock(() -> { + if (StringUtils.isBlank( whereJson.getString("siteCode"))&&StringUtils.isBlank( whereJson.getString("shelfCode"))) { + throw new BadRequestException("点位编号和载具编号需要扫其中一个,不能同时为空"); + } pdaIosOutService.bindOrUnbind(whereJson); }, "bindOrUnbind" + whereJson.getString("siteCode") + whereJson.getString("shelfCode"), null); return new ResponseEntity<>(PdaResponse.requestParamOk(whereJson), HttpStatus.OK); } + /** + * 出库管理组盘获取物料列表 + */ + @PostMapping("/getMaterialList") + @Log("出库管理组盘获取物料列表") + public ResponseEntity> getMaterialList(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaIosOutService.getMaterialList(whereJson), HttpStatus.OK); + } + + + + /** * 出库确认获取物料明细 */ @@ -114,6 +137,20 @@ public class PdaIosOutController { } + + + /** + * 获取预装区可用放空载具空位 + */ + @PostMapping("/getReturnPoint") + @Log("出库确认获取物料明细") + public ResponseEntity getReturnPoint(@RequestBody JSONObject whereJson) { + List selectList = new ArrayList<>(); + selectList.add(SelectItemVo.builder().text("B02").value("1").build()); + return new ResponseEntity<>(pdaIosOutService.getReturnPoint(whereJson), HttpStatus.OK); + } + + /** * 载具出库确认 */ @@ -134,7 +171,7 @@ public class PdaIosOutController { @PostMapping("/update") @Log("获取升级地址") public ResponseEntity apkUrl() { - Map of = MapOf.of("versionName", "1.0.1", "url", "http://172.18.51.221:8011/api/pda/download/app-release"); + Map of = MapOf.of("versionName", "1.0.1", "url", "http://172.18.51.221:8011/api/pda/iosOut/download/app-release"); return new ResponseEntity<>(of, HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java index 9e214a3..e0eda49 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java @@ -5,7 +5,6 @@ import org.nl.common.base.TableDataInfo; import org.nl.common.domain.vo.SelectItemVo; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; import org.nl.wms.pda.util.PdaResponse; -import org.springframework.http.ResponseEntity; import java.util.List; @@ -127,4 +126,17 @@ public interface PdaIosInService { * @return PdaResponse */ PdaResponse confirmReturnMaterial(JSONObject whereJson); + + /** + * 不含单据入库业务 + * storagevehicle_code 载具号 + * stor_id 入库仓库id + * sect_code 库区编号 + * material_code 物料编号 + * qty 数量 + * pcsn 批次 + * site_code 所在点位 + * config_code 任务配置类型 + */ + void divStructNoBills(JSONObject whereJson); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java index 7e07185..3409465 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java @@ -1,8 +1,13 @@ package org.nl.wms.pda.ios_manage.service; import com.alibaba.fastjson.JSONObject; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.vo.SelectItemVo; +import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; import org.nl.wms.pda.util.PdaResponse; +import java.util.List; + /** *

* 手持IOS 服务类 @@ -46,6 +51,14 @@ public interface PdaIosOutService { PdaResponse getVehicleMaterial(JSONObject whereJson); + /** + * 获取预装区可用放空空位 + * + * @return PdaResponse + */ + List getReturnPoint(JSONObject whereJson); + + /** * 产线叫料点确认 * @@ -82,7 +95,12 @@ public interface PdaIosOutService { */ PdaResponse bindOrUnbind(JSONObject whereJson); - + /** + * 查询物料列表 + * + * @return PdaResponse + */ + TableDataInfo getMaterialList(JSONObject whereJson); /** * 载具出库确认 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 554a1b6..d8078ea 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 @@ -1,6 +1,7 @@ package org.nl.wms.pda.ios_manage.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -10,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -17,10 +19,13 @@ import org.nl.common.domain.vo.SelectItemVo; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; +import org.nl.wms.basedata_manage.enums.BaseDataEnum; import org.nl.wms.basedata_manage.service.*; import org.nl.wms.basedata_manage.service.dao.*; -import org.nl.wms.basedata_manage.service.dto.MaterialQuery; +import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper; 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.service.ISchBasePointService; @@ -28,7 +33,6 @@ import org.nl.wms.sch_manage.service.ISchBaseRegionService; 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.util.AbstractTask; -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.IMdPbGroupplateService; @@ -46,6 +50,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS; @@ -74,11 +79,18 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Autowired private IMdPbGroupplateService iMdPbGroupplateService; + /** + * 基础物料服务 + */ + @Autowired + private MdMeMaterialbaseMapper mdMeMaterialbaseMapper; + /** * 基础物料服务 */ @Autowired private IMdMeMaterialbaseService iMdMeMaterialbaseService; + @Resource private IStructattrService iStructattrService; /** @@ -93,6 +105,13 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Autowired private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; + /** + * 手持出库服务 + */ + @Autowired + private PdaIosOutService pdaIosOutService; + + /** * 库区服务 */ @@ -121,11 +140,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { */ @Autowired private IRawAssistIStorService iRawAssistIStorService; - /** - * 回库任务类 - */ - @Autowired - private BackInTask backInTask; + /** * 入库明细服务 */ @@ -140,12 +155,11 @@ public class PdaIosInServiceImpl implements PdaIosInService { private ISchBaseRegionService iSchBaseRegionService; + @Transactional @Override public JSONObject groupPlate(JSONObject whereJson) { // 物料编码 String materialId = whereJson.getString("material_id"); - //批次 - String pcsn = whereJson.getString("pcsn"); // 数量 String qty = whereJson.getString("qty"); MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code")); @@ -157,15 +171,14 @@ public class PdaIosInServiceImpl implements PdaIosInService { } whereJson.put("material_id", materDao.getMaterial_id()); whereJson.put("material_code", materDao.getMaterial_code()); + //批次 + String pcsn = StringUtils.isBlank(whereJson.getString("pcsn")) ? org.nl.common.utils.DateUtil.getDateTimeFormatyMd() : whereJson.getString("pcsn"); //判断该载具是否存在组盘信息 - long statusCount = iMdPbGroupplateService.count( + List groupPlateList = iMdPbGroupplateService.list( new LambdaQueryWrapper() .eq(GroupPlate::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) - .lt(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("出库")) + .lt(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("入库")) ); - if (statusCount > 0) { - throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在组盘信息,请对数据进行核实!"); - } //判断该载具编号是否已经存在库内 long count = iStructattrService.count( new LambdaQueryWrapper() @@ -174,6 +187,17 @@ public class PdaIosInServiceImpl implements PdaIosInService { if (count > 0) { throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在库内,请对数据进行核实!"); } + if (ObjectUtils.isNotEmpty(groupPlateList)) { + //出库重新组盘 + mdPbGroupplateMapper.update(null, new LambdaUpdateWrapper() + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) + .set(GroupPlate::getQty, BigDecimal.ZERO) + .set(GroupPlate::getFrozen_qty, BigDecimal.ZERO) + .set(GroupPlate::getUpdate_time, DateUtil.now()) + .set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId()) + .set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName()) + .in(GroupPlate::getGroup_id, groupPlateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet()))); + } GroupPlate groupDao = GroupPlate.builder() .group_id(IdUtil.getStringId()) .material_id(materDao.getMaterial_id()) @@ -182,13 +206,20 @@ public class PdaIosInServiceImpl implements PdaIosInService { .qty_unit_id(unitDao.getMeasure_unit_id()) .qty_unit_name(unitDao.getUnit_name()) .qty(new BigDecimal(qty)) - .status(GROUP_PLATE_STATUS.code("组盘")) + .status(StringUtils.isBlank(whereJson.getString("groupStatus")) ? GROUP_PLATE_STATUS.code("组盘") : whereJson.getString("groupStatus")) .ext_code(whereJson.getString("ext_code")) .create_id(SecurityUtils.getCurrentUserId()) .create_name(SecurityUtils.getCurrentNickName()) .create_time(DateUtil.now()) + .remark(StringUtils.isBlank(whereJson.getString("remark")) ? "" : whereJson.getString("remark")) .build(); iMdPbGroupplateService.save(groupDao); + if (StringUtils.isNotBlank(whereJson.getString("siteCode"))) { + whereJson.put("shelfCode", whereJson.getString("vehicle_code")); + whereJson.put("mode", IOSEnum.BIND_OR_UNBIND.code("绑定")); + //确定点位则绑定 + pdaIosOutService.bindOrUnbind(whereJson); + } return whereJson; } @@ -220,11 +251,21 @@ public class PdaIosInServiceImpl implements PdaIosInService { PageQuery pageQuery = new PageQuery(); pageQuery.setPage(whereJson.getInteger("page") - 1); pageQuery.setSize(whereJson.getInteger("size")); - MaterialQuery materialQuery = new MaterialQuery(); - if (StringUtils.isNotBlank(whereJson.getString("search"))) { - materialQuery.setSearch(whereJson.getString("search").trim().toUpperCase()); + // 查询条件 + 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)); } - Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build()); + String regionCode = MapUtil.getStr(whereJson, "region"); + if (ObjectUtil.isNotEmpty(regionCode)) { + queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode); + } + queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time); + Page mapPage = mdMeMaterialbaseMapper.selectPage(new Page<>(pageQuery.getPage(), pageQuery.getSize()), + queryWrapper + ); return PdaResponse.build(mapPage); } @@ -306,10 +347,10 @@ public class PdaIosInServiceImpl implements PdaIosInService { whereJson.put("site_code",schBasePoint.getPoint_code()); whereJson.put("config_code", IOSConstant.BACK_IN_TASK); whereJson.put("vehicle_code", whereJson.getString("storagevehicle_code")); - whereJson.put("stor_id", sectDao.getStor_id()); + whereJson.put("stor_code", sectDao.getStor_code()); whereJson.put("sect_code", sectDao.getSect_code()); //入库分配 - divStructNoBills(whereJson); + SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson); return PdaResponse.requestOk(); } @@ -324,15 +365,18 @@ public class PdaIosInServiceImpl implements PdaIosInService { * pcsn 批次 * site_code 所在点位 * config_code 任务配置类型 + * is_auto_confirm 是否自动出库确认 */ - private void divStructNoBills(JSONObject whereJson) { + @Override + @Transactional + public void divStructNoBills(JSONObject whereJson) { //校验载具 MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code")); if (ObjectUtil.isEmpty(vehicleDao)) { throw new BadRequestException("不存在该载具号信息,请检查"); } //校验仓库 - BsrealStorattr storeDao = iSrealStorattrService.getById(whereJson.getString("stor_id")); + BsrealStorattr storeDao = iSrealStorattrService.findByCode(whereJson.getString("stor_code")); if (ObjectUtil.isEmpty(storeDao)) { throw new BadRequestException("该库区未找到对应仓库信息,请检查"); } @@ -354,12 +398,14 @@ public class PdaIosInServiceImpl implements PdaIosInService { whereJson.put("point_code1", schBasePoint.getPoint_code()); //确定终点 whereJson.put("point_code2", attrDao.getStruct_code()); + whereJson.put("handle_status", BaseDataEnum.IS_YES_NOT.code("否")); //创建任务 String taskId = applyTaskMap.get(whereJson.getString("config_code")).create(whereJson); // 更新起点绑定id iSchBasePointService.update( new UpdateWrapper().lambda() .set(SchBasePoint::getIos_id, null) + .set(SchBasePoint::getIng_task_code, null) .eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code()) ); // 更新终点锁定状态 @@ -378,7 +424,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { @Transactional public PdaResponse confirmIn(JSONObject whereJson) { Sectattr sectDao = updateIvtUtils.checkVehicleType(whereJson.getString("sect_id"),whereJson.getString("vehicle_code")); - whereJson.put("stor_id", sectDao.getStor_id()); + whereJson.put("stor_code", sectDao.getStor_code()); whereJson.put("sect_code", sectDao.getSect_code()); //物料组盘入库 if (StringUtils.isBlank(whereJson.getString("is_empty_vehicle"))) { @@ -392,14 +438,31 @@ public class PdaIosInServiceImpl implements PdaIosInService { // 预组织出入库单据实体 Map jsonMst = organizeInsertData(whereJson); // 调用服务新增出入库单 - String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst); + String iostorinvId = iRawAssistIStorService.insertDtl(jsonMst); // 预组织出入库单据明细的分配数据 - whereJson.put("iostorinv_id", iostorinv_id); + whereJson.put("iostorinv_id", iostorinvId); Map jsonDtl = organizeDivData(whereJson); // 调用分配,默认自动分配库位 iRawAssistIStorService.divStruct(new JSONObject(jsonDtl)); // 下发任务 - sendTask(whereJson); + Map taskJson = new HashMap<>(); + taskJson.put("point_code", whereJson.getString("point_code")); + // 组织明细数据 + IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( + new QueryWrapper().lambda() + .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id")) + ); + // 查找分配明细 + Map map = new HashMap<>(); + map.put("iostorinvdtl_id", dtlDao.getIostorinvdtl_id()); + List disDtl = iRawAssistIStorService.getDisDtl(map); + // 类型转换 + ArrayList tableMater = new ArrayList<>(); + disDtl.forEach(item -> { + tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); + }); + taskJson.put("tableMater", tableMater); + iRawAssistIStorService.divPoint(taskJson); //更新组盘表状态 mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper() .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) @@ -408,16 +471,15 @@ public class PdaIosInServiceImpl implements PdaIosInService { } else { //空载具入库 whereJson.put("qty", 1); - whereJson.put("pcsn", whereJson.getString("material_id")); String materialCode = "1".equals(whereJson.getString("material_id")) ? StatusEnum.VEHICLE_TYPE.code("空托盘") : "2".equals(whereJson.getString("material_id")) ? StatusEnum.VEHICLE_TYPE.code("空料箱") : StatusEnum.VEHICLE_TYPE.code("空货架"); whereJson.put("material_id", materialCode); //组盘 - groupPlate(whereJson); - // 生成空载具入库任务 + SpringContextHolder.getBean(PdaIosInServiceImpl.class).groupPlate(whereJson); + //生成空载具入库任务 whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK); whereJson.put("storagevehicle_code", whereJson.getString("vehicle_code")); //入库分配 - divStructNoBills(whereJson); + SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson); } return PdaResponse.requestOk(); } @@ -489,13 +551,13 @@ public class PdaIosInServiceImpl implements PdaIosInService { // 查询库区 Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id")); // 查询仓库 - BsrealStorattr storeDao = iSrealStorattrService.getById(sectDao.getStor_id()); + BsrealStorattr storeDao = iSrealStorattrService.findByCode(sectDao.getStor_code()); // 组织主数据 Map jsonMst = new HashMap<>(); jsonMst.put("checked", true); jsonMst.put("sect_id", sectDao.getSect_id()); - jsonMst.put("stor_id", sectDao.getStor_id()); jsonMst.put("sect_code", sectDao.getSect_code()); + jsonMst.put("stor_id", storeDao.getStor_id()); jsonMst.put("stor_code", storeDao.getStor_code()); // 组织明细数据 IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( @@ -516,37 +578,6 @@ public class PdaIosInServiceImpl implements PdaIosInService { return jsonMst; } - /** - * 下发任务 - * @param whereJson { - * storagevehicle_code:载具编码 - * point_code:点位编码 - * sect_code:库区 - * iostorinv_id: id - * } - */ - private void sendTask(JSONObject whereJson) { - // 组织主数据 - Map jsonMst = new HashMap<>(); - jsonMst.put("point_code", whereJson.getString("point_code")); - // 组织明细数据 - IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne( - new QueryWrapper().lambda() - .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id")) - ); - // 查找分配明细 - Map map = new HashMap<>(); - map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id()); - List disDtl = iRawAssistIStorService.getDisDtl(map); - // 类型转换 - ArrayList tableMater = new ArrayList<>(); - disDtl.forEach(item -> { - tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)); - }); - jsonMst.put("tableMater", tableMater); - - iRawAssistIStorService.divPoint(jsonMst); - } 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 9f06f46..248a640 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 @@ -1,14 +1,20 @@ package org.nl.wms.pda.ios_manage.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; 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 com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; 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.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.IdUtil; @@ -16,24 +22,24 @@ import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; import org.nl.wms.basedata_manage.enums.BaseDataEnum; -import org.nl.wms.basedata_manage.service.IBsrealStorattrService; -import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; -import org.nl.wms.basedata_manage.service.ISectattrService; -import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.*; import org.nl.wms.basedata_manage.service.dao.*; +import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; +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.ISchBaseTaskService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.AbstractTask; -import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask; import org.nl.wms.sch_manage.service.util.tasks.StOutTask; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; -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; @@ -42,17 +48,13 @@ 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.IOStorInvMapper; import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper; -import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS; @@ -79,7 +81,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { */ @Autowired private ISectattrService iSectattrService; - + /** + * 基础物料服务 + */ + @Autowired + private MdMeMaterialbaseMapper mdMeMaterialbaseMapper; /** * 出入库单主表 */ @@ -90,7 +96,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { */ @Autowired private IBsrealStorattrService iSrealStorattrService; - + /** + * 载具服务 + */ + @Autowired + private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; /** * 基础物料服务 */ @@ -101,6 +111,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { */ @Autowired private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper; + /* + * 任务服务 + */ + @Autowired + private ISchBaseTaskService iSchBaseTaskService; /** * 点位服务 @@ -127,29 +142,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { private IOStorInvDisMapper ioStorInvDisMapper; /** - * 更新库存服务 + * 入库服务 */ @Autowired - private UpdateIvtUtils updateIvtUtils; - - /** - * 出库任务类 - */ - @Autowired - private StOutTask stOutTask; - - /** - * 手持任务 - */ - @Autowired - private PdaPointTask pdaPointTask; - - - /** - * 入库服务服务 - */ - @Autowired - private IRawAssistIStorService iRawAssistIStorService; + private PdaIosInService pdaIosInServiceImpl; @Override @@ -173,8 +169,25 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { MapOf.of("search", whereJson.getString("search"), "region_code", whereJson.getString("region_code"), "status", GROUP_PLATE_STATUS.code("入库"), - "is_has_workder", "false", - "order_by", "gro.create_time asc")); + "pointStatus", "1")); + } + //显示所有货架的点位 + if (StringUtils.isBlank(whereJson.getString("search"))) { + list = list.stream() + .collect(Collectors.groupingBy(StructattrVechielDto::getStruct_code)) + .values() + .stream() + .map(r -> r.stream() + .filter(f -> !StatusEnum.VEHICLE_TYPE.code("空货架").equals(f.getMaterial_code())) + .findFirst() + .orElse(r.get(0))) + .sorted(Comparator.comparing(StructattrVechielDto::getStruct_code)) + .collect(Collectors.toList()); + } else { + //只显示库存 + list = list.stream().filter(f -> !StatusEnum.VEHICLE_TYPE.code("空货架").equals(f.getMaterial_code())) + .sorted(Comparator.comparing(StructattrVechielDto::getStruct_code)) + .collect(Collectors.toList()); } return PdaResponse.requestParamOk(list); } @@ -197,6 +210,25 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { } + @Override + public List getReturnPoint(JSONObject whereJson) { + List selectList = new ArrayList<>(); + List cxPointLists = iSchBasePointService.checkEndPointTask( + StatusEnum.REGION_INFO.code("预装线货架区"), + IOSEnum.LOCK_TYPE.code("未锁定"), + StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false); + //可放空料架位置 + cxPointLists = cxPointLists.stream().filter(r -> (StatusEnum.VEHICLE_TYPE.code("空载具").equals(r.getCan_vehicle_type()))).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(cxPointLists)) { + throw new BadRequestException("暂无可用放置空架的点位,请稍后再试。"); + } + cxPointLists.forEach(r -> + selectList.add(SelectItemVo.builder().text(r.getPoint_name()).value(r.getPoint_code()).build()) + ); + return selectList; + } + + @Override @Transactional public PdaResponse materialConfirm(JSONObject whereJson) { @@ -223,13 +255,15 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { iStructattrService.updateStatusByCode("0", lock_map); //创建任务 JSONObject taskForm = new JSONObject(); - taskForm.put("task_type", "STOutTask"); + taskForm.put("task_type", IOSConstant.ST_OUT_TASK); + taskForm.put("config_code", IOSConstant.ST_OUT_TASK); taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); taskForm.put("point_code1", json.getString("struct_code")); taskForm.put("point_code2", whereJson.getString("siteCode")); taskForm.put("vehicle_code", json.getString("storagevehicle_code")); - StOutTask stOutTask = SpringContextHolder.getBean("STOutTask"); - String taskId = stOutTask.create(taskForm); + taskForm.put("is_auto_confirm",(BaseDataEnum.IS_YES_NOT.code("是"))); + taskForm.put("handle_status",(BaseDataEnum.IS_YES_NOT.code("是"))); + String taskId = applyTaskMap.get(IOSConstant.ST_OUT_TASK).create(whereJson); //更新任务id ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper() .set(IOStorInvDis::getTask_id, taskId) @@ -251,6 +285,9 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { if (ObjectUtil.isEmpty(schBasePoint)) { throw new BadRequestException("未找到目标:" + whereJson.getString("siteCode") + "的点位信息,请检查"); } + if (StringUtils.isNotBlank(schBasePoint.getVehicle_code()) || IOSEnum.POINT_STATUS.code("有货").equals(schBasePoint.getPoint_status())) { + throw new BadRequestException("该点位有货架在2分钟之后进行出库确认,请稍等"); + } //锁定货位 // JSONObject lock_map = new JSONObject(); // lock_map.put("struct_code", json.getString("struct_code")); @@ -264,8 +301,8 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { taskForm.put("point_code1", json.getString("struct_code")); taskForm.put("point_code2", whereJson.getString("siteCode")); taskForm.put("vehicle_code", json.getString("storagevehicle_code")); - PdaPointTask pdaPointTask = SpringContextHolder.getBean("PdaPointTask"); - pdaPointTask.create(taskForm); + taskForm.put("is_auto_confirm",(BaseDataEnum.IS_YES_NOT.code("是"))); + String taskCode = applyTaskMap.get(IOSConstant.PDA_POINT_TASK).create(taskForm); GroupPlate plateDao = mdPbGroupplateMapper.selectOne( new LambdaQueryWrapper() .eq(GroupPlate::getStoragevehicle_code, json.getString("storagevehicle_code")).eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))); @@ -274,6 +311,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { .set(GroupPlate::getFrozen_qty, plateDao.getQty()) .eq(GroupPlate::getGroup_id, json.getString("group_id")) ); + //更新任务标识 + iSchBasePointService.update(new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, whereJson.getString("siteCode")) + .set(SchBasePoint::getIng_task_code, taskCode)); return PdaResponse.requestOk(); } @@ -306,7 +347,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { if (ObjectUtil.isEmpty(sectattr)) { throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!"); } - BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id()); + BsrealStorattr storeDao = iSrealStorattrService.findByCode(sectattr.getStor_code()); whereJson.put("stor_code", storeDao.getStor_code()); whereJson.put("sect_code", sectattr.getSect_code()); StrategyStructParam strategyStructParam = StrategyStructParam.builder() @@ -330,6 +371,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { taskForm.put("point_code1", r.getStruct_code()); taskForm.put("point_code2", whereJson.getString("siteCode")); taskForm.put("vehicle_code", r.getStoragevehicle_code()); + taskForm.put("handle_status", BaseDataEnum.IS_YES_NOT.code("否")); applyTaskMap.get(IOSConstant.VEHICLE_OUT_TASK).create(taskForm); }); //更新组盘记录表 @@ -431,36 +473,90 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { return disId; } + + @Override + public TableDataInfo getMaterialList(JSONObject whereJson) { + 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)); + } + String regionCode = MapUtil.getStr(whereJson, "region"); + if (ObjectUtil.isNotEmpty(regionCode)) { + queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode); + } + queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time); + Page mapPage = mdMeMaterialbaseMapper.selectPage(new Page<>(pageQuery.getPage(), pageQuery.getSize()), + queryWrapper + ); + return PdaResponse.build(mapPage); + } + + @Override @Transactional(rollbackFor = Exception.class) public PdaResponse bindOrUnbind(JSONObject whereJson) { String siteCode = whereJson.getString("siteCode"); String shelfCode = whereJson.getString("shelfCode"); String mode = whereJson.getString("mode"); - // 校验站点是否存在、是否可用 - SchBasePoint sitePoint = iSchBasePointService.getOne( - new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, siteCode) - .eq(SchBasePoint::getIs_used, true) - ); - if (sitePoint == null) { - throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); - } - //校验站点是否有在途输送任务 - List activeTasks = iSchBasePointService.checkEndPointTask( - null, null, StatusEnum.SORT_TYPE.code("升序"), null, siteCode, null, false - ); - if (CollectionUtils.isNotEmpty(activeTasks)) { - throw new BadRequestException("该货架正在执行输送任务,状态为锁定,请等任务完成再做绑定或解绑!"); + SchBasePoint sitePoint; + if (IOSEnum.BIND_OR_UNBIND.code("绑定").equals(mode)) { + // 校验站点是否存在、是否可用 + sitePoint = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, siteCode) + .eq(SchBasePoint::getIs_used, true) + ); + if (sitePoint == null) { + throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); + } + Set pointIds = new HashSet<>(); + pointIds.add(siteCode); + //校验是否有任务 + List activeTasks = iSchBaseTaskService.getTaskList(null, pointIds, null, null); + if (CollectionUtils.isNotEmpty(activeTasks)) { + throw new BadRequestException("检查到运输到这个点位的任务,任务号为:" + activeTasks.get(0).getTask_code() + + ",起点为:" + activeTasks.get(0).getPoint_code1() + ",终点为:" + activeTasks.get(0).getPoint_code2() + + ",载具号为:" + activeTasks.get(0).getVehicle_code() + ",请稍后操作,或在WMS任务列表中检查。"); + } + } else { + if (StringUtils.isNotBlank(shelfCode)) { + // 校验站点是否存在、是否可用 + sitePoint = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code, shelfCode) + .eq(SchBasePoint::getIs_used, true) + ); + if (sitePoint == null) { + //无需解绑 + return PdaResponse.requestOk(); + } + siteCode = sitePoint.getPoint_code(); + } else { + // 校验站点是否存在、是否可用 + sitePoint = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, siteCode) + .eq(SchBasePoint::getIs_used, true) + ); + } } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); if (IOSEnum.BIND_OR_UNBIND.code("绑定").equals(mode)) { - doBind(sitePoint, siteCode, shelfCode, wrapper); + checkGroupPlateStatus(shelfCode, sitePoint.getRegion_code()); + doBind(siteCode, shelfCode, wrapper); } else { doUnbind(sitePoint, siteCode, wrapper); } wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now()) .set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("否")) + .set(SchBasePoint::getIng_task_code, null) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()); iSchBasePointService.update(wrapper); return PdaResponse.requestOk(); @@ -469,23 +565,19 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { /** * 绑定 */ - private void doBind(SchBasePoint sitePoint, String siteCode, String shelfCode, LambdaUpdateWrapper wrapper) { - // 校验站点是否已绑定 - if (StringUtils.isNotBlank(sitePoint.getVehicle_code())) { - if (sitePoint.getVehicle_code().equals(shelfCode)) { - checkGroupPlateStatus(shelfCode); - return; - } - throw new BadRequestException("当前站点已绑定货架:" + sitePoint.getVehicle_code() + ",请先解绑!"); - } - // 校验货架是否已绑定在其他站点 + private void doBind(String siteCode, String shelfCode, LambdaUpdateWrapper wrapper) { SchBasePoint boundPoint = iSchBasePointService.getOne( new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, shelfCode) ); if (boundPoint != null) { - throw new BadRequestException("当前货架:" + shelfCode + "已绑定在站点:" + boundPoint.getPoint_code() + ",请先解绑。"); + //解绑 + LambdaUpdateWrapper wrapper1 = new LambdaUpdateWrapper<>(); + wrapper1.eq(SchBasePoint::getPoint_code, boundPoint.getPoint_code()) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")); + iSchBasePointService.update(wrapper1); + //throw new BadRequestException("当前货架:" + shelfCode + "已绑定在站点:" + boundPoint.getPoint_code() + ",请扫描站点:" + boundPoint.getPoint_code() + "进行解绑,再绑定。"); } - checkGroupPlateStatus(shelfCode); wrapper.eq(SchBasePoint::getPoint_code, siteCode) .set(SchBasePoint::getVehicle_code, shelfCode) .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")); @@ -494,17 +586,21 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { /** * 校验组盘状态 */ - private void checkGroupPlateStatus(String shelfCode) { + private void checkGroupPlateStatus(String shelfCode, String regionCode) { List plates = mdPbGroupplateMapper.selectList( new LambdaQueryWrapper() .eq(GroupPlate::getStoragevehicle_code, shelfCode) .lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) ); if (CollectionUtils.isNotEmpty(plates)) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); Set plateCodes = plates.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet()); - mdPbGroupplateMapper.update(null, new LambdaUpdateWrapper() - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) - .set(GroupPlate::getFrozen_qty, BigDecimal.ZERO).in(GroupPlate::getGroup_id, plateCodes)); + if (!regionCode.equals(StatusEnum.REGION_INFO.code("商用线5号线"))) { + update.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO); + } + update.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .in(GroupPlate::getGroup_id, plateCodes); + mdPbGroupplateMapper.update(null, update); } } @@ -534,18 +630,88 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { /** * 1.库存载具绑定到出库点位 * 2.更新组盘记录为出库 + * 3.type="1",出库确认;type="2",强制确认。 */ @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public PdaResponse outStorageConfirm(JSONObject whereJson) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); + //任务校验 + SchBaseTask task = iSchBaseTaskService.getOne(new LambdaQueryWrapper().eq(SchBaseTask::getVehicle_code, whereJson.getString("storagevehicle_code")).lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())); + if (ObjectUtil.isNotEmpty(task)) { + throw new BadRequestException("该货架:" + whereJson.getString("storagevehicle_code") + "的运输任务,任务号为:" + task.getTask_code() + ",尚未完成,请等待任务完成,再取货确认。"); + } //获取终点 SchBasePoint pointDao = iSchBasePointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code"))); if (ObjectUtil.isEmpty(pointDao)) { throw new BadRequestException("未找到载具所在的点位信息,请检查"); } + //预装区与商用5号线点位需自动回空 + if (pointDao.getRegion_code().equals(StatusEnum.REGION_INFO.code("商用线5号线"))) { + //物料组盘信息出库 + whereJson.put("type", "2"); + //处理组盘信息 + handleGroupPlate(whereJson); + if (StringUtils.isNotBlank(pointDao.getIng_task_code())) { + SchBaseTask schBaseTask = iSchBaseTaskService.getByCode(pointDao.getIng_task_code()); + SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code1())); + if (schBasePoint.getRegion_code().equals(StatusEnum.REGION_INFO.code("预装线货架区")) && StringUtils.isNotBlank(whereJson.getString("isAutoReturn"))) { + String pointCode1 = whereJson.getString("startCode"); + String pointCode2 = whereJson.getString("siteCode"); + //自动获取终点回空载具 + if (BaseDataEnum.IS_YES_NOT.code("是").equals(whereJson.getString("isAutoReturn"))) { + if (StringUtils.isBlank(pointCode1)) { + SchBasePoint startPoint = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code")) + ); + pointCode1 = startPoint.getPoint_code(); + } + List cxPointLists = iSchBasePointService.checkEndPointTask( + StatusEnum.REGION_INFO.code("预装线货架区"), + IOSEnum.LOCK_TYPE.code("未锁定"), + StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false); + //可放空料架位置 + cxPointLists = cxPointLists.stream().filter(r -> (StatusEnum.VEHICLE_TYPE.code("空载具").equals(r.getCan_vehicle_type()))).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(cxPointLists)) { + throw new BadRequestException("暂无可用放置空架的点位,请稍后再试。"); + } + pointCode2 = cxPointLists.get(0).getPoint_code(); + } + whereJson.put("pointCode", pointCode1); + whereJson.put("siteCode", pointCode2); + //生成任务 + SpringContextHolder.getBean(PdaIosOutServiceImpl.class).transferConfirm(whereJson); + } else { + //线边仓 + whereJson.put("qty", 1); + String materialCode = StatusEnum.VEHICLE_TYPE.code("空货架"); + whereJson.put("material_id", materialCode); + //组盘 + pdaIosInServiceImpl.groupPlate(whereJson); + // 生成空载具入库任务 + whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK); + whereJson.put("storagevehicle_code", whereJson.getString("storagevehicle_code")); + //入库分配 + pdaIosInServiceImpl.divStructNoBills(whereJson); + } + } + } else { + handleGroupPlate(whereJson); + //载具绑定到出库点 + iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class) + .set(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code")) + .set(SchBasePoint::getIos_id, BaseDataEnum.IS_YES_NOT.code("是")) + .eq(SchBasePoint::getPoint_code, pointDao.getPoint_code()) + ); + } + return PdaResponse.requestOk(); + } + + + private void handleGroupPlate(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); GroupPlate groupPlate = mdPbGroupplateMapper.selectById(whereJson.getString("group_id")); if (ObjectUtil.isEmpty(groupPlate)) { throw new BadRequestException("未找到该载具的组盘信息,请检查"); @@ -573,52 +739,133 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { .eq(GroupPlate::getGroup_id, whereJson.getString("group_id")); //更新组盘记录表 mdPbGroupplateMapper.update(new GroupPlate(), updateWrapper); - //库存绑定到出库点 - iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class) - .set(SchBasePoint::getVehicle_code, groupPlate.getStoragevehicle_code()) - .set(SchBasePoint::getIos_id, BaseDataEnum.IS_YES_NOT.code("是")) - .eq(SchBasePoint::getPoint_code, pointDao.getPoint_code()) - ); - return PdaResponse.requestOk(); } + /** + * 目标站点或区域传值二选一 + * 载具编号:"storagevehicle_code":"T0002", + * 点位编号:"siteCode":"", + * 区域编号:"region_code":"IN01" + */ @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public PdaResponse transferConfirm(JSONObject whereJson) { - if (StringUtils.isBlank(whereJson.getString("region_code")) && StringUtils.isBlank(whereJson.getString("siteCode"))) { + String regionCode = whereJson.getString("region_code"); + //起点 + String pointCode1 = whereJson.getString("pointCode"); + //终点 + String pointCode2 = whereJson.getString("siteCode"); + String vehicleCode = whereJson.getString("storagevehicle_code"); + if (StringUtils.isBlank(regionCode) && StringUtils.isBlank(pointCode2)) { throw new BadRequestException("请选择目标站点或区域!"); } - String pointCode = whereJson.getString("siteCode"); - if (StringUtils.isBlank(pointCode)) { - List pointList = iSchBasePointService.list(new LambdaQueryWrapper() - .eq(SchBasePoint::getRegion_code, whereJson.getString("region_code")) - .eq(SchBasePoint::getIs_used, 1) - .isNull(SchBasePoint::getVehicle_code) - .orderByAsc(SchBasePoint::getIn_order_seq)); - if (CollectionUtils.isEmpty(pointList)) { - throw new BadRequestException("该区域无可用空余点位!"); - } - pointCode = pointList.get(0).getPoint_code(); + //校验载具 + MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(vehicleCode); + if (ObjectUtil.isEmpty(vehicleDao)) { + throw new BadRequestException("不存在该载具号信息,请检查"); } - //确定起点 - SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code"))); - if (ObjectUtil.isEmpty(schBasePoint)) { - throw new BadRequestException("未找到载具所在的点位信息,请检查"); + if (StringUtils.isNotBlank(pointCode2)) { + SchBasePoint schBasePoint = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, pointCode2).eq(SchBasePoint::getIs_used, true) + ); + if (schBasePoint == null) { + throw new BadRequestException("输入终点点位有误或被禁用,请检查是否手动输入输错。"); + } + } + // 确定起点 + String startPointCode; + SchBasePoint schBasePoint = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code, vehicleCode) + ); + if (StringUtils.isBlank(pointCode1)) { + if (ObjectUtil.isEmpty(schBasePoint)) { + throw new BadRequestException("未找到载具所在的点位信息,请检查"); + } + startPointCode = schBasePoint.getPoint_code(); + } else { + + SchBasePoint point = iSchBasePointService.getOne( + new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, pointCode1).eq(SchBasePoint::getIs_used, true)); + if (point == null) { + throw new BadRequestException("起点点位:" + pointCode1 + "不存在,请检查。"); + } + //自动解绑/绑定 + if (schBasePoint != null) { + iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getIng_task_code, null) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) + .eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code()) + ); + } + iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class) + .set(SchBasePoint::getVehicle_code, vehicleCode) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")) + .eq(SchBasePoint::getPoint_code, pointCode1) + ); + startPointCode = pointCode1; + } + // 确定终点 + String endPointCode = pointCode2; + if (StringUtils.isBlank(endPointCode)) { + List pointList; + //特殊分配规则 + if (regionCode.equals(StatusEnum.REGION_INFO.code("预装线货架区"))) { + pointList = iSchBasePointService.checkEndPointTask( + StatusEnum.REGION_INFO.code("预装线货架区"), + IOSEnum.LOCK_TYPE.code("未锁定"), + StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false); + //可放空料架位置 + pointList = pointList.stream().filter(r -> (StatusEnum.VEHICLE_TYPE.code("空载具").equals(r.getCan_vehicle_type()))).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(pointList)) { + //入线边仓 + whereJson.put("stor_code",StatusEnum.STORE_INFO.code("料架线边库")); + whereJson.put("sect_code","XB01"); + whereJson.put("material_id", StatusEnum.VEHICLE_TYPE.code("空货架")); + whereJson.put("qty", 1); + whereJson.put("site_code",startPointCode); + whereJson.put("vehicle_code",vehicleCode); + whereJson.put("is_auto_confirm",startPointCode); + //组盘 + SpringContextHolder.getBean(PdaIosInServiceImpl.class).groupPlate(whereJson); + //生成空载具入库任务 + whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK); + //入库分配 + SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson); + return PdaResponse.requestOk(); + } + } else { + pointList = iSchBasePointService.checkEndPointTask( + regionCode, + IOSEnum.LOCK_TYPE.code("未锁定"), + StatusEnum.SORT_TYPE.code("升序"), + null, null, "true", false + ); + if (CollectionUtils.isEmpty(pointList)) { + throw new BadRequestException("暂无可用空位,请稍后再试。"); + } + } + endPointCode = pointList.get(0).getPoint_code(); } // 生成转运任务 JSONObject task = new JSONObject(); task.put("task_type", IOSConstant.PDA_POINT_TASK); task.put("config_code", IOSConstant.PDA_POINT_TASK); - task.put("point_code1", schBasePoint.getPoint_code()); - task.put("point_code2", pointCode); - task.put("vehicle_code", whereJson.getString("storagevehicle_code")); - pdaPointTask.create(task); - // 更新起点绑定id + task.put("point_code1", startPointCode); + task.put("point_code2", endPointCode); + task.put("vehicle_code", vehicleCode); + // 创建任务 + applyTaskMap.get(IOSConstant.PDA_POINT_TASK).create(task); + // 清空起点任务标识 iSchBasePointService.update( new UpdateWrapper().lambda() .set(SchBasePoint::getIos_id, null) - .eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code()) + .set(SchBasePoint::getIng_task_code, null) + .eq(SchBasePoint::getPoint_code, startPointCode) ); return PdaResponse.requestOk(); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java index 3d624fc..d588bbe 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchPointController.java @@ -40,7 +40,6 @@ public class PdaSchPointController { } @PostMapping("/binding") - @Log("解绑") @SaIgnore public ResponseEntity binding(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaSchPointService.binding(whereJson), HttpStatus.OK); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java index d478560..28179e3 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchPointService.java @@ -25,7 +25,6 @@ public interface PdaSchPointService extends IService { PdaResponse getPoint(JSONObject whereJson); /** - * 解绑 * @param whereJson { * point_code: 点位编码 * point_name: 点位名称 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java index 4ee0e0b..9beaffb 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java @@ -56,7 +56,7 @@ public class PdaSchTaskServiceImpl extends ServiceImpl SELECT - p.* + p.* FROM - `sch_base_point` p + `sch_base_point` p p.workshop_code = #{whereJson.workshop_code} - AND (p.point_code LIKE '%${whereJson.blurry}%' OR p.point_name LIKE '%${whereJson.blurry}%') + AND (p.point_code LIKE '%${whereJson.blurry}%' OR p.point_name LIKE '%${whereJson.blurry}%' OR + p.vehicle_code LIKE '%${whereJson.blurry}%' OR p.region_name LIKE '%${whereJson.blurry}%' OR + p.region_code LIKE '%${whereJson.blurry}%') AND p.region_code = #{whereJson.region_code} @@ -50,16 +52,16 @@ AND p.is_used = #{whereJson.is_used} - - - - AND (p.ing_task_code IS NOT NULL AND p.ing_task_code ]]> '') - - - - AND (p.ing_task_code IS NULL OR p.ing_task_code = '') - - + + + + + + + + + + ORDER BY p.region_code, p.point_code, p.point_type diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml index cf092a8..5bebd87 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml @@ -103,7 +103,7 @@