opt:西门子项目优化
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package org.nl.acs.auto.run;
|
package org.nl.acs.auto.run;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -258,8 +259,12 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
|||||||
if (ObjectUtil.isNotEmpty(bjdDevice)) {
|
if (ObjectUtil.isNotEmpty(bjdDevice)) {
|
||||||
if (bjdDevice.getDeviceDriver() instanceof GuardLampDeviceDriver) {
|
if (bjdDevice.getDeviceDriver() instanceof GuardLampDeviceDriver) {
|
||||||
try {
|
try {
|
||||||
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) bjdDevice.getDeviceDriver();
|
List<Dict> guard_lamp_open_flag_list = dictService.getDictByName("guard_lamp_open_flag");
|
||||||
guardLampDeviceDriver.writing("to_open", "1");
|
if(CollectionUtil.isNotEmpty(guard_lamp_open_flag_list) && "1".equals(guard_lamp_open_flag_list.get(0).getValue())
|
||||||
|
&& guard_lamp_open_flag_list.get(0).getPara1().contains(bjdDevice.getDevice_code())) {
|
||||||
|
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) bjdDevice.getDeviceDriver();
|
||||||
|
guardLampDeviceDriver.writing("to_open", "1");
|
||||||
|
}
|
||||||
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
|
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("下发告警灯告警信号失败");
|
log.info("下发告警灯告警信号失败");
|
||||||
@@ -279,8 +284,12 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
|||||||
if (ObjectUtil.isNotEmpty(bjdDevice)) {
|
if (ObjectUtil.isNotEmpty(bjdDevice)) {
|
||||||
if (bjdDevice.getDeviceDriver() instanceof GuardLampDeviceDriver) {
|
if (bjdDevice.getDeviceDriver() instanceof GuardLampDeviceDriver) {
|
||||||
try {
|
try {
|
||||||
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) bjdDevice.getDeviceDriver();
|
List<Dict> guard_lamp_open_flag_list = dictService.getDictByName("guard_lamp_open_flag");
|
||||||
guardLampDeviceDriver.writing("to_open", "0");
|
if(CollectionUtil.isNotEmpty(guard_lamp_open_flag_list) && "1".equals(guard_lamp_open_flag_list.get(0).getValue())
|
||||||
|
&& guard_lamp_open_flag_list.get(0).getPara1().contains(bjdDevice.getDevice_code())) {
|
||||||
|
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) bjdDevice.getDeviceDriver();
|
||||||
|
guardLampDeviceDriver.writing("to_open", "0");
|
||||||
|
}
|
||||||
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
|
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("下发告警灯取消告警信号失败");
|
log.info("下发告警灯取消告警信号失败");
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nl.acs.device_driver.basedriver.agv.ndcone;
|
package org.nl.acs.device_driver.basedriver.agv.ndcone;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
@@ -39,9 +40,12 @@ import org.nl.acs.task.domain.Task;
|
|||||||
import org.nl.acs.task.service.TaskService;
|
import org.nl.acs.task.service.TaskService;
|
||||||
import org.nl.acs.task.service.dto.TaskDto;
|
import org.nl.acs.task.service.dto.TaskDto;
|
||||||
import org.nl.acs.task.service.impl.TaskServiceImpl;
|
import org.nl.acs.task.service.impl.TaskServiceImpl;
|
||||||
|
import org.nl.system.service.dict.ISysDictService;
|
||||||
|
import org.nl.system.service.dict.dao.Dict;
|
||||||
import org.nl.system.service.param.ISysParamService;
|
import org.nl.system.service.param.ISysParamService;
|
||||||
import org.nl.config.SpringContextHolder;
|
import org.nl.config.SpringContextHolder;
|
||||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -65,6 +69,8 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
|
|||||||
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);
|
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);
|
||||||
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
|
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
|
||||||
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
|
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
|
||||||
|
ISysDictService dictService = SpringContextHolder.getBean(ISysDictService.class);
|
||||||
|
|
||||||
int agvaddr = 0;
|
int agvaddr = 0;
|
||||||
int agvaddr_copy = 0;
|
int agvaddr_copy = 0;
|
||||||
int weight = 0;
|
int weight = 0;
|
||||||
@@ -533,8 +539,12 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
|
|||||||
try {
|
try {
|
||||||
Device guardLamp = deviceAppService.findDeviceByCode("BJD" + agvaddr);
|
Device guardLamp = deviceAppService.findDeviceByCode("BJD" + agvaddr);
|
||||||
if (guardLamp != null) {
|
if (guardLamp != null) {
|
||||||
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) device.getDeviceDriver();
|
List<Dict> guard_lamp_open_flag_list = dictService.getDictByName("guard_lamp_open_flag");
|
||||||
guardLampDeviceDriver.writing("to_open", "1");
|
if(CollectionUtil.isNotEmpty(guard_lamp_open_flag_list) && "1".equals(guard_lamp_open_flag_list.get(0).getValue())
|
||||||
|
&& guard_lamp_open_flag_list.get(0).getPara1().contains(guardLamp.getDevice_code())) {
|
||||||
|
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) guardLamp.getDeviceDriver();
|
||||||
|
guardLampDeviceDriver.writing("to_open", "1");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("下发告警灯告警信号失败");
|
log.info("下发告警灯告警信号失败");
|
||||||
@@ -546,8 +556,12 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
|
|||||||
try {
|
try {
|
||||||
Device guardLamp = deviceAppService.findDeviceByCode("BJD" + agvaddr);
|
Device guardLamp = deviceAppService.findDeviceByCode("BJD" + agvaddr);
|
||||||
if (guardLamp != null) {
|
if (guardLamp != null) {
|
||||||
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) device.getDeviceDriver();
|
List<Dict> guard_lamp_open_flag_list = dictService.getDictByName("guard_lamp_open_flag");
|
||||||
guardLampDeviceDriver.writing("to_open", "0");
|
if(CollectionUtil.isNotEmpty(guard_lamp_open_flag_list) && "1".equals(guard_lamp_open_flag_list.get(0).getValue())
|
||||||
|
&& guard_lamp_open_flag_list.get(0).getPara1().contains(guardLamp.getDevice_code())) {
|
||||||
|
GuardLampDeviceDriver guardLampDeviceDriver = (GuardLampDeviceDriver) guardLamp.getDeviceDriver();
|
||||||
|
guardLampDeviceDriver.writing("to_open", "0");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("下发告警灯取消告警信号失败");
|
log.info("下发告警灯取消告警信号失败");
|
||||||
|
|||||||
@@ -193,6 +193,13 @@ public class HandheldController {
|
|||||||
return new ResponseEntity<>(handheldService.checkTrayInfo(json.getString("vehicle_code")), HttpStatus.OK);
|
return new ResponseEntity<>(handheldService.checkTrayInfo(json.getString("vehicle_code")), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/getGroupByVehicleCode")
|
||||||
|
@Log("根据托盘查询组盘信息")
|
||||||
|
@ApiOperation("根据托盘查询组盘信息")
|
||||||
|
public ResponseEntity<Object> getGroupByVehicleCode(@RequestBody JSONObject json) {
|
||||||
|
return new ResponseEntity<>(handheldService.getGroupByVehicleCode(json.getString("vehicle_code")), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/combineMaterials")
|
@PostMapping("/combineMaterials")
|
||||||
@Log("执行合托操作")
|
@Log("执行合托操作")
|
||||||
@ApiOperation("执行合托操作")
|
@ApiOperation("执行合托操作")
|
||||||
@@ -200,6 +207,13 @@ public class HandheldController {
|
|||||||
return new ResponseEntity<>(handheldService.combineMaterials(json), HttpStatus.OK);
|
return new ResponseEntity<>(handheldService.combineMaterials(json), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/materialUpdate")
|
||||||
|
@Log("物料信息修改")
|
||||||
|
@ApiOperation("物料信息修改")
|
||||||
|
public ResponseEntity<Object> materialUpdate(@RequestBody JSONObject json) {
|
||||||
|
return new ResponseEntity<>(handheldService.materialUpdate(json), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
@Log("查询托盘状态")
|
@Log("查询托盘状态")
|
||||||
@ApiOperation(value = "查询托盘状态", notes = "查询托盘状态,包括是否在货架上、所在位置等信息")
|
@ApiOperation(value = "查询托盘状态", notes = "查询托盘状态,包括是否在货架上、所在位置等信息")
|
||||||
@GetMapping("/queryVehicleStatus/{vehicleCode}")
|
@GetMapping("/queryVehicleStatus/{vehicleCode}")
|
||||||
|
|||||||
@@ -150,6 +150,13 @@ public interface HandheldService {
|
|||||||
*/
|
*/
|
||||||
JSONObject checkTrayInfo(String vehicleCode);
|
JSONObject checkTrayInfo(String vehicleCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询托盘物料信息用于合托
|
||||||
|
* @param vehicleCode 托盘编号
|
||||||
|
* @return 查询结果
|
||||||
|
*/
|
||||||
|
JSONObject getGroupByVehicleCode(String vehicleCode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行合托操作
|
* 执行合托操作
|
||||||
* @param json 包含源托盘号、目标托盘号、选中的物料信息等
|
* @param json 包含源托盘号、目标托盘号、选中的物料信息等
|
||||||
@@ -157,6 +164,13 @@ public interface HandheldService {
|
|||||||
*/
|
*/
|
||||||
JSONObject combineMaterials(JSONObject json);
|
JSONObject combineMaterials(JSONObject json);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行合托操作
|
||||||
|
* @param json 包含源托盘号、目标托盘号、选中的物料信息等
|
||||||
|
* @return 合托结果,包含是否需要入库等信息
|
||||||
|
*/
|
||||||
|
JSONObject materialUpdate(JSONObject json);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询托盘状态
|
* 查询托盘状态
|
||||||
* @param vehicleCode 托盘号
|
* @param vehicleCode 托盘号
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.Synchronized;
|
import lombok.Synchronized;
|
||||||
import nl.basjes.shaded.org.springframework.util.Assert;
|
import nl.basjes.shaded.org.springframework.util.Assert;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.nl.common.enums.GoodsEnum;
|
import org.nl.common.enums.GoodsEnum;
|
||||||
import org.nl.common.enums.VehicleTypeEnum;
|
import org.nl.common.enums.VehicleTypeEnum;
|
||||||
import org.nl.common.enums.region.RegionEnum;
|
import org.nl.common.enums.region.RegionEnum;
|
||||||
@@ -776,7 +777,22 @@ public class HandheldServiceImpl implements HandheldService {
|
|||||||
.eq(SchBasePoint::getPoint_code,pointCode)
|
.eq(SchBasePoint::getPoint_code,pointCode)
|
||||||
.set(SchBasePoint::getPoint_status, "1"));
|
.set(SchBasePoint::getPoint_status, "1"));
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public JSONObject getGroupByVehicleCode(String vehicleCode) {
|
||||||
|
// 1. 检查托盘是否存在
|
||||||
|
MdBaseVehicle vehicle = iMdBaseVehicleService.selectByVehicleCode(vehicleCode);
|
||||||
|
if (ObjectUtil.isEmpty(vehicle)) {
|
||||||
|
throw new BadRequestException("托盘不存在");
|
||||||
|
}
|
||||||
|
List<Map> materials = iSchBaseVehiclematerialgroupService.selectGroupByVehicleCode(vehicleCode);
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
result.put("vehicle_code", vehicleCode);
|
||||||
|
result.put("vehicle_type", vehicle.getVehicle_type());
|
||||||
|
result.put("vehicle_type_name", vehicle.getVehicle_name());
|
||||||
|
result.put("materials", materials);
|
||||||
|
log.info("查询托盘信息成功:托盘编号[{}]", vehicleCode);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public JSONObject checkTrayInfo(String vehicleCode) {
|
public JSONObject checkTrayInfo(String vehicleCode) {
|
||||||
cn.hutool.core.lang.Assert.notBlank(vehicleCode, "托盘号不能为空");
|
cn.hutool.core.lang.Assert.notBlank(vehicleCode, "托盘号不能为空");
|
||||||
@@ -818,9 +834,104 @@ public class HandheldServiceImpl implements HandheldService {
|
|||||||
throw new BadRequestException("查询托盘信息失败:" + e.getMessage());
|
throw new BadRequestException("查询托盘信息失败:" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public JSONObject materialUpdate(JSONObject json) {
|
||||||
|
String operatorId = SecurityUtils.getCurrentNickName();
|
||||||
|
cn.hutool.core.lang.Assert.notEmpty(json, "参数不能为空");
|
||||||
|
|
||||||
|
String vehicleCode = json.getString("vehicle_code"); // 原始托盘号
|
||||||
|
JSONArray materials = json.getJSONArray("materials"); // 选中的物料信息
|
||||||
|
|
||||||
|
cn.hutool.core.lang.Assert.notEmpty(materials, "没有传入物料信息");
|
||||||
|
cn.hutool.core.lang.Assert.notBlank(vehicleCode, "托盘号不能为空");
|
||||||
|
try {
|
||||||
|
// 1. 检查托盘是否存在并获取托盘信息
|
||||||
|
MdBaseVehicle sourceVehicle = iMdBaseVehicleService.selectByVehicleCode(vehicleCode);
|
||||||
|
if (ObjectUtil.isEmpty(sourceVehicle)) {
|
||||||
|
throw new BadRequestException("托盘不存在");
|
||||||
|
}
|
||||||
|
synchronized (this) {
|
||||||
|
int delete_select_flag_num = 0;
|
||||||
|
try {
|
||||||
|
// 4. 查询源托盘的所有物料信息
|
||||||
|
List<SchBaseVehiclematerialgroup> allSourceMaterials = iSchBaseVehiclematerialgroupService.selectByVehicleCode(vehicleCode);
|
||||||
|
if (CollectionUtils.isEmpty(allSourceMaterials)) {
|
||||||
|
throw new BadRequestException("源托盘中不存在物料");
|
||||||
|
}
|
||||||
|
// 遍历源托盘物料,校验order_code和material_id是否为空,为空则直接抛错给前端
|
||||||
|
for (int j = 0; j < allSourceMaterials.size(); j++) {
|
||||||
|
SchBaseVehiclematerialgroup materialGroup = allSourceMaterials.get(j);
|
||||||
|
String groupOrderCode = materialGroup.getOrder_code();
|
||||||
|
String groupMaterialId = materialGroup.getMaterial_id();
|
||||||
|
|
||||||
|
// 订单编号为空,抛明确错误给前端
|
||||||
|
if (StringUtils.isBlank(groupOrderCode)) {
|
||||||
|
throw new BadRequestException("源托盘[" + vehicleCode + "]中第" + (j + 1) + "条物料的订单编号(order_code)为空");
|
||||||
|
}
|
||||||
|
// 物料编码为空,抛明确错误给前端
|
||||||
|
if (StringUtils.isBlank(groupMaterialId)) {
|
||||||
|
throw new BadRequestException("源托盘[" + vehicleCode + "]中第" + (j + 1) + "条物料的物料编码(material_id)为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 5. 执行操作(遍历选中的物料)
|
||||||
|
for (int i = 0; i < materials.size(); i++) {
|
||||||
|
JSONObject selectedMaterial = materials.getJSONObject(i);
|
||||||
|
// 校验选中物料的order_code和material_code非空
|
||||||
|
Integer material_qty = selectedMaterial.getInteger("material_qty");
|
||||||
|
String group_id = selectedMaterial.getString("group_id");
|
||||||
|
Boolean delete_select_flag = selectedMaterial.getBoolean("delete_select_flag");
|
||||||
|
|
||||||
|
// 使用Objects.equals避免空指针(双重保障)
|
||||||
|
List<SchBaseVehiclematerialgroup> sourceGroups = allSourceMaterials.stream()
|
||||||
|
.filter(a -> Objects.equals(a.getGroup_id(), group_id))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 更新物料的托盘归属
|
||||||
|
for (SchBaseVehiclematerialgroup sourceGroup : sourceGroups) {
|
||||||
|
if (delete_select_flag || material_qty == 0) {
|
||||||
|
vehiclematerialgroupMapper.deleteById(group_id);
|
||||||
|
delete_select_flag_num++;
|
||||||
|
} else {
|
||||||
|
sourceGroup.setMaterial_qty(material_qty);
|
||||||
|
sourceGroup.setUpdate_time(DateUtil.now());
|
||||||
|
sourceGroup.setUpdate_name(operatorId);
|
||||||
|
sourceGroup.setCreate_name(operatorId);
|
||||||
|
vehiclematerialgroupMapper.updateById(sourceGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. 更新托盘状态:源托盘若物料全部转移则置为空载具
|
||||||
|
if (allSourceMaterials.size() == delete_select_flag_num) {
|
||||||
|
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
||||||
|
.eq(SchBasePoint::getVehicle_code, vehicleCode)
|
||||||
|
.set(SchBasePoint::getPoint_status, "1"));
|
||||||
|
}
|
||||||
|
// 8. 组装成功返回结果
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
result.put("success", true);
|
||||||
|
result.put("message", "托盘物料信息修改操作成功");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw e; // 直接抛给上层,最终返回给前端
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (BadRequestException e) {
|
||||||
|
throw e; // 业务异常直接返回给前端
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 兜底处理异常信息,避免返回"null"给前端
|
||||||
|
String errorMsg = Optional.ofNullable(e.getMessage()).orElse("系统异常,合托操作失败");
|
||||||
|
throw new BadRequestException(errorMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
// 核心合托方法(完整可运行)
|
||||||
public JSONObject combineMaterials(JSONObject json) {
|
public JSONObject combineMaterials(JSONObject json) {
|
||||||
String operatorId = SecurityUtils.getCurrentNickName();
|
String operatorId = SecurityUtils.getCurrentNickName();
|
||||||
cn.hutool.core.lang.Assert.notEmpty(json, "参数不能为空");
|
cn.hutool.core.lang.Assert.notEmpty(json, "参数不能为空");
|
||||||
@@ -844,12 +955,12 @@ public class HandheldServiceImpl implements HandheldService {
|
|||||||
if (ObjectUtil.isEmpty(sourceVehicle)) {
|
if (ObjectUtil.isEmpty(sourceVehicle)) {
|
||||||
throw new BadRequestException("原始托盘不存在");
|
throw new BadRequestException("原始托盘不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
MdBaseVehicle targetVehicle = iMdBaseVehicleService.selectByVehicleCode(targetVehicleCode);
|
MdBaseVehicle targetVehicle = iMdBaseVehicleService.selectByVehicleCode(targetVehicleCode);
|
||||||
if (ObjectUtil.isEmpty(targetVehicle)) {
|
if (ObjectUtil.isEmpty(targetVehicle)) {
|
||||||
throw new BadRequestException("目标托盘不存在");
|
throw new BadRequestException("目标托盘不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 加载不参与校验的点位配置
|
||||||
List<Dict> dictNotPointList = dictService.getDictByName("not_call_point_code");
|
List<Dict> dictNotPointList = dictService.getDictByName("not_call_point_code");
|
||||||
List<String> notInPointList = new ArrayList<>();
|
List<String> notInPointList = new ArrayList<>();
|
||||||
if(!CollectionUtils.isEmpty(dictNotPointList)){
|
if(!CollectionUtils.isEmpty(dictNotPointList)){
|
||||||
@@ -875,20 +986,44 @@ public class HandheldServiceImpl implements HandheldService {
|
|||||||
throw new BadRequestException("源托盘中不存在物料,无法合托");
|
throw new BadRequestException("源托盘中不存在物料,无法合托");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. 执行合托操作
|
// ========== 核心修复点:校验allSourceMaterials中的空值字段 ==========
|
||||||
|
// 遍历源托盘物料,校验order_code和material_id是否为空,为空则直接抛错给前端
|
||||||
|
for (int j = 0; j < allSourceMaterials.size(); j++) {
|
||||||
|
SchBaseVehiclematerialgroup materialGroup = allSourceMaterials.get(j);
|
||||||
|
String groupOrderCode = materialGroup.getOrder_code();
|
||||||
|
String groupMaterialId = materialGroup.getMaterial_id();
|
||||||
|
|
||||||
|
// 订单编号为空,抛明确错误给前端
|
||||||
|
if (StringUtils.isBlank(groupOrderCode)) {
|
||||||
|
throw new BadRequestException("源托盘[" + sourceVehicleCode + "]中第" + (j+1) + "条物料的订单编号(order_code)为空,无法合托");
|
||||||
|
}
|
||||||
|
// 物料编码为空,抛明确错误给前端
|
||||||
|
if (StringUtils.isBlank(groupMaterialId)) {
|
||||||
|
throw new BadRequestException("源托盘[" + sourceVehicleCode + "]中第" + (j+1) + "条物料的物料编码(material_id)为空,无法合托");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. 执行合托操作(遍历选中的物料)
|
||||||
for (int i = 0; i < selectedMaterials.size(); i++) {
|
for (int i = 0; i < selectedMaterials.size(); i++) {
|
||||||
JSONObject selectedMaterial = selectedMaterials.getJSONObject(i);
|
JSONObject selectedMaterial = selectedMaterials.getJSONObject(i);
|
||||||
|
// 校验选中物料的order_code和material_code非空
|
||||||
String order_code = selectedMaterial.getString("order_code");
|
String order_code = selectedMaterial.getString("order_code");
|
||||||
String material_code = selectedMaterial.getString("material_code");
|
String material_code = selectedMaterial.getString("material_code");
|
||||||
|
cn.hutool.core.lang.Assert.notBlank(order_code, "第" + (i+1) + "条选中物料的订单编号(order_code)不能为空");
|
||||||
|
cn.hutool.core.lang.Assert.notBlank(material_code, "第" + (i+1) + "条选中物料的物料编码(material_code)不能为空");
|
||||||
|
|
||||||
|
// 使用Objects.equals避免空指针(双重保障)
|
||||||
List<SchBaseVehiclematerialgroup> sourceGroups = allSourceMaterials.stream()
|
List<SchBaseVehiclematerialgroup> sourceGroups = allSourceMaterials.stream()
|
||||||
.filter(a -> a.getOrder_code().equals(order_code) && a.getMaterial_id().equals(material_code))
|
.filter(a -> Objects.equals(a.getOrder_code(), order_code)
|
||||||
|
&& Objects.equals(a.getMaterial_id(), material_code))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 选中的物料在源托盘中不存在,抛错给前端
|
||||||
if(CollectionUtil.isEmpty(sourceGroups)){
|
if(CollectionUtil.isEmpty(sourceGroups)){
|
||||||
throw new BadRequestException("不存在合托的物料编码和订单");
|
throw new BadRequestException("第" + (i+1) + "条物料不存在对应的订单[" + order_code + "]和物料编码[" + material_code + "],无法合托");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新物料的托盘归属
|
||||||
for (SchBaseVehiclematerialgroup sourceGroup : sourceGroups) {
|
for (SchBaseVehiclematerialgroup sourceGroup : sourceGroups) {
|
||||||
sourceGroup.setVehicle_code(targetVehicleCode);
|
sourceGroup.setVehicle_code(targetVehicleCode);
|
||||||
sourceGroup.setUpdate_time(DateUtil.now());
|
sourceGroup.setUpdate_time(DateUtil.now());
|
||||||
@@ -898,23 +1033,22 @@ public class HandheldServiceImpl implements HandheldService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 6. 更新托盘状态:源托盘若物料全部转移则置为空载具
|
||||||
if(allSourceMaterials.size() == selectedMaterials.size()) {
|
if(allSourceMaterials.size() == selectedMaterials.size()) {
|
||||||
//源托盘点位变成空载具状态
|
|
||||||
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
||||||
.eq(SchBasePoint::getVehicle_code, sourceVehicleCode)
|
.eq(SchBasePoint::getVehicle_code, sourceVehicleCode)
|
||||||
.set(SchBasePoint::getPoint_status, "1"));
|
.set(SchBasePoint::getPoint_status, "1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//目标托盘变成有货状态
|
// 目标托盘置为有货状态
|
||||||
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
||||||
.eq(SchBasePoint::getVehicle_code, targetVehicleCode)
|
.eq(SchBasePoint::getVehicle_code, targetVehicleCode)
|
||||||
.set(SchBasePoint::getPoint_status, "2"));
|
.set(SchBasePoint::getPoint_status, "2"));
|
||||||
|
|
||||||
// 8. 判断是否需要入库:如果两个托盘都不在货架上,则需要入库
|
// 7. 判断是否需要入库
|
||||||
boolean needStoreIn = ObjectUtil.isEmpty(sourcePoint) && ObjectUtil.isEmpty(targetPoint);
|
boolean needStoreIn = ObjectUtil.isEmpty(sourcePoint) && ObjectUtil.isEmpty(targetPoint);
|
||||||
|
|
||||||
// 9. 组装返回结果
|
// 8. 组装成功返回结果
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
result.put("success", true);
|
result.put("success", true);
|
||||||
result.put("message", "合托操作成功");
|
result.put("message", "合托操作成功");
|
||||||
@@ -927,14 +1061,16 @@ public class HandheldServiceImpl implements HandheldService {
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
} catch (BadRequestException e) {
|
} catch (BadRequestException e) {
|
||||||
throw e;
|
throw e; // 直接抛给上层,最终返回给前端
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (BadRequestException e) {
|
} catch (BadRequestException e) {
|
||||||
throw e;
|
throw e; // 业务异常直接返回给前端
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("合托操作失败:源托盘[{}] -> 目标托盘[{}]", sourceVehicleCode, targetVehicleCode, e);
|
log.error("合托操作失败:源托盘[{}] -> 目标托盘[{}]", sourceVehicleCode, targetVehicleCode, e);
|
||||||
throw new BadRequestException("合托操作失败:" + e.getMessage());
|
// 兜底处理异常信息,避免返回"null"给前端
|
||||||
|
String errorMsg = Optional.ofNullable(e.getMessage()).orElse("系统异常,合托操作失败");
|
||||||
|
throw new BadRequestException(errorMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,13 @@ public interface ISchBaseVehiclematerialgroupService extends IService<SchBaseVeh
|
|||||||
*/
|
*/
|
||||||
List<Map> selectMaterialByVehicleCode(String vehicle_code);
|
List<Map> selectMaterialByVehicleCode(String vehicle_code);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据载具号查找物料信息
|
||||||
|
* @param vehicle_code
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Map> selectGroupByVehicleCode(String vehicle_code);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据载具号查找物料信息
|
* 根据载具号查找物料信息
|
||||||
* @param entity
|
* @param entity
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ public interface SchBaseVehiclematerialgroupMapper extends BaseMapper<SchBaseVeh
|
|||||||
|
|
||||||
List<Map> selectMaterialByVehicleCode(String vehicle_code);
|
List<Map> selectMaterialByVehicleCode(String vehicle_code);
|
||||||
|
|
||||||
|
List<Map> selectGroupByVehicleCode(String vehicle_code);
|
||||||
|
|
||||||
IPage<SchBaseVehiclematerialgroup> selectAllByPage(IPage<SchBaseVehiclematerialgroup> page, @Param("query") SchBaseVehiclematerialgroupQuery query);
|
IPage<SchBaseVehiclematerialgroup> selectAllByPage(IPage<SchBaseVehiclematerialgroup> page, @Param("query") SchBaseVehiclematerialgroupQuery query);
|
||||||
|
|
||||||
List<String> selectMaterialPathByIsEmpty();
|
List<String> selectMaterialPathByIsEmpty();
|
||||||
|
|||||||
@@ -65,6 +65,19 @@
|
|||||||
GROUP BY
|
GROUP BY
|
||||||
sbv.order_code
|
sbv.order_code
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectGroupByVehicleCode" resultType="java.util.Map" parameterType="java.lang.String">
|
||||||
|
SELECT
|
||||||
|
group_id,
|
||||||
|
sbv.order_code,
|
||||||
|
material_qty AS material_qty,
|
||||||
|
material_id AS material_code
|
||||||
|
FROM
|
||||||
|
sch_base_vehiclematerialgroup sbv
|
||||||
|
WHERE 1 = 1
|
||||||
|
<if test="vehicle_code != null">
|
||||||
|
AND sbv.vehicle_code = #{vehicle_code}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
<select id="selectAllByPage" resultType="org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup">
|
<select id="selectAllByPage" resultType="org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup">
|
||||||
WITH RankedVehicles AS (
|
WITH RankedVehicles AS (
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -218,6 +218,12 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
|
|||||||
})).collect(Collectors.toList());
|
})).collect(Collectors.toList());
|
||||||
return maps;
|
return maps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Map> selectGroupByVehicleCode(String vehicle_code) {
|
||||||
|
List<Map> maps = vehiclematerialgroupMapper.selectGroupByVehicleCode(vehicle_code);
|
||||||
|
return maps;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public List<SchBaseVehiclematerialgroup> selectByVehicleCode(JSONObject entity) {
|
public List<SchBaseVehiclematerialgroup> selectByVehicleCode(JSONObject entity) {
|
||||||
List<SchBaseVehiclematerialgroup> schBaseVehiclematerialgroups = vehiclematerialgroupMapper.selectList(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
|
List<SchBaseVehiclematerialgroup> schBaseVehiclematerialgroups = vehiclematerialgroupMapper.selectList(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
|
||||||
|
|||||||
@@ -870,7 +870,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
|||||||
)).values()
|
)).values()
|
||||||
.stream()
|
.stream()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
collect = collect.stream().sorted(Comparator.comparingLong(order -> StringUtils.isNotBlank(order.getDue_date())?getTime(order.getDue_date()) : getTime(DateUtil.format(DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -10),NORM_DATETIME_PATTERN)))).collect(Collectors.toList());
|
collect = collect.stream().sorted(Comparator.comparing(OrderMater::getRegion_code, Comparator.nullsLast(Comparator.naturalOrder())).thenComparingLong(order -> StringUtils.isNotBlank(order.getDue_date())?getTime(order.getDue_date()) : getTime(DateUtil.format(DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -10),NORM_DATETIME_PATTERN)))).collect(Collectors.toList());
|
||||||
return collect;
|
return collect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,12 @@ public class RackTask extends AbstractTask {
|
|||||||
}
|
}
|
||||||
SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(regionCode,
|
SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(regionCode,
|
||||||
GoodsEnum.OUT_OF_STOCK.getValue(), vehicle_type, 1, 0);
|
GoodsEnum.OUT_OF_STOCK.getValue(), vehicle_type, 1, 0);
|
||||||
|
|
||||||
|
// //搜一下有木有满拖点位,有空的,允许放
|
||||||
|
// if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||||
|
// schBasePoint = schBasePointService.selectByGroundPoint(regionCode,
|
||||||
|
// GoodsEnum.OUT_OF_STOCK.getValue(), vehicle_type, 1, 1);
|
||||||
|
// }
|
||||||
if (ObjectUtil.isEmpty(schBasePoint)) {
|
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||||
task.setRemark("未找到所需点位!");
|
task.setRemark("未找到所需点位!");
|
||||||
taskService.updateById(task);
|
taskService.updateById(task);
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ public class ToStoreHouseTask extends AbstractTask {
|
|||||||
// 配置信息
|
// 配置信息
|
||||||
for (SchBaseTask task : tasks) {
|
for (SchBaseTask task : tasks) {
|
||||||
SchBasePoint schBasePoint = null;
|
SchBasePoint schBasePoint = null;
|
||||||
|
|
||||||
|
//这个修改 优先拿在满拖库的
|
||||||
if (task.getVehicle_type().equals(VehicleTypeEnum.FRAME_R02.getVehicleCode()) || task.getVehicle_type().equals(VehicleTypeEnum.FRAME_R01.getVehicleCode())) {
|
if (task.getVehicle_type().equals(VehicleTypeEnum.FRAME_R02.getVehicleCode()) || task.getVehicle_type().equals(VehicleTypeEnum.FRAME_R01.getVehicleCode())) {
|
||||||
schBasePoint = schBasePointService.selectByEmptyCage(RegionEnum.DDLK.getRegion_code(),
|
schBasePoint = schBasePointService.selectByEmptyCage(RegionEnum.DDLK.getRegion_code(),
|
||||||
task.getVehicle_type(), GoodsEnum.EMPTY_PALLETS.getValue(), true, task);
|
task.getVehicle_type(), GoodsEnum.EMPTY_PALLETS.getValue(), true, task);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.nl.wms.sch.task_manage.task.tasks.pcoperation;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@@ -40,7 +41,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sorting将满料放到线边库
|
* sorting将满料放到线边库
|
||||||
@@ -141,22 +145,43 @@ public class PcOperationSMTTask extends AbstractTask {
|
|||||||
sendMaterVo.getMaterial_info().forEach(materVo -> {
|
sendMaterVo.getMaterial_info().forEach(materVo -> {
|
||||||
sendMaterVos.add(BeanUtil.copyProperties(JSONUtil.parseObj(materVo),SendMaterVo.class));
|
sendMaterVos.add(BeanUtil.copyProperties(JSONUtil.parseObj(materVo),SendMaterVo.class));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
List<SchBaseVehiclematerialgroup> schBaseVehiclematerialgroupList = schBaseVehiclematerialgroupService.list((new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", sendMaterVo.getVehicle_code())));
|
||||||
//删除组盘记录生成新的
|
//删除组盘记录生成新的
|
||||||
schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", sendMaterVo.getVehicle_code()));
|
schBaseVehiclematerialgroupService.remove(new QueryWrapper<SchBaseVehiclematerialgroup>().eq("vehicle_code", sendMaterVo.getVehicle_code()));
|
||||||
|
Map<String, String> jobNameMap = new HashMap<>();
|
||||||
|
if(CollectionUtil.isNotEmpty(schBaseVehiclematerialgroupList)){
|
||||||
|
jobNameMap = schBaseVehiclematerialgroupList.stream()
|
||||||
|
// 过滤掉null元素和materialId为null的元素,避免异常
|
||||||
|
.filter(item -> item != null && item.getMaterial_id() != null)
|
||||||
|
// 转换为Map:key=materialId,value=jobName
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
SchBaseVehiclematerialgroup::getMaterial_id, // 生成key的函数
|
||||||
|
SchBaseVehiclematerialgroup::getJob_name, // 生成value的函数
|
||||||
|
(oldValue, newValue) -> newValue // 处理重复key的策略:保留新值(也可改为oldValue保留旧值)
|
||||||
|
));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(sendMaterVos)) {
|
if (CollUtil.isNotEmpty(sendMaterVos)) {
|
||||||
|
Map<String, String> finalJobNameMap = jobNameMap;
|
||||||
sendMaterVos.forEach(smv -> {
|
sendMaterVos.forEach(smv -> {
|
||||||
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
|
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
|
||||||
schBaseVehiclematerialgroup.setVehicle_code(sendMaterVo.getVehicle_code());
|
schBaseVehiclematerialgroup.setVehicle_code(sendMaterVo.getVehicle_code());
|
||||||
schBaseVehiclematerialgroup.setPoint_code(schBasePoint.getPoint_code());
|
schBaseVehiclematerialgroup.setPoint_code(schBasePoint.getPoint_code());
|
||||||
schBaseVehiclematerialgroup.setMaterial_id(smv.getMaterial_code());
|
schBaseVehiclematerialgroup.setMaterial_id(StringUtils.isBlank(smv.getMaterial_code()) ? smv.getMaterial_id() : smv.getMaterial_code());
|
||||||
schBaseVehiclematerialgroup.setMaterial_qty(smv.getMaterial_qty());
|
schBaseVehiclematerialgroup.setMaterial_qty(smv.getMaterial_qty());
|
||||||
schBaseVehiclematerialgroup.setRegion_code(sendMaterVo.getRegion_code());
|
schBaseVehiclematerialgroup.setRegion_code(sendMaterVo.getRegion_code());
|
||||||
schBaseVehiclematerialgroup.setOrder_code(smv.getOrder_code());
|
schBaseVehiclematerialgroup.setOrder_code(smv.getOrder_code());
|
||||||
schBaseVehiclematerialgroup.setDue_date(smv.getDue_date());
|
schBaseVehiclematerialgroup.setDue_date(smv.getDue_date());
|
||||||
schBaseVehiclematerialgroup.setPriority(smv.getPriority());
|
schBaseVehiclematerialgroup.setPriority(smv.getPriority());
|
||||||
|
if (CollectionUtil.isNotEmpty(finalJobNameMap)) {
|
||||||
|
schBaseVehiclematerialgroup.setJob_name(finalJobNameMap.get(schBaseVehiclematerialgroup.getMaterial_id()));
|
||||||
|
}
|
||||||
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
|
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 任务完成
|
// 任务完成
|
||||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||||
|
|||||||
@@ -37,9 +37,20 @@
|
|||||||
<div class="search-wraper">
|
<div class="search-wraper">
|
||||||
<el-row class="filter-wraper" type="flex" justify="space-between" align="middle">
|
<el-row class="filter-wraper" type="flex" justify="space-between" align="middle">
|
||||||
<el-col :span="6" class="p-label">搜索关键字</el-col>
|
<el-col :span="6" class="p-label">搜索关键字</el-col>
|
||||||
<el-col :span="12" class="select-wraper">
|
<el-col :span="8" class="select-wraper">
|
||||||
<el-input v-model="searchKey" placeholder="请输入800、物料号或零件号" style="width: 100%" @keyup.enter.native="searchOrder" />
|
<el-input v-model="searchKey" placeholder="请输入800、物料号或零件号" style="width: 100%" @keyup.enter.native="searchOrder" />
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="4" class="p-label">工序筛选</el-col>
|
||||||
|
<el-col :span="8" class="select-wraper">
|
||||||
|
<el-select v-model="selectedProcess" placeholder="请选择工序" style="width: 100%" filterable clearable @change="searchOrder">
|
||||||
|
<el-option
|
||||||
|
v-for="process in processList"
|
||||||
|
:key="process"
|
||||||
|
:label="process"
|
||||||
|
:value="process"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<button class="search_button" @click="searchOrder">搜索</button>
|
<button class="search_button" @click="searchOrder">搜索</button>
|
||||||
<button class="search_button search_button_dis" @click="resetSearch">重置</button>
|
<button class="search_button search_button_dis" @click="resetSearch">重置</button>
|
||||||
@@ -406,6 +417,9 @@ export default {
|
|||||||
imgSrc: '',
|
imgSrc: '',
|
||||||
alertShow: false,
|
alertShow: false,
|
||||||
searchKey: '',
|
searchKey: '',
|
||||||
|
// 工序筛选相关
|
||||||
|
selectedProcess: '',
|
||||||
|
processList: [],
|
||||||
// 异常信息相关属性
|
// 异常信息相关属性
|
||||||
hasError: false,
|
hasError: false,
|
||||||
errorDetails: [],
|
errorDetails: [],
|
||||||
@@ -616,13 +630,24 @@ export default {
|
|||||||
// 搜索订单
|
// 搜索订单
|
||||||
searchOrder() {
|
searchOrder() {
|
||||||
crudProduceScreen.regionOrder(this.popData.device_code, this.searchKey).then(res => {
|
crudProduceScreen.regionOrder(this.popData.device_code, this.searchKey).then(res => {
|
||||||
this.popList = [...res.content]
|
let data = [...res.content]
|
||||||
|
|
||||||
|
// 提取去重后的工序列表
|
||||||
|
this.processList = [...new Set(data.map(item => item.region_code).filter(Boolean))]
|
||||||
|
|
||||||
|
// 根据选中的工序进行筛选
|
||||||
|
if (this.selectedProcess) {
|
||||||
|
data = data.filter(item => item.region_code === this.selectedProcess)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.popList = data
|
||||||
this.show = true
|
this.show = true
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
// 重置搜索条件
|
// 重置搜索条件
|
||||||
resetSearch() {
|
resetSearch() {
|
||||||
this.searchKey = ''
|
this.searchKey = ''
|
||||||
|
this.selectedProcess = ''
|
||||||
this.searchOrder()
|
this.searchOrder()
|
||||||
},
|
},
|
||||||
// 设置表格行类名
|
// 设置表格行类名
|
||||||
|
|||||||
Reference in New Issue
Block a user