feat: 原辅料直接入库

This commit is contained in:
2025-11-27 14:45:33 +08:00
parent bd74f763c7
commit 5a184130b5
3 changed files with 136 additions and 15 deletions

View File

@@ -34,6 +34,7 @@ public interface ISectattrService extends IService<Sectattr> {
* @return Sectattr
*/
Sectattr findById(String sect_id);
Sectattr findByCode(String sect_code, Boolean flag);
/**

View File

@@ -71,6 +71,14 @@ public class SectattrServiceImpl extends ServiceImpl<SectattrMapper, Sectattr> i
return sectattr;
}
@Override
public Sectattr findByCode(String sect_code, Boolean flag) {
LambdaQueryWrapper<Sectattr> queryWrapper = new LambdaQueryWrapper<>(Sectattr.class)
.eq(Sectattr::getSect_code, sect_code)
.eq(flag, Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code(""));
return sectattrMapper.selectOne(queryWrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(Sectattr dto) {

View File

@@ -1,18 +1,34 @@
package org.nl.wms.pda.general_management.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
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.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.pda.general_management.service.PdaPreTreatmentService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
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.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @Author: lyd
@@ -25,6 +41,16 @@ public class PdaPreTreatmentServiceImpl implements PdaPreTreatmentService {
private ISchBasePointService pointService;
@Resource
private IMdPbGroupplateService groupplateService;
@Resource
private IRawAssistIStorService rawAssistIStorService;
@Resource
private ISectattrService sectattrService;
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
@Resource
private IOStorInvDtlMapper ioStorInvDtlMapper;
@Resource
private RedissonClient redissonClient;
@Override
public PdaResponse getPalletAssembly(JSONObject param) {
String search = param.getString("search");
@@ -42,24 +68,110 @@ public class PdaPreTreatmentServiceImpl implements PdaPreTreatmentService {
return PdaResponse.requestParamOk(groups);
}
@SneakyThrows
@Override
public PdaResponse confirmPalletAssemblyIn(JSONObject param) {
log.info("拆包缓冲间确认入库:{}", param);
// paramsearch点位, rows
String search = param.getString("search");
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("请输入点位编码!");
RLock lock = redissonClient.getLock("lock:confirmPalletAssemblyIn");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
// paramsearch点位, rows
String search = param.getString("search");
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("请输入点位编码!");
}
SchBasePoint startPoint = pointService.getByPointCode(search, true);
if (ObjectUtil.isEmpty(startPoint)) {
throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!");
}
Sectattr sectattr = sectattrService.findByCode("WYL01", true);
if (ObjectUtil.isEmpty(sectattr)) {
throw new BadRequestException("库区【物料室原料区】不存在或者被禁用!");
}
// 1 创建入库单、明细、分配明细
Map<String, Object> invObj = doBuildInvObj(param.getJSONArray("rows"));
String invId = rawAssistIStorService.insertDtl(invObj);
// 2 调用分配 WYL01
Map<String, Object> divObj = buildDivStructData(sectattr, invId);
rawAssistIStorService.divStruct(divObj);
// 3 创建任务
Map<String, Object> jsonMst = buildTaskData(startPoint, invId);
rawAssistIStorService.divPoint(jsonMst);
} else {
throw new BadRequestException("速度太快啦,稍后再试...");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
SchBasePoint startPoint = pointService.getByPointCode(search, true);
if (ObjectUtil.isEmpty(startPoint)) {
throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!");
}
// 1 创建入库单、明细、分配明细
JSONObject insertInvObj = new JSONObject();
// 2 调用分配
// 3 创建任务
return PdaResponse.requestOk();
}
private Map<String, Object> buildTaskData(SchBasePoint startPoint, String invId) {
Map<String, Object> jsonMst = new HashMap<>();
jsonMst.put("point_code", startPoint.getPoint_code());
// 组织明细数据
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
new QueryWrapper<IOStorInvDtl>().lambda()
.eq(IOStorInvDtl::getIostorinv_id, invId)
);
// 查找分配明细
Map<String, Object> map = new HashMap<>();
map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id());
List<IOStorInvDisDto> disDtl = rawAssistIStorService.getDisDtl(map);
// 类型转换
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
disDtl.forEach(item -> tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)));
jsonMst.put("tableMater", tableMater);
return jsonMst;
}
private Map<String, Object> buildDivStructData(Sectattr sect, String invId) {
Map<String, Object> divObj = new HashMap<>();
divObj.put("sect_code", sect.getSect_code());
divObj.put("stor_code", sect.getStor_id());
divObj.put("checked", true);
List<IOStorInvDis> ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<IOStorInvDis>()
.eq(IOStorInvDis::getIostorinv_id, invId));
if (ioStorInvDis.size() == 0) {
throw new BadRequestException("分配明细不存在!");
}
// 类型转换
ArrayList<LinkedHashMap> tables = new ArrayList<>();
ioStorInvDis.forEach(item -> tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)));
divObj.put("tableMater", tables);
return divObj;
}
private Map<String, Object> doBuildInvObj(JSONArray rows) {
Map<String, Object> res = new HashMap<>();
ArrayList<HashMap> tableData = new ArrayList<>();
res.put("tableData", tableData);
// 物料室仓库
res.put("stor_id", "1582991156504039424");
res.put("bill_status", "10");
res.put("detail_count", rows.size());
res.put("bill_type", "0011");
res.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
for (int i = 0; i < rows.size(); i++) {
HashMap<String, Object> table = new HashMap<>();
JSONObject row = rows.getJSONObject(i);
table.put("group_id", row.getString("group_id"));
table.put("storagevehicle_code", row.getString(""));
table.put("material_id", row.getString("material_id"));
table.put("pcsn", row.getString("pcsn"));
table.put("qty", row.getBigDecimal("qty"));
table.put("qty_unit_id", row.getString("qty_unit_id"));
table.put("qty_unit_name", row.getString("qty_unit_name"));
table.put("status", "01");
table.put("bag_no", row.getString("bag_no"));
table.put("material_code", row.getString("material_code"));
table.put("material_name", row.getString("material_name"));
table.put("material_spec", row.getString("material_spec"));
tableData.add(table);
}
return res;
}
}