opt: 入库

This commit is contained in:
2025-12-10 16:02:17 +08:00
parent a1ce68f74a
commit fe242a9175
9 changed files with 257 additions and 15 deletions

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,56 @@ 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<String> list = new TreeList<>();
for (int i = 0; i < rows.size(); i++) {
JSONObject object = rows.getJSONObject(i);
if (!list.contains(object.getString("pcsn"))) {
list.add(object.getString("pcsn"));
}
}
List<TurnoverDetailDto> rowss = new ArrayList<>();
for (String s : list) {
List<TurnoverDetailDto> 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", s
, "vehicle_code", row.getString("vehicle_code")));
if (temps.size() > 0) {
rowss.add(temps.get(0));
}
}
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", rowss);
return insertInvObj;
}
@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

@@ -110,7 +110,6 @@ public class PdaProductionServiceImpl implements PdaProductionService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse confirmCallMaterial(JSONObject param) {
// point_code, rowssect_code
log.info("手持托盘叫料:{}", param);
@@ -138,7 +137,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, outStructAttr);
String invId = outBillService.insertDtl(invObj);
// 2 调用分配
JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, invId);
JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, outStructAttr, invId);
outBillService.manualDiv(divObj);
// 3 创建任务
JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(endPoint, invId);
@@ -333,6 +332,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 +340,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 +347,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("库区不存在或者被禁用!");

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<TurnoverDetailDto> 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<TurnoverDetailDto> 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="org.nl.wms.pda.general_management.service.dto.TurnoverDetailDto">
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

@@ -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<TurnoverDetailDto> 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) {