diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java index c4e4e55..721ec78 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java @@ -4,9 +4,12 @@ package org.nl.wms.basedata_manage.controller; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.A; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -18,16 +21,24 @@ import org.nl.wms.basedata_manage.service.IMdCsSupplierbaseService; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; import org.nl.wms.basedata_manage.service.dao.MdCsSupplierbase; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; +import org.nl.wms.pm_manage.service.IPmFormDataService; +import org.nl.wms.pm_manage.service.dao.PmFormData; +import org.nl.wms.sch_manage.enums.PointStatusEnum; +import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; import org.nl.wms.warehouse_manage.service.dao.GroupPlate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; import java.util.Map; import java.util.Set; @@ -52,6 +63,13 @@ public class GroupController { private final IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; @Autowired private IMdCsSupplierbaseService supplierbaseService; + @Autowired + private IPmFormDataService iPmFormDataService; + /** + * 点位服务 + */ + @Autowired + private ISchBasePointService iSchBasePointService; @GetMapping @Log("分页查询") @@ -62,8 +80,9 @@ public class GroupController { @PostMapping @Log("新增组盘组盘") + @Transactional public ResponseEntity create(@RequestBody JSONObject group) { - Assert.noNullElements(new Object[]{group,group.get("material_id"),group.get("storagevehicle_code"),group.get("qty")},"请求参数不能为空"); + Assert.noNullElements(new Object[]{group, group.get("material_id"), group.get("storagevehicle_code"), group.get("qty")}, "请求参数不能为空"); GroupPlate groupPlate = group.toJavaObject(GroupPlate.class); String storagevehicleCode = groupPlate.getStoragevehicle_code(); { @@ -71,7 +90,7 @@ public class GroupController { int has = iMdPbGroupplateService.count(new LambdaUpdateWrapper() .eq(GroupPlate::getStoragevehicle_code, groupPlate.getStoragevehicle_code()) .lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))); - if (has>0){ + if (has > 0) { throw new BadRequestException("当前载具组盘信息已存在"); } } @@ -79,6 +98,50 @@ public class GroupController { if (ObjectUtil.isEmpty(supp)) { throw new BadRequestException("供应商信息不存在!"); } + + //修改单据已分配数 + if (StringUtils.isNotEmpty(groupPlate.getExt_code())) { + List pmFormDataList = iPmFormDataService + .list(new LambdaUpdateWrapper().eq(PmFormData::getCode, groupPlate.getExt_code())); + + if (!CollectionUtils.isEmpty(pmFormDataList)) { + + if(groupPlate.getQty().compareTo(pmFormDataList.get(0).getQty().subtract(pmFormDataList.get(0).getAssign_qty())) > 0){ + throw new BadRequestException("组盘数量大于单据剩余数量,请核对!"); + } + + if(!pmFormDataList.get(0).getMaterial_code().equals(groupPlate.getMaterial_code())){ + throw new BadRequestException("组盘的物料编码与单据的物料编码不一致,请核对!"); + } + + if (groupPlate.getQty().compareTo(pmFormDataList.get(0).getQty().subtract(pmFormDataList.get(0).getAssign_qty())) == 0) { + iPmFormDataService.update( + new LambdaUpdateWrapper() + .set(PmFormData::getStatus, IOSEnum.BILL_STATUS.code("分配完")) + .set(PmFormData::getAssign_qty, pmFormDataList.get(0).getAssign_qty().add(groupPlate.getQty())) + .set(PmFormData::getUpdate_time, DateUtil.now()) + .set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(PmFormData::getCode, groupPlate.getExt_code())); + } else { + iPmFormDataService.update( + new LambdaUpdateWrapper() + .set(PmFormData::getAssign_qty, pmFormDataList.get(0).getAssign_qty().add(groupPlate.getQty())) + .set(PmFormData::getStatus, IOSEnum.BILL_STATUS.code("分配中")) + .set(PmFormData::getUpdate_time, DateUtil.now()) + .set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(PmFormData::getCode, groupPlate.getExt_code())); + } + } + } + //修改点位表中的点位为有料 + iSchBasePointService.update( + new LambdaUpdateWrapper() + .set(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) + .set(SchBasePoint::getUpdate_time, DateUtil.now()) + .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(SchBasePoint::getVehicle_code, groupPlate.getStoragevehicle_code())); + + groupPlate.setSupp_code(supp.getSupp_code()); groupPlate.setSupp_name(supp.getSupp_name()); groupPlate.setGroup_id(IdUtil.getStringId()); @@ -92,7 +155,24 @@ public class GroupController { @DeleteMapping @Log("删除组盘") + @Transactional public ResponseEntity delete(@RequestBody Set ids) { + List groupPlateList = iMdPbGroupplateService.list(new QueryWrapper().lambda() + .in(GroupPlate::getGroup_id, ids)); + //修改单据已分配数 + //查询PmFormData + for (GroupPlate groupPlate : groupPlateList) { + iPmFormDataService.update( + new LambdaUpdateWrapper().setSql("assign_qty = assign_qty - " + groupPlate.getQty()) + .eq(PmFormData::getCode, groupPlate.getExt_code())); + + //修改点位表中的点位为空载具 + iSchBasePointService.update(new LambdaUpdateWrapper() + .set(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) + .eq(SchBasePoint::getPoint_code, groupPlate.getStoragevehicle_code()) + ); + } + iMdPbGroupplateService.delete(ids); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java index ec6a117..fe1ab1e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java @@ -34,6 +34,7 @@ import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService; import org.nl.wms.pda_manage.util.PdaResponse; import org.nl.wms.pm_manage.service.IPmFormDataService; import org.nl.wms.pm_manage.service.dao.PmFormData; +import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.enums.TaskStatus; @@ -228,6 +229,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { if (count > 0) { throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在库内,请对数据进行核实!"); } + GroupPlate groupDao = GroupPlate.builder() .group_id(IdUtil.getStringId()) .material_id(materDao.getMaterial_code()) @@ -242,6 +244,50 @@ public class PdaIosInServiceImpl implements PdaIosInService { .create_name(SecurityUtils.getCurrentNickName()) .create_time(DateUtil.now()) .build(); + + + //修改单据已分配数 + if (StringUtils.isNotEmpty(groupDao.getExt_code())) { + List pmFormDataList = iPmFormDataService + .list(new LambdaUpdateWrapper().eq(PmFormData::getCode, groupDao.getExt_code())); + + if (!org.springframework.util.CollectionUtils.isEmpty(pmFormDataList)) { + + if(groupDao.getQty().compareTo(pmFormDataList.get(0).getQty().subtract(pmFormDataList.get(0).getAssign_qty())) > 0){ + throw new BadRequestException("组盘数量大于单据剩余数量,请核对!"); + } + + if(!pmFormDataList.get(0).getMaterial_code().equals(groupDao.getMaterial_code())){ + throw new BadRequestException("组盘的物料编码与单据的物料编码不一致,请核对!"); + } + + if (groupDao.getQty().compareTo(pmFormDataList.get(0).getQty().subtract(pmFormDataList.get(0).getAssign_qty())) == 0) { + iPmFormDataService.update( + new LambdaUpdateWrapper() + .set(PmFormData::getStatus, IOSEnum.BILL_STATUS.code("分配完")) + .set(PmFormData::getAssign_qty, pmFormDataList.get(0).getAssign_qty().add(groupDao.getQty())) + .set(PmFormData::getUpdate_time, DateUtil.now()) + .set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(PmFormData::getCode, groupDao.getExt_code())); + } else { + iPmFormDataService.update( + new LambdaUpdateWrapper() + .set(PmFormData::getAssign_qty, pmFormDataList.get(0).getAssign_qty().add(groupDao.getQty())) + .set(PmFormData::getStatus, IOSEnum.BILL_STATUS.code("分配中")) + .set(PmFormData::getUpdate_time, DateUtil.now()) + .set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName()) + .eq(PmFormData::getCode, groupDao.getExt_code())); + } + } + } + //修改点位表中的点位为有料 + iSchBasePointService.update( new LambdaUpdateWrapper() + .set(SchBasePoint::getUpdate_time, DateUtil.now()) + .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) + .set(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) + .eq(SchBasePoint::getVehicle_code, groupDao.getStoragevehicle_code())); + + iMdPbGroupplateService.save(groupDao); return PdaResponse.requestOk(); } @@ -624,6 +670,14 @@ public class PdaIosInServiceImpl implements PdaIosInService { throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位"); } + if(!"3".equals(schBasePoint.getPoint_status())){ + throw new BadRequestException("系统显示点位"+schBasePoint.getPoint_code()+"不是有料状态,请确认是否组盘!"); + } + + if (!schBasePoint.getPoint_code().equals(paramDto.getSite_code())) { + throw new BadRequestException("载具" + paramDto.getVehicle_code() + "不在" + paramDto.getSite_code() + "上"); + } + //如果是第一个,则不知道搬出来的托盘应该放哪里,因此需要计算得出,其他的则是【上一个点位】 if (StringUtils.isBlank(lastSchBasePoint)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class) @@ -672,7 +726,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { List pointList4 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code4) .collect(Collectors.toList()); - List pointStringList = emptyPointStringList.stream().filter(a->StringUtils.isNotBlank(a) + List pointStringList = emptyPointStringList.stream().filter(a -> StringUtils.isNotBlank(a) && !pointList1.contains(a) && !pointList2.contains(a) && !pointList3.contains(a) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PmFormData.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PmFormData.java index c06d202..64dbffa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PmFormData.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pm_manage/service/dao/PmFormData.java @@ -85,6 +85,11 @@ public class PmFormData extends Model { */ private BigDecimal assign_qty; + /** + * 实际数量 + */ + private BigDecimal actual_qty; + /** * 数量单位 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/SchBasePoint.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/SchBasePoint.java index 20e26a2..bd490fc 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/SchBasePoint.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/SchBasePoint.java @@ -17,7 +17,7 @@ import java.util.List; @Data @EqualsAndHashCode(callSuper = false) @TableName("sch_base_point") -public class SchBasePoint implements Serializable { +public class SchBasePoint implements Serializable { private static final long serialVersionUID = 1L; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java index 7ff3c0f..ca113bc 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/zw/InBillTask.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; @@ -41,6 +42,7 @@ import java.util.List; * @Description: 来料入库 * @Date: 2025年7月24日13:19:24 */ +@Slf4j @Component(value = "InBillTask") @TaskType("InBillTask") public class InBillTask extends AbstractTask { @@ -180,6 +182,7 @@ public class InBillTask extends AbstractTask { pointService.update(new LambdaUpdateWrapper() .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) .set(SchBasePoint::getPoint_status, "2") + .set(SchBasePoint::getVehicle_qty,1) .set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()) .set(SchBasePoint::getUpdate_time, DateUtil.now()) @@ -201,16 +204,44 @@ public class InBillTask extends AbstractTask { .set(Structattr::getUpdate_time, DateUtil.now()) .eq(Structattr::getStruct_code, taskObj.getPoint_code1())); - List noFinishTask = taskService.list(new LambdaQueryWrapper<>(SchBaseTask.class) - .eq(SchBaseTask::getForm_data_code,taskObj.getForm_data_code()) - .eq(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")) - .ne(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())); - //判断单据编号下的任务是否已经全部完成 即没有未完成数据 - if(CollectionUtils.isEmpty(noFinishTask)){ + + //更新formdata + updateFormData(taskObj); + } + + private void updateFormData(SchBaseTask taskObj) { + //根据当前task获取组盘详情 + GroupPlate groupPlate = iMdPbGroupplateService.getById(taskObj.getGroup_id()); + + if (ObjectUtil.isEmpty(groupPlate)) { + log.error("来料入库异常,找不到组盘id=【{}】的组盘信息", taskObj.getGroup_id()); + throw new BadRequestException("来料入库异常,找不到组盘id=【" + taskObj.getGroup_id() + "】的组盘信息"); + } + + //查询单据号中 + List pmFormDataList = iPmFormDataService + .list(new LambdaUpdateWrapper().eq(PmFormData::getCode, taskObj.getForm_data_code())); + + if(CollectionUtils.isEmpty(pmFormDataList)){ + log.error("来料入库异常,找不到单据=【{}】的信息", taskObj.getForm_data_code()); + throw new BadRequestException("来料入库异常,找不到单据=【" + taskObj.getForm_data_code() + "】的信息"); + } + + //判断单据剩余数量(总数量-已完成数量)与组盘数量的差距 + //todo 判断已经完成数量是否是actual_qty,如果后期调整,可以更改此处 + if( groupPlate.getQty().compareTo(pmFormDataList.get(0).getQty().subtract(pmFormDataList.get(0).getActual_qty())) ==0){ iPmFormDataService.update( new LambdaUpdateWrapper() .set(PmFormData::getStatus,IOSEnum.BILL_STATUS.code("完成")) .set(PmFormData::getIs_finish, 1) + .set(PmFormData::getActual_qty,pmFormDataList.get(0).getActual_qty().add(groupPlate.getQty())) + .set(PmFormData::getUpdate_time,DateUtil.now()) + .set(PmFormData::getUpdate_name, "task") + .eq(PmFormData::getCode, taskObj.getForm_data_code())); + } else { + iPmFormDataService.update( + new LambdaUpdateWrapper() + .set(PmFormData::getActual_qty,pmFormDataList.get(0).getActual_qty().add(groupPlate.getQty())) .set(PmFormData::getUpdate_time,DateUtil.now()) .set(PmFormData::getUpdate_name, "task") .eq(PmFormData::getCode, taskObj.getForm_data_code())); diff --git a/lms/nladmin-ui/src/views/wms/pm_manage/form_data/index.vue b/lms/nladmin-ui/src/views/wms/pm_manage/form_data/index.vue index fe16b5c..b80c9e0 100644 --- a/lms/nladmin-ui/src/views/wms/pm_manage/form_data/index.vue +++ b/lms/nladmin-ui/src/views/wms/pm_manage/form_data/index.vue @@ -244,8 +244,8 @@ - - + +