diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java index 922516e2..fa18ad90 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/StartDecisionChainer.java @@ -52,7 +52,7 @@ public class StartDecisionChainer extends DecisionerChain { list = iStIvtStructattrService.list(query); }else { //出库流程由于有货货位较多:会生成多个对象容易内存益出,在fifo中直接通过materilal过滤目标 -// list = iStIvtStructattrService.structVehicle(MapOf.of("stor_code",startParam.getString("stor_code"))); + //list = iStIvtStructattrService.structVehicle(MapOf.of("stor_code",startParam.getString("stor_code"))); } return list; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java index ec01d43c..8bba3711 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java @@ -49,7 +49,8 @@ public class AlleyAveRuleHandler extends Decisioner public List handler(List list, JSONObject param) { // 判断仓位是否为空 if (CollectionUtils.isEmpty(list)) { - throw new BadRequestException("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略无可用货位"); + log.error("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略无可用货位"); + return Collections.emptyList(); } long startTime1 = System.currentTimeMillis(); if (ObjectUtils.isNotEmpty(list)) { @@ -95,7 +96,7 @@ public class AlleyAveRuleHandler extends Decisioner log.info("均衡策略:载具号:" + param.getString("vehicle_code") + "获取仓位耗时:{}", System.currentTimeMillis() - startTime1); if (subList.size() == 0) { log.error("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略货位数量为0"); - throw new BadRequestException("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略货位数量为0"); + return Collections.emptyList(); } return subList; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java index 926cc070..48be47c7 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.nl.common.domain.exception.BadRequestException; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; import org.nl.wms.decision_manage.handler.decisioner.Decisioner; @@ -13,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.Collections; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -45,14 +45,19 @@ public class LimitStorageRuleHandler extends Decisioner handler(List list, JSONObject param) { + // 判断仓位是否为空 + if (CollectionUtils.isEmpty(list)) { + log.error("限位策略:载具号:" + param.getString("vehicle_code") + "当前分配策略无可用货位"); + return Collections.emptyList(); + } long startTime1 = System.currentTimeMillis(); // 判断仓位是否为空 // 判断策略类型 String vehicleCode = param.getString("vehicle_code"); BmVehicleInfo vehileInfo = bmVehicleInfoService.vehileInfo(vehicleCode); - if (vehileInfo == null) { - throw new BadRequestException("限位策略,当前载具信息不存在:" + vehicleCode + "!"); - } + // if (vehileInfo == null) { + // throw new BadRequestException("限位策略,当前载具信息不存在:" + vehicleCode + "!"); + // } //限位策略特殊处理 String start_point = param.getString("start_point"); String errorTask = param.getString("errorTask"); @@ -66,10 +71,10 @@ public class LimitStorageRuleHandler extends Decisioner result = inHandler(list, vehileInfo); + List result = inHandler(list, vehileInfo, param.getString("height")); if (CollectionUtils.isEmpty(result)) { log.error("限位策略:载具号:" + vehicleCode + "获取仓位失败,该高度等级对应库位数量为0!"); - throw new BadRequestException("限位策略:载具号:" + vehicleCode + "获取仓位失败,该高度等级对应库位数量为0!"); + return Collections.emptyList(); } log.info("限位策略:起点为" + start_point + ",载具号:" + vehicleCode + "执行策略后仓位位数为:" + result.size() + ",第一个仓位为:" + result.get(0).getStruct_code()); log.info("限位策略:载具号:" + vehicleCode + "获取仓位耗时:{}", System.currentTimeMillis() - startTime1); @@ -78,26 +83,36 @@ public class LimitStorageRuleHandler extends Decisioner :仓位集合 */ - private List inHandler(List attrList, BmVehicleInfo vehicle) { + private List inHandler(List attrList, BmVehicleInfo vehicle, String height) { //限制条件:限制哪些 List limits = JSONArray.parseArray(strategyConfig.getParam(), String.class); - Predicate eqLimt= stIvtStructattr -> { + if (vehicle == null) { + height = StringUtils.isBlank(height) ? "3" : height; + vehicle = new BmVehicleInfo(); + vehicle.setH(Integer.parseInt(height)); + vehicle.setW(0); + vehicle.setL(0); + vehicle.setWeight(0); + } + BmVehicleInfo finalVehicle = vehicle; + Predicate eqLimt = stIvtStructattr -> { Boolean result = Boolean.TRUE; - if (limits.contains("h")){ - result = result && stIvtStructattr.getH()==vehicle.getH(); + if (limits.contains("h")) { + result = result && stIvtStructattr.getH() == finalVehicle.getH(); } - if (limits.contains("w")){ - result = result && stIvtStructattr.getW()==vehicle.getW(); + if (limits.contains("w")) { + result = result && stIvtStructattr.getW() == finalVehicle.getW(); } - if (limits.contains("l")){ - result = result && stIvtStructattr.getL()==vehicle.getL(); + if (limits.contains("l")) { + result = result && stIvtStructattr.getL() == finalVehicle.getL(); } - if (limits.contains("weight")){ - result = result && stIvtStructattr.getWeight()==vehicle.getWeight(); + if (limits.contains("weight")) { + result = result && stIvtStructattr.getWeight() == finalVehicle.getWeight(); } return result; }; @@ -111,16 +126,16 @@ public class LimitStorageRuleHandler extends Decisioner ltLimt = stIvtStructattr -> { Boolean result = Boolean.TRUE; if (limits.contains("h")){ - result = result && stIvtStructattr.getH()>vehicle.getH(); + result = result && stIvtStructattr.getH()>finalVehicle.getH(); } if (limits.contains("w")){ - result = result && stIvtStructattr.getW()>vehicle.getW(); + result = result && stIvtStructattr.getW()>finalVehicle.getW(); } if (limits.contains("l")){ - result = result && stIvtStructattr.getL()>vehicle.getL(); + result = result && stIvtStructattr.getL()>finalVehicle.getL(); } if (limits.contains("weight")){ - result = result && stIvtStructattr.getWeight()>vehicle.getWeight(); + result = result && stIvtStructattr.getWeight()>finalVehicle.getWeight(); } return result; }; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java index aa00e379..30c1fc51 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.SpringContextHolder; import org.nl.wms.decision_manage.handler.decisioner.Decisioner; @@ -12,10 +11,7 @@ import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /* @@ -32,11 +28,13 @@ public class DepthPriorityHandler extends Decisioner handler(List list, JSONObject param) { - if (CollectionUtils.isNotEmpty(list)) { - //托盘库和扩展库不需要深位判断 - if (list.get(0).getStor_code().equals(StatusEnum.STOCK_INFO.code("托盘库")) || "LXBCP02".equals(list.get(0).getSect_code())) { - return list; - } + if (CollectionUtils.isEmpty(list)) { + log.error("深位优先策略:载具号:" + param.getString("vehicle_code") + "无可用仓位进行分配!"); + return Collections.emptyList(); + } + //托盘库和扩展库不需要深位判断 + if (list.get(0).getStor_code().equals(StatusEnum.STOCK_INFO.code("托盘库")) || "LXBCP02".equals(list.get(0).getSect_code())) { + return list; } long startTime1 = System.currentTimeMillis(); List returnResult = new ArrayList<>(); @@ -123,7 +121,7 @@ public class DepthPriorityHandler extends Decisioner(HttpStatus.OK); } + + @PostMapping ("/delCtuIvt") + @Log("清除CTU库库存") + public ResponseEntity delCtuIvt() { + iSchBaseTaskService.deleteCtuIvt(); + return new ResponseEntity<>(HttpStatus.OK); + } @GetMapping("/taskMsgSchedule") public ResponseEntity taskMsgSchedule() { return new ResponseEntity<>(HttpStatus.OK); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ConveyorOutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ConveyorOutStorageTask.java index 6eb55f0d..053e5a98 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ConveyorOutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/ConveyorOutStorageTask.java @@ -115,6 +115,6 @@ public class ConveyorOutStorageTask extends AbstractTask { @Override public void cancel(JSONObject data) { - + this.updateTask(data); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java index 909cc808..ac5479dc 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/GroupDickInStorageTask.java @@ -141,6 +141,6 @@ public class GroupDickInStorageTask extends AbstractTask { @Override public void cancel(JSONObject data) { - + this.updateTask(data); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java index c5b1611d..573632e4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; @@ -17,6 +18,7 @@ import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -103,6 +105,14 @@ public class InStorageTask extends AbstractTask { @Override public void cancel(JSONObject data) { + SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); + // 更新终点 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .eq(StIvtStructattr::getStruct_code, schBaseTask.getPoint_code2()) + .set(StIvtStructattr::getVehicle_code, null) + .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁"))); this.updateTask(data); } + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java index ab8c55e4..771a82b5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java @@ -162,6 +162,6 @@ public class PalletInStorageTask extends AbstractTask { @Override public void cancel(JSONObject data) { - + this.updateTask(data); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java index c5965931..1d21aa80 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PickStorageTask.java @@ -104,6 +104,6 @@ public class PickStorageTask extends AbstractTask { @Override public void cancel(JSONObject data) { - + this.updateTask(data); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java index 59a6263a..15a53109 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java @@ -8,6 +8,7 @@ import org.nl.common.domain.entity.PageQuery; import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.dispatch_manage.task.service.dto.SchBaseTaskQuery; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -55,10 +56,15 @@ public interface ISchBaseTaskService extends IService { * @param ids / */ void deleteAll(Set ids); - public void deleteCtuStruct(); + void taskSchedule(List list); + @Transactional(rollbackFor = Exception.class) + void deleteCtuIvt(); + + + /** * 任务操作 * diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java index b37b91da..294fc6b0 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java @@ -32,7 +32,9 @@ public interface SchBaseTaskMapper extends BaseMapper { int updateVehiclemater(); - int updateStructattr(); + int updateCStockIvt(); + + List getTaskList(Set pointCodes1, Set pointCodes2, Set pointCodes3, Set pointCodes4); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml index 9ad4baf1..5823b8b7 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml @@ -133,7 +133,8 @@ UPDATE `md_pb_vehiclemater` SET is_delete='1' WHERE vehicle_code in (SELECT vehicle_code FROM `st_ivt_structattr` WHERE stor_code ='CStockId' AND vehicle_code IS NOT NULL AND lock_type ='00') - - UPDATE `st_ivt_structattr` SET vehicle_code=null,lock_type='00' WHERE stor_code ='CStockId' AND vehicle_code IS NOT NULL AND lock_type ='00' + + UPDATE `st_ivt_structattr` SET vehicle_code=null,lock_type='00' WHERE stor_code iN ('CStockId','HStockId') AND is_used ='1' + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskDto.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskDto.java new file mode 100644 index 00000000..184e4c27 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskDto.java @@ -0,0 +1,29 @@ +package org.nl.wms.dispatch_manage.task.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** +* @author lyd +* @date 2023-05-15 +**/ +@Data +public class SchBaseTaskDto implements Serializable { + private String id; + private String task_code; + private String task_type; + private String status; + private String vehicle_code; + private String vehicle_type; + private String point_code1; + private String point_code2; + private String point_code3; + private String point_code4; + private String priority; + private String acs_type; + private String remark; + private String agv_system_type; + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java index ee0f8034..4ae1548f 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java @@ -152,13 +152,18 @@ public class SchBaseTaskServiceImpl extends ServiceImpl().in(SchBaseTask::getTask_type, "80", "81", "82", "83").lt(SchBaseTask::getStatus, "80")).size() > 0) { + throw new BadRequestException("存在正在执行的CTU出入库任务未完成,请等待或手动将任务完成后,再清除库存!"); + } schBaseTaskMapper.updateVehiclemater(); - schBaseTaskMapper.updateStructattr(); + schBaseTaskMapper.updateCStockIvt(); } + @Override public void taskSchedule(List list) { list = list.stream().filter(r -> r.getStatus().equals(StatusEnum.FORM_STATUS.code("生成")) && "2114".equals(r.getPoint_code2())).collect(Collectors.toList()); @@ -211,7 +216,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper() @@ -255,37 +260,39 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() .eq("task_code", task.getTask_code()).eq("vehicle_code", task.getVehicle_code()).eq("is_delete", "0")); if (ObjectUtils.isNotEmpty(vehicleMaterList)) { - //查找非二楼任务的未完成的出库单与明细 - if (vehicleMaterList.get(0).getRemark().contains("空出")) { - List formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn()); - if (ObjectUtils.isNotEmpty(formData)) { - Map formDataMap = formData.get(0); - Object sourceFormData = formDataMap.get("source_form_data"); - JSONObject formDataId = JSONObject.parseObject((String) sourceFormData); - String id = formDataId.getString("id"); - String qty = formDataId.getString("qty"); - if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) { - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); - PmFormData pmFormData = iPmFormDataService.getById(id); - BigDecimal cancelQty = pmFormData.getAssign_qty().subtract(vehicleMaterList.get(0).getFrozen_qty()).abs(); - if (cancelQty.compareTo(BigDecimal.ZERO) == 0) { - lambdaUpdateWrapper.set(PmFormData::getQty, pmFormData.getAssign_qty()); + if (StringUtils.isNotBlank(vehicleMaterList.get(0).getRemark())) { + //查找非二楼任务的未完成的出库单与明细 + if (vehicleMaterList.get(0).getRemark().contains("空出")) { + List formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn()); + if (ObjectUtils.isNotEmpty(formData)) { + Map formDataMap = formData.get(0); + Object sourceFormData = formDataMap.get("source_form_data"); + JSONObject formDataId = JSONObject.parseObject((String) sourceFormData); + String id = formDataId.getString("id"); + String qty = formDataId.getString("qty"); + if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); + PmFormData pmFormData = iPmFormDataService.getById(id); + BigDecimal cancelQty = pmFormData.getAssign_qty().subtract(vehicleMaterList.get(0).getFrozen_qty()).abs(); + if (cancelQty.compareTo(BigDecimal.ZERO) == 0) { + lambdaUpdateWrapper.set(PmFormData::getQty, pmFormData.getAssign_qty()); + } + lambdaUpdateWrapper.set(PmFormData::getAssign_qty, cancelQty).eq(PmFormData::getId, id); + iPmFormDataService.update(lambdaUpdateWrapper); } - lambdaUpdateWrapper.set(PmFormData::getAssign_qty, cancelQty).eq(PmFormData::getId, id); - iPmFormDataService.update(lambdaUpdateWrapper); - } - String msg = "该库存在执行出库单id为:" + id + ",任务号为:" + task.getTask_code() + ",触发空出或被手动取消,取消数量为:" + vehicleMaterList.get(0).getFrozen_qty(); - //冻结解锁 - iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() - .set(MdPbVehicleMater::getFrozen_qty, 0) - .set(MdPbVehicleMater::getRemark, msg) - .eq(MdPbVehicleMater::getId, vehicleMaterList.get(0).getId())); - //库位空出 - iStIvtStructattrService.update(new LambdaUpdateWrapper() - .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("空出锁")) - .set(StIvtStructattr::getRemark, msg) - .eq(StIvtStructattr::getVehicle_code, task.getVehicle_code())); + String msg = "该库存在执行出库单id为:" + id + ",任务号为:" + task.getTask_code() + ",触发空出或被手动取消,取消数量为:" + vehicleMaterList.get(0).getFrozen_qty(); + //冻结解锁 + iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getFrozen_qty, 0) + .set(MdPbVehicleMater::getRemark, msg) + .eq(MdPbVehicleMater::getId, vehicleMaterList.get(0).getId())); + //库位空出 + iStIvtStructattrService.update(new LambdaUpdateWrapper() + .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("空出锁")) + .set(StIvtStructattr::getRemark, msg) + .eq(StIvtStructattr::getVehicle_code, task.getVehicle_code())); + } } } } @@ -333,7 +340,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl vehicleList = iMdPbVehicleMaterService.list(new QueryWrapper() .eq("vehicle_code", task.getVehicle_code()) @@ -402,12 +409,12 @@ public class SchBaseTaskServiceImpl extends ServiceImpl { System.out.println("---3--" + Thread.currentThread().getName()); //出阻挡说明是同排跟任务一个类型载具 - Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("limitStorage","depthPriority","alleyAve"), new JSONObject(MapOf.of( "is_move",true,"stor_code", stIvtStructattr.getStor_code(),"vehicle_code",task.getVehicle_code(),"errorTask","errorTask"))); + Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("limitStorage", "depthPriority", "alleyAve"), new JSONObject(MapOf.of("is_move", true, "stor_code", stIvtStructattr.getStor_code(), "vehicle_code", task.getVehicle_code(), "errorTask", "errorTask"))); moveStruct.set(((Map) process.get("form_data")).get("end_struct_code")); }, "1" + stIvtStructattr.getStor_code(), 5); Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("异常位移库") , "is_send", false - , "vehicle_code", StringUtils.isEmpty(vehicleCode)?"YCZJ" + task.getTask_code():vehicleCode, "form_data", new JSONObject(MapOf.of("start_struct_code", struct_code, "end_struct_code", moveStruct.get()))); + , "vehicle_code", StringUtils.isEmpty(vehicleCode) ? "YCZJ" + task.getTask_code() : vehicleCode, "form_data", new JSONObject(MapOf.of("start_struct_code", struct_code, "end_struct_code", moveStruct.get()))); moveStorageTask.createTask(new JSONObject(moveForm)); } @@ -454,6 +461,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() @@ -481,10 +489,13 @@ public class SchBaseTaskServiceImpl extends ServiceImpl) map.get("form_data")).get("end_struct_code"); if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(vehicleList)) { iActRuExecutionService.update(new UpdateWrapper() @@ -500,6 +511,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl arr,String type) { + List taskList = CopyUtil.copyList(arr, SchBaseTaskDto.class); //封装数据: InteracteDto dto = InteracteDto.builder() .service("wmsToAcsService") .trace_id(MDC.get("trace_id")) .type(type) - .data(arr).build(); + .data(taskList).build(); TableDataInfo tableDataInfo = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto)); return tableDataInfo; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java index 5c429f9b..7a927b10 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java @@ -310,8 +310,8 @@ public class MdGruopDickServiceImpl extends ServiceImpl vms = new ArrayList<>(); for (int i = 1; i < read.size(); i++) { List list = read.get(i); - String vehicle_code = (String) list.get(0); - String material_code = (String) list.get(1); + String vehicle_code = list.get(0).toString(); + String material_code = list.get(1).toString(); String pcsn = list.get(2).toString(); String qty = String.valueOf(list.get(3)); String single_weight = String.valueOf(list.get(4)); @@ -320,7 +320,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl vehicleMaters = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); if (!CollectionUtils.isEmpty(vehicleMaters)) { @@ -368,12 +368,16 @@ public class MdGruopDickServiceImpl extends ServiceImpl entry.getValue().size() > 1); + .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T")) + //按载具和物料分组 + .collect(Collectors.groupingBy( + vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(), + Collectors.mapping(MdPbVehicleMater::getPcsn, Collectors.toSet()) + )) + .values().stream() + .anyMatch(pcsnSet -> pcsnSet.size() > 1); if (count) { - throw new BadRequestException("存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); + throw new BadRequestException(",原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); } iMdPbVehicleMaterService.saveBatch(vms); this.saveBatch(groups); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java index 5b81a2f6..44382285 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java @@ -207,6 +207,20 @@ public class CockpitServiceImpl implements CockpitService { int box = stockList22.stream().filter(r -> StringUtils.isNotBlank(r.getUpdate_time())) .mapToInt(taskInfo -> taskInfo.getVehicle_code().split(",").length) .sum(); + if (Double.parseDouble(obj2.getString("time").trim().replace("h", "")) > 1) { + //根据箱数计算 + if (box < 100) { + obj2.put("time", 1 + "h"); + } else { + BigDecimal baseBox = BigDecimal.valueOf(100); + BigDecimal baseHours = BigDecimal.valueOf(1.1); + BigDecimal roundedTotalHours = BigDecimal.valueOf(box) + .divide(baseBox, 10, RoundingMode.HALF_UP) + .multiply(baseHours) + .setScale(1, RoundingMode.HALF_UP); + obj2.put("time", roundedTotalHours + "h"); + } + } obj2.put("box", box); } //托盘库入库 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java index 32752e2c..ec726de2 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java @@ -90,7 +90,7 @@ public class PdaCommonController { @Log("获取升级地址") @SaIgnore public ResponseEntity apkUrl() { - Map of = MapOf.of("versionName", "1.0.1", "url", "http://192.168.18.218:8012/api/pda/download/app-release"); + Map of = MapOf.of("versionName", "1.0.1", "url", "http://172.18.1.54:8011/api/pda/download/app-release"); return new ResponseEntity<>(of, HttpStatus.OK); } @RequestMapping("/download/app-release") diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java index 80fbf218..c3ac4a4b 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TaskScheduleService.java @@ -5,12 +5,10 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; import org.nl.common.TableDataInfo; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.BaseCode; @@ -18,7 +16,6 @@ import org.nl.common.utils.IdUtil; import org.nl.common.utils.ListOf; import org.nl.config.lucene.LuceneAppender; import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; -import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorAgvTransferTask; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; @@ -29,6 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; @@ -74,10 +72,24 @@ public class TaskScheduleService { boolean islock = lock.tryLock(); try { if (islock) { - //定时任务,查询所有自动下发acs的任务与CTU出库完成的任务 - List taskList = iSchBaseTaskService.list(new LambdaQueryWrapper() .in(SchBaseTask::getStatus, ListOf.of("10", "15", "20"))); - List createTaskList = taskList.stream().filter(r -> r.getStatus().equals(StatusEnum.FORM_STATUS.code("生成"))).collect(Collectors.toList()); - //生成的任务处理 + //定时任务,查询所有自动下发acs的任务与CTU出库完成的任务wwf + List taskList = iSchBaseTaskService.list(new LambdaQueryWrapper().in(SchBaseTask::getStatus, ListOf.of("10", "15", "20"))); + if (ObjectUtil.isEmpty(taskList)) { + return; + } + taskList = taskList.stream() + .collect(Collectors.groupingBy(SchBaseTask::getVehicle_code)) + .entrySet() + .stream() + .filter(r -> r.getValue().size() == 1) + .flatMap(r -> r.getValue().stream()) + .collect(Collectors.toList()); + List createTaskList = taskList.stream() + .filter(r -> r.getStatus().equals(StatusEnum.FORM_STATUS.code("生成"))) + .sorted(Comparator.comparing(SchBaseTask::getCreate_time)) + .limit(15) + .collect(Collectors.toList()); + //生成的任务处理 if (ObjectUtil.isNotEmpty(createTaskList)) { // 优先发送移库任务 List immediatelyTaskList = createTaskList.stream() @@ -89,7 +101,7 @@ public class TaskScheduleService { List taskCodes = immediatelyTaskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList()); log.info("---立即下发任务: " + taskCodes); TableDataInfo response = wmsToAcsService.interationToExt(immediatelyTaskList, "createTask"); - handleTaskResponse(response, taskCodes); // 提取为独立方法以复用 + handleTaskResponse(response, taskCodes); } if (ObjectUtil.isNotEmpty(delayTaskList)) { //1311 出库拣选 (1311目标拣选任务不超过4个) @@ -115,38 +127,40 @@ public class TaskScheduleService { delayTaskList.removeAll(waitTaskList); } //相同载具号,任务类型的任务不下发 - Map> grouped = delayTaskList.stream() - .collect(Collectors.groupingBy(task -> task.getVehicle_code() + "_" + task.getTask_type())); - List toRemove = new ArrayList<>(); - grouped.forEach((k, t) -> { - if (t.size() > 1) { - toRemove.addAll(t.subList(1, t.size())); - } - }); - if (toRemove.size() > 0) { - List taskIds = toRemove.stream().map(SchBaseTask::getId).collect(Collectors.toList()); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(SchBaseTask::getId, taskIds); - updateWrapper.set(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("完成")); - updateWrapper.set(SchBaseTask::getIs_delete, "1"); - updateWrapper.set(SchBaseTask::getRemark, "前置校验,载具号与任务类型相同,校验完成"); - iSchBaseTaskService.update(updateWrapper); - delayTaskList.removeAll(toRemove); + // Map> grouped = delayTaskList.stream() + // .collect(Collectors.groupingBy(task -> task.getVehicle_code() + "_" + task.getTask_type())); + // List toRemove = new ArrayList<>(); + // grouped.forEach((k, t) -> { + // if (t.size() > 1) { + // toRemove.addAll(t.subList(1, t.size())); + // } + // }); + // if (toRemove.size() > 0) { + // List taskIds = toRemove.stream().map(SchBaseTask::getId).collect(Collectors.toList()); + // LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + // updateWrapper.in(SchBaseTask::getId, taskIds); + // updateWrapper.set(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("完成")); + // updateWrapper.set(SchBaseTask::getIs_delete, "1"); + // updateWrapper.set(SchBaseTask::getRemark, "前置校验,载具号与任务类型相同,校验完成"); + // iSchBaseTaskService.update(updateWrapper); + // delayTaskList.removeAll(toRemove); + // } + if (ObjectUtil.isNotEmpty(delayTaskList)) { + DELAY_EXECUTOR.execute(() -> { + try { + Thread.sleep(2000); + List taskCodes = delayTaskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList()); + log.info("---延迟下发任务: " + taskCodes); + TableDataInfo response = wmsToAcsService.interationToExt(delayTaskList, "createTask"); + handleTaskResponse(response, taskCodes); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("延迟任务被中断", e); + } catch (Exception e) { + log.error("延迟下发任务执行失败", e); + } + }); } - DELAY_EXECUTOR.execute(() -> { - try { - Thread.sleep(2000); - List taskCodes = delayTaskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList()); - log.info("---延迟下发任务: " + taskCodes); - TableDataInfo response = wmsToAcsService.interationToExt(delayTaskList, "createTask"); - handleTaskResponse(response, taskCodes); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.error("延迟任务被中断", e); - } catch (Exception e) { - log.error("延迟下发任务执行失败", e); - } - }); } } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/WaitTaskScheduleService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/WaitTaskScheduleService.java index 3da484c7..f624dfb5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/WaitTaskScheduleService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/WaitTaskScheduleService.java @@ -33,7 +33,7 @@ import java.util.stream.Collectors; @Slf4j public class WaitTaskScheduleService { - private ReentrantLock lock = new ReentrantLock(); + private final ReentrantLock lock = new ReentrantLock(); @Autowired private ISchBaseTaskService iSchBaseTaskService; @@ -64,6 +64,9 @@ public class WaitTaskScheduleService { .eq(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("生成")) ); List taskCodes = taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(taskCodes)) { + return; + } log.info("---执行夜间定时整出任务:-----waitTaskPublish-----" + taskCodes); TableDataInfo response = wmsToAcsService.interationToExt(taskList, "createTask"); if (!response.getCode().equals(String.valueOf(HttpStatus.HTTP_OK))) { diff --git a/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev.yml b/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev.yml index 5f322134..0ac87c3f 100644 --- a/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 8099 + port: 8018 max-http-header-size: 65536 #配置数据源 spring: diff --git a/wms_pro/hd/nladmin-system/src/main/resources/config/application.yml b/wms_pro/hd/nladmin-system/src/main/resources/config/application.yml index 387883f0..9f794151 100644 --- a/wms_pro/hd/nladmin-system/src/main/resources/config/application.yml +++ b/wms_pro/hd/nladmin-system/src/main/resources/config/application.yml @@ -6,7 +6,7 @@ spring: freemarker: check-template-location: false profiles: - active: prod + active: dev jackson: time-zone: GMT+8 data: diff --git a/wms_pro/qd/src/views/system/timing/index.vue b/wms_pro/qd/src/views/system/timing/index.vue index b5e207bc..0661a11a 100644 --- a/wms_pro/qd/src/views/system/timing/index.vue +++ b/wms_pro/qd/src/views/system/timing/index.vue @@ -26,6 +26,15 @@ @click="doLog" >日志 + 人工清除CTU库库存 + @@ -196,6 +205,9 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' import Crontab from './components/crontab' +import { delCtuIvt } from '@/views/wms/dispatch_manage/task/schBaseTask' +import * as crudSchBaseTask from '@/views/wms/dispatch_manage/task/schBaseTask' +import crudUser from '@/views/system/user/user' const defaultForm = { job_id: null, @@ -282,6 +294,24 @@ export default { updateParams(id) { console.log(id) }, + delCtuIvt() { + this.$confirm(`此操作将清空CTU库所有库存,清除后数据无法恢复,请谨慎操作,请确认后再操作!`, '警告', { + confirmButtonText: '人工清除', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.$confirm(`二次提醒:此操作将清空CTU库所有库存,清除后数据无法恢复,请谨慎操作,请确认后再操作!`, '警告', { + confirmButtonText: '我要清除', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + crudSchBaseTask.delCtuIvt().then(res => { + this.crud.toQuery() + this.crud.notify('CTU库所有库存已清空', CRUD.NOTIFICATION_TYPE.SUCCESS) + }) + }) + }) + }, delMethod(id) { this.delLoading = true crudJob.del([id]).then(() => { diff --git a/wms_pro/qd/src/views/wms/base_manage/struct/index.vue b/wms_pro/qd/src/views/wms/base_manage/struct/index.vue index 82a2f2e5..a87ba01e 100644 --- a/wms_pro/qd/src/views/wms/base_manage/struct/index.vue +++ b/wms_pro/qd/src/views/wms/base_manage/struct/index.vue @@ -99,12 +99,12 @@ - + - + @@ -125,7 +125,7 @@ - + @@ -154,11 +154,11 @@ - - - - - + + + + + @@ -174,15 +174,15 @@ - - - - - - - - - + + + + + + + + + @@ -253,7 +253,7 @@ { - // this.crud.toQuery() - // this.updateLogFromResult() - // }, 3000) + this.intervalId = setInterval(() => { + this.crud.toQuery() + this.updateLogFromResult() + }, 3000) }, beforeDestroy() { if (this.intervalId) { diff --git a/wms_pro/qd/src/views/wms/dispatch_manage/task/schBaseTask.js b/wms_pro/qd/src/views/wms/dispatch_manage/task/schBaseTask.js index a9cc4957..b2d4ef04 100644 --- a/wms_pro/qd/src/views/wms/dispatch_manage/task/schBaseTask.js +++ b/wms_pro/qd/src/views/wms/dispatch_manage/task/schBaseTask.js @@ -46,5 +46,12 @@ export function scheduler(data) { data }) } +export function delCtuIvt(data) { + return request({ + url: 'api/schBaseTask/delCtuIvt', + method: 'post', + data + }) +} -export default { add, edit, del, getTaskStatusList, operation, scheduler } +export default { add, edit, del, getTaskStatusList, operation, scheduler, delCtuIvt }