add:添加生产下线入库回传,增加任务类
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
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;
|
||||
import lombok.Data;
|
||||
@@ -182,6 +184,7 @@ public class Structattr implements Serializable {
|
||||
/**
|
||||
* 存储载具号
|
||||
*/
|
||||
@TableField(value = "storagevehicle_code", updateStrategy = FieldStrategy.IGNORED)
|
||||
private String storagevehicle_code;
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
@@ -191,7 +192,9 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
dto.setStor_id(bsrealStorattr.getStor_id());
|
||||
dto.setStor_code(bsrealStorattr.getStor_code());
|
||||
dto.setStor_name(bsrealStorattr.getStor_name());
|
||||
|
||||
if (StringUtils.isEmpty(dto.getStoragevehicle_code())){
|
||||
dto.setStoragevehicle_code(null);
|
||||
}
|
||||
structattrMapper.updateById(dto);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.ext_manage.service.dto.StructLineOfflineDTO;
|
||||
import org.nl.wms.sch_manage.service.core.tasks.StructOfflineService;
|
||||
import org.nl.wms.ext_manage.service.impl.StructOfflineService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
package org.nl.wms.sch_manage.service.core.tasks;
|
||||
package org.nl.wms.ext_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.sun.javafx.binding.StringFormatter;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.basedata_manage.service.ISectattrService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
@@ -20,6 +25,8 @@ import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.core.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.core.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.core.tasks.BWIPInTask;
|
||||
import org.nl.wms.sch_manage.service.core.tasks.StInTask;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||
@@ -52,6 +59,8 @@ public class StructOfflineService{
|
||||
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
|
||||
@Autowired
|
||||
private IStructattrService iStructattrService;
|
||||
@Autowired
|
||||
private BWIPInTask bwipInTask;
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
|
||||
@@ -135,15 +144,31 @@ public class StructOfflineService{
|
||||
final IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<IOStorInvDis>()
|
||||
.eq(IOStorInvDis::getIostorinv_id, iostorinv_id)
|
||||
.select(IOStorInvDis::getIostorinvdis_id));
|
||||
Map<String, Object> divPointParam = new HashMap<>();
|
||||
divPointParam.put("point_code", offlineDTO.getUnloadPort());
|
||||
ArrayList<HashMap<String, String>> tableMater = new ArrayList<>();
|
||||
HashMap<String, String> materRow = new HashMap<>();
|
||||
materRow.put("iostorinv_id", iostorinv_id); // 入库单明细ID
|
||||
materRow.put("iostorinvdis_id", ioStorInvDis.getIostorinvdis_id()); // 分配明细ID(如果有)
|
||||
materRow.put("storagevehicle_code", storagevehicleCode); // 载具编码
|
||||
tableMater.add(materRow);
|
||||
divPointParam.put("tableMater", tableMater);
|
||||
iInBillService.divPoint(divPointParam);
|
||||
//判断是否已经分配好货位
|
||||
List<IOStorInvDis> disSet = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinv_id,iostorinv_id)
|
||||
.eq(IOStorInvDis::getStoragevehicle_code, storagevehicleCode)
|
||||
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code, "")));
|
||||
if (CollectionUtils.isEmpty(disSet)) {
|
||||
throw new BadRequestException("该明细还没分配货位,请先分配货位");
|
||||
}
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
task_form.put("task_type", "BWIPInTask");
|
||||
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task_form.put("PickingLocation", schBasePoint.getPoint_code());
|
||||
task_form.put("PlacedLocation", disSet.get(0).getStruct_code());
|
||||
task_form.put("vehicle_code", storagevehicleCode);
|
||||
BWIPInTask bwipInTask = SpringContextHolder.getBean("BWIPInTask");
|
||||
String task_id = bwipInTask.create(task_form);
|
||||
//更新详情数据
|
||||
ioStorInvDisMapper.update(null, new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("生成"))
|
||||
.set(IOStorInvDis::getTask_id, task_id)
|
||||
.set(IOStorInvDis::getIs_issued, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.set(IOStorInvDis::getPoint_code, schBasePoint.getPoint_code())
|
||||
.eq(IOStorInvDis::getIostorinv_id, iostorinv_id)
|
||||
.eq(IOStorInvDis::getStoragevehicle_code, storagevehicleCode)
|
||||
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成")));
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import org.nl.common.exception.BadRequestException;
|
||||
public enum SourceBillTypeEnum {
|
||||
PM_DEMADN("pm_demand","出库需求单"),
|
||||
PM_PURCHASE("pm_purchase","采购入库单"),
|
||||
PM_RECEIVING("p_receiving","生产入库"),
|
||||
UNDEFINE("","未定义"),
|
||||
;
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.nl.wms.pm_manage.preceiving.listenerHandler;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.nl.wms.pm_manage.demand.service.IPmDemandService;
|
||||
import org.nl.wms.pm_manage.demand.service.dao.PmDemand;
|
||||
import org.nl.wms.pm_manage.demand.service.enums.DemandStatus;
|
||||
import org.nl.wms.pm_manage.listener.core.BaseFormListenerHandler;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
|
||||
import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn;
|
||||
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component("p_receiving")
|
||||
public class PReceivingListenerHandler extends BaseFormListenerHandler<PReceivingParams> {
|
||||
@Autowired
|
||||
IPmDemandService iPmDemandService;
|
||||
@Autowired
|
||||
IPmStockReturnService iPmStockReturnService;
|
||||
@Override
|
||||
public void onApplicationEvent(PReceivingParams params) {
|
||||
final PmStockReturn stockReturn = new PmStockReturn();
|
||||
stockReturn.setCreate_time(DateUtil.now());
|
||||
stockReturn.setRequest_type(IOSEnum.BILL_TYPE.code("生产入库"));
|
||||
stockReturn.setStatus(StockReturnStatusEnum.TODO.getCode());
|
||||
stockReturn.setRequest_data(JSON.toJSONString(params));
|
||||
iPmStockReturnService.save(stockReturn);
|
||||
//需求单昨晚,执行调拨流程
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.nl.wms.pm_manage.preceiving.listenerHandler;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class PReceivingParams {
|
||||
private String billCode;
|
||||
private String sectCode;
|
||||
private Map<String,BigDecimal> materialQty;
|
||||
|
||||
public PReceivingParams(String billCode, Map materialQty,String sectCode) {
|
||||
this.billCode = billCode;
|
||||
this.materialQty = materialQty;
|
||||
this.sectCode = sectCode;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
package org.nl.wms.sch_manage.service.core.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.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.pm_manage.SourceBillTypeEnum;
|
||||
import org.nl.wms.pm_manage.listener.PmManageEvent;
|
||||
import org.nl.wms.pm_manage.preceiving.listenerHandler.PReceivingParams;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.core.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.core.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.core.TaskType;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
;import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author: Liuxy
|
||||
* @Description: 入库任务类
|
||||
* @Date: 2025/5/25
|
||||
*/
|
||||
@Component(value = "BWIPInTask")
|
||||
@TaskType("BWIPInTask")
|
||||
public class BWIPInTask extends AbstractTask {
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Resource
|
||||
private IInBillService rawAssistIStorService;
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
@Autowired
|
||||
private ApplicationEventPublisher eventPublisher;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(json.getString("TaskCode"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(json.getString("task_type"));
|
||||
task.setPoint_code1(json.getString("PickingLocation"));
|
||||
task.setPoint_code2(json.getString("PlacedLocation"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
SchBaseTask taskDao = taskService.getById(taskId);
|
||||
// 组织下发给acs的数据
|
||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
||||
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||
if (taskDao.getPoint_code2().contains("-")) {
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2().replace('-', '_'));
|
||||
}
|
||||
acsTaskDto.setPriority(taskDao.getPriority());
|
||||
acsTaskDto.setTask_type("1");
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void forceFinish(String taskCode) {
|
||||
SchBaseTask task = taskService.getByCode(taskCode);
|
||||
// 任务完成
|
||||
task.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
task.setRemark("已完成");
|
||||
taskService.updateById(task);
|
||||
rawAssistIStorService.taskFinish(task);
|
||||
//推送入库单
|
||||
List<IOStorInvDis> ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getTask_id, task.getTask_id())
|
||||
);
|
||||
Map<String, BigDecimal> materialQtyMap = new HashMap<>();
|
||||
for (IOStorInvDis dis : ioStorInvDis) {
|
||||
String materialCode = dis.getMaterial_code();
|
||||
BigDecimal planQty = dis.getPlan_qty();
|
||||
if (materialCode != null && planQty != null) {
|
||||
materialQtyMap.merge(materialCode, planQty, BigDecimal::add);
|
||||
}
|
||||
}
|
||||
eventPublisher.publishEvent(new PmManageEvent(SourceBillTypeEnum.PM_RECEIVING.getBillType(),new PReceivingParams(
|
||||
ioStorInvDis.get(0).getIostorinvdis_id(),materialQtyMap,ioStorInvDis.get(0).getSect_code())));
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask task) {
|
||||
// 任务完成
|
||||
task.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
task.setRemark("已完成");
|
||||
taskService.updateById(task);
|
||||
rawAssistIStorService.taskFinish(task);
|
||||
//推送入库单
|
||||
List<IOStorInvDis> ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getTask_id, task.getTask_id())
|
||||
);
|
||||
Map<String, BigDecimal> materialQtyMap = new HashMap<>();
|
||||
for (IOStorInvDis dis : ioStorInvDis) {
|
||||
String materialCode = dis.getMaterial_code();
|
||||
BigDecimal planQty = dis.getPlan_qty();
|
||||
if (materialCode != null && planQty != null) {
|
||||
materialQtyMap.merge(materialCode, planQty, BigDecimal::add);
|
||||
}
|
||||
}
|
||||
eventPublisher.publishEvent(new PmManageEvent(SourceBillTypeEnum.PM_RECEIVING.getBillType(),new PReceivingParams(
|
||||
ioStorInvDis.get(0).getIostorinvdis_id(),materialQtyMap,ioStorInvDis.get(0).getSect_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())
|
||||
);
|
||||
//分配表清除任务
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user