add:刻字机叫料功能

This commit is contained in:
zhangzhiqiang
2023-06-19 13:46:31 +08:00
parent 001665e7a5
commit d794da7662
30 changed files with 637 additions and 119 deletions

View File

@@ -30,6 +30,7 @@ public enum AcsTaskEnum {
TASK_CACHELINE_OUT("4","缓存线-专机缺料任务"),
TASK_PLOTTER_MAC("5","刻字机-满料入库"),
TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"),
TASK_PLOTTER_CALL_MATERIAL("14","刻字机-叫料请求"),
TASK_WARP_MAC("7","包装机-叫料出库"),
TASK_WARP_EMPTY("8","包装机-送空框"),
TASK_STRUCT_IN("9","入库-生产入库"),
@@ -49,10 +50,11 @@ public enum AcsTaskEnum {
REQUEST_CALLTYPE_EMP("1","专机缺料请求"),
REQUEST_PLOTTER_SEND_FULL("3","刻字满料请求"),
REQUEST_PLOTTER_CALL_EMP("4","刻字缺空框请求"),
REQUEST_PLOTTER_CALL_MATERIAL("9","刻字叫料请求"),
REQUEST_WARP_CALL_FULL("5","包装缺料请求"),
REQUEST_WARP_SEND_EMP("6","包装送空框请求"),
REQUEST_WASH_EMP("7","清洗机器料请求"),
REQUEST_WASH_FULL("8","清洗机器料请求"),
REQUEST_WASH_EMP("7","清洗机器料请求"),
REQUEST_WASH_FULL("8","清洗机器料请求"),
//

View File

@@ -10,6 +10,7 @@ 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.callMaterial.WrapCallMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendEmpty.WrapSendEmptyTask;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterCallMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterSendMaterialTask;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.SmartLifecycle;
@@ -26,6 +27,7 @@ public class ConventConfig implements SmartLifecycle {
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_EMP, SpringContextHolder.getBean(SpeEmpTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_EMP, 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_MATERIAL, SpringContextHolder.getBean(PlotterCallMaterialTask.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));
System.out.println("初始化Task_Collent完成777"+AcsToWmsServiceImpl.Task_Collent.size());

View File

@@ -14,7 +14,9 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehicleService;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
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.scheduler.ISchProcessRouteService;
@@ -54,9 +56,7 @@ public class AgvInstService {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchCachelineVehicleService cachelineVehicleService;
@Autowired
private ISchCachelineVehicleService cachelineVe3hicleService;
private ISchCachelineVehilematerialService cachelineVehicleService;
public static void main(String[] args) {
String a= "A1_DC_15_6";
@@ -198,10 +198,10 @@ public class AgvInstService {
if (StringUtils.isNotEmpty(cacheLine)){
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId, "cacheLine",cacheLine));
List<SchCachelineVehilematerial> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId, "cacheLine", cacheLine));
if (vehicle.size()>0){
if (vehicle.size()>count){
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
return vehicle.stream().map(SchCachelineVehilematerial::getVehicle_code).collect(Collectors.joining(","));
}
}
}

View File

@@ -97,7 +97,6 @@ public class SpeEmpTask extends AbstractAcsTask {
if (speemp !=null){
return "speemp";
}
//{"workorder_code":230523019,"device_code":"A1_TW_15_6_D","type":"1"}
String cahceLine = getRouteXmlFlowByWorkprodure(param);
if (cahceLine == null) { return null; }
PdmProduceWorkorder one = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
@@ -110,7 +109,6 @@ public class SpeEmpTask extends AbstractAcsTask {
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务:"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
JSONObject form = new JSONObject(MapOf.of("start_point_code",cahceLine,
"next_point_code",param.getString("device_code"),"return_point_code", cahceLine,"vehicle_code",
"","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",AcsTaskEnum.TASK_CACHELINE_OUT.getCode(),"material_id", one.getMaterial_id()));
@@ -118,7 +116,6 @@ public class SpeEmpTask extends AbstractAcsTask {
JSONObject task = packageParam(form, taskId);
task.put("table_fk_id",param.getString("workorder_code"));
taskService.save(task.toJavaObject(SchBaseTask.class));
return taskId;
}
@@ -146,8 +143,7 @@ public class SpeEmpTask extends AbstractAcsTask {
cahceLine = (String) tmp_cahceLine;
}
if (tmp_cahceLine instanceof Map){
cahceLine = ((Map<String, String>) tmp_cahceLine).get(workprodure.get("spec"));
}
cahceLine = ((Map<String, String>) tmp_cahceLine).get(workprodure.get("spec")); }
return cahceLine;
}

View File

@@ -12,11 +12,16 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.ConstantParam;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
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.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.备份pdm.IPdmProduceWashorderService;
import org.nl.wms.product_manage.备份pdm.dao.PdmProduceWashorder;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
@@ -38,12 +43,16 @@ import java.util.stream.Collectors;
@Slf4j
@Service
public class WashMachineryTask extends AbstractAcsTask {
private static final String SK_WORKPRODURE_ID = "1535144552481034240";
@Autowired
private IPdmProduceWashorderService iPdmProduceWashorderService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
private IPdmBiDeviceService deviceService;
FileSystemResourceLoader loader = new FileSystemResourceLoader();
GroovyShell groovyShell = new GroovyShell();
@@ -64,11 +73,10 @@ public class WashMachineryTask extends AbstractAcsTask {
pointTab.update(MapOf.of("material_id","","point_status","1"),"point_code in ('"+sql+"')");
QueryWrapper<PdmProduceWashorder> query = new QueryWrapper<>();
PdmProduceWashorder update = new PdmProduceWashorder();
update.setIsError("0");
update.setErrorInfo("");
update.setUpdateId("1");
update.setUpdateTime(DateUtil.now());
update.setCreateName("acs");
update.setIs_error(false);
update.setError_info("");
update.setUpdate_time(DateUtil.now());
update.setCreate_name("acs");
update.setStatus(StatusEnum.TASK_FINISH.getCode());
iPdmProduceWashorderService.update(update,new QueryWrapper<PdmProduceWashorder>().eq("workorder_id",workorderId));
}
@@ -77,56 +85,65 @@ public class WashMachineryTask extends AbstractAcsTask {
@Override
@SneakyThrows
public String createTask(JSONObject param) {
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject materialTab = WQLObject.getWQLObject("md_me_materialbase");
String pointCode = param.getString("device_code");
JSONObject device = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "8", "point_code", pointCode)).process().uniqueResult(0);
//is_used = '0'人工下料:入料仓上线inupperlimit_qty;is_artificial人工
Double inupperlimitQty = device.getDouble("inupperlimit_qty");
String deviceCode = device.getString("device_code");
String artificial = device.getString("is_artificial").equals("1")?"0":"1";
JSONArray points = pointTab.query("region_code = 'SKQX' and material_id is not null and point_status = '2' and is_used = '"+artificial+"' order by vehicle_qty desc").getResultJSONArray(0);
//清洗机是否有物料重量上线?{"device_code":"A1_CPQXJ_01_S","type":"7"}
PdmProduceWashorder status = iPdmProduceWashorderService.getOne(new QueryWrapper<PdmProduceWashorder>().lt("status", WorkerOrderEnum.COMPLETE.getCode()));
if (status!=null){
return "";
}
//TODO:判断是否人工仓优先:人工仓一台一台爬,机械仓根据物料爬
QueryWrapper<PdmBiDevice> query = new QueryWrapper<PdmBiDevice>()
.gt("deviceinstor_qty", 0)
.eq("is_used", true)
.eq("workprocedure_id", SK_WORKPRODURE_ID)
.isNotNull("material_id")
.orderByDesc("deviceinstor_qty");
List<PdmBiDevice> SKQX = deviceService.list(query);
//查询深坑相同物料类型的点位:深坑单位:重量
if (points.size()>0){
Map<String, List<Object>> materialCollent = points.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("material_id")));
if (SKQX.size()>0){
Map<String, List<PdmBiDevice>> collect = SKQX.stream().collect(Collectors.groupingBy(PdmBiDevice::getMaterial_id));
//查询清洗设备最大重量
Resource resource = loader.getResource("classpath:/groovyFile.groovy");
Script script = groovyShell.parse(resource.getFile());
ArrayList<JSONObject> result = (ArrayList)script.invokeMethod("getPoints", new Object[]{points, materialCollent, inupperlimitQty});
ArrayList<JSONObject> result = (ArrayList)script.invokeMethod("getPoints", new Object[]{SKQX, collect, 9999999d});
//确认acs参数 创建工单下发acs
if (!CollectionUtils.isEmpty(result)){
String material_id = result.get(0).getString("material_id");
JSONObject material = materialTab.query("material_id = '" + material_id + "' and is_delete = 0").uniqueResult(0);
Double qty = result.stream().mapToDouble(value -> value.getDouble("qty")).sum();
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", material_id).eq("is_delete", false));
PdmProduceWashorder washorder = new PdmProduceWashorder();
washorder.setWorkorderId(IdUtil.getStringId());
washorder.setWorkorderCode(IdUtil.getStringId());
washorder.setIsNeedmove("0");
washorder.setDeviceCode(deviceCode);
washorder.setMaterialWeight(new BigDecimal(qty));
washorder.setMaterialCode(material.getString("material_code"));
washorder.setCreateTime(DateUtil.now());
washorder.setInDevices(result.stream().map(a->a.getString("point_code")).collect(Collectors.joining(",")));
washorder.setProductArea(device.getString("product_area"));
washorder.setCreateId("1");
washorder.setCreateName("acs");
washorder.setWorkorder_id(IdUtil.getStringId());
washorder.setWorkorder_code(IdUtil.getStringId());
washorder.setDevice_code(param.getString("device_code"));
washorder.setWeight(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("weight")).sum()));
washorder.setQty(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("qty")).sum()));
washorder.setMaterial_code(material.getMaterial_code());
washorder.setMaterial_spec(material.getMaterial_spec());
washorder.setMaterial_id(material.getMaterial_id());
washorder.setCreate_time(DateUtil.now());
washorder.setIn_devices(result.stream().map(a->a.getString("device_code")).collect(Collectors.joining(",")));
washorder.setProduct_area("A1");
washorder.setCreate_id("1");
washorder.setCreate_name("acs");
washorder.setStatus(StatusEnum.TASK_CREATE.getCode());
//下发"
//下发:"人工框:一个一个爬坡:是人工仓优先还是自动仓优先
JSONArray request = new JSONArray();
JSONObject jsonObject = new JSONObject(MapOf.of("workorder_id", washorder.getWorkorderId()
, "workorder_code", washorder.getWorkorderCode()
, "qty", washorder.getMaterialWeight()
, "material_code", washorder.getMaterialCode()
, "device_code", pointCode
, "is_needmove", "0"
, "in_devices", washorder.getInDevices()
JSONObject jsonObject = new JSONObject(MapOf.of("workorder_id", washorder.getWorkorder_id()
, "workorder_code", washorder.getWorkorder_code()
, "qty", washorder.getQty()
,"weight",washorder.getWeight()
, "material_code", washorder.getMaterial_code()
, "material_spec", washorder.getMaterial_spec()
, "device_code", washorder.getDevice_code()
, "in_devices", washorder.getIn_devices()
));
request.add(jsonObject);
Map<String, Object> response = wmsToAcsService.order(request);
if (response.get("status").equals(HttpStatus.BAD_REQUEST)){
washorder.setErrorInfo((String) response.get("message"));
washorder.setError_info((String) response.get("message"));
washorder.setStatus(StatusEnum.TASK_START_ERROR.getCode());
washorder.setIsError("1");
washorder.setIs_error(true);
}
iPdmProduceWashorderService.save(washorder);
}

View File

@@ -0,0 +1,32 @@
package org.nl.wms.product_manage.sch.tasks.callMaterial;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.springframework.stereotype.Service;
/*
* @author ZZQ
* @Date 2023/6/16 08:40
*/
@Service
public class EngraveCallMaterialTask extends AbstractAcsTask {
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
}
@Override
public String createTask(JSONObject param) {
return null;
}
@Override
public void cancel(String task_id) {
}
@Override
public void pointConfirm(JSONObject param) {
}
}

View File

@@ -0,0 +1,202 @@
package org.nl.wms.product_manage.sch.tasks.sendMaterial;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author: lyd
* @Description: 刻字机送料
* @Date: 2023/4/3
*/
@Slf4j
@Service
public class PlotterCallMaterialTask extends AbstractAcsTask {
private static final String OPT_NAME = "刻字机#";
@Autowired
private WmsToAcsService wms;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject task, String status) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " +
"AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
"AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("任务已完成,不可取消!");
}
String pointCode2 = taskObj.getString("point_code2");
JSONObject pointObj = null;
if (ObjectUtil.isNotEmpty(pointCode2)) {
pointObj = pointTab.query("point_code = '" + pointCode2 + "'").uniqueResult(0);
}
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 执行中
// 任务执行中
taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
if (ObjectUtil.isNotEmpty(pointObj)) {
// 释放点位并赋值
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
pointObj.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode());
pointObj.put("material_id", taskObj.getString("material_id"));
pointObj.put("update_time", DateUtil.now());
pointTab.update(pointObj);
// todo: 是否需要记录库存
}
// 2任务完成
taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode());
taskObj.put("update_time", DateUtil.now());
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
taskTab.update(taskObj);
} else {
/**
* 取消任务
* 1、点位恢复
* 2、任务状态修改
*/
// 2点位恢复
if (ObjectUtil.isNotEmpty(pointObj)) {
// 释放点位
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
pointObj.put("update_time", DateUtil.now());
pointTab.update(pointObj);
}
// 2任务取消
taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode());
taskObj.put("update_time", DateUtil.now());
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
taskTab.update(taskObj);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
/**
* 1.刻字机缺料请求 or 定时任务查询刻字机工单
* 2.生成刻字机任务
* 3.根据工单物料生成半成品出库任务:自动下发叫料
* 4.半成品出库任务完成之后:
* 触发刻字机任务:
* 1.查看当前所有刻字机工单获取当前刻字机Math.min(缺料数,倒料可倒数量)
* 2.待确认:类似深坑那样一次给多台设备,还是一个设备一个设备的给
*/
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
String start_point_code = param.getString("device_code");
String workorder = param.getString("workorder_code");
if(StrUtil.isEmpty(start_point_code)) {
throw new BadRequestException("起点不能为空!");
}
// 判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " +
"and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
"and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务");
}
if(StrUtil.isEmpty(workorder)) {
throw new BadRequestException("工单不能为空!");
}
// 判断工单
JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrderObj)){
throw new BadRequestException("下发工单不存在未完成工单:"+workorder);
}
// 查找任务状态
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_MAC.getDesc());
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", workOrderObj.getString("material_id"));
task.put("task_status", StatusEnum.TASK_CREATE.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("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());
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
// 找终点
try {
pointConfirm(task);
JSONArray data = new JSONArray();
JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0);
data.add(result);
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
// 未找到
task.put("remark", ex.getMessage());
task.put("update_time", DateUtil.now());
task.put("task_status", StatusEnum.TASK_START_ERROR.getCode());
taskTab.update(task);
}
return taskdtl_id;
}
@Override
public void cancel(String task_id) {
}
/**
* 满料请求
* 从刻字机满料缓存区中获取空位放入就行
* @param taskObj: 任务对象
*/
@Override
public void pointConfirm(JSONObject taskObj) {
log.info(OPT_NAME+"fullMaterial param:{}",JSONObject.toJSONString(taskObj));
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
// 去刻字缓存区寻找空位
JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" +
StatusEnum.POINT_STATUS_EMPTY.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() +
"' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" +
StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(point)) {
// 找到位置
// 点位上锁
point.put("lock_type", StatusEnum.LOCK_ON.getCode());
pointTab.update(point);
// 设置点位
taskObj.put("point_code2", point.getString("point_code"));
taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
throw new BadRequestException("刻字缓存区没有可用货位.");
}
}
}

View File

@@ -169,12 +169,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
if (ids == null || ids.size() == 0) {
return;
}
this.update(new UpdateWrapper<PdmProduceWorkorder>()
.set("workorder_status", WorkerOrderEnum.SEND.getCode())
.set("down_id", SecurityUtils.getCurrentUserId())
.set("down_name", SecurityUtils.getCurrentNickName())
.set("down_time", new Date())
.in("workorder_id", ids));
List<PdmProduceWorkorder> workorders = this.list(new QueryWrapper<PdmProduceWorkorder>().in("workorder_id", ids).lt("workorder_status",WorkerOrderEnum.AUTO_COMPLETE.getCode()));
if (workorders.size()!= ids.size()){
throw new BadRequestException("完成的工单不允许再次下发");
}
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, ids.toArray(new String[0]));
}
@@ -421,7 +419,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
throw new BadRequestException("当前工单存在未报工的报工记录,请先进行报工");
}
Map<String, Object> resp = wmsToAcsService.order(array);
if (HttpStatus.BAD_REQUEST.equals(resp.get("status"))) {
if (HttpStatus.BAD_REQUEST.value() == (int)resp.get("status")) {
throw new BadRequestException(resp.get("message") != null ? String.valueOf(resp.get("message")) : "acs反馈异常");
}
return RestBusinessTemplate.execute(() -> resp);

View File

@@ -24,58 +24,62 @@ public class PdmProduceWashorder implements Serializable {
/**
* 工单编号
*/
private String workorderId;
private String workorder_id;
/**
* 工单编号
*/
private String workorderCode;
private String workorder_code;
private String status;
/**
* 生产区域
*/
private String productArea;
private String product_area;
/**
* 实际数量
*/
private String qty;
private BigDecimal qty;
/**
* 实际单重
*/
private BigDecimal weight;
/**
* 物料编号
*/
private String materialCode;
private String material_code;
/**
* 物料标识
*/
private String isNeedmove;
private String material_spec;
/**
* 实际单重
* 物料标识
*/
private BigDecimal materialWeight;
private String material_id;
/**
* 当前生产设备编码
*/
private String deviceCode;
private String device_code;
/**
* 工单是否异常
*/
private String isError;
private Boolean is_error;
/**
* 设备集合
*/
private String inDevices;
private String in_devices;
/**
* 异常信息
*/
private String errorInfo;
private String error_info;
/**
* 备注
@@ -85,32 +89,21 @@ public class PdmProduceWashorder implements Serializable {
/**
* 创建人
*/
private String createId;
private String create_id;
/**
* 创建人
*/
private String createName;
private String create_name;
/**
* 创建时间
*/
private String createTime;
/**
* 修改人
*/
private String updateId;
/**
* 修改人
*/
private String updateName;
private String create_time;
/**
* 修改时间
*/
private String updateTime;
private String update_time;
}

View File

@@ -78,6 +78,7 @@ public class SchedulerController {
throw new BadRequestException("当前工序路由id"+route.getProcess_id()+"没有对应xml配置文件配置");
}
route.setProcess_name(process.getName());
route.setRule_code(form.getString("material_spec"));
processRouteService.save(route);
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -16,5 +16,4 @@ import java.util.Map;
*/
public interface ISchCachelineVehicleService extends IService<SchCachelineVehicle> {
List<SchCachelineVehicle> getCachelineVehicle(Map query);
}

View File

@@ -1,8 +1,12 @@
package org.nl.wms.scheduler_manage.service.cacheline;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* <p>
* 缓存线载具物料表 服务类
@@ -12,5 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @since 2023-05-06
*/
public interface ISchCachelineVehilematerialService extends IService<SchCachelineVehilematerial> {
List<SchCachelineVehilematerial> getCachelineVehicle(Map query);
}

View File

@@ -16,7 +16,7 @@ import java.util.Map;
*/
public interface SchCachelineVehicleMapper extends BaseMapper<SchCachelineVehicle> {
List<SchCachelineVehicle> getCachelineVehicle(Map<String,String> query);
// List<SchCachelineVehicle> getCachelineVehicle(Map<String,String> query);
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.scheduler_manage.service.cacheline.dao.mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -18,4 +19,7 @@ import java.util.Map;
public interface SchCachelineVehilematerialMapper extends BaseMapper<SchCachelineVehilematerial> {
List<Map> getErrorVeh(@Param("cacheline_code") String cacheline_code);
List<SchCachelineVehilematerial> getCachelineVehicle(Map<String,String> query);
}

View File

@@ -24,4 +24,18 @@
</if>
</where>
</select>
<select id="getCachelineVehicle"
resultType="org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial">
SELECT
v.vehicle_code,v.vehicle_status,v.material_id,v.quantity
FROM
sch_cacheline_vehilematerial v
LEFT JOIN sch_cacheline_position p ON p.vehicle_code = v.vehicle_code
WHERE p.vehicle_code <![CDATA[<>]]> '' and
v.vehicle_status = #{vehicle_status} and
p.cacheLine_code = #{cacheLine}
<if test="material_id != null and material_id != ''">
and v.material_id = #{material_id}
</if>
</select>
</mapper>

View File

@@ -20,8 +20,4 @@ import java.util.Map;
@Service
public class SchCachelineVehicleServiceImpl extends ServiceImpl<SchCachelineVehicleMapper, SchCachelineVehicle> implements ISchCachelineVehicleService {
@Override
public List<SchCachelineVehicle> getCachelineVehicle(Map query) {
return this.baseMapper.getCachelineVehicle(query);
}
}

View File

@@ -1,11 +1,15 @@
package org.nl.wms.scheduler_manage.service.cacheline.impl;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import org.nl.wms.scheduler_manage.service.cacheline.dao.mapper.SchCachelineVehilematerialMapper;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
* 缓存线载具物料表 服务实现类
@@ -17,4 +21,8 @@ import org.springframework.stereotype.Service;
@Service
public class SchCachelineVehilematerialServiceImpl extends ServiceImpl<SchCachelineVehilematerialMapper, SchCachelineVehilematerial> implements ISchCachelineVehilematerialService {
@Override
public List<SchCachelineVehilematerial> getCachelineVehicle(Map query) {
return this.baseMapper.getCachelineVehicle(query);
}
}

View File

@@ -49,6 +49,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override
public Object queryAll(Map whereJson, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize());
page.setOrderBy("point_code asc");
List<Map> list = schBasePointMapper.queryAll(whereJson);
Set<Object> regionCodes = list.stream().map(a -> a.get("region_code")).collect(Collectors.toSet());
List<SchBaseRegion> regions = schBaseRegionService.list(new QueryWrapper<SchBaseRegion>().in("region_code", regionCodes));

View File

@@ -0,0 +1,125 @@
package org.nl.wms.scheduler_manage.service.scheduler;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.BaseCode;
import org.nl.common.utils.IdUtil;
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.callMaterial.EngraveCallMaterialTask;
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;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/*
* @author ZZQ
* @Date 2023/6/16 09:21
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class EngraveScheduleService {
private static final String ENGRAVE_WORKPRODURE = "1535144682756116480";
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private IStIvtIostorinvBcpOutService stIvtIostorinvBcpOutService;
@Autowired
private EngraveCallMaterialTask engraveCallMaterialTask;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
public void run(){
MDC.put("requestMethod","EngraveScheduleService#EngravePublish");
MDC.put("requestIp", "127.0.0.1");
MDC.put("traceId", BaseCode.intToChars(IdUtil.getLongId()));
MDC.put("requestTime", DateUtil.now());
this.EngravePublish();
}
@Transactional
public void EngravePublish(){
/**
* 1.查询当前正在执行的刻字工单数组
* 2.获取相同物料的工单:查询半成品库存物料:有的话则进行半成品出库:出到对接位
* 3.半成品出库完成后:触发刻字机叫料任务:
* 4。根据物料获取工单对应设备生成刻字机叫料任务
*/
List<PdmProduceWorkorder> list = workorderService.list(new QueryWrapper<PdmProduceWorkorder>()
.eq("workprocedure_id", ENGRAVE_WORKPRODURE)
.eq("workorder_status", WorkerOrderEnum.PRODUCTING.getCode())
.apply("plan_qty > dq_real_qty"));
if (CollectionUtils.isEmpty(list)){
return;
}
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 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

@@ -568,9 +568,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getTask_id, task_id)
)
.stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
).stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
for(List<StIvtIostorinvdisCp> list : collect.values()) {
StIvtIostorinvdisCp disDao_2 = list.get(0);
@@ -709,7 +707,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
stIvtIostorinvCp.setSysdeptid("111");
stIvtIostorinvCp.setSyscompanyid("111");
}else {
// 修改
stIvtIostorinvCp.setUpdate_id(SecurityUtils.getCurrentUserId());
stIvtIostorinvCp.setUpdate_name(SecurityUtils.getCurrentNickName());

View File

@@ -11,7 +11,7 @@ import java.math.BigDecimal;
/**
* <p>
* 仓位库存表
* 仓位库存表:半成品/成品公用
* </p>
*
* @author generator

View File

@@ -105,6 +105,8 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl<StIvtStructivtCpMap
@Override
public StIvtStructivtCp queryIvtOutOne(JSONObject json) {
if (ObjectUtil.isEmpty(json.getString("material_id")))
throw new BadRequestException("物料不能为空");
return baseMapper.queryIvtOutOne(json);
}

View File

@@ -39,4 +39,5 @@ public interface DivRuleCpService {
* @return StIvtStructattr /
*/
StIvtStructivtCp divRuleOut(JSONObject whereJson);
StIvtStructivtCp divRuleOutAndLock(JSONObject whereJson);
}

View File

@@ -4,6 +4,8 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.common.utils.RedissonUtils;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
@@ -100,4 +102,25 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
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;
}
}

View File

@@ -3,6 +3,7 @@ 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.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;
@@ -43,6 +44,16 @@ public interface IStIvtIostorinvBcpOutService extends IService<StIvtIostorinvBcp
* @return
*/
String confirm(JSONObject form);
/**
* 自动出库
* @param param
* param.put("stor_id", form.getString("stor_id"));
* param.put("sect_id", form.getString("sect_id"));
* param.put("material_id", form.getString("material_id"));
* @return
*/
StIvtStructivtCp autoConfirm(JSONObject param);
/**
* 下发单据
* @param form

View File

@@ -24,6 +24,8 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.util.SpringContextHolder;
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.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
@@ -36,10 +38,9 @@ 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.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckdtlBcp;
import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckmstBcp;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpOutService;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.dao.StIvtIostorinvBcp;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.dao.mapper.StIvtIostorinvBcpMapper;
@@ -79,6 +80,8 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
private IStIvtSectattrService sectattrService;
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务表服务
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Override
@@ -207,6 +210,72 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
return null;
}
@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;
}
@Override
@Transactional
public String confirmTask(JSONObject form) {

View File

@@ -23,11 +23,11 @@ spring:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
username: ${DB_USER:root}
# password: ${DB_PWD:123456}
password: ${DB_PWD:942464Yy}
password: ${DB_PWD:123456}
# 初始连接数
initial-size: 5

View File

@@ -1,24 +1,27 @@
import com.alibaba.fastjson.JSONArray
import com.alibaba.fastjson.JSONObject
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice
def getPoints(JSONArray points,Map<String, List<Object>> materialCollent,Double inupperlimitQty){
def getPoints(List<PdmBiDevice> devices, Map<String, List<PdmBiDevice>> materialCollent, Double inupperlimitQty){
def list = new ArrayList<>();
JSONObject point = points.getJSONObject(0)
String materialId = point.getString("material_id");
List<Object> collect = materialCollent.get(materialId);
collect.sort(Comparator.comparingDouble({ item -> ((JSONObject) item).getDouble("vehicle_qty") }).reversed());
PdmBiDevice device = devices.get(0)
String materialId = device.getMaterial_id();
List<PdmBiDevice> collect = materialCollent.get(materialId);
Double qty = 0.0;
for (Object o1 : collect) {
def list = new ArrayList<>();
for (PdmBiDevice o1 : collect) {
if (qty>inupperlimitQty){
return list;
}
def item = new JSONObject()
item.put("point_code",((JSONObject) o1).getString("point_code"))
item.put("qty",((JSONObject) o1).getDouble("vehicle_qty"));
item.put("device_code",o1.getDevice_code())
item.put("qty",o1.getDeviceinstor_qty());
item.put("weight",o1.getDeviceinstor_weight().doubleValue());
item.put("material_id",materialId);
list.add(item);
qty = qty+((JSONObject) o1).getDouble("vehicle_qty");
if (o1.getIs_artificial()){
return list;
}
qty = qty+o1.getDeviceinstor_qty();
}
return list;
}

View File

@@ -23,4 +23,12 @@
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_STLS" targetRef="end"></flow>
<end id="end" name="Junior Reject End" sourceRef="A1_SKQX"></end>
</process>
<process id="XYXL" name="旋压下料">
<start id="start" name="Starter" targetRef="A1_XYXL"></start>
<flow id="A1_XYXL" name="无屑下料工序" has="1" sourceRef="starter" targetRef="A1_SKQX">
<param id="cacheLine" value="A1_HCX_03"/>
</flow>
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_XYXL" targetRef="end"></flow>
<end id="end" name="Junior Reject End" sourceRef="A1_SKQX"></end>
</process>
</definitions>