fix:新增分配数量 处理数量逻辑
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -85,6 +85,11 @@ public class PmFormData extends Model<PmFormData> {
|
||||
*/
|
||||
private BigDecimal assign_qty;
|
||||
|
||||
/**
|
||||
* 实际数量
|
||||
*/
|
||||
private BigDecimal actual_qty;
|
||||
|
||||
|
||||
/**
|
||||
* 数量单位
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user