rev:刻字包装服务

This commit is contained in:
zhangzhiqiang
2023-07-04 08:47:09 +08:00
parent 128272a27d
commit 418fc4b966
31 changed files with 939 additions and 294 deletions

View File

@@ -3,7 +3,7 @@ package org.nl.common.utils;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.pda_manage.pda.dto.MaterialDto;
import org.nl.wms.pda_manage.pda.service.dto.MaterialDto;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

View File

@@ -9,9 +9,11 @@ import org.nl.wms.product_manage.sch.tasks.SpeMachinery.SpeEmpTask;
import org.nl.wms.product_manage.sch.tasks.SpeMachinery.SpeFullTask;
import org.nl.wms.product_manage.sch.tasks.WashMachineryTask;
import org.nl.wms.product_manage.sch.tasks.callEmpty.PlotterCallEmptyTask;
import org.nl.wms.product_manage.sch.tasks.callEmpty.WashCallEmptyTask;
import org.nl.wms.product_manage.sch.tasks.callMaterial.WrapCallMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendEmpty.WrapSendEmptyTask;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterSendMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.WashSendMaterialTask;
import org.springframework.context.SmartLifecycle;
import org.springframework.context.annotation.Configuration;
@@ -27,9 +29,10 @@ public class ConventConfig implements SmartLifecycle {
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_LACK, SpringContextHolder.getBean(WashMachineryTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_SEND_FULL, SpringContextHolder.getBean(PlotterSendMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_EMP, SpringContextHolder.getBean(PlotterCallEmptyTask.class));
// AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_MATERIAL, SpringContextHolder.getBean(EngraveCallMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_CALL_FULL, SpringContextHolder.getBean(WrapCallMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_SEND_EMP, SpringContextHolder.getBean(WrapSendEmptyTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_FULL, SpringContextHolder.getBean(WashSendMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_EMP, SpringContextHolder.getBean(WashCallEmptyTask.class));
System.out.println("初始化Task_Collent完成777"+AcsToWmsServiceImpl.Task_Collent.size());
}

View File

@@ -4,6 +4,7 @@ package org.nl.wms.masterdata_manage.storage.service.storage;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
/**
* <p>
@@ -46,4 +47,11 @@ public interface IStIvtStructattrService extends IService<StIvtStructattr> {
* @param jo
*/
StIvtStructattr getExceedAttr(JSONObject jo);
/**
* 仓位锁定
* @param type
* @param inv_code
*/
void lockStruct(String struct_code, String type, String inv_code);
}

View File

@@ -16,8 +16,12 @@ import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrServ
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.mapper.StIvtStructattrMapper;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@@ -35,10 +39,6 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
@Autowired
private IStIvtSectattrService sectattrService;
@Autowired
private IStIvtBsrealstorattrService storattrService;
@Autowired
private IStIvtStructattrService structattrService;
@Override
public String create(JSONObject form) {
@@ -98,7 +98,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
JSONObject sect_cas = new JSONObject();
sect_cas.put("value", sect.getSect_id());
sect_cas.put("label", sect.getSect_name());
List<StIvtStructattr> struct_list = structattrService.list(new QueryWrapper<StIvtStructattr>().eq("is_used", true)
List<StIvtStructattr> struct_list = this.list(new QueryWrapper<StIvtStructattr>().eq("is_used", true)
.eq("sect_id", sect.getSect_id()));
if (struct_list.size() > 0) {
JSONArray struct_ja = new JSONArray();
@@ -137,4 +137,13 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
.set("update_time",new Date())
.eq("struct_id",form.getString("struct_id")));
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void lockStruct(String struct_code, String type, String inv_code) {
this.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, struct_code)
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code(type))
.set(StIvtStructattr::getInv_code,inv_code));
}
}

View File

@@ -13,7 +13,6 @@ import lombok.RequiredArgsConstructor;
import org.json.XML;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.WebServiceUtil;
import org.nl.config.thread.ThreadPoolExecutorUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.utils.RedisUtils;
@@ -29,14 +28,13 @@ import org.nl.wms.masterdata_manage.备份master.constant.MaterOptTypeEnum;
import org.nl.wms.masterdata_manage.备份master.service.ClassstandardService;
import org.nl.wms.masterdata_manage.备份master.service.MaterialbaseService;
import org.nl.wms.masterdata_manage.备份master.service.dto.MaterialbaseDto;
import org.nl.wms.pda_manage.pda.dto.MaterialDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Pageable;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.nl.wms.pda_manage.pda.service.dto.MaterialDto;
import javax.annotation.Resource;
import java.util.*;

View File

@@ -1,4 +1,4 @@
package org.nl.wms.pda_manage.pda.rest;
package org.nl.wms.pda_manage.pda.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONArray;
@@ -12,7 +12,7 @@ import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
import org.nl.wms.pda_manage.pda.dto.MaterialDto;
import org.nl.wms.pda_manage.pda.service.dto.MaterialDto;
import org.nl.wms.pda_manage.pda.service.CacheLineHandService;
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +21,6 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

View File

@@ -1,4 +1,4 @@
package org.nl.wms.pda_manage.pda.rest;
package org.nl.wms.pda_manage.pda.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.lang.Assert;
@@ -7,8 +7,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.ConstantParam;
import org.nl.common.anno.Log;
import org.nl.common.utils.MapOf;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;

View File

@@ -0,0 +1,53 @@
package org.nl.wms.pda_manage.pda.controller;
/*
* @author ZZQ
* @Date 2023/7/3 15:29
* 刻字相关临时方案
*/
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "成品手持服务")
@RequestMapping("/api/pda")
@Slf4j
@SaIgnore
public class TmpKZController {
@RequestMapping("deviceinstorQty")
public ResponseEntity<Object> deviceinstorQty(@RequestBody JSONObject param){
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("callVechile")
public ResponseEntity<Object> callVechile(@RequestBody JSONObject param){
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("kzunload")
public ResponseEntity<Object> kzunload(@RequestBody JSONObject param){
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("kzresidue")
public ResponseEntity<Object> kzresidue(@RequestBody JSONObject param){
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("tmpcallVechile")
public ResponseEntity<Object> tmpcallVechile(@RequestBody JSONObject param){
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("tmpsendVechile")
public ResponseEntity<Object> tmpsendVechile(@RequestBody JSONObject param){
return new ResponseEntity<>( HttpStatus.OK);
}
}

View File

@@ -3,7 +3,7 @@ package org.nl.wms.pda_manage.pda.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.utils.api.CommonResult;
import org.nl.wms.pda_manage.pda.dto.MaterialDto;
import org.nl.wms.pda_manage.pda.service.dto.MaterialDto;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;

View File

@@ -1,4 +1,4 @@
package org.nl.wms.pda_manage.pda.dto;
package org.nl.wms.pda_manage.pda.service.dto;
import lombok.Data;

View File

@@ -8,7 +8,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.jsonwebtoken.lang.Assert;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -18,7 +17,6 @@ import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.*;
import org.nl.common.utils.api.CommonResult;
import org.nl.common.utils.api.RestBusinessTemplate;
import org.nl.config.thread.ThreadPoolExecutorUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.RedisUtils;
import org.nl.modules.wql.WQL;
@@ -27,7 +25,7 @@ import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.pda_manage.pda.dto.MaterialDto;
import org.nl.wms.pda_manage.pda.service.dto.MaterialDto;
import org.nl.wms.pda_manage.pda.service.CacheLineHandService;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
@@ -46,7 +44,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Pageable;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

View File

@@ -0,0 +1,200 @@
package org.nl.wms.product_manage.sch.tasks.callEmpty;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 清洗下料叫空框请求
*/
@Slf4j
@Service
public class WashCallEmptyTask extends AbstractAcsTask {
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private WmsToAcsService wms;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject param, String status) {
SchBaseTask task = taskService.getById(param.getString("task_id"));
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_RUNNING.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
}
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
}
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
String end_point_code = param.getString("device_code");
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
.and(wa->wa
.eq("point_code1", param.getString("device_code"))
.or()
.eq("point_code2", param.getString("device_code")))
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
// 查找任务状态
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_EMPTY.getDesc());
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_EMPTY.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order.getMaterial_id());
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
task.put("point_code2", end_point_code);
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("update_id", currentUserId);
task.put("update_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("update_time", DateUtil.now());
task.put("priority", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("table_fk_id",order.getWorkorder_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
taskService.save(schBaseTask);
// 找终点
try {
pointConfirm(task);
JSONArray data = new JSONArray();
data.add(task);
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
log.error("刻字请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setUpdate_name("acs");
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
taskService.save(schBaseTask);
}
return taskdtl_id;
}
@Override
public void cancel(String task_id) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task_id));
}
/**
* 满料请求
* 从刻字机满料缓存区中获取空位放入就行
* @param taskObj: 任务对象
*/
@Override
public void pointConfirm(JSONObject taskObj) {
// 去刻字缓存区寻找空框 TODO:空箱
List<Map<String, String>> points = pointService.queryVehicle(
MapOf.of("is_used", "1",
"lock_type", StatusEnum.LOCK_OFF.getCode(),
"region_code", "A1_KZHC",
"material_null", "material_null"));
if (ObjectUtil.isNotEmpty(points)) {
Map<String, String> map = points.get(0);
if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){
throw new BadRequestException("刻字缓存区没有可用货位.");
}
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_ON.getCode())
.eq("point_code",map.get("point_code")));
// 设置点位
taskObj.put("update_time", DateUtil.now());
taskObj.put("point_code1",map.get("point_code"));
SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
} else {
throw new BadRequestException("刻字缓存区没有可用货位.");
}
}
@Override
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks) {
ArrayList<SchBaseTask> Merge = new ArrayList<>();
if (!CollectionUtils.isEmpty(tasks)){
for (SchBaseTask task : tasks) {
task.setTask_group_id(org.nl.common.utils.IdUtil.getStringId());
Merge.add(task);
}
}
return Merge;
}
}

View File

@@ -0,0 +1,213 @@
package org.nl.wms.product_manage.sch.tasks.sendMaterial;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/*
* @author ZZQ 清洗异常时去异常位
* @Date 2023/6/16 08:40
*/
@Service
@Slf4j
public class WashSendMaterialQZTask extends AbstractAcsTask {
@Autowired
private DivRuleCpService divRuleCpService;
@Autowired
private IStIvtSectattrService sectattrService;
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private WmsToAcsService wms;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject param, String status) {
SchBaseTask task = taskService.getById(param.getString("task_id"));
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status", StatusEnum.TASK_RUNNING.getCode())
.set("update_name","acs")
.set("update_time", DateUtil.now()).eq("task_id",task.getTask_id()));
}
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
}
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 完成
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
String start_point_code = param.getString("device_code");
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
.and(wa->wa
.eq("point_code1", param.getString("device_code"))
.or()
.eq("point_code2", param.getString("device_code")))
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
// 查找任务状态
String taskdtl_id = IdUtil.getStringId();
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_name", AcsTaskEnum.REQUEST_WASH_FULL_ERROR.getDesc());
task.put("task_type", AcsTaskEnum.REQUEST_WASH_FULL_ERROR.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order.getMaterial_id());
task.put("material_qty", param.getString("weight"));
task.put("vehicle_code", param.getString("vehicle_code"));
task.put("task_status", TaskStatusEnum.CREATED.getCode());
task.put("point_code1", start_point_code);
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("priority", "1");
task.put("finished_type", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("table_fk_id",order.getWorkorder_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
taskService.save(schBaseTask);
// 找终点
try {
pointConfirm(task);
JSONArray data = new JSONArray();
data.add(task);
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
// 未找到
log.error("刻字满料请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setUpdate_name("acs");
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
taskService.save(schBaseTask);
}
return taskdtl_id;
}
@Override
public void cancel(String task_id) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task_id));
}
/**
* 满料请求
* 从刻字机满料缓存区中获取空位放入就行
*/
@Override
@Transactional(timeout=TransactionDefinition.ISOLATION_READ_UNCOMMITTED)
public void pointConfirm(JSONObject task) {
// 去刻字缓存区寻找空位
List<SchBasePoint> list = pointService.list(new QueryWrapper<SchBasePoint>().isNull("vehicle_code")
.eq("is_used", "1")
.eq("region_code","A1_BCP_YC")//半成品
.eq("lock_type", StatusEnum.LOCK_OFF.getCode()));
if (ObjectUtil.isNotEmpty(list)) {
// 找到位置
// 点位上锁
SchBasePoint point = list.get(0);
point.setLock_type(StatusEnum.LOCK_ON.getCode());
pointService.updateById(point);
// 设置点位
task.put("update_time", DateUtil.now());
task.put("point_code2",point.getPoint_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setTask_type(AcsTaskEnum.TASK_WASH_FULL_QZ.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
} else {
throw new BadRequestException("异常位没有可用货位.");
}
}
@Override
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks) {
ArrayList<SchBaseTask> Merge = new ArrayList<>();
if (!CollectionUtils.isEmpty(tasks)){
for (SchBaseTask task : tasks) {
task.setTask_group_id(IdUtil.getStringId());
Merge.add(task);
}
}
return Merge;
}
}

View File

@@ -8,10 +8,12 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
@@ -31,6 +33,7 @@ import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
@@ -45,11 +48,14 @@ import java.util.stream.Collectors;
/*
* @author ZZQ
* @Date 2023/6/16 08:40
* 清洗机下料满料请求
*/
@Service
@Slf4j
public class WashSendMaterialTask extends AbstractAcsTask {
@Autowired
private IStIvtStructattrService structattrService;
@Autowired
private DivRuleCpService divRuleCpService;
@Autowired
@@ -61,6 +67,8 @@ public class WashSendMaterialTask extends AbstractAcsTask {
@Autowired
private ISchBasePointService pointService;
@Autowired
private WashSendMaterialQZTask sendMaterialQZTask;
@Autowired
private WmsToAcsService wms;
@Override
@@ -98,63 +106,69 @@ public class WashSendMaterialTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
String start_point_code = param.getString("device_code");
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
.and(wa->wa
.eq("point_code1", param.getString("device_code"))
.or()
.eq("point_code2", param.getString("device_code")))
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
// 查找任务状态
String taskdtl_id = IdUtil.getStringId();
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_name", AcsTaskEnum.REQUEST_WASH_FULL.getDesc());
task.put("task_type", AcsTaskEnum.REQUEST_WASH_FULL.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order.getMaterial_id());
task.put("task_status", TaskStatusEnum.CREATED.getCode());
task.put("point_code1", start_point_code);
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("priority", "1");
task.put("finished_type", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("table_fk_id",order.getWorkorder_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
taskService.save(schBaseTask);
// 找终点
try {
pointConfirm(task);
JSONArray data = new JSONArray();
data.add(task);
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
// 未找到
log.error("刻字满料请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setUpdate_name("acs");
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
if (StringUtils.isEmpty(param.getString("weight"))||StringUtils.isEmpty(param.getString("vehicle_code"))){
return sendMaterialQZTask.createTask(param);
}else {
String start_point_code = param.getString("device_code");
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
.and(wa->wa
.eq("point_code1", param.getString("device_code"))
.or()
.eq("point_code2", param.getString("device_code")))
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
// 查找任务状态
String taskdtl_id = IdUtil.getStringId();
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_name", AcsTaskEnum.REQUEST_WASH_FULL.getDesc());
task.put("task_type", AcsTaskEnum.REQUEST_WASH_FULL.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order.getMaterial_id());
task.put("material_qty", param.getString("weight"));
task.put("vehicle_code", param.getString("vehicle_code"));
task.put("task_status", TaskStatusEnum.CREATED.getCode());
task.put("point_code1", start_point_code);
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("priority", "1");
task.put("finished_type", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("table_fk_id",order.getWorkorder_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
taskService.save(schBaseTask);
// 找终点
try {
pointConfirm(task);
JSONArray data = new JSONArray();
data.add(task);
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
// 未找到
log.error("刻字满料请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setUpdate_name("acs");
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
taskService.save(schBaseTask);
}
return taskdtl_id;
}
return taskdtl_id;
}
@Override
@@ -167,33 +181,31 @@ public class WashSendMaterialTask extends AbstractAcsTask {
/**
* 满料请求
* 从刻字机满料缓存区中获取空位放入就行
* 清洗机入半成品库
*/
@Override
@Transactional(timeout=TransactionDefinition.ISOLATION_READ_UNCOMMITTED)
public void pointConfirm(JSONObject task) {
// 去刻字缓存区寻找空位
//分配货位。下发任务,更新主单据状态。更新明细任务
StIvtSectattr sect = sectattrService.getOne(new QueryWrapper<StIvtSectattr>().eq("sect_name", "半成品库区"));
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
//少出入库记录
if (ObjectUtil.isEmpty(stIvtStructattr)) {
throw new BadRequestException("无可分配货位");
}
stIvtStructattr.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁"));
stIvtStructattr.setInv_code(task.getString("task_code"));
// 设置点位
task.put("update_time", DateUtil.now());
task.put("point_code2",stIvtStructattr.getStruct_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setTask_type(AcsTaskEnum.TASK_STRUCT_IN.getCode());
taskService.updateById(schBaseTask);
RedissonUtils.lock(()->{
// 去刻字缓存区寻找空位
//分配货位。下发任务,更新主单据状态。更新明细任务
StIvtSectattr sect = sectattrService.getOne(new QueryWrapper<StIvtSectattr>().eq("sect_name", "半成品库区"));
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
//少出入库记录
if (ObjectUtil.isEmpty(stIvtStructattr)) {
throw new BadRequestException("无可分配货位");
}
// 设置点位
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setTask_type(AcsTaskEnum.TASK_STRUCT_IN.getCode());
taskService.updateById(schBaseTask);
structattrService.lockStruct(stIvtStructattr.getStruct_code(), "入库锁",schBaseTask.getTask_id());
},"banchengpin_ruku",1);
}
@Override

View File

@@ -56,4 +56,10 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
Map getWorkprodureByCode(String id);
List<Map<String,String>> getAllPointRegin(String points);
/**
* 任务回调
* @param jo
*/
void taskOperate(JSONObject jo);
}

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
@@ -14,16 +15,25 @@ import io.jsonwebtoken.lang.Assert;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.point.dao.mapper.SchBasePointMapper;
import org.nl.wms.scheduler_manage.service.region.ISchBaseRegionService;
import org.nl.wms.scheduler_manage.service.region.dao.SchBaseRegion;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.CHECKEnum;
import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp;
import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -47,6 +57,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Autowired
private ISchBaseRegionService schBaseRegionService;
@Autowired
private ISchBaseTaskService taskService;
@Override
public Object queryAll(Map whereJson, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize());
@@ -193,4 +206,21 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
public List<Map<String,String>> getAllPointRegin(String points) {
return this.baseMapper.getRegionCollent(points);
}
@Override
public void taskOperate(JSONObject form) {
String status = form.getString("status");
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
//释放目标点位
// 更新任务为完成
SchBaseTask one = taskService.getOne(new QueryWrapper<SchBaseTask>()
.eq("task_id", form.getString("task_id")));
this.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code",StringUtils.isEmpty(one.getVehicle_code())?UUID.randomUUID().toString():one.getVehicle_code())
.set("vehicle_qty",one.getMaterial_qty())
.set("material_id",one.getMaterial_id())
.set("lock_type",StatusEnum.LOCK_OFF.getCode()).set("point_code",one.getPoint_code2()));
}
}
}

View File

@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.BaseCode;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.RedissonUtils;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.WashSendMaterialTask;
@@ -15,6 +16,7 @@ import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpOutService;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -77,51 +79,54 @@ public class EngraveScheduleService {
Map<String, List<PdmProduceWorkorder>> collect = list.stream().collect(Collectors.groupingBy(PdmProduceWorkorder::getMaterial_id));
//工单开工规则
for (Map.Entry<String, List<PdmProduceWorkorder>> entry : collect.entrySet()) {
JSONObject form = new JSONObject();
form.put("stor_id","528627995269533696");//st_ivt_sectattr紫铜车间-半成品库区
form.put("sect_id","1528631044482404352");
form.put("material_id",entry.getKey());
form.put("product_code","A1");//车间
form.put("point_code","A1_KZPP_D");
StIvtStructivtCp structivtCp = stIvtIostorinvBcpOutService.autoConfirm(form);
if (structivtCp == null){ continue; }
//生成输送线到刻字机任务
//工单物料分配规则
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", entry.getKey()).eq("is_delete", false));
List<PdmProduceWorkorder> current_workorders = entry.getValue();
BigDecimal canuse_qty = structivtCp.getCanuse_qty();
String grop_id = IdUtil.getStringId();
for (PdmProduceWorkorder current_workorder : current_workorders) {
BigDecimal need = current_workorder.getPlan_qty().subtract(current_workorder.getDq_real_qty());
if (need.intValue() <= 0){ continue; }
int min = Math.min(canuse_qty.intValue(), need.intValue());
JSONObject form = new JSONObject();
form.put("stor_id","528627995269533696");//st_ivt_sectattr紫铜车间-半成品库区
form.put("sect_id","1528631044482404352");
form.put("material_id",entry.getKey());
form.put("product_code","A1");//车间
form.put("point_code","A1_KZPP_D");//刻字爬坡倒料点
StIvtStructivtBcp stIvtStructivtBcp = stIvtIostorinvBcpOutService.autoConfirmout(form);
if (stIvtStructivtBcp != null){
//生成输送线到刻字机任务
//工单物料分配规则
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", entry.getKey()).eq("is_delete", false));
List<PdmProduceWorkorder> current_workorders = entry.getValue();
BigDecimal canuse_qty = stIvtStructivtBcp.getCanuse_qty();
String grop_id = IdUtil.getStringId();
JSONObject taskForm = new JSONObject();
taskForm.put("workorder_code",current_workorder.getWorkorder_code());
taskForm.put("device_code",current_workorder.getDevice_code());
taskForm.put("qty",min);
taskForm.put("weight",material.getNet_weight().doubleValue()*min);
taskForm.put("material_id",material.getMaterial_id());
taskForm.put("material_code",material.getMaterial_code());
taskForm.put("material_spec",material.getMaterial_spec());
taskForm.put("task_grop_id", grop_id);
engraveCallMaterialTask.createTask(taskForm);
canuse_qty = canuse_qty.subtract(need);
if (canuse_qty.intValue()<=0){return;}
}
if (canuse_qty.intValue() > 0){
JSONObject taskForm = new JSONObject();
taskForm.put("workorder_code"," ");
taskForm.put("device_code","");
taskForm.put("qty",canuse_qty);
taskForm.put("weight",material.getNet_weight().multiply(canuse_qty));
taskForm.put("material_id",material.getMaterial_id());
taskForm.put("material_code",material.getMaterial_code());
taskForm.put("material_spec",material.getMaterial_spec());
taskForm.put("task_grop_id", grop_id);
engraveCallMaterialTask.createTask(taskForm);
}
for (PdmProduceWorkorder current_workorder : current_workorders) {
BigDecimal need = current_workorder.getPlan_qty().subtract(current_workorder.getDq_real_qty());
if (need.intValue() <= 0){ continue; }
int min = Math.min(canuse_qty.intValue(), need.intValue());
JSONObject taskForm = new JSONObject();
taskForm.put("workorder_code",current_workorder.getWorkorder_code());
taskForm.put("device_code",current_workorder.getDevice_code());
taskForm.put("qty",min);
taskForm.put("weight",material.getNet_weight().doubleValue()*min);
taskForm.put("material_id",material.getMaterial_id());
taskForm.put("material_code",material.getMaterial_code());
taskForm.put("material_spec",material.getMaterial_spec());
taskForm.put("task_grop_id", grop_id);
engraveCallMaterialTask.createTask(taskForm);
canuse_qty = canuse_qty.subtract(need);
if (canuse_qty.intValue()<=0){return;}
}
if (canuse_qty.intValue() > 0){
JSONObject taskForm = new JSONObject();
taskForm.put("workorder_code"," ");
taskForm.put("device_code","");
taskForm.put("qty",canuse_qty);
taskForm.put("weight",material.getNet_weight().multiply(canuse_qty));
taskForm.put("material_id",material.getMaterial_id());
taskForm.put("material_code",material.getMaterial_code());
taskForm.put("material_spec",material.getMaterial_spec());
taskForm.put("task_grop_id", grop_id);
engraveCallMaterialTask.createTask(taskForm);
}
}
}
}
}

View File

@@ -3,6 +3,7 @@ package org.nl.wms.storage_manage.productmanage.util;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
/**
* <p>
@@ -39,5 +40,8 @@ public interface DivRuleCpService {
* @return StIvtStructattr /
*/
StIvtStructivtCp divRuleOut(JSONObject whereJson);
StIvtStructivtCp divRuleOutAndLock(JSONObject whereJson);
StIvtStructivtBcp divRuleOutBcp(JSONObject whereJson);
}

View File

@@ -14,8 +14,13 @@ import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivt
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
@@ -34,13 +39,13 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
@Autowired
protected IStIvtStructivtCpService iStIvtStructivtCpService; // 仓位库存服务
private StIvtStructattr attrDao;
@Autowired
private IStIvtStructivtBcpService bcpService;
private StIvtStructivtCp ivtDao;
@Override
public StIvtStructattr divRuleIn(JSONObject whereJson) {
StIvtStructattr attrDao;
String stor_id = whereJson.getString("stor_id");
String sect_id = whereJson.getString("sect_id");
@@ -49,15 +54,15 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
switch (whereJson.getString("rule_type")) {
case RuleUtil.PRODUCTION_IN_1 :
attrDao = iStIvtStructattrService.getOne(
attrDao = iStIvtStructattrService.getOne(
new QueryWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStor_id, stor_id)
.eq(StIvtStructattr::getSect_id, sect_id)
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_USED.code(""))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStoragevehicle_code,"")
.eq(StIvtStructattr::getStoragevehicle_code, "")
.orderByAsc(StIvtStructattr::getStruct_code)
,false);
, false);
break;
case RuleUtil.PRODUCTION_IN_2 :
attrDao = iStIvtStructattrService.getExceedAttr(whereJson);
@@ -70,13 +75,15 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
.eq(StIvtStructattr::getStruct_id, attrDao.getControl_code())
);
break;
default:
return null;
}
return attrDao;
}
@Override
public StIvtStructivtCp divRuleOut(JSONObject whereJson) {
StIvtStructivtCp ivtDao;
String stor_id = whereJson.getString("stor_id");
String sect_id = whereJson.getString("sect_id");
@@ -97,30 +104,14 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
throw new BadRequestException("物料不能为空");
ivtDao = iStIvtStructivtCpService.queryIvtOutOne(whereJson);
break;
default:
return null;
}
return ivtDao;
}
@Override
public StIvtStructivtCp divRuleOutAndLock(JSONObject whereJson) {
RedissonUtils.lock(()->{
switch (whereJson.getString("rule_type")) {
case RuleUtil.PRODUCTION_OUT_1 :
if (ObjectUtil.isEmpty(whereJson.getString("sale_id"))) throw new BadRequestException("销售单不能为空");
ivtDao = iStIvtStructivtCpService.queryIvtOutOne(whereJson);
break;
case RuleUtil.PRODUCTION_OUT_2 :
ivtDao = iStIvtStructivtCpService.queryIvtOutOne(whereJson);
break;
}
//锁定
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, ivtDao.getStruct_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁"))
.set(StIvtStructattr::getInv_code,""));
},whereJson.getString("material_id"),1);
return ivtDao;
public StIvtStructivtBcp divRuleOutBcp(JSONObject whereJson) {
return bcpService.queryIvtOutOne(whereJson);
}
}

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.storage_manage.pda.service.PdaStBcpInService;
import org.nl.wms.storage_manage.productmanage.service.check.IStIvtCheckmstCpService;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpOutService;
@@ -57,6 +58,10 @@ public enum TASKEnum implements FunctionStrategy<String, JSONObject> {
IStIvtCheckmstCpService bean = SpringContextHolder.getBean(IStIvtCheckmstCpService.class);
bean.taskOperate(form);
}),
POINT_FINISH_TASK(type -> AcsTaskEnum.TASK_WASH_FULL_QZ.getCode().equals(type), form -> {
ISchBasePointService bean = SpringContextHolder.getBean(ISchBasePointService.class);
bean.taskOperate(form);
}),
;

View File

@@ -3,9 +3,11 @@ package org.nl.wms.storage_manage.semimanage.service.iostorInv;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.dao.StIvtIostorinvBcp;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.dto.BcpIostorInvQuery;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import java.util.List;
import java.util.Map;
@@ -53,7 +55,11 @@ public interface IStIvtIostorinvBcpOutService extends IService<StIvtIostorinvBcp
* param.put("material_id", form.getString("material_id"));
* @return
*/
StIvtStructivtCp autoConfirm(JSONObject param);
StIvtStructivtBcp autoConfirmout(JSONObject param);
StIvtStructattr autoConfirmin(JSONObject param);
void lockStruct(String struct,String type,String inv_code);
/**
* 下发单据
* @param form

View File

@@ -20,6 +20,7 @@ import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.PointEvent;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
@@ -38,10 +39,8 @@ import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.basedata.service.record.service.IStIvtStructivtflowService;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
@@ -53,6 +52,7 @@ import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcp
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
@@ -76,8 +76,6 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
@Autowired
private IStIvtStructivtBcpService structivtBcpService;
@Autowired
private IStIvtStructivtflowService structivtflowService;
@Autowired
private IStIvtStructattrService structattrService;
@Autowired
private DivRuleCpService divRuleCpService;
@@ -244,69 +242,148 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
}
@Override
@Transactional
public StIvtStructivtCp autoConfirm(JSONObject form) {
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", form.getString("material_id")));
JSONObject param = new JSONObject();
param.put("stor_id", form.getString("stor_id"));
param.put("sect_id", form.getString("sect_id"));
param.put("material_id", form.getString("material_id"));
param.put("rule_type", RuleUtil.PRODUCTION_OUT_2);
// 2.锁定仓位
StIvtStructivtCp structivtBcp = divRuleCpService.divRuleOutAndLock(param);
if (structivtBcp == null){
return null;
}
StIvtIostorinvBcp mst = new StIvtIostorinvBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("出库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
mst.setMaterial_id(material.getMaterial_id());
mst.setPcsn(StringUtils.isNotEmpty(form.getString("pcsn")) ? form.getString("pcsn") : DateUtil.today());
mst.setPlan_qty(structivtBcp.getCanuse_qty());
mst.setQuality_scode(structivtBcp.getQuality_scode());
mst.setQty_unit_id(structivtBcp.getQty_unit_id());
mst.setBase_bill_code("");
mst.setQty_unit_name(" ");
mst.setUnit_weight(material.getNet_weight());
mst.setStoragevehicle_code(" ");
mst.setStoragevehicle_id(" ");
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
StIvtSectattr sect = sectattrService.getById(form.getString("sect_id"));
mst.setSect_code(sect.getSect_code());
mst.setSect_id(sect.getSect_id());
mst.setSect_name(sect.getSect_name());
mst.setStruct_id(structivtBcp.getStruct_id());
mst.setStruct_code(structivtBcp.getStruct_code());
mst.setStruct_name(structivtBcp.getStruct_name());
}
mst.setCreate_id("1");
mst.setCreate_name("acs");
mst.setCreate_time(DateUtil.now());
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT.getCode())
.point_code1(mst.getPoint_code())
.point_code2(structivtBcp.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
this.save(mst);
return structivtBcp;
public StIvtStructivtBcp autoConfirmout(JSONObject form) {
final StIvtStructivtBcp[] structivtBcp = new StIvtStructivtBcp[1];
RedissonUtils.lock(()->{
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", form.getString("material_id")));
JSONObject param = new JSONObject();
param.put("stor_id", form.getString("stor_id"));
param.put("sect_id", form.getString("sect_id"));
param.put("material_id", form.getString("material_id"));
param.put("rule_type", RuleUtil.PRODUCTION_OUT_2);
// 2.锁定仓位
structivtBcp[0] = divRuleCpService.divRuleOutBcp(param);
if (structivtBcp[0] != null){
StIvtIostorinvBcp mst = new StIvtIostorinvBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("出库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
mst.setMaterial_id(material.getMaterial_id());
mst.setPcsn(StringUtils.isNotEmpty(form.getString("pcsn")) ? form.getString("pcsn") : DateUtil.today());
mst.setPlan_qty(structivtBcp[0].getCanuse_qty());
mst.setQuality_scode(structivtBcp[0].getQuality_scode());
mst.setQty_unit_id(structivtBcp[0].getQty_unit_id());
mst.setBase_bill_code("");
mst.setQty_unit_name(" ");
mst.setUnit_weight(material.getNet_weight());
mst.setStoragevehicle_code(" ");
mst.setStoragevehicle_id(" ");
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
StIvtSectattr sect = sectattrService.getById(form.getString("sect_id"));
mst.setSect_code(sect.getSect_code());
mst.setSect_id(sect.getSect_id());
mst.setSect_name(sect.getSect_name());
mst.setStruct_id(structivtBcp[0].getStruct_id());
mst.setStruct_code(structivtBcp[0].getStruct_code());
mst.setStruct_name(structivtBcp[0].getStruct_name());
}
mst.setCreate_id("1");
mst.setCreate_name("acs");
mst.setCreate_time(DateUtil.now());
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT.getCode())
.point_code1(mst.getPoint_code())
.point_code2(structivtBcp[0].getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
this.save(mst);
this.lockStruct(structivtBcp[0].getStruct_code(), "出库锁",mst.getTask_id());
}
},form.getString("material_id"),1);
return structivtBcp[0];
}
@Override
public StIvtStructattr autoConfirmin(JSONObject form) {
final StIvtStructattr[] structattr = new StIvtStructattr[1];
RedissonUtils.lock(()->{
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", form.getString("material_id")));
JSONObject param = new JSONObject();
param.put("stor_id", form.getString("stor_id"));
param.put("sect_id", form.getString("sect_id"));
param.put("material_id", form.getString("material_id"));
param.put("rule_type", RuleUtil.PRODUCTION_OUT_2);
// 2.锁定仓位
structattr[0] = divRuleCpService.divRuleIn(param);
if (structattr[0] != null){
StIvtIostorinvBcp mst = new StIvtIostorinvBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("出库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
mst.setMaterial_id(material.getMaterial_id());
mst.setPcsn(StringUtils.isNotEmpty(form.getString("pcsn")) ? form.getString("pcsn") : DateUtil.today());
// mst.setPlan_qty(structattr.getCanuse_qty());
// mst.setQuality_scode(structattr.getQuality_scode());
// mst.setQty_unit_id(structattr.getQty_unit_id());
mst.setBase_bill_code("");
mst.setQty_unit_name(" ");
mst.setUnit_weight(material.getNet_weight());
mst.setStoragevehicle_code(" ");
mst.setStoragevehicle_id(" ");
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
StIvtSectattr sect = sectattrService.getById(form.getString("sect_id"));
mst.setSect_code(sect.getSect_code());
mst.setSect_id(sect.getSect_id());
mst.setSect_name(sect.getSect_name());
mst.setStruct_id(structattr[0].getStruct_id());
mst.setStruct_code(structattr[0].getStruct_code());
mst.setStruct_name(structattr[0].getStruct_name());
}
mst.setCreate_id("1");
mst.setCreate_name("acs");
mst.setCreate_time(DateUtil.now());
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT.getCode())
.point_code1(mst.getPoint_code())
.point_code2(structattr[0].getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
this.save(mst);
this.lockStruct(structattr[0].getStruct_code(), "出库锁",mst.getTask_id());
}
} ,"banchengpin_ruku",2);
return structattr[0];
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void lockStruct(String struct, String type, String inv_code) {
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, struct)
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code(type))
.set(StIvtStructattr::getInv_code,inv_code));
}
@Override

View File

@@ -20,6 +20,7 @@ import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.PointEvent;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
@@ -259,58 +260,55 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
@Override
@Transactional
public String confirmTask(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvBcp mst = this.getById(form.getString("iostorinv_id"));
checkParam(mst);
//分配货位。下发任务,更新主单据状态。更新明细任务
StIvtSectattr sect = sectattrService.getOne(new QueryWrapper<StIvtSectattr>().eq("sect_name", "半成品库区"));
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
RedissonUtils.lock(()->{
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvBcp mst = this.getById(form.getString("iostorinv_id"));
checkParam(mst);
//分配货位。下发任务,更新主单据状态。更新明细任务
StIvtSectattr sect = sectattrService.getOne(new QueryWrapper<StIvtSectattr>().eq("sect_name", "半成品库区"));
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
if (ObjectUtil.isEmpty(stIvtStructattr)) {
throw new BadRequestException("无可分配货位");
}
if (ObjectUtil.isEmpty(stIvtStructattr)) {
throw new BadRequestException("无可分配货位");
}
stIvtStructattr.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁"));
stIvtStructattr.setInv_code(mst.getBill_code());
//维护载具
structattrService.updateById(stIvtStructattr);
仓库信息:
{
mst.setSect_id(stIvtStructattr.getSect_id());
mst.setSect_code(stIvtStructattr.getSect_code());
mst.setSect_name(stIvtStructattr.getSect_name());
mst.setStruct_id(stIvtStructattr.getStruct_id());
mst.setStruct_code(stIvtStructattr.getStruct_code());
mst.setStruct_name(stIvtStructattr.getStruct_name());
}
仓库信息:
{
mst.setSect_id(stIvtStructattr.getSect_id());
mst.setSect_code(stIvtStructattr.getSect_code());
mst.setSect_name(stIvtStructattr.getSect_name());
mst.setStruct_id(stIvtStructattr.getStruct_id());
mst.setStruct_code(stIvtStructattr.getStruct_code());
mst.setStruct_name(stIvtStructattr.getStruct_name());
}
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_IN.getCode())
.acs_task_type("7")
.task_group_id(IdUtil.getStringId())
.point_code1(mst.getPoint_code())
.point_code2(stIvtStructattr.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_IN.getCode())
.acs_task_type("7")
.task_group_id(IdUtil.getStringId())
.point_code1(mst.getPoint_code())
.point_code2(stIvtStructattr.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 下发任务
sendTask(mst.getTask_id());
return mst.getTask_id();
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 下发任务
sendTask(mst.getTask_id());
structattrService.lockStruct(stIvtStructattr.getStruct_code(), "入库锁",mst.getTask_id());
},"banchengpin_ruku",2);
return null;
}
private void checkParam(StIvtIostorinvBcp mst) {

View File

@@ -3,6 +3,7 @@ package org.nl.wms.storage_manage.semimanage.service.structIvt;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.rawmanage.service.structIvt.dto.StructIvtYLQuery;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -41,4 +42,6 @@ public interface IStIvtStructivtBcpService extends IService<StIvtStructivtBcp> {
List<Map> getPdaBcpIvt(JSONObject jo);
List<Map> getPdaBcpMaterialIvt(JSONObject jo);
StIvtStructivtBcp queryIvtOutOne(JSONObject json);
}

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery;
@@ -35,4 +36,6 @@ public interface StIvtStructivtBcpMapper extends BaseMapper<StIvtStructivtBcp> {
List<Map> getPdaBcpIvt(JSONObject jo);
List<Map> getPdaBcpMaterialIvt(JSONObject jo);
StIvtStructivtBcp queryIvtOutOne(JSONObject json);
}

View File

@@ -236,4 +236,25 @@
</where>
</select>
<select id="queryIvtOutOne" resultType="org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp">
SELECT
ivt.*
FROM
st_ivt_structivt_bcp ivt
LEFT JOIN st_ivt_structattr attr ON ivt.struct_id = attr.struct_id
WHERE ivt.canuse_qty > 0
<if test="stor_id != null and stor_id != ''">
and attr.stor_id = #{stor_id}
</if>
<if test="sect_id != null and sect_id != ''">
and attr.sect_id = #{sect_id}
</if>
<if test="material_id != null and material_id != ''">
and ivt.material_id = #{material_id}
</if>
order by ivt.canuse_qty ASC,ivt.struct_code ASC
LIMIT 1
</select>
</mapper>

View File

@@ -61,6 +61,11 @@ public class StIvtStructivtBcpServiceImpl extends ServiceImpl<StIvtStructivtBcpM
return this.baseMapper.getPdaBcpMaterialIvt(jo);
}
@Override
public StIvtStructivtBcp queryIvtOutOne(JSONObject json) {
return this.baseMapper.queryIvtOutOne(json);
}
@Override
public Object getBcpIvt(StructIvtBcpQuery query, PageQuery pageQuery) {
com.github.pagehelper.Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());

View File

@@ -3,6 +3,7 @@ package org.nl.wms.system_manage.controller.dict;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.nl.common.anno.Log;
@@ -121,8 +122,8 @@ public class SysDictController {
@ApiOperation("查询字典详情")
@PostMapping("/dictDetailByCode")
@SaIgnore
public ResponseEntity<Object> createDetail(@RequestBody String code){
return new ResponseEntity<>(dictService.getDictByName(code),HttpStatus.OK);
public ResponseEntity<Object> queryDetail(@RequestBody JSONObject code){
return new ResponseEntity<>(TableDataInfo.build(dictService.getDictByName(code.getString("code"))),HttpStatus.OK);
}
}

View File

@@ -121,7 +121,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, Dict> impleme
public List<Dict> getDictByName(String name) {
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>().eq(Dict::getCode, name)
.isNotNull(Dict::getLabel)
.ne(Dict::getLabel, ""));
.ne(Dict::getLabel, "").select(Dict::getLabel,Dict::getValue));
return dictList;
}