diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/ReturnLockProcess.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/ReturnLockProcess.java new file mode 100644 index 00000000..d598ec1f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/ReturnLockProcess.java @@ -0,0 +1,9 @@ +package org.nl.common.domain; + +import java.io.IOException; + +@FunctionalInterface +public +interface ReturnLockProcess { + T process() throws IOException; +} 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 bd200d02..56aa2df2 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 @@ -58,7 +58,7 @@ public enum AcsTaskEnum { REQUEST_PLOTTER_CALL_EMP("4","刻字空框请求"),//ok REQUEST_WARP_CALL_FULL("5","包装缺料请求"),//ok REQUEST_WARP_SEND_EMP("6","包装送空框请求"),//ok - REQUEST_WASH_LACK("7","清洗机器缺料请求"),//深坑->清洗:相同物料的重量<150公斤; + REQUEST_WASH_SEND_MATERIAL("7","储料仓上料"),//深坑->清洗:相同物料的重量<150公斤; REQUEST_WASH_FULL("9","清洗机器满料请求"),//清洗机满料请求//去半成品入库 REQUEST_WASH_EMP("10","清洗机器空框请求"),//清洗机下料位 REQUEST_WASH_FULL_ERROR("11","清洗机-满料异常请求"),//去半成品入库 异常位 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java index bb3b0157..7a83344b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java @@ -2,6 +2,7 @@ package org.nl.common.utils; import lombok.SneakyThrows; import org.nl.common.domain.LockProcess; +import org.nl.common.domain.ReturnLockProcess; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.util.SpringContextHolder; import org.redisson.api.RLock; @@ -42,4 +43,28 @@ public class RedissonUtils { } } } + + @SneakyThrows + public static T lockAndReturn(ReturnLockProcess process, String key, Integer seconds){ + RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class); + RLock lock = redissonClient.getLock(key); + boolean isLock; + if (seconds == null){ + isLock = lock.tryLock(); + }else { + isLock = lock.tryLock(seconds, TimeUnit.SECONDS); + } + try { + if (isLock){ + T result = process.process(); + return result; + } else { + throw new BadRequestException("当前业务 key:"+key+"正在执行请稍后再试"); + } + }finally { + if (isLock){ + lock.unlock(); + } + } + } } 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 3ed76562..a52141b4 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 @@ -7,7 +7,7 @@ import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.ext_manage.acs.service.impl.AcsToWmsServiceImpl; import org.nl.wms.scheduler_manage.service.extendtask.SpeMachinery.SpeEmpTask; import org.nl.wms.scheduler_manage.service.extendtask.SpeMachinery.SpeFullTask; -import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask; +import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask; import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterCallEmptyTask; import org.nl.wms.scheduler_manage.service.extendtask.wash.WashCallEmptyTask; import org.nl.wms.scheduler_manage.service.extendtask.packageWrap.WrapCallMaterialTask; @@ -27,7 +27,7 @@ public class ConventConfig implements SmartLifecycle { public void start() { AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_FULL, SpringContextHolder.getBean(SpeFullTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_EMP, SpringContextHolder.getBean(SpeEmpTask.class)); - AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_LACK, SpringContextHolder.getBean(WashMachineryTask.class)); +// AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL, SpringContextHolder.getBean(WashMachineryTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_SEND_FULL, SpringContextHolder.getBean(PlotterSendMaterialTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_EMP, SpringContextHolder.getBean(PlotterCallEmptyTask.class)); AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_CALL_FULL, SpringContextHolder.getBean(WrapCallMaterialTask.class)); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java index 352f4b07..6a160338 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java @@ -12,7 +12,7 @@ import org.nl.common.utils.api.ResultCode; import org.nl.modules.common.exception.BizCoreException; import org.nl.wms.ext_manage.acs.service.AcsToWmsService; import org.nl.wms.scheduler_manage.service.extendtask.TaskScheduleService; -import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask; +import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -73,11 +73,10 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.orderStatus(param), HttpStatus.OK); } - @PostMapping("/washOrder") + @PostMapping("/washTask") @Log("ACS给WMS反馈清洗工单完成") - //("ACS给WMS反馈清洗工单完成") @SaIgnore - public ResponseEntity washOrderFinish(@RequestBody JSONObject param) { + public ResponseEntity washTaskFinish(@RequestBody JSONObject param) { washMachineryTask.updateTaskStatus( param, param.getString("status")); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java index 070f8afc..1f8a4a2b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java @@ -24,7 +24,7 @@ import org.nl.wms.ext_manage.acs.service.AcsToWmsService; import org.nl.wms.pda_manage.pda.service.CacheLineHandService; import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask; import org.nl.wms.scheduler_manage.service.task.TaskService; -import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask; +import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask; 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.service.workorder.IPdmProduceWorkorderService; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AgvInstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AgvInstService.java index 8c86457b..78e6c7ed 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AgvInstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AgvInstService.java @@ -5,9 +5,12 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.LockProcess; +import org.nl.common.domain.ReturnLockProcess; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.MapOf; +import org.nl.common.utils.RedissonUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; @@ -25,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -79,7 +83,7 @@ public class AgvInstService { task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode()); task.put("task_name",AcsTaskEnum.TASK_PRODUCT_WASH.getDesc()); // query.put("qty",quantity) 深坑物料需要转重量 - collect = deviceService.workproceduceDevicesWeight(query); + collect = RedissonUtils.lockAndReturn((ReturnLockProcess>>) () -> deviceService.workproceduceDevicesWeight(query), "allocation:A1_SKQX", 2); }else { collect = deviceService.workproceduceDevicesQty(query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java index d5870dc8..8567ecd0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java @@ -59,6 +59,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ , "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") , "is_send", task.getBoolean("is_send")?"1":"0" , "vehicle_code", task.getString("vehicle_code") + , "in_pcsn", task.getString("task_code") , "agv_system_type", task.getString("agv_system_type") )); form.add(param); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java index 7da020f3..2c691cbc 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java @@ -271,7 +271,6 @@ public class WmsToSapServiceImpl implements WmsToSapService { String material_code = row.getString("Matnr").replaceAll("^(0+)", ""); //获取物料对应的物料标识 MdMeMaterialbase mater_jo = materialbaseService.getOne(new QueryWrapper().eq("material_code", material_code)); - deliver_jo.setMaterial_code(material_code); if (ObjectUtil.isEmpty(mater_jo)) { deliver_jo.setMaterial_id(""); deliver_jo.setIs_success("0"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/PcsDeliveryOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/PcsDeliveryOrder.java index a58a2e5c..ef896d9b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/PcsDeliveryOrder.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/PcsDeliveryOrder.java @@ -48,7 +48,6 @@ public class PcsDeliveryOrder implements Serializable { * 物料标识 */ private String material_id; - private String material_code; /** * 状态 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/mapper/xml/PcsDeliveryOrderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/mapper/xml/PcsDeliveryOrderMapper.xml index c6f4e5ed..5d9d4ba9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/mapper/xml/PcsDeliveryOrderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/deliveryorder/service/dao/mapper/xml/PcsDeliveryOrderMapper.xml @@ -7,6 +7,7 @@ deliveryorder.*, material.material_code, material.material_name, + material.material_spec, unit.unit_name FROM PCS_delivery_order deliveryorder @@ -18,7 +19,7 @@ and deliveryorder.deliver_code like '%${deliver_code}%' - and deliveryorder.sale_code = #{status} + and deliveryorder.status = #{status} and material.product_series in ${product_series} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/PdaWashController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/PdaWashController.java new file mode 100644 index 00000000..ec81a5f1 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/PdaWashController.java @@ -0,0 +1,253 @@ +package org.nl.wms.pda_manage.pda.controller; +/* + * @author ZZQ + * @Date 2023/7/12 21:13 + */ +import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.TableDataInfo; +import org.nl.common.anno.Log; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.MapOf; +import org.nl.common.utils.RedissonUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.ext_manage.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.scheduler_manage.service.extendtask.wash.WashMachineryTask; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@Api(tags = "成品手持服务") +@RequestMapping("/api/pda/wash") +@Slf4j +@SaIgnore +public class PdaWashController { + + private static double LIMIT_WEIGHT = 150000L; + + @Autowired + private IMdMeMaterialbaseService materialbaseService; + @Autowired + private IPdmBiDeviceService iDeviceService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private WashMachineryTask washMachineryTask; + @Autowired + private WmsToAcsService wmsToAcsService; + + @PostMapping("/specList") + @SaIgnore + public ResponseEntity queryAll(@RequestBody JSONObject whereJson){ + List specs = new ArrayList<>(); + List list = iDeviceService.list(new QueryWrapper() + .eq("workprocedure_id", "1535144552481034240") + .eq("is_used", true) + .ne("material_id", "") + .isNotNull("material_id")); + if (!CollectionUtils.isEmpty(list)){ + Set materials = list.stream().map(a->a.getMaterial_id()).collect(Collectors.toSet()); + List materialbases = materialbaseService.list(new QueryWrapper() + .in("material_id", materials)); + for (MdMeMaterialbase materialbase : materialbases) { + Map item = new HashMap<>(); + item.put("label",materialbase.getMaterial_spec()); + item.put("value",materialbase.getMaterial_id()); + specs.add(item); + } + } + return new ResponseEntity<>(TableDataInfo.build(specs),HttpStatus.OK); + } + + @PostMapping("/query") + @Log("深坑物料") + @SaIgnore + public ResponseEntity query(@RequestBody JSONObject query) { + //设备 + QueryWrapper queryWrapper = new QueryWrapper() + .eq("workprocedure_id", "1535144552481034240") + .eq("is_used", true) + .eq("product_area",query.getString("product_area")); + if (StringUtils.isNotEmpty(query.getString("material_id"))){ + queryWrapper.eq("material_id",query.getString("material_id")); + } + if (StringUtils.isNotEmpty(query.getString("device_code"))){ + queryWrapper.eq("device_code",query.getString("device_code")); + } + List> list = iDeviceService.listMaps(queryWrapper); + if (!CollectionUtils.isEmpty(list)){ + Set materials = list.stream().map(a->a.get("material_id")).collect(Collectors.toSet()); + Set devices = list.stream().map(a->a.get("device_code")).collect(Collectors.toSet()); + HashMap taskMap = taskService.list(new QueryWrapper().in("point_code2", devices) + .eq("task_status", StatusEnum.TASK_RUNNING.getCode())) + .stream().collect(HashMap::new, (k, v) -> k.put(v.getPoint_code2(), v), HashMap::putAll); + Map materialMap = materialbaseService.list(new QueryWrapper() + .in("material_id", materials)) + .stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_id(), v), HashMap::putAll); + for (Map pdmBiDevice : list) { + MdMeMaterialbase materialbase = materialMap.get(pdmBiDevice.get("material_id")); + SchBaseTask baseTask = taskMap.get(pdmBiDevice.get("device_code")); + pdmBiDevice.put("material_name",materialbase!=null?materialbase.getMaterial_name():""); + pdmBiDevice.put("material_code",materialbase!=null?materialbase.getMaterial_code():""); + pdmBiDevice.put("material_spec",materialbase!=null?materialbase.getMaterial_spec():""); + pdmBiDevice.put("task_code",baseTask!=null?baseTask.getTask_code():""); + } + } + return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); + } + + @PostMapping("/submitWash") + @Log("提交清洗") + @SaIgnore + public ResponseEntity submitWash(@RequestBody String[] devices) { + if (devices.length>0){ + List list = iDeviceService.list(new QueryWrapper() + .eq("workprocedure_id", "1535144552481034240") + .in("device_code", devices)); + Set collect = list.stream().map(PdmBiDevice::getMaterial_id).collect(Collectors.toSet()); + if (!CollectionUtils.isEmpty(collect)){ + if (collect.size()>1){ + throw new BadRequestException("选择的储料仓必须是相同物料"); + } + double sum = list.stream().mapToDouble(a->a.getDeviceinstor_weight().doubleValue()).sum(); + if (sum>LIMIT_WEIGHT){ + throw new BadRequestException("选择的储料仓必物料总重量大于150公斤"); + } + //生成生坑清洗爬坡任务 + try { + JSONObject param = new JSONObject(MapOf.of("devices", list)); + RedissonUtils.lock( () -> washMachineryTask.createTask(param), "allocation:A1_SKQX", null); + }catch (Exception ex){ + log.error("清洗上料任务失败:{}",ex); + throw new BadRequestException("任务创建失败:"+ex.getMessage()); + } + } + } + return new ResponseEntity<>(HttpStatus.OK); + } + + /*-----------------倒料---------------------*/ + + @PostMapping("/weighing") + @Log("称重") + @SaIgnore + public ResponseEntity weighing(@RequestBody JSONObject param) { + List devices = (List) param.get("list"); + JSONObject req = new JSONObject(); + req.put("device_code",devices.get(0)); + JSONObject result = wmsToAcsService.request(req, "api/wms/handWeigh"); + if (!StrUtil.equals(result.getString("status"), "200")) { + throw new BadRequestException((String)result.get("message")); + } + List ws = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("deviceinstor_weight",StringUtils.isEmpty(result.getString("weight"))?"0":result.getString("weight")); + map.put("device_code",devices.get(0)); + ws.add(map); + return new ResponseEntity<>(TableDataInfo.build(ws),HttpStatus.OK); + } + @PostMapping("/weighingFinish") + @Log("深坑倒料确认") + @SaIgnore + public ResponseEntity weighingFinish(@RequestBody JSONObject form) { + List list = new ArrayList<>(); + String device_code = form.getString("device_code"); + + MdMeMaterialbase one = materialbaseService.getOne(new QueryWrapper() + .eq("material_code", form.getString("material_code"))); + if (one ==null){ + throw new BadRequestException("当前物料编码不存在"+form.getString("material_code")); + } + iDeviceService.update(new UpdateWrapper() + .set("material_id",one.getMaterial_id()) + .set("remark","") + .set("deviceinstor_weight",form.getBigDecimal("deviceinstor_weight")) + .eq("device_code",device_code)); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/materialList") + @Log("物料列表") + @SaIgnore + public ResponseEntity materialList(@RequestBody JSONObject query, PageQuery page) { + List list = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isNotEmpty(query.getString("material_code"))){ + queryWrapper.eq("material_code",query.getString("material_code")); + } + Page result = materialbaseService.page(page.build(),queryWrapper); + return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK); + } + + /*-----------------清洗下料---------------------*/ + @PostMapping("/washTasks") + @Log("物料列表") + @SaIgnore + public ResponseEntity washTasks(@RequestBody JSONObject query) { + List> taskMap = taskService.listMaps(new QueryWrapper() + .eq("task_status", StatusEnum.TASK_FINISH.getCode()).eq("task_step", 2)); + if (!CollectionUtils.isEmpty(taskMap)){ + Set materials = taskMap.stream().map(a->a.get("material_id")).collect(Collectors.toSet()); + Map materialMap = materialbaseService.list(new QueryWrapper() + .in("material_id", materials)) + .stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_id(), v), HashMap::putAll); + for (Map task : taskMap) { + MdMeMaterialbase materialbase = materialMap.get(task.get("material_id")); + task.put("material_name",materialbase!=null?materialbase.getMaterial_name():""); + task.put("material_code",materialbase!=null?materialbase.getMaterial_code():""); + task.put("material_spec",materialbase!=null?materialbase.getMaterial_spec():""); + } + } + return new ResponseEntity<>(TableDataInfo.build(taskMap),HttpStatus.OK); + } + + @PostMapping("//washTaskFinish") + @Log("强制完成任务") + @SaIgnore + public ResponseEntity washTaskFinish(@RequestBody JSONObject query) { + taskService.update(new UpdateWrapper() + .set("task_step",3) + .eq("task_id",query.getString("task_id"))); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @PostMapping("/washVechileInfo") + @Log("物料列表") + @SaIgnore + public ResponseEntity washVechileInfo(@RequestBody JSONObject query) { + JSONObject req = new JSONObject(); + req.put("device_code","A1_CPQXJ_01_X"); + JSONObject result = wmsToAcsService.request(req, "api/wms/handWeight"); + if (!StrUtil.equals(result.getString("status"), "200")) { + throw new BadRequestException((String)result.get("message")); + } + List list = new ArrayList<>(); + list.add(MapOf.of("weight",result.get("weight"),"vechile_code",result.getString("vechile_code"))); + return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/TmpKZController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/TmpKZController.java index 03163d40..70b1330c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/TmpKZController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/controller/TmpKZController.java @@ -15,6 +15,7 @@ import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.RedissonUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.ext_manage.acs.service.WmsToAcsService; import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterCallEmptyTask; @@ -25,6 +26,7 @@ import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -51,7 +53,7 @@ public class TmpKZController { * @param param * @return */ - @RequestMapping("deviceinstorQty") + @PostMapping("deviceinstorQty") @SaIgnore public ResponseEntity deviceinstorQty(@RequestBody JSONObject param){ SchBasePoint one = basePointService.getOne(new QueryWrapper() @@ -70,7 +72,7 @@ public class TmpKZController { return new ResponseEntity<>( HttpStatus.OK); } - @RequestMapping("callVechile") + @PostMapping("callVechile") @SaIgnore public ResponseEntity callVechile(@RequestBody JSONObject param){ plotterCallEmptyTask.callEmpVechile(param.getString("device_code")); @@ -78,7 +80,7 @@ public class TmpKZController { } //鞋料 - @RequestMapping("kzunload") + @PostMapping("kzunload") @SaIgnore public ResponseEntity kzunload(@RequestBody JSONObject param) { JSONObject jo = new JSONObject(); @@ -89,45 +91,51 @@ public class TmpKZController { } return new ResponseEntity<>( HttpStatus.OK); } - @RequestMapping("kzresidue") + @PostMapping("kzresidue") @SaIgnore public ResponseEntity kzresidue(@RequestBody JSONObject param){ - JSONObject jo = new JSONObject(); - jo.put("next_point_code", param.getString("device_code")); - jo.put("start_point_code", "A1_KZ_SL"); - jo.put("weight", param.getString("qty")); - JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver"); - if (!StrUtil.equals(result.getString("status"), "200")) { - throw new BadRequestException((String)result.get("message")); - } + RedissonUtils.lock(()->{ + JSONObject jo = new JSONObject(); + jo.put("next_point_code", param.getString("device_code")); + jo.put("start_point_code", "A1_KZ_SL"); + jo.put("weight", param.getString("qty")); + JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver"); + if (!StrUtil.equals(result.getString("status"), "200")) { + throw new BadRequestException((String)result.get("message")); + } + },"kzresidue",null); return new ResponseEntity<>( HttpStatus.OK); } - @RequestMapping("tmpcallVechile") + @PostMapping("tmpcallVechile") @SaIgnore public ResponseEntity tmpcallVechile(@RequestBody JSONObject param){ - JSONObject moveTask =taskService.createMoveTask("A1_BCPRKW_SD", "A1_KZ_SL", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20); - JSONArray data = new JSONArray(); - data.add(moveTask); - Map result = wmsToAcsService.issueTaskToAcs2(data); - if (StrUtil.equals((String)result.get("status"), "400")) { - throw new BadRequestException((String)result.get("message")); - } - moveTask.put("task_status",StatusEnum.TASK_PUBLISH.getCode()); - taskService.save(moveTask.toJavaObject(SchBaseTask.class)); + RedissonUtils.lock(()->{ + JSONObject moveTask =taskService.createMoveTask("A1_BCPRKW_SD", "A1_KZ_SL", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20); + JSONArray data = new JSONArray(); + data.add(moveTask); + Map result = wmsToAcsService.issueTaskToAcs2(data); + if (StrUtil.equals((String)result.get("status"), "400")) { + throw new BadRequestException((String)result.get("message")); + } + moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode()); + taskService.save(moveTask.toJavaObject(SchBaseTask.class)); + },"刻字上料呼叫载具",null); return new ResponseEntity<>( HttpStatus.OK); } - @RequestMapping("tmpsendVechile") + @PostMapping("tmpsendVechile") @SaIgnore public ResponseEntity tmpsendVechile(@RequestBody JSONObject param){ - JSONObject moveTask = taskService.createMoveTask("A1_KZ_SL", "A1_BCPRKW_SD", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20); - JSONArray data = new JSONArray(); - data.add(moveTask); - Map result = wmsToAcsService.issueTaskToAcs2(data); - if (StrUtil.equals((String)result.get("status"), "400")) { - throw new BadRequestException((String)result.get("message")); - } - moveTask.put("task_status",StatusEnum.TASK_PUBLISH.getCode()); - taskService.save(moveTask.toJavaObject(SchBaseTask.class)); + RedissonUtils.lock(()->{ + JSONObject moveTask = taskService.createMoveTask("A1_KZ_SL", "A1_BCPRKW_SD", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20); + JSONArray data = new JSONArray(); + data.add(moveTask); + Map result = wmsToAcsService.issueTaskToAcs2(data); + if (StrUtil.equals((String)result.get("status"), "400")) { + throw new BadRequestException((String)result.get("message")); + } + moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode()); + taskService.save(moveTask.toJavaObject(SchBaseTask.class)); + },"刻字上料送载具",null); return new ResponseEntity<>( HttpStatus.OK); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java index ab34735d..0cccc8b5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java @@ -3,6 +3,7 @@ package org.nl.wms.product_manage.controller.device; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -15,6 +16,8 @@ import org.nl.common.utils.SecurityUtils; 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.service.device.dto.DeviceQuery; +import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService; +import org.nl.wms.product_manage.service.workprocedure.dao.PdmBiWorkprocedure; import org.nl.wms.product_manage.备份pdm.service.DeviceService; import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto; import org.springframework.beans.factory.annotation.Autowired; @@ -40,6 +43,9 @@ public class PdmBiDeviceController { private DeviceService deviceService; @Autowired private IPdmBiDeviceService iDeviceService; + @Autowired + private IPdmBiWorkprocedureService pdmBiWorkprocedureService; + @GetMapping @Log("查询生产设备") @@ -96,10 +102,8 @@ public class PdmBiDeviceController { @GetMapping("/getWorkprocedure") @Log("工序下拉") - //("工序下拉") - //@PreAuthorize("@el.check('device:list')") public ResponseEntity getWorkprocedure () { - return new ResponseEntity<>(deviceService.getWorkprocedure(), HttpStatus.OK); + return new ResponseEntity<>(pdmBiWorkprocedureService.list(new QueryWrapper().eq("is_used",true)), HttpStatus.OK); } @GetMapping("/getDeviceList") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/SpecialDeviceController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/SpecialDeviceController.java index 630347dd..c0c174a4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/SpecialDeviceController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/SpecialDeviceController.java @@ -2,6 +2,7 @@ package org.nl.wms.product_manage.controller.device; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -67,7 +68,7 @@ public class SpecialDeviceController { @Log("更新物料") //("更新物料") @SaIgnore - public ResponseEntity queryList (@RequestBody JSONObject query){ + public ResponseEntity update (@RequestBody JSONObject query){ String device_code = query.getString("device_code"); if (StringUtils.isNotEmpty(device_code)){ iDeviceService.update(new UpdateWrapper() @@ -93,5 +94,15 @@ public class SpecialDeviceController { } return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } + @PostMapping("/setUsed") + @Log("设置启停") + @SaIgnore + public ResponseEntity setUsed (@RequestBody JSONObject query){ + Assert.notNull(new Object[]{query,query.getString("device_code"),query.get("is_used")},"请求参数不能为空"); + iDeviceService.update(new UpdateWrapper() + .set("is_used",query.getBoolean("is_used")) + .eq("device_code",query.getString("device_code"))); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/DeviceServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/DeviceServiceImpl.java index a3113dd4..fc914c05 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/DeviceServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/DeviceServiceImpl.java @@ -14,8 +14,10 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService; import org.nl.wms.product_manage.备份pdm.service.DeviceService; import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,6 +35,8 @@ import java.util.Map; @RequiredArgsConstructor @Slf4j public class DeviceServiceImpl implements DeviceService { + @Autowired + private IPdmBiWorkprocedureService pdmBiWorkprocedureService; @Override public Map queryAll(Map whereJson, Pageable page){ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/WashMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/WashMachineryTask.java deleted file mode 100644 index 2b47bc2e..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/WashMachineryTask.java +++ /dev/null @@ -1,164 +0,0 @@ -package org.nl.wms.scheduler_manage.service.extendtask; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import groovy.lang.GroovyShell; -import groovy.lang.Script; -import lombok.SneakyThrows; -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.core.bean.WQLObject; -import org.nl.wms.ext_manage.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.service.workorder.IPdmProduceWashorderService; -import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWashorder; -import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.FileSystemResourceLoader; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; - -import java.math.BigDecimal; -import java.util.*; -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(); - - - - @Override - @Transactional - public void updateTaskStatus(JSONObject param,String status) { - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - - Assert.notEmpty(new Object[]{param,param.getString("workorder_id")},"参数不能为空"); - String inDevices = param.getString("in_devices"); - String workorderId = param.getString("workorder_id"); - if (!StringUtils.isBlank(inDevices)){ - String sql = Arrays.stream(inDevices.split(",")).collect(Collectors.joining("','")); - //跟新工单:状态为完成;跟新点位 material_id is not null and point_status = '2' - pointTab.update(MapOf.of("material_id","","point_status","1"),"point_code in ('"+sql+"')"); - QueryWrapper query = new QueryWrapper<>(); - PdmProduceWashorder update = new PdmProduceWashorder(); - 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)); - } - } - - @Override - @SneakyThrows - public String createTask(JSONObject param) { - //清洗机是否有物料重量上线?{"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 (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[]{SKQX, collect, 9999999d}); - //确认acs参数 创建工单下发acs - if (!CollectionUtils.isEmpty(result)){ - String material_id = result.get(0).getString("material_id"); - MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper().eq("material_id", material_id).eq("is_delete", false)); - PdmProduceWashorder washorder = new PdmProduceWashorder(); - 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.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.setError_info((String) response.get("message")); - washorder.setStatus(StatusEnum.TASK_START_ERROR.getCode()); - washorder.setIs_error(true); - } - iPdmProduceWashorderService.save(washorder); - } - } - return null; - } - - @Override - public void cancel(String taskId) { - - } - @Override - public void pointConfirm(JSONObject param) { - //查询深坑相同物料类型的点位 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - JSONArray points = pointTab.query("material_id is not null and point_status = 1 and is_used = 1 and lock_type = 0 and region_code = '" + ConstantParam.SK_REGION + "'").getResultJSONArray(0); - - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/manage/AbstractAcsTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/manage/AbstractAcsTask.java index 4ee83474..6333bc84 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/manage/AbstractAcsTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/manage/AbstractAcsTask.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; +import java.util.ArrayList; import java.util.List; @@ -35,7 +36,7 @@ public abstract class AbstractAcsTask { public void notifyAcs(JSONArray param){}; public List schedulerTask(List tasks){ - return tasks; + return new ArrayList<>(); }; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapCallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapCallMaterialTask.java index bd0d9539..d3e5437b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapCallMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapCallMaterialTask.java @@ -110,7 +110,10 @@ public class WrapCallMaterialTask extends AbstractAcsTask { Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); //?刻字满料请求:可以存在多个任务? List list = taskService.list(new QueryWrapper() - .eq("point_code2", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode()) + .nested(i -> i + .eq("point_code1", param.getString("device_code")).or() + .eq("point_code3", param.getString("device_code"))) + .lt("task_status", StatusEnum.TASK_FINISH.getCode()) ); if (!CollectionUtils.isEmpty(list)){ throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code"))); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapSendEmptyTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapSendEmptyTask.java index b8c31248..78f976b0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapSendEmptyTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/packageWrap/WrapSendEmptyTask.java @@ -105,10 +105,13 @@ public class WrapSendEmptyTask extends AbstractAcsTask { 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)) { + List list = taskService.list(new QueryWrapper() + .nested(i -> i + .eq("point_code1", param.getString("device_code")).or() + .eq("point_code3", param.getString("device_code"))) + .lt("task_status", StatusEnum.TASK_FINISH.getCode()) + ); + if (ObjectUtil.isNotEmpty(list)) { throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务"); } String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/wash/WashMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/wash/WashMachineryTask.java new file mode 100644 index 00000000..8977d9d0 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/extendtask/wash/WashMachineryTask.java @@ -0,0 +1,178 @@ +package org.nl.wms.scheduler_manage.service.extendtask.wash; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import groovy.lang.GroovyShell; +import groovy.lang.Script; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.ConstantParam; +import org.nl.common.enums.AcsTaskEnum; +import org.nl.common.enums.StatusEnum; +import org.nl.common.enums.WorkerOrderEnum; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.MapOf; +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_manage.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.dao.StIvtStructattr; +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.service.workorder.IPdmProduceWashorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWashorder; +import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask; +import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; +import org.nl.wms.storage_manage.IOSEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.FileSystemResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 专机任务 + */ +@Slf4j +@Service +public class WashMachineryTask extends AbstractAcsTask { + private static String SK_WORKPRODURE_ID = "1535144552481034240"; + + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private WmsToAcsService wmsToAcsService; + @Autowired + private IPdmBiDeviceService deviceService; + + + + + @Override + @Transactional + public void updateTaskStatus(JSONObject param,String status) { + QueryWrapper query = new QueryWrapper<>(); + if (StringUtils.isNotEmpty(param.getString("in_pcsn"))){ + query.eq("task_code",param.getString("in_pcsn")); + } + if (StringUtils.isNotEmpty(param.getString("task_id"))){ + query.eq("task_id",param.getString("task_id")); + } + SchBaseTask taskDao = taskService.getOne(query); + // 更新任务状态为完成 + if (taskDao.getTask_status().equals(TaskStatusEnum.FINISHED.getCode())||taskDao.getTask_status().equals(TaskStatusEnum.CANCEL.getCode())){ + return; + } + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + taskDao.setTask_step(2); + taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode()); + taskDao.setUpdate_time(new Date()); + taskDao.setFinished_type(AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode()); + taskDao.setUpdate_name("acs"); + deviceService.update(new UpdateWrapper() + .set("material_id","") + .set("is_used",true) + .set("deviceinstor_qty",0) + .set("deviceinstor_weight",0) + .set("update_time",DateUtil.now()) + .in("device_code",taskDao.getPoint_code1().split(","))); + } + if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { + taskDao.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) { + taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode()); + deviceService.update(new UpdateWrapper() + .set("is_used",true) + .set("update_time",DateUtil.now()) + .set("remark","") + .in("device_code",taskDao.getPoint_code1().split(","))); + } + taskService.updateById(taskDao); + } + + @Override + @Transactional + public String createTask(JSONObject param) { + //清洗机是否有物料重量上线?{"devices":"string[]","material_id":"7"} + List devices = (List) param.get("devices"); + List list = taskService.list(new QueryWrapper() + .in("point_code2", devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.toList())) + .lt("task_status", StatusEnum.TASK_FINISH.getCode())); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException("当前点位存在正在执行的任务:" + +list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + } + JSONArray data = new JSONArray(); + JSONArray items = new JSONArray(); + ArrayList start_points = new ArrayList<>(); + + JSONObject task = new JSONObject(); + task.put("task_id", IdUtil.getStringId()); + task.put("task_name", AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL.getDesc()); + task.put("task_type", AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL.getCode()); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_status", StatusEnum.TASK_PUBLISH.getCode()); + task.put("point_code3", "A1_SKQXJ_01_S");//A1_SKQXJ_01_X + task.put("handle_class", this.getClass().getName()); + task.put("is_send", "1"); + task.put("is_delete", StatusEnum.STATUS_FLASE.getCode()); + task.put("create_id", SecurityUtils.getCurrentUserId()); + task.put("create_name", SecurityUtils.getCurrentNickName()); + task.put("create_time", DateUtil.now()); + task.put("is_auto_issue", false); + task.put("priority", "1"); + task.put("task_step", 1); + task.put("material_id",devices.get(0).getMaterial_id()); + task.put("material_qty",devices.stream().mapToInt(a->a.getDeviceinstor_weight().intValue()).sum()); + + task.put("point_code1",devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.joining(","))); + taskService.save(task.toJavaObject(SchBaseTask.class)); + // 下发 + JSONObject acsRequest = new JSONObject(MapOf.of("device_code","A1_CPQXJ_01_S","in_pcsn",task.getString("task_code"),"in_devices",task.getString("point_code1"))); + JSONObject result = wmsToAcsService.request(acsRequest, "api/wms/cleaningIn"); + if (!StrUtil.equals(result.getString("status"), "200")) { + throw new BadRequestException((String)result.get("message")); + } + deviceService.update(new UpdateWrapper() + .set("is_used",false) + .set("update_time",DateUtil.now()) + .set("remark",task.getString("task_id")) + .in("device_code",devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.toList()))); + return null; + } + + @Override + @Transactional + public void cancel(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + if (taskDao !=null){ + taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode()); + deviceService.update(new UpdateWrapper() + .set("is_used",true) + .eq("device_code",taskDao.getPoint_code1())); + taskService.updateById(taskDao); + } + } + @Override + public void pointConfirm(JSONObject param) { + + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java index 25c90a70..2038a023 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java @@ -66,7 +66,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl().eq("task_id", task_id)); - switch (method_name) { // forceFinish, cancel case "immediateNotifyAcs": if (Integer.valueOf(taskObj.getTask_status()) * 销售发货单表 前端控制器 @@ -34,11 +43,18 @@ public class StIfDeliveryorderCpController { @Autowired private IStIfDeliveryorderCpService iStIfDeliveryorderCpService; + @Autowired + private IPcsDeliveryOrderService pcsDeliveryOrderService; + @GetMapping @Log("查询生产订单") //("查询生产订单") public ResponseEntity query(DeliveQuery query, PageQuery page){ - return new ResponseEntity<>(iStIfDeliveryorderCpService.pageQuery(query,page), HttpStatus.OK); + Page pageable = PageHelper.startPage(page.getPage() + 1, page.getSize()); + List mst_detail = pcsDeliveryOrderService.queryAll((Map) JSON.toJSON(query)); + TableDataInfo build = TableDataInfo.build(mst_detail); + build.setTotalElements(pageable.getTotal()); + return new ResponseEntity<>(build, HttpStatus.OK); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java index 882c8d5a..4e6945d4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java @@ -97,18 +97,21 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl query(@RequestParam Map whereJson, PageQuery pageable){ return new ResponseEntity<>(TableDataInfo.build(dictService.queryAll(whereJson,pageable)), HttpStatus.OK); } + @PostMapping("all") + @SaIgnore + public ResponseEntity queryAll(@RequestBody JSONObject whereJson){ + List list = dictService.list(new QueryWrapper() + .eq("code", StringUtils.isEmpty(whereJson.getString("code"))?"product_area":whereJson.getString("code")) + .select("code","label","value")); + return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK); + } @Log("新增字典") @PostMapping - //("新增字典") public ResponseEntity create(@RequestBody Dict dict){ dictService.create(dict); return new ResponseEntity<>(HttpStatus.CREATED); @@ -54,30 +61,24 @@ public class SysDictController { @PutMapping @Log("修改字典") - //("修改字典") - //@SaCheckPermission("@el.check('dict:edit')") public ResponseEntity updateDict(@Validated @RequestBody Dict dto){ dictService.updateDict(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除字典") - //("删除字典") @DeleteMapping -// @SaCheckPermission("dict:del") public ResponseEntity delete(@RequestBody Set ids){ dictService.deleteBatchByIds(ids); return new ResponseEntity<>(HttpStatus.OK); } @GetMapping("/dictDetail") - //("查询字典详情") public ResponseEntity queryDetails(@RequestParam Map criteria, PageQuery pageable){ DictQuery dictQuery = JSONObject.parseObject(JSONObject.toJSONString(criteria), DictQuery.class); return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery,pageable)),HttpStatus.OK); } - //("查询多个字典详情") @GetMapping(value = "/dictDetail/map") public ResponseEntity getDictDetailMaps(@RequestParam String dictName){ String[] names = dictName.split("[,,]"); @@ -89,9 +90,7 @@ public class SysDictController { } @Log("新增字典详情") - //("新增字典详情") @PostMapping("/dictDetail") -// @SaCheckPermission("dict:add") public ResponseEntity createDetail(@RequestBody Dict resources){ dictService.createDetail(resources); return new ResponseEntity<>(HttpStatus.CREATED); diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml index c42569a3..895d2751 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -131,7 +131,7 @@ generator: #是否开启 swagger-ui swagger: - enabled: true + enabled: false # IP 本地解析 ip: diff --git a/mes/hd/nladmin-system/src/main/resources/config/application.yml b/mes/hd/nladmin-system/src/main/resources/config/application.yml index b7f54e83..c9fe3dcb 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: dev3 jackson: time-zone: GMT+8 data: diff --git a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml index 0a0e78c6..002b596c 100644 --- a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml +++ b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml @@ -19,7 +19,7 @@ https://juejin.cn/post/6844903775631572999 - http://127.0.0.1:9200/_bulk + http://192.168.46.225:9200/_bulk ${esIndex} mes_log es-logger diff --git a/mes/qd/src/views/wms/device_manage/deviceMaterial/deviceMaterial.js b/mes/qd/src/views/wms/device_manage/deviceMaterial/deviceMaterial.js index 5fa1e0b5..6344961e 100644 --- a/mes/qd/src/views/wms/device_manage/deviceMaterial/deviceMaterial.js +++ b/mes/qd/src/views/wms/device_manage/deviceMaterial/deviceMaterial.js @@ -14,7 +14,17 @@ export function edit(data) { method: 'post', data }) -}export function setEmp(data) { +} + +export function setUsed(data) { + return request({ + url: 'api/specialDevice/setUsed', + method: 'post', + data + }) +} + +export function setEmp(data) { return request({ url: 'api/specialDevice/setEmp', method: 'post', @@ -22,4 +32,4 @@ export function edit(data) { }) } -export default { query, setEmp, edit } +export default { query, setEmp, edit, setUsed } diff --git a/mes/qd/src/views/wms/device_manage/deviceMaterial/index.vue b/mes/qd/src/views/wms/device_manage/deviceMaterial/index.vue index d9de8bf2..ee91c74e 100644 --- a/mes/qd/src/views/wms/device_manage/deviceMaterial/index.vue +++ b/mes/qd/src/views/wms/device_manage/deviceMaterial/index.vue @@ -39,7 +39,7 @@ @keyup.enter.native="crud.toQuery" /> - + @@ -60,7 +60,7 @@ @@ -77,10 +77,10 @@ - + - +