diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java index 0c8f446..c144996 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java @@ -12,14 +12,19 @@ public class SysParamConstant { */ public final static String IS_CONNECT_ACS = "is_connect_acs"; + /** + * 是否连接无人车 + */ + public final static String IS_NOT_CAR = "is_not_car"; + /** * ACS系统IP */ public final static String ACS_URL = "acs_url"; /** - * ERP系统IP + * 无人车系统IP */ - public final static String ERP_URL = "erp_url"; + public final static String CAR_URL = "car_url"; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.java index d2db739..f860c4e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.java @@ -38,4 +38,14 @@ public interface MdMeMaterialbaseMapper extends BaseMapper { * @return List */ List queryPdaMaterInfo(@Param("param") JSONObject whereJson); + + /** + * 手持 + * 库存查询 - 查询物料维护信息 + * @param whereJson { + * search: 物料编码、物料名称 + * } + * @return List + */ + List pdaQueryMaterialInfo(@Param("param") JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.xml index b9bfd5a..0af4b95 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdMeMaterialbaseMapper.xml @@ -48,4 +48,27 @@ ORDER BY mater.update_time Desc + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java index 1b42271..3fdd4c3 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.java @@ -111,4 +111,31 @@ public interface MdPbStoragevehicleextMapper extends BaseMapper + */ + List pdaQueryIvtSect(@Param("param") JSONObject whereJson); + + + /** + * 手持 + * 库存查询(外包材库存) + * @param whereJson { + * sect_code: 查询类型(区域) + * point_code: 点位 + * material_code: 物料 + * pcsn: 批号 + * } + * @return List + */ + List pdaQueryIvtRegion(@Param("param") JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml index 61359c9..a73eacd 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml @@ -173,7 +173,7 @@ ex.material_id = #{material_id} AND - st.lock_type = 0 + st.lock_type IN ('0','2') AND ex.pcsn = #{pcsn} @@ -205,7 +205,7 @@ AND ex.canuse_qty > 0 AND - st.lock_type = 0 + st.lock_type IN ('0','2') AND ex.pcsn = #{pcsn} @@ -463,4 +463,84 @@ + + + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/NotCarToWmsController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/NotCarToWmsController.java new file mode 100644 index 0000000..17e48dc --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/NotCarToWmsController.java @@ -0,0 +1,46 @@ +package org.nl.wms.ext.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.ext.service.NotCarToWmsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 无人车调用WMS 控制层 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +@RestController +@RequestMapping("/api/wms/car") +@Slf4j +public class NotCarToWmsController { + + @Autowired + private NotCarToWmsService notCarToWmsService; + + @PostMapping("/materialInfo") + @Log(value = "无人车给WMS发送物料点位信息") + @SaIgnore + public ResponseEntity materialInfo(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarToWmsService.materialInfo(whereJson), HttpStatus.OK); + } + + @PostMapping("/sendTask") + @Log(value = "无人车给下发WMS搬运任务") + @SaIgnore + public ResponseEntity sendTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarToWmsService.sendTask(whereJson), HttpStatus.OK); + } + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/NotCarToWmsService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/NotCarToWmsService.java new file mode 100644 index 0000000..690be26 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/NotCarToWmsService.java @@ -0,0 +1,33 @@ +package org.nl.wms.ext.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.ext.util.BaseResponse; + +/** + *

+ * 无人车调用WMS 服务类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +public interface NotCarToWmsService { + + /** + * 无人车给WMS发送物料点位信息 + * @param whereJson { + * + * } + * @return BaseResponse + */ + BaseResponse materialInfo(JSONObject whereJson); + + /** + * 无人车给下发WMS搬运任务 + * @param whereJson { + * + * } + * @return BaseResponse + */ + BaseResponse sendTask(JSONObject whereJson); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java new file mode 100644 index 0000000..9ed0ea5 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToNotCarService.java @@ -0,0 +1,25 @@ +package org.nl.wms.ext.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.ext.util.BaseResponse; + +/** + *

+ * WMS调用无人车 服务类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +public interface WmsToNotCarService { + + /** + * 通知无人车下步指令 + * @param whereJson { + * to_command: 1-等待,2-回库 + * } + * @return BaseResponse + */ + BaseResponse sendCommand(JSONObject whereJson); + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java new file mode 100644 index 0000000..f7e9d06 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/NotCarToWmsServiceImpl.java @@ -0,0 +1,30 @@ +package org.nl.wms.ext.service.impl; + +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.service.NotCarToWmsService; +import org.nl.wms.ext.util.BaseResponse; +import org.springframework.stereotype.Service; + +/** + *

+ * 无人车调用WMS 实现类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +@Slf4j +@Service +public class NotCarToWmsServiceImpl implements NotCarToWmsService { + + @Override + public BaseResponse materialInfo(JSONObject whereJson) { + return null; + } + + @Override + public BaseResponse sendTask(JSONObject whereJson) { + return null; + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java new file mode 100644 index 0000000..f4cc95e --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToNotCarServiceImpl.java @@ -0,0 +1,69 @@ +package org.nl.wms.ext.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.config.SpringContextHolder; +import org.nl.system.enums.SysParamConstant; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.service.WmsToNotCarService; +import org.nl.wms.ext.service.util.AcsResponse; +import org.nl.wms.ext.util.BaseResponse; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.springframework.stereotype.Service; + +/** + *

+ * WMS调用无人车 实现类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +@Slf4j +@Service +public class WmsToNotCarServiceImpl implements WmsToNotCarService { + + @Override + public BaseResponse sendCommand(JSONObject param) { + log.info("下发无人车接口sendCommand的输入参数为:-------------------" + param.toString()); + // 返回参数 + BaseResponse resultCar; + + // 系统参数类 + SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class); + //判断是否连接无人车系统 + Param isConnectCar = sysParamService.findByCode(SysParamConstant.IS_NOT_CAR); + if (ObjectUtil.isEmpty(isConnectCar)) { + return BaseResponse.requestError("系统参数表中:" + SysParamConstant.IS_NOT_CAR + "不存在"); + } + if (isConnectCar.getValue().equals(IOSConstant.ONE)) { + return BaseResponse.responseOk("下发成功,未连接无人车系统!"); + } + + //无人车系统地址ip + Param acsUrlParam = sysParamService.findByCode(SysParamConstant.CAR_URL); + if (ObjectUtil.isEmpty(acsUrlParam)) { + return BaseResponse.requestError("系统参数表中:" + SysParamConstant.CAR_URL + "不存在"); + } + + String url = acsUrlParam.getValue() + "sendCommand"; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + // 格式转换 + JSONObject result = JSONObject.parseObject(resultMsg); + resultCar = JSONObject.toJavaObject(result, AcsResponse.class); + log.info("下发无人车接口sendCommand的输出参数为:-------------------" + resultMsg); + } catch (Exception e) { + //网络不通 + String msg = e.getMessage(); + log.error("连接失败:{}", msg); + return AcsResponse.requestError("网络不通,操作失败!"); + } + return resultCar; + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/BaseResponse.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/BaseResponse.java index 86dea60..238a6ac 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/BaseResponse.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/BaseResponse.java @@ -73,6 +73,14 @@ public class BaseResponse implements Serializable { return response; } + public static BaseResponse requestError(String message) { + BaseResponse response = new BaseResponse(); + response.setStatus(HttpStatus.HTTP_BAD_REQUEST); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } + public static BaseResponse responseOk(JSONObject data) { BaseResponse response = new BaseResponse(); response.setStatus(HttpStatus.HTTP_OK); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/NotCarController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/NotCarController.java new file mode 100644 index 0000000..9f83071 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/NotCarController.java @@ -0,0 +1,77 @@ +package org.nl.wms.pda.general_management.controller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.pda.general_management.service.NotCarService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 无人车对接 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/notCar") +@Slf4j +public class NotCarController { + + @Autowired + private NotCarService notCarService; + + @PostMapping("/queryXhRegion") + @Log("无人车卸货 - 查询卸货区下拉框") + @SaIgnore + public ResponseEntity queryXhRegion() { + return new ResponseEntity<>(notCarService.queryXhRegion(), HttpStatus.OK); + } + + @PostMapping("/queryEndRegion") + @Log("无人车卸货 - 查询目的区域下拉框") + @SaIgnore + public ResponseEntity queryEndRegion() { + return new ResponseEntity<>(notCarService.queryEndRegion(), HttpStatus.OK); + } + + @PostMapping("/queryRegionPoint") + @Log("无人车卸货 - 查询区域点位信息") + @SaIgnore + public ResponseEntity queryRegionPoint(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarService.queryRegionPoint(whereJson), HttpStatus.OK); + } + + @PostMapping("/unload") + @Log("无人车卸货 - 卸货") + @SaIgnore + public ResponseEntity unload(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarService.unload(whereJson), HttpStatus.OK); + } + + @PostMapping("/waiting") + @Log("无人车卸货 - 等待") + @SaIgnore + public ResponseEntity waiting(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarService.waiting(whereJson), HttpStatus.OK); + } + + @PostMapping("/back") + @Log("无人车卸货 - 回库") + @SaIgnore + public ResponseEntity back(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(notCarService.back(whereJson), HttpStatus.OK); + } + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaPointAndPointController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaPointAndPointController.java index 6cd40e6..507fd50 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaPointAndPointController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaPointAndPointController.java @@ -33,10 +33,31 @@ public class PdaPointAndPointController { private PdaPointAndPointBoxService pdaPointAndPointBoxService; @PostMapping("/createTask") - @Log("生成任务") + @Log("点对点转运 - 生成任务") @SaIgnore public ResponseEntity createTask(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaPointAndPointBoxService.createTask(whereJson), HttpStatus.OK); } + @PostMapping("/queryPointDtl") + @Log("点位更新 - 根据载具/点位查询明细") + @SaIgnore + public ResponseEntity queryPointDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPointAndPointBoxService.queryPointDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/bind") + @Log("点位更新 - 绑定") + @SaIgnore + public ResponseEntity bind(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPointAndPointBoxService.bind(whereJson), HttpStatus.OK); + } + + @PostMapping("/clearMaterial") + @Log("点位更新 - 清物料") + @SaIgnore + public ResponseEntity clearMaterial(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaPointAndPointBoxService.clearMaterial(whereJson), HttpStatus.OK); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaQueryIvtController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaQueryIvtController.java new file mode 100644 index 0000000..84df521 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaQueryIvtController.java @@ -0,0 +1,49 @@ +package org.nl.wms.pda.general_management.controller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.pda.general_management.service.PdaQueryIvtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 手持物料查询 + *

+ * + * @author Liuxy + * @since 2026-01-07 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/queryIvt") +@Slf4j +public class PdaQueryIvtController { + + @Autowired + private PdaQueryIvtService pdaQueryIvtService; + + @PostMapping("/queryMaterial") + @Log("查询物料维护信息") + @SaIgnore + public ResponseEntity queryMaterial(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaQueryIvtService.queryMaterial(whereJson), HttpStatus.OK); + } + + @PostMapping("/queryIvt") + @Log("库存查询") + @SaIgnore + public ResponseEntity queryIvt(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaQueryIvtService.queryIvt(whereJson), HttpStatus.OK); + } + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaWarehouseController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaWarehouseController.java index 494e27c..2aad423 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaWarehouseController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaWarehouseController.java @@ -77,4 +77,25 @@ public class PdaWarehouseController { public ResponseEntity directlyOutConfirm(@RequestBody JSONObject param) { return new ResponseEntity<>(pdaWarehouseService.directlyOutConfirm(param), HttpStatus.OK); } + + @PostMapping("/insideCodeInsert") + @Log("库内合盘 - 扫码插入") + @SaIgnore + public ResponseEntity insideCodeInsert(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaWarehouseService.insideCodeInsert(param), HttpStatus.OK); + } + + @PostMapping("/queryPointVehicle") + @Log("库内合盘 - 查询点位或载具") + @SaIgnore + public ResponseEntity queryPointVehicle(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaWarehouseService.queryPointVehicle(param), HttpStatus.OK); + } + + @PostMapping("/confirmInside") + @Log("库内合盘 - 确认合盘") + @SaIgnore + public ResponseEntity confirmInside(@RequestBody JSONObject param) { + return new ResponseEntity<>(pdaWarehouseService.confirmInside(param), HttpStatus.OK); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/NotCarService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/NotCarService.java new file mode 100644 index 0000000..37b2a85 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/NotCarService.java @@ -0,0 +1,70 @@ +package org.nl.wms.pda.general_management.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pda.util.PdaResponse; + +/** + *

+ * 无人车对接 服务类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +public interface NotCarService { + + /** + * 无人车卸货 - 查询卸货区下拉框 + * + * @return PdaResponse + */ + PdaResponse queryXhRegion(); + + /** + * 无人车卸货 - 查询目的区域下拉框 + * + * @return PdaResponse + */ + PdaResponse queryEndRegion(); + + /** + * 无人车卸货 - 查询区域点位信息 + * + * @param whereJson { + * region_code: 区域编码 + * } + * @return PdaResponse + */ + PdaResponse queryRegionPoint(JSONObject whereJson); + + /** + * 无人车卸货 - 卸货 + * + * @param whereJson { + * region_code: 目的区域 + * rows: 列表明细 + * } + * @return PdaResponse + */ + PdaResponse unload(JSONObject whereJson); + + /** + * 无人车卸货 - 等待 + * + * @param whereJson { + *

+ * } + * @return PdaResponse + */ + PdaResponse waiting(JSONObject whereJson); + + /** + * 无人车卸货 - 回库 + * + * @param whereJson { + *

+ * } + * @return PdaResponse + */ + PdaResponse back(JSONObject whereJson); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java index 96810f9..6597520 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaBuildParamService.java @@ -67,4 +67,16 @@ public interface PdaBuildParamService { * @param io_type 出入类型 */ void createIOS(JSONObject param, String io_type, String bill_type); + + /** + * 直接创建移库单 (误无任务) + * @param param { + * rows: [移出仓位库存] + * storagevehicle_code: 移入载具 + * struct_code: 移入点位 + * total_qty: 总数量 + * } + * @param bill_type 单据类型 + */ + void createMove(JSONObject param, String bill_type); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaPointAndPointBoxService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaPointAndPointBoxService.java index 825cb5b..48e2d75 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaPointAndPointBoxService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaPointAndPointBoxService.java @@ -14,15 +14,57 @@ import org.nl.wms.pda.util.PdaResponse; public interface PdaPointAndPointBoxService { /** - * 生成任务 + * 点对点转运 - 生成任务 * * @param whereJson { - * storagevehicle_code: 载具编码 * point_code1: 起点 * point_code2: 终点 - * task_type: 载具类型 + * task_type: 任务类型 * } * @return PdaResponse */ PdaResponse createTask(JSONObject whereJson); + + /** + * 点位更新 - 根据载具/点位查询明细 + * @param whereJson { + * point_code: 点位编码 + * vehicle_code: 载具编码 + * } + * @return PdaResponse + */ + PdaResponse queryPointDtl(JSONObject whereJson); + + /** + * 点位更新 - 绑定 + * @param whereJson { + * point_code: 点位编码 + * vehicle_code: 载具编码 + * rows: 明细 + * } + * @return PdaResponse + */ + PdaResponse bind(JSONObject whereJson); + + /** + * 点位更新 - 清载具 + * @param whereJson { + * point_code: 点位编码 + * vehicle_code: 载具编码 + * rows: 明细 + * } + * @return PdaResponse + */ + PdaResponse clearVehicle(JSONObject whereJson); + + /** + * 点位更新 - 清物料 + * @param whereJson { + * point_code: 点位编码 + * vehicle_code: 载具编码 + * rows: 明细 + * } + * @return PdaResponse + */ + PdaResponse clearMaterial(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaQueryIvtService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaQueryIvtService.java new file mode 100644 index 0000000..6ec0b8c --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaQueryIvtService.java @@ -0,0 +1,36 @@ +package org.nl.wms.pda.general_management.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pda.util.PdaResponse; + +/** + *

+ * 手持物料查询 服务类 + *

+ * + * @author Liuxy + * @since 2026-01-07 + */ +public interface PdaQueryIvtService { + + /** + * 查询物料维护信息 + * @param whereJson { + * search: 物料编码、物料名称 + * } + * @return PdaResponse + */ + PdaResponse queryMaterial(JSONObject whereJson); + + /** + * 库存查询 + * @param whereJson { + * sect_code: 查询类型(库区) + * point_code: 点位 + * material_code: 物料 + * pcsn: 批号 + * } + * @return PdaResponse + */ + PdaResponse queryIvt(JSONObject whereJson); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaWarehouseService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaWarehouseService.java index 32cf899..0b8cad9 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaWarehouseService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaWarehouseService.java @@ -61,4 +61,35 @@ public interface PdaWarehouseService { * @return PdaResponse */ PdaResponse directlyOutConfirm(JSONObject param); + + /** + * 库内合盘 - 扫码插入 + * @param param { + * bag_code: 袋码 + * } + * @return PdaResponse + */ + PdaResponse insideCodeInsert(JSONObject param); + + /** + * 库内合盘 - 查询点位或载具 + * @param param { + * storagevehicle_code: 移入载具 + * struct_code: 移入点位 + * } + * @return PdaResponse + */ + PdaResponse queryPointVehicle(JSONObject param); + + /** + * 库内合盘 - 确认合盘 + * @param param { + * total_qty: 总数量 + * storagevehicle_code: 移入载具 + * struct_code: 移入点位 + * rows: 明细(袋库存明细) + * } + * @return PdaResponse + */ + PdaResponse confirmInside(JSONObject param); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java index 2d26f4e..a8d39ef 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java @@ -1,6 +1,7 @@ package org.nl.wms.pda.general_management.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.unit.DataUnit; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; @@ -15,7 +16,9 @@ import org.nl.common.utils.SecurityUtils; import org.nl.config.IdUtil; import org.nl.config.MapOf; import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.Sectattr; +import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto; import org.nl.wms.pda.general_management.service.PdaBuildParamService; import org.nl.wms.pda.general_management.service.PdaCommonService; @@ -23,13 +26,8 @@ import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam; import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSEnum; -import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; -import org.nl.wms.warehouse_management.service.IOutBillService; -import org.nl.wms.warehouse_management.service.IRawAssistIStorService; -import org.nl.wms.warehouse_management.service.dao.GroupPlate; -import org.nl.wms.warehouse_management.service.dao.IOStorInv; -import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; -import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; +import org.nl.wms.warehouse_management.service.*; +import org.nl.wms.warehouse_management.service.dao.*; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto; @@ -37,6 +35,7 @@ import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -61,6 +60,24 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { @Resource private IOutBillService outBillService; + /** + * 移库主表服务 + */ + @Resource + private IStIvtMoveinvService iStIvtMoveinvService; + + /** + * 移库明细服务 + */ + @Resource + private IStIvtMoveinvdtlService iStIvtMoveinvdtlService; + + /** + * 仓位服务 + */ + @Resource + private IStructattrService structattrService; + @Override public void doGroupPallet(JSONObject param, String vehicleCode) { JSONArray rows = param.getJSONArray("rows"); @@ -329,4 +346,57 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { } } + + @Override + public void createMove(JSONObject param, String bill_type) { + List rows = param.getJSONArray("rows").toJavaList(JSONObject.class); + // 查询移入仓位 + Structattr inAttrDao = structattrService.getByCode(param.getString("struct_code")); + + // 组织主表 + StIvtMoveinv moveMst = new StIvtMoveinv(); + moveMst.setMoveinv_id(IdUtil.getStringId()); + moveMst.setBill_code(CodeUtil.getNewCode("MOVE_STORE_CODE")); + moveMst.setBill_type(bill_type); + moveMst.setBiz_date(DateUtil.today()); + moveMst.setStor_id(inAttrDao.getStor_id()); + moveMst.setTotal_qty(param.getBigDecimal("total_qty")); + moveMst.setDetail_count(BigDecimal.valueOf(rows.size())); + moveMst.setBill_status(IOSEnum.MOVE_MST_STATUS.code("完成")); + moveMst.setCreate_mode(IOSEnum.CREATE_MODE.code("终端产生")); + moveMst.setInput_optid(SecurityUtils.getCurrentUserId()); + moveMst.setInput_optname(SecurityUtils.getCurrentNickName()); + moveMst.setInput_time(DateUtil.now()); + moveMst.setUpdate_optid(SecurityUtils.getCurrentUserId()); + moveMst.setUpdate_optname(SecurityUtils.getCurrentNickName()); + moveMst.setUpdate_time(DateUtil.now()); + moveMst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + moveMst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + moveMst.setConfirm_time(DateUtil.now()); + iStIvtMoveinvService.save(moveMst); + // 组织明细 + List moveDtlList = new ArrayList<>(); + for (JSONObject json : rows) { + Structattr outAttr = structattrService.getByCode(json.getString("struct_code")); + StIvtMoveinvdtl moveDtl = new StIvtMoveinvdtl(); + + moveDtl.setMoveinvdtl_id(IdUtil.getStringId()); + moveDtl.setMoveinv_id(moveMst.getMoveinv_id()); + moveDtl.setSeq_no(BigDecimal.ONE); + moveDtl.setTurnout_sect_code(outAttr.getSect_code()); + moveDtl.setTurnout_struct_code(outAttr.getStruct_code()); + moveDtl.setMaterial_code(json.getString("material_code")); + moveDtl.setPcsn(json.getString("pcsn")); + moveDtl.setQty_unit_id(json.getString("qty_unit_id")); + moveDtl.setQty_unit_name(json.getString("qty_unit_name")); + moveDtl.setQty(json.getBigDecimal("canuse_qty")); + moveDtl.setTurnin_sect_code(inAttrDao.getSect_code()); + moveDtl.setTurnin_struct_code(inAttrDao.getStruct_code()); + moveDtl.setWork_status(IOSEnum.MOVE_DTL_STATUS.code("完成")); + moveDtl.setStoragevehicle_code(outAttr.getStoragevehicle_code()); + moveDtl.setStoragevehicle_code2(inAttrDao.getStoragevehicle_code()); + moveDtlList.add(moveDtl); + } + iStIvtMoveinvdtlService.saveBatch(moveDtlList); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/NotCarServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/NotCarServiceImpl.java new file mode 100644 index 0000000..4c752c3 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/NotCarServiceImpl.java @@ -0,0 +1,148 @@ +package org.nl.wms.pda.general_management.service.impl; + +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.JSONObjectOf; +import org.nl.wms.ext.service.WmsToNotCarService; +import org.nl.wms.ext.util.BaseResponse; +import org.nl.wms.pda.general_management.service.NotCarService; +import org.nl.wms.pda.util.PdaResponse; +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.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch_manage.service.util.tasks.PdaNotCarUnloadTask; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 无人车对接 实现类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +@Service +public class NotCarServiceImpl implements NotCarService { + + /** + * 区域服务 + */ + @Resource + private ISchBaseRegionService iSchBaseRegionService; + + /** + * 点位mapper + */ + @Resource + private SchBasePointMapper schBasePointMapper; + + /** + * 无人车卸货任务类 + */ + @Resource + private PdaNotCarUnloadTask pdaNotCarUnloadTask; + + /** + * wms调用无人车系统服务 + */ + @Resource + private WmsToNotCarService wmsToNotCarService; + + @Override + public PdaResponse queryXhRegion() { + List list = iSchBaseRegionService.list( + new QueryWrapper().lambda() + .in(SchBaseRegion::getRegion_code, IOSEnum.REGION_CODE.code("无人车对接区(拆包)"), + IOSEnum.REGION_CODE.code("无人车对接区(成品)") + ) + ); + + return PdaResponse.requestParamOk(list); + } + + @Override + public PdaResponse queryEndRegion() { + List list = iSchBaseRegionService.list( + new QueryWrapper().lambda() + .in(SchBaseRegion::getRegion_code, IOSEnum.REGION_CODE.code("无人车卸货缓存区")) + ); + + return PdaResponse.requestParamOk(list); + } + + @Override + public PdaResponse queryRegionPoint(JSONObject whereJson) { + return PdaResponse.requestParamOk(schBasePointMapper.queryRegionPoint(whereJson)); + } + + @Override + @Transactional + public PdaResponse unload(JSONObject whereJson) { + List rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class); + // 查询可用点位 + List pointList = divPoint(rows.size(), whereJson.getString("region_code")); + for (int i = 0; i < rows.size(); i++) { + JSONObject json = rows.get(i); + JSONObject jsonTask = new JSONObject(); + jsonTask.put("point_code1", json.getString("point_code")); + jsonTask.put("point_code2", pointList.get(i).getPoint_code()); + jsonTask.put("material_id", json.getString("class_code")); + pdaNotCarUnloadTask.create(jsonTask); + } + return PdaResponse.requestOk(); + } + + @Override + @Transactional + public PdaResponse waiting(JSONObject whereJson) { + BaseResponse response = wmsToNotCarService.sendCommand(JSONObjectOf.of("to_command", IOSConstant.ONE)); + if (response.getStatus() != HttpStatus.HTTP_OK) { + throw new BadRequestException(response.getMessage()); + } + return PdaResponse.requestOk(); + } + + @Override + @Transactional + public PdaResponse back(JSONObject whereJson) { + BaseResponse response = wmsToNotCarService.sendCommand(JSONObjectOf.of("to_command", IOSConstant.TWO)); + if (response.getStatus() != HttpStatus.HTTP_OK) { + throw new BadRequestException(response.getMessage()); + } + return PdaResponse.requestOk(); + } + + /** + * 根据数量找到对应可用点位 + * + * @param size 数量 + * @param region_code 区域编码 + * @return List + */ + private List divPoint(int size, String region_code) { + List pointList = schBasePointMapper.selectList( + new QueryWrapper().lambda() + .eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .eq(SchBasePoint::getRegion_code, region_code) + .eq(SchBasePoint::getIs_used, IOSConstant.ONE) + .and(row -> row.isNull(SchBasePoint::getIng_task_code) + .or().eq(SchBasePoint::getIng_task_code,"") + ) + .orderByAsc(SchBasePoint::getPoint_code) + ); + + if (pointList.size() < size) { + throw new BadRequestException("当前区域空位不够,当前区域剩余空位【" + pointList.size() + "】"); + } + return pointList; + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPointAndPointServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPointAndPointServiceImpl.java index 12cb75a..cf088ba 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPointAndPointServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaPointAndPointServiceImpl.java @@ -1,11 +1,22 @@ package org.nl.wms.pda.general_management.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.exception.BadRequestException; import org.nl.wms.pda.general_management.service.PdaPointAndPointBoxService; import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.sch_manage.service.PointToPointService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; +import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; +import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** *

@@ -24,9 +35,80 @@ public class PdaPointAndPointServiceImpl implements PdaPointAndPointBoxService { @Autowired private PointToPointService pointToPointService; + /** + * 点位mapper服务 + */ + @Autowired + private SchBasePointMapper schBasePointMapper; + + /** + * 组盘服务 + */ + @Autowired + private IMdPbGroupplateService iMdPbGroupplateService; + @Override public PdaResponse createTask(JSONObject whereJson) { pointToPointService.create(whereJson); return PdaResponse.requestOk(); } + + @Override + public PdaResponse queryPointDtl(JSONObject whereJson) { + return PdaResponse.requestParamOk(schBasePointMapper.pdaQueryPointDtl(whereJson)); + } + + @Override + @Transactional + public PdaResponse bind(JSONObject whereJson) { + // 查询当前点位信息 + SchBasePoint pointDao = schBasePointMapper.selectById(whereJson.getString("point_code")); + if (ObjectUtil.isNotEmpty(pointDao.getVehicle_code())) { + throw new BadRequestException("当前点位存在载具【"+pointDao.getVehicle_code()+"】"); + } + pointDao.setVehicle_code(whereJson.getString("vehicle_code")); + pointDao.setPoint_status(IOSEnum.POINT_STATUS.code("有箱有料")); + schBasePointMapper.updateById(pointDao); + return PdaResponse.requestOk(); + } + + @Override + @Transactional + public PdaResponse clearVehicle(JSONObject whereJson) { + // 查询当前点位信息 + SchBasePoint pointDao = schBasePointMapper.selectById(whereJson.getString("point_code")); + pointDao.setVehicle_code(""); + pointDao.setPoint_status(IOSEnum.POINT_STATUS.code("空位")); + schBasePointMapper.updateById(pointDao); + return PdaResponse.requestOk(); + } + + @Override + @Transactional + public PdaResponse clearMaterial(JSONObject whereJson) { + // 查询当前点位信息 + SchBasePoint pointDao = schBasePointMapper.selectById(whereJson.getString("point_code")); + if (ObjectUtil.isEmpty(pointDao.getVehicle_code())) { + throw new BadRequestException("当前点位不存在载具"); + } + + // 查询组盘信息 + List lateList = iMdPbGroupplateService.list( + new QueryWrapper().lambda() + .eq(GroupPlate::getVehicle_code, pointDao.getVehicle_code()) + ); + // 校验组盘信息不能为入库状态 + boolean is_in = lateList.stream() + .anyMatch(row -> row.getStatus().equals(IOSEnum.GROUP_PLATE_STATUS.code("入库"))); + if (is_in) { + throw new BadRequestException("当前载具存在入库状态组盘信息【"+pointDao.getVehicle_code()+"】"); + } + + // 删除组盘信息 + iMdPbGroupplateService.remove( + new QueryWrapper().lambda() + .eq(GroupPlate::getVehicle_code, pointDao.getVehicle_code()) + ); + return PdaResponse.requestOk(); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaQueryIvtServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaQueryIvtServiceImpl.java new file mode 100644 index 0000000..d279745 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaQueryIvtServiceImpl.java @@ -0,0 +1,53 @@ +package org.nl.wms.pda.general_management.service.impl; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper; +import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; +import org.nl.wms.pda.general_management.service.PdaQueryIvtService; +import org.nl.wms.pda.util.PdaResponse; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 手持物料查询 实现类 + *

+ * + * @author Liuxy + * @since 2025-01-07 + */ +@Service +public class PdaQueryIvtServiceImpl implements PdaQueryIvtService { + + /** + * 物料mapper + */ + @Autowired + private MdMeMaterialbaseMapper mdMeMaterialbaseMapper; + + /** + * 库存mapper + */ + @Autowired + private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper; + + @Override + public PdaResponse queryMaterial(JSONObject whereJson) { + return PdaResponse.requestParamOk(mdMeMaterialbaseMapper.pdaQueryMaterialInfo(whereJson)); + } + + @Override + public PdaResponse queryIvt(JSONObject whereJson) { + List resultList; + // 判断是否外包材 + if (whereJson.getString("sect_code").equals(IOSConstant.WBC01)) { + resultList = mdPbStoragevehicleextMapper.pdaQueryIvtRegion(whereJson); + } else { + resultList = mdPbStoragevehicleextMapper.pdaQueryIvtSect(whereJson); + } + return PdaResponse.requestParamOk(resultList); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaUpdatePointServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaUpdatePointServiceImpl.java index f013461..59557d4 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaUpdatePointServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaUpdatePointServiceImpl.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; +import java.util.stream.Collectors; /** *

@@ -48,6 +49,13 @@ public class PdaUpdatePointServiceImpl implements PdaPublicInterfaceService { new QueryWrapper().lambda() .eq(ObjectUtil.isNotEmpty(region_code), SchBaseRegion::getRegion_code, region_code) ); - return PdaResponse.requestParamOk(regionList); + List collect = regionList.stream() + .map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), JSONObject.class)) + .collect(Collectors.toList()); + collect.forEach(item -> { + item.put("text", item.getString("region_name")); + item.put("value", item.getString("region_code")); + }); + return PdaResponse.requestParamOk(collect); } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaWarehouseServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaWarehouseServiceImpl.java index 4ffa0f3..c5bc46b 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaWarehouseServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaWarehouseServiceImpl.java @@ -10,6 +10,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService; import org.nl.wms.basedata_manage.service.ISectattrService; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; @@ -36,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -78,6 +80,12 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { @Resource private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper; + /** + * 载具扩展信息服务 + */ + @Resource + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + @Override public PdaResponse getPalletAssembly(JSONObject param) { String search = param.getString("search"); @@ -109,7 +117,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { Structattr startStruct = structattrService.getByCode(search); if (ObjectUtil.isEmpty(startStruct)) { vehicleCode = search; - List points = structattrService.getByVehicleCode(search, IOSEnum.LOCK_TYPE.code("未锁定"), true); + List points = structattrService.getByVehicleCode(search, IOSEnum.LOCK_TYPE.code("未锁定"), true); if (points.size() != 1) { throw new BadRequestException(points.size() > 1 ? "该托盘号绑定在多个点位" + points.stream().map(Structattr::getStruct_code).collect(Collectors.toList()) + ",请检查!" @@ -171,12 +179,20 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { public PdaResponse queryReceiveSect() { List sectList = sectattrService.list( new QueryWrapper().lambda() - .eq(Sectattr::getStor_id, IOSEnum.STOR_ID.code("物料室仓库")) + .in(Sectattr::getStor_id, IOSEnum.STOR_ID.code("物料室仓库"),IOSEnum.STOR_ID.code("内包材仓库")) .eq(Sectattr::getIs_delete, IOSConstant.ZERO) .eq(Sectattr::getIs_used, IOSConstant.ONE) ); - return PdaResponse.requestParamOk(sectList); + List collect = sectList.stream() + .map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), JSONObject.class)) + .collect(Collectors.toList()); + collect.forEach(item -> { + item.put("text", item.getString("sect_name")); + item.put("value", item.getString("sect_code")); + }); + + return PdaResponse.requestParamOk(collect); } @Override @@ -195,7 +211,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { // 判断入库点位是否存在 SchBasePoint pointDao = pointService.getById(param.getString("point_code")); if (ObjectUtil.isEmpty(pointDao)) { - throw new BadRequestException("当前入库点位不存在【"+param.getString("point_code")+"】"); + throw new BadRequestException("当前入库点位不存在【" + param.getString("point_code") + "】"); } // 组织入库单创建 @@ -238,7 +254,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { try { if (tryLock) { // 创建出库单据 - defaultPdaBuildParam.createIOS(param,IOSEnum.IO_TYPE.code("出库"),IOSEnum.OUT_BILL_TYPE.code("直接出库")); + defaultPdaBuildParam.createIOS(param, IOSEnum.IO_TYPE.code("出库"), IOSEnum.OUT_BILL_TYPE.code("直接出库")); List rows = param.getJSONArray("rows").toJavaList(JSONObject.class); for (JSONObject json : rows) { @@ -251,10 +267,10 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { // 删除此托盘、物料、批次的组盘信息 groupplateService.remove( new QueryWrapper().lambda() - .eq(GroupPlate::getVehicle_code, json.getString("vehicle_code")) - .eq(GroupPlate::getMaterial_id, json.getString("material_id")) - .eq(GroupPlate::getPcsn, json.getString("pcsn")) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getVehicle_code, json.getString("vehicle_code")) + .eq(GroupPlate::getMaterial_id, json.getString("material_id")) + .eq(GroupPlate::getPcsn, json.getString("pcsn")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) ); // 判断此载具下是否还有其他库存 List ivtList = mdPbStoragevehicleextMapper.selectList( @@ -272,7 +288,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { ivtDao.setCanuse_qty(BigDecimal.valueOf(new_qty)); mdPbStoragevehicleextMapper.updateById(ivtDao); // 减去组盘重量 - GroupPlate groupDao = groupplateService.getById("group_id"); + GroupPlate groupDao = groupplateService.getById(json.getString("group_id")); double group_qty = NumberUtil.sub(groupDao.getQty(), json.getBigDecimal("canuse_qty")).doubleValue(); if (group_qty == 0) { // 删除组盘信息 @@ -294,4 +310,97 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService { } return PdaResponse.requestOk(); } + + @Override + public PdaResponse insideCodeInsert(JSONObject param) { + return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.queryBagIvt(param)); + + } + + @Override + public PdaResponse queryPointVehicle(JSONObject param) { + String storagevehicle_code = param.getString("storagevehicle_code"); + String struct_code = param.getString("struct_code"); + + Structattr attrDao = structattrService.getOne( + new QueryWrapper().lambda() + .eq(ObjectUtil.isNotEmpty(storagevehicle_code), Structattr::getStoragevehicle_code, storagevehicle_code) + .eq(ObjectUtil.isNotEmpty(struct_code), Structattr::getStruct_code, struct_code) + .eq(Structattr::getIs_delete, IOSConstant.ZERO) + .eq(Structattr::getIs_used, IOSConstant.ONE) + .ne(Structattr::getIs_emptyvehicle, IOSConstant.ONE) + ); + + if (ObjectUtil.isEmpty(attrDao)) { + throw new BadRequestException("当前点位/载具不存在!"); + } + return PdaResponse.requestParamOk(attrDao); + } + + @Override + @SneakyThrows + @Transactional + public PdaResponse confirmInside(JSONObject param) { + RLock lock = redissonClient.getLock("lock:confirmInside"); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + // 创建移库单据(无任务) + defaultPdaBuildParam.createMove(param, IOSEnum.MOVE_BILL_TYPE.code("库内移库")); + + List rows = param.getJSONArray("rows").toJavaList(JSONObject.class); + for (JSONObject json : rows) { + MdPbStoragevehicleext ivtDao = mdPbStoragevehicleextMapper.selectById(json.getString("storagevehicleext_id")); + // 减去数量 + double new_qty = NumberUtil.sub(ivtDao.getCanuse_qty(), json.getBigDecimal("canuse_qty")).doubleValue(); + if (new_qty == 0) { + // 删除原载具库存信息 + mdPbStoragevehicleextMapper.deleteById(ivtDao); + + // 判断此载具下是否还有其他库存 + List ivtList = mdPbStoragevehicleextMapper.selectList( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, json.getString("vehicle_code")) + ); + if (ObjectUtil.isEmpty(ivtList)) { + // 变更仓位载具为空载具 + Structattr attrDao = structattrService.getById(json.getString("struct_id")); + attrDao.setIs_emptyvehicle(IOSConstant.ONE); + structattrService.updateById(attrDao); + } + } else { + // 更新原载具库存数量 + ivtDao.setCanuse_qty(BigDecimal.valueOf(new_qty)); + mdPbStoragevehicleextMapper.updateById(ivtDao); + } + + // 新增新载具库存信息 + List updateIvtList = new ArrayList<>(); + JSONObject jsonIvt = new JSONObject(); + jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_ADD_CANUSE); + jsonIvt.put("storagevehicle_code", param.getString("storagevehicle_code")); + jsonIvt.put("bag_code", json.getString("bag_code")); + jsonIvt.put("material_id", ivtDao.getMaterial_id()); + jsonIvt.put("pcsn", ivtDao.getPcsn()); + jsonIvt.put("qty_unit_id", ivtDao.getQty_unit_id()); + jsonIvt.put("qty_unit_name", ivtDao.getQty_unit_name()); + jsonIvt.put("change_qty", json.getString("canuse_qty")); + updateIvtList.add(jsonIvt); + iMdPbStoragevehicleextService.updateIvt(updateIvtList); + + // 更新组盘信息 + GroupPlate groupDao = groupplateService.getById(json.getString("group_id")); + groupDao.setVehicle_code(param.getString("storagevehicle_code")); + groupplateService.updateById(groupDao); + } + } else { + throw new BadRequestException("当前业务繁忙,稍后再试..."); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + return PdaResponse.requestOk(); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java index 5145ff5..8d9a246 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/packaging_management/service/impl/PdaPackagingServiceImpl.java @@ -76,7 +76,10 @@ public class PdaPackagingServiceImpl implements PdaPackagingService { if (ObjectUtil.isEmpty(pointDao)) { throw new BadRequestException("当前点位不存在!【" + whereJson.getString("point_code") + "】"); } - return pdaPublicInterfaceService.queryRegionDropdown(JSONObjectOf.of("region", pointDao.getRegion_code())); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("region_code",pointDao.getRegion_code()); + return pdaPublicInterfaceService.queryRegionDropdown(jsonObject); } @Override @@ -170,7 +173,14 @@ public class PdaPackagingServiceImpl implements PdaPackagingService { .eq(SchBasePoint::getRegion_code, IOSEnum.REGION_CODE.code("外包材区域")) .eq(SchBasePoint::getIs_used, IOSConstant.ONE) ); - return PdaResponse.requestParamOk(pointDaoList); + List collect = pointDaoList.stream() + .map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), JSONObject.class)) + .collect(Collectors.toList()); + collect.forEach(item -> { + item.put("text", item.getString("point_name")); + item.put("value", item.getString("point_code")); + }); + return PdaResponse.requestParamOk(collect); } @Override diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/PointToPointService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/PointToPointService.java index 23bb2ff..6c21bed 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/PointToPointService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/PointToPointService.java @@ -26,7 +26,7 @@ public interface PointToPointService { IPage queryAll(Map whereJson, PageQuery page); /** - * 新增载具入库 + * 新增点对点任务 * * @param whereJson { * storagevehicle_code: 载具编码 diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java index 162feee..b3b411e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java @@ -58,4 +58,24 @@ public interface SchBasePointMapper extends BaseMapper { List getPointDtl(@Param("param") JSONObject whereJson); List getCanUsePointByRegion(String regionCode); + + /** + * 无人车卸货 - 查询区域点位信息 + * @param whereJson { + * region_code: 区域编码 + * } + * @return PdaResponse + */ + List queryRegionPoint(@Param("param") JSONObject whereJson); + + /** + * 手持功能 + * 点位更新 - 根据载具/点位查询明细 + * @param whereJson { + * point_code: 点位编码 + * vehicle_code: 载具编码 + * } + * @return PdaResponse + */ + List pdaQueryPointDtl(@Param("param") JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml index 1aa908e..c30b864 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml @@ -123,4 +123,52 @@ AND ( t.point_code1 = p.point_code OR t.point_code2 = p.point_code )) + + + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml index daad1c3..3fdf3d4 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml @@ -106,7 +106,7 @@ INNER JOIN sch_base_taskconfig config ON task.config_code = config.config_code task.is_delete = '0' - AND task_status = '5' + AND task_status IN ('6','5') AND (task.vehicle_code = #{param.search} or diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/PointToPointServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/PointToPointServiceImpl.java index 80187b3..58ac085 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/PointToPointServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/PointToPointServiceImpl.java @@ -1,11 +1,14 @@ package org.nl.wms.sch_manage.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.PointToPointService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper; import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask; import org.springframework.beans.factory.annotation.Autowired; @@ -38,6 +41,12 @@ public class PointToPointServiceImpl implements PointToPointService { @Resource private PdaPointTask pdaPointTask; + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + @Override public IPage queryAll(Map whereJson, PageQuery page) { @@ -52,6 +61,15 @@ public class PointToPointServiceImpl implements PointToPointService { if (whereJson.getString("point_code1").equals(whereJson.getString("point_code2"))) { throw new BadRequestException("起点和终点不能相同!"); } + SchBasePoint point_code1 = iSchBasePointService.getById(whereJson.getString("point_code1")); + if (ObjectUtil.isEmpty(point_code1)) { + throw new BadRequestException("起点不存在!【"+whereJson.getString("point_code1")+"】"); + } + SchBasePoint point_code2 = iSchBasePointService.getById(whereJson.getString("point_code2")); + if (ObjectUtil.isEmpty(point_code2)) { + throw new BadRequestException("终点不存在!【"+whereJson.getString("point_code2")+"】"); + } + // 创建点对点任务 JSONObject jsonTask = new JSONObject(); jsonTask.put("point_code1", whereJson.getString("point_code1")); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java index cc5caf8..2467634 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PackagingMiddleTask.java @@ -28,7 +28,7 @@ import javax.annotation.Resource; /** *

- * 内包材送入任务类 + * 外包材送入任务类 *

* * @author Liuxy @@ -122,9 +122,7 @@ public class PackagingMiddleTask extends AbstractTask { if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("已完成"); - taskService.updateById(taskObj); + this.finishTask(taskObj); } @Override @@ -150,8 +148,8 @@ public class PackagingMiddleTask extends AbstractTask { // 跟更新库存点位 iMdPdmPackagingService.update( new UpdateWrapper().lambda() - .set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3()) .eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code1()) + .set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3()) ); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaNotCarUnloadTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaNotCarUnloadTask.java new file mode 100644 index 0000000..577c1fd --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaNotCarUnloadTask.java @@ -0,0 +1,192 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +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.ACSTaskTypeEnum; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + *

+ * 无人车卸货任务类 + *

+ * + * @author Liuxy + * @since 2026-01-06 + */ +@Component(value = "PdaNotCarUnloadTask") +@TaskType("PdaNotCarUnloadTask") +public class PdaNotCarUnloadTask extends AbstractTask { + + /** + * 任务服务类 + */ + @Autowired + private ISchBaseTaskService taskService; + + /** + * 点位服务 + */ + @Resource + private ISchBasePointService iSchBasePointService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(PdaNotCarUnloadTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setMaterial_id(json.getString("material_id")); + task.setMaterial_qty(json.getBigDecimal("material_qty")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setRemark(json.getString("remark")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 + this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setPriority(taskDao.getPriority()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ZERO); + acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + + return acsTaskDto; + } + + @Override + @Transactional + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + // 更新明细状态 + this.executingTask(taskObj); + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + @Override + @Transactional + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + @Transactional + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) { + throw new BadRequestException("只能取消生成中的任务!"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + } + + @Transactional + public void finishTask(SchBaseTask taskObj) { + // 更新起点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getVehicle_code, "") + .set(SchBasePoint::getCan_material_type, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + ); + // 更新终点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) + .set(SchBasePoint::getCan_material_type, taskObj.getMaterial_id()) + .set(SchBasePoint::getIng_task_code, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) + ); + // 更新任务 + taskObj.setRemark("已完成"); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskService.updateById(taskObj); + } + + @Transactional + public void cancelTask(SchBaseTask taskObj) { + // 更新终点 + iSchBasePointService.update( + new UpdateWrapper().lambda() + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) + .set(SchBasePoint::getIng_task_code, "") + ); + // 更新任务 + taskObj.setRemark("已取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.updateById(taskObj); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java index 23bdedf..bf8ebee 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java @@ -8,9 +8,6 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.config.IdUtil; -import org.nl.wms.basedata_manage.service.IStructattrService; -import org.nl.wms.basedata_manage.service.dao.Structattr; -import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; @@ -52,12 +49,6 @@ public class PdaPointTask extends AbstractTask { @Resource private ISchBasePointService iSchBasePointService; - /** - * 仓位服务 - */ - @Resource - private IStructattrService iStructattrService; - @Override public String create(JSONObject json) { SchBaseTask task = new SchBaseTask(); @@ -70,12 +61,6 @@ public class PdaPointTask extends AbstractTask { task.setVehicle_code(json.getString("vehicle_code")); task.setMaterial_id(json.getString("material_id")); task.setMaterial_qty(json.getBigDecimal("material_qty")); - if (ObjectUtil.isEmpty(json.getString("task_type"))) { - task.setTask_type(IOSConstant.ONE); - } else { - task.setTask_type(json.getString("task_type")); - } - task.setExt_group_data(json.getString("ext_group_data")); task.setRequest_param(json.toString()); task.setPriority(json.getString("Priority")); task.setContact_task(json.getString("contact_task")); @@ -177,28 +162,13 @@ public class PdaPointTask extends AbstractTask { .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) .set(SchBasePoint::getIng_task_code, "") ); - iStructattrService.update( - new UpdateWrapper().lambda() - .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) - .set(Structattr::getStoragevehicle_code, "") - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - ); // 更新终点 iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) - .set(taskObj.getTask_type().equals(TaskEnum.TASK_TYPE.code("载具")), - SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空载具")) - .set(!taskObj.getTask_type().equals(TaskEnum.TASK_TYPE.code("载具")), - SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) - ); - iStructattrService.update( - new UpdateWrapper().lambda() - .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) - .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code()) - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料")) ); // 更新任务 taskObj.setRemark("已完成"); @@ -208,27 +178,12 @@ public class PdaPointTask extends AbstractTask { @Transactional public void cancelTask(SchBaseTask taskObj) { - // 更新起点 - iSchBasePointService.update( - new UpdateWrapper().lambda() - .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) - ); - iStructattrService.update( - new UpdateWrapper().lambda() - .eq(Structattr::getStruct_code, taskObj.getPoint_code1()) - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - ); // 更新终点 iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) - ); - iStructattrService.update( - new UpdateWrapper().lambda() - .eq(Structattr::getStruct_code, taskObj.getPoint_code2()) - .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(SchBasePoint::getIng_task_code, "") ); // 更新任务 taskObj.setRemark("已取消"); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java index e4cadcc..2fff68a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java @@ -47,6 +47,11 @@ public class IOSConstant { */ public final static String AGVZJZ001 = "AGVZJZ001"; + /** + * 手持-库存查询-类型类型下拉框- 内包材值 + */ + public final static String WBC01 = "WBC01"; + /** * 更新库存状态:加可用(插入数据) */ diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java index 7142cca..42d0560 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java @@ -87,7 +87,7 @@ public enum IOSEnum { PLACEMENT_TYPE(MapOf.of("深货位", "1", "浅货位", "2")), // 仓库ID - STOR_ID(MapOf.of("物料室仓库", "1582991156504039424")), + STOR_ID(MapOf.of("物料室仓库", "1582991156504039424","内包材仓库","1582991156504039425")), // 库区编码 SECT_CODE(MapOf.of("合格区", "HG01", "待检区", "DJ01", "不合格区", "BHG01", "大料箱区", "DLX01")), @@ -128,7 +128,8 @@ public enum IOSEnum { // 区域编码 REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01" - , "外包材区域", "WBCZC01", "空托盘堆叠区域", "EMPDD01" + , "外包材区域", "WBCZC01", "空托盘堆叠区域", "EMPDD01", "无人车对接区(拆包)", "WRCDJ01" + , "无人车对接区(成品)", "WRCDJ02", "无人车卸货缓存区", "WRCXHHC01" )), ; diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml index b100b52..10c2936 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/MdPbGroupplateMapper.xml @@ -100,7 +100,7 @@ md_pb_groupplate late INNER JOIN md_me_materialbase mater ON mater.material_id = late.material_id INNER JOIN md_cs_supplierbase supp ON supp.supp_code = late.supp_code - INNER JOIN md_pb_classstandard class ON class.class_id = mater.material_type_id + LEFT JOIN md_pb_classstandard class ON class.class_id = mater.material_type_id late.status = '1' diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java index d7ec860..1ce3e63 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java @@ -110,9 +110,9 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl row.getMaterial_id().equals(groupPlate.getMaterial_id())); - } - if (!is_yl) { - throw new BadRequestException("原料组盘物料必须相同!"); + if (!is_like) { + throw new BadRequestException("原料组盘物料必须相同!"); + } } List createList = tableData.stream() diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java index 8f0243f..89967e3 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java @@ -1095,6 +1095,10 @@ public class OutBillServiceImpl extends ServiceImpl @Override @Transactional public void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv) { + IOStorInvDis newDis = ioStorInvDisMapper.selectById(ioStorInvDis.getIostorinvdis_id()); + if (newDis.getWork_status().equals(IOSEnum.INBILL_DIS_STATUS.code("生成"))) { + return; + } //创建任务 JSONObject task_form = new JSONObject(); task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); @@ -1112,14 +1116,22 @@ public class OutBillServiceImpl extends ServiceImpl AbstractTask task = taskFactory.getTask(IOSEnum.OUT_CONFIG_CODE.code(ioStorInv.getBill_type())); String task_id = task.create(task_form); - //分配明细表更新任务相关数据 - IOStorInvDis dis = new IOStorInvDis(); - dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id()); - dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成")); - dis.setTask_id(task_id); - dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); - dis.setPoint_code(point_code); - ioStorInvDisMapper.updateById(dis); + // 查询单据下是否有相同载具 + List disList = ioStorInvDisMapper.selectList( + new QueryWrapper().lambda() + .eq(IOStorInvDis::getIostorinv_id, ioStorInv.getIostorinv_id()) + .eq(IOStorInvDis::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) + .eq(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成")) + ); + + for (IOStorInvDis dis : disList) { + //分配明细表更新任务相关数据 + dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成")); + dis.setTask_id(task_id); + dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); + dis.setPoint_code(point_code); + ioStorInvDisMapper.updateById(dis); + } } @Override @@ -1263,102 +1275,104 @@ public class OutBillServiceImpl extends ServiceImpl String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); - IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class) + List disList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class) .eq(IOStorInvDis::getTask_id, task.getTask_id()) ); - if (ObjectUtil.isEmpty(ioStorInvDis)) { + if (ObjectUtil.isEmpty(disList)) { throw new BadRequestException("未找到任务对应的分配明细"); } //查询主表信息 - IOStorInv ioStorInv = ioStorInvMapper.selectById(ioStorInvDis.getIostorinv_id()); + IOStorInv ioStorInv = ioStorInvMapper.selectById(disList.get(0).getIostorinv_id()); - //查询明细信息 - IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id()); - if (ObjectUtil.isEmpty(ioStorInvDtl)) { - throw new BadRequestException("未找到明细"); - } - - ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class) - .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成")) - .set(IOStorInvDis::getReal_qty, task.getMaterial_qty()) - .eq(IOStorInvDis::getIostorinvdis_id, ioStorInvDis.getIostorinvdis_id()) - ); - - //解锁库位 - JSONObject finish_map = new JSONObject(); - finish_map.put("struct_code", ioStorInvDis.getStruct_code()); - finish_map.put("storagevehicle_code", null); - finish_map.put("inv_type", null); - finish_map.put("inv_id", null); - finish_map.put("inv_code", null); - iStructattrService.updateStatusByCode("1", finish_map); - - //修改库存 恢复库存 手持进行减扣 - List updateIvtList = new ArrayList<>(); - JSONObject jsonIvt = new JSONObject(); - jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_SUB_FROZEN); - jsonIvt.put("storagevehicle_code", ioStorInvDis.getStoragevehicle_code()); - jsonIvt.put("material_id", ioStorInvDis.getMaterial_id()); - jsonIvt.put("pcsn", ioStorInvDis.getPcsn()); - jsonIvt.put("qty_unit_id", ioStorInvDis.getQty_unit_id()); - jsonIvt.put("qty_unit_name", ioStorInvDis.getQty_unit_name()); - jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty()); - updateIvtList.add(jsonIvt); - iMdPbStoragevehicleextService.updateIvt(updateIvtList); - - List lateList = groupPlateMapper.selectList( - new QueryWrapper().lambda() - .eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()) - .eq(GroupPlate::getVehicle_code, ioStorInvDis.getStoragevehicle_code()) - .eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id()) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) - ); - if (ObjectUtil.isEmpty(lateList)) { - throw new BadRequestException("此载具没有组盘【"+ioStorInvDis.getStoragevehicle_code()+"】"); - } - - // 如果有袋码则不更新组盘信息,由手持进行更新 - boolean is_emp = lateList.stream() - .anyMatch(row -> ObjectUtil.isEmpty(row.getBag_code())); - if (is_emp) { - GroupPlate groupPlate = lateList.get(0); - double sub_qty = NumberUtil.sub(groupPlate.getQty(), ioStorInvDis.getPlan_qty()).doubleValue(); - if (sub_qty != 0) { - groupPlate.setQty(BigDecimal.valueOf(sub_qty)); + for (IOStorInvDis ioStorInvDis : disList) { + //查询明细信息 + IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id()); + if (ObjectUtil.isEmpty(ioStorInvDtl)) { + throw new BadRequestException("未找到明细"); } - groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("出库")); - groupPlateMapper.updateById(groupPlate); - } - // 查询该明细下是否还有未完成的分配明细 - int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) - .eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id()) - .ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成")) - ); - - // 如果分配明细全部完成则更新明细表状态 - if (countDis == 0) { - // 更新明细表状态 - ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成")); - ioStorInvDtl.setReal_qty(ioStorInvDtl.getAssign_qty()); - ioStorInvDtlMapper.updateById(ioStorInvDtl); - - // 查看明细是否全部完成 - int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class) - .eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id()) - .ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成")) + ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class) + .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成")) + .set(IOStorInvDis::getReal_qty, task.getMaterial_qty()) + .eq(IOStorInvDis::getIostorinvdis_id, ioStorInvDis.getIostorinvdis_id()) ); - // 如果明细全部完成则更新主表状态 - if (countDtl == 0) { - //更新主表状态 - ioStorInvMapper.update(new IOStorInv(), new LambdaUpdateWrapper<>(IOStorInv.class) - .set(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) - .set(IOStorInv::getConfirm_optid, currentUserId) - .set(IOStorInv::getConfirm_optname, nickName) - .set(IOStorInv::getConfirm_time, now) - .eq(IOStorInv::getIostorinv_id, ioStorInvDtl.getIostorinv_id()) + //解锁库位 + JSONObject finish_map = new JSONObject(); + finish_map.put("struct_code", ioStorInvDis.getStruct_code()); + finish_map.put("storagevehicle_code", null); + finish_map.put("inv_type", null); + finish_map.put("inv_id", null); + finish_map.put("inv_code", null); + iStructattrService.updateStatusByCode("1", finish_map); + + //修改库存 恢复库存 手持进行减扣 + List updateIvtList = new ArrayList<>(); + JSONObject jsonIvt = new JSONObject(); + jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_SUB_FROZEN); + jsonIvt.put("storagevehicle_code", ioStorInvDis.getStoragevehicle_code()); + jsonIvt.put("material_id", ioStorInvDis.getMaterial_id()); + jsonIvt.put("pcsn", ioStorInvDis.getPcsn()); + jsonIvt.put("qty_unit_id", ioStorInvDis.getQty_unit_id()); + jsonIvt.put("qty_unit_name", ioStorInvDis.getQty_unit_name()); + jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty()); + updateIvtList.add(jsonIvt); + iMdPbStoragevehicleextService.updateIvt(updateIvtList); + + List lateList = groupPlateMapper.selectList( + new QueryWrapper().lambda() + .eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()) + .eq(GroupPlate::getVehicle_code, ioStorInvDis.getStoragevehicle_code()) + .eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + ); + if (ObjectUtil.isEmpty(lateList)) { + throw new BadRequestException("此载具没有组盘【"+ioStorInvDis.getStoragevehicle_code()+"】"); + } + + // 如果有袋码则不更新组盘信息,由手持进行更新 + boolean is_emp = lateList.stream() + .anyMatch(row -> ObjectUtil.isEmpty(row.getBag_code())); + if (is_emp) { + GroupPlate groupPlate = lateList.get(0); + double sub_qty = NumberUtil.sub(groupPlate.getQty(), ioStorInvDis.getPlan_qty()).doubleValue(); + if (sub_qty != 0) { + groupPlate.setQty(BigDecimal.valueOf(sub_qty)); + } + groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("出库")); + groupPlateMapper.updateById(groupPlate); + } + + // 查询该明细下是否还有未完成的分配明细 + int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) + .eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id()) + .ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成")) + ); + + // 如果分配明细全部完成则更新明细表状态 + if (countDis == 0) { + // 更新明细表状态 + ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成")); + ioStorInvDtl.setReal_qty(ioStorInvDtl.getAssign_qty()); + ioStorInvDtlMapper.updateById(ioStorInvDtl); + + // 查看明细是否全部完成 + int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class) + .eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id()) + .ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成")) ); + + // 如果明细全部完成则更新主表状态 + if (countDtl == 0) { + //更新主表状态 + ioStorInvMapper.update(new IOStorInv(), new LambdaUpdateWrapper<>(IOStorInv.class) + .set(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) + .set(IOStorInv::getConfirm_optid, currentUserId) + .set(IOStorInv::getConfirm_optname, nickName) + .set(IOStorInv::getConfirm_time, now) + .eq(IOStorInv::getIostorinv_id, ioStorInvDtl.getIostorinv_id()) + ); + } } } }