rev:优化修改

This commit is contained in:
2025-10-21 14:33:15 +08:00
parent 13dcfda0f7
commit ff45d87bb8
25 changed files with 627 additions and 43 deletions

View File

@@ -1,5 +1,6 @@
package org.nl.wms.basedata_manage.service.dao;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -129,4 +130,10 @@ public class MdPbStoragevehicleinfo implements Serializable {
*/
private String ext_id;
/**
* 料箱类型(手持返回前端使用)
*/
@TableField(exist = false)
private String box_type;
}

View File

@@ -130,6 +130,19 @@ public class MdPbStoragevehicleextServiceImpl extends ServiceImpl<MdPbStorageveh
break;
}
// 判断是大料箱还是小料箱
if (attrDao.getSect_code().equals(IOSEnum.SECT_CODE.code("大料箱区"))) {
// 更新组盘记录品质类型
iMdPbGroupplateService.update(
new UpdateWrapper<GroupPlate>().lambda()
.set(GroupPlate::getQuality_type, quality_type)
.eq(GroupPlate::getMaterial_id, extDao.getMaterial_id())
.eq(GroupPlate::getStoragevehicle_code, extDao.getStoragevehicle_code())
.eq(GroupPlate::getPcsn, extDao.getPcsn())
);
return;
}
// 分配相同库区且有空托盘的仓位
JSONObject jsonParam = new JSONObject();
jsonParam.put("stor_id", attrDao.getStor_id());
@@ -181,6 +194,7 @@ public class MdPbStoragevehicleextServiceImpl extends ServiceImpl<MdPbStorageveh
*/
private Structattr divStruct(JSONObject jsonParam) {
List<Structattr> attrList = new ArrayList<>();
Structattr structattr = new Structattr();
List<Structattr> vehicleAttrList = iStructattrService.list(
@@ -192,13 +206,13 @@ public class MdPbStoragevehicleextServiceImpl extends ServiceImpl<MdPbStorageveh
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getIs_emptyvehicle, IOSConstant.ONE)
.and(wrapper -> wrapper.isNotNull(Structattr::getStoragevehicle_code).or().ne(Structattr::getStoragevehicle_code, ""))
.orderByAsc(Structattr::getPlacement_type)
.orderByDesc(Structattr::getPlacement_type)
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isNotEmpty(vehicleAttrList)) {
structattr = vehicleAttrList.get(0);
attrList = vehicleAttrList;
} else {
List<Structattr> attrList = iStructattrService.list(
attrList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStor_id, jsonParam.getString("stor_id"))
.eq(Structattr::getSect_code, jsonParam.getString("sectc_code"))
@@ -210,14 +224,56 @@ public class MdPbStoragevehicleextServiceImpl extends ServiceImpl<MdPbStorageveh
.orderByAsc(Structattr::getPlacement_type)
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isNotEmpty(attrList)) {
structattr = attrList.get(0);
}
// 校验
for (Structattr attr : attrList) {
// 判断深浅货位
if (attr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("深货位"))) {
// 判断浅货位是否锁定
Structattr shallowStartAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, attr.getBlock_num())
.eq(Structattr::getCol_num, attr.getCol_num())
.eq(Structattr::getLayer_num, attr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
if (ObjectUtil.isEmpty(shallowStartAttr)) {
throw new BadRequestException("仓位【"+attr.getStruct_code()+"】对应的浅货位不存在!");
}
if (shallowStartAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
structattr = attr;
break;
} else {
continue;
}
} else {
// 浅货位
Structattr shallowStartAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, attr.getBlock_num())
.eq(Structattr::getCol_num, attr.getCol_num())
.eq(Structattr::getLayer_num, attr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("深货位"))
);
if (ObjectUtil.isEmpty(shallowStartAttr)) {
throw new BadRequestException("仓位【"+attr.getStruct_code()+"】对应的深货位不存在!");
}
if (shallowStartAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
structattr = attr;
break;
} else {
continue;
}
}
}
if (ObjectUtil.isEmpty(structattr)) {
if (ObjectUtil.isEmpty(structattr.getStruct_code())) {
throw new BadRequestException("当前库区【" + jsonParam.getString("sectc_code") + "】没有可用仓位");
}
return structattr;
}

View File

@@ -82,4 +82,11 @@ public class PdaGeneralPublicController {
return new ResponseEntity<>(pdaGeneralPublicService.queryVehicleType(), HttpStatus.OK);
}
@PostMapping("/queryNowVehicle")
@Log("查询当前载具类型")
@SaIgnore
public ResponseEntity<Object> queryNowVehicle(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaGeneralPublicService.queryNowVehicle(whereJson), HttpStatus.OK);
}
}

View File

@@ -74,4 +74,13 @@ public interface PdaGeneralPublicService {
* @return PdaResponse
*/
PdaResponse queryVehicleType();
/**
* 查询当前载具类型
* @param whereJson {
* vehicle_code载具编码
* }
* @return PdaResponse
*/
PdaResponse queryNowVehicle(JSONObject whereJson);
}

View File

@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.wms.basedata_manage.service.IMdCsSupplierbaseService;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
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.MdPbStoragevehicleinfo;
import org.nl.wms.pda.general_management.service.PdaGeneralPublicService;
import org.nl.wms.pda.util.PDAEnum;
import org.nl.wms.pda.util.PdaResponse;
@@ -54,6 +56,12 @@ public class PdaGeneralPublicServiceImpl implements PdaGeneralPublicService {
@Autowired
private PdmBomCallMaterialMapper pdmBomCallMaterialMapper;
/**
* 载具信息服务
*/
@Autowired
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
@Override
public PdaResponse queryGroupQuality() {
return PdaResponse.requestParamOk(PDAEnum.QUALITY_TYPE.getDict());
@@ -110,4 +118,16 @@ public class PdaGeneralPublicServiceImpl implements PdaGeneralPublicService {
public PdaResponse queryVehicleType() {
return PdaResponse.requestParamOk(PDAEnum.TASK_TYPE.getDict());
}
@Override
public PdaResponse queryNowVehicle(JSONObject whereJson) {
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, whereJson.getString("vehicle_code"))
);
if (ObjectUtil.isNotEmpty(vehicleDao)) {
vehicleDao.setBox_type(vehicleDao.getStoragevehicle_type());
}
return PdaResponse.requestParamOk(vehicleDao);
}
}

View File

@@ -95,4 +95,18 @@ public class SchBasePointController {
public ResponseEntity<Object> getPointDtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(schBasePointService.getPointDtl(whereJson),HttpStatus.OK);
}
@Log("清载具")
@PostMapping("/cleanVehicle")
public ResponseEntity<Object> cleanVehicle(@RequestBody SchBasePoint dao) {
schBasePointService.cleanVehicle(dao);
return new ResponseEntity<>(HttpStatus.OK);
}
@Log("清物料")
@PostMapping("/cleanMaterial")
public ResponseEntity<Object> cleanMaterial(@RequestBody SchBasePoint dao) {
schBasePointService.cleanMaterial(dao);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -112,4 +112,16 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
* @return
*/
JSONObject getPointDtl(JSONObject whereJson);
/**
* 清载具
* @param dao 实体类
*/
void cleanVehicle(SchBasePoint dao);
/**
* 清物料
* @param dao 实体类
*/
void cleanMaterial(SchBasePoint dao);
}

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
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.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -29,6 +30,8 @@ import org.nl.wms.sch_manage.service.dto.SchBasePointQuery;
import org.nl.wms.sch_manage.service.util.PointUtils;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -59,6 +62,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Autowired
private ISchBaseTaskService iSchBaseTaskService;
@Autowired
private IMdPbGroupplateService iMdPbGroupplateService;
@Override
public IPage<SchBasePoint> queryAll(SchBasePointQuery whereJson, PageQuery page) {
IPage<SchBasePoint> pages = new Page<>(page.getPage() + 1, page.getSize());
@@ -272,4 +278,35 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
public JSONObject getPointDtl(JSONObject whereJson) {
return pointMapper.getPointDtl(whereJson).get(0);
}
@Override
@Transactional
public void cleanVehicle(SchBasePoint dao) {
dao.setVehicle_code("");
dao.setPoint_status(IOSEnum.POINT_STATUS.code("空位"));
dao.setIng_task_code("");
this.updateById(dao);
}
@Override
@Transactional
public void cleanMaterial(SchBasePoint dao) {
if (ObjectUtil.isEmpty(dao.getVehicle_code())) {
throw new BadRequestException("点位载具编码不能为空!");
}
// 查询组盘信息
GroupPlate plateDao = iMdPbGroupplateService.getOne(
new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getStoragevehicle_code, dao.getVehicle_code())
);
if (ObjectUtil.isEmpty(plateDao)) {
throw new BadRequestException("当前点位载具信息不存在组盘信息!");
}
iMdPbGroupplateService.removeById(plateDao);
// 更新点位信息
dao.setPoint_status(IOSEnum.POINT_STATUS.code("空载具"));
dao.setIng_task_code("");
this.updateById(dao);
}
}

View File

@@ -197,10 +197,14 @@ public class CheckMoveTask extends AbstractTask {
@Override
public void taskConfirm(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne(
new QueryWrapper<StIvtCheckdtl>().lambda()
.eq(StIvtCheckdtl::getTask_id, taskObj.getTask_id())
);
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.eq(Structattr::getStruct_code, dtlDao.getStruct_code())
.set(Structattr::getStoragevehicle_code, null)
);
// 更新终点
@@ -213,10 +217,6 @@ public class CheckMoveTask extends AbstractTask {
);
// 更新盘点明细状态
StIvtCheckdtl dtlDao = iStIvtCheckdtlService.getOne(
new QueryWrapper<StIvtCheckdtl>().lambda()
.eq(StIvtCheckdtl::getTask_id, taskObj.getTask_id())
);
dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("盘点中"));
iStIvtCheckdtlService.updateById(dtlDao);

View File

@@ -226,7 +226,7 @@ public class CombinedBoxMoveTask extends AbstractTask {
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.eq(Structattr::getStruct_code, dtlDao.getTurnout_struct_code())
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(Structattr::getStoragevehicle_code, null)
);

View File

@@ -74,6 +74,7 @@ public class EmpVehicleOutTask extends AbstractTask {
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setPoint_code3(json.getString("point_code3"));
task.setPoint_code4(json.getString("point_code4"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
@@ -177,7 +178,7 @@ public class EmpVehicleOutTask extends AbstractTask {
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.eq(Structattr::getStruct_code, taskObj.getPoint_code4())
.set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
@@ -203,10 +204,10 @@ public class EmpVehicleOutTask extends AbstractTask {
@Transactional
public void cancelTask(SchBaseTask taskObj) {
// 更新
// 更新
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.eq(Structattr::getStruct_code, taskObj.getPoint_code4())
.set(Structattr::getTaskdtl_id, null)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);

View File

@@ -0,0 +1,191 @@
package org.nl.wms.sch_manage.service.util.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import 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.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.ACSTaskTypeEnum;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 库内移库任务类子任务
* </p>
*
* @author Liuxy
* @since 2025-10-17
*/
@Component(value = "InsideDtlMoveTask")
@TaskType("InsideDtlMoveTask")
public class InsideDtlMoveTask extends AbstractTask {
/**
* 任务服务类
*/
@Autowired
private ISchBaseTaskService taskService;
/**
* 移库主表服务类
*/
@Autowired
private IStIvtMoveinvService iStIvtMoveinvService;
/**
* 库内移库任务类
*/
@Autowired
private InsideMoveTask insideMoveTask;
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(InsideDtlMoveTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setVehicle_code2(json.getString("vehicle_code2"));
task.setGroup_id(json.getString("group_id"));
task.setContact_task(json.getString("contact_task"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setIs_wait(json.getString("is_wait"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
// 下发任务
this.sendTaskOne(task.getTask_id());
return task.getTask_id();
}
@Override
public AcsTaskDto sendAcsParam(String taskId) {
SchBaseTask taskDao = taskService.getById(taskId);
// 组织下发给acs的数据
AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_id(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setIs_wait(IOSConstant.ZERO);
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
acsTaskDto.setIs_get_pause(IOSConstant.ZERO);
acsTaskDto.setIs_put_pause(IOSConstant.ZERO);
return acsTaskDto;
}
@Override
@Transactional
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("该任务已完成!");
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
// 更新明细状态
SchBaseTask dtlTask = taskService.getById(taskObj.getContact_task());
iStIvtMoveinvService.executing(dtlTask);
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) {
this.finishTask(taskObj);
}
if (status.equals(TaskStatus.CANCELED)) {
this.cancelTask(taskObj);
}
}
@Override
@Transactional
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj);
}
@Override
@Transactional
public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj);
}
@Override
public void taskConfirm(String task_code) {
}
@Override
public JSONObject resultWeigh(SchBaseTask taskObj) {
return null;
}
@Transactional
public void finishTask(SchBaseTask taskObj) {
// 更新任务状态
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
// 查询所有任务都是否为完成
List<SchBaseTask> taskList = taskService.list(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getContact_task, taskObj.getContact_task())
);
boolean all_finished = taskList.stream()
.allMatch(row -> row.getTask_status().equals(TaskStatus.FINISHED.getCode()));
if (all_finished) {
insideMoveTask.finishTask(taskService.getById(taskObj.getContact_task()));
}
}
@Transactional
public void cancelTask(SchBaseTask taskObj) {
// 更新任务状态
taskObj.setRemark("已取消");
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskService.updateById(taskObj);
}
}

View File

@@ -82,7 +82,7 @@ public class InsideMoveTask extends AbstractTask {
taskService.save(task);
// 下发任务
this.sendTaskOne(task.getTask_id());
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();
}

View File

@@ -234,7 +234,7 @@ public class PieceBoxMoveTask extends AbstractTask {
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.eq(Structattr::getStruct_code, dtlDao.getTurnout_struct_code())
.set(Structattr::getStoragevehicle_code, null)
);
// 更新终点

View File

@@ -23,6 +23,7 @@ public interface StIvtCheckdtlMapper extends BaseMapper<StIvtCheckdtl> {
*
* @param whereJson {
* check_id 主表标识
* vehicle_code 载具编码
* }
* @return List<JSONObject>
*/

View File

@@ -29,6 +29,10 @@
AND
ios.check_id = #{param.check_id}
</if>
<if test="param.vehicle_code != null and param.vehicle_code != ''">
AND
dtl.storagevehicle_code = #{param.vehicle_code}
</if>
</where>
</select>

View File

@@ -25,7 +25,7 @@
AND
mst.id = #{param.id}
</if>
ORDER BY qty
</where>
</select>
</mapper>

View File

@@ -1157,6 +1157,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
}
@Override
@Transactional
public void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv) {
/*
* 判断是否是深浅货位
@@ -1168,7 +1169,8 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
* 如果不是则报错提示
*/
// 调用校验方法
String struct_code = iOutBillService.checkIsHinder(ioStorInvDis);
String struct_code = ioStorInvDis.getStruct_code();
iOutBillService.checkIsHinder(ioStorInvDis);
//创建任务
JSONObject task_form = new JSONObject();

View File

@@ -210,6 +210,7 @@ public class SelectOutServiceImpl extends ServiceImpl<IOStorInvDtlMapper, IOStor
groupPlate.setProduce_time(oldGroup.getProduce_time());
groupPlate.setExecution_stand(oldGroup.getExecution_stand());
groupPlate.setBake_num(oldGroup.getBake_num());
groupPlate.setOut_type(dto.getBill_type());
groupPlate.setQuality_type(oldGroup.getQuality_type());
iMdPbGroupplateService.create(groupPlate);

View File

@@ -402,7 +402,7 @@ public class StIvtCheckmstServiceImpl extends ServiceImpl<StIvtCheckmstMapper, S
jsonTask.put("vehicle_code2", outAttr.getStoragevehicle_code());
String task_id = moveOutMoveTask.create(jsonTask);
result.put("out_point", shallowAttr.getStruct_code());
result.put("out_point", outAttr.getStruct_code());
result.put("task_id", task_id);
// 锁定起点

View File

@@ -21,6 +21,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.InsideDtlMoveTask;
import org.nl.wms.sch_manage.service.util.tasks.MoveOutMoveTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
@@ -87,6 +88,12 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
@Autowired
private MoveOutMoveTask moveOutMoveTask;
/**
* 库内移库任务类子任务
*/
@Autowired
private InsideDtlMoveTask insideDtlMoveTask;
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
@@ -305,26 +312,33 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
String task_id = "";
AbstractTask task = taskFactory.getTask(IOSEnum.MOVE_CONFIG_CODE.code(mstDao.getBill_type()));
for (StIvtMoveinvdtl dtlDao : dtlList) {
// 判断是否阻挡
JSONObject result = checkMove(dtlDao);
if(mstDao.getBill_type().equals(IOSEnum.MOVE_BILL_TYPE.code("库内移库"))) {
// 库内移库任务下发
task_id = checkMoveInside(dtlDao,task);
} else {
// 判断是否阻挡
JSONObject result = checkMove(dtlDao);
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", result.getString("out_point"));
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
task_id = task.create(jsonTask);
if (ObjectUtil.isNotEmpty(result.getString("task_id"))) {
// 更新关联任务标识
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getContact_task, task_id)
.eq(SchBaseTask::getTask_id, result.getString("task_id"))
);
}
}
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", result.getString("out_point"));
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
task_id = task.create(jsonTask);
// 更新明细任务标识
dtlDao.setTask_id(task_id);
if (ObjectUtil.isNotEmpty(result.getString("task_id"))) {
// 更新关联任务标识
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getContact_task, task_id)
.eq(SchBaseTask::getTask_id, result.getString("task_id"))
);
}
}
iStIvtMoveinvdtlService.updateBatchById(dtlList);
@@ -335,6 +349,115 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
return task_id;
}
/**
* 库内移库任务下发
* @param dtlDao 移库明细
* @param task 任务类
* @return task_id
*/
private String checkMoveInside(StIvtMoveinvdtl dtlDao, AbstractTask task) {
// 生成主任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", dtlDao.getTurnout_struct_code());
jsonTask.put("point_code2", dtlDao.getTurnin_struct_code());
jsonTask.put("vehicle_code", dtlDao.getStoragevehicle_code());
jsonTask.put("vehicle_code2", dtlDao.getStoragevehicle_code2());
String task_id = task.create(jsonTask);
Structattr startAttr = iStructattrService.getByCode(dtlDao.getTurnout_struct_code());
Structattr endAttr = iStructattrService.getByCode(dtlDao.getTurnin_struct_code());
// ---------- 判断是否是深浅货位互换 ----------
if (startAttr.getBlock_num().equals(endAttr.getBlock_num())
&& startAttr.getCol_num().equals(endAttr.getCol_num())
&& startAttr.getLayer_num().equals(endAttr.getLayer_num())
) {
// 两个货位都必须有货
if (ObjectUtil.isNotEmpty(startAttr.getStoragevehicle_code()) && ObjectUtil.isNotEmpty(endAttr.getStoragevehicle_code())) {
// 子任务1
createInsideDtlMoveTask(startAttr.getStruct_code(),endAttr.getStruct_code(),startAttr.getStoragevehicle_code(),task_id);
// 子任务2
createInsideDtlMoveTask(endAttr.getStruct_code(),startAttr.getStruct_code(),endAttr.getStoragevehicle_code(),task_id);
return task_id;
} else {
throw new BadRequestException("当前仓位互换会造成仓位空洞,不允许互换!");
}
}
// ---------- 判断起点是否阻挡 ----------
// 判断起点深浅货位
if (startAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("深货位"))) {
// 查询对应浅货位
Structattr shallowStartAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, startAttr.getBlock_num())
.eq(Structattr::getCol_num, startAttr.getCol_num())
.eq(Structattr::getLayer_num, startAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
// 判断浅货位是否被锁定
if (!shallowStartAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("当前起点仓位对应的浅货位【"+shallowStartAttr.getStruct_code()+"】被锁定,无法下发任务");
}
if (ObjectUtil.isNotEmpty(shallowStartAttr.getStoragevehicle_code())) {
// 有货:创建子任务
createInsideDtlMoveTask(shallowStartAttr.getStruct_code(),shallowStartAttr.getStruct_code(),shallowStartAttr.getStoragevehicle_code(),task_id);
}
}
// ---------- 判断终点是否阻挡 ----------
if (endAttr.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("深货位"))) {
// 查询对应浅货位
Structattr shallowStartAttr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, endAttr.getBlock_num())
.eq(Structattr::getCol_num, endAttr.getCol_num())
.eq(Structattr::getLayer_num, endAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("浅货位"))
);
// 判断浅货位是否被锁定
if (!shallowStartAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("当前终点仓位对应的浅货位【"+shallowStartAttr.getStruct_code()+"】被锁定,无法下发任务");
}
if (ObjectUtil.isNotEmpty(shallowStartAttr.getStoragevehicle_code())) {
// 有货:创建子任务
createInsideDtlMoveTask(shallowStartAttr.getStruct_code(),shallowStartAttr.getStruct_code(),shallowStartAttr.getStoragevehicle_code(),task_id);
}
} else {
// 查询对应深货位
Structattr attr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getBlock_num, endAttr.getBlock_num())
.eq(Structattr::getCol_num, endAttr.getCol_num())
.eq(Structattr::getLayer_num, endAttr.getLayer_num())
.eq(Structattr::getPlacement_type, IOSEnum.PLACEMENT_TYPE.code("深货位"))
);
// 判断深货位是否被锁定
if (!attr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("当前终点仓位对应的深货位【"+attr.getStruct_code()+"】被锁定,无法下发任务");
}
// 判断是否有货
if (ObjectUtil.isEmpty(attr.getStoragevehicle_code())) {
throw new BadRequestException("移库会造成仓位【"+attr.getStruct_code()+"】为空洞,无法下发任务");
}
}
// ---------- 创建起点任务 ----------
createInsideDtlMoveTask(startAttr.getStruct_code(),endAttr.getStruct_code(),startAttr.getStoragevehicle_code(),task_id);
// ---------- 创建终点任务 ----------
if (ObjectUtil.isNotEmpty(endAttr.getStoragevehicle_code())) {
// 终点不为空则需要创建终点到起点的任务
createInsideDtlMoveTask(endAttr.getStruct_code(),startAttr.getStruct_code(),endAttr.getStoragevehicle_code(),task_id);
}
return task_id;
}
/**
* 判断是否浅货位阻挡移库
*
@@ -401,7 +524,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
);
String task_id = moveOutMoveTask.create(jsonTask);
result.put("out_point",shallowAttr.getStruct_code());
result.put("out_point",outAttr.getStruct_code());
result.put("task_id",task_id);
} else {
// 判断是否是当前移库单的移库
@@ -444,4 +567,13 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
this.updateById(mstDao);
}
private void createInsideDtlMoveTask(String point_code1, String point_code2, String vehicle_code, String contact_task) {
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", point_code1);
jsonTask.put("point_code2", point_code2);
jsonTask.put("vehicle_code", vehicle_code);
jsonTask.put("contact_task", contact_task);
insideDtlMoveTask.create(jsonTask);
}
}

View File

@@ -57,7 +57,7 @@ public class VehicleOutServiceImpl implements VehicleOutService {
private IStructattrService iStructattrService;
/**
* 空载具库任务类
* 空载具库任务类
*/
@Resource
private EmpVehicleOutTask empVehicleOutTask;
@@ -81,11 +81,13 @@ public class VehicleOutServiceImpl implements VehicleOutService {
List<Structattr> attrList = autoDivStruct(whereJson);
Structattr structattr = new Structattr();
String point_code1 = "";
for (Structattr attrDao : attrList) {
// 判断是深浅货位
if (attrDao.getPlacement_type().equals(IOSEnum.PLACEMENT_TYPE.code("浅货位"))) {
// 直接创建出库任务
structattr = attrDao;
point_code1 = attrDao.getStruct_code();
break;
} else {
// 深货位:判断浅货位是否有货
@@ -106,6 +108,7 @@ public class VehicleOutServiceImpl implements VehicleOutService {
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 直接创建出库任务
structattr = attrDao;
point_code1 = attrDao.getStruct_code();
break;
} else {
continue;
@@ -116,6 +119,7 @@ public class VehicleOutServiceImpl implements VehicleOutService {
if (shallowAttr.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 创建移库任务
structattr = createMoveTask(attrDao, shallowAttr);
point_code1 = attrDao.getStruct_code();
break;
} else {
continue;
@@ -137,12 +141,14 @@ public class VehicleOutServiceImpl implements VehicleOutService {
// 创建任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", structattr.getStruct_code());
jsonTask.put("point_code1", point_code1);
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("point_code4", structattr.getStruct_code());
jsonTask.put("vehicle_code", structattr.getStoragevehicle_code());
String task_id = empVehicleOutTask.create(jsonTask);

View File

@@ -158,6 +158,28 @@
>
解锁
</el-button>
<el-button
slot="right"
class="filter-item"
size="mini"
type="primary"
icon="el-icon-circle-close"
:disabled="crud.selections.length !== 1"
@click="cleanVehicle"
>
清载具
</el-button>
<el-button
slot="right"
class="filter-item"
size="mini"
type="danger"
icon="el-icon-circle-close"
:disabled="crud.selections.length !== 1"
@click="cleanMaterial"
>
清物料
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="540px">
@@ -531,6 +553,20 @@ export default {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
})
},
cleanVehicle() {
const data = this.$refs.table.selection[0]
crudSchBasePoint.cleanVehicle(data).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
})
},
cleanMaterial() {
const data = this.$refs.table.selection[0]
crudSchBasePoint.cleanMaterial(data).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
})
}
}
}

View File

@@ -72,4 +72,21 @@ export function getPointDtl(data) {
})
}
export default { add, edit, del, changeUsed, getPointList, changeLock, getConfirm, putConfirm, getPointDtl }
export function cleanVehicle(data) {
return request({
url: 'api/schBasePoint/cleanVehicle',
method: 'post',
data: data
})
}
export function cleanMaterial(data) {
return request({
url: 'api/schBasePoint/cleanMaterial',
method: 'post',
data: data
})
}
export default { add, edit, del, changeUsed, getPointList, changeLock,
getConfirm, putConfirm, getPointDtl, cleanVehicle, cleanMaterial }

View File

@@ -79,7 +79,31 @@
</el-form>
</el-card>
<div style="padding-bottom: 10px;padding-top: 10px">
<span class="role-span">盘点明细</span>
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="载具编码">
<el-input
v-model="vehicle_code"
size="mini"
clearable
placeholder="查询载具编码"
/>
</el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="getDtl"
>
搜索
</el-button>
</el-form>
<!-- <span class="role-span">盘点明细</span>-->
</div>
<!--表格渲染-->
<el-table
@@ -145,6 +169,7 @@ export default {
nowrow: null,
nowindex: '',
storlist: [],
vehicle_code: null,
tableData: [],
form1: {
check_id: '',
@@ -173,7 +198,8 @@ export default {
},
methods: {
open() {
this.getDtl()
// 查询所有明细
// this.getDtl()
// 查询原材料库的仓库
crudStorattr.getStor({}).then(res => {
this.storlist = res
@@ -185,7 +211,12 @@ export default {
this.crud.toQuery()
},
getDtl() {
check.getDtl({ 'check_id': this.form1.check_id }).then(res => {
check.getDtl({ 'check_id': this.form1.check_id, 'vehicle_code': this.vehicle_code }).then(res => {
for (const dtl of res) {
if (dtl.fac_qty === null) {
dtl.fac_qty = dtl.base_qty
}
}
this.tableData = res
})
},