add:PC组盘、PC空载具入库、PC空载具出库

This commit is contained in:
2025-08-13 20:29:06 +08:00
parent 350e129c16
commit 6262db2da4
48 changed files with 1924 additions and 674 deletions

View File

@@ -1,14 +1,17 @@
package org.nl.wms.basedata_manage.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.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -22,7 +25,7 @@ import java.util.Set;
* </p>
*
* @author Liuxy
* @since 2025-06-03
* @since 2025-08-11
*/
@RestController
@RequiredArgsConstructor
@@ -39,6 +42,39 @@ public class GroupController {
return new ResponseEntity<>(TableDataInfo.build(iMdPbGroupplateService.queryAll(whereJson, page)), HttpStatus.OK);
}
@PostMapping
@Log("新增组盘记录")
public ResponseEntity<Object> create(@Validated @RequestBody GroupPlate dto) {
iMdPbGroupplateService.create(dto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改组盘记录")
public ResponseEntity<Object> update(@Validated @RequestBody GroupPlate dto) {
iMdPbGroupplateService.update(dto);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/queryMater")
@Log("查询物料信息")
public ResponseEntity<Object> queryMater(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(iMdPbGroupplateService.queryMater(whereJson), HttpStatus.OK);
}
@PostMapping("/checkVehicle")
@Log("校验载具")
public ResponseEntity<Object> checkVehicle(@RequestBody JSONObject whereJson) {
iMdPbGroupplateService.checkVehicle(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/querySupp")
@Log("查询供应商")
public ResponseEntity<Object> querySupp(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(iMdPbGroupplateService.querySupp(whereJson), HttpStatus.OK);
}
@DeleteMapping
@Log("删除组盘")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {

View File

@@ -72,8 +72,7 @@
attr.sect_name,
mater.material_code,
mater.material_name,
mater.material_spec,
late.prison_area
mater.material_spec
FROM
md_pb_storagevehicleext ext
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
@@ -82,12 +81,11 @@
SELECT
material_id,
storagevehicle_code,
pcsn,
MAX(prison_area) AS prison_area
pcsn
FROM
md_pb_groupplate
WHERE
status = '02'
status = '2'
GROUP BY
material_id,storagevehicle_code,pcsn
) late ON late.material_id = ext.material_id and late.pcsn = ext.pcsn and late.storagevehicle_code = ext.storagevehicle_code

View File

@@ -116,12 +116,9 @@ public class PdaIosInServiceImpl implements PdaIosInService {
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode(unit_code);
GroupPlate groupDao = iMdPbGroupplateService.getOne(
new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getMaterial_id, materDao.getMaterial_id())
.eq(GroupPlate::getPcsn, pcsn)
.eq(GroupPlate::getQty, qty)
.eq(GroupPlate::getQty_unit_id, unitDao.getMeasure_unit_id())
.eq(GroupPlate::getExt_code, ext_code)
.eq(GroupPlate::getExt_type, ext_type)
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("生成"))
);
@@ -129,14 +126,11 @@ public class PdaIosInServiceImpl implements PdaIosInService {
// 插入组盘记录表
groupDao = new GroupPlate();
groupDao.setGroup_id(IdUtil.getStringId());
groupDao.setMaterial_id(materDao.getMaterial_id());
groupDao.setPcsn(pcsn);
groupDao.setQty_unit_id(unitDao.getMeasure_unit_id());
groupDao.setQty_unit_name(unitDao.getUnit_name());
groupDao.setQty(BigDecimal.valueOf(Double.parseDouble(qty)));
groupDao.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("生成"));
groupDao.setExt_code(ext_code);
groupDao.setExt_type(ext_type);
groupDao.setCreate_id(SecurityUtils.getCurrentUserId());
groupDao.setCreate_name(SecurityUtils.getCurrentNickName());
groupDao.setCreate_time(DateUtil.now());
@@ -185,9 +179,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
if (ObjectUtil.isNotEmpty(plateDaoList)) {
boolean is_like = plateDaoList.stream()
.allMatch(row -> row.getMaterial_id().equals(groupDao.getMaterial_id()) &&
row.getPcsn().equals(groupDao.getPcsn()) &&
row.getExt_code().equals(groupDao.getExt_code()) &&
row.getExt_type().equals(groupDao.getExt_type())
row.getPcsn().equals(groupDao.getPcsn())
);
if (!is_like) {
throw new BadRequestException("当前托盘所绑物料批次或者源单据与当前组盘物料批次不一致!");
@@ -273,7 +265,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
);
if (ObjectUtil.isNotEmpty(plateDaoList)) {
boolean is_like = plateDaoList.stream()
.allMatch(row -> row.getMaterial_id().equals(materDao.getMaterial_id()) &&
.allMatch(row -> row.getMaterial_id().equals(materDao.getMaterial_code()) &&
row.getPcsn().equals(whereJson.getString("pcsn"))
);
if (!is_like) {
@@ -285,7 +277,6 @@ public class PdaIosInServiceImpl implements PdaIosInService {
GroupPlate groupDao = new GroupPlate();
groupDao.setGroup_id(org.nl.config.IdUtil.getStringId());
groupDao.setStoragevehicle_code(whereJson.getString("storagevehicle_code"));
groupDao.setMaterial_id(materDao.getMaterial_id());
groupDao.setPcsn(whereJson.getString("pcsn"));
// 默认数量个
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode("EA");
@@ -296,9 +287,6 @@ public class PdaIosInServiceImpl implements PdaIosInService {
groupDao.setCreate_id(SecurityUtils.getCurrentUserId());
groupDao.setCreate_name(SecurityUtils.getCurrentNickName());
groupDao.setCreate_time(DateUtil.now());
groupDao.setExt_type(whereJson.getString("ext_type"));
groupDao.setExt_code(whereJson.getString("ext_code"));
groupDao.setPrison_area(whereJson.getString("prison_area"));
iMdPbGroupplateService.save(groupDao);
return PdaResponse.requestOk();
}
@@ -337,15 +325,12 @@ public class PdaIosInServiceImpl implements PdaIosInService {
jsonMst.put("detail_count", 1);
jsonMst.put("bill_type", IOSEnum.BILL_TYPE.code("生产入库"));
jsonMst.put("biz_date", DateUtil.now());
jsonMst.put("source_id", plateDaoList.get(0).getExt_code());
jsonMst.put("source_type", plateDaoList.get(0).getExt_type());
// 组织明细数据
ArrayList<HashMap> tableData = new ArrayList<>();
HashMap<String, String> dtl = new HashMap<>();
GroupPlate plateDao = plateDaoList.get(0);
dtl.put("storagevehicle_code", plateDao.getStoragevehicle_code());
dtl.put("material_id", plateDao.getMaterial_id());
dtl.put("pcsn", plateDao.getPcsn());
dtl.put("qty_unit_id", plateDao.getQty_unit_id());
dtl.put("qty_unit_name", plateDao.getQty_unit_name());

View File

@@ -1,63 +0,0 @@
package org.nl.wms.pda.sch_manage.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.sch_manage.service.PdaSchTaskService;
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;
/**
* <p>
* 手持任务操作 控制层
* </p>
*
* @author Liuxy
* @since 2025-06-06
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pda/schTask")
@Slf4j
public class PdaSchTaskController {
@Autowired
private PdaSchTaskService pdaSchTaskService;
@PostMapping("/pointTask")
@Log("定点作业")
@SaIgnore
public ResponseEntity<Object> pointTask(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.pointTask(whereJson), HttpStatus.OK);
}
@PostMapping("/queryTask")
@Log("查询未完成的任务")
@SaIgnore
public ResponseEntity<Object> queryTask(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.queryTask(whereJson), HttpStatus.OK);
}
@PostMapping("/againTask")
@Log("重新下发")
@SaIgnore
public ResponseEntity<Object> againTask(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.againTask(whereJson), HttpStatus.OK);
}
@PostMapping("/forceConfirm")
@Log("强制确认")
@SaIgnore
public ResponseEntity<Object> forceConfirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.forceConfirm(whereJson), HttpStatus.OK);
}
}

View File

@@ -1,64 +0,0 @@
package org.nl.wms.pda.sch_manage.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
/**
* <p>
* 手持任务操作 服务类
* </p>
*
* @author Liuxy
* @since 2025-06-06
*/
public interface PdaSchTaskService extends IService<SchBaseTask> {
/**
* 定点任务
* @param whereJson {
* start_point_code起点点位
* end_point_code终点点位
* storagevehicle_code载具编码
* acs_typeacs任务类型
* }
* @return PdaResponse
*/
PdaResponse pointTask(JSONObject whereJson);
/**
* 查询未完成的任务
* @param whereJson {
* task_code: 任务号、载具号、点位号
* }
* @return PdaResponse
*/
PdaResponse queryTask(JSONObject whereJson);
/**
* 重新下发
* @param whereJson {
* task_code任务号
* vehicle_code载具号
* point_code1起点
* point_code2终点
* task_status状态
* }
* @return PdaResponse
*/
PdaResponse againTask(JSONObject whereJson);
/**
* 强制确认
* @param whereJson {
* task_code任务号
* vehicle_code载具号
* point_code1起点
* point_code2终点
* task_status状态
* }
* @return PdaResponse
*/
PdaResponse forceConfirm(JSONObject whereJson);
}

View File

@@ -1,158 +0,0 @@
package org.nl.wms.pda.sch_manage.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.pda.sch_manage.service.PdaSchTaskService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService;
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.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask;
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.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 手持任务操作 实现类
* </p>
*
* @author Liuxy
* @since 2025-06-06
*/
@Service
public class PdaSchTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBaseTask> implements PdaSchTaskService {
/**
* 点位服务
*/
@Autowired
private ISchBasePointService iSchBasePointService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
/**
* 载具信息服务
*/
@Autowired
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
/**
* 手持定点任务服务
*/
@Autowired
private PdaPointTask pdaPointTask;
/**
* 任务工厂服务
*/
@Autowired
private TaskFactory taskFactory;
@Override
@Transactional
public PdaResponse pointTask(JSONObject whereJson) {
// 校验数据
checkPoint(whereJson);
// 创建任务
JSONObject task = new JSONObject();
task.put("config_code", IOSConstant.PDA_POINT_TASK);
task.put("point_code1", whereJson.getString("start_point_code"));
task.put("point_code2", whereJson.getString("end_point_code"));
task.put("vehicle_code", whereJson.getString("storagevehicle_code"));
task.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
pdaPointTask.create(task);
return PdaResponse.requestOk();
}
@Override
public PdaResponse queryTask(JSONObject whereJson) {
return PdaResponse.requestParamOk(this.baseMapper.queryPdaTask(whereJson));
}
@Override
@Transactional
public PdaResponse againTask(JSONObject whereJson) {
// 查询当前任务
SchBaseTask taskDao = this.getOne(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_code, whereJson.getString("task_code"))
);
// 根据任务配置编码获取所属任务类抽象类
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code());
AcsResponse acsResponse = task.sendTaskOne(taskDao.getTask_id());
if (acsResponse.getStatus() != HttpStatus.HTTP_OK) {
throw new BadRequestException(acsResponse.getMessage());
}
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse forceConfirm(JSONObject whereJson) {
// 查询当前任务
SchBaseTask taskDao = this.getOne(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_code, whereJson.getString("task_code"))
);
// 根据任务配置编码获取所属任务类抽象类
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code());
task.forceFinish(taskDao.getTask_code());
return PdaResponse.requestOk();
}
/**
* 校验起点终点载具
* @param whereJson {
* start_point_code起点点位
* end_point_code终点点位
* storagevehicle_code终点点位
* }
*/
private void checkPoint(JSONObject whereJson) {
String start_point_code = whereJson.getString("start_point_code");
String end_point_code = whereJson.getString("end_point_code");
String storagevehicle_code = whereJson.getString("storagevehicle_code");
// 校验起点
SchBasePoint pointStartDao = iSchBasePointService.getById(start_point_code);
if (ObjectUtil.isEmpty(pointStartDao)) {
Structattr attrDao = iStructattrService.getByCode(start_point_code);
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁"));
iStructattrService.updateById(attrDao);
} else {
pointStartDao.setPoint_status(IOSEnum.POINT_STATUS.code("有货"));
iSchBasePointService.updateById(pointStartDao);
}
// 校验终点
SchBasePoint pointEndDao = iSchBasePointService.getById(end_point_code);
if (ObjectUtil.isEmpty(pointEndDao)) {
Structattr attrDao = iStructattrService.getByCode(end_point_code);
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁"));
iStructattrService.updateById(attrDao);
} else {
pointEndDao.setPoint_status(IOSEnum.POINT_STATUS.code("有货"));
iSchBasePointService.updateById(pointEndDao);
}
// 校验载具
iMdPbStoragevehicleinfoService.getByCode(storagevehicle_code);
}
}

View File

@@ -19,7 +19,10 @@ import java.util.Map;
public enum TaskEnum {
// ACS优先级别
ACS_PRIORITY(MapOf.of("1", "1", "2", "2", "3", "3"))
ACS_PRIORITY(MapOf.of("1", "1", "2", "2", "3", "3")),
// 任务类型
TASK_TYPE(MapOf.of("载具", "1", "料箱", "2"))
;
private Map<String, String> code;

View File

@@ -60,6 +60,9 @@ public class SchBaseTask implements Serializable {
private String vehicle_code2;
private String material_id;
private BigDecimal material_qty;
private String handle_status;
@@ -118,9 +121,16 @@ public class SchBaseTask implements Serializable {
private String update_name;
private String update_time;
private String task_type;
@TableField(exist = false)
private String config_name;
@TableField(exist = false)
private String task_name;
@TableField(exist = false)
private String material_name;
}

View File

@@ -3,12 +3,14 @@ package org.nl.wms.sch_manage.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.Param;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* @author lyd
@@ -31,4 +33,14 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
* }
*/
List<JSONObject> queryPdaTask(@Param("param") JSONObject whereJson);
/**
* 获取载具任务
* @param page
* @param whereJson {
* storagevehicle_code
* }
* @return JSONObject
*/
IPage<JSONObject> getVehicleTask(Page<JSONObject> page, @Param("param") Map whereJson);
}

View File

@@ -37,10 +37,12 @@
SELECT
t.*,
tc.config_name,
tc.task_name
tc.task_name,
mb.material_name
FROM
`sch_base_task` t
LEFT JOIN sch_base_taskconfig tc ON tc.config_code = t.config_code
LEFT JOIN md_me_materialbase mb ON mb.material_id = t.material_id
<where>
<if test="whereJson.task_code != null">
AND t.task_code = #{whereJson.task_code}
@@ -102,4 +104,27 @@
</if>
</where>
</select>
<select id="getVehicleTask" resultType="com.alibaba.fastjson.JSONObject">
SELECT
t.*,
tc.config_name,
tc.task_name
FROM
`sch_base_task` t
LEFT JOIN sch_base_taskconfig tc ON tc.config_code = t.config_code
<where>
'5' > t.task_status
and t.task_type = '1'
<if test="param.storagevehicle_code != null">
AND t.vehicle_code LIKE '%${param.storagevehicle_code}%'
</if>
<if test="param.config_code != null">
AND (tc.config_code = #{param.config_code} OR
tc.config_code = 'PdaPointTask')
</if>
</where>
ORDER BY t.create_time DESC
</select>
</mapper>

View File

@@ -147,9 +147,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
case "cancel":
abstractTask.cancel(task_code);
break;
case "back":
abstractTask.backMes(task_code);
break;
default:
break;
}

View File

@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
/**
* @author Liuxy
* @date 2025年05月19
* @date 2025年08月12
* @desc 任务抽象父类申请任务的相关率先判断以及生成接着到子类执行任务的创建最后统一通过定时任务去下发到ACS
*/
@Slf4j
@@ -51,7 +51,6 @@ public abstract class AbstractTask {
/**
* 下发acs前参数整理
*
*/
public abstract AcsTaskDto sendAcsParam(String taskId);
@@ -85,6 +84,7 @@ public abstract class AbstractTask {
/**
* 下发当前任务
*
* @param task_id 任务标识
*/
public AcsResponse sendTaskOne(String task_id) {
@@ -95,6 +95,7 @@ public abstract class AbstractTask {
/**
* 下发任务
*
* @param taskDtoList 任务集合
* @return AcsResponse
*/
@@ -144,8 +145,9 @@ public abstract class AbstractTask {
/**
* 反馈任务状态
*
* @param taskCode 任务编码
* @param status 状态码
* @param status 状态码
*/
public void updateTaskStatus(String taskCode, TaskStatus status) {
this.updateStatus(taskCode, status);
@@ -155,27 +157,30 @@ public abstract class AbstractTask {
* 以下改为public会出现自动注入类出现问题
*
* @param task_code r任务号
* @param status 状态码
* @param status 状态码
*/
protected abstract void updateStatus(String task_code, TaskStatus status);
/**
* 强制结束完成任务
*
* @param task_code 任务号
*/
public abstract void forceFinish(String task_code);
/**
* 取消任务,货物搬回原点
*
* @param task_code 任务号
*/
public abstract void cancel(String task_code);
/**
* 回传mes
* 任务确认(可做特殊处理)
*
* @param task_code 任务号
*/
public abstract void backMes(String task_code);
public abstract void taskConfirm(String task_code);
}

View File

@@ -135,7 +135,7 @@ public class BackInTask extends AbstractTask {
}
@Override
public void backMes(String task_code) {
public void taskConfirm(String task_code) {
}
@Transactional

View File

@@ -3,12 +3,13 @@ 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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;
@@ -27,12 +28,12 @@ import javax.annotation.Resource;
/**
* @Author: Liuxy
* @Description: 入库任务类
* @Date: 2025/5/25
* @Description: 退货入库任务类
* @Date: 2025/8/12
*/
@Component(value = "STInTask")
@TaskType("STInTask")
public class StInTask extends AbstractTask {
@Component(value = "DetainInTask")
@TaskType("DetainInTask")
public class DetainInTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
@@ -46,14 +47,17 @@ public class StInTask extends AbstractTask {
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(json.getString("TaskCode"));
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(json.getString("task_type"));
task.setPoint_code1(json.getString("PickingLocation"));
task.setPoint_code2(json.getString("PlacedLocation"));
task.setConfig_code(DetainInTask.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());
@@ -132,10 +136,6 @@ public class StInTask extends AbstractTask {
}
@Override
public void backMes(String task_code) {
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 任务完成
@@ -151,16 +151,16 @@ public class StInTask extends AbstractTask {
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.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())
.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)
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())
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id())
);
// 更新任务状态
@@ -168,4 +168,8 @@ public class StInTask extends AbstractTask {
taskObj.setRemark("已取消");
taskService.updateById(taskObj);
}
@Override
public void taskConfirm(String task_code) {
}
}

View File

@@ -10,8 +10,11 @@ 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;
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.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
@@ -22,10 +25,15 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* @Author: Liuxy
* @Description: 空载具入库
* @Date: 2025/8/5
* <p>
* 空载具入库任务类
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
@Component(value = "EmpVehicleInTask")
@TaskType("EmpVehicleInTask")
@@ -43,6 +51,12 @@ public class EmpVehicleInTask extends AbstractTask {
@Autowired
private IStructattrService iStructattrService;
/**
* 点位服务
*/
@Resource
private ISchBasePointService iSchBasePointService;
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -55,9 +69,9 @@ public class EmpVehicleInTask extends AbstractTask {
task.setVehicle_code(json.getString("vehicle_code"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setTask_type(TaskEnum.TASK_TYPE.code("载具"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
// task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_name("管理员");
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
@@ -125,22 +139,30 @@ public class EmpVehicleInTask extends AbstractTask {
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
this.cancelTask(taskObj);
}
@Override
public void backMes(String task_code) {
public void taskConfirm(String task_code) {
}
@Transactional
public void finishTask(SchBaseTask taskObj) {
// 更新起点
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getIos_id, null)
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
);
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新任务
taskObj.setRemark("已完成");
@@ -150,6 +172,7 @@ public class EmpVehicleInTask extends AbstractTask {
@Transactional
public void cancelTask(SchBaseTask taskObj) {
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()

View File

@@ -10,8 +10,11 @@ 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;
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.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
@@ -22,10 +25,15 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* @Author: Liuxy
* @Description: 空载具出库
* @Date: 2025/8/5
* <p>
* 空载具出库任务类
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
@Component(value = "EmpVehicleOutTask")
@TaskType("EmpVehicleOutTask")
@@ -43,6 +51,18 @@ public class EmpVehicleOutTask extends AbstractTask {
@Autowired
private IStructattrService iStructattrService;
/**
* 点位服务
*/
@Resource
private ISchBasePointService iSchBasePointService;
/**
* 点对点任务类服务
*/
@Resource
private PdaPointTask pdaPointTask;
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -52,12 +72,13 @@ public class EmpVehicleOutTask extends AbstractTask {
task.setConfig_code(EmpVehicleOutTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setPoint_code3(json.getString("point_code3"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setTask_type(TaskEnum.TASK_TYPE.code("载具"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
// task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_name("管理员");
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
@@ -125,11 +146,11 @@ public class EmpVehicleOutTask extends AbstractTask {
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
this.cancelTask(taskObj);
}
@Override
public void backMes(String task_code) {
public void taskConfirm(String task_code) {
}
@Transactional
@@ -137,15 +158,27 @@ public class EmpVehicleOutTask extends AbstractTask {
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新终点
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空载具"))
);
// 更新任务
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
// 判断point_code3是否有值; 有值需要生成点位点任务到库外站点
if (ObjectUtil.isNotEmpty(taskObj.getPoint_code3())) {
createAgvTask(taskObj);
}
}
@Transactional
@@ -162,4 +195,18 @@ public class EmpVehicleOutTask extends AbstractTask {
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskService.updateById(taskObj);
}
/**
* 生成点位点任务:称重位至库外站点
*
* @param taskObj 任务实体类
*/
private void createAgvTask(SchBaseTask taskObj) {
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", IOSConstant.CZW_POINT);
jsonTask.put("point_code2", taskObj.getPoint_code3());
jsonTask.put("vehicle_code", taskObj.getVehicle_code());
jsonTask.put("task_type", TaskEnum.TASK_TYPE.code("载具"));
pdaPointTask.create(jsonTask);
}
}

View File

@@ -134,7 +134,7 @@ public class MoveTask extends AbstractTask {
}
@Override
public void backMes(String task_code) {
public void taskConfirm(String task_code) {
}
@Transactional

View File

@@ -10,6 +10,7 @@ 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;
@@ -23,6 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* @Author: Liuxy
* @Description: 手持定点任务
@@ -41,13 +44,13 @@ public class PdaPointTask extends AbstractTask {
/**
* 点位服务
*/
@Autowired
@Resource
private ISchBasePointService iSchBasePointService;
/**
* 仓位服务
*/
@Autowired
@Resource
private IStructattrService iStructattrService;
@Override
@@ -56,10 +59,14 @@ public class PdaPointTask extends AbstractTask {
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(json.getString("config_code"));
task.setConfig_code(PdaPointTask.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.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.setCreate_id(SecurityUtils.getCurrentUserId());
@@ -135,7 +142,7 @@ public class PdaPointTask extends AbstractTask {
}
@Override
public void backMes(String task_code) {
public void taskConfirm(String task_code) {
}
@Transactional
@@ -145,14 +152,12 @@ public class PdaPointTask extends AbstractTask {
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getIos_id, null)
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
);
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getTaskdtl_id, null)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新终点
@@ -160,14 +165,15 @@ public class PdaPointTask extends AbstractTask {
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
.set(SchBasePoint::getIos_id, null)
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
.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<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
.set(Structattr::getTaskdtl_id, null)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新任务

View File

@@ -127,7 +127,7 @@ public class StOutTask extends AbstractTask {
}
@Override
public void backMes(String task_code) {
public void taskConfirm(String task_code) {
}
@Transactional(rollbackFor = Exception.class)

View File

@@ -1,6 +1,5 @@
package org.nl.wms.warehouse_management.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -8,7 +7,6 @@ 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.IRawAssistIStorService;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -17,8 +15,8 @@ import javax.annotation.Resource;
import java.util.Map;
/**
* @author dsh
* 2025/5/19
* @author Liuxy
* 2025/8/12
*/
@RestController
@RequiredArgsConstructor

View File

@@ -0,0 +1,50 @@
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.VehicleInService;
import org.nl.wms.warehouse_management.service.dto.MoreOrLessInsertDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* <p>
* 空载具入库 控制层
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/vehicleIn")
@Slf4j
public class VehicleInController {
@Autowired
private VehicleInService vehicleInService;
@GetMapping
@Log("获取载具任务信息")
public ResponseEntity<Object> queryAll(@RequestParam Map whereJson, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(vehicleInService.queryAll(whereJson, page)), HttpStatus.OK);
}
@PostMapping
@Log("新增载具入库")
public ResponseEntity<Object> create(@Validated @RequestBody JSONObject whereJson) {
vehicleInService.create(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);
}
}

View File

@@ -0,0 +1,49 @@
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.VehicleOutService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* <p>
* 空载具出库 控制层
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/vehicleOut")
@Slf4j
public class VehicleOutController {
@Autowired
private VehicleOutService vehicleOutService;
@GetMapping
@Log("获取载具任务信息")
public ResponseEntity<Object> queryAll(@RequestParam Map whereJson, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(vehicleOutService.queryAll(whereJson, page)), HttpStatus.OK);
}
@PostMapping
@Log("新增载具出库")
public ResponseEntity<Object> create(@Validated @RequestBody JSONObject whereJson) {
vehicleOutService.create(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);
}
}

View File

@@ -80,4 +80,9 @@ public class IOSConstant {
* 主存区编码
*/
public final static String SECT_CODE = "ZC01";
/**
* 称重位
*/
public final static String CZW_POINT = "CZW01";
}

View File

@@ -30,11 +30,16 @@ public enum IOSEnum {
// 入库业务类型
BILL_TYPE(MapOf.of("生产入库","0001", "手工入库", "0009")),
// 入库任务配置类编码
IN_CONFIG_CODE(MapOf.of("0001","DetainInTask", "0002", "BackInTask",
"0003", "GeBoxInTask", "0004", "PieceBoxInTask", "0009", "HandInTask"
)),
//入库分配明细状态
INBILL_DIS_STATUS(MapOf.of("未生成", "00", "生成", "01", "执行中", "02", "完成", "99")),
//组盘记录状态
GROUP_PLATE_STATUS(MapOf.of("生成", "00", "组盘", "01", "入库", "02", "出库", "03")),
GROUP_PLATE_STATUS(MapOf.of( "组盘", "1", "入库", "2", "出库", "3")),
// 锁类型
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2"
@@ -51,7 +56,7 @@ public enum IOSEnum {
, "大料架(长边)", "03")),
// 点位状态
POINT_STATUS(MapOf.of("无货", "1", "", "2" )),
POINT_STATUS(MapOf.of("空位", "1", "箱有料", "2", "空载具", "3" )),
// 单据创建类型
CREATE_MODE(MapOf.of("PC产生", "1", "终端产生", "2", "外部接口产生", "3")),

View File

@@ -4,8 +4,11 @@ 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.basedata_manage.service.dao.MdCsSupplierbase;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -15,21 +18,67 @@ import java.util.Set;
* </p>
*
* @author Liuxy
* @since 2025-05-23
* @since 2025-08-11
*/
public interface IMdPbGroupplateService extends IService<GroupPlate> {
/**
* 分页查询
*
* @param whereJson : {查询参数}
* @param page : 分页对象
* @param page : 分页对象
* @return 返回结果
*/
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
/**
* 新增组盘记录
*
* @param dto 组盘记录实体类
*/
void create(GroupPlate dto);
/**
* 修改组盘记录
*
* @param dto 组盘记录实体类
*/
void update(GroupPlate dto);
/**
* 查询物料信息
*
* @param whereJson {
* material_code
* }
* @return MdMeMaterialbase
*/
MdMeMaterialbase queryMater(JSONObject whereJson);
/**
* 校验载具
*
* @param whereJson {
* storagevehicle_code
* }
*/
void checkVehicle(JSONObject whereJson);
/**
* 获取供应商信息
*
* @param whereJson {
* <p>
* }
* @return List<MdCsSupplierbase>
*/
List<MdCsSupplierbase> querySupp(JSONObject whereJson);
/**
* 删除组盘
*
* @param ids 标识集合
*/
void delete(Set<String> ids);
}

View File

@@ -1,6 +1,5 @@
package org.nl.wms.warehouse_management.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -8,17 +7,15 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author dsh
* 2025/5/19
* @author Liuxy
* 2025/8/12
*/
public interface IRawAssistIStorService extends IService<IOStorInv> {
/**
@@ -30,29 +27,125 @@ public interface IRawAssistIStorService extends IService<IOStorInv> {
*/
IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page);
IPage<GroupPlateDto> getBillDtl(Map whereJson, PageQuery page);
/**
* 获取组盘信息
*
* @param whereJson {
* <p>
* }
* @param page 分页条件
* @return JSONObject
*/
IPage<JSONObject> getBillDtl(Map whereJson, PageQuery page);
/**
* 新增入库单
*
* @param whereJson {
* <p>
* }
* @return String
*/
String insertDtl(Map whereJson);
/**
* 删除单据
*
* @param ids 、
*/
void deleteAll(String[] ids);
/**
* 编辑单据
*
* @param whereJson {
* <p>
* }
*/
void update(Map whereJson);
/**
* 获取单据明细
*
* @param whereJson {
* <p>
* }
* @return List<IOStorInvDtlDto>
*/
List<IOStorInvDtlDto> getIODtl(Map whereJson);
/**
* 分配仓位
*
* @param whereJson {
* <p>
* }
*/
void divStruct(Map whereJson);
/**
* 取消分配
*
* @param whereJson {
* <p>
* }
*/
void unDivStruct(Map whereJson);
/**
* 设置站带你
*
* @param whereJson {
* <p>
* }
*/
void divPoint(Map whereJson);
/**
* 强制确认
*
* @param whereJson {
* <p>
* }
*/
void confirm(Map whereJson);
/**
* 任务确认
*
* @param task {
* <p>
* }
*/
void taskFinish(SchBaseTask task);
/**
* 获取分配明细
*
* @param whereJson {
* <p>
* }
* @return List<IOStorInvDisDto>
*/
List<IOStorInvDisDto> getDisDtl(Map whereJson);
/**
* 分配规则
*
* @param whereJson {
* <p>
* }
* @return Structattr
*/
Structattr autoDis(JSONObject whereJson);
/**
* 查询详细信息
*
* @param whereJson {
* <p>
* }
* @return List<IOStorInvDisDto>
*/
List<IOStorInvDisDto> getInBillTaskDtl(Map whereJson);
}

View File

@@ -0,0 +1,38 @@
package org.nl.wms.warehouse_management.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import java.util.Map;
/**
* <p>
* 空载具入库 服务类
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
public interface VehicleInService {
/**
* 分页查询
*
* @param whereJson : {查询参数}
* @param page : 分页对象
* @return 返回结果
*/
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
/**
* 新增载具入库
*
* @param whereJson {
* storagevehicle_code: 载具编码
* point_code: 入库点位
* sect_code: 库区编码
* }
*/
void create(JSONObject whereJson);
}

View File

@@ -0,0 +1,37 @@
package org.nl.wms.warehouse_management.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import java.util.Map;
/**
* <p>
* 空载具出库 服务类
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
public interface VehicleOutService {
/**
* 分页查询
*
* @param whereJson : {查询参数}
* @param page : 分页对象
* @return 返回结果
*/
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
/**
* 新增载具出库
*
* @param whereJson {
* point_code: 出库点位
* sect_code: 库区编码
* }
*/
void create(JSONObject whereJson);
}

View File

@@ -8,8 +8,8 @@ import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author dsh
* 2025/5/20
* @author Liuxy
* 2025/8/11
*/
@Data
@TableName("md_pb_groupplate")
@@ -28,7 +28,7 @@ public class GroupPlate implements Serializable {
private String storagevehicle_code;
/**
* 物料标识
* 物料编码
*/
private String material_id;
@@ -58,10 +58,48 @@ public class GroupPlate implements Serializable {
private String remark;
/**
* 状态 01组盘 02入库 03出库
* 状态
* 1-组盘 2-入库 3-出库
*/
private String status;
/**
* 供应商编码
*/
private String supp_code;
/**
* 有效日期
*/
private String quality_time;
/**
* 生产日期
*/
private String produce_time;
/**
* 执行标准
*/
private String execution_stand;
/**
* 烘干次数
*/
private Integer bake_num;
/**
* 品质类型
* 1-待检2-合格3-不合格
*/
private String quality_type;
/**
* 料箱类型
* 1-大料箱2-小料箱
*/
private String box_type;
/**
* 组盘人
*/
@@ -76,19 +114,4 @@ public class GroupPlate implements Serializable {
* 组盘时间
*/
private String create_time;
/**
* 来源单据号
*/
private String ext_code;
/**
* 来源单据类型
*/
private String ext_type;
/**
* 监区A1/A2/A3/A4/A5/A6/A7/A9/A10/A11/A12/A14
*/
private String prison_area;
}

View File

@@ -1,12 +1,12 @@
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 org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import java.util.List;
@@ -21,7 +21,7 @@ public interface IOStorInvMapper extends BaseMapper<IOStorInv> {
IPage<IOStorInv> queryAllByPage (IPage<IOStorInv> page,@Param("params") Map whereJson);
IPage<GroupPlateDto> getGroupPlate (IPage<GroupPlateDto> page, @Param("params") Map whereJson);
IPage<JSONObject> getGroupPlate (IPage<GroupPlateDto> page, @Param("params") Map whereJson);
List<IOStorInvDtlDto> getIODtl (@Param("params") Map whereJson);

View File

@@ -47,26 +47,22 @@
ORDER BY ios.iostorinv_id Desc
</select>
<select id="getGroupPlate" resultType="org.nl.wms.warehouse_management.service.dto.GroupPlateDto">
<select id="getGroupPlate" resultType="com.alibaba.fastjson.JSONObject">
SELECT
MAX(group_id) as group_id,
storagevehicle_code,
gp.material_id,pcsn,
MAX(gp.qty_unit_id) as qty_unit_id,
MAX(gp.qty_unit_name) as qty_unit_name,
SUM(qty) as qty,
SUM(qty) as plan_qty,
MAX(remark),MAX(`status`),
MAX(ext_code) as ext_code,
MAX(ext_type) as ext_type,
gp.*,
gp.qty AS plan_qty,
mtl.material_id,
mtl.material_code,
mtl.material_name,
MAX(gp.prison_area) AS prison_area
mtl.material_spec,
supp.supp_name
FROM
md_pb_groupplate gp
LEFT JOIN md_me_materialbase mtl ON gp.material_id = mtl.material_id
LEFT JOIN md_cs_supplierbase supp ON supp.supp_code = gp.supp_code
<where>
gp.status = '01'
gp.status = '1'
<if test="params.material_code != null">
AND
mtl.material_code LIKE CONCAT('%', #{params.material_code}, '%')
@@ -88,7 +84,7 @@
gp.create_time &lt;= #{params.end_time}
</if>
</where>
GROUP by storagevehicle_code,gp.material_id,pcsn
ORDER BY gp.create_time DESC
</select>
<select id="getIODtl" resultType="org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto">
@@ -96,11 +92,15 @@
dtl.*,
mb.material_code,
mb.material_name,
mst.bill_code
mb.material_spec,
mst.bill_code,
late.storagevehicle_code
FROM
st_ivt_iostorinvdtl dtl
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dtl.iostorinv_id
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dtl.iostorinv_id
LEFT JOIN md_pb_groupplate late ON mb.material_id = late.material_id
AND dtl.pcsn = late.pcsn AND late.status = '1'
where
1=1
<if test="params.bill_code != null and params.bill_code != ''">

View File

@@ -20,6 +20,11 @@ public class IOStorInvDtlDto extends IOStorInvDtl {
*/
private String material_name;
/**
* 物料批次
*/
private String material_spec;
/**
* 单据编号
*/

View File

@@ -1,16 +1,34 @@
package org.nl.wms.warehouse_management.service.impl;
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.service.IMdCsSupplierbaseService;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService;
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.MdMeMaterialbase;
import org.nl.wms.basedata_manage.service.dao.MdPbMeasureunit;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
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.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -20,17 +38,100 @@ import java.util.Set;
* </p>
*
* @author Liuxy
* @since 2025-05-23
* @since 2025-08-11
*/
@Service
public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper, GroupPlate> implements IMdPbGroupplateService {
/**
* 物料服务
*/
@Autowired
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
/**
* 载具服务
*/
@Autowired
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
/**
* 供应商服务
*/
@Autowired
private IMdCsSupplierbaseService iMdCsSupplierbaseService;
/**
* 计量单位服务
*/
@Autowired
private IMdPbMeasureunitService iMdPbMeasureunitService;
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
whereJson);
}
@Override
@Transactional
public void create(GroupPlate dto) {
// 校验此载具是否已经组盘
List<GroupPlate> groupList = this.list(
new QueryWrapper<GroupPlate>().lambda()
.in(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"),
IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.eq(GroupPlate::getStoragevehicle_code, dto.getStoragevehicle_code())
);
if (ObjectUtil.isNotEmpty(groupList)) {
throw new BadRequestException("当前载具已经组盘【" + dto.getStoragevehicle_code() + "");
}
dto.setGroup_id(IdUtil.getStringId());
// 计量单位默认重量KG
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode("KG");
dto.setQty_unit_id(unitDao.getMeasure_unit_id());
dto.setQty_unit_name(unitDao.getUnit_name());
// 状态默认组盘
dto.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
dto.setQuality_time(dto.getQuality_time().substring(0,10));
dto.setProduce_time(dto.getProduce_time().substring(0,10));
dto.setCreate_id(SecurityUtils.getCurrentUserId());
dto.setCreate_name(SecurityUtils.getCurrentNickName());
dto.setCreate_time(DateUtil.now());
this.save(dto);
}
@Override
@Transactional
public void update(GroupPlate dto) {
dto.setQuality_time(dto.getQuality_time().substring(0,10));
dto.setProduce_time(dto.getProduce_time().substring(0,10));
this.updateById(dto);
}
@Override
public MdMeMaterialbase queryMater(JSONObject whereJson) {
return iMdMeMaterialbaseService.getByCode(whereJson.getString("material_code"));
}
@Override
public void checkVehicle(JSONObject whereJson) {
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code"));
if (ObjectUtil.isEmpty(vehicleDao)) {
throw new BadRequestException("此载具不存在【" + whereJson.getString("storagevehicle_code") + "");
}
}
@Override
public List<MdCsSupplierbase> querySupp(JSONObject whereJson) {
return iMdCsSupplierbaseService.list(
new QueryWrapper<MdCsSupplierbase>().lambda()
.eq(MdCsSupplierbase::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(MdCsSupplierbase::getIs_used, IOSConstant.IS_DELETE_YES)
);
}
@Override
@Transactional
public void delete(Set<String> ids) {

View File

@@ -2,7 +2,6 @@ package org.nl.wms.warehouse_management.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
@@ -24,8 +23,6 @@ import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.sch_manage.enums.TaskStatus;
@@ -33,7 +30,6 @@ 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.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.util.tasks.StInTask;
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
@@ -48,7 +44,6 @@ import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -360,10 +355,6 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
queryDtl.put("unassign_flag", BaseDataEnum.IS_YES_NOT.code(""));
queryDtl.put("iostorinv_id", iostorinv_id);
List<IOStorInvDtlDto> dtls = ioStorInvMapper.getIODtl(queryDtl);
// List<IOStorInvDtl> dtls = ioStorInvDtlMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDtl.class)
// .le(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("分配完"))
// .gt(IOStorInvDtl::getUnassign_qty,0)
// .eq(IOStorInvDtl::getIostorinv_id, iostorinv_id));
if (ObjectUtil.isEmpty(dtls)) {
throw new BadRequestException("当前订单无可分配出库明细");
}
@@ -1137,7 +1128,6 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn())
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())
.eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code())
);
}
@@ -1223,7 +1213,6 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn())
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())
.eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code())
);
}

View File

@@ -5,10 +5,11 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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 com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -17,8 +18,6 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
@@ -27,11 +26,11 @@ import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleinfoMapper;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
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.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.tasks.StInTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
@@ -43,52 +42,82 @@ import org.nl.wms.warehouse_management.service.dao.mapper.GroupPlateMapper;
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.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_management.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.springframework.data.domain.Pageable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author dsh
* 2025/5/19
* @author Liuxy
* 2025/8/12
*/
@Service
public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> implements IRawAssistIStorService {
/**
* 主表mapper
*/
@Resource
private IOStorInvMapper ioStorInvMapper;
/**
* 仓库服务
*/
@Resource
private IBsrealStorattrService iBsrealStorattrService;
/**
* 仓位服务
*/
@Resource
private IStructattrService iStructattrService;
/**
* 明细mapper
*/
@Resource
private IOStorInvDtlMapper ioStorInvDtlMapper;
/**
* 分配明细mapper
*/
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
/**
* 载具服务
*/
@Resource
private MdPbStoragevehicleinfoMapper mdPbStoragevehicleinfoMapper;
@Resource
private SchBasePointMapper schBasePointMapper;
/**
* 载具扩展信息服务
*/
@Resource
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
/**
* 组盘记录服务
*/
@Resource
private GroupPlateMapper groupPlateMapper;
/**
* 任务工厂服务
*/
@Autowired
private TaskFactory taskFactory;
/**
* 任务服务
*/
@Autowired
private ISchBaseTaskService iSchBaseTaskService;
@Override
public IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page) {
HashMap<String, String> map = new HashMap<>();
@@ -114,7 +143,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
String[] s = pcsn.split(" ");
String pcsn_in = String.join("','", Arrays.asList(s));
map.put("pcsn_in", "('"+pcsn_in+"')");
map.put("pcsn_in", "('" + pcsn_in + "')");
} else {
map.put("pcsn", "%" + pcsn + "%");
}
@@ -129,12 +158,12 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
if (!StrUtil.isEmpty(end_time)) {
map.put("end_time", end_time);
}
return ioStorInvMapper.queryAllByPage(new Page<>(page.getPage()+1, page.getSize()), map);
return ioStorInvMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), map);
}
@Override
public IPage<GroupPlateDto> getBillDtl(Map whereJson, PageQuery page) {
return ioStorInvMapper.getGroupPlate(new Page<>(page.getPage()+1,page.getSize()),whereJson);
public IPage<JSONObject> getBillDtl(Map whereJson, PageQuery page) {
return ioStorInvMapper.getGroupPlate(new Page<>(page.getPage() + 1, page.getSize()), whereJson);
}
@Override
@@ -181,23 +210,23 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
HashMap<String, Object> row = rows.get(i);
JSONObject ioStorInvDtl = new JSONObject();
ioStorInvDtl.putAll(row);
ioStorInvDtl.put("iostorinvdtl_id",IdUtil.getStringId());
ioStorInvDtl.put("iostorinv_id",iostorinv_id);
ioStorInvDtl.put("seq_no",(i + 1)+"");
ioStorInvDtl.put("material_id",row.get("material_id"));
ioStorInvDtl.put("Pcsn",row.get("pcsn"));
ioStorInvDtl.put("bill_status",IOSEnum.BILL_STATUS.code("生成"));
ioStorInvDtl.put("qty_unit_id",row.get("qty_unit_id"));
ioStorInvDtl.put("qty_unit_name",row.get("qty_unit_name"));
ioStorInvDtl.put("source_bill_type",row.get("ext_type"));
ioStorInvDtl.put("source_bill_code",row.get("ext_code"));
ioStorInvDtl.put("assign_qty","0");
ioStorInvDtl.put("unassign_qty",row.get("plan_qty"));
ioStorInvDtl.put("plan_qty",row.get("plan_qty"));
ioStorInvDtl.put("iostorinvdtl_id", IdUtil.getStringId());
ioStorInvDtl.put("iostorinv_id", iostorinv_id);
ioStorInvDtl.put("seq_no", (i + 1) + "");
ioStorInvDtl.put("material_id", row.get("material_id"));
ioStorInvDtl.put("Pcsn", row.get("pcsn"));
ioStorInvDtl.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
ioStorInvDtl.put("qty_unit_id", row.get("qty_unit_id"));
ioStorInvDtl.put("qty_unit_name", row.get("qty_unit_name"));
ioStorInvDtl.put("source_bill_type", row.get("ext_type"));
ioStorInvDtl.put("source_bill_code", row.get("ext_code"));
ioStorInvDtl.put("assign_qty", "0");
ioStorInvDtl.put("unassign_qty", row.get("plan_qty"));
ioStorInvDtl.put("plan_qty", row.get("plan_qty"));
total_qty += Double.parseDouble(row.get("qty").toString());
//判断该载具编号是否已经存在库内
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class).eq(Structattr::getStoragevehicle_code,row.get("storagevehicle_code")));
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class).eq(Structattr::getStoragevehicle_code, row.get("storagevehicle_code")));
if (ObjectUtil.isNotEmpty(structattr)) {
throw new BadRequestException("载具编码:" + row.get("storagevehicle_code") + "已存在库内,请对数据进行核实!");
}
@@ -260,45 +289,45 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
String now = DateUtil.now();
JSONObject iostorinv_json = new JSONObject();
iostorinv_json.put("iostorinv_id",iostorinv_id);
iostorinv_json.put("stor_id",whereJson.get("stor_id"));
iostorinv_json.put("stor_code",whereJson.get("stor_code"));
iostorinv_json.put("stor_name",whereJson.get("stor_name"));
iostorinv_json.put("total_qty",whereJson.get("total_qty"));
iostorinv_json.put("detail_count",whereJson.get("detail_count"));
iostorinv_json.put("biz_date",whereJson.get("biz_date"));
iostorinv_json.put("bill_type",whereJson.get("bill_type"));
iostorinv_json.put("remark",whereJson.get("remark"));
iostorinv_json.put("update_optid",currentUserId);
iostorinv_json.put("update_optname",nickName);
iostorinv_json.put("update_time",now);
iostorinv_json.put("iostorinv_id", iostorinv_id);
iostorinv_json.put("stor_id", whereJson.get("stor_id"));
iostorinv_json.put("stor_code", whereJson.get("stor_code"));
iostorinv_json.put("stor_name", whereJson.get("stor_name"));
iostorinv_json.put("total_qty", whereJson.get("total_qty"));
iostorinv_json.put("detail_count", whereJson.get("detail_count"));
iostorinv_json.put("biz_date", whereJson.get("biz_date"));
iostorinv_json.put("bill_type", whereJson.get("bill_type"));
iostorinv_json.put("remark", whereJson.get("remark"));
iostorinv_json.put("update_optid", currentUserId);
iostorinv_json.put("update_optname", nickName);
iostorinv_json.put("update_time", now);
ioStorInvMapper.updateById(iostorinv_json.toJavaObject(IOStorInv.class));
//先删除该单据下的所有明细
ioStorInvDtlMapper.delete(new LambdaQueryWrapper<>(IOStorInvDtl.class).eq(IOStorInvDtl::getIostorinv_id,iostorinv_id));
ioStorInvDtlMapper.delete(new LambdaQueryWrapper<>(IOStorInvDtl.class).eq(IOStorInvDtl::getIostorinv_id, iostorinv_id));
ioStorInvDisMapper.delete(new LambdaQueryWrapper<>(IOStorInvDis.class).eq(IOStorInvDis::getIostorinv_id,iostorinv_id));
ioStorInvDisMapper.delete(new LambdaQueryWrapper<>(IOStorInvDis.class).eq(IOStorInvDis::getIostorinv_id, iostorinv_id));
ArrayList<HashMap> rows = (ArrayList<HashMap>) whereJson.get("tableData");
for (int i = 0; i < rows.size(); i++) {
HashMap<String, Object> row = rows.get(i);
JSONObject ioStorInvDtl = new JSONObject();
ioStorInvDtl.putAll(row);
ioStorInvDtl.put("iostorinvdtl_id",IdUtil.getStringId());
ioStorInvDtl.put("iostorinv_id",iostorinv_id);
ioStorInvDtl.put("seq_no",(i + 1)+"");
ioStorInvDtl.put("material_id",row.get("material_id"));
ioStorInvDtl.put("Pcsn",row.get("pcsn"));
ioStorInvDtl.put("bill_status",IOSEnum.BILL_STATUS.code("生成"));
ioStorInvDtl.put("qty_unit_id",row.get("qty_unit_id"));
ioStorInvDtl.put("qty_unit_name",row.get("qty_unit_name"));
ioStorInvDtl.put("assign_qty",0);
ioStorInvDtl.put("plan_qty",row.get("plan_qty"));
ioStorInvDtl.put("unassign_qty",row.get("qty"));
ioStorInvDtl.put("iostorinvdtl_id", IdUtil.getStringId());
ioStorInvDtl.put("iostorinv_id", iostorinv_id);
ioStorInvDtl.put("seq_no", (i + 1) + "");
ioStorInvDtl.put("material_id", row.get("material_id"));
ioStorInvDtl.put("Pcsn", row.get("pcsn"));
ioStorInvDtl.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
ioStorInvDtl.put("qty_unit_id", row.get("qty_unit_id"));
ioStorInvDtl.put("qty_unit_name", row.get("qty_unit_name"));
ioStorInvDtl.put("assign_qty", 0);
ioStorInvDtl.put("plan_qty", row.get("plan_qty"));
ioStorInvDtl.put("unassign_qty", row.get("qty"));
//判断该载具编号是否已经存在库内
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class).eq(Structattr::getStoragevehicle_code,row.get("storagevehicle_code")));
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class).eq(Structattr::getStoragevehicle_code, row.get("storagevehicle_code")));
if (ObjectUtil.isNotEmpty(structattr)) {
throw new BadRequestException("载具编码:" + row.get("storagevehicle_code") + "已存在库内,请对数据进行核实!");
}
@@ -348,9 +377,9 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
//判断该分配明细是否已经分配货位
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id"))
.and(wrapper-> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code,"")));
if (ObjectUtil.isEmpty(ioStorInvDis)){
.eq(IOStorInvDis::getIostorinvdis_id, map.get("iostorinvdis_id"))
.and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code, "")));
if (ObjectUtil.isEmpty(ioStorInvDis)) {
throw new BadRequestException("该明细已经分配过货位,无法继续分配!");
}
@@ -367,7 +396,6 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
throw new BadRequestException("请选择需要分配的库区!");
}
if (ObjectUtil.isEmpty(struct)) {
throw new BadRequestException("未查询到适用仓位!");
}
@@ -378,17 +406,6 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
struct_code = struct.getStruct_code();
struct_name = struct.getStruct_name();
} else {
Structattr structattr = iStructattrService.findById(map.get("struct_id"));
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = mdPbStoragevehicleinfoMapper.selectOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class)
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code,map.get("storagevehicle_code"))
);
//判断仓位的长高宽是否能放下载具
if (structattr.getWidth().compareTo(mdPbStoragevehicleinfo.getVehicle_width()) <0 &&
structattr.getHeight().compareTo(mdPbStoragevehicleinfo.getVehicle_height()) <0 &&
structattr.getZdepth().compareTo(mdPbStoragevehicleinfo.getVehicle_long()) <0){
throw new BadRequestException("载具不符合,请检查!");
}
sect_id = map.get("sect_id");
sect_code = map.get("sect_code");
sect_name = map.get("sect_name");
@@ -412,31 +429,31 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
lock_map.put("inv_code", ioStorInv.getBill_code());
lock_map.put("inv_type", ioStorInv.getBill_type());
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
iStructattrService.updateStatusByCode("0",lock_map);
iStructattrService.updateStatusByCode("0", lock_map);
// 更新分配明细表
ioStorInvDisMapper.update(dis_map.toJavaObject(IOStorInvDis.class),new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getSect_id,dis_map.getString("sect_id"))
.set(IOStorInvDis::getSect_code,dis_map.getString("sect_code"))
.set(IOStorInvDis::getSect_name,dis_map.getString("sect_name"))
.set(IOStorInvDis::getStruct_id,dis_map.getString("struct_id"))
.set(IOStorInvDis::getStruct_code,dis_map.getString("struct_code"))
.set(IOStorInvDis::getStruct_name,dis_map.getString("struct_name"))
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id"))
ioStorInvDisMapper.update(dis_map.toJavaObject(IOStorInvDis.class), new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getSect_id, dis_map.getString("sect_id"))
.set(IOStorInvDis::getSect_code, dis_map.getString("sect_code"))
.set(IOStorInvDis::getSect_name, dis_map.getString("sect_name"))
.set(IOStorInvDis::getStruct_id, dis_map.getString("struct_id"))
.set(IOStorInvDis::getStruct_code, dis_map.getString("struct_code"))
.set(IOStorInvDis::getStruct_name, dis_map.getString("struct_name"))
.eq(IOStorInvDis::getIostorinvdis_id, map.get("iostorinvdis_id"))
);
//维护单据明细表里 分配数量
JSONObject jsonObject = new JSONObject();
jsonObject.put("iostorinvdtl_id",map.get("iostorinvdtl_id"));
jsonObject.put("bill_status",IOSEnum.BILL_STATUS.code("分配完"));
jsonObject.put("assign_qty",map.get("plan_qty"));
jsonObject.put("unassign_qty","0");
jsonObject.put("iostorinvdtl_id", map.get("iostorinvdtl_id"));
jsonObject.put("bill_status", IOSEnum.BILL_STATUS.code("分配完"));
jsonObject.put("assign_qty", map.get("plan_qty"));
jsonObject.put("unassign_qty", "0");
ioStorInvDtlMapper.updateById(jsonObject.toJavaObject(IOStorInvDtl.class));
//根据单据标识判断分配明细是否都已经分配完成
int disCount = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinv_id,map.get("iostorinv_id"))
.and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code,"")));
.eq(IOStorInvDis::getIostorinv_id, map.get("iostorinv_id"))
.and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code, "")));
// 根据分配货位情况 更新主表单据状态
IOStorInv ios = new IOStorInv();
@@ -444,7 +461,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
ios.setUpdate_optid(currentUserId);
ios.setUpdate_optname(nickName);
ios.setUpdate_time(now);
ios.setBill_status(disCount>0 ? IOSEnum.BILL_STATUS.code("分配中") : IOSEnum.BILL_STATUS.code("分配完"));
ios.setBill_status(disCount > 0 ? IOSEnum.BILL_STATUS.code("分配中") : IOSEnum.BILL_STATUS.code("分配完"));
ioStorInvMapper.updateById(ios);
}
@@ -465,31 +482,31 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
unlock_map.put("inv_type", null);
unlock_map.put("inv_id", null);
unlock_map.put("inv_code", null);
iStructattrService.updateStatusByCode("2",unlock_map);
iStructattrService.updateStatusByCode("2", unlock_map);
// 修改分配明细表
ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getSect_id,null)
.set(IOStorInvDis::getSect_code,null)
.set(IOStorInvDis::getSect_name,null)
.set(IOStorInvDis::getStruct_id,null)
.set(IOStorInvDis::getStruct_code,null)
.set(IOStorInvDis::getStruct_name,null)
.eq(IOStorInvDis::getIostorinvdis_id,jo.get("iostorinvdis_id"))
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getSect_id, null)
.set(IOStorInvDis::getSect_code, null)
.set(IOStorInvDis::getSect_name, null)
.set(IOStorInvDis::getStruct_id, null)
.set(IOStorInvDis::getStruct_code, null)
.set(IOStorInvDis::getStruct_name, null)
.eq(IOStorInvDis::getIostorinvdis_id, jo.get("iostorinvdis_id"))
);
//维护单据明细表里 分配数量
JSONObject jsonObject = new JSONObject();
jsonObject.put("iostorinvdtl_id",jo.get("iostorinvdtl_id"));
jsonObject.put("bill_status",IOSEnum.BILL_STATUS.code("生成"));
jsonObject.put("assign_qty","0");
jsonObject.put("unassign_qty",jo.get("plan_qty"));
jsonObject.put("iostorinvdtl_id", jo.get("iostorinvdtl_id"));
jsonObject.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
jsonObject.put("assign_qty", "0");
jsonObject.put("unassign_qty", jo.get("plan_qty"));
ioStorInvDtlMapper.updateById(jsonObject.toJavaObject(IOStorInvDtl.class));
//根据单据标识判断分配明细是否都已经分配完成
int disCount = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinv_id,jo.get("iostorinv_id"))
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code,"")));
.eq(IOStorInvDis::getIostorinv_id, jo.get("iostorinv_id"))
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code, "")));
// 根据分配货位情况 更新主表单据状态
IOStorInv ios = new IOStorInv();
@@ -497,7 +514,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
ios.setUpdate_optid(currentUserId);
ios.setUpdate_optname(nickName);
ios.setUpdate_time(now);
ios.setBill_status(disCount>0 ? IOSEnum.BILL_STATUS.code("分配中") : IOSEnum.BILL_STATUS.code("生成"));
ios.setBill_status(disCount > 0 ? IOSEnum.BILL_STATUS.code("分配中") : IOSEnum.BILL_STATUS.code("生成"));
ioStorInvMapper.updateById(ios);
}
@@ -510,27 +527,25 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
//判断是否已经分配好货位
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id"))
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code,"")));
if (ObjectUtil.isEmpty(ioStorInvDis)){
.eq(IOStorInvDis::getIostorinvdis_id, map.get("iostorinvdis_id"))
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code, "")));
if (ObjectUtil.isEmpty(ioStorInvDis)) {
throw new BadRequestException("该明细还没分配货位,请先分配货位");
}
//创建任务
JSONObject task_form = new JSONObject();
task_form.put("task_type", "STInTask");
task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE"));
task_form.put("PickingLocation", point_code);
task_form.put("PlacedLocation", ioStorInvDis.getStruct_code());
task_form.put("point_code1", point_code);
task_form.put("point_code2", ioStorInvDis.getStruct_code());
task_form.put("vehicle_code", map.get("storagevehicle_code"));
// GroupPlate groupPlate = groupPlateMapper.selectOne(new LambdaQueryWrapper<>(GroupPlate.class)
// .eq(GroupPlate::getStoragevehicle_code,map.get("storagevehicle_code"))
// );
// task_form.put("group_id", groupPlate.getGroup_id());
task_form.put("material_id", ioStorInvDis.getMaterial_id());
task_form.put("material_qty", ioStorInvDis.getPlan_qty());
StInTask stInTask = SpringContextHolder.getBean("STInTask");
String task_id = stInTask.create(task_form);
// 根据任务类创建任务
IOStorInv iosMstDao = ioStorInvMapper.selectById(ioStorInvDis.getIostorinv_id());
AbstractTask task = taskFactory.getTask(IOSEnum.IN_CONFIG_CODE.code(iosMstDao.getBill_type()));
String task_id = task.create(task_form);
//分配明细表更新任务相关数据
IOStorInvDis dis = new IOStorInvDis();
@@ -551,27 +566,27 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
String now = DateUtil.now();
IOStorInv ioStorInv = ioStorInvMapper.selectOne(new LambdaQueryWrapper<>(IOStorInv.class)
.eq(IOStorInv::getIostorinv_id,whereJson.get("iostorinv_id"))
.eq(IOStorInv::getIostorinv_id, whereJson.get("iostorinv_id"))
);
if (ObjectUtil.isNotEmpty(ioStorInv) && !IOSEnum.BILL_STATUS.code("分配完").equals(ioStorInv.getBill_status())){
if (ObjectUtil.isNotEmpty(ioStorInv) && !IOSEnum.BILL_STATUS.code("分配完").equals(ioStorInv.getBill_status())) {
throw new BadRequestException("主表状态必须为分配完!");
}
//解锁原货位点位
List<IOStorInvDis> storInvDisList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinv_id,whereJson.get("iostorinv_id"))
.eq(IOStorInvDis::getIostorinv_id, whereJson.get("iostorinv_id"))
);
for (IOStorInvDis ioStorInvDis: storInvDisList){
if (StrUtil.isNotBlank(ioStorInvDis.getStruct_code())){
for (IOStorInvDis ioStorInvDis : storInvDisList) {
if (StrUtil.isNotBlank(ioStorInvDis.getStruct_code())) {
JSONObject finish_map = new JSONObject();
finish_map.put("struct_code",ioStorInvDis.getStruct_code());
finish_map.put("storagevehicle_code",ioStorInvDis.getStoragevehicle_code());
finish_map.put("struct_code", ioStorInvDis.getStruct_code());
finish_map.put("storagevehicle_code", ioStorInvDis.getStoragevehicle_code());
finish_map.put("inv_type", null);
finish_map.put("inv_id", null);
finish_map.put("inv_code", null);
iStructattrService.updateStatusByCode("1",finish_map);
iStructattrService.updateStatusByCode("1", finish_map);
//修改库存
List<JSONObject> updateIvtList = new ArrayList<>();
@@ -588,36 +603,41 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
}
//更新详情数据
ioStorInvDisMapper.update(ioStorInvDis,new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成"))
.set(IOStorInvDis::getReal_qty,ioStorInvDis.getPlan_qty())
.eq(IOStorInvDis::getIostorinvdis_id,ioStorInvDis.getIostorinvdis_id())
.ne(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成"))
ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
.set(IOStorInvDis::getReal_qty, ioStorInvDis.getPlan_qty())
.eq(IOStorInvDis::getIostorinvdis_id, ioStorInvDis.getIostorinvdis_id())
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
);
ioStorInvDtlMapper.update(new IOStorInvDtl(),new LambdaUpdateWrapper<>(IOStorInvDtl.class)
.set(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("完成"))
.set(IOStorInvDtl::getReal_qty,ioStorInvDis.getPlan_qty())
.eq(IOStorInvDtl::getIostorinvdtl_id,ioStorInvDis.getIostorinvdtl_id())
.ne(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("完成"))
ioStorInvDtlMapper.update(new IOStorInvDtl(), new LambdaUpdateWrapper<>(IOStorInvDtl.class)
.set(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
.set(IOStorInvDtl::getReal_qty, ioStorInvDis.getPlan_qty())
.eq(IOStorInvDtl::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id())
.ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
);
//更新组盘记录表
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn())
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())
.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())
);
// 更新任务完成
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_id, ioStorInvDis.getTask_id())
.set(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
);
}
//更新主表状态
ioStorInvMapper.update(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,whereJson.get("iostorinv_id"))
ioStorInvMapper.update(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, whereJson.get("iostorinv_id"))
);
}
@@ -631,27 +651,27 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
String now = DateUtil.now();
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getTask_id,task.getTask_id())
.eq(IOStorInvDis::getTask_id, task.getTask_id())
);
if (ObjectUtil.isEmpty(ioStorInvDis)){
if (ObjectUtil.isEmpty(ioStorInvDis)) {
throw new BadRequestException("未找到任务对应的分配明细");
}
// 完成当前分配明细
ioStorInvDisMapper.update(ioStorInvDis,new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成"))
.set(IOStorInvDis::getReal_qty,ioStorInvDis.getPlan_qty())
.eq(IOStorInvDis::getIostorinvdis_id,ioStorInvDis.getIostorinvdis_id())
ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
.set(IOStorInvDis::getReal_qty, ioStorInvDis.getPlan_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",ioStorInvDis.getStoragevehicle_code());
finish_map.put("struct_code", ioStorInvDis.getStruct_code());
finish_map.put("storagevehicle_code", ioStorInvDis.getStoragevehicle_code());
finish_map.put("inv_type", null);
finish_map.put("inv_id", null);
finish_map.put("inv_code", null);
iStructattrService.updateStatusByCode("1",finish_map);
iStructattrService.updateStatusByCode("1", finish_map);
//修改库存
List<JSONObject> updateIvtList = new ArrayList<>();
@@ -667,26 +687,25 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
iMdPbStoragevehicleextService.updateIvt(updateIvtList);
//更新组盘记录表
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn())
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())
.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())
);
// 查询该明细下是否还有未完成的分配明细
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinvdtl_id,ioStorInvDis.getIostorinvdtl_id())
.ne(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成"))
.eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id())
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
);
// 明细
IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id());
if (ObjectUtil.isEmpty(ioStorInvDtl)){
if (ObjectUtil.isEmpty(ioStorInvDtl)) {
throw new BadRequestException("未找到明细");
}
// 如果分配明细全部完成则更新明细表状态
if (countDis == 0){
if (countDis == 0) {
// 更新明细表状态
ioStorInvDtl.setReal_qty(ioStorInvDis.getPlan_qty());
ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
@@ -694,19 +713,19 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
// 查看明细是否全部完成
int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class)
.eq(IOStorInvDtl::getIostorinv_id,ioStorInvDtl.getIostorinv_id())
.ne(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("完成"))
.eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
.ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
);
// 如果明细全部完成则更新主表状态
if (countDtl == 0){
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())
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())
);
}
}
@@ -721,43 +740,36 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
@Override
public Structattr autoDis(JSONObject whereJson) {
String sect_id = whereJson.getString("sect_id");
String storagevehicle_code = whereJson.getString("storagevehicle_code");
// 查询载具号是否在库内
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = mdPbStoragevehicleinfoMapper.selectOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class)
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code,storagevehicle_code)
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
);
if (ObjectUtil.isEmpty(mdPbStoragevehicleinfo)){
if (ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) {
throw new BadRequestException("没有该载具号信息");
}
// 查询没有任务的仓位号 并且根据载具类型分配货位
// 金属托盘 - 3 ,小料架 - 4 大料架(短)-1 ,大料架(长) - 2
List<Structattr> structattrList = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_id,sect_id)
.eq(Structattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定"))
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code,""))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("金属托盘"))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("小料架")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("小料架"))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(短边)"))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(长边)"))
List<Structattr> attrList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.eq(Structattr::getStoragevehicle_code, mdPbStoragevehicleinfo.getStoragevehicle_code())
);
if (ObjectUtil.isEmpty(structattrList)){
throw new BadRequestException("该库区没有仓位");
if (ObjectUtil.isNotEmpty(attrList)) {
throw new BadRequestException("该载具已在库内【" + mdPbStoragevehicleinfo.getStoragevehicle_code() + "");
}
// 过滤掉不满足载具长宽高的仓
Structattr structattr = structattrList.stream().filter(st ->
st.getWidth().compareTo(mdPbStoragevehicleinfo.getVehicle_width()) >=0 &&
st.getHeight().compareTo(mdPbStoragevehicleinfo.getVehicle_height()) >=0 &&
st.getZdepth().compareTo(mdPbStoragevehicleinfo.getVehicle_long()) >=0
).findAny().get();
// 根据库区查询对应库
Structattr structattr = iStructattrService.getOne(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)
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, ""))
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isEmpty(structattr)){
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("未找到满足的仓位");
}

View File

@@ -0,0 +1,148 @@
package org.nl.wms.warehouse_management.service.impl;
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.query.QueryWrapper;
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.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleInTask;
import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.VehicleInService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* <p>
* 空载具入库 实现类
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
@Service
public class VehicleInServiceImpl implements VehicleInService {
/**
* 任务服务
*/
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
/**
* 载具服务
*/
@Autowired
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
/**
* 仓位服务
*/
@Resource
private IStructattrService iStructattrService;
/**
* 点对点任务类
*/
@Resource
private PdaPointTask pdaPointTask;
/**
* 空载具入库任务类
*/
@Resource
private EmpVehicleInTask empVehicleInTask;
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
whereJson.put("config_code", EmpVehicleInTask.class.getSimpleName());
return schBaseTaskMapper.getVehicleTask(new Page<>(page.getPage() + 1, page.getSize()), whereJson);
}
@Override
@Transactional
public void create(JSONObject whereJson) {
// 校验载具是否存在
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code"));
if (ObjectUtil.isEmpty(vehicleDao)) {
throw new BadRequestException("载具不存在【"+whereJson.getString("storagevehicle_code")+"");
}
// 判断是否是称重位
if (whereJson.getString("point_code").equals(IOSConstant.CZW_POINT)) {
// 根据库区分配一个仓位
Structattr structattr = autoDivStruct(whereJson);
// 锁定仓位
structattr.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘入库锁"));
iStructattrService.updateById(structattr);
// 创建任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", whereJson.getString("point_code"));
jsonTask.put("point_code2", structattr.getStruct_code());
jsonTask.put("vehicle_code", whereJson.getString("storagevehicle_code") );
empVehicleInTask.create(jsonTask);
} else {
// 生成库外站点至称重位的点位点任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", whereJson.getString("point_code"));
jsonTask.put("point_code2", IOSConstant.CZW_POINT);
jsonTask.put("vehicle_code", whereJson.getString("storagevehicle_code") );
jsonTask.put("task_type", TaskEnum.TASK_TYPE.code("载具"));
jsonTask.put("ext_group_data", whereJson.getString("sect_code"));
pdaPointTask.create(jsonTask);
}
}
/**
* 自动分配空位
* @param whereJson {
* sect_code: 库区编码
* storagevehicle_code: 载具编码
* }
* @return Structattr 仓位实体类
*/
private Structattr autoDivStruct(JSONObject whereJson) {
List<Structattr> attrList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.eq(Structattr::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
);
if (ObjectUtil.isNotEmpty(attrList)) {
throw new BadRequestException("该载具已在库内【" + whereJson.getString("storagevehicle_code") + "");
}
// 根据库区查询对应库位
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_code, whereJson.getString("sect_code"))
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, ""))
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("未找到满足的仓位");
}
return structattr;
}
}

View File

@@ -0,0 +1,106 @@
package org.nl.wms.warehouse_management.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.VehicleOutService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Map;
/**
* <p>
* 空载具出库 实现类
* </p>
*
* @author Liuxy
* @since 2025-08-13
*/
@Service
public class VehicleOutServiceImpl implements VehicleOutService {
/**
* 任务服务
*/
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
/**
* 仓位服务
*/
@Resource
private IStructattrService iStructattrService;
/**
* 空载具入库任务类
*/
@Resource
private EmpVehicleOutTask empVehicleOutTask;
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
whereJson.put("config_code", EmpVehicleOutTask.class.getSimpleName());
return schBaseTaskMapper.getVehicleTask(new Page<>(page.getPage() + 1, page.getSize()), whereJson);
}
@Override
@Transactional
public void create(JSONObject whereJson) {
// 根据库区找空载具
Structattr structattr = autoDivStruct(whereJson);
// 锁定仓位
structattr.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘出库锁"));
iStructattrService.updateById(structattr);
// 创建任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", structattr.getStruct_code());
jsonTask.put("point_code2", IOSConstant.CZW_POINT);
// 判断终点是否是称重位
jsonTask.put("point_code3", whereJson.getString("point_code").equals(IOSConstant.CZW_POINT)
? "" : whereJson.getString("point_code")
);
jsonTask.put("vehicle_code", structattr.getStoragevehicle_code());
empVehicleOutTask.create(jsonTask);
}
/**
* 自动分配空位
*
* @param whereJson {
* sect_code: 库区编码
* }
* @return Structattr 仓位实体类
*/
private Structattr autoDivStruct(JSONObject whereJson) {
// 根据库区查询对应载具
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_code, whereJson.getString("sect_code"))
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.eq(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES)
.and(wrapper -> wrapper.isNotNull(Structattr::getStoragevehicle_code).or().ne(Structattr::getStoragevehicle_code, ""))
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("未找到满足的仓位");
}
return structattr;
}
}