opt:西门子项目优化
This commit is contained in:
@@ -193,6 +193,13 @@ public class HandheldController {
|
||||
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")
|
||||
@Log("执行合托操作")
|
||||
@ApiOperation("执行合托操作")
|
||||
@@ -200,6 +207,13 @@ public class HandheldController {
|
||||
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("查询托盘状态")
|
||||
@ApiOperation(value = "查询托盘状态", notes = "查询托盘状态,包括是否在货架上、所在位置等信息")
|
||||
@GetMapping("/queryVehicleStatus/{vehicleCode}")
|
||||
|
||||
@@ -150,6 +150,13 @@ public interface HandheldService {
|
||||
*/
|
||||
JSONObject checkTrayInfo(String vehicleCode);
|
||||
|
||||
/**
|
||||
* 查询托盘物料信息用于合托
|
||||
* @param vehicleCode 托盘编号
|
||||
* @return 查询结果
|
||||
*/
|
||||
JSONObject getGroupByVehicleCode(String vehicleCode);
|
||||
|
||||
/**
|
||||
* 执行合托操作
|
||||
* @param json 包含源托盘号、目标托盘号、选中的物料信息等
|
||||
@@ -157,6 +164,13 @@ public interface HandheldService {
|
||||
*/
|
||||
JSONObject combineMaterials(JSONObject json);
|
||||
|
||||
/**
|
||||
* 执行合托操作
|
||||
* @param json 包含源托盘号、目标托盘号、选中的物料信息等
|
||||
* @return 合托结果,包含是否需要入库等信息
|
||||
*/
|
||||
JSONObject materialUpdate(JSONObject json);
|
||||
|
||||
/**
|
||||
* 查询托盘状态
|
||||
* @param vehicleCode 托盘号
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.Synchronized;
|
||||
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.VehicleTypeEnum;
|
||||
import org.nl.common.enums.region.RegionEnum;
|
||||
@@ -776,7 +777,22 @@ public class HandheldServiceImpl implements HandheldService {
|
||||
.eq(SchBasePoint::getPoint_code,pointCode)
|
||||
.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
|
||||
public JSONObject checkTrayInfo(String vehicleCode) {
|
||||
cn.hutool.core.lang.Assert.notBlank(vehicleCode, "托盘号不能为空");
|
||||
@@ -818,9 +834,104 @@ public class HandheldServiceImpl implements HandheldService {
|
||||
throw new BadRequestException("查询托盘信息失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@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) {
|
||||
String operatorId = SecurityUtils.getCurrentNickName();
|
||||
cn.hutool.core.lang.Assert.notEmpty(json, "参数不能为空");
|
||||
@@ -844,12 +955,12 @@ public class HandheldServiceImpl implements HandheldService {
|
||||
if (ObjectUtil.isEmpty(sourceVehicle)) {
|
||||
throw new BadRequestException("原始托盘不存在");
|
||||
}
|
||||
|
||||
MdBaseVehicle targetVehicle = iMdBaseVehicleService.selectByVehicleCode(targetVehicleCode);
|
||||
if (ObjectUtil.isEmpty(targetVehicle)) {
|
||||
throw new BadRequestException("目标托盘不存在");
|
||||
}
|
||||
|
||||
// 加载不参与校验的点位配置
|
||||
List<Dict> dictNotPointList = dictService.getDictByName("not_call_point_code");
|
||||
List<String> notInPointList = new ArrayList<>();
|
||||
if(!CollectionUtils.isEmpty(dictNotPointList)){
|
||||
@@ -875,20 +986,44 @@ public class HandheldServiceImpl implements HandheldService {
|
||||
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++) {
|
||||
JSONObject selectedMaterial = selectedMaterials.getJSONObject(i);
|
||||
// 校验选中物料的order_code和material_code非空
|
||||
String order_code = selectedMaterial.getString("order_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()
|
||||
.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());
|
||||
|
||||
// 选中的物料在源托盘中不存在,抛错给前端
|
||||
if(CollectionUtil.isEmpty(sourceGroups)){
|
||||
throw new BadRequestException("不存在合托的物料编码和订单");
|
||||
throw new BadRequestException("第" + (i+1) + "条物料不存在对应的订单[" + order_code + "]和物料编码[" + material_code + "],无法合托");
|
||||
}
|
||||
|
||||
// 更新物料的托盘归属
|
||||
for (SchBaseVehiclematerialgroup sourceGroup : sourceGroups) {
|
||||
sourceGroup.setVehicle_code(targetVehicleCode);
|
||||
sourceGroup.setUpdate_time(DateUtil.now());
|
||||
@@ -898,23 +1033,22 @@ public class HandheldServiceImpl implements HandheldService {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 6. 更新托盘状态:源托盘若物料全部转移则置为空载具
|
||||
if(allSourceMaterials.size() == selectedMaterials.size()) {
|
||||
//源托盘点位变成空载具状态
|
||||
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
||||
.eq(SchBasePoint::getVehicle_code, sourceVehicleCode)
|
||||
.set(SchBasePoint::getPoint_status, "1"));
|
||||
}
|
||||
|
||||
//目标托盘变成有货状态
|
||||
// 目标托盘置为有货状态
|
||||
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
|
||||
.eq(SchBasePoint::getVehicle_code, targetVehicleCode)
|
||||
.set(SchBasePoint::getPoint_status, "2"));
|
||||
|
||||
// 8. 判断是否需要入库:如果两个托盘都不在货架上,则需要入库
|
||||
// 7. 判断是否需要入库
|
||||
boolean needStoreIn = ObjectUtil.isEmpty(sourcePoint) && ObjectUtil.isEmpty(targetPoint);
|
||||
|
||||
// 9. 组装返回结果
|
||||
// 8. 组装成功返回结果
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("success", true);
|
||||
result.put("message", "合托操作成功");
|
||||
@@ -927,14 +1061,16 @@ public class HandheldServiceImpl implements HandheldService {
|
||||
|
||||
return result;
|
||||
} catch (BadRequestException e) {
|
||||
throw e;
|
||||
throw e; // 直接抛给上层,最终返回给前端
|
||||
}
|
||||
}
|
||||
} catch (BadRequestException e) {
|
||||
throw e;
|
||||
throw e; // 业务异常直接返回给前端
|
||||
} catch (Exception 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);
|
||||
|
||||
/**
|
||||
* 根据载具号查找物料信息
|
||||
* @param vehicle_code
|
||||
* @return
|
||||
*/
|
||||
List<Map> selectGroupByVehicleCode(String vehicle_code);
|
||||
|
||||
/**
|
||||
* 根据载具号查找物料信息
|
||||
* @param entity
|
||||
|
||||
@@ -27,6 +27,8 @@ public interface SchBaseVehiclematerialgroupMapper extends BaseMapper<SchBaseVeh
|
||||
|
||||
List<Map> selectMaterialByVehicleCode(String vehicle_code);
|
||||
|
||||
List<Map> selectGroupByVehicleCode(String vehicle_code);
|
||||
|
||||
IPage<SchBaseVehiclematerialgroup> selectAllByPage(IPage<SchBaseVehiclematerialgroup> page, @Param("query") SchBaseVehiclematerialgroupQuery query);
|
||||
|
||||
List<String> selectMaterialPathByIsEmpty();
|
||||
|
||||
@@ -65,6 +65,19 @@
|
||||
GROUP BY
|
||||
sbv.order_code
|
||||
</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">
|
||||
WITH RankedVehicles AS (
|
||||
SELECT
|
||||
|
||||
@@ -218,6 +218,12 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
|
||||
})).collect(Collectors.toList());
|
||||
return maps;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map> selectGroupByVehicleCode(String vehicle_code) {
|
||||
List<Map> maps = vehiclematerialgroupMapper.selectGroupByVehicleCode(vehicle_code);
|
||||
return maps;
|
||||
}
|
||||
@Override
|
||||
public List<SchBaseVehiclematerialgroup> selectByVehicleCode(JSONObject entity) {
|
||||
List<SchBaseVehiclematerialgroup> schBaseVehiclematerialgroups = vehiclematerialgroupMapper.selectList(Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class)
|
||||
@@ -228,15 +234,15 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
|
||||
if (ObjectUtil.isNotEmpty(schBaseVehiclematerialgroups)) {
|
||||
// 使用Map存储合并后的结果,key是合并条件的组合
|
||||
Map<String, SchBaseVehiclematerialgroup> mergedMap = new HashMap<>();
|
||||
|
||||
|
||||
for (SchBaseVehiclematerialgroup group : schBaseVehiclematerialgroups) {
|
||||
// 创建合并条件的key
|
||||
String key = group.getVehicle_code() + ":" +
|
||||
group.getRegion_code() + ":" +
|
||||
group.getJob_name() + ":" +
|
||||
group.getOrder_code() + ":" +
|
||||
String key = group.getVehicle_code() + ":" +
|
||||
group.getRegion_code() + ":" +
|
||||
group.getJob_name() + ":" +
|
||||
group.getOrder_code() + ":" +
|
||||
group.getMaterial_id();
|
||||
|
||||
|
||||
if (mergedMap.containsKey(key)) {
|
||||
// 如果已存在,累加material_qty
|
||||
SchBaseVehiclematerialgroup existingGroup = mergedMap.get(key);
|
||||
@@ -246,10 +252,10 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
|
||||
mergedMap.put(key, group);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 将Map转换为List
|
||||
schBaseVehiclematerialgroups = new ArrayList<>(mergedMap.values());
|
||||
|
||||
|
||||
schBaseVehiclematerialgroups.forEach(item -> {
|
||||
if (StrUtil.isEmpty(item.getRegion_code())) {
|
||||
item.setRegion_code("未知");
|
||||
|
||||
@@ -870,7 +870,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
)).values()
|
||||
.stream()
|
||||
.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;
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,12 @@ public class RackTask extends AbstractTask {
|
||||
}
|
||||
SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(regionCode,
|
||||
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)) {
|
||||
task.setRemark("未找到所需点位!");
|
||||
taskService.updateById(task);
|
||||
|
||||
@@ -57,6 +57,8 @@ public class ToStoreHouseTask extends AbstractTask {
|
||||
// 配置信息
|
||||
for (SchBaseTask task : tasks) {
|
||||
SchBasePoint schBasePoint = null;
|
||||
|
||||
//这个修改 优先拿在满拖库的
|
||||
if (task.getVehicle_type().equals(VehicleTypeEnum.FRAME_R02.getVehicleCode()) || task.getVehicle_type().equals(VehicleTypeEnum.FRAME_R01.getVehicleCode())) {
|
||||
schBasePoint = schBasePointService.selectByEmptyCage(RegionEnum.DDLK.getRegion_code(),
|
||||
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.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
@@ -40,7 +41,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* sorting将满料放到线边库
|
||||
@@ -141,22 +145,43 @@ public class PcOperationSMTTask extends AbstractTask {
|
||||
sendMaterVo.getMaterial_info().forEach(materVo -> {
|
||||
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()));
|
||||
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)) {
|
||||
Map<String, String> finalJobNameMap = jobNameMap;
|
||||
sendMaterVos.forEach(smv -> {
|
||||
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
|
||||
schBaseVehiclematerialgroup.setVehicle_code(sendMaterVo.getVehicle_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.setRegion_code(sendMaterVo.getRegion_code());
|
||||
schBaseVehiclematerialgroup.setOrder_code(smv.getOrder_code());
|
||||
schBaseVehiclematerialgroup.setDue_date(smv.getDue_date());
|
||||
schBaseVehiclematerialgroup.setPriority(smv.getPriority());
|
||||
if (CollectionUtil.isNotEmpty(finalJobNameMap)) {
|
||||
schBaseVehiclematerialgroup.setJob_name(finalJobNameMap.get(schBaseVehiclematerialgroup.getMaterial_id()));
|
||||
}
|
||||
schBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
|
||||
});
|
||||
}
|
||||
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
|
||||
@@ -37,9 +37,20 @@
|
||||
<div class="search-wraper">
|
||||
<el-row class="filter-wraper" type="flex" justify="space-between" align="middle">
|
||||
<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-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">
|
||||
<button class="search_button" @click="searchOrder">搜索</button>
|
||||
<button class="search_button search_button_dis" @click="resetSearch">重置</button>
|
||||
@@ -406,6 +417,9 @@ export default {
|
||||
imgSrc: '',
|
||||
alertShow: false,
|
||||
searchKey: '',
|
||||
// 工序筛选相关
|
||||
selectedProcess: '',
|
||||
processList: [],
|
||||
// 异常信息相关属性
|
||||
hasError: false,
|
||||
errorDetails: [],
|
||||
@@ -616,13 +630,24 @@ export default {
|
||||
// 搜索订单
|
||||
searchOrder() {
|
||||
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
|
||||
})
|
||||
},
|
||||
// 重置搜索条件
|
||||
resetSearch() {
|
||||
this.searchKey = ''
|
||||
this.selectedProcess = ''
|
||||
this.searchOrder()
|
||||
},
|
||||
// 设置表格行类名
|
||||
|
||||
Reference in New Issue
Block a user