diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/AppRun.java b/mes/hd/nladmin-system/src/main/java/org/nl/AppRun.java index 2203ba94..c5533603 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/AppRun.java @@ -35,8 +35,6 @@ import org.springframework.web.bind.annotation.RestController; }) @ServletComponentScan @EnableTransactionManagement -@EnableJpaAuditing(auditorAwareRef = "auditorAware") - @EnableMethodCache(basePackages = "org.nl") @EnableCreateCacheAnnotation @MapperScan("org.nl.**.mapper") 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 f1027a42..ece8922b 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 @@ -24,10 +24,10 @@ public enum AcsTaskEnum { TASK_PRODUCT_MAC("1","专机-专机满料任务"), //3个点,任务编号,缓存线空载具列表 TASK_PRODUCT_CACHE("2","专机-缓存线满料任务"), - //3个点,任务编号,缓存线满料载具列表 - TASK_CACHELINE_OUT("3","缓存线-专机出库任务"), //专机到深坑任务:深坑业务单独处理 - TASK_PRODUCT_WASH("4","专机-深坑任务"), + TASK_PRODUCT_WASH("3","专机-深坑任务"), + //3个点,任务编号,缓存线满料载具列表 + TASK_CACHELINE_OUT("4","缓存线-专机出库任务"), TASK_PLOTTER_MAC("5","刻字机-满料入库"), TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"), TASK_WARP_MAC("7","包装机-叫料出库"), @@ -56,8 +56,8 @@ public enum AcsTaskEnum { ACS_TASK_TYPE_NOBLE_DOUBLE_TASK("1","诺宝双工任务"), ACS_TASK_TYPE_NOBLE_SINGLE_TASK("2","诺宝单工任务"), - ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK("3","诺宝单入-单任务"), - ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK("4","诺宝双入-双任务"), + ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK("3","诺宝双入-双任务"), + ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK("4","诺宝单入-单任务"), ACS_TASK_TYPE_NOBLE_POINT_POINT_TASK("5","诺宝点对点任务"), ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20("6","PS20称重任务(刻字-包装)"), ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20("7","PS20不称重任务(刻字-包装)"), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index 69e439a3..ca174ce5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -15,65 +15,66 @@ import java.util.Arrays; @AllArgsConstructor public enum StatusEnum { //枚举状态 - STATUS_TRUE("1","是",""), - STATUS_FLASE("0","否",""), + STATUS_TRUE("1","是","",null), + STATUS_FLASE("0","否","",null), //锁状态 - LOCK_OFF("0","否",""), - LOCK_ON("1","是",""), + LOCK_OFF("0","否","",null), + LOCK_ON("1","是","",null), //缓存线点位异常情况 - CACHE_POINT_NORMAL("0","正常",""), - CACHE_POINT_ERROR("1","异常盘点",""), - CACHE_POINT_SCAN_ERROR("2","异常扫码",""), + CACHE_POINT_NORMAL("0","正常","",null), + CACHE_POINT_ERROR("1","异常盘点","",null), + CACHE_POINT_SCAN_ERROR("2","异常扫码","",null), //缓存线载具状态 1-空位、2-绿色空箱、3-黄色满箱、4-红色异常、5不显示 - CACHE_VEL_NORMAL("0","正常",""), - CACHE_VEL_NULL("1","空位",""), - CACHE_VEL_EMT("2","绿色空箱",""), - CACHE_VEL_FULL("3","黄色满箱",""), - CACHE_VEL_ERR("4","红色异常",""), - CACHE_VEL_DIS("5","不显示",""), + CACHE_VEL_NORMAL("0","正常","",null), + CACHE_VEL_NULL("1","空位","",null), + CACHE_VEL_EMT("2","绿色空箱","",null), + CACHE_VEL_FULL("3","黄色满箱","",null), + CACHE_VEL_ERR("4","红色异常","",null), + CACHE_VEL_DIS("5","不显示","",null), //任务状态 - TASK_CREATE("1","生成",""), - TASK_START_ERROR("2","点位确认异常",""), + TASK_CREATE("1","生成","",1), + TASK_START_ERROR("2","点位确认异常","",1<<2), //TASK_END_P("3","确定终点",""), - TASK_START_END_P("4","起点和终点确认",""), - TASK_PUBLISH("5","下发",""), - TASK_RUNNING("6","运行",""), - TASK_FINISH("7","完成",""), - TASK_CANNEL("8","取消",""), + TASK_START_END_P("4","起点和终点确认","",1<<3), + TASK_PUBLISH("5","下发","",1<<4), + TASK_RUNNING("6","运行","",1<<5), + TASK_FINISH("7","完成","",1<<6), + TASK_CANNEL("8","取消","",1<<7), //点位表位置状态 - POINT_LOCATION_EMP("1","空料位",""), - POINT_LOCATION_REC("2","接料位",""), - POINT_LOCATION_FULL("3","满料位",""), - POINT_LOCATION_IN("4","上料位",""), + POINT_LOCATION_EMP("1","空料位","",null), + POINT_LOCATION_REC("2","接料位","",null), + POINT_LOCATION_FULL("3","满料位","",null), + POINT_LOCATION_IN("4","上料位","",null), //出入料箱 - IN_VEHICLE("1","入箱",""), - OUT_VEHICLE("2","出箱",""), + IN_VEHICLE("1","入箱","",null), + OUT_VEHICLE("2","出箱","",null), //出入料箱 - PAUSE_CACHELINE("1","暂停",""), - START_CACHELINE("2","启动",""), + PAUSE_CACHELINE("1","暂停","",null), + START_CACHELINE("2","启动","",null), //设备状态枚举1-关机、2-开机、3-生产中、4-待机、5-故障 - DEVICE_STATUS_OFF("1","关机",""), - DEVICE_STATUS_ON("2","开机",""), - DEVICE_STATUS_RUNING("3","生产中",""), - DEVICE_STATUS_WAITING("4","待机",""), - DEVICE_STATUS_ERROR("5","故障",""), + DEVICE_STATUS_OFF("1","关机","",null), + DEVICE_STATUS_ON("2","开机","",null), + DEVICE_STATUS_RUNING("3","生产中","",null), + DEVICE_STATUS_WAITING("4","待机","",null), + DEVICE_STATUS_ERROR("5","故障","",null), // 点位表点位状态 - POINT_STATUS_EMPTY("1", "空位", ""), - POINT_STATUS_FULL("2", "有料", ""), - POINT_STATUS_EMPTY_VEHICLE("3", "空载具", ""), + POINT_STATUS_EMPTY("1", "空位", "",null), + POINT_STATUS_FULL("2", "有料", "",null), + POINT_STATUS_EMPTY_VEHICLE("3", "空载具", "",null), // 出入库分配明细状态 - IOS_NOCREATE("00","未生成",""), - IOS_CREATE("01","生成",""), - IOS_RUNNING("02","执行中",""), - IOS_FINISH("99","完成",""), + IOS_NOCREATE("00","未生成","",null), + IOS_CREATE("01","生成","",null), + IOS_RUNNING("02","执行中","",null), + IOS_FINISH("99","完成","",null), ; private String code; private String desc; private String ext; + private Integer bit; } 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 b91a647c..ab7724df 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 @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.MapOf; import org.nl.modules.common.exception.BadRequestException; @@ -51,8 +52,14 @@ public class AgvInstService { private ISchBaseTaskService taskService; @Autowired private ISchCachelineVehicleService cachelineVehicleService; + @Autowired + private ISchCachelineVehicleService cachelineVe3hicleService; - + public static void main(String[] args) { + String a= "A1_DC_15_6"; + int i = a.lastIndexOf("_"); + System.out.println(a.substring(0, i)); + } //满料请求点位确认 //1.判断当前设备路由表是否配置下一道路由设备,如果不是则说明直接到清洗 @@ -63,40 +70,64 @@ public class AgvInstService { public void fullMaster(JSONObject task){ String quantity = task.getString("material_qty"); //获取当前生产工序下一道工序 - Map workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code")); - FlowElement next = getFlowElement(task,workprodure).next(); - String nextPoint = null; - //判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位: - String cacheVehile = ""; - Map query = MapOf.of("workprocedure_id", workprodure.get("workprocedure_id") + Map workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code1")); + FlowElement currentFlow = getFlowElement(task, workprodure); + FlowElement next = currentFlow.next(); + + Map query = MapOf.of("workprocedure_id", basePointService.getWorkprodureByCode(next.getId()).get("workprocedure_id") , "qty", quantity); + //判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位: if (next.getName().equals("深坑清洗")){ query.put("material_id",task.getString("material_id")); +// query.put("qty",quantity) 深坑物料需要转重量 + task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode()); } - List> list = deviceService.workproceduceDevices(query); + List> list = deviceService.workproceduceDevices(query); + task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode()); + task.put("is_send","1"); + String nextPoint = null; + String cacheVehile = ""; if (!CollectionUtils.isEmpty(list)){ nextPoint = list.get(0).get("point_code"); }else { - if (next.getParams().get("cacheLine") == null){ + if (currentFlow.getParams().get("cacheLine") == null){ throw new BadRequestException("当前任务下一道工序无可用设备"); } - nextPoint = next.getParams().get("cacheLine"); + nextPoint = getParamByXml(workprodure, currentFlow, nextPoint); + task.put("task_type",AcsTaskEnum.TASK_PRODUCT_CACHE.getCode()); + task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode()); cacheVehile = getCacheVehile(nextPoint, null); } - if (StringUtils.isBlank(nextPoint)){ - throw new BadRequestException("逻辑非配错误,请检查代码"); + + 结果校验:{ + if (StringUtils.isBlank(nextPoint)) { + throw new BadRequestException("逻辑非配错误,请检查代码"); + } } - basePointService.update(new UpdateWrapper() - .set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint)); +// basePointService.update(new UpdateWrapper() +// .set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint)); SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); - schBaseTask.setVehicle_code(cacheVehile); + schBaseTask.setBarcodeArr(cacheVehile); schBaseTask.setPoint_code2(nextPoint); schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); schBaseTask.setUpdate_time(new Date()); taskService.updateById(schBaseTask); - }; + } + + private String getParamByXml(Map workprodure, FlowElement next, String nextPoint) { + Object cacheLine = next.getParams().get("cacheLine"); + if (cacheLine instanceof String){ + nextPoint = (String) cacheLine; + } + if (cacheLine instanceof Map){ + nextPoint = ((Map) cacheLine).get(workprodure.get("device_code").substring(0, workprodure.get("device_code").lastIndexOf("_"))); + } + return nextPoint; + } + + ; public FlowElement getFlowElement(JSONObject task,Map workprodure){ if (CollectionUtils.isEmpty(workprodure)){ @@ -109,7 +140,7 @@ public class AgvInstService { .eq("is_delete", "0") .eq("is_used", "1") ); - SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(material_id,devicePoint.getRegion_code()); + SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(devicePoint.getRegion_code()); if (processRoute == null){ throw new BadRequestException("当前没有配置对应工序调度线路:"+material_id+"/"+devicePoint.getRegion_code()); } @@ -126,29 +157,22 @@ public class AgvInstService { //3.agv根据对应载具列表行进扫码匹配:匹配到对应物料则创建点对点任务 public void empMatter(JSONObject task){ //参数 - String targetDevice = task.getString("next_point_code"); - String material_id = task.getString("material_id"); - SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper() - .eq("point_code", targetDevice) - .eq("is_delete", "0") - .eq("is_used", "1")); - JSONObject cacheLine = WQLObject.getWQLObject("SCH_cacheLine_region_relation").query("region_code = '"+devicePoint.getRegion_code()+"' and is_active = '"+StatusEnum.STATUS_TRUE.getCode()+"'").uniqueResult(0); - Assert.notNull(cacheLine, String.format("区域%s对应缓存线信息不存在", devicePoint.getRegion_code())); - //缓存线位置编码 :缺料请求获取缓存线满载具列表 - String startPoint = cacheLine.getString("cacheline_code"); - String cacheVehile = getCacheVehile(startPoint, material_id); + String startPoint = task.getString("cacheLine"); + String cacheVehile = getCacheVehile(startPoint, task.getString("material_id")); if (StringUtils.isBlank(cacheVehile)) { - throw new BadRequestException("缓存线:"+startPoint+"没有物料"+material_id+"对应可用载具"); + throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具"); } //判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配 - List allocateTask = taskService.list(new QueryWrapper().eq("point_code1", startPoint).eq("material_id", material_id).lt("task_status", StatusEnum.TASK_FINISH.getCode())); + List allocateTask = taskService.list(new QueryWrapper().eq("point_code1", startPoint).eq("material_id", task.getString("material_id")).lt("task_status", StatusEnum.TASK_FINISH.getCode())); if (allocateTask.size()>=cacheVehile.split(",").length){ - log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,material_id,allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(","))); - throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,material_id)); + log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,task.getString("material_id"),allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(","))); + throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,task.getString("material_id"))); } SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); - schBaseTask.setVehicle_code(cacheVehile); + schBaseTask.setBarcodeArr(cacheVehile); schBaseTask.setPoint_code1(startPoint); + schBaseTask.setIs_send(true); + schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode()); schBaseTask.setPoint_code3(startPoint); schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode()); schBaseTask.setUpdate_time(new Date()); @@ -157,12 +181,14 @@ public class AgvInstService { } public String getCacheVehile(String cacheLine,String materialId){ - 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)); - if (vehicle.size()>0){ - if (vehicle.size()>count){ - return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(",")); + 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)); + if (vehicle.size()>0){ + if (vehicle.size()>count){ + return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(",")); + } } } return ""; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index f36c814a..d693c832 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -32,8 +32,11 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ , "next_point_code", task.getString("point_code3")//空盘返回点 , "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") , "priority", task.getString("priority") - , "is_send", task.getString("is_send") + , "is_send", task.getBoolean("is_send")?"1":"0" , "vehicle_code", task.getString("vehicle_code") + , "quantity", task.getString("material_qty") + , "barcodeArr", task.getString("barcodeArr") + , "proprity_floor", "2" , "agv_system_type", task.getString("agv_system_type") )); form.add(param); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportEnum.java new file mode 100644 index 00000000..7c204e9c --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportEnum.java @@ -0,0 +1,39 @@ +package org.nl.wms.product_manage; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.utils.MapOf; +import org.nl.modules.common.exception.BadRequestException; + +import java.util.Map; + +/* + * @author ZZQ + * @Date 2023/5/4 20:11 + */ +@AllArgsConstructor +@Getter +public enum ReportEnum { + //出入库类型 + REPORT_STATUS(MapOf.of("生成", "1", "报工", "2","报工审核","3")), + ; + private Map code; + + public String code(String desc) { + String code = this.getCode().get(desc); + if (StringUtils.isNotEmpty(code)) { + return code; + } + throw new BadRequestException(this.name() + "对应类型" + desc + "未定义"); + } + + public String check(String code) { + for (Map.Entry entry : this.getCode().entrySet()) { + if (entry.getValue().equals("code")) { + return entry.getValue(); + } + } + throw new BadRequestException(this.name() + "对应类型" + code + "未定义"); + } +} 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 c9ca3d46..b1c46e2c 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 @@ -1,15 +1,20 @@ 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.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; +import org.nl.common.domain.query.PageQuery; 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.备份pdm.service.DeviceService; import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +24,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; /** @@ -38,9 +44,19 @@ public class PdmBiDeviceController { @GetMapping @Log("查询生产设备") @ApiOperation("查询生产设备") - //@PreAuthorize("@el.check('device:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(deviceService.queryAll(whereJson,page),HttpStatus.OK); + @SaIgnore + public ResponseEntity query(DeviceQuery query, PageQuery page){ + Page result = iDeviceService.page(page.build(PdmBiDevice.class), query.build()); + return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK); + } + + @PostMapping("/list") + @Log("查询生产设备列表") + @ApiOperation("查询生产设备列表") + @SaIgnore + public ResponseEntity queryList(@RequestBody DeviceQuery query){ + List> list = iDeviceService.listMaps(query.build().select("device_code", "device_name")); + return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK); } @PostMapping diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java index 2a25fcb6..15867f68 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java @@ -1,6 +1,7 @@ package org.nl.wms.product_manage.controller.workorder; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -15,6 +16,7 @@ import org.nl.common.utils.SecurityUtils; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -92,9 +94,6 @@ public class PdmProduceWorkorderController { if (ids != null && ids.length > 0){ iPdmProduceWorkorderService.update(new UpdateWrapper() .set("is_delete",true) - .set("update_id", SecurityUtils.getCurrentUserId()) - .set("update_name",SecurityUtils.getCurrentNickName()) - .set("update_time",new Date()) .in("workorder_id", Arrays.asList(ids))); } return new ResponseEntity<>(HttpStatus.OK); @@ -146,5 +145,17 @@ public class PdmProduceWorkorderController { } + + @PostMapping("/reportQuery") + @Log("报工数修改") + @ApiOperation("报工数修改") + @SaIgnore + public ResponseEntity reportQuery(@RequestBody ReportQuery param) { + return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(param)),HttpStatus.OK); + } + + + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java index cb6bbbeb..d17e65f6 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java @@ -2,9 +2,11 @@ package org.nl.wms.product_manage.controller.workorder; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.api.ResultCode; @@ -13,6 +15,9 @@ import org.nl.wms.mps.service.ProduceshiftorderService; import org.nl.wms.mps.service.dto.DeviceDto; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; +import org.nl.wms.product_manage.service.workorder.impl.PdmProduceWorkorderrecordServiceImpl; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -33,8 +38,10 @@ import java.util.Map; @Slf4j public class ProduceshiftorderController{ private final ProduceshiftorderService produceshiftorderService; + private final IPdmProduceWorkorderService iPdmProduceWorkorderService; - private final IPdmBiDeviceService pdmBiDeviceService; + + private final IPdmProduceWorkorderrecordService workorderrecordService; @PostMapping("/getDevice") @@ -69,7 +76,8 @@ public class ProduceshiftorderController{ if(null == param) { throw new BizCoreException(ResultCode.VALIDATE_FAILED); } - return new ResponseEntity<>(produceshiftorderService.getOrderList(param, page), HttpStatus.OK); + List list = iPdmProduceWorkorderService.getOrderList(param, page); + return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); } @PostMapping("/openStart") @@ -93,6 +101,23 @@ public class ProduceshiftorderController{ iPdmProduceWorkorderService.finish(param); return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/deleteReport") + @Log("deleteReport") + @ApiOperation("deleteReport") + public ResponseEntity deleteReport(@RequestBody JSONObject param) { + workorderrecordService.removeById(param.getString("macoperate_id")); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @PostMapping("/updateReport") + @Log("报工数修改") + @ApiOperation("报工数修改") + public ResponseEntity updateReport(@RequestBody JSONObject param) { + iPdmProduceWorkorderService.updateReport(param); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/getReportWork") @Log("获取当前报工记录") @@ -118,6 +143,7 @@ public class ProduceshiftorderController{ return new ResponseEntity<>(HttpStatus.OK); } + @GetMapping("/getUser") @Log("查询操作人员") @ApiOperation("查询操作人员") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/manage/AbstractAcsTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/manage/AbstractAcsTask.java index 5544c51f..ce2cdc8f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/manage/AbstractAcsTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/manage/AbstractAcsTask.java @@ -4,6 +4,10 @@ package org.nl.wms.product_manage.sch.manage; import com.alibaba.fastjson.JSONArray; 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; /** @@ -25,14 +29,16 @@ public abstract class AbstractAcsTask { public abstract String createTask(JSONObject param); - public abstract void cancel(String task_id); - public abstract void pointConfirm(JSONObject param); public void notifyAcs(JSONArray param){}; + public List schedulerTask(List tasks){ + return new ArrayList<>(); + }; + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/PointController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/PointController.java deleted file mode 100644 index 64d156ec..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/PointController.java +++ /dev/null @@ -1,114 +0,0 @@ - -package org.nl.wms.product_manage.sch.rest; - - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.anno.Log; -import org.nl.wms.product_manage.sch.service.PointService; -import org.nl.wms.product_manage.sch.service.dto.PointDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author ldjun - * @date 2021-08-19 - **/ -//@RestController -@RequiredArgsConstructor -//@Api(tags = "点位管理") -//@RequestMapping("/api/point") -//@Slf4j -public class PointController { - - private final PointService pointService; - - @GetMapping - @Log("查询点位") - @ApiOperation("查询点位") - //@SaCheckPermission("point:list") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(pointService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增点位") - @ApiOperation("新增点位") - //@SaCheckPermission("point:add") - public ResponseEntity create(@Validated @RequestBody PointDto dto) { - pointService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改点位") - @ApiOperation("修改点位") - //@SaCheckPermission("point:edit") - public ResponseEntity update(@Validated @RequestBody PointDto dto) { - pointService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除点位") - @ApiOperation("删除点位") - //@SaCheckPermission("point:del") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - pointService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - @PutMapping("/changeActive") - @Log("修改点位启用状态") - @ApiOperation("修改点位启用状态") - //@SaCheckPermission("store:edit") - public ResponseEntity update(@RequestBody JSONObject json) { - pointService.changeActive(json); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @PostMapping("/getPoint") - @Log("查询点位下拉框") - @ApiOperation("查询点位下拉框") - //@SaCheckPermission("materialtype:list") - public ResponseEntity queryPoint(@RequestBody Map whereJson) { - return new ResponseEntity<>(pointService.getPoint(whereJson), HttpStatus.OK); - } - - @GetMapping("/selectPoint") - @Log("查询点位管理") - @ApiOperation("查询点位管理") - //@SaCheckPermission("Point:list") - public ResponseEntity selectPoint(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(pointService.selectPoint(whereJson,page),HttpStatus.OK); - } - @GetMapping("/getRegion") - @Log("获取区域") - @ApiOperation("获取区域") - public ResponseEntity getRegion(){ - return new ResponseEntity<>(pointService.getRegion(),HttpStatus.OK); - } - - @Log("启动与禁用") - @PostMapping("/changeUsed") - @ApiOperation("启动与禁用") - public ResponseEntity changeUsedOn(@RequestBody JSONObject jsonObject) { - pointService.changeUsed(jsonObject); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("锁定与解锁") - @PostMapping("/changeLock") - @ApiOperation("锁定与解锁") - public ResponseEntity changeLock(@RequestBody JSONObject jsonObject) { - pointService.changeLock(jsonObject); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/RegionController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/RegionController.java deleted file mode 100644 index 663b1cb7..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/RegionController.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.nl.wms.product_manage.sch.rest; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.anno.Log; -import org.nl.wms.product_manage.sch.service.RegionService; -import org.nl.wms.product_manage.sch.service.dto.RegionDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** -* @author lyd -* @date 2023-03-17 -**/ -//@RestController -@RequiredArgsConstructor -//@Api(tags = "区域管理管理") -//@RequestMapping("/api/region") -//@Slf4j -public class RegionController { - - private final RegionService regionService; - - @GetMapping - @Log("查询区域管理") - @ApiOperation("查询区域管理") - //@SaCheckPermission("region:list") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(regionService.queryAll(whereJson, page), HttpStatus.OK); - } - - @GetMapping("/getPointQuery") - @Log("获取可用点位") - @ApiOperation("获取可用点位") - //@SaCheckPermission("region:list") - public ResponseEntity getPointQuery(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(regionService.getPointQuery(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增区域管理") - @ApiOperation("新增区域管理") - //@SaCheckPermission("region:add") - public ResponseEntity create(@Validated @RequestBody RegionDto dto) { - regionService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改区域管理") - @ApiOperation("修改区域管理") - //@SaCheckPermission("region:edit") - public ResponseEntity update(@Validated @RequestBody RegionDto dto) { - regionService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除区域管理") - @ApiOperation("删除区域管理") - //@SaCheckPermission("region:del") - @DeleteMapping - public ResponseEntity delete(@RequestBody String[] codes) { - regionService.deleteAll(codes); - return new ResponseEntity<>(HttpStatus.OK); - } - - @PostMapping("/getPointStatusSelectByCode") - @Log("获取点位状态下拉框") - @ApiOperation("获取点位状态下拉框") - //@SaCheckPermission("region:add") - public ResponseEntity getPointStatusSelectByCode(@RequestBody String region_code) { - return new ResponseEntity<>(regionService.getPointStatusSelectByCode(region_code), HttpStatus.CREATED); - } - - @PostMapping("/getPointTypeSelectByCode") - @Log("获取点位类型下拉框") - @ApiOperation("获取点位类型下拉框") - //@SaCheckPermission("region:add") - public ResponseEntity getPointTypeSelectByCode(@RequestBody String region_code) { - return new ResponseEntity<>(regionService.getPointTypeSelectByCode(region_code), HttpStatus.CREATED); - } - - @PostMapping("/getRegionSelect") - @Log("获取区域下拉框") - @ApiOperation("获取区域下拉框") - public ResponseEntity getRegionSelect(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(regionService.getRegionSelect(whereJson), HttpStatus.CREATED); - } - -} - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/TaskController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/TaskController.java deleted file mode 100644 index e988fe7b..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/rest/TaskController.java +++ /dev/null @@ -1,119 +0,0 @@ - -package org.nl.wms.product_manage.sch.rest; - - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; - import lombok.RequiredArgsConstructor; -import org.nl.common.anno.Log; -import lombok.extern.slf4j.Slf4j; -import org.nl.wms.system_manage.service.dict.ISysDictService; -import org.nl.wms.system_manage.service.dict.dao.Dict; -import org.nl.wms.product_manage.sch.manage.FinishTypeEnum; -import org.nl.wms.product_manage.sch.service.TaskService; -import org.nl.wms.product_manage.sch.service.dto.TaskDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author ldjun - * @date 2021-08-19 - **/ -@RestController -@RequiredArgsConstructor -@Api(tags = "任务管理") -@RequestMapping("/api/task") -@Slf4j -public class TaskController { - - private final TaskService taskService; - private final ISysDictService dictService; - - @GetMapping - @Log("查询任务") - @ApiOperation("查询任务") - //@PreAuthorize("@el.check('task:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增任务") - @ApiOperation("新增任务") - //@PreAuthorize("@el.check('task:add')") - public ResponseEntity create(@Validated @RequestBody TaskDto dto) { - taskService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改任务") - @ApiOperation("修改任务") - //@PreAuthorize("@el.check('task:edit')") - public ResponseEntity update(@Validated @RequestBody TaskDto dto) { - taskService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除任务") - @ApiOperation("删除任务") - //@PreAuthorize("@el.check('task:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody String[] ids) { - taskService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @GetMapping("/taskStatus") - @Log("获取任务状态列表") - @ApiOperation("获取任务状态列表") - public ResponseEntity getTaskStatus() { - return new ResponseEntity<>(dictService.list(new LambdaQueryWrapper() - .eq(Dict::getCode, "task_status")), HttpStatus.OK); - } - - @PostMapping("/taskType") - @Log("获取任务类型列表") - @ApiOperation("获取任务类型列表") - public ResponseEntity getTaskType() { - return new ResponseEntity<>(taskService.getTaskTypes(), HttpStatus.OK); - } - @GetMapping("/acsTaskType") - @Log("获取acs任务类型列表") - @ApiOperation("获取acs任务类型列表") - public ResponseEntity getAcsTaskType() { - return new ResponseEntity<>(taskService.getAcsTaskType(), HttpStatus.OK); - } - - @GetMapping("/finishType") - @Log("获取任务类型列表") - @ApiOperation("获取任务类型列表") - public ResponseEntity getFinishType() { - FinishTypeEnum[] values = FinishTypeEnum.values(); - JSONArray arr = new JSONArray(); - for (FinishTypeEnum value : values) { - JSONObject json = new JSONObject(); - json.put("code", value.getCode()); - json.put("name", value.getName()); - arr.add(json); - } - return new ResponseEntity<>(arr, HttpStatus.OK); - } - - @PutMapping("/operation") - @Log("任务操作") - @ApiOperation("任务操作") - //@PreAuthorize("@el.check('task:edit')") - public ResponseEntity update(@RequestBody Map map) { - taskService.operation(map); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java index 73754f30..d213bd48 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/service/impl/TaskServiceImpl.java @@ -207,6 +207,14 @@ public class TaskServiceImpl implements TaskService { cancel.add(res2); acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel)); break; + case "delete": + JSONArray delete = new JSONArray(); + JSONObject res3 = new JSONObject(); + res3.put("task_id", task_id); + res3.put("status", AcsTaskEnum.STATUS_CANNEL.getCode()); + delete.add(res3); + acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(delete)); + break; default: break; } } 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 8aae9977..0f93a11a 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 @@ -1,12 +1,16 @@ package org.nl.wms.product_manage.sch.tasks.SpeMachinery; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.InterfaceLogType; import org.nl.common.enums.StatusEnum; @@ -14,16 +18,28 @@ 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.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.impl.AgvInstService; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; +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; +import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * 专机任务 @@ -31,16 +47,25 @@ import java.util.Map; @Slf4j @Service public class SpeEmpTask extends AbstractAcsTask { + @Autowired + private IPdmProduceWorkorderService workorderService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private AgvInstService agvInstService; + @Autowired + private ISchBasePointService basePointService; + @Autowired + private ISchCachelineVehilematerialService cacheLineVechileService; @Autowired - AgvInstService agvInstService; + private ISchProcessRouteService schProcessRouteService; + private final Map SpeHandles= new HashMap<>(); private static String OPT_NAME = "ACS回调# "; public SpeEmpTask() { - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe()); - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache()); SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe()); } @@ -62,28 +87,32 @@ public class SpeEmpTask extends AbstractAcsTask { @Override @Transactional public String createTask(JSONObject param) { - - String point_code = param.getString("device_code"); - String quantity = param.getString("quantity"); - String type = param.getString("type"); - JSONObject order = WQLObject.getWQLObject("PDM_produce_workOrder").query("workorder_code = '" + param.getString("workorder_code") + "' and is_delete = 0 and workorder_status != "+StatusEnum.TASK_FINISH.getCode()).uniqueResult(0); - Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); - JSONArray chectIndDatabase = WQLObject.getWQLObject("SCH_BASE_Task").query((AcsTaskEnum.REQUEST_CALLTYPE_FULL.getCode().equals(type) ? "point_code1" : "point_code2") + "= '" + point_code + "' and task_status < " + StatusEnum.TASK_FINISH.getCode()).getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(chectIndDatabase)){ - Assert.notNull(order, String.format("设备%s存在未完成任务", param.getString("point_code"))); - + //{"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() + .eq("workorder_code", param.getString("workorder_code")) + .lt("workorder_status", StatusEnum.TASK_FINISH.getCode())); + Assert.notNull(one, 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()) + ); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code"))); } - JSONObject form = new JSONObject(MapOf.of("start_point_code","", - "next_point_code",point_code,"return_point_code", "","vehicle_code", - "","product_area",order.getString("product_area"),"quantity", quantity,"type",type,"material_id", order.getString("material_id"))); - String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; + JSONObject form = new JSONObject(MapOf.of("start_point_code","", + "next_point_code",param.getString("device_code"),"return_point_code", "","vehicle_code", + "","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",param.getString("type"),"material_id", one.getMaterial_id())); + String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject task = packageParam(form, taskId); - WQLObject.getWQLObject("SCH_BASE_Task").insert(task); + taskService.save(task.toJavaObject(SchBaseTask.class)); + task.put("cacheLine",cahceLine); try { pointConfirm(task); //下发 }catch (Exception ex){ + log.error("SpeEmpTask#点位确认异常:{}",ex.getMessage()); task.put("task_status", TaskStatusEnum.SURE_START_ERROR.getCode()); task.put("remark",ex.getMessage()); WQLObject.getWQLObject("sch_base_task").update(task); @@ -91,10 +120,39 @@ public class SpeEmpTask extends AbstractAcsTask { return taskId; } + @Nullable + private String getRouteXmlFlowByWorkprodure(JSONObject param) { + Map workprodure = basePointService.findDeviceWorkprodure(param.getString("device_code")); + SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper() + .eq("point_code", param.getString("device_code")) + .eq("is_delete", "0") + .eq("is_used", "1") + ); + FlowElement flowElement = schProcessRouteService.checkWorkprodure(workprodure.get("workprocedure_code"), devicePoint.getRegion_code()); + if (flowElement == null){ + log.error("SpeEmpTask#createTask 没有对应路由线路{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code()); + throw new BadRequestException("缺料请求没有配置对应路由线路"+workprodure.get("workprocedure_code")+"——"+devicePoint.getRegion_code()); + } + FlowElement pre = flowElement.pre(); + if (pre == null || ObjectUtil.isEmpty(pre.getParams().get("cacheLine"))){ + log.error("SpeEmpTask#createTask 没有配置缓存线{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code()); + return null; + } + Object tmp_cahceLine = pre.getParams().get("cacheLine"); + String cahceLine = null; + if (tmp_cahceLine instanceof String){ + cahceLine = (String) tmp_cahceLine; + } + if (tmp_cahceLine instanceof Map){ + cahceLine = ((Map) tmp_cahceLine).get(workprodure.get("spec")); + } + return cahceLine; + } + private JSONObject packageParam(JSONObject form, String task_id) { JSONObject task = new JSONObject(); 参数封装:{ - AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "REQUEST_"); + AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "TASK_"); task.put("task_id", task_id); task.put("task_name", taskEnum.getDesc()); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); @@ -134,72 +192,6 @@ public class SpeEmpTask extends AbstractAcsTask { interface SpeStatusHandler{ void handle(JSONObject param,String status,JSONObject task); } - class Spe2Spe implements SpeStatusHandler{ - @Override - public void handle(JSONObject param, String sta,JSONObject task) { - AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - - switch (status){ - case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - break; - case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - //到专机:更新设备上料位物料数量 - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); - break; - case STATUS_CANNEL: - cancel(param.getString("task_id")); - break; - default: - log.error(OPT_NAME+"未定义任务状态:{}",sta); - throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); - } - } - } - class Spe2Cache implements SpeStatusHandler{ - @Override - public void handle(JSONObject param, String sta,JSONObject task) { - AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - String workprocedureCode = param.getString("workorder_code"); - String inboxtxm = param.getString("inboxtxm"); - String outboxtxm = param.getString("outboxtxm"); - switch (status){ - case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); - break; - case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"), - "material_id", task.getString("material_id"), - "vehicle_code", inboxtxm, - "vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(), - //工单,工序? - "workorder_code", workprocedureCode, - "create_time", DateUtil.now(), - "update_time", DateUtil.now() - //物料规格,物料名称 从物料信息表关联查询 - )); - break; - case STATUS_CANNEL: - cancel(param.getString("task_id")); - break; - default: - throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); - } - } - } class Cache2Spe implements SpeStatusHandler{ @Override public void handle(JSONObject param, String sta,JSONObject task) { @@ -208,12 +200,10 @@ public class SpeEmpTask extends AbstractAcsTask { WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - String outboxtxm = param.getString("outboxtxm"); switch (status){ case STATUS_START: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); break; case STATUS_FINISH: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); @@ -238,4 +228,114 @@ public class SpeEmpTask extends AbstractAcsTask { public void pointConfirm(JSONObject param) { agvInstService.empMatter(param); } + + + @Override + public List schedulerTask(List array) { + ArrayList Merge = new ArrayList<>(); + if (!CollectionUtils.isEmpty(array)){ + String pointCollect = array.stream().map(a->a.getPoint_code1() + "','" + a.getPoint_code2()).collect(Collectors.joining("','")); + JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0); + //区域编号对应point_code + Map> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code"))); + Set mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet()); + //合并下发的任务 + List notMerge = new ArrayList<>();//单独下发的任务 + List waitingTask = new ArrayList<>();//可合并,但是只有单条任务 + Map taskGroupMap = new HashMap<>(); + for (SchBaseTask task : array) { + String taskGroupId = org.nl.common.utils.IdUtil.getStringId(); + String taskId = task.getTask_id(); + task.setIs_send(true); + if (taskGroupMap.get(taskId) != null){ + task.setTask_group_id(taskGroupMap.get(taskId)); + task.setIs_send(false); + Merge.add(task); + continue; + } + String start = task.getPoint_code1(); + String end = task.getPoint_code2(); + taskGroupMap.put(taskId,taskGroupId); + task.setTask_group_id(taskGroupId); + //如果点位不属于查询出来可以合并点位集合:则单独下发集合 + if (!mergePointCollent.contains(start) && !mergePointCollent.contains(end)){ + notMerge.add(task); + continue; + } + //起点点位是否有多个合并任务点,如果没有则判断终点是否有多个合并任务点;都没有则说明当前起点终点对应区域只有一个任务:放入等待下发集合中 + List collect = taskGroupMap.keySet().stream().collect(Collectors.toList()); + collect.add(taskId); + String mergeTargetId = getMergePoint(pointRegionCollent, start,end,array,collect); + if (mergeTargetId == null){ + waitingTask.add(task); + continue; + } + //查询到相同区域可以合并的点位集合 + taskGroupMap.put(mergeTargetId,taskGroupId); + Merge.add(task); + } + //开始下发:处理waitingTask:如果创建时间>2分钟:则改单独下发 + if (waitingTask.size()>0){ + List needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),a.getCreate_time(), DateUnit.MINUTE) >1 ).collect(Collectors.toList()); + notMerge.addAll(needPublish); + } + String notMergeID = notMerge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(",")); + String waitingTaskId = waitingTask.stream().map(a -> a.getTask_id()).collect(Collectors.joining(",")); + String MergeId = Merge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(",")); + log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId); + notMerge.forEach(a->{ + a.setIs_send(true); + }); + Merge.addAll(notMerge); + } + Map> collect = Merge.stream().collect(Collectors.groupingBy(SchBaseTask::getTask_group_id)); + ArrayList result = new ArrayList<>(); + for (List value : collect.values()) { + updateAcsTaskType(value); + result.addAll(value); + } + return result; + } + + private void updateAcsTaskType(List value) { + if (value.size() > 1){ + boolean tag = true; + for (SchBaseTask task : value) { + if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode())){ + task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK.getCode()); + } + if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode())){ + task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_TASK.getCode()); + } + if (tag){task.setIs_send(true);tag = false;}else {task.setIs_send(false); } + } + } + } + + + private String getMergePoint(Map> pointRegionCollent, String start,String end,List tasks,List taskIds) { + String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds); + if (findpoint == null){ + findpoint = findpoint(pointRegionCollent, end, tasks, taskIds); + } + return findpoint; + } + + private String findpoint(Map> pointRegionCollent, String start, List tasks, List taskIds) { + List objects = pointRegionCollent.get(start); + if (CollectionUtils.isEmpty(objects)){ + return null; + } + JSONObject startPointInfo = (JSONObject) objects.get(0); + String startPointCollent = startPointInfo.getString("pointcollent"); + String[] split = startPointCollent.split(","); + for (String s : split) { + Optional any = tasks.stream().filter(a -> a.getPoint_code1().equals(s) && !taskIds.contains((a.getTask_id()))).findAny(); + if (any.isPresent()){ + return any.get().getTask_id(); + } + } + return null; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java index 92eee538..4d2c6e40 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java @@ -1,15 +1,17 @@ package org.nl.wms.product_manage.sch.tasks.SpeMachinery; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.InterfaceLogType; import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.IdUtil; import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -19,12 +21,21 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.impl.AgvInstService; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; +import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; +import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * 专机任务 @@ -32,26 +43,38 @@ import java.util.Map; @Slf4j @Service public class SpeFullTask extends AbstractAcsTask { - @Autowired - AgvInstService agvInstService; + private IPdmProduceWorkorderService workorderService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private IPdmBiDeviceService deviceService; + @Autowired + private ISchCachelineVehilematerialService cacheLineVechileService; + @Autowired + private AgvInstService agvInstService; + private final Map SpeHandles= new HashMap<>(); - private static String OPT_NAME = "ACS回调# "; + private static String OPT_NAME = "ACS回调# "; public SpeFullTask() { SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe()); SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache()); - SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe()); + SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_WASH.name() ,new Spe2Wash()); } @Override + @Transactional public void updateTaskStatus(JSONObject param,String status) { - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); log.info(InterfaceLogType.ACS_TO_LMS.getDesc()); // 指令执行中 - JSONObject task = taskTable.query("task_id = '" + param.getString("task_id") + "'").uniqueResult(0); - AcsTaskEnum taskType = AcsTaskEnum.getType(task.getString("task_type"),"TASK_"); + SchBaseTask task = taskService.getById(param.getString("task_id")); + AcsTaskEnum taskType = AcsTaskEnum.getType(task.getTask_type(),"TASK_"); + taskService.update(new UpdateWrapper() + .set("task_status",status) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); try { SpeHandles.get(taskType.name()).handle(param,status,task); }catch (Exception ex){ @@ -63,25 +86,27 @@ public class SpeFullTask extends AbstractAcsTask { @Override @Transactional public String createTask(JSONObject param) { - String point_code = param.getString("device_code"); String quantity = param.getString("quantity"); - String type = param.getString("type"); - JSONObject order = WQLObject.getWQLObject("PDM_produce_workOrder").query("workorder_code = '" + param.getString("workorder_code") + "' and is_delete = 0 and workorder_status != "+StatusEnum.TASK_FINISH.getCode()).uniqueResult(0); + PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper() + .eq("workorder_code", param.getString("workorder_code")) + .eq("is_delete", false) + .lt("workorder_status", StatusEnum.TASK_FINISH.getCode())); Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); - JSONArray chectIndDatabase = WQLObject.getWQLObject("SCH_BASE_Task").query((AcsTaskEnum.REQUEST_CALLTYPE_FULL.getCode().equals(type) ? "point_code1" : "point_code2") + "= '" + point_code + "' and task_status < " + StatusEnum.TASK_FINISH.getCode()).getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(chectIndDatabase)){ - Assert.notNull(order, String.format("设备%s存在未完成任务", param.getString("point_code"))); + List list = taskService.list(new QueryWrapper() + .eq("point_code1", point_code).lt("task_status", StatusEnum.TASK_FINISH.getCode()) + ); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code"))); } JSONObject empPoint = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "2", "point_code", point_code, "point_type", StatusEnum.POINT_LOCATION_EMP.getCode())).process().uniqueResult(0); JSONObject form = new JSONObject(MapOf.of("start_point_code",point_code, "next_point_code","","return_point_code", empPoint.getString("point_code"),"vehicle_code", - "","product_area",order.getString("product_area"),"quantity", quantity,"type",type,"material_id", order.getString("material_id"))); + "","product_area",order.getProduct_area(),"quantity", quantity,"type",AcsTaskEnum.TASK_PRODUCT_MAC.getCode(),"material_id", order.getMaterial_id())); - String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; + String taskId = IdUtil.getStringId(); JSONObject task = packageParam(form, taskId); - WQLObject.getWQLObject("SCH_BASE_Task").insert(task); - + taskService.save(task.toJavaObject(SchBaseTask.class)); try { pointConfirm(task); //下发 @@ -96,7 +121,7 @@ public class SpeFullTask extends AbstractAcsTask { private JSONObject packageParam(JSONObject form, String task_id) { JSONObject task = new JSONObject(); 参数封装:{ - AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "REQUEST_"); + AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "TASK_"); task.put("task_id", task_id); task.put("task_name", taskEnum.getDesc()); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); @@ -124,39 +149,33 @@ public class SpeFullTask extends AbstractAcsTask { } @Override - public void cancel(String taskId) { - log.info(OPT_NAME+"cancel taskID:{}",taskId); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - //专机-专机 - //专机-缓存线 - //缓存线出库 - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_CANNEL.getCode()),"task_id = '"+taskId+"'"); + public void cancel(String taskId) { } - } interface SpeStatusHandler{ - void handle(JSONObject param,String status,JSONObject task); + void handle(JSONObject param,String status,SchBaseTask task); } class Spe2Spe implements SpeStatusHandler{ @Override - public void handle(JSONObject param, String sta,JSONObject task) { + public void handle(JSONObject param, String sta,SchBaseTask task) { AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - switch (status){ case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); + Map extParam = (Map)param.get("ext_param"); +// if (extParam.get("put_finish") != null){ +// pointService.update(new UpdateWrapper() +// .set("vehicle_code",task.getVehicle_code2()) +// .eq("point_code",task.getPoint_code3())); +// } +// if (extParam.get("take_finish") != null){ +// pointService.update(new UpdateWrapper() +// .set("vehicle_code","") +// .eq("point_code",task.getPoint_code3())); +// pointService.update(new UpdateWrapper() +// .set("vehicle_code",task.getVehicle_code2()) +// .eq("point_code",task.getPoint_code1())); +// } break; case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - //到专机:更新设备上料位物料数量 - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); break; case STATUS_CANNEL: cancel(param.getString("task_id")); @@ -169,30 +188,24 @@ public class SpeFullTask extends AbstractAcsTask { } class Spe2Cache implements SpeStatusHandler{ @Override - public void handle(JSONObject param, String sta,JSONObject task) { + public void handle(JSONObject param, String sta,SchBaseTask task) { AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - String workprocedureCode = param.getString("workorder_code"); - String inboxtxm = param.getString("inboxtxm"); - String outboxtxm = param.getString("outboxtxm"); switch (status){ case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); + Map extParam = (Map)param.get("ext_param");//outboxt inboxt + //outboxt箱子更新到任务表vechile_code2? + if (extParam.get("inboxt") != null){ + SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial(); + vehilematerial.setVehmaterial_id(IdUtil.getStringId()); + vehilematerial.setVehicle_code(extParam.get("inboxt")); + vehilematerial.setMaterial_id(task.getMaterial_id()); + vehilematerial.setErr_type("0"); + vehilematerial.setCreate_time(DateUtil.now()); + vehilematerial.setQuantity(task.getMaterial_qty()); + cacheLineVechileService.save(vehilematerial); + } break; case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"), - "material_id", task.getString("material_id"), - "vehicle_code", inboxtxm, - "vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(), - //工单,工序? - "workorder_code", workprocedureCode, - "create_time", DateUtil.now(), - "update_time", DateUtil.now() - //物料规格,物料名称 从物料信息表关联查询 - )); break; case STATUS_CANNEL: cancel(param.getString("task_id")); @@ -202,33 +215,25 @@ public class SpeFullTask extends AbstractAcsTask { } } } - class Cache2Spe implements SpeStatusHandler{ + class Spe2Wash implements SpeStatusHandler{ @Override - public void handle(JSONObject param, String sta,JSONObject task) { + public void handle(JSONObject param, String sta,SchBaseTask task) { AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - String outboxtxm = param.getString("outboxtxm"); - switch (status){ case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); + Map extParam = (Map)param.get("ext_param"); + log.info("生坑到料完成:"+param.toString()); + if (extParam.get("fall_finish") != null){ + PdmBiDevice one = deviceService.getOne(new QueryWrapper().eq("device_code", task.getPoint_code2())); + deviceService.update(new UpdateWrapper() + .set("material_id", task.getMaterial_id()) + .set("deviceinstor_qty",one.getDeviceinstor_qty().add(task.getMaterial_qty())) + .eq("device_code", task.getPoint_code2())); + } break; case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); break; case STATUS_CANNEL: - cancel(param.getString("task_id")); break; default: throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); @@ -239,6 +244,109 @@ public class SpeFullTask extends AbstractAcsTask { @Override public void pointConfirm(JSONObject param) { agvInstService.fullMaster(param); - } + + @Override + public List schedulerTask(List array) { + ArrayList Merge = new ArrayList<>(); + if (!CollectionUtils.isEmpty(array)){ + String pointCollect = array.stream().map(a->a.getPoint_code1() + "','" + a.getPoint_code2()).collect(Collectors.joining("','")); + JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0); + //区域编号对应point_code + Map> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code"))); + Set mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet()); + //合并下发的任务 + List notMerge = new ArrayList<>();//单独下发的任务 + List waitingTask = new ArrayList<>();//可合并,但是只有单条任务 + Map taskGroupMap = new HashMap<>(); + for (SchBaseTask task : array) { + String taskGroupId = IdUtil.getStringId(); + String taskId = task.getTask_id(); + if (taskGroupMap.get(taskId) != null){ + task.setTask_group_id(taskGroupMap.get(taskId)); + Merge.add(task); + continue; + } + String start = task.getPoint_code1(); + String end = task.getPoint_code2(); + taskGroupMap.put(taskId,taskGroupId); + task.setTask_group_id(taskGroupId); + //如果点位不属于查询出来可以合并点位集合:则单独下发集合 + if (!mergePointCollent.contains(start) && !mergePointCollent.contains(end)){ + notMerge.add(task); + continue; + } + //起点点位是否有多个合并任务点,如果没有则判断终点是否有多个合并任务点;都没有则说明当前起点终点对应区域只有一个任务:放入等待下发集合中 + List collect = taskGroupMap.keySet().stream().collect(Collectors.toList()); + collect.add(taskId); + String mergeTargetId = getMergePoint(pointRegionCollent, start,end,array,collect); + if (mergeTargetId == null){ + waitingTask.add(task); + continue; + } + //查询到相同区域可以合并的点位集合 + taskGroupMap.put(mergeTargetId,taskGroupId); + Merge.add(task); + } + //开始下发:处理waitingTask:如果创建时间>2分钟:则改单独下发 + if (waitingTask.size()>0){ + List needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),a.getCreate_time(), DateUnit.MINUTE) >1 ).collect(Collectors.toList()); + notMerge.addAll(needPublish); + } + String notMergeID = notMerge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(",")); + String waitingTaskId = waitingTask.stream().map(a -> a.getTask_id()).collect(Collectors.joining(",")); + String MergeId = Merge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(",")); + log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId); + Merge.addAll(notMerge); + } + Map> collect = Merge.stream().collect(Collectors.groupingBy(SchBaseTask::getTask_group_id)); + + ArrayList result = new ArrayList<>(); + for (List value : collect.values()) { + updateAcsTaskType(value); + result.addAll(value); + } + return result; + } + + private void updateAcsTaskType(List value) { + if (value.size() > 1){ + boolean tag = true; + for (SchBaseTask task : value) { + if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode())){ + task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK.getCode()); + } + if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode())){ + task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_TASK.getCode()); + } + if (tag){task.setIs_send(true);tag = false;}else {task.setIs_send(false); } + } + } + } + + private String getMergePoint(Map> pointRegionCollent, String start,String end,List tasks,List taskIds) { + String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds); + if (findpoint == null){ + findpoint = findpoint(pointRegionCollent, end, tasks, taskIds); + } + return findpoint; + } + + private String findpoint(Map> pointRegionCollent, String start, List tasks, List taskIds) { + List objects = pointRegionCollent.get(start); + if (CollectionUtils.isEmpty(objects)){ + return null; + } + JSONObject startPointInfo = (JSONObject) objects.get(0); + String startPointCollent = startPointInfo.getString("pointcollent"); + String[] split = startPointCollent.split(","); + for (String s : split) { + Optional any = tasks.stream().filter(a -> a.getPoint_code1().equals(s) && !taskIds.contains((a.getTask_id()))).findAny(); + if (any.isPresent()){ + return any.get().getTask_id(); + } + } + return null; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java index 4d7cb4d6..6b0aa66b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/TaskScheduleService.java @@ -4,7 +4,9 @@ import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.enums.AcsTaskEnum; @@ -14,10 +16,15 @@ import org.nl.common.utils.MapOf; 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.SpringContextHolder; import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.lang.reflect.Method; import java.util.*; @@ -34,118 +41,56 @@ import java.util.stream.Collectors; public class TaskScheduleService { private ReentrantLock lock = new ReentrantLock(); - private final WmsToAcsService wmsToAcsService; + private final WmsToAcsService wmsToAcsService; + private final ISchBaseTaskService taskService; + + @SneakyThrows @Scheduled(cron = "0/30 * * * * ?") public void taskPublish(){ boolean islock = lock.tryLock(); try { if (islock){ - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); //查询所有自动下发的任务 - JSONArray all = taskTable.query("is_auto_issue = '1' and task_status < '" + StatusEnum.TASK_PUBLISH.getCode() + "'").getResultJSONArray(0); + List pointConfirmList = taskService.list(new QueryWrapper().eq("is_auto_issue", "1").eq("is_delete",false).lt("task_status", StatusEnum.TASK_START_END_P.getCode())); //进行起点终点确认: - if (all.size() == 0){ - return; - } - log.info("TaskScheduleService#taskPublish all_task:{}",all.size()); - Iterator iterator = all.iterator(); - while (iterator.hasNext()){ - JSONObject task = (JSONObject)iterator.next(); - if (task.getString("task_status").equals(StatusEnum.TASK_START_END_P.getCode())){ - continue; - } - try { - Class clz = Class.forName(task.getString("handle_class")); - Object obj = clz.newInstance(); - // 调用每个任务类的forceFinishInst()强制结束方法 - Method m = obj.getClass().getDeclaredMethod("pointConfirm", JSONObject.class, String.class); - m.invoke(obj,task); - task.put("task_type", StatusEnum.TASK_START_END_P.getCode()); - }catch (Exception ex){ - task.put("task_type", StatusEnum.TASK_START_ERROR.getCode()); - task.put("remark",ex.getMessage()); - task.put("update_time",DateUtil.now()); - taskTable.update(task); - iterator.remove(); + if (pointConfirmList.size() > 0){ + Iterator iterator = pointConfirmList.iterator(); + while (iterator.hasNext()){ + SchBaseTask task =iterator.next(); + try { + Object obj = SpringContextHolder.getBean(Class.forName(task.getHandle_class())); + // 调用每个任务类的forceFinishInst()强制结束方法 + Method m = obj.getClass().getDeclaredMethod("pointConfirm", JSONObject.class); + m.invoke(obj,JSONObject.toJSON(task)); + task.setTask_type(StatusEnum.TASK_START_END_P.getCode()); + }catch (Exception ex){ + task.setTask_type(StatusEnum.TASK_START_ERROR.getCode()); + task.setRemark(ex.getMessage()); + task.setUpdate_time(new Date()); + taskService.updateById(task); + } } } + List all = taskService.list(new QueryWrapper().eq("is_auto_issue", "1").eq("is_delete",false).eq("task_status", StatusEnum.TASK_START_END_P.getCode())); //分区域:不同区域调用不同acs接口 - Map> areaCollent = all.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("product_area"))); + Map> areaCollent = all.stream().collect(Collectors.groupingBy(SchBaseTask::getProduct_area)); for (String area : areaCollent.keySet()) { - List array = areaCollent.get(area); - if (array.size()>0){ - String pointCollect = array.stream().map(o -> ((JSONObject) o).getString("point_code1") + "','" + ((JSONObject) o).getString("point_code2")).collect(Collectors.joining("','")); - JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0); - //区域编号对应point_code - Map> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code"))); - Set mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet()); - //合并下发的任务 - List notMerge = new ArrayList<>();//单独下发的任务 - List Merge = new ArrayList<>();//单独下发的任务 - List waitingTask = new ArrayList<>();//可合并,但是只有单条任务 - Map taskGroupMap = array.stream().filter(a-> StringUtils.isNotEmpty(((JSONObject)a).getString("task_group_id"))).collect(HashMap::new, (k, v) -> k.put(((JSONObject)v).getString("task_id"), ((JSONObject)v).getString("task_group_id")), HashMap::putAll); - - for (Object o : array) { - String taskGroupId = IdUtil.getStringId(); - JSONObject task = (JSONObject) o; - String taskId = task.getString("task_id"); - task.put("is_send","1"); - if (taskGroupMap.get(taskId) != null){ - task.put("task_group_id",taskGroupMap.get(taskId)); - task.put("is_send","0"); - Merge.add(task); - continue; - } - String start = task.getString("point_code1"); - String end = task.getString("point_code2"); - taskGroupMap.put(taskId,taskGroupId); - task.put("task_group_id",taskGroupId); - //如果点位不属于查询出来可以合并点位集合:则单独下发集合 - if (!mergePointCollent.contains(start) && !mergePointCollent.contains(end)){ - notMerge.add(task); - continue; - } - //起点点位是否有多个合并任务点,如果没有则判断终点是否有多个合并任务点;都没有则说明当前起点终点对应区域只有一个任务:放入等待下发集合中 - List collect = taskGroupMap.keySet().stream().collect(Collectors.toList()); - collect.add(taskId); - String mergeTargetId = getMergePoint(pointRegionCollent, start,end,array,collect); - if (mergeTargetId == null){ - waitingTask.add(task); - continue; - } - //查询到相同区域可以合并的点位集合 - taskGroupMap.put(mergeTargetId,taskGroupId); - Merge.add(task); - } - //开始下发:处理waitingTask:如果创建时间>2分钟:则改单独下发 - if (waitingTask.size()>0){ - List needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),DateUtil.parseDateTime(((JSONObject)a).getString("create_time") ), DateUnit.MINUTE) >2 ).collect(Collectors.toList()); - notMerge.addAll(needPublish); - } - String notMergeID = notMerge.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(",")); - String waitingTaskId = waitingTask.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(",")); - String MergeId = Merge.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(",")); - log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId); - notMerge.forEach(a->{ - ((JSONObject)a).put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode()); - }); - Merge.addAll(notMerge); - JSONArray jsonArray = new JSONArray(Merge); - //批量更新任务状态,is_send,task_group_id - for (Object task : Merge) { - JSONObject task1 = (JSONObject) task; - task1.put("update_name","schedule"); - task1.put("update_time",DateUtil.now()); - taskTable.update(task1,"task_id = '"+task1.getString("task_id")+"'"); - } - //缓存线任务待确认是否生成多个 - Map resp = wmsToAcsService.issueTaskToAcs(jsonArray); -// if (((int)resp.get("status")) == (HttpStatus.BAD_REQUEST.value())){ -// Object errArr = resp.get("errArr"); -// throw new BadRequestException(String.valueOf(resp.get("message"))); -// } + Map> listMap = areaCollent.get(area).stream().collect(Collectors.groupingBy(SchBaseTask::getHandle_class)); + List Merge = new ArrayList<>(); + for (Map.Entry> array : listMap.entrySet()) { + //调用不同实现 + AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(array.getKey())); + Merge.addAll(taskHandler.schedulerTask(array.getValue())); } + JSONArray arr = new JSONArray(); + for (SchBaseTask task : Merge) { + task.setUpdate_name("schedule"); + task.setUpdate_time(new Date()); + taskService.updateById(task); + arr.add(JSONObject.toJSON(task)); + } + Map resp = wmsToAcsService.issueTaskToAcs(arr); } } }finally { @@ -156,27 +101,4 @@ public class TaskScheduleService { } - private String getMergePoint(Map> pointRegionCollent, String start,String end,List tasks,List taskIds) { - String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds); - if (findpoint == null){ - findpoint = findpoint(pointRegionCollent, end, tasks, taskIds); - } - return findpoint; - } - - private String findpoint(Map> pointRegionCollent, String start, List tasks, List taskIds) { - List objects = pointRegionCollent.get(start); - JSONObject startPointInfo = (JSONObject) objects.get(0); - String startPointCollent = startPointInfo.getString("pointcollent"); - String[] split = startPointCollent.split(","); - for (String s : split) { - Optional any = tasks.stream().filter(a -> ((JSONObject) a).getString("point_code1").equals(s) && !taskIds.contains(((JSONObject) a).getString("task_id"))).findAny(); - if (any.isPresent()){ - return ((JSONObject)any.get()).getString("task_id"); - } - } - return null; - } - - } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java index 6bb5e166..f64326d4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java @@ -4,13 +4,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; -import org.nl.common.utils.OptionRecord; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; +import org.springframework.data.domain.Pageable; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -90,6 +90,15 @@ public interface IPdmProduceWorkorderService extends IService getOrderList(Map param, Pageable page); /** * 开工操作 * @@ -107,6 +116,9 @@ public interface IPdmProduceWorkorderService extends IService reportQuery(ReportQuery query); + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java index 2f95ec1f..633c389e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java @@ -2,6 +2,10 @@ package org.nl.wms.product_manage.service.workorder; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IPdmProduceWorkorderrecordService extends IService { + List reportQuery(ReportQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java index 794348f7..d3122bc4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java @@ -25,4 +25,6 @@ public interface PdmProduceWorkorderMapper extends BaseMapper event, @Param("workorder_id")String workorder_id); + List orderList(Map qeury); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml index 56ec0f9e..1a3bcaec 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml @@ -71,6 +71,37 @@ order by record.seq_number + update PDM_produce_workOrder set diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java index 7fb66f71..abc1b051 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java @@ -1,7 +1,12 @@ package org.nl.wms.product_manage.service.workorder.dao.mapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface PdmProduceWorkorderrecordMapper extends BaseMapper { + List reportQuery(@Param("query")ReportQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml index ac1a9b89..08ae1d6b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml @@ -2,4 +2,32 @@ + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java new file mode 100644 index 00000000..d7e4f514 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java @@ -0,0 +1,25 @@ +package org.nl.wms.product_manage.service.workorder.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; + +import java.util.Date; + +/* + * @author ZZQ + * @Date 2023/4/26 11:05 + */ +@Data +public class ReportQuery { + + private String device_code; + private String workorder_code; + private String report; + private String start_time; + private String end_time; + +} 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 df9e9713..0f0210a9 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 @@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import io.jsonwebtoken.lang.Assert; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.nl.common.TableDataInfo; @@ -29,6 +30,7 @@ import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; import org.nl.wms.mps.service.WorkOrderImportEnum; import org.nl.wms.mps.service.dto.ProduceshiftorderDto; +import org.nl.wms.product_manage.ReportEnum; import org.nl.wms.product_manage.ReportRecordStatus; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; @@ -38,10 +40,13 @@ import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import org.nl.wms.product_manage.service.workorder.dao.WorkorderRecord; import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderMapper; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; import org.nl.wms.system_manage.service.user.ISysUserService; import org.nl.wms.system_manage.service.user.dao.SysUser; +import org.redisson.misc.Hash; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -63,6 +68,7 @@ import java.util.stream.Collectors; * @since 2023-04-26 */ @Service +@Slf4j public class IPdmProduceWorkorderServiceImpl extends ServiceImpl implements IPdmProduceWorkorderService { @Autowired private IMdPbClassstandardService classstandardService; @@ -179,9 +185,9 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() .set("workorder_status", WorkerOrderEnum.FORCE_COMPLETE.getCode()) - .set("update_id", SecurityUtils.getCurrentUserId()) - .set("update_name", SecurityUtils.getCurrentNickName()) - .set("update_time", new Date()) + .set("confirm_id", SecurityUtils.getCurrentUserId()) + .set("confirm_name", SecurityUtils.getCurrentNickName()) + .set("confirm_time", new Date()) .in("workorder_id", workorder_id)); JSONArray array = new JSONArray(); JSONObject map = new JSONObject(); @@ -190,7 +196,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl result = wmsToAcsService.orderStatusUpdate(array); if (!HttpStatus.OK.equals(result.get("status"))) { - throw new BadRequestException((String) result.get("message")); + log.error((String) result.get("message")); } this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, workorder_id); } @@ -509,7 +515,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() .eq("device_code", param.getString("device_code")) - .in("workorder_status", "2", "3", "4") + .in("workorder_status", "3", "4") .ne("workorder_id", param.getString("workorder_id"))); if (ObjectUtil.isNotEmpty(result)) { throw new BadRequestException("已有工单选择该设备开工,请更换开工设备!"); @@ -519,18 +525,38 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl resp = wmsToAcsService.order(array); + PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper().eq("workorder_id", param.getString("workorder_id"))); workOrder.setWorkorder_status(WorkerOrderEnum.PRODUCTING.getCode()); - if (((int) resp.get("status")) == (HttpStatus.BAD_REQUEST.value())) { - throw new BadRequestException(String.valueOf(resp.get("message"))); - } + workOrder.setRealproducestart_date(DateUtil.now()); + workOrder.setReal_qty(null); this.update(workOrder, new QueryWrapper().eq("workorder_id", param.getString("workorder_id"))); - this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, result.getWorkorder_id()); + PdmProduceWorkorderrecord workorderrecord = packageRecordForm(workOrder); + reportRecordService.save(workorderrecord); + + Map resp = wmsToAcsService.order(array); + if (HttpStatus.BAD_REQUEST.equals(resp.get("status"))) { + throw new BadRequestException(resp.get("message")!=null?String.valueOf(resp.get("message")):"acs反馈异常"); + } return RestBusinessTemplate.execute(() -> resp); } + @NotNull + private PdmProduceWorkorderrecord packageRecordForm(PdmProduceWorkorder workOrder) { + PdmProduceWorkorderrecord workorderrecord = new PdmProduceWorkorderrecord(); + workorderrecord.setMacoperate_id(IdUtil.getStringId()); + workorderrecord.setWorkorder_id(workOrder.getWorkorder_id()); + workorderrecord.setWorkprocedure_id(workOrder.getWorkprocedure_id()); + workorderrecord.setDevice_code(workOrder.getDevice_code()); + workorderrecord.setProduct_area(workOrder.getProduct_area()); + workorderrecord.setReport_status(ReportEnum.REPORT_STATUS.code("生成")); + workorderrecord.setProduce_person_id(SecurityUtils.getCurrentUserId()); + workorderrecord.setOperatetime_start(DateUtil.now()); + workorderrecord.setShift_type_scode(workOrder.getShift_type_scode()); + return workorderrecord; + } + @NotNull private JSONObject packageForm(JSONObject param) { PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper().eq("workorder_id", param.getString("workorder_id"))); @@ -573,13 +599,14 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() .set("report_qty", param.getBigDecimal("report_qty")) .set("nok_qty", param.getBigDecimal("nok_qty")) .set("repare_qty", param.getBigDecimal("repare_qty")) - .set("needproduct_qty", workorder.getPlan_qty().doubleValue() - workorder.getReport_qty().doubleValue()) + .set("needproduct_qty", Math.max(0,workorder.getPlan_qty().intValue() - workorder.getReport_qty().intValue())) .eq("macoperate_id", one.getMacoperate_id())); return one.getMacoperate_id(); } @@ -637,7 +664,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl reportQuery(ReportQuery query) { + List list = reportRecordService.reportQuery(query); + Map hashMap = new HashMap<>(); + int i =0; + for (Map map : list) { + String code = (String)map.get("workorder_code"); + if (hashMap.get(code)==null){ + hashMap.put(code,code); + i =0; + } + i++; + map.put("seq_number",i); + } + return list; + } + + + @Override + public List getOrderList(Map param, Pageable page) { + return this.baseMapper.orderList(param); + } + + @Override + public void updateReport(JSONObject param) { + Assert.notNull(param,"参数不能为空"); + PdmProduceWorkorderrecord record = reportRecordService.getOne(new QueryWrapper() + .eq("macoperate_id", param.getString("macoperate_id"))); + PdmProduceWorkorder workorder = this.getOne(new QueryWrapper() + .eq("workorder_id", record.getWorkorder_id())); + if (!workorder.getIs_canupdate_update()){ + throw new BadRequestException("当前工单设置为不允许修改报工记录"); + } + reportRecordService.update(new UpdateWrapper() + .set("nok_qty",param.getBigDecimal("nok_qty")) + .set("repare_qty",param.getBigDecimal("repare_qty")) + .set("report_qty",param.getBigDecimal("report_qty")) + .eq("macoperate_id", param.getString("macoperate_id"))); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java index 06bac38a..7223c3e9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java @@ -1,11 +1,17 @@ package org.nl.wms.product_manage.service.workorder.impl; +import com.alibaba.fastjson.JSON; +import lombok.var; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; + /** *

* 生产设备报工记录表 服务实现类 @@ -17,4 +23,8 @@ import org.springframework.stereotype.Service; @Service public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl implements IPdmProduceWorkorderrecordService { + @Override + public List reportQuery(ReportQuery query) { + return this.baseMapper.reportQuery(query); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/task/SchBaseTaskController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/task/SchBaseTaskController.java index bfd6951d..cff437e7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/task/SchBaseTaskController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/task/SchBaseTaskController.java @@ -1,21 +1,121 @@ package org.nl.wms.scheduler_manage.controller.task; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.nl.common.anno.Log; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.system_manage.service.dict.ISysDictService; +import org.nl.wms.system_manage.service.dict.dao.Dict; +import org.nl.wms.product_manage.sch.manage.FinishTypeEnum; +import org.nl.wms.product_manage.sch.service.TaskService; +import org.nl.wms.product_manage.sch.service.dto.TaskDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.RestController; - +import java.util.Map; /** - *

- * 任务表 前端控制器 - *

- * - * @author generator - * @since 2023-05-11 - */ + * @author ldjun + * @date 2021-08-19 + **/ @RestController -@RequestMapping("/schBaseTask") +@RequiredArgsConstructor +@Api(tags = "任务管理") +@RequestMapping("/api/task") +@Slf4j public class SchBaseTaskController { + private final TaskService taskService; + private final ISysDictService dictService; + @Autowired + private ISchBaseTaskService baseTaskService; + + @GetMapping + @Log("查询任务") + @ApiOperation("查询任务") + //@PreAuthorize("@el.check('task:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增任务") + @ApiOperation("新增任务") + //@PreAuthorize("@el.check('task:add')") + public ResponseEntity create(@Validated @RequestBody TaskDto dto) { + taskService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改任务") + @ApiOperation("修改任务") + //@PreAuthorize("@el.check('task:edit')") + public ResponseEntity update(@Validated @RequestBody TaskDto dto) { + taskService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除任务") + @ApiOperation("删除任务") + //@PreAuthorize("@el.check('task:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + taskService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/taskStatus") + @Log("获取任务状态列表") + @ApiOperation("获取任务状态列表") + public ResponseEntity getTaskStatus() { + return new ResponseEntity<>(dictService.list(new LambdaQueryWrapper() + .eq(Dict::getCode, "task_status")), HttpStatus.OK); + } + + @PostMapping("/taskType") + @Log("获取任务类型列表") + @ApiOperation("获取任务类型列表") + public ResponseEntity getTaskType() { + return new ResponseEntity<>(taskService.getTaskTypes(), HttpStatus.OK); + } + @GetMapping("/acsTaskType") + @Log("获取acs任务类型列表") + @ApiOperation("获取acs任务类型列表") + public ResponseEntity getAcsTaskType() { + return new ResponseEntity<>(taskService.getAcsTaskType(), HttpStatus.OK); + } + + @GetMapping("/finishType") + @Log("获取任务类型列表") + @ApiOperation("获取任务类型列表") + public ResponseEntity getFinishType() { + FinishTypeEnum[] values = FinishTypeEnum.values(); + JSONArray arr = new JSONArray(); + for (FinishTypeEnum value : values) { + JSONObject json = new JSONObject(); + json.put("code", value.getCode()); + json.put("name", value.getName()); + arr.add(json); + } + return new ResponseEntity<>(arr, HttpStatus.OK); + } + + @PutMapping("/operation") + @Log("任务操作") + @ApiOperation("任务操作") + //@PreAuthorize("@el.check('task:edit')") + public ResponseEntity update(@RequestBody Map map) { + baseTaskService.operation(map); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/ISchBaseTaskService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/ISchBaseTaskService.java index bdae63ce..df6f158b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/ISchBaseTaskService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/ISchBaseTaskService.java @@ -3,6 +3,8 @@ package org.nl.wms.scheduler_manage.service.task; import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Map; + /** *

* 任务表 服务类 @@ -13,4 +15,10 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ISchBaseTaskService extends IService { + /** + * 任务操作 + * + * @param param + */ + void operation(Map 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 03766996..f7c6945d 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 @@ -1,11 +1,29 @@ package org.nl.wms.scheduler_manage.service.task.impl; +import cn.hutool.core.map.MapUtil; +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.UpdateWrapper; +import org.nl.common.enums.AcsTaskEnum; +import org.nl.common.enums.StatusEnum; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; +import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.nl.wms.scheduler_manage.service.task.dao.mapper.SchBaseTaskMapper; import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.util.Map; + /** *

* 任务表 服务实现类 @@ -17,4 +35,58 @@ import org.springframework.stereotype.Service; @Service public class SchBaseTaskServiceImpl extends ServiceImpl implements ISchBaseTaskService { + @Autowired + @Lazy + private AcsToWmsService acsToWmsService; + + @Override + public void operation(Map map) { + WmsToAcsServiceImpl wms = new WmsToAcsServiceImpl(); + String task_id = MapUtil.getStr(map, "task_id"); + String method_name = MapUtil.getStr(map, "method_name"); + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + if (taskObj.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) throw new BadRequestException("任务已完成!"); + + switch (method_name) { // forceFinish, cancel + case "immediateNotifyAcs": + JSONArray array = new JSONArray(); + array.add(taskObj); + wms.issueTaskToAcs(array); + break; + case "forceFinish": + JSONArray finish = new JSONArray(); + JSONObject res = new JSONObject(); + res.put("task_id", task_id); + res.put("status", AcsTaskEnum.STATUS_FINISH.getCode()); + res.put("finished_type", AcsTaskEnum.MANUAL_TASK_FINISHED_TYPE.getCode()); // 手动完成 + finish.add(res); + acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(finish)); + break; + case "cancel": + JSONArray cancel = new JSONArray(); + JSONObject res2 = new JSONObject(); + res2.put("task_id", task_id); + res2.put("status", AcsTaskEnum.STATUS_CANNEL.getCode()); + cancel.add(res2); + acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel)); + break; + case "delete": + SchBaseTask one = getOne(new QueryWrapper().eq("task_id", task_id)); + int status = Integer.valueOf(one.getTask_status()); + //判断如果在3个状态之内,更新操作 + int tag = 1 << StatusEnum.TASK_CANNEL.getBit() + | 1 << StatusEnum.TASK_CREATE.getBit() + | 1 << StatusEnum.TASK_START_ERROR.getBit() + | 1 << StatusEnum.TASK_START_END_P.getBit(); + if ((tag &~ 1 << status) != tag){ + this.update(new UpdateWrapper() + .set("is_delete",true) + .eq("task_id", task_id)); + }else { + throw new BadRequestException("任务已经下发不允许直接删除"); + } + break; + default: break; + } + } } 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 513e292f..9cb17921 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 @@ -9,26 +9,24 @@ spring: client: reactive: #endpoints: 172.31.185.110:8200,172.31.154.9:8200 #内网 - # endpoints: 47.96.133.1785:8200 #外网 - endpoints: http://47.96.133.1785:8200 #外网 + # endpoints: 192.168.46.225:9200 #外网 + endpoints: http://192.168.46.225:9200 #外网 elasticsearch: rest: #uris: 172.31.185.110:8200,172.31.154.9:8200 #内网 - # uris: 47.96.133.1785:8200 #外网 - uris: http://47.96.133.1785:8200 #外网 - username: elastic - password: 123456 + # uris: 192.168.46.225:9200 #外网 + uris: http://192.168.46.225:9200 #外网 + # username: elastic + # password: 123456 datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${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.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false - username: ${DB_USER:shenhua} - #password: ${DB_PWD:P@ssw0rd} - #password: ${DB_PWD:root} - #password: ${DB_PWD:Root.123456} - password: ${DB_PWD:123456789} + 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.81.252}:${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:942464Yy} + # 初始连接数 initial-size: 5 # 最小连接数 @@ -173,6 +171,7 @@ sa-token: cookie: # 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com domain: + is-read-cookie: false #jetcache: # defaultCacheType: LOCAL 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 77547392..90d8b9b0 100644 --- a/mes/qd/src/views/wms/scheduler_manage/task/index.vue +++ b/mes/qd/src/views/wms/scheduler_manage/task/index.vue @@ -206,6 +206,11 @@ icon="el-icon-error" @click="doOperate(scope.row, 'b')" >取消 + 删除 @@ -382,6 +387,9 @@ export default { case 'd':// 详情 method_name = 'view' break + case 'delete':// 详情 + method_name = 'delete' + break } if (method_name === 'view') { this.view(row) diff --git a/mes/qd/src/views/wms/storage_manage/semiproduct/semiProductIn/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/semiproduct/semiProductIn/AddDialog.vue index bb5a315d..b19ba97e 100644 --- a/mes/qd/src/views/wms/storage_manage/semiproduct/semiProductIn/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/semiproduct/semiProductIn/AddDialog.vue @@ -1,76 +1,57 @@