Compare commits

...

2 Commits

Author SHA1 Message Date
de511ba34a Merge remote-tracking branch 'origin/master' 2026-01-26 18:15:50 +08:00
aa0f9d4147 opt:优化 2026-01-26 18:15:29 +08:00
22 changed files with 300 additions and 60 deletions

View File

@@ -22,6 +22,11 @@ public interface PdaProductionService {
*/
PdaResponse getStockGroupInfo(JSONObject param);
/**
* 托盘叫料
* @param param
* @return
*/
PdaResponse confirmCallMaterial(JSONObject param);
/**

View File

@@ -194,6 +194,9 @@ public class PdaCommonServiceImpl implements PdaCommonService {
jsonObject.put("vehicle_code", param.getVehicle_code());
groupplateService.checkVehicle(jsonObject);
// 检测托盘的物料类型是否都是一致的
sectMaterialCheck.checkAllMaterialType(param.getGroup_plates());
// 判断库区是否一致
sectMaterialCheck.chackAllMaterialAndSect(param);

View File

@@ -20,12 +20,15 @@ import org.nl.system.service.param.dao.Param;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.*;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.pda.general_management.service.PdaBuildParamService;
import org.nl.wms.pda.general_management.service.PdaWarehouseService;
import org.nl.wms.pda.general_management.service.PdaProductionService;
import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.pda.util.SectMaterialCheck;
import org.nl.wms.pda.util.ThresholdChecker;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
@@ -112,6 +115,8 @@ public class PdaProductionServiceImpl implements PdaProductionService {
private ISysParamService paramService;
@Resource
private SecondaryPackagingService secondaryPackagingService;
@Resource
private SectMaterialCheck sectMaterialCheck;
@Override
public PdaResponse getGroupInfo(JSONObject param) {
// search;
@@ -153,9 +158,6 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(param.get("point_code"))) {
throw new BadRequestException("请输入要料点!");
}
if (ObjectUtil.isEmpty(param.get("row"))) {
throw new BadRequestException("请选择呼叫的物料!");
}
String pointCode = param.getString("point_code");
SchBasePoint endPoint = pointService.getByPointCode(pointCode, true);
if (ObjectUtil.isEmpty(endPoint)) {
@@ -177,6 +179,9 @@ public class PdaProductionServiceImpl implements PdaProductionService {
secondaryPackagingService.wrappingCall(crParam);
return PdaResponse.requestOk();
}
if (ObjectUtil.isEmpty(param.get("row"))) {
throw new BadRequestException("请选择呼叫的物料!");
}
JSONObject row = param.getJSONObject("row");
Structattr structattr = structattrService.getByCode(row.getString("struct_code"));
param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("批料出库"));
@@ -305,31 +310,28 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
throw new BadRequestException("该点位没有载具信息!");
}
// 查找之前的任务
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
.eq(SchBaseTask::getVehicle_code, startPoint.getVehicle_code())
.in(SchBaseTask::getConfig_code, "PalletOutTask")
.orderByDesc(SchBaseTask::getTask_id));
if (list.size() == 0) {
throw new BadRequestException("找不到托盘原来的位置!");
// 根据托盘指定的区域回去
MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(startPoint.getVehicle_code());
if (ObjectUtil.isEmpty(storagevehicleinfo)) {
throw new BadRequestException("找不到托盘信息!");
}
SchBaseTask task = list.get(0);
Structattr structattr = structattrService.getByCode(task.getPoint_code1());
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(startPoint.getVehicle_code()
, Arrays.asList("2", "4"));
if (ObjectUtil.isEmpty(storagevehicleinfo.getSect_code())) {
throw new BadRequestException("托盘没有绑定库区,请检查托盘信息!");
}
Sectattr sectattr = sectattrService.findByCode(storagevehicleinfo.getSect_code(), false);
if (res.size() > 0) {
log.info("剩料回库");
// 剩料回库
param.put("rows", res);
Sectattr sectattr = sectattrService.findByCode(structattr.getSect_code(), false);
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("剩料回库"));
// 1 创建入库单、明细、分配明细
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr);
String invId = rawAssistIStorService.insertDtl(invObj);
// 2 调用手动分配
param.put("sect_code", structattr.getSect_code());
param.put("sect_name", structattr.getSect_name());
param.put("sect_code", sectattr.getSect_code());
param.put("sect_name", sectattr.getSect_name());
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true);
rawAssistIStorService.divStruct(divObj);
// 3 创建任务
@@ -339,8 +341,8 @@ public class PdaProductionServiceImpl implements PdaProductionService {
log.info("空载具回库");
// 空载具回库
JSONObject vin = new JSONObject();
vin.put("storagevehicle_code", task.getVehicle_code());
vin.put("sect_code", structattr.getSect_code());
vin.put("storagevehicle_code", startPoint.getVehicle_code());
vin.put("sect_code", sectattr.getSect_code());
vin.put("point_code", startPoint.getPoint_code());
vehicleInService.create(vin);
}
@@ -355,35 +357,70 @@ public class PdaProductionServiceImpl implements PdaProductionService {
return PdaResponse.requestOk();
}
@SneakyThrows
@Override
public PdaResponse preProcessingDown(JSONObject param) {
log.info("加工下料:{}", param);
// vehicle_code、 point_code, sect_code, 。。。rows
assertNotBlankJson(param, "请求参数不能为空!", "vehicle_code", "point_code", "sect_code");
String pointCode = param.getString("point_code");
SchBasePoint startPoint = pointService.getByPointCode(pointCode, false);
if (ObjectUtil.isEmpty(startPoint)) {
throw new BadRequestException("当前点位不存在,请检查是否正确!");
}
// 判断任务是否创建
List<SchBaseTask> tasks = taskService.getTaskByQuery(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, pointCode));
if (tasks.size() > 0) {
throw new BadRequestException("该点位已创建过任务!");
}
String vehicleCode = param.getString("vehicle_code");
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(vehicleCode, Arrays.asList("1"));
if (res.size() == 0) {
throw new BadRequestException("当前托盘号【" + vehicleCode + "】不存在物料信息,请检查!");
}
// 如果是仓位就需要走原辅料入库
Sectattr sectCode = sectattrService.findByCode(param.getString("sect_code"), false);
if (ObjectUtil.isNotEmpty(sectCode)) {
// 辅料入库
param.put("rows", res);
receivedIn(param);
} else {
preProcessingInTask.create(param);
RLock lock = redissonClient.getLock("lock:preProcessingDown");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
String pointCode = param.getString("point_code");
SchBasePoint startPoint = pointService.getByPointCode(pointCode, false);
if (ObjectUtil.isEmpty(startPoint)) {
throw new BadRequestException("当前点位不存在,请检查是否正确!");
}
// 判断任务是否创建
List<SchBaseTask> tasks = taskService.getTaskByQuery(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, pointCode));
if (tasks.size() > 0) {
throw new BadRequestException("该点位已创建过任务!");
}
String vehicleCode = param.getString("vehicle_code");
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(vehicleCode, Arrays.asList("1"));
if (res.size() == 0) {
throw new BadRequestException("当前托盘号【" + vehicleCode + "】不存在物料信息,请检查!");
}
// 如果是仓位就需要走原辅料入库
Sectattr sectCode = sectattrService.findByCode(param.getString("sect_code"), false);
if (ObjectUtil.isNotEmpty(sectCode)) {
// 辅料入库
param.put("rows", res);
// 入库前检测
AssemblyPalletParam checkParam = new AssemblyPalletParam();
checkParam.setVehicle_code(vehicleCode);
// res中包含g.*(md_pb_groupplate字段),但也会额外带一些展示字段;这里只取校验必需字段即可
List<GroupPlate> groupPlates = res.stream().map(row -> {
GroupPlate gp = new GroupPlate();
gp.setGroup_id(row.getString("group_id"));
gp.setBag_code(row.getString("bag_code"));
gp.setVehicle_code(row.getString("vehicle_code"));
gp.setMaterial_id(row.getString("material_id"));
gp.setPcsn(row.getString("pcsn"));
gp.setQty(row.getBigDecimal("qty"));
gp.setQty_unit_id(row.getString("qty_unit_id"));
gp.setQty_unit_name(row.getString("qty_unit_name"));
gp.setSupp_code(row.getString("supp_code"));
gp.setRemark(row.getString("remark"));
gp.setStatus(row.getString("status"));
return gp;
}).collect(Collectors.toList());
checkParam.setGroup_plates(groupPlates);
// 调用检测方法:校验托盘库区与物料类型映射关系
sectMaterialCheck.chackAllMaterialAndSect(checkParam);
receivedIn(param);
} else {
preProcessingInTask.create(param);
}
} else {
throw new BadRequestException("速度太快啦,稍后再试...");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return PdaResponse.requestOk();
}
@@ -434,6 +471,14 @@ public class PdaProductionServiceImpl implements PdaProductionService {
productionInStorage(param, point);
return PdaResponse.requestOk();
}
// 缠绕膜
if (point.getRegion_code().startsWith("CR")) {
JSONObject p = new JSONObject();
p.put("device_code", pointCode);
secondaryPackagingService.wrappingDown(p);
return PdaResponse.requestOk();
}
// 压片/包衣下料
AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code()));
task.create(param);
@@ -658,7 +703,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
String currentPoint = param.getString("current_point");
String vehicleCode = param.getString("vehicle_code");
// ACS 获取的重量
String total = param.getString("total");
String total = param.getString("weight");
String taskId = row.getString("task_id");
if (ObjectUtil.isNotEmpty(taskId)) {
// 有任务直接任务完成
@@ -695,7 +740,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
String currentPoint = param.getString("current_point");
String vehicleCode = param.getString("vehicle_code");
// ACS 获取的重量
BigDecimal currentTotal = param.getBigDecimal("total");
BigDecimal currentTotal = param.getBigDecimal("weight");
BigDecimal originalQty = row.getBigDecimal("qty");
Param threshold = paramService.findByCode("weighing_threshold");
// 对比与组盘的重量是否大于阈值
@@ -717,7 +762,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
return PdaResponse.requestOk();
}
if (ObjectUtil.isEmpty(row.getString("station"))) {
throw new BadRequestException("产线目标站为空");
throw new BadRequestException("请设置产线目标站");
}
List<JSONObject> infoByBucket = groupbucketService.getBucketInfoByBucket(vehicleCode);
if (infoByBucket.size() == 0) {

View File

@@ -20,7 +20,9 @@ import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.pda.general_management.service.PdaBuildParamService;
import org.nl.wms.pda.general_management.service.PdaWarehouseService;
import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.pda.util.SectMaterialCheck;
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;
@@ -68,6 +70,8 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
private PdaBuildParamService defaultPdaBuildParam;
@Resource
private IStructattrService structattrService;
@Resource
private SectMaterialCheck sectMaterialCheck;
/**
* 组盘mapper
@@ -266,6 +270,30 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("当前入库点位不存在【" + param.getString("point_code") + "");
}
// 校验托盘数据与入库是否匹配
// 入库前检测
AssemblyPalletParam checkParam = new AssemblyPalletParam();
checkParam.setVehicle_code(param.getString("vehicel_code"));
// res中包含g.*(md_pb_groupplate字段),但也会额外带一些展示字段;这里只取校验必需字段即可
List<JSONObject> rows = param.getJSONArray("rows").toJavaList(JSONObject.class);
List<GroupPlate> groupPlates = rows.stream().map(row -> {
GroupPlate gp = new GroupPlate();
gp.setGroup_id(row.getString("group_id"));
gp.setBag_code(row.getString("bag_code"));
gp.setVehicle_code(row.getString("vehicle_code"));
gp.setMaterial_id(row.getString("material_id"));
gp.setPcsn(row.getString("pcsn"));
gp.setQty(row.getBigDecimal("qty"));
gp.setQty_unit_id(row.getString("qty_unit_id"));
gp.setQty_unit_name(row.getString("qty_unit_name"));
gp.setSupp_code(row.getString("supp_code"));
gp.setRemark(row.getString("remark"));
gp.setStatus(row.getString("status"));
return gp;
}).collect(Collectors.toList());
checkParam.setGroup_plates(groupPlates);
// 调用检测方法:校验托盘库区与物料类型映射关系
sectMaterialCheck.chackAllMaterialAndSect(checkParam);
// 组织入库单创建
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("原辅料入库"));

View File

@@ -1,6 +1,7 @@
package org.nl.wms.pda.util;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict;
@@ -16,6 +17,7 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -58,6 +60,70 @@ public class SectMaterialCheck {
@Resource
private CommonMapper commonMapper;
/**
* 校验托盘的物料类型是否一致
* @param groupPlates
*/
public void checkAllMaterialType(List<GroupPlate> groupPlates) {
if (ObjectUtil.isEmpty(groupPlates)) {
throw new BadRequestException("托盘物料信息不能为空!");
}
// 仅取本托盘涉及到的物料ID物料表数据量大也不会全表扫描
Set<String> materialIdSet = groupPlates.stream()
.map(GroupPlate::getMaterial_id)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toCollection(HashSet::new));
if (ObjectUtil.isEmpty(materialIdSet)) {
throw new BadRequestException("托盘物料信息不能为空!");
}
if (materialIdSet.size() == 1) {
return;
}
// 托盘明细本身不大直接一次IN查询即可只查必要字段避免加载物料表大字段
List<MdMeMaterialbase> materials = materialbaseService.list(
new QueryWrapper<MdMeMaterialbase>()
.select("material_id", "material_type_id")
.in("material_id", materialIdSet)
);
if (ObjectUtil.isEmpty(materials)) {
throw new BadRequestException("物料不存在或已被删除!");
}
// 校验物料是否都存在
Set<String> foundMaterialIds = materials.stream()
.filter(Objects::nonNull)
.map(MdMeMaterialbase::getMaterial_id)
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toSet());
if (foundMaterialIds.size() != materialIdSet.size()) {
Set<String> missing = new HashSet<>(materialIdSet);
missing.removeAll(foundMaterialIds);
throw new BadRequestException("物料不存在或已被删除:" + String.join(",", missing));
}
// 校验物料类型是否一致
long typeCnt = materials.stream()
.map(MdMeMaterialbase::getMaterial_type_id)
.filter(ObjectUtil::isNotEmpty)
.distinct()
.count();
if (typeCnt == 0) {
throw new BadRequestException("物料未配置物料类型(material_type_id),无法校验!");
}
if (typeCnt > 1) {
throw new BadRequestException("托盘物料类型不一致,禁止操作!");
}
// 若存在未配置类型的物料,也认为不允许通过
boolean hasEmptyType = materials.stream().anyMatch(m -> ObjectUtil.isEmpty(m) || ObjectUtil.isEmpty(m.getMaterial_type_id()));
if (hasEmptyType) {
throw new BadRequestException("存在未配置物料类型(material_type_id)的物料,无法校验!");
}
}
/**
* 获取托盘对应的sect_code比较所有param对应的物料的类型 与字典表MATERIAL_SECT(label:物料类型value:库区)是否匹配.
* @param param

View File

@@ -85,6 +85,9 @@ public class CallMaterialTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
taskService.save(task);
// 下发任务

View File

@@ -68,6 +68,9 @@ public class CenterInTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());

View File

@@ -58,7 +58,9 @@ public class CoatingUpTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -61,6 +61,9 @@ public class EmptyDiskConveyTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -67,6 +67,9 @@ public class EmptyDiskEnterTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -93,9 +93,11 @@ public class IntermediateOutTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
this.sendTaskOne(task.getTask_id());
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();
}
@@ -178,6 +180,9 @@ public class IntermediateOutTask extends AbstractTask {
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
outBillService.taskFinish(taskObj);
if (true) {
return;
}
// 创建上料任务
JSONObject request = JSONObject.parseObject(taskObj.getRequest_param());
// "ext":{"iostorinv_id":"2009532623130595328","point_code":"ZJZCZ01","target":"YPDJW01"}

View File

@@ -71,7 +71,9 @@ public class MaterialBackTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -103,9 +103,11 @@ public class PalletOutTask extends AbstractTask {
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁"))
.eq(Structattr::getStruct_code, task.getPoint_code1()));
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
this.sendTaskOne(task.getTask_id());
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();
}

View File

@@ -60,6 +60,9 @@ public class PalletizingAddTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -67,6 +67,9 @@ public class PalletizingDownTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -69,7 +69,9 @@ public class PreProcessingInTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -66,7 +66,9 @@ public class ProduceInTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -72,7 +72,9 @@ public class RawInTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -92,7 +92,9 @@ public class TabletingInTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();
@@ -175,6 +177,9 @@ public class TabletingInTask extends AbstractTask {
throw new BadRequestException("入库库区设置不能为空!");
}
// todo: 获取重量
if (true) {
return;
}
groupbucketService.upDateWeight("26.8", taskObj.getVehicle_code());
JSONObject param = new JSONObject();
// 创建入库任务

View File

@@ -75,6 +75,9 @@ public class WrappingDownTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -74,6 +74,9 @@ public class WrappingUpTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
taskService.save(task);
if (task.getPoint_code1().equals(task.getPoint_code2())) {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// this.sendTaskOne(task.getTask_id());
return task.getTask_id();

View File

@@ -37,7 +37,7 @@
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<rrOperation/>
<rrOperation />
</el-form>
</div>
@@ -78,6 +78,20 @@
/>
</el-select>
</el-form-item>
<el-form-item label="所属库区">
<el-select
v-model="form.sect_code"
placeholder=""
style="width: 200px"
>
<el-option
v-for="item in this.sects"
:label="item.sect_name"
:value="item.sect_code"
:disabled="(form.storagevehicle_type === '4' && item.sect_code === 'ZZC01') || (form.storagevehicle_type !== '4' && item.sect_code !== 'ZZC01')"
/>
</el-select>
</el-form-item>
<el-form-item label="载具编码" prop="storagevehicle_code">
<el-input v-model="form.storagevehicle_code" style="width: 200px;" :disabled="crud.status.edit > 0" />
</el-form-item>
@@ -112,6 +126,13 @@
<el-table-column prop="storagevehicle_code" label="载具编码" />
<el-table-column prop="storagevehicle_name" label="载具名称" />
<el-table-column prop="pcsn" label="绑定物料" />
<el-table-column prop="sect_code" label="所属库区" :min-width="flexWidth('sect_code',crud.data,'载具类型', 30)">
<template slot-scope="scope">
<span :class="{ 'text-danger': isSectMissing(scope.row.sect_code), 'blink': isSectMissing(scope.row.sect_code) }">
{{ getSectName(scope.row.sect_code) }}
</span>
</template>
</el-table-column>
<el-table-column prop="weigth" label="托盘重量" />
<el-table-column label="是否启用" align="center" prop="is_used">
<template slot-scope="scope">
@@ -125,8 +146,8 @@
/>
</template>
</el-table-column>
<el-table-column prop="create_name" label="创建人"/>
<el-table-column prop="create_time" label="创建时间" width="150px"/>
<el-table-column prop="create_name" label="创建人" />
<el-table-column prop="create_time" label="创建时间" width="150px" />
<el-table-column
v-permission="['admin','storagevehicleinfo:edit','storagevehicleinfo:del']"
label="操作"
@@ -156,6 +177,7 @@ import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { getLodop } from '@/assets/js/lodop/LodopFuncs'
import crudSectattr from '@/views/wms/basedata/sectattr/sectattr'
const defaultForm = {
storagevehicle_id: null,
@@ -163,6 +185,7 @@ const defaultForm = {
storagevehicle_name: null,
one_code: null,
two_code: null,
sect_code: null,
rfid_code: null,
create_id: null,
create_name: null,
@@ -241,9 +264,15 @@ export default {
{ required: true, message: '不能为空', trigger: 'blur' },
{ validator: numberOne }
]
}
},
sects: []
}
},
created() {
crudSectattr.getOneSect({ 'stor_id': '' }).then(res => {
this.sects = res
})
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
@@ -280,6 +309,15 @@ export default {
}
})
},
getSectName(code) {
const sect = this.sects.find(item => item.sect_code === code)
return sect ? sect.sect_name : '请设置库区'
},
isSectMissing(code) {
// 列表还未加载时不显示红色,避免闪烁
if (!this.sects || this.sects.length === 0) return false
return !this.sects.some(item => item.sect_code === code)
},
formattType(row) {
return this.dict.label.storagevehicle_type[row.storagevehicle_type]
},
@@ -308,5 +346,14 @@ export default {
</script>
<style scoped>
.text-danger {
color: #F56C6C;
}
.blink {
animation: blink 1s step-end infinite;
}
@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0.25; }
}
</style>