opt: 压片前段业务
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.basedata_manage.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.basedata_manage.service.dao.Sectattr;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -49,12 +50,12 @@ public interface PdaBuildParamService {
|
||||
/**
|
||||
* 构建出库单参数
|
||||
* @param param
|
||||
* @param sectattr
|
||||
* @param storId
|
||||
* @return
|
||||
*/
|
||||
JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr);
|
||||
JSONObject doBuildOutInvObj(JSONObject param, String storId);
|
||||
|
||||
JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId);
|
||||
JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto);
|
||||
|
||||
JSONObject buildOutAllSetData(SchBasePoint endPoint, String invId);
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ 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.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@@ -163,26 +164,25 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr) {
|
||||
public JSONObject doBuildOutInvObj(JSONObject param, String storId) {
|
||||
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")
|
||||
List<JSONObject> temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", rowObj.getString("stor_id")
|
||||
, "sect_id", rowObj.getString("sect_id")
|
||||
, "struct_code", rowObj.getString("struct_code")
|
||||
, "material_code", rowObj.getString("material_code")
|
||||
, "pcsn", rowObj.getString("pcsn")
|
||||
, "vehicle_code", row.getString("vehicle_code")));
|
||||
, "vehicle_code", rowObj.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("stor_id", storId);
|
||||
insertInvObj.put("bill_status", "10");
|
||||
insertInvObj.put("bill_type", param.getString("bill_type"));
|
||||
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
@@ -224,27 +224,28 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId) {
|
||||
public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto) {
|
||||
JSONObject outDivObj = new JSONObject();
|
||||
JSONObject row = param.getJSONArray("rows").getJSONObject(0);
|
||||
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("未找到库存信息!");
|
||||
// 对应的明细id和主表id
|
||||
JSONObject row = new JSONObject();
|
||||
outDivObj.put("row", row);
|
||||
row.put("iostorinv_id", ioStorInvDtlDto.getIostorinv_id());
|
||||
row.put("iostorinvdtl_id", ioStorInvDtlDto.getIostorinvdtl_id());
|
||||
// 托盘中的某个明细
|
||||
JSONObject pRow = param.getJSONObject("row");
|
||||
String vehicleCode = pRow.getString("vehicle_code");
|
||||
JSONArray dtLMaterialInfo = groupplateService.getDtLMaterialInfo(vehicleCode, ioStorInvDtlDto.getMaterial_id(), ioStorInvDtlDto.getPcsn());
|
||||
outDivObj.put("rows", dtLMaterialInfo);
|
||||
for (int i = 0; i < dtLMaterialInfo.size(); i++) {
|
||||
JSONObject rowsJSONObject = dtLMaterialInfo.getJSONObject(i);
|
||||
rowsJSONObject.put("sect_id", pRow.getString("sect_id"));
|
||||
rowsJSONObject.put("sect_name", pRow.getString("sect_name"));
|
||||
rowsJSONObject.put("sect_code", pRow.getString("sect_code"));
|
||||
rowsJSONObject.put("struct_id", pRow.getString("struct_id"));
|
||||
rowsJSONObject.put("struct_code", pRow.getString("struct_code"));
|
||||
rowsJSONObject.put("struct_name", pRow.getString("struct_name"));
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
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;
|
||||
@@ -41,6 +42,7 @@ 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.IOStorInvDtlDto;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -111,22 +113,21 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (ObjectUtil.isEmpty(search)) {
|
||||
throw new BadRequestException("载具不存在!");
|
||||
}
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1"));
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1", "2"));
|
||||
return PdaResponse.requestParamOk(res);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse getStockGroupInfo(JSONObject param) {
|
||||
// sect_code, material_id, pcsn
|
||||
if (ObjectUtil.isEmpty(param.get("sect_code"))) {
|
||||
throw new BadRequestException("请选择库区!");
|
||||
}
|
||||
// material_id, pcsn
|
||||
List<JSONObject> res = groupplateService.getStockGroupInfo(param);
|
||||
return PdaResponse.requestParamOk(res);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse confirmCallMaterial(JSONObject param) {
|
||||
// hint: 没有创建出库单
|
||||
// point_code, row,sect_code
|
||||
log.info("手持托盘叫料:{}", param);
|
||||
if (ObjectUtil.isEmpty(param.get("point_code"))) {
|
||||
@@ -140,12 +141,47 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (ObjectUtil.isEmpty(endPoint)) {
|
||||
throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!");
|
||||
}
|
||||
if (!"1".equals(endPoint.getPoint_status())) {
|
||||
throw new BadRequestException("该点位不是空位,请检查后呼叫!");
|
||||
}
|
||||
// 判断任务是否创建
|
||||
List<SchBaseTask> tasks = taskService.getTaskByQuery(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getPoint_code1, pointCode));
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("该点位已创建过任务!");
|
||||
}
|
||||
|
||||
JSONObject row = param.getJSONObject("row");
|
||||
// 如果是制粒,需要走正规出入库流程
|
||||
if ("ZLQ".equals(endPoint.getRegion_code())) {
|
||||
Structattr structattr = structattrService.getByCode(row.getString("struct_code"));
|
||||
param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("批料出库"));
|
||||
// 1 创建出库单、明细、分配明细
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(row.getString("vehicle_code"), Arrays.asList("1", "2"));
|
||||
param.put("rows", res);
|
||||
JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, structattr.getStor_id());
|
||||
String invId = outBillService.insertDtl(invObj);
|
||||
Sectattr sectattr = sectattrService.findByCode(structattr.getSect_code(), false);
|
||||
// 2 循环,根据插入的dtl 去寻找袋的组盘信息调用手动分配
|
||||
List<IOStorInvDtlDto> billDtl = outBillService.getOutBillDtl(MapUtil.of("iostorinv_id", invId));
|
||||
for (IOStorInvDtlDto ioStorInvDtlDto : billDtl) {
|
||||
JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, sectattr, ioStorInvDtlDto);
|
||||
outBillService.manualDiv(divObj);
|
||||
}
|
||||
// 3 创建任务
|
||||
JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(endPoint, invId);
|
||||
outBillService.allSetPoint(jsonMst);
|
||||
|
||||
return PdaResponse.requestOk("呼叫成功!");
|
||||
}
|
||||
|
||||
// 创建任务
|
||||
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"));
|
||||
// 代表任务完成的时候不需要调用库存完成
|
||||
taskParam.put("flag", "1");
|
||||
palletOutTask.create(taskParam);
|
||||
return PdaResponse.requestOk("呼叫成功!");
|
||||
}
|
||||
@@ -405,7 +441,15 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (res.size() == 0) {
|
||||
throw new BadRequestException("当前托盘号不存在物料信息,请检查!");
|
||||
}
|
||||
preProcessingInTask.create(param);
|
||||
// 如果是仓位就需要走原辅料入库
|
||||
Sectattr sectCode = sectattrService.findByCode(param.getString("sect_code"), false);
|
||||
if (ObjectUtil.isNotEmpty(sectCode)) {
|
||||
// 辅料入库
|
||||
param.put("rows", res);
|
||||
receivedIn(param);
|
||||
} else {
|
||||
preProcessingInTask.create(param);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@@ -424,6 +468,16 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
param.getString("vehicle_code")));
|
||||
}
|
||||
|
||||
/**
|
||||
* 各工序作业完成,组盘后下料入库或缓存:
|
||||
* 1、称量、粉碎下料组盘后,扫点位/载具点确认,系统分配物料存放室或批料室空货位入库;
|
||||
* 2、压片下料组盘后,扫点位、载具点确认,系统分配中间站空货位入库;
|
||||
* 3、包衣下料组盘后,扫点位点呼叫AGV,系统呼叫AGV来取货;扫点位、载具点确认,系统分配中间站空货位入库;
|
||||
* 4、码垛完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存;
|
||||
* 5、缠膜完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存;
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public PdaResponse productionLine(JSONObject param) {
|
||||
// point_code, vehicle_code
|
||||
@@ -435,11 +489,55 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
throw new BadRequestException("点位[" + pointCode +"]不存在!");
|
||||
}
|
||||
if (point.getRegion_code().startsWith("FSSQ")) {
|
||||
// 粉碎室入库逻辑
|
||||
productionInStorage(param, point);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code()));
|
||||
task.create(param);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
/**
|
||||
* 入库
|
||||
* @param param
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void productionInStorage(JSONObject param, SchBasePoint point) {
|
||||
// 入库库区
|
||||
String inSect = point.getIn_sect();
|
||||
if (ObjectUtil.isEmpty(inSect)) {
|
||||
throw new BadRequestException("点位【" + point.getPoint_code() + "】未配置入库库区!");
|
||||
}
|
||||
Sectattr sectattr = sectattrService.findByCode(inSect, false);
|
||||
if (ObjectUtil.isEmpty(sectattr)) {
|
||||
throw new BadRequestException("库区不存在,请确保库区存在!");
|
||||
}
|
||||
|
||||
// 入库三件套
|
||||
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("粉碎入库"));
|
||||
// 设置rows(需要根据物料和批次区分)
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(param.getString("vehicle_code")
|
||||
, Arrays.asList("1"));
|
||||
// 需要过滤出物料id+批次并汇总qty
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
jsonArray.addAll(res);
|
||||
List<JSONObject> jsonObjects = DefaultPdaBuildParamService.filterAndSumByMaterialIdAndPcsn(jsonArray);
|
||||
param.put("rows", jsonObjects);
|
||||
// 1 创建入库单、明细、分配明细
|
||||
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, point, sectattr);
|
||||
String invId = rawAssistIStorService.insertDtl(invObj);
|
||||
// 2 调用分配
|
||||
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true);
|
||||
rawAssistIStorService.divStruct(divObj);
|
||||
// 3 创建任务
|
||||
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(point, invId);
|
||||
rawAssistIStorService.divPoint(jsonMst);
|
||||
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public PdaResponse receivedIn(JSONObject param) {
|
||||
@@ -459,6 +557,9 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
|
||||
throw new BadRequestException("点位载具号为空!");
|
||||
}
|
||||
if (!ObjectUtil.equals(startPoint.getVehicle_code(), param.getString("vehicle_code"))) {
|
||||
throw new BadRequestException("点位载具号不一致!!!");
|
||||
}
|
||||
Sectattr sectattr = sectattrService.findByCode(sect_code, true);
|
||||
if (ObjectUtil.isEmpty(sectattr)) {
|
||||
throw new BadRequestException("库区不存在或者被禁用!");
|
||||
@@ -469,6 +570,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("该点位已创建过任务!");
|
||||
}
|
||||
storagevehicleinfoService.getByCode(param.getString("vehicle_code"));
|
||||
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("原辅料入库"));
|
||||
// 1 创建入库单、明细、分配明细
|
||||
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr);
|
||||
|
||||
@@ -100,7 +100,9 @@ public class PalletOutTask extends AbstractTask {
|
||||
|
||||
// 点位上锁
|
||||
structattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
|
||||
.set(Structattr::getLock_type, ObjectUtil.isNotEmpty(json.get("flag"))
|
||||
? IOSEnum.LOCK_TYPE.code("其他锁")
|
||||
: IOSEnum.LOCK_TYPE.code("出库锁"))
|
||||
.eq(Structattr::getStruct_code, task.getPoint_code1()));
|
||||
|
||||
// 下发任务
|
||||
@@ -123,7 +125,7 @@ public class PalletOutTask extends AbstractTask {
|
||||
|
||||
acsTaskDto.setVehicle_type(IOSConstant.ONE);
|
||||
acsTaskDto.setIs_wait(taskDao.getIs_wait());
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
|
||||
|
||||
acsTaskDto.setPriority(IOSConstant.ONE);
|
||||
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
|
||||
@@ -192,6 +194,11 @@ public class PalletOutTask extends AbstractTask {
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
.set(SchBasePoint::getIng_task_code, taskObj.getTask_id())
|
||||
);
|
||||
JSONObject jsonObject = JSONObject.parseObject(taskObj.getRequest_param());
|
||||
if (ObjectUtil.isEmpty(jsonObject.get("flag"))) {
|
||||
// 解锁、库存清空
|
||||
outBillService.taskFinish(taskObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
|
||||
@@ -46,6 +46,7 @@ public class PreProcessingInTask extends AbstractTask {
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
// 获取终点
|
||||
// 考虑提供的室区域还是库区
|
||||
List<SchBasePoint> points = pointService.getCanUsePointByRegion(json.getString("sect_code"));
|
||||
if (ObjectUtil.isEmpty(points)) {
|
||||
throw new BadRequestException("暂无可用点位!");
|
||||
@@ -88,7 +89,7 @@ public class PreProcessingInTask extends AbstractTask {
|
||||
|
||||
acsTaskDto.setVehicle_type(IOSConstant.ONE);
|
||||
acsTaskDto.setIs_wait(IOSConstant.ZERO);
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
|
||||
|
||||
acsTaskDto.setPriority(IOSConstant.ONE);
|
||||
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
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.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.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.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
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.mapper.IOStorInvDisMapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 生产入库:粉碎入库
|
||||
* @author: lyd
|
||||
* @date: 2026/1/8
|
||||
*/
|
||||
@Component("ProduceInTask")
|
||||
public class ProduceInTask extends AbstractTask {
|
||||
@Resource
|
||||
private ISchBaseTaskService taskService;
|
||||
@Resource
|
||||
private IRawAssistIStorService rawAssistIStorService;
|
||||
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
@Resource
|
||||
private ISchBasePointService pointService;
|
||||
@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(ProduceInTask.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.setTask_type(TaskEnum.TASK_TYPE.code("料箱"));
|
||||
task.setPriority(json.getString("Priority"));
|
||||
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);
|
||||
|
||||
// 下发任务
|
||||
// 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.setVehicle_code(taskDao.getVehicle_code());
|
||||
|
||||
acsTaskDto.setVehicle_type(IOSConstant.ONE);
|
||||
acsTaskDto.setIs_wait(IOSConstant.ZERO);
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_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
|
||||
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)) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@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())
|
||||
);
|
||||
//分配表清除任务
|
||||
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getTask_id, null)
|
||||
.set(IOStorInvDis::getPoint_code, null)
|
||||
.set(IOStorInvDis::getIs_issued, 0)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
|
||||
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id())
|
||||
);
|
||||
|
||||
// 更新任务状态
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark("已取消");
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj) {
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskService.updateById(taskObj);
|
||||
rawAssistIStorService.taskFinish(taskObj);
|
||||
// 更新起点
|
||||
pointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskConfirm(String task_code) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ 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.mapper.IOStorInvDisMapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@@ -87,7 +88,7 @@ public class RawInTask extends AbstractTask {
|
||||
|
||||
acsTaskDto.setVehicle_type(IOSConstant.ONE);
|
||||
acsTaskDto.setIs_wait(IOSConstant.ZERO);
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
|
||||
|
||||
acsTaskDto.setPriority(IOSConstant.ONE);
|
||||
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
|
||||
@@ -121,6 +122,7 @@ public class RawInTask extends AbstractTask {
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
// 取消任务
|
||||
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
@@ -144,6 +146,7 @@ public class RawInTask extends AbstractTask {
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj) {
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
|
||||
@@ -35,12 +35,14 @@ public enum IOSEnum {
|
||||
"原辅料入库", "0001",
|
||||
"剩料回库", "0002",
|
||||
"中间站入库", "0003",
|
||||
"直接入库", "0004"
|
||||
"直接入库", "0004",
|
||||
"粉碎入库", "0005"
|
||||
)),
|
||||
|
||||
// 出库业务类型
|
||||
OUT_BILL_TYPE(MapOf.of("手工出库", "1009",
|
||||
"原辅料出库", "1001",
|
||||
"批料出库", "1002",
|
||||
"直接出库", "1099"
|
||||
)),
|
||||
|
||||
@@ -52,12 +54,15 @@ public enum IOSEnum {
|
||||
|
||||
// 入库任务配置类编码
|
||||
IN_CONFIG_CODE(MapOf.of("0009", "HandInTask",
|
||||
"0001", "RawInTask", "0002", "RawInTask", "0003", "CenterInTask"
|
||||
"0001", "RawInTask",
|
||||
"0002", "RawInTask",
|
||||
"0003", "CenterInTask",
|
||||
"0005", "ProduceInTask"
|
||||
)),
|
||||
|
||||
// 出库任务配置类编码
|
||||
OUT_CONFIG_CODE(MapOf.of( "1009", "HandOutTask",
|
||||
"1001", "CallMaterialTask"
|
||||
"1001", "CallMaterialTask", "1002", "PalletOutTask"
|
||||
)),
|
||||
// 下料任务配置编码
|
||||
DOWN_CONFIG_CODE(MapOf.of("YPQ", "TabletingInTask"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.warehouse_management.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
@@ -113,4 +114,6 @@ public interface IMdPbGroupplateService extends IService<GroupPlate> {
|
||||
* @return List<MdMeMaterialbase>
|
||||
*/
|
||||
List<MdMeMaterialbase> queryMaterList();
|
||||
|
||||
JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.warehouse_management.service.dao.mapper;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -69,4 +70,6 @@ public interface MdPbGroupplateMapper extends BaseMapper<GroupPlate> {
|
||||
List<JSONObject> getPalletViewByVehicleCode(String search, List<String> status);
|
||||
|
||||
List<JSONObject> getStockGroupInfo(JSONObject param);
|
||||
|
||||
JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn);
|
||||
}
|
||||
|
||||
@@ -207,9 +207,15 @@
|
||||
AND
|
||||
mg.pcsn = #{pcsn}
|
||||
</if>
|
||||
<if test="sect_code != null and sect_code != ''">
|
||||
AND
|
||||
ss.sect_code = #{sect_code}
|
||||
</if>
|
||||
</select>
|
||||
<select id="getDtLMaterialInfo" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
g.*,
|
||||
g.vehicle_code AS storagevehicle_code,
|
||||
g.qty AS canuse_qty
|
||||
FROM
|
||||
`md_pb_groupplate` g
|
||||
WHERE g.vehicle_code = #{vehicleCode} AND g.material_id = #{materialId}
|
||||
AND g.pcsn = #{pcsn} AND `status` = '2'
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.wms.warehouse_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;
|
||||
@@ -212,4 +213,9 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
|
||||
.eq(MdMeMaterialbase::getIs_used, IOSConstant.ONE)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn) {
|
||||
return this.baseMapper.getDtLMaterialInfo(vehicleCode, materialId, pcsn);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user