diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java index dba20bf..b825276 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java @@ -1,6 +1,7 @@ package org.nl.wms.ext.service; +import com.alibaba.fastjson.JSONObject; import org.nl.wms.ext.service.util.AcsResponse; import org.nl.wms.sch_manage.service.util.AcsTaskDto; @@ -22,4 +23,11 @@ public interface WmsToAcsService { * @return AcsResponse */ AcsResponse renotifyAcs(List list); + + /** + * 获取称重信息 + * @param whereJson / + * @return AcsResponse + */ + AcsResponse getWeighAcs(JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java index 0b3b8a2..cc288ae 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.ext.service.impl; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.wms.ext.enums.EXTConstant; import org.nl.wms.ext.service.WmsToAcsService; @@ -26,4 +27,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { public AcsResponse renotifyAcs(List list) { return AcsUtil.notifyAcs(EXTConstant.SEND_TASK_ACS_API, list); } + + @Override + public AcsResponse getWeighAcs(JSONObject whereJson) { + return null; + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java index 13b5334..41f8419 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java @@ -3,6 +3,7 @@ package org.nl.wms.ext.service.util; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.Data; import org.nl.wms.ext.util.BaseResponse; @@ -13,9 +14,13 @@ import org.nl.wms.ext.util.BaseResponse; */ @Data public class AcsResponse extends BaseResponse { + private JSONArray errArr = new JSONArray(); + private JSONArray data = new JSONArray(); + private JSONObject resultData = new JSONObject(); + /** * 请求失败 * @param message 错误信息 diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java new file mode 100644 index 0000000..67ce618 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/SelectBackInTask.java @@ -0,0 +1,201 @@ +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.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +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.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; +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.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +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 2025-08-15 + */ +@Component(value = "SelectBackInTask") +@TaskType("SelectBackInTask") +public class SelectBackInTask extends AbstractTask { + @Autowired + private ISchBaseTaskService taskService; + + @Resource + private IRawAssistIStorService rawAssistIStorService; + + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + + @Resource + private IMdPbGroupplateService iMdPbGroupplateService; + + @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(SelectBackInTask.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.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + task.setPriority(json.getString("Priority")); + 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.setTask_type("1"); + + return acsTaskDto; + } + + @Override + 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)) { + 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 + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + rawAssistIStorService.taskFinish(taskObj); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + this.taskConfirm(task_code); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + rawAssistIStorService.taskFinish(taskObj); + this.taskConfirm(taskObj.getTask_code()); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark, "已取消") + .eq(SchBaseTask::getTask_id, taskObj.getTask_id()) + ); + //分配表清除任务 + ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class) + .set(IOStorInvDis::getTask_id, null) + .set(IOStorInvDis::getPoint_code, null) + .set(IOStorInvDis::getIs_issued, 0) + .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成")) + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id()) + ); + + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + + IOStorInvDis disDao = ioStorInvDisMapper.selectOne( + new QueryWrapper().lambda() + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id()) + ); + // 更新组盘信息 + iMdPbGroupplateService.update( + new UpdateWrapper().lambda() + .set(GroupPlate::getQty, disDao.getPlan_qty()) + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + .eq(GroupPlate::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(GroupPlate::getPcsn, disDao.getPcsn()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) + ); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/SelectOutController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/SelectOutController.java new file mode 100644 index 0000000..2f15410 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/SelectOutController.java @@ -0,0 +1,68 @@ +package org.nl.wms.warehouse_management.controller; + + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.warehouse_management.service.SelectOutService; +import org.nl.wms.warehouse_management.service.dto.SelectOutDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + *

+ * 拣选管理 控制层 + *

+ * + * @author Liuxy + * @since 2025-08-18 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/SectOut") +@Slf4j +public class SelectOutController { + + @Autowired + private SelectOutService selectOutService; + + @GetMapping + @Log("分页查询") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(selectOutService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @PostMapping("/getSelectDis") + @Log("获取拣选批次") + public ResponseEntity getSelectDis(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(selectOutService.getSelectDis(whereJson),HttpStatus.OK); + } + + @PostMapping("/getWeigh") + @Log("获取称重信息") + public ResponseEntity getWeigh(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(selectOutService.getWeigh(whereJson),HttpStatus.OK); + } + + @PostMapping("/saveWeigh") + @Log("保存称重信息") + public ResponseEntity saveWeigh(@RequestBody SelectOutDto dto) { + selectOutService.saveWeigh(dto); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/confirmCheck") + @Log("确认拣选") + public ResponseEntity confirmCheck(@RequestBody SelectOutDto dto) { + selectOutService.confirmCheck(dto); + return new ResponseEntity<>(HttpStatus.OK); + } + +} 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 cd72933..d4b427a 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 @@ -29,7 +29,7 @@ public enum IOSEnum { // 入库业务类型 IN_BILL_TYPE(MapOf.of("收货入库","0001", "退料入库","0002" , "合箱入库","0003" - ,"拼箱入库", "0004" ,"手工入库", "0009" + ,"拼箱入库", "0004" ,"拣选回库", "0005", "手工入库", "0009" )), // 入库业务类型 @@ -39,7 +39,7 @@ public enum IOSEnum { // 入库任务配置类编码 IN_CONFIG_CODE(MapOf.of("0001","DetainInTask", "0002", "BackInTask", - "0003", "GeBoxInTask", "0004", "PieceBoxInTask", "0009", "HandInTask" + "0003", "GeBoxInTask", "0004", "PieceBoxInTask", "0005", "SelectBackInTask", "0009", "HandInTask" )), // 出库任务配置类编码 diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/SelectOutService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/SelectOutService.java new file mode 100644 index 0000000..fb1ca1e --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/SelectOutService.java @@ -0,0 +1,68 @@ +package org.nl.wms.warehouse_management.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; +import org.nl.wms.warehouse_management.service.dto.SelectOutDto; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 拣选管理 服务类 + *

+ * + * @author Liuxy + * @since 2025-08-18 + */ +public interface SelectOutService extends IService { + + /** + * 分页查询 + * + * @param whereJson : {查询参数} + * @param page : 分页对象 + * @return 返回结果 + */ + IPage queryAll(Map whereJson, PageQuery page); + + /** + * 获取拣选明细 + * + * @param whereJson { + * 出入库明细 + * } + * @return List 出入库分配明细 + */ + List getSelectDis(JSONObject whereJson); + + /** + * 获取拣选重量 + * + * @param whereJson { + * 分配明细信息 + * } + * @return JSONObject { + * weigh_qty: 称重重量 + * select_qty: 拣选重量 + * } + */ + JSONObject getWeigh(JSONObject whereJson); + + /** + * 保存称重信息 + * + * @param dto dto实体类 + */ + void saveWeigh(SelectOutDto dto); + + /** + * 拣选确认 + * + * @param dto dto实体类 + */ + void confirmCheck(SelectOutDto dto); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/IOStorInvDtl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/IOStorInvDtl.java index 13bcd73..653d127 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/IOStorInvDtl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/IOStorInvDtl.java @@ -104,6 +104,31 @@ public class IOStorInvDtl implements Serializable { /** * 是否拣选:0-否 1-是 + * (质检出库,领料出库,烘干出库) */ private String is_check; + + /** + * 称重重量 + * (质检出库,领料出库,烘干出库) + */ + private BigDecimal weigh_qty; + + /** + * 拣选重量 + * (质检出库,领料出库,烘干出库) + */ + private BigDecimal select_qty; + + /** + * 拣选批次 + * (质检出库,领料出库,烘干出库) + */ + private String select_pcsn; + + /** + * 拣选载具 + * (质检出库,领料出库,烘干出库) + */ + private String select_vehicle; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.java index f0efc70..6bc1c03 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.java @@ -1,14 +1,42 @@ package org.nl.wms.warehouse_management.service.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; +import org.nl.wms.warehouse_management.service.dto.SelectOutDto; + +import java.util.List; +import java.util.Map; /** - * @author dsh - * 2025/5/21 + *

+ * 出库入库明细mapper + *

+ * + * @author Liuxy + * @since 2025-08-18 */ @Mapper public interface IOStorInvDtlMapper extends BaseMapper { + /** + * 拣选管理分页查询 + * @param page 分页条件 + * @param whereJson 查询条件 + * @return IPage + */ + IPage queryAllByPage(Page page, @Param("param") Map whereJson); + + /** + * 获取拣选明细 + * @param whereJson { + * 出入库明细 + * } + * @return List 出入库分配明细 + */ + List getSelectDis(@Param("param") JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.xml new file mode 100644 index 0000000..64bde30 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvDtlMapper.xml @@ -0,0 +1,79 @@ + + + + + + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/SelectOutDto.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/SelectOutDto.java new file mode 100644 index 0000000..ac3c2ad --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dto/SelectOutDto.java @@ -0,0 +1,73 @@ +package org.nl.wms.warehouse_management.service.dto; + +import lombok.Data; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; + +import java.math.BigDecimal; + +/** + *

+ * 拣选管理dto + *

+ * + * @author Liuxy + * @since 2025-08-18 + */ +@Data +public class SelectOutDto extends IOStorInvDtl { + + /** + * 物料编号 + */ + private String material_code; + + /** + * 物料名称 + */ + private String material_name; + + /** + * 物料批次 + */ + private String material_spec; + + /** + * 单据编号 + */ + private String bill_code; + + /** + * 仓库名称 + */ + private String stor_name; + + /** + * 业务类型 + */ + private String bill_type; + + /** + * 业务日期 + */ + private String biz_date; + + /** + * 制单人 + */ + private String input_optname; + + /** + * 制单时间 + */ + private String input_time; + + /** + * 拣选载具 + */ + private String select_vehicle; + + /** + * 需求重量 + */ + private BigDecimal total_qty; +} 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 c30fe33..b3502d7 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 @@ -1195,6 +1195,7 @@ public class OutBillServiceImpl extends ServiceImpl .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) .eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()) .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) ); } @@ -1238,7 +1239,6 @@ public class OutBillServiceImpl extends ServiceImpl 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()) @@ -1257,7 +1257,7 @@ public class OutBillServiceImpl extends ServiceImpl //修改库存 恢复库存 手持进行减扣 List updateIvtList = new ArrayList<>(); JSONObject jsonIvt = new JSONObject(); - jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_SUB_FROZEN_ADD_CANUSE); + 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()); @@ -1267,15 +1267,13 @@ public class OutBillServiceImpl extends ServiceImpl updateIvtList.add(jsonIvt); iMdPbStoragevehicleextService.updateIvt(updateIvtList); - // 判断是否是整出 - if (ioStorInvDis.getReal_qty().doubleValue() >= ioStorInvDis.getPlan_qty().doubleValue()) { - //更新组盘记录表 - groupPlateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<>(GroupPlate.class) - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) - .eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()) - .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) - ); - } + //更新组盘记录表 + groupPlateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<>(GroupPlate.class) + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")) + .eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn()) + .eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")) + ); // 查询该明细下是否还有未完成的分配明细 int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java index e5af7a2..07d1992 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java @@ -622,6 +622,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl(Structattr.class) + List list = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class) .eq(Structattr::getSect_id, whereJson.getString("sect_id")) .eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) .eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO) @@ -769,11 +771,11 @@ public class RawAssistIStorServiceImpl extends ServiceImpl + * 拣选管理 服务实现类 + *

+ * + * @author Liuxy + * @since 2025-08-18 + */ +@Service +public class SelectOutServiceImpl extends ServiceImpl implements SelectOutService { + + /** + * 点位信息服务 + */ + @Autowired + private ISchBasePointService iSchBasePointService; + + /** + * 载具信息服务 + */ + @Autowired + private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; + + /** + * 入库服务 + */ + @Autowired + private IRawAssistIStorService iRawAssistIStorService; + + /** + * 基础物料服务 + */ + @Autowired + private IMdMeMaterialbaseService iMdMeMaterialbaseService; + + /** + * 分配明细mapper + */ + @Autowired + private IOStorInvDisMapper ioStorInvDisMapper; + + /** + * wms调用acs服务 + */ + @Autowired + private WmsToAcsService wmsToAcsService; + + /** + * 入库明细服务 + */ + @Autowired + private IOStorInvDtlMapper ioStorInvDtlMapper; + + /** + * 库区服务 + */ + @Autowired + private ISectattrService iSectattrService; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), + whereJson); + } + + @Override + public List getSelectDis(JSONObject whereJson) { + return this.baseMapper.getSelectDis(whereJson); + } + + @Override + public JSONObject getWeigh(JSONObject whereJson) { + // 判断当前载具是否是称重位上的载具 + SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); + if (!pointDao.getVehicle_code().equals(whereJson.getString("storagevehicle_code"))) { + throw new BadRequestException("当前称重位载具与拣选载具不符,当前称重位载具为【" + pointDao.getVehicle_code() + "】"); + } + // 获取载具信息 + MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString(pointDao.getVehicle_code())); + if (ObjectUtil.isEmpty(vehicleDao.getWeigth())) { + throw new BadRequestException("请维护当前载具重量【" + pointDao.getVehicle_code() + "】"); + } + + // TODO 调用ACS接口获取称重信息 + AcsResponse weighAcs = wmsToAcsService.getWeighAcs(new JSONObject()); + JSONObject jsonResult = weighAcs.getResultData(); + + // 称重重量 + double weigh_qty = NumberUtil.round(jsonResult.getDoubleValue("weigh_qty"), 2).doubleValue(); + // 扣除载具重量 + double sub_qty = NumberUtil.sub(weigh_qty, vehicleDao.getWeigth().doubleValue()); + // 计算拣选重量: 出库重量 - 称重重量(扣除载具重量) + double select_qty = NumberUtil.sub(whereJson.getDoubleValue("plan_qty"), sub_qty); + + JSONObject result = new JSONObject(); + result.put("weigh_qty", NumberUtil.round(sub_qty, 2)); + result.put("select_qty", NumberUtil.round(select_qty, 2)); + return result; + } + + @Override + @Transactional + public void saveWeigh(SelectOutDto dto) { + IOStorInvDtl dtlDao = this.getById(dto.getIostorinvdtl_id()); + dtlDao.setWeigh_qty(dto.getWeigh_qty()); + dtlDao.setSelect_pcsn(dto.getSelect_pcsn()); + dtlDao.setSelect_qty(dto.getSelect_qty()); + dtlDao.setSelect_vehicle(dto.getSelect_vehicle()); + this.updateById(dto); + } + + @Override + @Transactional + public void confirmCheck(SelectOutDto dto) { + // 组织入库数据 + JSONObject resultJson = organizeInsertData(dto); + // 调用分配 + JSONObject resultMap = organizeDivData(resultJson); + // 调用下发 + sendTask(resultMap); + // 更新明细是否拣选为否 + this.update( + new UpdateWrapper().lambda() + .set(IOStorInvDtl::getIs_check, IOSConstant.IS_DELETE_NO) + .eq(IOStorInvDtl::getIostorinvdtl_id, dto.getIostorinvdtl_id()) + ); + } + + /** + * 组织入库数据 + * + * @param dto { + * dto + * } + * @return JSONObject + */ + private JSONObject organizeInsertData(SelectOutDto dto) { + // 原出库明细信息 + IOStorInvDtl dtlDao = this.getById(dto.getIostorinvdtl_id()); + // 原出库主表信息 + IOStorInv mstDao = iRawAssistIStorService.getById(dto.getIostorinv_id()); + // 原出库分配明细信息 + IOStorInvDis disDao = ioStorInvDisMapper.selectOne( + new QueryWrapper().lambda() + .eq(IOStorInvDis::getIostorinvdtl_id, dto.getIostorinvdtl_id()) + .eq(IOStorInvDis::getStoragevehicle_code, dto.getSelect_vehicle()) + .eq(IOStorInvDis::getPcsn, dto.getSelect_pcsn()) + ); + + // 组织主表数据 + Map jsonMst = new HashMap<>(); + jsonMst.put("stor_id", mstDao.getStor_id()); + jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成")); + jsonMst.put("total_qty", dto.getWeigh_qty()); + jsonMst.put("detail_count", 1); + jsonMst.put("bill_type", IOSEnum.IN_BILL_TYPE.code("拣选回库")); + jsonMst.put("biz_date", DateUtil.now()); + + // 组织明细数据 + ArrayList tableData = new ArrayList<>(); + HashMap dtl = new HashMap<>(); + dtl.put("storagevehicle_code", disDao.getStoragevehicle_code()); + dtl.put("pcsn", disDao.getPcsn()); + dtl.put("qty_unit_id", disDao.getQty_unit_id()); + dtl.put("qty_unit_name", disDao.getQty_unit_name()); + dtl.put("qty", dtlDao.getWeigh_qty().toString()); + MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(disDao.getMaterial_id()); + dtl.put("material_code", materDao.getMaterial_code()); + dtl.put("material_name", materDao.getMaterial_name()); + dtl.put("material_id", materDao.getMaterial_id()); + dtl.put("plan_qty", dtlDao.getWeigh_qty().toString()); + // 调用新增 + tableData.add(dtl); + jsonMst.put("tableData", tableData); + String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst); + + JSONObject result = new JSONObject(); + result.put("sect_id", disDao.getSect_id()); + result.put("iostorinv_id", iostorinv_id); + return result; + } + + /** + * 组织分配数据 + * + * @param whereJson { + * iostorinv_id + * sect_id + * } + * @return JSONObject + */ + private JSONObject organizeDivData(JSONObject whereJson) { + // 查询库区 + Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id")); + // 组织主数据 + Map jsonMst = new HashMap<>(); + jsonMst.put("checked", true); + jsonMst.put("sect_id", sectDao.getSect_id()); + jsonMst.put("stor_id", sectDao.getStor_id()); + // 组织明细数据 + 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.divStruct(jsonMst); + + JSONObject result = new JSONObject(); + result.put("storagevehicle_code", disDtl.get(0).getStoragevehicle_code()); + result.put("point_code", IOSConstant.CZW_POINT); + result.put("sect_id", disDtl.get(0).getSect_id()); + result.put("iostorinv_id", disDtl.get(0).getIostorinv_id()); + return result; + } + + + /** + * 下发任务 + * + * @param whereJson { + * storagevehicle_code:载具编码 + * point_code:点位编码 + * sect_id:库区 + * 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/wms/nladmin-ui/src/views/wms/basedata/group/index.vue b/wms/nladmin-ui/src/views/wms/basedata/group/index.vue index bb1336d..8450451 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/group/index.vue +++ b/wms/nladmin-ui/src/views/wms/basedata/group/index.vue @@ -240,6 +240,8 @@ >