diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index b894c96a..3cfc0626 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -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","清洗机器下料请求"), // diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java index 805b9aab..1e212fc3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/ConventConfig.java @@ -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()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java index d67e8937..8d196230 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java @@ -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().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 vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId, "cacheLine",cacheLine)); + List 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(",")); } } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java index 2244a6dc..8db56de7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java @@ -1,6 +1,8 @@ package org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import lombok.Data; @@ -24,7 +26,8 @@ public class MpsSaleOrder implements Serializable { /** * 销售单标识 */ - private Long sale_id; + @TableId + private String sale_id; /** * 销售单号 @@ -44,7 +47,7 @@ public class MpsSaleOrder implements Serializable { /** * 物料标识 */ - private Long material_id; + private String material_id; /** * 状态 @@ -64,7 +67,7 @@ public class MpsSaleOrder implements Serializable { /** * 客户标识 */ - private Long cust_id; + private String cust_id; /** * 客户编码 @@ -79,7 +82,7 @@ public class MpsSaleOrder implements Serializable { /** * 计量单位标识 */ - private Long qty_unit_id; + private String qty_unit_id; /** * 计划交期 @@ -89,7 +92,7 @@ public class MpsSaleOrder implements Serializable { /** * 创建人 */ - private Long create_id; + private String create_id; /** * 创建人姓名 @@ -104,7 +107,7 @@ public class MpsSaleOrder implements Serializable { /** * 提交人 */ - private Long audit_optid; + private String audit_optid; /** * 提交时间 @@ -119,7 +122,7 @@ public class MpsSaleOrder implements Serializable { /** * 确认人 */ - private Long confirm_optid; + private String confirm_optid; /** * 确认人姓名 @@ -144,7 +147,7 @@ public class MpsSaleOrder implements Serializable { /** * 车间标识 */ - private Long workshop_id; + private String workshop_id; /** * 生产数量 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml index e2837d2e..abcdf4bd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml @@ -7,6 +7,7 @@ der.*, mater.material_code, mater.material_name, + mater.material_spec, unit.unit_name AS qty_unit_name FROM mps_sale_order der diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java index e7bdfd1e..eb0f74f4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java @@ -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() @@ -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) tmp_cahceLine).get(workprodure.get("spec")); - } + cahceLine = ((Map) tmp_cahceLine).get(workprodure.get("spec")); } return cahceLine; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java index 08c3e835..9605f3c1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/WashMachineryTask.java @@ -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 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().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().lt("status", WorkerOrderEnum.COMPLETE.getCode())); + if (status!=null){ + return ""; + } + //TODO:判断是否人工仓优先:人工仓一台一台爬,机械仓根据物料爬 + QueryWrapper query = new QueryWrapper() + .gt("deviceinstor_qty", 0) + .eq("is_used", true) + .eq("workprocedure_id", SK_WORKPRODURE_ID) + .isNotNull("material_id") + .orderByDesc("deviceinstor_qty"); + + List SKQX = deviceService.list(query); + //查询深坑相同物料类型的点位:深坑单位:重量 - if (points.size()>0){ - Map> materialCollent = points.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("material_id"))); + if (SKQX.size()>0){ + + Map> collect = SKQX.stream().collect(Collectors.groupingBy(PdmBiDevice::getMaterial_id)); //查询清洗设备最大重量 Resource resource = loader.getResource("classpath:/groovyFile.groovy"); Script script = groovyShell.parse(resource.getFile()); - ArrayList result = (ArrayList)script.invokeMethod("getPoints", new Object[]{points, materialCollent, inupperlimitQty}); + ArrayList 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().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 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); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/EngraveCallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/EngraveCallMaterialTask.java new file mode 100644 index 00000000..b116868b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/callMaterial/EngraveCallMaterialTask.java @@ -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) { + + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java new file mode 100644 index 00000000..5ef41a1f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/sendMaterial/PlotterCallMaterialTask.java @@ -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("刻字缓存区没有可用货位."); + } + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java index eb5e84be..687aaa3b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java @@ -169,12 +169,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() - .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 workorders = this.list(new QueryWrapper().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 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); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java index c8c6693d..beec8a06 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/dao/PdmProduceWashorder.java @@ -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; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java index e8b8baa2..9b426302 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java @@ -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); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java index a684e26e..c4e9bd07 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehicleService.java @@ -16,5 +16,4 @@ import java.util.Map; */ public interface ISchCachelineVehicleService extends IService { - List getCachelineVehicle(Map query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java index 9794fb6b..3f86794a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/ISchCachelineVehilematerialService.java @@ -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; + /** *

* 缓存线载具物料表 服务类 @@ -12,5 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2023-05-06 */ public interface ISchCachelineVehilematerialService extends IService { + List getCachelineVehicle(Map query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java index c3bd2e02..25e969f1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehicleMapper.java @@ -16,7 +16,7 @@ import java.util.Map; */ public interface SchCachelineVehicleMapper extends BaseMapper { - List getCachelineVehicle(Map query); +// List getCachelineVehicle(Map query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java index cf0f52cc..1be6f9a8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/SchCachelineVehilematerialMapper.java @@ -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 { List getErrorVeh(@Param("cacheline_code") String cacheline_code); + + List getCachelineVehicle(Map query); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml index 6158c5ee..2c4a4415 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehilematerialMapper.xml @@ -24,4 +24,18 @@ + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java index 887d11e1..ad96bdbe 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehicleServiceImpl.java @@ -20,8 +20,4 @@ import java.util.Map; @Service public class SchCachelineVehicleServiceImpl extends ServiceImpl implements ISchCachelineVehicleService { - @Override - public List getCachelineVehicle(Map query) { - return this.baseMapper.getCachelineVehicle(query); - } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java index 40949607..978a0854 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/impl/SchCachelineVehilematerialServiceImpl.java @@ -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; + /** *

* 缓存线载具物料表 服务实现类 @@ -17,4 +21,8 @@ import org.springframework.stereotype.Service; @Service public class SchCachelineVehilematerialServiceImpl extends ServiceImpl implements ISchCachelineVehilematerialService { + @Override + public List getCachelineVehicle(Map query) { + return this.baseMapper.getCachelineVehicle(query); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java index 4e698d00..b7ff7137 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java @@ -49,6 +49,7 @@ public class SchBasePointServiceImpl extends ServiceImpl page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize()); + page.setOrderBy("point_code asc"); List list = schBasePointMapper.queryAll(whereJson); Set regionCodes = list.stream().map(a -> a.get("region_code")).collect(Collectors.toSet()); List regions = schBaseRegionService.list(new QueryWrapper().in("region_code", regionCodes)); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/EngraveScheduleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/EngraveScheduleService.java new file mode 100644 index 00000000..e57583e3 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/EngraveScheduleService.java @@ -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 list = workorderService.list(new QueryWrapper() + .eq("workprocedure_id", ENGRAVE_WORKPRODURE) + .eq("workorder_status", WorkerOrderEnum.PRODUCTING.getCode()) + .apply("plan_qty > dq_real_qty")); + if (CollectionUtils.isEmpty(list)){ + return; + } + Map> collect = list.stream().collect(Collectors.groupingBy(PdmProduceWorkorder::getMaterial_id)); + //工单开工规则 + for (Map.Entry> 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().eq("material_id", entry.getKey()).eq("is_delete", false)); + List 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); + } + } + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java index 59929f7e..022ba03b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java @@ -19,6 +19,8 @@ public enum IOSEnum { IO_TYPE(MapOf.of("入库", "0", "出库", "1")), //是否 IS_USED(MapOf.of("是", "1", "否", "0")), + //托盘超限类型 + VEHICLE_OVER_TYPE(MapOf.of("标准", "00", "横向超", "01","纵向超","02")), //单据类型 BILL_TYPE(MapOf.of("生产入库", "11", "手工入库", "12", "原料入库", "13" , "领料出库", "21", "销售出库", "22", "手工出库", "23")), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java index 4dfa0b09..8bd01199 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java @@ -75,11 +75,10 @@ public class IStivtlostorivnCpInController { } @PostMapping("/vehicleCheck") - @Log("校验载具是否存在") - @ApiOperation("校验载具是否存在") - public ResponseEntity vehicleCheck(@RequestBody JSONObject whereJson){ - iStIvtIostorinvCpService.vehicleCheck(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + @Log("生成载具") + @ApiOperation("生成载具") + public ResponseEntity vehicleCheck(){ + return new ResponseEntity<>(iStIvtIostorinvCpService.vehicleCheck(),HttpStatus.OK); } @PostMapping("/confirmvehicle") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java index f9389824..90e91f5e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java @@ -110,13 +110,13 @@ public interface IStIvtIostorinvCpService extends IService { void delete(Long[] ids); /** - * 校验载具是否存在 - * @param whereJson + * 生成载具编码 + * @return JSONObject * { - * "storagevehicle_code" : 载具号 + * vehicle_code : 编码 * } */ - void vehicleCheck(JSONObject whereJson); + JSONObject vehicleCheck(); /** * 分配 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/dto/IostorInvQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/dto/IostorInvQuery.java index 76612314..c32cda55 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/dto/IostorInvQuery.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/dto/IostorInvQuery.java @@ -29,6 +29,8 @@ public class IostorInvQuery extends BaseQuery { private String io_type; + private String product_area; + private Boolean is_delete = false; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java index 36f3653c..a40bda7a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -29,8 +30,6 @@ import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService; import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService; import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService; import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord; -import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext; -import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; @@ -40,7 +39,6 @@ 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.CHANGE_BILL_TYPE_ENUM; import org.nl.wms.storage_manage.IOSEnum; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpOutService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService; @@ -209,6 +207,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl dtlDaoList = new ArrayList<>(); if (whereJson.getBoolean("type")) { + // 全部分配 dtlDaoList = iostorinvdtlCpService.list( new QueryWrapper().lambda() .eq(StIvtIostorinvdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id")) @@ -216,6 +215,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl().lambda() .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) @@ -237,8 +237,8 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl disDaoList = new ArrayList<>(); if (whereJson.getBoolean("type")) { + // 全部取消 disDaoList = iostorinvdisCpService.list( new QueryWrapper().lambda() .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) .orderByAsc(StIvtIostorinvdisCp::getSeq_no) ); } else { + // 单条取消 disDaoList = iostorinvdisCpService.list( new QueryWrapper().lambda() .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) @@ -397,11 +399,15 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl().lambda() + .set(StIvtIostorinvdisCp::getPoint_id, pointDao.getPoint_id()) + .set(StIvtIostorinvdisCp::getPoint_code, pointDao.getPoint_code()) + .set(StIvtIostorinvdisCp::getPoint_name, pointDao.getPoint_name()) + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成")) + .set(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id()) + .eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id()) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) ); } @@ -458,21 +464,12 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl row.getIostorinvdtl_id().equals(dao.getIostorinvdtl_id())) .findAny().get(); - iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY,dtlDao.getSource_billdtl_id())); + iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY,dtlDao.getBase_billdtl_id())); - // 3)解锁起点 + // 3)解锁起点 / 将此托盘上的库存全部出掉 unLockNext(dao.getStruct_id()); - // 4) 更新载具扩展属性 - iMdPbStoragevehicleextService.update( - new MdPbStoragevehicleext() - .setMaterial_id("") - .setStorage_qty(BigDecimal.valueOf(0)), - new QueryWrapper().lambda() - .eq(MdPbStoragevehicleext::getStoragevehicle_code,dao.getStoragevehicle_code()) - ); - - // 5) 更新箱记录表为出库 + // 4) 更新箱记录表为出库 iMdPbBucketrecordService.update( MdPbBucketrecord.builder() .status(MasterEnum.BOX_STATUS.code("出库")) @@ -480,7 +477,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl().lambda() .eq(MdPbBucketrecord::getStoragevehicle_code, dao.getStoragevehicle_code()) .eq(MdPbBucketrecord::getMaterial_id, dao.getMaterial_id()) - .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("入库")) + .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("出库")) ); } @@ -491,7 +488,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getTask_id, task_id)); + .eq(StIvtIostorinvdisCp::getTask_id, task_id),false); // 更新任务状态为完成 if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { @@ -567,12 +564,21 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getTask_id, task_id) + ).stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); + + for(List list : collect.values()) { + StIvtIostorinvdisCp disDao_2 = list.get(0); + JSONObject mst_jo = new JSONObject(); + mst_jo.put("iostorinvdtl_id", disDao_2.getIostorinvdtl_id()); + mst_jo.put("iostorinv_id", disDao_2.getIostorinv_id()); + mst_jo.put("is_out", true); + iostorinvdisCpService.confirm(mst_jo); + } } else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { // 更新任务为执行中 @@ -609,12 +615,15 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl().lambda() + .set(StIvtIostorinvdisCp::getTask_id, "") + .set(StIvtIostorinvdisCp::getPoint_id, "") + .set(StIvtIostorinvdisCp::getPoint_code,"") + .set(StIvtIostorinvdisCp::getPoint_name,"") + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("未生成")) + .eq(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id()) + ); } @Override @@ -628,6 +637,12 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl result = bean.issueTaskToAcs3(param); + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } + // 2.更新任务状态 taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); iSchBaseTaskService.updateById(taskDao); @@ -699,7 +714,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl().lambda() - .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, attrDao.getStoragevehicle_code()) - ); - - if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code("是"))) { + if (StrUtil.equals(attrDao.getIs_zdepth(),IOSEnum.IS_USED.code("是"))) { // 解锁超限货位 iStIvtStructattrService.update( new UpdateWrapper().lambda() .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - .eq(StIvtStructattr::getControl_code,attrDao.getStruct_id()) + .eq(StIvtStructattr::getStruct_id,attrDao.getControl_code()) ); } + // 将此托盘上的所有库存删除 + iStIvtStructivtCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtStructivtCp::getStruct_id, struct_id) + .eq(StIvtStructivtCp::getFrozen_qty, 0) + ); + attrDao.setInv_code(""); attrDao.setInv_type(""); attrDao.setInv_id(""); + attrDao.setIs_zdepth(""); attrDao.setStoragevehicle_code(""); attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("未锁定")); iStIvtStructattrService.updateById(attrDao); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index 173e20a3..9f5b8e98 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -9,6 +10,7 @@ import com.alibaba.fastjson.JSON; 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.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -37,6 +39,8 @@ import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattr import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.IMpsSaleOrderService; +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.MpsSaleOrder; 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; @@ -117,6 +121,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, jsonDtl.getString("iostorinvdtl_id")) - ); - if (ObjectUtil.isNotEmpty(disIs)) throw new BadRequestException("此明细已组盘"); - List disDtlList = tableDisDtl .stream() .map(row -> (JSONObject) row) .filter(row -> ObjectUtil.isNotEmpty(row.getString("bucketunique"))) + .filter(row -> ObjectUtil.isEmpty(row.getString("iostorinvdis_id"))) .collect(Collectors.toList()); // 1.处理分配明细数据 JSONObject param = new JSONObject(); - param.put("iostorinv_id",jsonDtl.getString("iostorinv_id")); - param.put("iostorinvdtl_id",jsonDtl.getString("iostorinvdtl_id")); param.put("iostorinvdis_id",org.nl.common.utils.IdUtil.getStringId()); if (ObjectUtil.isNotEmpty(disDtlList)) { @@ -238,7 +236,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = disDtlDaoListAll .stream() - .collect(Collectors.groupingBy(StIvtIostorinvdisdtlCp::getStoragevehicle_code)); + .collect(Collectors.groupingBy(StIvtIostorinvdisdtlCp::getIostorinvdtl_id)); for (List disDtlDaoList : collect.values()) { // 3.调用服务插入分配明细 @@ -256,8 +254,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, param.getString("iostorinvdis_id")) - .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(StIvtIostorinvdisdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id()) ); - // 6.更新载具扩展属性表 - MdPbStoragevehicleext vehicleDao = new MdPbStoragevehicleext(); - vehicleDao.setMaterial_id(disDtlDao.getMaterial_id()); - vehicleDao.setStorage_qty(qty); - vehicleDao.setUpdate_id(SecurityUtils.getCurrentUserId()); - vehicleDao.setUpdate_name(SecurityUtils.getCurrentNickName()); - vehicleDao.setUpdate_time(new Date()); - - iMdPbStoragevehicleextService.update( - vehicleDao,new QueryWrapper().lambda() - .eq(MdPbStoragevehicleext::getStoragevehicle_code, disDtlDao.getStoragevehicle_code()) - ); } } @@ -306,6 +292,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl (JSONObject) row) .filter(row -> ObjectUtil.isEmpty(row.getString("bucketunique"))) + .filter(row -> ObjectUtil.isEmpty(row.getString("iostorinvdis_id"))) .collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(unDisDtlList)) { @@ -320,48 +307,53 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl disDaoList = iostorinvdisCpService.list( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ); - - if (ObjectUtil.isEmpty(disDaoList)) throw new BadRequestException("没有可取消组盘的分配明细!"); - - boolean is_struct = disDaoList.stream() - .anyMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_id())); - - if (is_struct) throw new BadRequestException("有分配明细已分配货位不可取消组盘!"); - - // 2.更新载具扩展属性、 箱记录 - Map> collect = disDaoList.stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getStoragevehicle_code)); - - for (String storagevehicle_code : collect.keySet()) { - // 更新载具扩展属性 - iMdPbStoragevehicleextService.update( - new UpdateWrapper().lambda() - .set(MdPbStoragevehicleext::getMaterial_id, "") - .set(MdPbStoragevehicleext::getStorage_qty, "0") - .eq(MdPbStoragevehicleext::getStoragevehicle_code, storagevehicle_code) - ); + if (ObjectUtil.isNotEmpty(whereJson.getString("struct_id"))) throw new BadRequestException("已分配货位,不可取消组盘!"); + // 2.判断是否有箱,有则更新箱记录表、分配表 + if (ObjectUtil.isNotEmpty(bucketunique)) { // 更新箱记录表 iMdPbBucketrecordService.update( new UpdateWrapper().lambda() - .set(MdPbBucketrecord::getStoragevehicle_code, "") - .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) - .set(MdPbBucketrecord::getStoragevehicle_id, "") - .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) - .eq(MdPbBucketrecord::getStoragevehicle_code, storagevehicle_code) + .set(MdPbBucketrecord::getStoragevehicle_code, "") + .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) + .set(MdPbBucketrecord::getStoragevehicle_id, "") + .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) + .eq(MdPbBucketrecord::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ); + + // 删除分配明细 + iStIvtIostorinvdisdtlCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) + .eq(StIvtIostorinvdisdtlCp::getBucketunique, bucketunique) + ); + + // 更新分配表 + StIvtIostorinvdisCp disDao = iostorinvdisCpService.getById(whereJson.getString("iostorinvdis_id")); + BigDecimal qty = NumberUtil.sub(disDao.getReal_qty(), whereJson.getBigDecimal("qty")); + disDao.setReal_qty(qty); + disDao.setPlan_qty(qty); + + if (disDao.getReal_qty().doubleValue() <= 0) { + // 删除分配 + iostorinvdisCpService.removeById(disDao); + } else { + // 更新 + iostorinvdisCpService.updateById(disDao); + } + + } else { + // 3:无箱 - 直接删除分配 + iostorinvdisCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) ); } - // 3.删除分配表 - iostorinvdisCpService.remove( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ); + } @@ -378,29 +370,13 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) - .eq(MdPbStoragevehicleinfo::getIs_used, true) - ); + // 生成编码返回 + JSONObject json = new JSONObject(); + json.put("vehicle_code", CodeUtil.getNewCode("VEHICCLE_CODE_CDMTP")); + return json; - if (ObjectUtil.isEmpty(daoVehicle)) throw new BadRequestException("此载具不存在或未启用"); - - // 2.校验载具是否已组盘 - MdPbStoragevehicleext daoVehicleExt = iMdPbStoragevehicleextService.getOne( - new QueryWrapper().lambda() - .eq(MdPbStoragevehicleext::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) - ); - - if (ObjectUtil.isEmpty(daoVehicleExt)) { - throw new BadRequestException("此载具扩展属性不存在,请维护!"); - } else { - if (ObjectUtil.isNotEmpty(daoVehicleExt.getMaterial_id())) - throw new BadRequestException("此载具已组盘!"); - } } @Override @@ -425,12 +401,11 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); - disDao.setStruct_id(attrDao.getStruct_id()); - iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getSource_billdtl_id())); + for (List list : collect.values()) { + BigDecimal qty = list + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdisCp disDao_1 = list.get(0); + disDao_1.setPlan_qty(qty); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id()); + + JSONObject param = ivtDataParam(disDao_1, ChangeIvtUtil.ADDWAREHOUSING_QTY, dtlDao.getBase_billdtl_id()); + param.put("product_area", mstDao.getProduct_area()); + param.put("stor_id", mstDao.getStor_id()); + iStIvtStructivtCpService.UpdateIvt(param); + } } @Override @@ -503,7 +501,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id,disDao.getIostorinvdis_id()) + .eq(StIvtIostorinvdisdtlCp::getIostorinv_id,disDao.getIostorinv_id()) + .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) ); // 3.更新任务 @@ -514,65 +513,112 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .eq(StIvtStructattr::getStruct_id,attrDao.getControl_code()) + ); + } + // 解锁货位 iStIvtStructattrService.update( new StIvtStructattr() .setLock_type(IOSEnum.LOCK_TYPE.code("未锁定")) .setInv_code("") .setInv_type("") + .setIs_zdepth("") .setInv_id(""), new QueryWrapper().lambda() - .eq(StIvtStructattr::getStruct_code, disDao.getStruct_code()) + .eq(StIvtStructattr::getStruct_id, disDao.getStruct_id()) ); - // 判断载具是否超限 - MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getById(disDao.getStoragevehicle_id()); - - if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code("是"))) { - // 解锁超限货位 - iStIvtStructattrService.update( - new UpdateWrapper().lambda() - .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) - .eq(StIvtStructattr::getControl_code,disDao.getStruct_id()) - ); - } - // 更新库存 - iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.SUBWAREHOUSING_QTY,null)); + Map> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); - // 4.更新分配 - iostorinvdisCpService.updateById( - disDao.setStruct_name("").setStruct_code("") - .setStruct_id("").setSect_id("") - .setSect_code("").setSect_name("") - .setPoint_id("").setPoint_code("") - .setPoint_name("") - .setWork_status(IOSEnum.WORK_STATUS.code("生成")) - ); + for (List list : collect.values()) { - // 5.更新明细 - StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getOne( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id()) - ); + BigDecimal qty = list + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdisCp disDao_1 = list.get(0); + disDao_1.setPlan_qty(qty); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id()); + + iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.SUBWAREHOUSING_QTY,dtlDao.getBase_billdtl_id())); - if (StrUtil.equals(dtlDao.getBill_status(), IOSEnum.BILL_STATUS.code("生成"))) { - throw new BadRequestException("没有可取消的分配明细!"); } - dtlDao.setAssign_qty(NumberUtil.sub(dtlDao.getAssign_qty(),disDao.getReal_qty())); - dtlDao.setUnassign_qty(disDao.getReal_qty()); + // 4.更新明细 + Map> collect2 = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id())) + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); - if (dtlDao.getAssign_qty().doubleValue() == 0) { - dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); - } else if (dtlDao.getAssign_qty().doubleValue() > 0) { - dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + for (List collectList : collect2.values()) { + // 计算已分配 + BigDecimal qty = collectList + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id()); + + // 明细已分配数量 + BigDecimal assign_qty = NumberUtil.sub(dtlDao.getAssign_qty(), qty); + // 明细未分配数量 + BigDecimal unAssign_qty = NumberUtil.add(dtlDao.getUnassign_qty(), qty); + + dtlDao.setAssign_qty(assign_qty); + dtlDao.setUnassign_qty(unAssign_qty); + + if (assign_qty.doubleValue() == 0) { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + } else { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } + + iostorinvdtlCpService.updateById(dtlDao); } - iostorinvdtlCpService.updateById(dtlDao); + // 5.更新分配 + iostorinvdisCpService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdisCp::getStruct_id, "") + .set(StIvtIostorinvdisCp::getStruct_code, "") + .set(StIvtIostorinvdisCp::getStruct_name,"") + .set(StIvtIostorinvdisCp::getSect_id,"") + .set(StIvtIostorinvdisCp::getSect_code,"") + .set(StIvtIostorinvdisCp::getSect_name, "") + .set(StIvtIostorinvdisCp::getPoint_id, "") + .set(StIvtIostorinvdisCp::getPoint_code, "") + .set(StIvtIostorinvdisCp::getPoint_name,"") + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + .eq(StIvtIostorinvdisCp::getIostorinv_id,whereJson.getString("iostorinv_id")) + ); // 6.更新主表 - updateMst(dtlDao.getIostorinv_id()); + updateMst(disDao.getIostorinv_id()); } @@ -603,12 +649,17 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .set(StIvtIostorinvdisCp::getPoint_id, pointDao.getPoint_id()) + .set(StIvtIostorinvdisCp::getPoint_code, pointDao.getPoint_code()) + .set(StIvtIostorinvdisCp::getPoint_name,pointDao.getPoint_name()) + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成")) + .set(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id()) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id()) ); + } @Override @@ -681,12 +732,24 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getTask_id, task_id)); - // 更新任务状态为完成 if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { // 更新任务为完成 @@ -712,12 +772,23 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getTask_id, task_id) + ) + .stream() + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); + + for(List list : collect.values()) { + StIvtIostorinvdisCp disDao_2 = list.get(0); + JSONObject mst_jo = new JSONObject(); + mst_jo.put("iostorinvdtl_id", disDao_2.getIostorinvdtl_id()); + mst_jo.put("iostorinv_id", disDao_2.getIostorinv_id()); + mst_jo.put("is_out", false); + iostorinvdisCpService.confirm(mst_jo); + } } else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { // 更新任务为执行中 @@ -734,6 +805,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .eq(StIvtIostorinvdisCp::getTask_id, task_id),false); + JSONObject param = new JSONObject(); param.put("iostorinvdis_id",disDao.getIostorinvdis_id()); delTask(param); @@ -753,12 +827,16 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .set(StIvtIostorinvdisCp::getPoint_id, "") + .set(StIvtIostorinvdisCp::getPoint_code, "") + .set(StIvtIostorinvdisCp::getPoint_name,"") + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("未生成")) + .set(StIvtIostorinvdisCp::getTask_id, "") + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id()) + ); } @Override @@ -770,7 +848,12 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl result = bean.issueTaskToAcs3(param); + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } // 2.更新任务状态 taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); @@ -824,6 +907,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) + .eq(StIvtIostorinvdisdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id")) .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) ); @@ -861,23 +945,45 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) ); // 3.更新明细表 - BigDecimal unassign_qty = iostorinvdtlCpService.getOne( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ).getUnassign_qty(); + Map> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id())) + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); - iostorinvdtlCpService.update( - new StIvtIostorinvdtlCp() - .setBill_status(IOSEnum.BILL_STATUS.code("分配完")) - .setAssign_qty(unassign_qty) - .setUnassign_qty(new BigDecimal(0)), - new QueryWrapper().lambda() - .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ); + for (List collectList : collect.values()) { + // 计算已分配 + BigDecimal qty = collectList + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id()); + + // 明细已分配数量 + BigDecimal assign_qty = NumberUtil.add(dtlDao.getAssign_qty(), qty); + // 明细未分配数量 + BigDecimal unAssign_qty = NumberUtil.sub(dtlDao.getUnassign_qty(), qty); + + dtlDao.setAssign_qty(assign_qty); + dtlDao.setUnassign_qty(unAssign_qty); + + if (unAssign_qty.doubleValue() == 0) { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); + } else { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } + + iostorinvdtlCpService.updateById(dtlDao); + } // 4.更新主表 updateMst(whereJson.getString("iostorinv_id")); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java index 60513573..8ba7185c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java @@ -92,11 +92,6 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl result = new ArrayList<>(); list.forEach(item -> { - // 获取载具信息 - MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne( - new QueryWrapper() - .eq("storagevehicle_code", item.getString("storagevehicle_code")) - ); // 获取物料信息 MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne( @@ -108,10 +103,13 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl().eq("measure_unit_id", materDao.getBase_unit_id()) ); + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(item.getString("iostorinvdtl_id")); + + StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp() - .setIostorinvdis_id(json.getString("iostorinvdis_id")) - .setIostorinvdtl_id(json.getString("iostorinvdtl_id")) - .setIostorinv_id(json.getString("iostorinv_id")) + .setIostorinvdis_id(IdUtil.getStringId()) + .setIostorinvdtl_id(dtlDao.getIostorinvdtl_id()) + .setIostorinv_id(dtlDao.getIostorinv_id()) .setSeq_no(1) .setMaterial_id(materDao.getMaterial_id()) .setPcsn(DateUtil.today()) @@ -119,9 +117,7 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl().eq("storagevehicle_code", vehicleDao.getStoragevehicle_code()) - ); - }); return result; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java index 84fc9e9b..c7aee0be 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java @@ -16,7 +16,9 @@ import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord; import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; import org.nl.wms.storage_manage.IVTEnum; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisdtlCpService; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdtlCpService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvdisdtlCpMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -52,6 +54,9 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl list) { if (!CollectionUtils.isEmpty(list)){ @@ -69,20 +74,17 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl result = new ArrayList<>(); list.forEach(item -> { - // 获取载具信息 - MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne( - new QueryWrapper() - .eq("storagevehicle_code", item.getString("storagevehicle_code")) - ); MdMeMaterialbase mataDao = iMdMeMaterialbaseService.getOne( new QueryWrapper().lambda() .eq(MdMeMaterialbase::getMaterial_code, item.getString("material_code")) ); + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(item.getString("iostorinvdtl_id")); + StIvtIostorinvdisdtlCp disDtlDao = new StIvtIostorinvdisdtlCp() - .setIostorinv_id(json.getString("iostorinv_id")) - .setIostorinvdtl_id(json.getString("iostorinvdtl_id")) + .setIostorinv_id(dtlDao.getIostorinv_id()) + .setIostorinvdtl_id(dtlDao.getIostorinvdtl_id()) .setIostorinvdis_id(json.getString("iostorinvdis_id")) .setIostorinvdisdtl_id(IdUtil.getStringId()) .setSeq_no(new BigDecimal(1)) @@ -91,9 +93,7 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl list) { @@ -74,6 +81,21 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl().lambda() + .eq(MpsSaleOrder::getSale_code, row.getBase_bill_code()) + .eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table()) + ); + if (ObjectUtil.isEmpty(orderDao)) + throw new BadRequestException("销售单不存在!"); + + row.setBase_billdtl_id(orderDao.getSale_id().toString()); + row.setBase_bill_code(orderDao.getSale_code()); + row.setBase_bill_type(orderDao.getSale_type()); + row.setBase_bill_table(orderDao.getSeq_no().toString()); + } + row.setIostorinv_id(iostorinvCp_id); row.setMaterial_id(materDao.getMaterial_id()); row.setIostorinvdtl_id(org.nl.common.utils.IdUtil.getStringId()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIfDeliveryorderCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIfDeliveryorderCpMapper.xml index 0585ae13..675c8c5f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIfDeliveryorderCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/moreOrLess/dao/mapper/StIfDeliveryorderCpMapper.xml @@ -6,6 +6,7 @@ SELECT der.*, mater.material_name, + mater.material_spec, unit.unit_name AS qty_unit_name FROM ST_IF_DeliveryOrder_CP der @@ -18,16 +19,16 @@ and der.deliver_code = #{query.deliver_code} - and der.material_code >= #{query.material_code} + and der.material_code like #{query.material_code} - and der.status >= #{query.status} + and der.status = #{query.status} - and der.cust_code >= #{query.cust_code} + and der.cust_code like #{query.cust_code} - and der.sale_code >= #{query.sale_code} + and der.sale_code like #{query.sale_code} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java index ebf7f4ef..d455b865 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java @@ -11,7 +11,7 @@ import java.math.BigDecimal; /** *

- * 仓位库存表 + * 仓位库存表:半成品/成品公用 *

* * @author generator diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml index e44d6174..188079cb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml @@ -8,7 +8,7 @@ FROM ST_IVT_StructIvt_CP ivt LEFT JOIN st_ivt_structattr attr ON ivt.struct_id = attr.struct_id - WHERE attr.lock_type = '0' + WHERE ivt.canuse_qty > 0 and ivt.frozen_qty = 0 and attr.stor_id = #{stor_id} @@ -34,6 +34,7 @@ attr.storagevehicle_code, mater.material_code, mater.material_name, + mater.material_spec, unit.unit_name AS qty_unit_name FROM ST_IVT_StructIvt_CP ivt @@ -144,30 +145,48 @@ attr.sect_name, ivt.struct_code, ivt.struct_name, + mater.material_id, mater.material_name, mater.material_code, + mater.material_spec, attr.storagevehicle_code, ivt.canuse_qty, ivt.frozen_qty, ivt.ivt_qty, ivt.warehousing_qty, unit.unit_name, - ivt.instorage_time + unit.measure_unit_id, + ivt.instorage_time, + sale.sale_code, + sale.seq_no, + sale.sale_id, + sale.sale_type FROM st_ivt_structivt_cp ivt LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id LEFT JOIN st_ivt_structattr attr ON attr.struct_id = ivt.struct_id LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id + LEFT JOIN mps_sale_order sale ON sale.sale_id = ivt.sale_id 1=1 and mater.material_code LIKE #{query.material_code} or - (mater.material_name LIKE #{query.material_code}) + (mater.material_name LIKE #{query.material_code}) or + (mater.material_spec LIKE #{query.material_code}) and attr.struct_code LIKE #{query.struct_code} or (attr.struct_name LIKE #{query.struct_code}) + + and sale.sale_code LIKE #{query.sale_code} + + + and sale.seq_no LIKE #{query.seq_no} + + + and attr.lock_type = #{query.lock_type} + and ivt.instorage_time >= #{query.start_time} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dto/CpIvtQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dto/CpIvtQuery.java index e02b21b9..23100b01 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dto/CpIvtQuery.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dto/CpIvtQuery.java @@ -18,6 +18,12 @@ public class CpIvtQuery extends BaseQuery { private String material_code; + private String sale_code; + + private String seq_no; + + private String lock_type; + @Override public void paramMapping() { super.doP.put("struct_code", QParam.builder().k(new String[]{"struct_code"}).type(QueryTEnum.LK).build()); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java index 3da06584..a66ff3b9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java @@ -105,6 +105,8 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl().lambda() .eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id")) .eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id")) - .eq(StIvtStructivtCp::getPcsn, json.getString("pcsn")) + .eq(StIvtStructivtCp::getSale_id, json.getString("sale_id")) ); if (ObjectUtil.isEmpty(ivtDao)) { @@ -170,6 +172,9 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl().lambda() .eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id")) .eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id")) - .eq(StIvtStructivtCp::getPcsn, json.getString("pcsn")) + .eq(StIvtStructivtCp::getSale_id, json.getString("sale_id")) ); if (ObjectUtil.isEmpty(ivtDao)) { @@ -221,7 +226,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl().lambda() .eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id")) .eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id")) - .eq(StIvtStructivtCp::getPcsn, json.getString("pcsn")) + .eq(StIvtStructivtCp::getSale_id, json.getString("sale_id")) ); if (ObjectUtil.isEmpty(ivtDao)) { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/DivRuleCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/DivRuleCpService.java index ddd05476..ad21e3b4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/DivRuleCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/DivRuleCpService.java @@ -39,4 +39,5 @@ public interface DivRuleCpService { * @return StIvtStructattr / */ StIvtStructivtCp divRuleOut(JSONObject whereJson); + StIvtStructivtCp divRuleOutAndLock(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/RuleUtil.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/RuleUtil.java index 2c7a3e3e..1bb5b809 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/RuleUtil.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/RuleUtil.java @@ -16,7 +16,7 @@ public class RuleUtil { /* * 出库分配: - * 根据 仓库、库区、物料、销售单找库存 + * 根据 仓库、库区、物料、销售单、行号找库存 */ public static final String PRODUCTION_OUT_1 = "out_1"; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/impl/DivRuleCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/impl/DivRuleCpServiceImpl.java index 3f54edbd..583f60b3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/impl/DivRuleCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/impl/DivRuleCpServiceImpl.java @@ -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().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; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/structLvt/StIvtStructivtBcpController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/structLvt/StIvtStructivtBcpController.java index 54b04ded..7fff1368 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/structLvt/StIvtStructivtBcpController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/controller/structLvt/StIvtStructivtBcpController.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.ApiOperation; import org.nl.common.anno.Log; import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.productmanage.service.structIvt.dto.CpIvtQuery; import org.nl.wms.storage_manage.rawmanage.service.structIvt.dto.StructIvtYLQuery; import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService; import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery; @@ -28,6 +29,14 @@ public class StIvtStructivtBcpController { @Autowired private IStIvtStructivtBcpService bcpService; + + @GetMapping + @Log("半成品库存查询") + @ApiOperation("半成品库存查询") + public ResponseEntity query(StructIvtBcpQuery query, PageQuery page) { + return new ResponseEntity<>(bcpService.packageQuery(query,page), HttpStatus.OK); + } + @GetMapping("/getBcpIvt") @Log("查询可用的半成品库存") @ApiOperation("查询可用的半成品库存") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java index c7f32b04..6ff5650a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/IStIvtIostorinvBcpOutService.java @@ -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 dtl.is_delete = false - and dtl.stor_id = #{query.stor_id } + and dtl.stor_id = #{query.stor_id} - and dtl.iostorinv_id = #{query.iostorinv_id } + and dtl.iostorinv_id = #{query.iostorinv_id} - and dtl.bill_code like %${query.bill_code}% + and dtl.bill_code like #{query.bill_code} - and dtl.bill_type like %${query.bill_type}% + and dtl.bill_type like #{query.bill_type} and dtl.bill_status = #{query.bill_status} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpOutServiceImpl.java index 7f5f9fe6..85537f0b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpOutServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpOutServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.storage_manage.semimanage.service.iostorInv.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; @@ -24,6 +25,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 +39,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 +81,8 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl().lambda() + .set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getTask_id, mst.getTask_id()) + ); + return null; } @Override + @Transactional + public StIvtStructivtCp autoConfirm(JSONObject form) { + MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper().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().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) 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) { Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空"); StIvtIostorinvBcp mst = this.getById(form.getString("iostorinv_id")); @@ -239,6 +317,12 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl result = bean.issueTaskToAcs3(param); + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } + // 2.更新任务状态 taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); iSchBaseTaskService.updateById(taskDao); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java index 8c2870e1..88371be9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.storage_manage.semimanage.service.iostorInv.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; @@ -182,6 +183,13 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl().lambda() + .set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getTask_id, mst.getTask_id()) + ); + /*structivtflowService.recordStructivtFlow( StIvtStructivtflowDto.builder() .bill_code(mst.getBill_code()).change_type_scode(CHANGE_BILL_TYPE_ENUM.IOSTORINV_IN_CONFIRM).bill_table("st_ivt_iostorinv_bcp") @@ -343,10 +351,17 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl result = bean.issueTaskToAcs3(param); + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } + // 2.更新任务状态 taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); iSchBaseTaskService.updateById(taskDao); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/IStIvtStructivtBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/IStIvtStructivtBcpService.java index 1d46366f..9a7d7425 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/IStIvtStructivtBcpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/IStIvtStructivtBcpService.java @@ -36,4 +36,5 @@ public interface IStIvtStructivtBcpService extends IService { List getBcpIvtInfo(JSONObject jo); + Object packageQuery(StructIvtBcpQuery query, PageQuery page); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java index 541faad9..b149518b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java @@ -28,5 +28,6 @@ public interface StIvtStructivtBcpMapper extends BaseMapper { List getStructIvtInfo(@Param("map") Map map); + List packageQuery(@Param("query") StructIvtBcpQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml index 1576c315..a9e2af27 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml @@ -25,6 +25,7 @@ mu.unit_name AS qty_unit_name, mb.material_code, mb.material_name, + mb.material_spec, sa.sect_id, sa.sect_code, sa.sect_name, @@ -42,7 +43,9 @@ AND sa.lock_type = '0' - and (mb.material_code = #{query.material_search} OR mb.material_name = #{query.material_search}) + and (mb.material_code = #{query.material_search} OR + mb.material_name = #{query.material_search} OR + mb.material_spec = #{query.material_search}) and sa.sect_id = #{query.sect_id} @@ -109,4 +112,41 @@ + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dto/StructIvtBcpQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dto/StructIvtBcpQuery.java index 60124525..de0219ba 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dto/StructIvtBcpQuery.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dto/StructIvtBcpQuery.java @@ -20,6 +20,10 @@ public class StructIvtBcpQuery extends BaseQuery { private String material_search; + private String material_code; + + private String struct_code; + private Boolean is_delete = false; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/impl/StIvtStructivtBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/impl/StIvtStructivtBcpServiceImpl.java index c9099df5..4a21ab18 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/impl/StIvtStructivtBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/impl/StIvtStructivtBcpServiceImpl.java @@ -42,6 +42,15 @@ public class StIvtStructivtBcpServiceImpl extends ServiceImpl page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); + TableDataInfo build = TableDataInfo.build(this.baseMapper.packageQuery(query)); + build.setTotalElements(page.getTotal()); + + return build; + } + @Override public Object getBcpIvt(StructIvtBcpQuery query, PageQuery pageQuery) { com.github.pagehelper.Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml index a1268ad0..02070dd5 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev3.yml @@ -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 diff --git a/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy b/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy index 76dcfc98..d220ccd2 100644 --- a/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy +++ b/mes/hd/nladmin-system/src/main/resources/groovyFile.groovy @@ -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> materialCollent,Double inupperlimitQty){ +def getPoints(List devices, Map> materialCollent, Double inupperlimitQty){ - def list = new ArrayList<>(); - JSONObject point = points.getJSONObject(0) - String materialId = point.getString("material_id"); - List 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 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; } diff --git a/mes/hd/nladmin-system/src/main/resources/scheduler.xml b/mes/hd/nladmin-system/src/main/resources/scheduler.xml index 62cc0d57..d344492b 100644 --- a/mes/hd/nladmin-system/src/main/resources/scheduler.xml +++ b/mes/hd/nladmin-system/src/main/resources/scheduler.xml @@ -23,4 +23,12 @@ + + + + + + + + diff --git a/mes/qd/src/views/wms/scheduler_manage/task/index.vue b/mes/qd/src/views/wms/scheduler_manage/task/index.vue index 4576e823..805fc840 100644 --- a/mes/qd/src/views/wms/scheduler_manage/task/index.vue +++ b/mes/qd/src/views/wms/scheduler_manage/task/index.vue @@ -138,7 +138,7 @@ clearable style="width: 60px" /> - 任务调度 + 任务调度 @@ -157,7 +157,7 @@ - + @@ -180,8 +180,16 @@ {{ dict.label.task_finished_type[scope.row.finished_type] }} - - + + + + + + - - 下发任务 - + + + + + + + + + + + {{ scope.row.material_code }} + - - + + + + + + + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue index e6e87626..03450ba0 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue @@ -53,27 +53,24 @@ + - - + + + - + + 生成 + @@ -91,6 +88,7 @@ :controls="false" precision="3" :min="0" + @change="changeQty" placeholder="数量" /> @@ -113,6 +111,23 @@ + + + + + +
@@ -123,6 +138,7 @@ + @@ -252,7 +269,7 @@ export default { name: 'DivDialog', components: { StructDiv, AddBox }, mixins: [crud()], - dicts: ['IO_BILL_STATUS', 'MD_OVERSTRUCT_TYPE'], + dicts: ['IO_BILL_STATUS', 'VEHICLE_OVER_TYPE', 'PCS_SAL_TYPE'], props: { dialogShow: { type: Boolean, @@ -272,8 +289,8 @@ export default { data() { return { dialogVisible: false, - stor_id: '', - sect_id: '', + stor_id: '1528627995269533696', + sect_id: '1528631043496742912', sectProp: null, structShow: false, bucketObj: null, @@ -282,6 +299,7 @@ export default { addBoxShow: false, bucketuniqueObj: null, sects: [], + defaultList: ['1528627995269533696', '1528631043496742912'], dis_row: null, form: { dtl_row: null, @@ -292,6 +310,7 @@ export default { vehicle_code: '', bucketunique: '', checked: true, + vehicle_overstruct_type: '00', tableMater: [] }, storlist: [], @@ -309,7 +328,6 @@ export default { }, methods: { disabledIos(row) { - debugger if (row.iostorinvdis_id === undefined) { return false } else { @@ -340,22 +358,34 @@ export default { }, clcikRow(row, column, event) { this.form.dtl_row = row + this.form.storage_qty = this.form.dtl_row.plan_qty crudProductIn.getIosInvDis({ 'iostorinv_id': row.iostorinv_id, 'iostorinvdtl_id': row.iostorinvdtl_id }).then(res => { - this.form.tableMater = res + debugger + if (res.length !== 0) { + this.form.tableMater = res + } }) }, clcikRowDis(row, column, event) { this.dis_row = row }, - vehicleCheck(vehicle_code) { - this.form.bucketunique = '' - // 校验载具号是否存在&&是否已被组盘 - crudProductIn.vehicleCheck({ 'storagevehicle_code': vehicle_code }).then(res => { - this.crud.notify('查询成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + vehicleCheck() { + // 生成托盘 + crudProductIn.vehicleCheck().then(res => { + this.form.tableMater = [] + this.form.vehicle_code = res.vehicle_code + this.crud.notify('生成成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) }).catch(() => { - this.form.vehicle_code = '' + }) }, + changeQty(val) { + debugger + if (parseFloat(this.form.dtl_row.plan_qty) < parseFloat(val)) { + this.crud.notify('放入数量不能大于明细数量!', CRUD.NOTIFICATION_TYPE.INFO) + this.$set(this.form, 'storage_qty', parseFloat(this.form.dtl_row.plan_qty)) + } + }, queryBox() { // 校验载具是否为空 if (!this.form.vehicle_code) { @@ -393,6 +423,7 @@ export default { }) if (fla) { + this.bucketuniqueObj.iostorinvdtl_id = this.form.dtl_row.iostorinvdtl_id this.form.tableMater.splice(-1, 0, this.bucketuniqueObj) this.form.bucketunique = '' } @@ -404,12 +435,24 @@ export default { } const item = { 'storagevehicle_code': this.form.vehicle_code, + 'iostorinvdtl_id': this.form.dtl_row.iostorinvdtl_id, 'material_id': this.form.dtl_row.material_id, 'material_code': this.form.dtl_row.material_code, + 'material_spec': this.form.dtl_row.material_spec, 'material_name': this.form.dtl_row.material_name, 'qty': this.form.storage_qty } - this.form.tableMater.splice(-1, 0, item) + + let fla2 = true + this.form.tableMater.forEach(res => { + if (res.iostorinvdtl_id === item.iostorinvdtl_id && res.storagevehicle_code === item.storagevehicle_code) { + fla2 = false + } + }) + + if (fla2) { + this.form.tableMater.splice(-1, 0, item) + } } }, deleteRow(index, rows) { @@ -486,11 +529,11 @@ export default { }) }, cancelConfirmvehicle() { - if (!this.form.dtl_row) { - this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) + if (!this.dis_row) { + this.crud.notify('请选择一条分配明细', CRUD.NOTIFICATION_TYPE.INFO) return } - crudProductIn.cancelConfirmvehicle(this.form.dtl_row).then(res => { + crudProductIn.cancelConfirmvehicle(this.dis_row).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id }).then(res => { this.form.vehicle_code = '' this.form.bucketunique = '' @@ -554,6 +597,7 @@ export default { this.dis_row.stor_id = this.stor_id.toString() this.dis_row.sect_id = this.sect_id.toString() + this.dis_row.vehicle_overstruct_type = this.form.vehicle_overstruct_type crudProductIn.divStruct(this.dis_row).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => { this.openParam = res @@ -579,6 +623,7 @@ export default { return } + this.dis_row.vehicle_overstruct_type = this.form.vehicle_overstruct_type crudProductIn.unDivStruct(this.dis_row).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => { this.openParam = res @@ -606,6 +651,9 @@ export default { this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) }) }) + }, + formatBaseType(row) { + return this.dict.label.PCS_SAL_TYPE[row.base_bill_type] } } } diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/TaskDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/TaskDialog.vue index 135169b7..e0929ee4 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/TaskDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/TaskDialog.vue @@ -42,6 +42,9 @@ + + + - + + @@ -204,6 +210,7 @@ import CRUD, { crud, form } from '@crud/crud' import crudProductIn from '@/views/wms/storage_manage/product/productIn/productin' import MaterDtl from '@/views/wms/pub/MaterDialog' import AddDtl from '@/views/wms/storage_manage/product/productOut/AddDtl' +import AddIvt from '@/views/wms/storage_manage/product/productOut/AddIvt' import crudStorattr, { getStor } from '@/views/wms/storage_manage/basedata/basedata' const defaultForm = { @@ -223,7 +230,7 @@ const defaultForm = { export default { name: 'AddDialog', - components: { MaterDtl, AddDtl }, + components: { MaterDtl, AddDtl, AddIvt }, mixins: [crud(), form(defaultForm)], dicts: ['IO_BILL_STATUS', 'ST_INV_OUT_TYPE', 'ST_QUALITY_SCODE', 'bill_type', 'product_area'], props: { @@ -240,6 +247,7 @@ export default { dialogVisible: false, materShow: false, dtlShow: false, + ivtShow: false, opendtlParam: null, materType: '03', // 关键成品 storlist: [], @@ -345,12 +353,41 @@ export default { data.material_id = row.material_id data.material_code = row.material_code data.material_name = row.material_name + data.material_spec = row.material_spec data.plan_qty = row.delivery_qty data.qty_unit_name = row.qty_unit_name data.qty_unit_id = row.qty_unit_id - data.source_billdtl_id = row.sale_id - data.source_bill_type = row.sale_type - data.source_bill_code = row.sale_code + data.source_billdtl_id = row.deliver_id + data.source_bill_type = row.deliver_type + data.source_bill_code = row.deliver_code + data.base_billdtl_id = row.sale_id + data.base_bill_code = row.sale_code + data.base_bill_table = row.sale_seq_no + data.edit = true + this.form.tableData.splice(-1, 0, data) + this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(data.plan_qty) + this.form.detail_count = this.form.tableData.length + } + }, + tableChanged3(row) { + let same_mater = true + this.form.tableData.forEach((item) => { + if (item.sale_id === row.sale_id) { + same_mater = false + } + }) + if (same_mater) { + const data = {} + data.material_id = row.material_id + data.material_code = row.material_code + data.material_name = row.material_name + data.material_spec = row.material_spec + data.plan_qty = row.canuse_qty + data.qty_unit_name = row.unit_name + data.qty_unit_id = row.measure_unit_id + data.base_billdtl_id = row.sale_id + data.base_bill_code = row.sale_code + data.base_bill_table = row.seq_no data.edit = true this.form.tableData.splice(-1, 0, data) this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(data.plan_qty) @@ -360,6 +397,9 @@ export default { insertEvent(row) { this.dtlShow = true }, + insertIvt() { + this.ivtShow = true + }, queryMater(index, row) { this.nowindex = index this.nowrow = row diff --git a/mes/qd/src/views/wms/storage_manage/product/productOut/AddDtl.vue b/mes/qd/src/views/wms/storage_manage/product/productOut/AddDtl.vue index f68da88b..5bdc47a1 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productOut/AddDtl.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productOut/AddDtl.vue @@ -78,9 +78,13 @@ - + + + + + @@ -105,6 +109,7 @@ import pagination from '@crud/Pagination' export default { name: 'AddDtl', + dicts: ['PCS_DELIVER_TYPE', 'PCS_DELI_STATUS'], components: { rrOperation, pagination, crudOperation }, cruds() { return CRUD({ @@ -175,6 +180,12 @@ export default { this.$emit('update:dialogShow', false) this.rows = this.$refs.multipleTable.selection this.$emit('tableChanged', this.tableRadio) + }, + formatStatus(row, column) { + return this.dict.label.PCS_DELI_STATUS[row.status] + }, + formatSourceType(row, column) { + return this.dict.label.PCS_DELIVER_TYPE[row.deliver_type] } } } diff --git a/mes/qd/src/views/wms/storage_manage/product/productOut/AddIvt.vue b/mes/qd/src/views/wms/storage_manage/product/productOut/AddIvt.vue new file mode 100644 index 00000000..91a3f174 --- /dev/null +++ b/mes/qd/src/views/wms/storage_manage/product/productOut/AddIvt.vue @@ -0,0 +1,198 @@ + + + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productOut/DivDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productOut/DivDialog.vue index ca40132a..0f4d65c6 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productOut/DivDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productOut/DivDialog.vue @@ -112,7 +112,7 @@ - + @@ -204,10 +204,10 @@ - - - + + + @@ -227,7 +227,7 @@ export default { name: 'DivDialog', components: { StructIvt }, mixins: [crud()], - dicts: ['IO_BILL_STATUS', 'work_status'], + dicts: ['IO_BILL_STATUS', 'work_status', 'PCS_DELIVER_TYPE'], props: { dialogShow: { type: Boolean, @@ -315,6 +315,9 @@ export default { bill_statusFormat(row, column) { return this.dict.label.IO_BILL_STATUS[row.bill_status] }, + formatSourceType(row, column) { + return this.dict.label.PCS_DELIVER_TYPE[row.source_bill_type] + }, quality_scodeFormat(row, column) { return this.dict.label.ST_QUALITY_SCODE[row.quality_scode] }, diff --git a/mes/qd/src/views/wms/storage_manage/product/productOut/StructIvt.vue b/mes/qd/src/views/wms/storage_manage/product/productOut/StructIvt.vue index 88033482..2717ab56 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productOut/StructIvt.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productOut/StructIvt.vue @@ -79,8 +79,9 @@ + + -