fix:新增分配数量 处理数量逻辑

This commit is contained in:
zhengxuming
2025-08-07 16:03:26 +08:00
parent e75f14e431
commit b835a0618e
6 changed files with 182 additions and 12 deletions

View File

@@ -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<Object> 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<GroupPlate>()
.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<PmFormData> pmFormDataList = iPmFormDataService
.list(new LambdaUpdateWrapper<PmFormData>().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<PmFormData>()
.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<PmFormData>()
.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<SchBasePoint>()
.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<Object> delete(@RequestBody Set<String> ids) {
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>().lambda()
.in(GroupPlate::getGroup_id, ids));
//修改单据已分配数
//查询PmFormData
for (GroupPlate groupPlate : groupPlateList) {
iPmFormDataService.update(
new LambdaUpdateWrapper<PmFormData>().setSql("assign_qty = assign_qty - " + groupPlate.getQty())
.eq(PmFormData::getCode, groupPlate.getExt_code()));
//修改点位表中的点位为空载具
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
.set(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
.eq(SchBasePoint::getPoint_code, groupPlate.getStoragevehicle_code())
);
}
iMdPbGroupplateService.delete(ids);
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -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<PmFormData> pmFormDataList = iPmFormDataService
.list(new LambdaUpdateWrapper<PmFormData>().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<PmFormData>()
.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<PmFormData>()
.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<SchBasePoint>()
.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<SchBasePoint> queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class)
@@ -672,7 +726,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
List<String> pointList4 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code4)
.collect(Collectors.toList());
List <String> pointStringList = emptyPointStringList.stream().filter(a->StringUtils.isNotBlank(a)
List<String> pointStringList = emptyPointStringList.stream().filter(a -> StringUtils.isNotBlank(a)
&& !pointList1.contains(a)
&& !pointList2.contains(a)
&& !pointList3.contains(a)

View File

@@ -85,6 +85,11 @@ public class PmFormData extends Model<PmFormData> {
*/
private BigDecimal assign_qty;
/**
* 实际数量
*/
private BigDecimal actual_qty;
/**
* 数量单位

View File

@@ -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;

View File

@@ -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<SchBasePoint>()
.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<SchBaseTask> 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<PmFormData> pmFormDataList = iPmFormDataService
.list(new LambdaUpdateWrapper<PmFormData>().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<PmFormData>()
.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<PmFormData>()
.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()));