Compare commits

...

3 Commits

Author SHA1 Message Date
7e555c7b32 opt: 压片前段业务 2025-12-25 09:57:51 +08:00
c9bb61c6cd opt: 托盘叫料、取料 2025-12-11 15:57:45 +08:00
fe242a9175 opt: 入库 2025-12-10 16:02:17 +08:00
20 changed files with 724 additions and 89 deletions

View File

@@ -124,5 +124,5 @@ public interface IStructattrService extends IService<Structattr> {
*/
List<MdPbStoragevehicleextDto> outBoundSectDiv(StrategyStructParam param);
List<Structattr> getByVehicleCode(String search, boolean flag);
List<Structattr> getByVehicleCode(String search, String lockType, boolean flag);
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.basedata_manage.service.dao;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -239,6 +240,7 @@ public class Structattr implements Serializable {
/**
* 存储载具号
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String storagevehicle_code;
/**

View File

@@ -427,12 +427,12 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
}
@Override
public List<Structattr> getByVehicleCode(String search, boolean flag) {
public List<Structattr> getByVehicleCode(String search, String lockType, boolean flag) {
LambdaQueryWrapper<Structattr> query = new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getLock_type, lockType)
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(Structattr::getStruct_code, search)
.eq(Structattr::getStoragevehicle_code, search)
.eq(flag, Structattr::getIs_emptyvehicle, "1");
return this.list(query);
}

View File

@@ -20,7 +20,7 @@ import javax.annotation.Resource;
import javax.validation.Valid;
/**
* 手持普通搬运任务
* 空载具管理
* @Author: lyd
* @Date: 2025/11/24
*/

View File

@@ -54,7 +54,7 @@ public interface PdaBuildParamService {
*/
JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr);
JSONObject buildManuaOutDivData(JSONObject param, String invId);
JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId);
JSONObject buildOutAllSetData(SchBasePoint endPoint, String invId);
}

View File

@@ -0,0 +1,65 @@
package org.nl.wms.pda.general_management.service.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* @Author: lyd
* @Date: 2025/12/10
*/
@Data
public class TurnoverDetailDto {
@JsonProperty("turnout_struct_code")
private String turnout_struct_code;
@JsonProperty("qty_unit_id")
private String qty_unit_id;
@JsonProperty("stor_id")
private String stor_id;
@JsonProperty("storagevehicle_code")
private String storagevehicle_code;
@JsonProperty("qty")
private Integer qty;
@JsonProperty("sect_id")
private String sect_id;
@JsonProperty("qty_unit_name")
private String qty_unit_name;
@JsonProperty("struct_id")
private String struct_id;
@JsonProperty("material_id")
private String material_id;
@JsonProperty("pcsn")
private String pcsn;
@JsonProperty("turnout_sect_code")
private String turnout_sect_code;
@JsonProperty("frozen_qty")
private Integer frozen_qty;
@JsonProperty("turnout_sect_name")
private String turnout_sect_name;
@JsonProperty("material_name")
private String material_name;
@JsonProperty("storagevehicleext_id")
private String storagevehicleext_id;
@JsonProperty("material_code")
private String material_code;
@JsonProperty("plan_qty")
private Integer plan_qty;
@JsonProperty("edit")
private Boolean edit = Boolean.TRUE;
}

View File

@@ -3,19 +3,25 @@ package org.nl.wms.pda.general_management.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.list.TreeList;
import org.nl.common.exception.BadRequestException;
import org.nl.config.MapOf;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.pda.general_management.service.PdaBuildParamService;
import org.nl.wms.pda.general_management.service.PdaCommonService;
import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam;
import org.nl.wms.pda.general_management.service.dto.TurnoverDetailDto;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.IOutBillService;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
@@ -47,6 +53,8 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
private IMdPbGroupplateService groupplateService;
@Resource
private IRawAssistIStorService rawAssistIStorService;
@Resource
private IOutBillService outBillService;
@Override
public void doGroupPallet(JSONObject param, String vehicleCode) {
@@ -154,21 +162,85 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
public JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr) {
JSONObject insertInvObj = new JSONObject();
JSONArray rows = param.getJSONArray("rows");
JSONObject row = rows.getJSONObject(0);
List<JSONObject> result = filterAndSumByMaterialIdAndPcsn(rows);
List<JSONObject> rowList = new ArrayList<>();
for (JSONObject rowObj : result) {
List<JSONObject> temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", row.getString("stor_id")
, "sect_id", row.getString("sect_id")
, "struct_code", row.getString("struct_code")
, "material_code", row.getString("material_code")
, "pcsn", rowObj.getString("pcsn")
, "vehicle_code", row.getString("vehicle_code")));
if (temps.size() > 0) {
JSONObject temp = temps.get(0);
temp.put("plan_qty", rowObj.getString("qty"));
rowList.add(temp);
}
}
insertInvObj.put("stor_id", sectattr.getStor_id());
insertInvObj.put("bill_status", "10");
insertInvObj.put("bill_type", param.getString("bill_type"));
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
insertInvObj.put("tableData", rows);
insertInvObj.put("tableData", rowList);
return insertInvObj;
}
/**
* 过滤统计material_id和pcsn相同的数据并将qty相加
*/
public static List<JSONObject> filterAndSumByMaterialIdAndPcsn(JSONArray jsonArray) {
// 使用Stream进行分组按material_id和pcsn作为组合键
Map<String, List<JSONObject>> groupedData = jsonArray.stream()
.map(obj -> (JSONObject) obj)
.collect(Collectors.groupingBy(obj ->
obj.getString("material_id") + "_" + obj.getString("pcsn")
));
// 对每个分组进行合并累加qty
return groupedData.values().stream()
.map(group -> {
// 取第一个对象作为基础保留除了qty外的其他信息
JSONObject baseObj = new JSONObject(group.get(0));
// 计算该分组中所有对象的qty总和
int totalQty = group.stream()
.mapToInt(obj -> obj.getInteger("qty"))
.sum();
// 更新qty为总和
baseObj.put("qty", totalQty);
// 如果需要,可以添加一个字段表示合并了多少条记录
baseObj.put("merged_count", group.size());
return baseObj;
})
.collect(Collectors.toList());
}
@Override
public JSONObject buildManuaOutDivData(JSONObject param, String invId) {
public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId) {
JSONObject outDivObj = new JSONObject();
JSONObject row = param.getJSONArray("rows").getJSONObject(0);
row.put("iostorinv_id", invId);
outDivObj.put("row", row);
outDivObj.put("rows", param.getJSONArray("rows"));
List<MdPbStoragevehicleextDto> dtoList = outBillService.queryAvailableSpecifiedInv(MapOf.of("stor_id", outStructAttr.getStor_id()
, "material_code", row.getString("material_code")
, "sect_id", outStructAttr.getSect_id()
, "struct_code", row.getString("struct_code")
, "pcsn", row.getString("pcsn")
, "vehicle_code", row.getString("vehicle_code")));
if (dtoList.size() == 0) {
throw new BadRequestException("未找到库存信息!");
}
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(dtoList.get(0)));
List<Map<String, Object>> invDtls = ioStorInvDtlMapper.selectMaps(new LambdaQueryWrapper<IOStorInvDtl>()
.eq(IOStorInvDtl::getIostorinv_id, invId));
for (Map<String, Object> invDtl : invDtls) {
invDtl.put("storagevehicle_code", row.getString("vehicle_code"));
}
jsonObject.put("iostorinv_id", invId);
outDivObj.put("row", jsonObject);
outDivObj.put("rows", invDtls);
return outDivObj;
}

View File

@@ -9,13 +9,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService;
import org.nl.wms.basedata_manage.service.ISectattrService;
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.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;
@@ -26,6 +28,7 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.PalletOutTask;
import org.nl.wms.sch_manage.service.util.tasks.PreProcessingInTask;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
@@ -33,6 +36,11 @@ import org.nl.wms.warehouse_management.service.IOutBillService;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.VehicleInService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
@@ -40,10 +48,10 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.nl.common.utils.ValidationUtil.*;
@@ -84,6 +92,14 @@ public class PdaProductionServiceImpl implements PdaProductionService {
private TaskFactory taskFactory;
@Resource
private RedissonClient redissonClient;
@Resource
private PalletOutTask palletOutTask;
@Resource
private IStructattrService structattrService;
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
@Resource
private IOStorInvDtlMapper ioStorInvDtlMapper;
@Override
public PdaResponse getGroupInfo(JSONObject param) {
// search;
@@ -95,7 +111,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("载具不存在!");
}
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search);
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1"));
return PdaResponse.requestParamOk(res);
}
@@ -110,14 +126,13 @@ public class PdaProductionServiceImpl implements PdaProductionService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse confirmCallMaterial(JSONObject param) {
// point_code, rowssect_code
// point_code, rowsect_code
log.info("手持托盘叫料:{}", param);
if (ObjectUtil.isEmpty(param.get("point_code"))) {
throw new BadRequestException("请输入要料点!");
}
if (ObjectUtil.isEmpty(param.get("rows"))) {
if (ObjectUtil.isEmpty(param.get("row"))) {
throw new BadRequestException("请选择呼叫的物料!");
}
String pointCode = param.getString("point_code");
@@ -125,24 +140,13 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(endPoint)) {
throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!");
}
String sectCode = param.getString("sect_code");
if (ObjectUtil.isEmpty(sectCode)) {
throw new BadRequestException("请选择仓库!");
}
Sectattr outStructAttr = sectattrService.findByCode(sectCode, true);
if (ObjectUtil.isEmpty(outStructAttr)) {
throw new BadRequestException("库区不存在或者被禁用!");
}
// 1 创建出库单、明细、分配明细
param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("原辅料出库"));
JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, outStructAttr);
String invId = outBillService.insertDtl(invObj);
// 2 调用分配
JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, invId);
outBillService.manualDiv(divObj);
// 3 创建任务
JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(endPoint, invId);
outBillService.allSetPoint(jsonMst);
JSONObject row = param.getJSONObject("row");
// 创建任务
JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", row.getString("struct_code"));
taskParam.put("point_code2", param.getString("point_code"));
taskParam.put("vehicle_code", row.getString("vehicle_code"));
palletOutTask.create(taskParam);
return PdaResponse.requestOk("呼叫成功!");
}
@@ -152,7 +156,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("请输入袋号编码!");
}
List<JSONObject> groups = groupplateService.getPalletView(search, "1");
List<JSONObject> groups = groupplateService.getPalletView(search, Arrays.asList("1", "2"));
if (groups.size() != 1) {
throw new BadRequestException(groups.size() == 0 ? "组袋记录不存在,请先组袋!" : "组袋记录信息有误,请查询并清理后重试!");
}
@@ -167,7 +171,10 @@ public class PdaProductionServiceImpl implements PdaProductionService {
@Transactional(rollbackFor = Exception.class)
public PdaResponse takePalletMaterial(JSONObject param) {
log.info("手持取物料: {}", param);
// search、rows
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
// search、rows、total_qty
String search = param.getString("search");
// SchBasePoint point = pointService.getByPointCode(search, false);
// if (ObjectUtil.isNotEmpty(point)) {
@@ -178,39 +185,130 @@ public class PdaProductionServiceImpl implements PdaProductionService {
}
storagevehicleinfoService.getByCode(search);
JSONArray rows = param.getJSONArray("rows");
// 找到托盘的仓位
List<Structattr> startPoints = structattrService
.getByVehicleCode(rows.getJSONObject(0).getString("vehicle_code")
, IOSEnum.LOCK_TYPE.code("其他锁"), false);
if (startPoints.size() == 0) {
throw new BadRequestException("未找到当前托盘的原始库位信息!");
}
Structattr structattr = startPoints.get(0);
// 手动更新库存信息
// 1、创建出库单、明细、分配明细
// 1.1 单据表
String invId = IdUtil.getStringId();
IOStorInv ioStorInv = new IOStorInv();
ioStorInv.setIostorinv_id(invId);
ioStorInv.setBill_code(CodeUtil.getNewCode("OUT_STORE_CODE"));
ioStorInv.setBiz_date(DateUtil.format(new Date(), "yyyy-MM-dd"));
ioStorInv.setIo_type(IOSEnum.IO_TYPE.code("出库"));
ioStorInv.setDetail_count(1);
ioStorInv.setCreate_mode(IOSEnum.CREATE_MODE.code("终端产生"));
ioStorInv.setStor_id(structattr.getStor_id());
ioStorInv.setStor_code(structattr.getStor_code());
ioStorInv.setStor_name(structattr.getStor_name());
ioStorInv.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
ioStorInv.setBill_type(IOSEnum.OUT_BILL_TYPE.code("原辅料出库"));
ioStorInv.setBuss_type(IOSEnum.OUT_BILL_TYPE.code("原辅料出库").substring(0, 4));
ioStorInv.setIs_delete(BaseDataEnum.IS_YES_NOT.code(""));
ioStorInv.setIs_upload(BaseDataEnum.IS_YES_NOT.code(""));
ioStorInv.setInput_optid(currentUserId);
ioStorInv.setInput_optname(nickName);
ioStorInv.setInput_time(now);
ioStorInv.setUpdate_optid(currentUserId);
ioStorInv.setUpdate_optname(nickName);
ioStorInv.setUpdate_time(now);
ioStorInv.setTotal_qty(param.getBigDecimal("total_qty"));
ioStorInv.setDetail_count(rows.size());
outBillService.save(ioStorInv);
// 扣除组盘数据
List<GroupPlate> needAddOrUpdGroups = new ArrayList<>();
List<String> needDelGroups = new ArrayList<>();
List<MdPbStoragevehicleext> vehicleObjs = storagevehicleextService.list(new LambdaQueryWrapper<MdPbStoragevehicleext>()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, rows.getJSONObject(0).getString("vehicle_code")));
BigDecimal whileSub = new BigDecimal("0");
for (int i = 0; i < rows.size(); i++) {
JSONObject row = rows.getJSONObject(i);
GroupPlate delGroup = groupplateService.getById(row.getString("group_id"));
GroupPlate groupPlate = JSON.parseObject(row.toJSONString(), GroupPlate.class);
// groupPlate.setGroup_id(IdUtil.getStringId());
// groupPlate.setVehicle_code("");
// groupPlate.setStatus("0");
// groupPlate.setCreate_id(SecurityUtils.getCurrentUserId());
// groupPlate.setCreate_name(SecurityUtils.getCurrentNickName());
// groupPlate.setCreate_time(DateUtil.now());
// needAddOrUpdGroups.add(groupPlate);
// 其他需要删除
delGroup.setQty(delGroup.getQty().subtract(groupPlate.getQty()));
if (delGroup.getQty().equals(new BigDecimal("0"))) {
if (delGroup.getQty().compareTo(BigDecimal.ZERO) == 0) {
needDelGroups.add(delGroup.getGroup_id());
} else {
needAddOrUpdGroups.add(delGroup);
}
whileSub.add(groupPlate.getQty());
// 1.2 单据明细
IOStorInvDtl dtl = new IOStorInvDtl();
dtl.setIostorinvdtl_id(IdUtil.getStringId());
dtl.setIostorinv_id(invId);
dtl.setSeq_no("1");
dtl.setMaterial_id(row.getString("material_id"));
dtl.setPcsn(groupPlate.getPcsn());
dtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
dtl.setQty_unit_id(groupPlate.getQty_unit_id());
dtl.setQty_unit_name(groupPlate.getQty_unit_name());
dtl.setPlan_qty(groupPlate.getQty());
dtl.setAssign_qty(groupPlate.getQty());
dtl.setUnassign_qty(BigDecimal.ZERO);
ioStorInvDtlMapper.insert(dtl);
// 1.3 分配明细
IOStorInvDis ioStorInvDis = new IOStorInvDis();
ioStorInvDis.setIostorinvdis_id(IdUtil.getStringId());
ioStorInvDis.setIostorinv_id(dtl.getIostorinv_id());
ioStorInvDis.setIostorinvdtl_id(dtl.getIostorinvdtl_id());
ioStorInvDis.setSeq_no("1");
ioStorInvDis.setSect_id(structattr.getSect_id());
ioStorInvDis.setPcsn(groupPlate.getPcsn());
ioStorInvDis.setMaterial_id(row.getString("material_id"));
ioStorInvDis.setSect_name(structattr.getSect_name());
ioStorInvDis.setSect_code(structattr.getSect_code());
ioStorInvDis.setStruct_id(structattr.getStruct_id());
ioStorInvDis.setStruct_name(structattr.getStruct_name());
ioStorInvDis.setStruct_code(structattr.getStruct_code());
ioStorInvDis.setStoragevehicle_code(row.getString("vehicle_code"));
ioStorInvDis.setIs_issued(BaseDataEnum.IS_YES_NOT.code(""));
ioStorInvDis.setQty_unit_id(groupPlate.getQty_unit_id());
ioStorInvDis.setQty_unit_name(groupPlate.getQty_unit_name());
ioStorInvDis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("完成"));
ioStorInvDis.setPlan_qty(groupPlate.getQty());
ioStorInvDisMapper.insert(ioStorInvDis);
vehicleObjs.stream()
.filter(vehicle ->
vehicle.getStoragevehicle_code().equals(row.getString("vehicle_code")) &&
vehicle.getMaterial_id().equals(row.getString("material_id")) &&
vehicle.getPcsn().equals(row.getString("pcsn")))
.findFirst()
.ifPresent(vehicle -> {
BigDecimal newQty = vehicle.getCanuse_qty().subtract(row.getBigDecimal("qty"));
vehicle.setCanuse_qty(newQty.max(BigDecimal.ZERO));
});
}
List<MdPbStoragevehicleext> zeroQtyVehicles = vehicleObjs.stream()
.filter(vehicle -> vehicle.getCanuse_qty().compareTo(BigDecimal.ZERO) == 0)
.collect(Collectors.toList());
List<MdPbStoragevehicleext> nonZeroQtyVehicles = vehicleObjs.stream()
.filter(vehicle -> vehicle.getCanuse_qty().compareTo(BigDecimal.ZERO) != 0)
.collect(Collectors.toList());
groupplateService.saveOrUpdateBatch(needAddOrUpdGroups);
groupplateService.removeByIds(needDelGroups);
// 托盘数量修改
MdPbStoragevehicleext vehicleObj = storagevehicleextService.getOne(new LambdaQueryWrapper<MdPbStoragevehicleext>()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, rows.getJSONObject(0).getString("vehicle_code")));
vehicleObj.setCanuse_qty(vehicleObj.getCanuse_qty().subtract(whileSub));
vehicleObj.setUpdate_optid(SecurityUtils.getCurrentUserId());
vehicleObj.setUpdate_optname(SecurityUtils.getCurrentNickName());
vehicleObj.setUpdate_time(DateUtil.now());
storagevehicleextService.updateById(vehicleObj);
if (nonZeroQtyVehicles.size() > 0) {
storagevehicleextService.updateBatchById(nonZeroQtyVehicles);
}
if (zeroQtyVehicles.size() > 0) {
storagevehicleextService.removeByIds(zeroQtyVehicles.stream().map(MdPbStoragevehicleext::getStoragevehicleext_id).collect(Collectors.toList()));
}
if (nonZeroQtyVehicles.size() == 0) {
// 说明托盘没东西了,点位释放
structattr.setLock_type(IOSEnum.LOCK_TYPE.code("未锁定"));
structattr.setStoragevehicle_code(null);
structattr.setIs_emptyvehicle("0");
structattrService.updateById(structattr);
}
return PdaResponse.requestOk("取料成功!");
}
@@ -232,6 +330,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse leftoverMaterialBack(JSONObject param) {
// search, rows 按照托盘号原来的库区回去
String search = param.getString("search");
@@ -242,21 +341,33 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
throw new BadRequestException("该点位没有载具信息!");
}
// List<GroupPlate> list = groupplateService.list(new LambdaQueryWrapper<GroupPlate>()
// .eq(GroupPlate::getVehicle_code, search)
// .ne(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")));
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search);
List<Structattr> points = structattrService.getByVehicleCode(startPoint.getVehicle_code()
, IOSEnum.LOCK_TYPE.code("其他锁"), false);
if (points.size() != 1) {
throw new BadRequestException(points.size() > 1
? "该托盘号绑定在多个点位" + points.stream().map(Structattr::getStruct_code).collect(Collectors.toList()) + ",请检查!"
: "该托盘号未绑定到点位或者点位被禁用或者点位以上锁,请检查!");
}
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(startPoint.getVehicle_code()
, Arrays.asList("2"));
if (res.size() > 0) {
log.info("剩料回库");
// 剩料回库
param.put("rows", res);
Sectattr sectattr = sectattrService.findByCode(startPoint.getOut_sect(), false);
Structattr structattr = points.get(0);
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);
invObj.put("nonChecked", "1");
String invId = rawAssistIStorService.insertDtl(invObj);
// 2 调用分配
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true);
// 2 调用手动分配
param.put("sect_code", structattr.getSect_code());
param.put("sect_name", structattr.getSect_name());
param.put("struct_id", structattr.getStruct_id());
param.put("struct_name", structattr.getStruct_name());
param.put("struct_code", structattr.getStruct_code());
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, false);
rawAssistIStorService.divStruct(divObj);
// 3 创建任务
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId);
@@ -265,7 +376,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
log.info("空载具回库");
// 空载具回库
JSONObject vin = new JSONObject();
vin.put("storagevehicle_code", search);
vin.put("storagevehicle_code", startPoint.getVehicle_code());
vin.put("sect_code", startPoint.getOut_sect());
vin.put("point_code", startPoint.getPoint_code());
vehicleInService.create(vin);
@@ -276,7 +387,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
@Override
public PdaResponse preProcessingDown(JSONObject param) {
log.info("加工下料:{}", param);
// vehicle_code、 point_code, region_code, 。。。rows
// 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);
@@ -290,7 +401,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
throw new BadRequestException("该点位已创建过任务!");
}
String vehicleCode = param.getString("vehicle_code");
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(vehicleCode);
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(vehicleCode, Arrays.asList("1"));
if (res.size() == 0) {
throw new BadRequestException("当前托盘号不存在物料信息,请检查!");
}
@@ -333,6 +444,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
@Override
public PdaResponse receivedIn(JSONObject param) {
log.info("拆包缓冲间确认入库:{}", param);
assertNotBlankJson(param, "参数不能为空!", "point_code", "vehicle_code", "sect_code", "rows");
RLock lock = redissonClient.getLock("lock:confirmPalletAssemblyIn");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
@@ -340,9 +452,6 @@ public class PdaProductionServiceImpl implements PdaProductionService {
// parampoint_code点位, vehicle_code, sect_coderows
String search = param.getString("point_code");
String sect_code = param.getString("sect_code");
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("请输入点位编码!");
}
SchBasePoint startPoint = pointService.getByPointCode(search, true);
if (ObjectUtil.isEmpty(startPoint)) {
throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!");
@@ -350,9 +459,6 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
throw new BadRequestException("点位载具号为空!");
}
if (ObjectUtil.isEmpty(sect_code)) {
throw new BadRequestException("请选择入库库区!");
}
Sectattr sectattr = sectattrService.findByCode(sect_code, true);
if (ObjectUtil.isEmpty(sectattr)) {
throw new BadRequestException("库区不存在或者被禁用!");
@@ -391,7 +497,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("载具不存在!");
}
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search);
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1"));
return PdaResponse.requestParamOk(res);
}
}

View File

@@ -27,6 +27,7 @@ import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -63,7 +64,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("请输入袋号编码!");
}
List<JSONObject> groups = groupplateService.getPalletView(search, "0");
List<JSONObject> groups = groupplateService.getPalletView(search, Arrays.asList("0"));
if (groups.size() != 1) {
throw new BadRequestException(groups.size() == 0 ? "组袋记录不存在,请先组袋!" : "组袋记录信息有误,请查询并清理后重试!");
}
@@ -88,7 +89,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
Structattr startStruct = structattrService.getByCode(search);
if (ObjectUtil.isEmpty(startStruct)) {
vehicleCode = search;
List<Structattr> points = structattrService.getByVehicleCode(search, true);
List<Structattr> points = structattrService.getByVehicleCode(search, IOSEnum.LOCK_TYPE.code("未锁定"), true);
if (points.size() != 1) {
throw new BadRequestException(points.size() > 1
? "该托盘号绑定在多个点位" + points.stream().map(Structattr::getStruct_code).collect(Collectors.toList()) + ",请检查!"

View File

@@ -0,0 +1,235 @@
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 com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.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.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IOutBillService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_management.service.dao.mapper.GroupPlateMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* 托盘出库任务
* @Author: lyd
* @Date: 2025/12/10
*/
@Component(value = "PalletOutTask")
@TaskType("PalletOutTask")
public class PalletOutTask extends AbstractTask {
/**
* 任务服务
*/
@Autowired
private ISchBaseTaskService taskService;
/**
* 出库服务
*/
@Resource
private IOutBillService outBillService;
/**
* 分配明细mapper
*/
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
/**
* 点位服务
*/
@Resource
private ISchBasePointService iSchBasePointService;
/*
* 组盘记录服务
*/
@Resource
private GroupPlateMapper groupPlateMapper;
@Resource
private IStructattrService structattrService;
@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.CREATED.getCode());
task.setConfig_code(PalletOutTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setMaterial_id(json.getString("material_id"));
task.setMaterial_qty(json.getBigDecimal("material_qty"));
task.setGroup_id(json.getString("group_id"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setTask_type(TaskEnum.TASK_TYPE.code("料箱"));
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);
// 点位上锁
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
.eq(Structattr::getStruct_code, task.getPoint_code1()));
// 下发任务
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.setPriority(taskDao.getPriority());
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setIs_wait(taskDao.getIs_wait());
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)) {
this.executingTask(taskObj);
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("该任务不存在");
}
if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
throw new BadRequestException("任务状态必须为生成才能取消任务");
}
this.cancelTask(taskObj);
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 更新终点
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
.set(SchBasePoint::getIng_task_code, taskObj.getTask_id())
);
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
this.taskConfirm(taskObj.getTask_code());
}
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj) {
// 取消任务
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code(""))
.set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode())
.set(SchBaseTask::getRemark, "已取消")
.eq(SchBaseTask::getTask_id, taskObj.getTask_id())
);
// 点位上锁
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getStruct_code, taskObj.getPoint_code1()));
// 更新任务状态
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark("已取消");
taskService.updateById(taskObj);
}
@Override
public void taskConfirm(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
// 删除组盘信息
groupPlateMapper.delete(
new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getVehicle_code, taskObj.getVehicle_code())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
);
}
}

View File

@@ -46,7 +46,7 @@ public class PreProcessingInTask extends AbstractTask {
@Override
public String create(JSONObject json) {
// 获取终点
List<SchBasePoint> points = pointService.getCanUsePointByRegion(json.getString("region_code"));
List<SchBasePoint> points = pointService.getCanUsePointByRegion(json.getString("sect_code"));
if (ObjectUtil.isEmpty(points)) {
throw new BadRequestException("暂无可用点位!");
}
@@ -55,7 +55,7 @@ public class PreProcessingInTask extends AbstractTask {
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(TaskStatus.CREATE.getCode());
task.setTask_status(TaskStatus.CREATED.getCode());
task.setConfig_code(PreProcessingInTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code"));
task.setPoint_code2(point.getPoint_code());

View File

@@ -95,9 +95,15 @@ public interface IMdPbGroupplateService extends IService<GroupPlate> {
*/
List<GroupPlate> getByBagNo(String bagNo, String status);
List<JSONObject> getPalletView(String search, String status);
/**
*
* @param search 袋号
* @param status
* @return
*/
List<JSONObject> getPalletView(String search, List<String> status);
List<JSONObject> getPalletViewByVehicleCode(String search);
List<JSONObject> getPalletViewByVehicleCode(String search, List<String> status);
List<JSONObject> getStockGroupInfo(JSONObject param);
}

View File

@@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.pda.general_management.service.dto.TurnoverDetailDto;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -179,4 +181,8 @@ public interface IOutBillService extends IService<IOStorInv> {
* @param ioStorInv 主表实体类
*/
void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv);
List<JSONObject> getCanuseSpecifiedIvt(Map param);
List<MdPbStoragevehicleextDto> queryAvailableSpecifiedInv(Map param);
}

View File

@@ -5,10 +5,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.pda.general_management.service.dto.TurnoverDetailDto;
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -29,4 +32,7 @@ public interface IOStorInvMapper extends BaseMapper<IOStorInv> {
List<JSONObject> getVehicleGroup ( List<String> collect);
List<JSONObject> getCanuseSpecifiedIvt(@Param("param")Map param);
List<MdPbStoragevehicleextDto> queryAvailableSpecifiedInv(@Param("param")Map param);
}

View File

@@ -213,4 +213,121 @@
</where>
ORDER BY gp.create_time DESC
</select>
<select id="getCanuseSpecifiedIvt"
resultType="com.alibaba.fastjson.JSONObject">
SELECT
ext.storagevehicleext_id,
ext.storagevehicle_code,
ext.material_id,
material.material_code,
material.material_name,
ext.pcsn,
ext.qty_unit_id,
ext.qty_unit_name,
ext.canuse_qty AS qty,
ext.canuse_qty AS plan_qty,
ext.frozen_qty,
attr.sect_name AS turnout_sect_name,
attr.sect_code AS turnout_sect_code,
attr.sect_id,
attr.stor_id,
attr.struct_id,
attr.struct_code AS turnout_struct_code
FROM
md_pb_storagevehicleext ext
INNER JOIN md_me_materialbase material ON material.material_id = ext.material_id
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
<where>
attr.lock_type = '0'
AND attr.is_used = "1"
AND ext.canuse_qty > 0
<if test="param.stor_id != null and param.stor_id != ''">
AND
attr.stor_id LIKE #{param.stor_id}
</if>
<if test="param.sect_id != null and param.sect_id != ''">
AND
attr.sect_id = #{param.sect_id}
</if>
<if test="param.struct_code != null and param.struct_code != ''">
AND
attr.struct_code LIKE #{param.struct_code}
</if>
<if test="param.material_code != null and param.material_code != ''">
AND
material.material_code LIKE #{param.material_code}
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn = #{param.pcsn}
</if>
<if test="param.vehilcle_code != null and param.vehilcle_code != ''">
AND
ext.storagevehicle_code = #{param.vehilcle_code}
</if>
</where>
ORDER BY ext.insert_time Desc
</select>
<select id="queryAvailableSpecifiedInv"
resultType="org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto">
SELECT
ext.storagevehicleext_id,
ext.storagevehicle_code,
ext.pcsn,
ext.qty_unit_name,
ext.canuse_qty,
ext.frozen_qty,
ext.remark,
ext.insert_time,
attr.sect_id,
attr.sect_code,
attr.sect_name,
attr.struct_id,
attr.struct_code,
attr.struct_name,
mater.material_code,
mater.material_name
FROM
md_pb_storagevehicleext ext
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
INNER JOIN md_me_materialbase mater ON mater.material_id = ext.material_id
<where>
1 = 1
<if test="param.stor_id != null and param.stor_id != ''">
AND
attr.stor_id = #{param.stor_id}
</if>
<if test="param.material_code != null and param.material_code != ''">
AND
mater.material_code = #{param.material_code}
</if>
<if test="param.sect_id != null and param.sect_id != ''">
AND
attr.sect_id = #{param.sect_id}
</if>
<if test="param.struct_code != null and param.struct_code != ''">
AND
(attr.struct_code LIKE CONCAT('%', #{param.struct_code}, '%'))
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn LIKE #{param.pcsn}
</if>
<if test="param.vehicle_code != null and param.vehicle_code != ''">
AND
ext.storagevehicle_code = #{param.vehicle_code}
</if>
</where>
</select>
</mapper>

View File

@@ -64,9 +64,9 @@ public interface MdPbGroupplateMapper extends BaseMapper<GroupPlate> {
*/
List<JSONObject> pdaGetPointDtl(@Param("param") JSONObject whereJson);
List<JSONObject> getPalletView(String search, String status);
List<JSONObject> getPalletView(String search, List<String> status);
List<JSONObject> getPalletViewByVehicleCode(String search);
List<JSONObject> getPalletViewByVehicleCode(String search, List<String> status);
List<JSONObject> getStockGroupInfo(JSONObject param);
}

View File

@@ -149,7 +149,10 @@
`md_pb_groupplate` g
LEFT JOIN md_me_materialbase m ON m.material_id = g.material_id
LEFT JOIN md_cs_supplierbase s ON s.supp_code = g.supp_code
WHERE g.bag_code = #{search} AND g.`status` = #{status}
WHERE g.bag_code = #{search} AND g.`status` IN
<foreach collection="status" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
<select id="getPalletViewByVehicleCode" resultType="com.alibaba.fastjson.JSONObject">
SELECT
@@ -164,7 +167,10 @@
`md_pb_groupplate` g
LEFT JOIN md_me_materialbase m ON m.material_id = g.material_id
LEFT JOIN md_cs_supplierbase s ON s.supp_code = g.supp_code
WHERE g.vehicle_code = #{search} AND g.`status` = '1'
WHERE g.vehicle_code = #{search} AND g.`status` IN
<foreach collection="status" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
<select id="getStockGroupInfo" resultType="com.alibaba.fastjson.JSONObject">
SELECT

View File

@@ -190,13 +190,13 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
}
@Override
public List<JSONObject> getPalletView(String search, String status) {
public List<JSONObject> getPalletView(String search, List<String> status) {
return this.baseMapper.getPalletView(search, status);
}
@Override
public List<JSONObject> getPalletViewByVehicleCode(String search) {
return this.baseMapper.getPalletViewByVehicleCode(search);
public List<JSONObject> getPalletViewByVehicleCode(String search, List<String> status) {
return this.baseMapper.getPalletViewByVehicleCode(search, status);
}
@Override

View File

@@ -30,6 +30,7 @@ import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.pda.general_management.service.dto.TurnoverDetailDto;
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;
@@ -1121,6 +1122,16 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
ioStorInvDisMapper.updateById(dis);
}
@Override
public List<JSONObject> getCanuseSpecifiedIvt(Map param) {
return this.baseMapper.getCanuseSpecifiedIvt(param);
}
@Override
public List<MdPbStoragevehicleextDto> queryAvailableSpecifiedInv(Map param) {
return this.baseMapper.queryAvailableSpecifiedInv(param);
}
@Override
@Transactional
public void confirm(JSONObject whereJson) {

View File

@@ -239,9 +239,11 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
//判断该载具编号是否已经存在库内
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class).eq(Structattr::getStoragevehicle_code, row.get("storagevehicle_code")));
if (ObjectUtil.isEmpty(whereJson.get("nonChecked"))) {
if (ObjectUtil.isNotEmpty(structattr)) {
throw new BadRequestException("载具编码:" + row.get("storagevehicle_code") + "已存在库内,请对数据进行核实!");
}
}
ioStorInvDtlMapper.insert(ioStorInvDtl.toJavaObject(IOStorInvDtl.class));