diff --git a/lms/nladmin-system/README.md b/lms/nladmin-system/README.md index ba4e314..0bf3f83 100644 --- a/lms/nladmin-system/README.md +++ b/lms/nladmin-system/README.md @@ -12,4 +12,6 @@ ### String处理工具类 - 判断String中的空格并转换List -org.nl.common.utils.StringDealUtils#splitString(String xxx) +org.nl.common.utils.StringDealUtils#splitString(String input) +- Stream的map操作 + org.nl.common.utils.CollectionUtils#mapList(Collection from, Function func) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java index ac3e1fd..aaec318 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java @@ -3,6 +3,7 @@ package org.nl.b_lms.bst.ivt.cutpointivt.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtQuery; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.common.domain.query.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; @@ -65,13 +66,12 @@ public interface IBstIvtCutpointivtService extends IService { List getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort); /** - * 获取同尺寸的气涨轴 - * @param type 点位类型:1套轴对接位,2分切缓存位,3分切对接位,4套轴异常位 - * @param size 气涨轴尺寸 - * @param generation 代数(4:小,5:大) + * 获取空的子卷下线满轴位点 + * @param point_status 点位类型:1套轴对接位,2分切缓存位,3分切对接位,4套轴异常位 + * @param ivt_status 气涨轴尺寸 * @return / */ - List getPointByTypeAndShaftSize(String type, String size, String generation); + List getPointByStatus(String point_status, String ivt_status); /** * 根据桁架对应的点位编码获取点位实体 @@ -94,7 +94,8 @@ public interface IBstIvtCutpointivtService extends IService { * @return */ List getAreaNotTaskPointByLocationAreaAndStatus(String location); - List getAreaNotTaskPointByTcQzzPoint(String location); + + List getAreaNotTaskPointByTcQzzPoint(String product_area); /** * 获取一半的点位 @@ -135,7 +136,7 @@ public interface IBstIvtCutpointivtService extends IService { */ List getPintByAgvCodesByPointTypeAndArea(String area, List types); - List getNBJCanUsePoint(String type, String pointStatus, String area, String sort); + List getNBJCanUsePoint(String type, String pointStatus, String product_area, String sort); List getNBJAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java index 0a1e427..952febb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java @@ -3,6 +3,7 @@ package org.nl.b_lms.bst.ivt.cutpointivt.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import java.util.List; @@ -15,11 +16,11 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort); - List getPointByTypeAndShaftSize(String type, String size, String generation); + List getPointByStatus(String point_status, String ivt_status); List getAreaNotTaskPointByLocationAreaAndStatus(String location); - List getAreaNotTaskPointByTcQzzPoint(String location); + List getAreaNotTaskPointByTcQzzPoint(String product_area); List getAllHalfPlacePoints(String type, String pointStatus, String location); @@ -29,7 +30,7 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort); - List getNBJCanUsePoint(String type, String pointStatus, String area, String sort); + List getNBJCanUsePoint(String type, String pointStatus, String product_area, String sort); List getNBJAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml index e60d26a..058ab38 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml @@ -26,26 +26,19 @@ - SELECT bc.* - FROM `bst_ivt_cutpointivt` bc - LEFT JOIN pdm_bi_slittingproductionplan pp ON pp.qzzno = bc.qzz_no1 - OR pp.qzzno = bc.qzz_no2 - WHERE bc.point_type = #{type} - AND IFNULL(pp.qzzno,'') ]]> '' - AND pp.qzz_size = #{size} - - AND pp.qzz_generation = #{generation} - + FROM `bst_ivt_packageinfoivt` bc + WHERE bc.point_status = #{point_status} + AND bc.ivt_status = #{ivt_status} AND bc.is_used = '1' - AND bc.point_status = '3' - AND IFNULL(pp.workorder_id,'') ]]> '' AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.is_delete = '0' - AND (t.point_code1 = bc.truss_point_code1 OR t.point_code1 = bc.truss_point_code2)) + AND (t.point_code1 = bc.point_code OR t.point_code2 = bc.point_code OR t.point_code3 = bc.point_code OR t.point_code4 = bc.point_code)) + order by bc.sort_seq diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/CutpointAirShhaftDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/CutpointAirShhaftDto.java index 316bf15..724b7bb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/CutpointAirShhaftDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/CutpointAirShhaftDto.java @@ -31,4 +31,6 @@ public class CutpointAirShhaftDto implements Serializable { private String qzz_size; + private String product_area; + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java index 5908cdf..c5b77a2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java @@ -14,6 +14,7 @@ import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.mapper.BstIvtCutpointivtMapper; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtQuery; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.common.domain.query.PageQuery; @@ -102,8 +103,8 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getPointByTypeAndShaftSize(String type, String size, String generation) { - return bstIvtCutpointivtMapper.getPointByTypeAndShaftSize(type, size, generation); + public List getPointByStatus(String point_status, String ivt_status) { + return bstIvtCutpointivtMapper.getPointByStatus(point_status, ivt_status); } @Override @@ -128,8 +129,8 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getAreaNotTaskPointByTcQzzPoint(String location) { - return bstIvtCutpointivtMapper.getAreaNotTaskPointByTcQzzPoint(location); + public List getAreaNotTaskPointByTcQzzPoint(String product_area) { + return bstIvtCutpointivtMapper.getAreaNotTaskPointByTcQzzPoint(product_area); } @Override @@ -161,8 +162,8 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getNBJCanUsePoint(String type, String pointStatus, String area, String sort) { - return bstIvtCutpointivtMapper.getNBJCanUsePoint(type, pointStatus, area, sort); + public List getNBJCanUsePoint(String type, String pointStatus, String product_area, String sort) { + return bstIvtCutpointivtMapper.getNBJCanUsePoint(type, pointStatus, product_area, sort); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java index cefbcd9..2ef0f39 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java @@ -61,4 +61,10 @@ public interface IMdPbPapervehicleService extends IService { * @return */ List getAllTubesByPoint(String location); + + /** + * 获取任务中的管芯信息 + * @return + */ + List getInfoByTask(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.java index 695d7ec..a563cfe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.java @@ -21,4 +21,6 @@ public interface MdPbPapervehicleMapper extends BaseMapper { Integer checkHaveTaskByPoints(List pointCodes); List getAllTubesByPoint(String location); + + List getInfoByTask(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.xml index 99a8c59..7f0c83a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/dao/mapper/MdPbPapervehicleMapper.xml @@ -70,4 +70,14 @@ AND bs.is_used = '1' AND p.qty > 0 + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java index f4a2696..9567ff9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java @@ -108,5 +108,8 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl getAllTubesByPoint(String location) { return mdPbPapervehicleMapper.getAllTubesByPoint(location); } - + @Override + public List getInfoByTask() { + return mdPbPapervehicleMapper.getInfoByTask(); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java index f561ca7..2b59741 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java @@ -47,11 +47,11 @@ public interface IBstIvtShafttubeivtService extends IService /** * 获取启用的 类型 区域 有无轴的点位 (无任务) * @param type 1,2,3,4,5,6 - * @param location 0 1 + * @param product_area 0 1 * @param have 0 1 * @return / */ - List getAllShaftPointsByConditions(String type, String location, String have); + List getAllShaftPointsByConditions(String type, String product_area, String have); /** * 根据点位编码获取启用的点位 @@ -73,10 +73,10 @@ public interface IBstIvtShafttubeivtService extends IService * 获得气胀轴库对应的气涨轴位置 * @param qzzSize 气涨轴尺寸 * @param pointCode 对应的穿拔轴机 - * @param location 位置:上半部分还是下半部分 + * @param product_area 位置:上半部分还是下半部分 * @return */ - List getByQzzSize(String qzzSize ,String pointCode, String location); + List getByQzzSize(String qzzSize ,String pointCode, String product_area); /** * 获取没任务的气涨轴缓存位 @@ -90,10 +90,10 @@ public interface IBstIvtShafttubeivtService extends IService * 获取没任务的气涨轴缓存位2 * @param qzzSize * @param specification - * @param location + * @param product_area * @return */ - List getNotTaskShaftCache2(String qzzSize, String specification, String location); + List getNotTaskShaftCache2(String qzzSize, String specification, String product_area); /** * 获取没任务的空的位置 @@ -107,7 +107,7 @@ public interface IBstIvtShafttubeivtService extends IService * @param specification * @return */ - List getNotTaskShaftCacheEmpty2(String qzzSize, String specification); + List getNotTaskShaftCacheEmpty2(String qzzSize, String specification, String product_area); /** * 获取没任务的气涨轴缓存位 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/BstIvtShafttubeivt.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/BstIvtShafttubeivt.java index cf8c8f3..3f7aab1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/BstIvtShafttubeivt.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/BstIvtShafttubeivt.java @@ -61,6 +61,10 @@ public class BstIvtShafttubeivt implements Serializable { /** 位置 */ private String point_location; + /** + * 生产区域 + */ + private String product_area; /** 是否有轴 */ private String have_qzz; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java index 59a9ce1..10fd4f2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java @@ -12,9 +12,9 @@ import java.util.List; **/ public interface BstIvtShafttubeivtMapper extends BaseMapper { - List getAllShaftPointsByConditions(String type, String location, String have); + List getAllShaftPointsByConditions(String type, String product_area, String have); - List getByQzzSize(String qzzSize ,String pointCode, String location); + List getByQzzSize(String qzzSize ,String pointCode, String product_area); /** * 获取含有气胀轴的气胀轴暂存位 @@ -41,7 +41,7 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper * @return / */ List getNotTaskShaftCacheEmpty2(@Param("qzzSize") String qzzSize, - @Param("specification") String specification); + @Param("specification") String specification,@Param("product_area") String product_area); /** * 获取含有气胀轴的气胀轴暂存位 @@ -62,10 +62,10 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper * 获取含有气胀轴的气胀轴暂存位 * @param qzzSize 气胀轴尺寸 * @param specification 标箔/锂电 - * @param location 位置(上下) + * @param product_area 位置(上下) * @return / */ List getNotTaskShaftCache2(@Param("qzzSize") String qzzSize, @Param("specification") String specification, - @Param("location") String location); + @Param("product_area") String product_area); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml index 311f18f..b161fe6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml @@ -9,8 +9,8 @@ FROM `bst_ivt_shafttubeivt` bst WHERE bst.point_type = #{type} - - AND bst.point_location = #{location} + + AND bst.product_area = #{product_area} AND bst.have_qzz = #{have} AND bst.is_used = '1' AND 0 = ( @@ -23,7 +23,7 @@ WHERE bsf.is_used = '1' AND bsf.qzz_size = #{qzzSize} AND bsf.point_type = '1' - AND bsf.point_location = #{location} + AND bsf.product_area = #{product_area} AND bsf.parent_code = #{pointCode} @@ -119,12 +121,8 @@ AND b.point_type = '6' AND b.qzz_size = #{qzzSize} AND b.qzz_generation = #{specification} - - AND b.point_location = #{location} - - AND b.point_location = #{location} + AND b.product_area = #{product_area} AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code1 = b.point_code) - AND (b.plan ]]> '1' OR b.plan IS NULL) ORDER BY b.sort_seq DESC diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java index 50a25eb..7b3a78a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java @@ -91,8 +91,8 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getAllShaftPointsByConditions(String type, String location, String have) { - return bstIvtShafttubeivtMapper.getAllShaftPointsByConditions(type, location, have); + public List getAllShaftPointsByConditions(String type, String product_area, String have) { + return bstIvtShafttubeivtMapper.getAllShaftPointsByConditions(type, product_area, have); } @Override @@ -118,8 +118,8 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getByQzzSize(String qzzSize ,String pointCode, String location) { - return bstIvtShafttubeivtMapper.getByQzzSize(qzzSize,pointCode, location); + public List getByQzzSize(String qzzSize ,String pointCode, String product_area) { + return bstIvtShafttubeivtMapper.getByQzzSize(qzzSize,pointCode, product_area); } @Override @@ -128,8 +128,8 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getNotTaskShaftCache2(String qzzSize, String specification, String location) { - return bstIvtShafttubeivtMapper.getNotTaskShaftCache2(qzzSize, specification, location); + public List getNotTaskShaftCache2(String qzzSize, String specification, String product_area) { + return bstIvtShafttubeivtMapper.getNotTaskShaftCache2(qzzSize, specification, product_area); } @Override @@ -138,8 +138,8 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getNotTaskShaftCacheEmpty2(String qzzSize, String specification) { - return bstIvtShafttubeivtMapper.getNotTaskShaftCacheEmpty2(qzzSize, specification); + public List getNotTaskShaftCacheEmpty2(String qzzSize, String specification, String product_area) { + return bstIvtShafttubeivtMapper.getNotTaskShaftCacheEmpty2(qzzSize, specification, product_area); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/controller/BstIvtStockingivtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/controller/BstIvtStockingivtController.java index 871243f..d981b62 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/controller/BstIvtStockingivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/controller/BstIvtStockingivtController.java @@ -56,12 +56,6 @@ public class BstIvtStockingivtController { return new ResponseEntity<>(HttpStatus.OK); } - @Log("操作管芯托盘库存") - @PostMapping("operateIvt") - public ResponseEntity operateIvt(@RequestBody JSONObject param) { - return new ResponseEntity<>(bstIvtStockingivtService.operateIvt(param), HttpStatus.OK); - } - @Log("查询管芯托盘库存明细") @PostMapping("/showDetail") public ResponseEntity showDetail(@RequestBody JSONObject param) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java index f0a3d33..9df3491 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java @@ -81,8 +81,6 @@ public interface IBstIvtStockingivtService extends IService { */ BstIvtStockingivt getCanMovePointOne(String location, String pointType); - JSONObject operateIvt(JSONObject jsonObject) ; - /** * 分组聚合获取需要管芯的托盘位置 * @param pointType @@ -105,4 +103,6 @@ public interface IBstIvtStockingivtService extends IService { List showDetail2(Map param); PdmBiOrderbominfo showBom2(Map param); + + List getMoveTaskPoints(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java index fc9eff5..4160d4f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java @@ -44,4 +44,6 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getCanMovePointList(String location, String pointType); List showPapervehicleView(String product_area, String material_code); + + List getMoveTaskPoints(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml index 7eafc49..5a79aca 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml @@ -117,4 +117,15 @@ p.vehicle_code, p.material_code + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java index 638dc99..f87e97c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java @@ -20,17 +20,11 @@ import org.nl.b_lms.pdm.info.service.IPdmBiOrderbominfoService; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; -import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; -import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; -import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -51,10 +45,6 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl lines = new ArrayList<>(); -// lines.add("纸制简管|纸管|6英寸|1300"); -// lines.add("纸制简管|纸管|3英寸|12|650"); -// lines.add("玻璃纤维及其制品|FRP管|6英寸|15-20|1700|阶梯"); -// lines.add("玻璃纤维及其制品|FRP管|6英寸|15|1700|高强"); -// // 定义正则表达式,去除最后的中文部分 -// String regex = "\\|[\\u4e00-\\u9fa5]+$"; -// -// // 处理每一行数据 -// List cleanedLines = new ArrayList<>(); -// for (String line : lines) { -// cleanedLines.add(line.replaceAll(regex, "")); -// } -// -// // 打印结果 -// for (String cleanedLine : cleanedLines) { -// System.out.println(cleanedLine); -// } - String material_name = "玻璃纤维及其制品|FRP管|6英寸|15-20|1100|阶梯"; - String[] tubeArray = material_name.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); - System.out.println(tubeArray); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public JSONObject operateIvt(JSONObject jsonObject) { - log.info("手持操作管芯托盘 - {}", jsonObject); - //载具托盘号 - String vehicle_code = jsonObject.getString("vehicle_code"); - //排 - String row_num = jsonObject.getString("row_num"); - //列 - String col_num = jsonObject.getString("col_num"); - //物料 - String material_code = jsonObject.getString("material_code"); - //管芯/纸管编码 - String paper_code = jsonObject.getString("paper_code"); - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - if (ObjectUtil.isEmpty(row_num)) { - throw new BadRequestException("排数不能为空!"); - } - if (ObjectUtil.isEmpty(col_num)) { - throw new BadRequestException("列数不能为空!"); - } - if (ObjectUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("托盘信息不能为空!"); - } - if(!vehicle_code.contains("GX")){ - throw new BadRequestException("请扫描或输入正确的托盘码!"); - } - //1-绑定;2-清除 - String type = jsonObject.getString("type"); - if (type.equals("1")) { - if (ObjectUtil.isEmpty(material_code)) { - throw new BadRequestException("物料编码不能为空!"); - } - if (ObjectUtil.isEmpty(paper_code)) { - throw new BadRequestException("管芯/纸管编码不能为空!"); - } - MaterialbaseDto mater = materialbaseService.findByCode(material_code); - String material_name = mater.getMaterial_name(); - //查询当前载具和排列是否存在库存 - MdPbPapervehicle papervehicle = papervehicleService.getOne(new LambdaQueryWrapper() - .eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, row_num) - .eq(MdPbPapervehicle::getCol_num, col_num)); - if (ObjectUtil.isNotEmpty(papervehicle) && !papervehicle.getMaterial_code().equals(material_code)) { - throw new BadRequestException("当前排-列已有物料为【" + papervehicle.getMaterial_code() + "】,如需要修改请先清除库存,再进行绑定!"); - } - //查询当前管芯编码是否在托盘中 - MdPbPapervehicle papervehicle_flag = papervehicleService.getOne(new LambdaQueryWrapper() - .eq(MdPbPapervehicle::getPaper_code, paper_code)); - if (ObjectUtil.isNotEmpty(papervehicle_flag)) { - throw new BadRequestException("当前管芯编码已存在托盘上:" + papervehicle_flag.getVehicle_code() + "所在位置排列:"+papervehicle_flag.getRow_num()+"-"+papervehicle_flag.getCol_num()); - } - //获取当前纸管的高度 - // 解析描述数组 - String[] tubeArray = material_name.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); - - int currLength = Integer.parseInt(tubeArray[tubeArray.length - 1]); - - //校验高度差要大于50MM,否则不允许进行绑定 - int num = Integer.parseInt(row_num); - if (num == 1) { - //只判断第二排的纸管长度 - int nextNum = num + 1; - MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, nextNum)); - if (ObjectUtil.isNotEmpty(nextPaper)) { - //获取第二排的纸管高度和纸管类型 - String nextMaterialName = nextPaper.getMaterial_name(); - String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); - int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); - if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { - throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); - } - } - } else { - //判断后一排的纸管高度 - int nextNum = num + 1; - MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, nextNum)); - if (ObjectUtil.isNotEmpty(nextPaper)) { - //获取后一排的纸管高度和纸管类型 - String nextMaterialName = nextPaper.getMaterial_name(); - String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); - int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); - if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { - throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); - } - } - //判断前一排的纸管高度 - int preNum = num - 1; - MdPbPapervehicle prePaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, preNum)); - if (ObjectUtil.isNotEmpty(prePaper)) { - //获取后一排的纸管高度和纸管类型 - String preMaterialName = prePaper.getMaterial_name(); - String[] preArray = preMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); - int preLength = Integer.parseInt(preArray[preArray.length - 1]); - if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.getMaterial_code())) { - throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); - } - } - } - if (ObjectUtil.isNotEmpty(papervehicle)) { - papervehicle.setQty(1); - papervehicle.setUpdate_optid(currentUserId); - papervehicle.setUpdate_optname(nickName); - papervehicle.setUpdate_time(now); - papervehicleService.updateById(papervehicle); - } else { - papervehicle = new MdPbPapervehicle(); - papervehicle.setIvt_id(IdUtil.getSnowflake(1, 1).nextIdStr()); - papervehicle.setVehicle_code(vehicle_code); - papervehicle.setRow_num(row_num); - papervehicle.setMaterial_code(material_code); - papervehicle.setMaterial_name(material_name); - papervehicle.setQty(1); - papervehicle.setUpdate_optid(currentUserId); - papervehicle.setUpdate_optname(nickName); - papervehicle.setUpdate_time(now); - papervehicleService.save(papervehicle); - } - }else if (type.equals("2")) { - //清除管芯托盘库存 - papervehicleService.remove(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, row_num) - .eq(MdPbPapervehicle::getCol_num, col_num)); - } - - //判断绑定的纸管是否在机械手范围内,如果存在的话把最新库存推送给电气 - BstIvtStockingivt bstIvtStockingivt = bstIvtStockingivtMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtStockingivt::getVehicle_code, vehicle_code)); - if (bstIvtStockingivt != null && bstIvtStockingivt.getPoint_type().equals("1")) { - List list = papervehicleService.list(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code)); - JSONObject jo = new JSONObject(); - SlitterTaskUtil.doSavePaperInfos(list, jo); - jo.put("product_area", bstIvtStockingivt.getProduct_area()); - jo.put("device_code", bstIvtStockingivt.getPoint_code()); - wmsToAcsService.getTubeMsg(jo); - } - - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.OK.value()); - result.put("message", "操作成功!"); - return result; - } - @Override public List getNeedPaperTubePoint(String pointType, String tube, String location) { return bstIvtStockingivtMapper.getNeedPaperTubePoint(pointType, tube, location); @@ -379,4 +197,9 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl getMoveTaskPoints() { + return bstIvtStockingivtMapper.getMoveTaskPoints(); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java index e6601d2..3ebb3f9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java @@ -43,6 +43,12 @@ public class SlitterPdaController { public ResponseEntity downRolls2(@RequestBody JSONObject param) { return new ResponseEntity<>(slitterService.downRolls2(param), HttpStatus.OK); } + @PostMapping("/downShafts") + @Log("下轴") + @SaIgnore + public ResponseEntity downShafts(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.downShafts(param), HttpStatus.OK); + } @PostMapping("/downRollsCheck") @Log("下卷2提示确认") @SaIgnore diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java index 87a555f..9d86fcc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java @@ -71,10 +71,10 @@ public class StockingIvtController { } @Log("操作管芯托盘库存") - @PostMapping("operateIvt") + @PostMapping("/operateIvt") @SaIgnore public ResponseEntity operateIvt(@RequestBody JSONObject param) { - return new ResponseEntity<>(bstIvtStockingivtService.operateIvt(param), HttpStatus.OK); + return new ResponseEntity<>(stockingIvtService.operateIvt(param), HttpStatus.OK); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java index 0dabf07..ccf3802 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/VehicleTwoController.java @@ -73,6 +73,15 @@ public class VehicleTwoController { return new ResponseEntity<>(bstIvtPackageInfoIvtService.update(whereJson), HttpStatus.OK); } + + @PostMapping("/updatePackageInfo2") + @Log("一楼待检区-管制点管理") + @SaIgnore + public ResponseEntity updatePackageInfo2(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(bstIvtPackageInfoIvtService.update2(whereJson), HttpStatus.OK); + } + + @PostMapping("/toEndSub") @Log("二期子卷包装解绑") @SaIgnore diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java index c771a4a..4362451 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java @@ -3,11 +3,14 @@ package org.nl.b_lms.pda.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.paper.service.dao.MdPbPaper; +import org.nl.b_lms.bst.ivt.paper.service.dao.mapper.MdPbPaperMapper; import org.nl.b_lms.bst.ivt.papervehicle.service.IMdPbPapervehicleService; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; @@ -19,19 +22,18 @@ import org.nl.b_lms.sch.tasks.slitter.InstorStockAgvTask; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; -import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; -import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.List; /** @@ -42,20 +44,20 @@ import java.util.List; @Slf4j @Service public class StockingIvtServiceImpl implements StockingIvtService { - @Autowired + @Resource private BstIvtStockingivtMapper bstIvtStockingivtMapper; @Autowired private IBstIvtStockingivtService stockingivtService; @Autowired private InstorStockAgvTask instorStockAgvTask; - @Autowired + @Resource private SysDictMapper sysDictMapper; @Autowired private WmsToAcsService wmsToAcsService; @Autowired private IMdPbPapervehicleService papervehicleService; - @Autowired - private MaterialbaseService materialbaseService; + @Resource + private MdPbPaperMapper mdPbPaperMapper; @Override public JSONObject doStockAreaBinding(JSONObject param) { @@ -125,7 +127,7 @@ public class StockingIvtServiceImpl implements StockingIvtService { log.info("手持入管芯库的数据:{}", jo); String pointCode = jo.getString("point_code"); String vehicleCode = jo.getString("vehicle_code"); - //入库,operate_type=1 + //托盘入库operate_type=1;托盘出库operate_type=0 String operate_type = jo.getString("operate_type"); BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true); @@ -138,37 +140,76 @@ public class StockingIvtServiceImpl implements StockingIvtService { if (!vehicleCode.contains("GX")) { throw new BadRequestException("请扫描或输入正确的托盘码!"); } - //点位类型必须为入库点,point_type = 0 - String point_type = pointByCode.getPoint_type(); - if (!point_type.equals("0")) { - throw new BadRequestException("请扫描管芯库入库点!"); + //管芯入库 + if(operate_type.equals("1")){ + //点位类型必须为入库点,point_type = 0 + String point_type = pointByCode.getPoint_type(); + if (!point_type.equals("0")) { + throw new BadRequestException("请扫描一楼管芯库入库限位点!"); + } + //校验所扫点位上托盘是否和扫码托盘一致 + if (!vehicleCode.equals(pointByCode.getVehicle_code())) { + throw new BadRequestException("点位:"+pointCode+"已存在托盘"+pointByCode.getVehicle_code()+",与扫码托盘不一致!"); + } + //判断是否已经下发了任务 + JSONObject task1 = isSingleTask(pointCode); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); + } + //生成管芯入库agv任务,两个点 + List list = stockingivtService.getEmptyPointNotTask("1"); + if (list.size() == 0) { + throw new BadRequestException("管芯库无空闲点位!"); + } + BstIvtStockingivt endPoint = list.get(0); + JSONObject param = new JSONObject(); + param.put("point_code1", pointByCode.getPoint_code()); + param.put("point_code2", endPoint.getPoint_code()); + param.put("vehicle_code", vehicleCode); + param.put("operate_type", operate_type); + param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘入管芯库任务")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + instorStockAgvTask.createTask(param); + }else if(operate_type.equals("0")){ + //空盘回收 + //点位类型必须为入库点,point_type = 0 + String point_type = pointByCode.getPoint_type(); + if (!point_type.equals("3")) { + throw new BadRequestException("请扫描二楼备货区点位!"); + } + //校验所扫点位上托盘是否和扫码托盘一致 + if (!vehicleCode.equals(pointByCode.getVehicle_code())) { + throw new BadRequestException("点位:"+pointCode+"已存在托盘"+pointByCode.getVehicle_code()+",与扫码托盘不一致!"); + } + //判断是否已经下发了任务 + JSONObject task1 = isSingleTask(pointCode); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); + } + //生成空盘回收任务,两个点 + List list = stockingivtService.getEmptyPointNotTask("0"); + //优先分配一楼入库限位点,若没有再查询一楼管芯库点 + if (list.size() == 0) { + list = stockingivtService.getEmptyPointNotTask("1"); + if(list.size() == 0){ + throw new BadRequestException("管芯库暂无空闲点位回收空托盘!"); + } + } + BstIvtStockingivt endPoint = list.get(0); + JSONObject param = new JSONObject(); + param.put("point_code1", pointByCode.getPoint_code()); + param.put("point_code2", endPoint.getPoint_code()); + param.put("vehicle_code", vehicleCode); + param.put("operate_type", operate_type); + param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘回收任务")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + instorStockAgvTask.createTask(param); } - //校验所扫点位上托盘是否和扫码托盘一致 - if (!vehicleCode.equals(pointByCode.getVehicle_code())) { - throw new BadRequestException("点位:"+pointCode+"已存在托盘"+pointByCode.getVehicle_code()+",与扫码托盘不一致!"); - } - //判断是否已经下发了任务 - JSONObject task1 = isSingleTask(pointCode); - if ( ObjectUtil.isNotEmpty(task1)) { - throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); - } - //生成管芯入库agv任务,两个点 - List list = stockingivtService.getEmptyPointNotTask("1"); - if (list.size() == 0) { - throw new BadRequestException("管芯库无空闲点位!"); - } - BstIvtStockingivt endPoint = list.get(0); - JSONObject param = new JSONObject(); - param.put("point_code1", pointByCode.getPoint_code()); - param.put("point_code2", endPoint.getPoint_code()); - param.put("vehicle_code", vehicleCode); - param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘入管芯库任务")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - instorStockAgvTask.createTask(param); + JSONObject res = new JSONObject(); res.put("status", HttpStatus.HTTP_OK); - res.put("message", "入管芯库任务生成成功!"); + res.put("message", "操作成功!"); return res; } @@ -189,6 +230,9 @@ public class StockingIvtServiceImpl implements StockingIvtService { public JSONObject moveStock(JSONObject jo) { // param: point_code vehicle_code log.info("手持管芯备货的数据:{}", jo); + if (ObjectUtil.isEmpty(jo)) { + throw new BadRequestException("数据不能为空,请选择一条记录后再操作!"); + } String pointCode = jo.getString("point_code"); String vehicleCode = jo.getString("vehicle_code"); @@ -264,43 +308,62 @@ public class StockingIvtServiceImpl implements StockingIvtService { String row_num = jsonObject.getString("row_num"); //列 String col_num = jsonObject.getString("col_num"); - //物料 - String material_code = jsonObject.getString("material_code"); //管芯/纸管编码 String paper_code = jsonObject.getString("paper_code"); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); - + if (ObjectUtil.isEmpty(row_num)) { + throw new BadRequestException("排数不能为空!"); + } + if (ObjectUtil.isEmpty(col_num)) { + throw new BadRequestException("列数不能为空!"); + } + if (ObjectUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("托盘信息不能为空!"); + } + if(!vehicle_code.contains("GX")){ + throw new BadRequestException("请扫描或输入正确的托盘码!"); + } //1-绑定;2-清除 String type = jsonObject.getString("type"); if (type.equals("1")) { - if (ObjectUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("托盘信息不能为空!"); - } - if(!vehicle_code.contains("GX")){ - throw new BadRequestException("请扫描或输入正确的托盘码!"); - } - if (ObjectUtil.isEmpty(material_code)) { - throw new BadRequestException("物料不能为空!"); - } if (ObjectUtil.isEmpty(paper_code)) { throw new BadRequestException("管芯/纸管编码不能为空!"); } - MaterialbaseDto mater = materialbaseService.findByCode(material_code); - String material_name = mater.getMaterial_name(); - //查询当前载具和排是否存在库存 - MdPbPapervehicle papervehicle = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, row_num).eq(MdPbPapervehicle::getCol_num, col_num)); + //查询管芯记录 + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq( ObjectUtil.isNotEmpty(paper_code),MdPbPaper::getPaper_code,paper_code); + MdPbPaper paper = mdPbPaperMapper.selectOne(lam); + if(ObjectUtil.isEmpty(paper)){ + throw new BadRequestException("管芯/纸管记录不存在!"); + } + //物料 + String material_code = paper.getMaterial_code(); + String material_name = paper.getMaterial_name(); + //查询当前载具和排列是否存在库存 + MdPbPapervehicle papervehicle = papervehicleService.getOne(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, row_num) + .eq(MdPbPapervehicle::getCol_num, col_num)); if (ObjectUtil.isNotEmpty(papervehicle) && !papervehicle.getMaterial_code().equals(material_code)) { throw new BadRequestException("当前排-列已有物料为【" + papervehicle.getMaterial_code() + "】,如需要修改请先清除库存,再进行绑定!"); } + //查询当前物料是否和之前排同类型物料,不一致提示报错 + List papers = papervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, row_num)); + if(papers.size()>0){ + if(! StrUtil.equals(papers.get(0).getMaterial_code(), material_code)){ + throw new BadRequestException("当前排已有物料为【" + papers.get(0).getMaterial_code() + "】,不允许添加其他类型物料!"); + } + } //查询当前管芯编码是否在托盘中 MdPbPapervehicle papervehicle_flag = papervehicleService.getOne(new LambdaQueryWrapper() .eq(MdPbPapervehicle::getPaper_code, paper_code)); if (ObjectUtil.isNotEmpty(papervehicle_flag)) { - throw new BadRequestException("当前管芯编码已存在托盘上:" + papervehicle_flag.getVehicle_code() + "所在位置排列:"+papervehicle_flag.getRow_num()+"-"+papervehicle_flag.getCol_num()); + throw new BadRequestException("当前管芯编码已存在托盘上:" + papervehicle_flag.getVehicle_code() + ",位置排列:"+papervehicle_flag.getRow_num()+"-"+papervehicle_flag.getCol_num()); } //获取当前纸管的高度 // 解析描述数组 @@ -310,59 +373,41 @@ public class StockingIvtServiceImpl implements StockingIvtService { //校验高度差要大于50MM,否则不允许进行绑定 int num = Integer.parseInt(row_num); - if (num == 1) { - //只判断第二排的纸管长度 - int nextNum = num + 1; - MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) - .eq(MdPbPapervehicle::getRow_num, nextNum)); - if (ObjectUtil.isNotEmpty(nextPaper)) { - //获取第二排的纸管高度和纸管类型 - String nextMaterialName = nextPaper.getMaterial_name(); - String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); - int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); - if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { - throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); - } - } - } else { + if (num > 0) { //判断后一排的纸管高度 int nextNum = num + 1; - MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + List nextPaper = papervehicleService.list(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) .eq(MdPbPapervehicle::getRow_num, nextNum)); - if (ObjectUtil.isNotEmpty(nextPaper)) { + if (nextPaper.size()>0) { //获取后一排的纸管高度和纸管类型 - String nextMaterialName = nextPaper.getMaterial_name(); + String nextMaterialName = nextPaper.get(0).getMaterial_name(); String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); - if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { + if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.get(0).getMaterial_code())) { throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); } } //判断前一排的纸管高度 int preNum = num - 1; - MdPbPapervehicle prePaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + List prePaper = papervehicleService.list(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) .eq(MdPbPapervehicle::getRow_num, preNum)); if (ObjectUtil.isNotEmpty(prePaper)) { //获取后一排的纸管高度和纸管类型 - String preMaterialName = prePaper.getMaterial_name(); + String preMaterialName = prePaper.get(0).getMaterial_name(); String[] preArray = preMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); int preLength = Integer.parseInt(preArray[preArray.length - 1]); - if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.getMaterial_code())) { + if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.get(0).getMaterial_code())) { throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); } } } - if (ObjectUtil.isNotEmpty(papervehicle)) { - papervehicle.setQty(1); - papervehicle.setUpdate_optid(currentUserId); - papervehicle.setUpdate_optname(nickName); - papervehicle.setUpdate_time(now); - papervehicleService.updateById(papervehicle); - } else { + if (ObjectUtil.isEmpty(papervehicle)) { papervehicle = new MdPbPapervehicle(); papervehicle.setIvt_id(IdUtil.getSnowflake(1, 1).nextIdStr()); papervehicle.setVehicle_code(vehicle_code); papervehicle.setRow_num(row_num); + papervehicle.setCol_num(col_num); + papervehicle.setPaper_code(paper_code); papervehicle.setMaterial_code(material_code); papervehicle.setMaterial_name(material_name); papervehicle.setQty(1); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java index 7b5b50b..277daa1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java @@ -237,20 +237,7 @@ public class PdmBiSubpackagerelationController { } - @PostMapping("/ycgzd") - @Log("异常管制点释放") - @SaIgnore - public ResponseEntity ycgzd(@RequestBody JSONObject param) { - String pointCode = param.getString("point_code"); - if (StringUtils.isEmpty(pointCode)){ - throw new BadRequestException("人工管制点不能为空"); - } - // "ZXQ_135" : "ZXQ_136"; - JSONObject task = new JSONObject(); - task.put("point_code1", pointCode); - autoSendVehicleToDjq.getPointCode(task,PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); - return new ResponseEntity<>(HttpStatus.OK); - } + @PostMapping("/downloadData") @SaIgnore public void downloadData(Integer day, HttpServletResponse response) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java index bbcab97..cdab672 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java @@ -142,6 +142,12 @@ public interface IpdmBiSubpackagerelationService extends IService getSubPackageInfoBySubRolls(List pcsns); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index e050893..be6be93 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.db.PageResult; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -334,7 +335,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl collect = ivtList.stream().map(a -> a.getIvt_id()).collect(Collectors.toList()); packageinfoivtService.update(new UpdateWrapper() .set("update_time", DateUtil.now()) @@ -874,5 +875,16 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl getSubPackageInfoBySubRolls(List pcsns) { + if (pcsns.size() == 0) { + return null; + } + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(PdmBiSubpackagerelation::getContainer_name, pcsns); + return org.nl.common.utils.CollectionUtils.mapList(pdmBiSubpackagerelationMapper.selectList(lam), + pdmBiSubpackagerelation -> (JSONObject) JSON.toJSON(pdmBiSubpackagerelation)); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java index 8bf5e2c..0236c10 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/controller/BstIvtPackageinfoivtController.java @@ -58,18 +58,7 @@ public class BstIvtPackageinfoivtController { * @param whereJson 任务编号,动作类型:1、取货分配 2、放货分配 3、取货完成 * @return JSONObject 返回信息 */ - @PostMapping("/secondaryAllocationPoint") - @Log("二次分配") - @SaIgnore - ResponseEntity secondaryAllocationPoint(@RequestBody JSONObject whereJson) { - log.info("一楼装箱区二次分配接口请求参数:---------------------------------------------" + whereJson.toString()); - String taskCode = whereJson.getString("taskCode"); - String actionType = whereJson.getString("actionType"); - if (StrUtil.isEmpty(whereJson.getString("taskCode")) || StrUtil.isEmpty(whereJson.getString("actionType"))) { - throw new BadRequestException("任务编号或动作类型不能为空!"); - } - return new ResponseEntity<>(bstIvtPackageinfoivtService.secondaryAllocationPoint(taskCode, actionType), HttpStatus.OK); - } + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/SchBasePoint.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/SchBasePoint.java index 22dd573..f1bf794 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/SchBasePoint.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/SchBasePoint.java @@ -29,7 +29,7 @@ public class SchBasePoint extends Model { * 点位标识 */ @TableId(value = "point_id", type = IdType.NONE) - private Long point_id; + private String point_id; /** diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java index 6ab32e8..50cdb88 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IbstIvtPackageinfoivtService.java @@ -29,16 +29,7 @@ public interface IbstIvtPackageinfoivtService extends IService - */ - List checkEndPointTask(String ivtType, String ivtStatus, String pointCode,String sortType,String taskType); + /** @@ -47,24 +38,11 @@ public interface IbstIvtPackageinfoivtService extends IService secondaryAllocationPoint(String taskCode, String actionType); - /** - * 根据点位类型查询库存 - * @param ivtType 点位类型 - * @param ivtStatus 库存状态 - * @param sortType 排序 - */ - List getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType,boolean isQueryGroup); + /** @@ -93,16 +71,16 @@ public interface IbstIvtPackageinfoivtService extends IService selectEmpPoints(String point_status,String ivt_status); - List selectNoTargetTaskPoints(String point_status,String ivt_status); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java index 2da70cf..f79eb09 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java @@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pda.service.PrintTableTwoService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; import org.nl.b_lms.pdm.info.service.IPdmBiContainerinfoService; import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; @@ -93,6 +94,9 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl secondaryAllocationPoint(String taskCode, String actionType) { - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.BAD_REQUEST.value()); - RedissonUtils.lock(c-> { - try {Thread.sleep(1000);} catch (InterruptedException e) {} - String pointCode = ""; - String action = ""; - switch (actionType) { - case "1": - case "2": - // 取货分配, 放货分配 - pointCode = getNewPoint(taskCode, actionType); - result.put("data", pointCode); - result.put("message", taskCode + "取放货分配成功,新点位为:" + pointCode); - break; - case "3": - case "4": - // 取货完成,放货完成 - updatePointStatus(taskCode, actionType); - action = taskCode + "取放货完成!"; - result.put("data", action); - result.put("message", taskCode + "取放货完成!"); - break; - default: - return null; - } - result.put("status", HttpStatus.OK.value()); - return null; - },"sendProductToFirstFloor",null); - log.info("一楼装箱区点位二次分配" + taskCode + "---------------------------------------------" + result); - return result; - } - - /** - * 根据取放货类型二次分配新的点位 - * - * @param taskCode 任务编号 - * @param actionType 动作类型 - * @return 新的点位 - */ - private String getNewPoint(String taskCode, String actionType) { - BstIvtPackageinfoivt newPoint; - String taskPointType = null; - //执行中的任务 - SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTask::getTask_code, taskCode) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("否")) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())); - if (baseTask == null) { - throw new BadRequestException("该任务未执行或不存在!"); - } - //已分配过二次分配点位 - if (StringUtils.isNotBlank(baseTask.getResponse_param())) { - if (baseTask.getResponse_param().equals(IOSEnum.IS_SEND.code("是"))) { - if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { - return baseTask.getPoint_code1(); - } - } - } - //校验是否存在行架任务 - int count = taskService.count(new QueryWrapper() - .eq("task_type", "010911") - .eq("is_delete", "0") - .lt("task_status", TaskStatusEnum.FINISHED.getCode())); - //检查是否满足二次分配条件 - if (count>0){ - throw new BadRequestException("正在执行行架任务"); - } - checkTaskInfo(baseTask); - //空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务或补空载具任务,如未完成,不分配点位 - if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) || - baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) - ) { - newPoint = checkIvtSBlock(baseTask); - } else { - if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) { - //放满轴任务不判断终点是否有任务 - taskPointType = PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务分配"); - } - newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask); - } - //分配的点位 - if (newPoint != null) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, baseTask.getTask_id()); - if (StringUtils.isNotBlank(newPoint.getPoint_code())) { - //更新任务起点或终点 - if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { - updateWrapper.set(SchBaseTask::getPoint_code1, newPoint.getPoint_code()); - if (StringUtils.isNotBlank(newPoint.getContainer_name())) { - //更新子卷号 - updateWrapper.set(SchBaseTask::getVehicle_code,newPoint.getContainer_name()); - } - } else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) { - updateWrapper.set(SchBaseTask::getPoint_code2,newPoint.getPoint_code()); - } - //标记二次分配已分配过点位 - updateWrapper.set(SchBaseTask::getResponse_param,IOSEnum.IS_NOTANDYES.code("是")); - taskService.update(null, updateWrapper); - log.info("一楼装箱区二次分配" + taskCode + ",接口返回最新点位:---------------------------------------------" + newPoint.getPoint_code()); - return newPoint.getPoint_code(); - } else { - log.info("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!"); - throw new BadRequestException("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!"); - } - } else { - log.info("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!"); - throw new BadRequestException("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!"); - } - } - - - /** - * 查询没有搬运任务的空的目标点位 - * - * @param ivtType 点位类型 - * @param ivtStatus 库存状态 - * @param pointCode 取货还是放货 - * @param sortType 点位排序规则1:升序2:降序 - * @param taskType 任务类型 - * @return List - */ - @Override - public List checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { - List taskList; - Set pointSets; - boolean isQueryGroup = false; - List returList = new ArrayList<>(); - //移库任务返回点位处理 - List taskTypes = new ArrayList<>(Arrays.asList( - PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"), - PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"), - PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"), - PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"), - PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区"), - PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))); - if (taskTypes.contains(taskType)) { - //是否查询相同组的库位 - isQueryGroup = true; - } - List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType, isQueryGroup); - Set pointIds = packageinfoivtList.stream() - .map(BstIvtPackageinfoivt::getPoint_code) - .collect(Collectors.toSet()); - if (ObjectUtils.isEmpty(pointIds)) { - return returList; - } - if (pointCode == null) { - return packageinfoivtList; - } - if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, null); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务分配"))) { - //四个点任务取货分配条件为取货完成信号即刻更新库存,所以不判断是否有起点任务 - taskList = new ArrayList<>(); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务取货"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, pointIds, null); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("空载具放货"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(null, pointIds, null, pointIds); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("空载具放货分配"))) { - List pointList = new ArrayList<>(); - List ivtList = packageinfoivtList.stream().filter(r -> r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))).sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList()); - List vehicleList = packageinfoivtList.stream().filter(r -> r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))).sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList()); - //有空载具 - if (ObjectUtils.isNotEmpty(ivtList)) { - BstIvtPackageinfoivt bstIvtPackageinfoivt = new BstIvtPackageinfoivt(); - bstIvtPackageinfoivt.setPoint_code(ivtList.get(0).getPoint_code()); - bstIvtPackageinfoivt.setSort_seq(ivtList.get(0).getSort_seq()); - bstIvtPackageinfoivt.setIvt_status(ivtList.get(0).getIvt_status()); - returList.add(bstIvtPackageinfoivt); - //判断是否有空载具阻挡 - pointList.add(getSecondaryIvt(vehicleList, returList)); - return pointList; - } else { - BstIvtPackageinfoivt bstIvtPackageinfoivt = packageinfoivtList.stream().filter(r -> r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))).sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList()).get(0); - pointList.add(bstIvtPackageinfoivt); - return pointList; - } - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds); - } else { - return packageinfoivtList; - } - // 未完成的任务点位汇集 - if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务取货"))) { - pointSets = taskList.stream() - .flatMap(task -> Stream.of( - task.getPoint_code1(), - task.getPoint_code3() - )) - .filter(point -> point != null && !point.trim().isEmpty()) - .collect(Collectors.toSet()); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务分配"))) { - pointSets = taskList.stream() - .flatMap(task -> Stream.of( - task.getPoint_code1() - )) - .filter(point -> point != null && !point.trim().isEmpty()) - .collect(Collectors.toSet()); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("空载具放货"))) { - pointSets = taskList.stream() - .flatMap(task -> Stream.of( - task.getPoint_code2(), - task.getPoint_code4() - )) - .filter(point -> point != null && !point.trim().isEmpty() && !point.equals("ZXQ_01_1") && !point.equals("ZXQ_01_2")) - .collect(Collectors.toSet()); - //限制补空任务数量 - List ivtList = packageinfoivtList.stream().filter(r -> r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))).collect(Collectors.toList()); - Set ivtpointSets = ivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet()); - if (ObjectUtils.isNotEmpty(ivtpointSets)) { - //存在任务数量+已有库存数量大于3,不创建任务 - if (pointSets.size() + ivtpointSets.size() >= 3) { - return returList; - } - } - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { - pointSets = taskList.stream() - .flatMap(task -> Stream.of( - task.getPoint_code1(), - task.getPoint_code2() - )) - .filter(point -> point != null && !point.trim().isEmpty()) - .collect(Collectors.toSet()); - } else { - pointSets = taskList.stream() - .flatMap(task -> Stream.of( - task.getPoint_code1(), - task.getPoint_code2(), - task.getPoint_code3(), - task.getPoint_code4() - )) - .filter(point -> point != null && !point.trim().isEmpty()) - .collect(Collectors.toSet()); - } - //移库任务返回点位处理 - if (isQueryGroup) { - return getBstIvtPackageinfoivts(ivtStatus, pointSets, packageinfoivtList); - } - //符合条件的库存点位过滤掉已存在任务的点位 - List planTaskList = packageinfoivtList.stream() - .filter(p -> !pointSets.contains(p.getPoint_code()) && p.getIvt_status().equals(ivtStatus)) - .collect(Collectors.toList()); - //送空载具到空载具缓存位任务,需要判断是否存在已分配的且未完成的送空载具任务,如果存在,判断存在是否阻挡 - if (taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) || taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))) { - return getNoBlockIvt(pointCode, taskList, planTaskList); - } else { - return planTaskList; - } - } - - - /** - * 过滤不符合移库条件的同组库位 - */ - private static List getBstIvtPackageinfoivts(String ivtStatus, Set pointSets, List packageinfoivtList) { - //查询相同分组的库位 - Map> ivtLists = packageinfoivtList.stream() - .collect(Collectors.groupingBy( - BstIvtPackageinfoivt::getCol_num, - LinkedHashMap::new, - Collectors.mapping(BstIvtPackageinfoivt::getPoint_code, Collectors.toList()) - )); - ivtLists.entrySet().removeIf(r -> { - String key = r.getKey(); - List points = r.getValue(); - return !"0".equals(key) && points.stream().anyMatch(pointSets::contains); - }); - Set ivtPointCodes = ivtLists.values().stream() - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - ivtPointCodes.removeAll(pointSets); - return packageinfoivtList.stream() - .filter(r -> ivtPointCodes.contains(r.getPoint_code()) && r.getIvt_status().equals(ivtStatus)) - .collect(Collectors.toList()); - } - - /** - * 获取没有阻挡的点位 - * planTaskList 存在的空载具点位 - * taskList 已分配任务的点位 - */ - private List getNoBlockIvt(String pointCode, List taskList, List planTaskList) { - Set taskPointSet = null; - List pointList = new ArrayList<>(); - //无符合创建任务条件的点位 - if (ObjectUtils.isEmpty(planTaskList)) { - return pointList; - } - //筛选出完成分配的进行中的补空任务 - if (ObjectUtils.isNotEmpty(taskList)) { - taskPointSet = taskList.stream().map(SchBaseTask::getPoint_code2).filter(pointCode2 -> !pointCode2.equals("ZXQ_01_1") && !pointCode2.equals("ZXQ_01_2")).collect(Collectors.toSet()); - } - //存在补空载具任务已分配却未完成的任务 - if (ObjectUtils.isNotEmpty(taskPointSet)) { - List existPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().in(BstIvtPackageinfoivt::getPoint_code, taskPointSet)); - existPointList = existPointList.stream().peek(r -> r.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))).collect(Collectors.toList()); - if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { - return existPointList; - } - pointList.add(getBstIvtPackageinfoivt(existPointList, planTaskList)); - return pointList; - } else { - List notEmptyivtList = getBstIvtPackageinfoivts(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), false); - pointList.add(getBstIvtPackageinfoivt(planTaskList, notEmptyivtList)); - return pointList; - } - } - - /** - * 校验各类型的取放货分配否满足分配条件 - */ - private void checkTaskInfo(SchBaseTask baseTask) { - //补空载具放货任务 - if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) || - baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) - ) { - List taskList = taskService.list(new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) - .and( - r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) - .or() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) - .or() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) - .or() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")) - )); - //是否有执行中已分配补空载具任务 - List taskList1 = taskList.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(taskList1)) { - List taskList2 = taskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList()); - if (taskList2.size() == 1) { - //校验已分配的补空载具任务是否为当前请求的任务,是可重新分配,否不允许重新分配 - if (!taskList2.get(0).getTask_code().equals(baseTask.getTask_code())) { - log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!"); - throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!"); - } - } else if (taskList2.size() > 1) { - log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!"); - throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!"); - } - } - //是否有执行中的行架任务,有等待取空载具任务完成再分配 - List taskList3 = taskList.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) - || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(taskList3)) { - if (taskList3.stream().allMatch(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")))) { - if (taskList3.get(0).getTask_status().equals(TaskStatusEnum.SURE_END.getCode())) { - return; - } - } - if (StringUtils.isBlank(taskList3.get(0).getRequest_param())) { - log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!"); - throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!"); - } else { - if (!taskList3.get(0).getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) { - log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!"); - throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!"); - } - } - } - } else if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) { - List taskList = taskService.list(new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))); - //满轴缓存位->待检区agv任务如果分配了起点,是否发送取货完成信息,否,则需等待此任务发送取货完成信号才能分配第2个任务的起点 - List taskList1 = taskList.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(taskList1)) { - //多个已分配的未完成的取满轴任务,需要全部取货完成才能继续分配 - List taskList2 = taskList1.stream().filter(r -> StringUtils.isBlank(r.getRequest_param())).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(taskList2)) { - log.info("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!"); - throw new BadRequestException("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!"); - } - List taskList3 = taskList1.stream().filter(r -> StringUtils.isNotBlank(r.getRequest_param())).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(taskList3)) { - if (taskList3.stream().anyMatch(r -> !r.getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成")))) { - log.info("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList3.get(0).getTask_code() + "的任务未完成,请检查!"); - throw new BadRequestException("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList3.get(0).getTask_code() + "的任务未完成,请检查!"); - } - } - } - } - } /** @@ -609,147 +216,9 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl() - .eq(SchBaseTask::getTask_code, taskCode) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("否")) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())); - if (baseTask == null) { - throw new BadRequestException("该任务未执行或不存在!"); - } - //取货任务 - if (actionType.equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) { - if (StringUtils.isNotBlank(baseTask.getRequest_param())) { - if (baseTask.getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) { - throw new BadRequestException(baseTask.getTask_code() + "取货完成失败" + ",该任务已发送过取货完成信号请勿频繁发送!"); - } - } - if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")) || - baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || - baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))) { - //取满轴 - if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) { - BstIvtPackageinfoivt ivtInfo = packageinfoivtService.getOne(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code1())); - if (ivtInfo == null) { - throw new BadRequestException(baseTask.getTask_code() + "取货完成或放货完成失败,目标点位:" + baseTask.getPoint_code1() + "不存在!"); - } - //过滤未二次分配的任务 - if (StringUtils.isBlank(baseTask.getResponse_param())) { - throw new BadRequestException(baseTask.getTask_code() + "取货完成失败" + ",起点未进行二次分配!"); - } - //只有子卷号相同才能清除库存 - if (baseTask.getVehicle_code().equals(ivtInfo.getContainer_name())) { - upDateIvtOrTask(baseTask, baseTask.getPoint_code1()); - } - handleGroupTask(baseTask); - } else if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))) { - String pointCode = baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) ? baseTask.getPoint_code3() : baseTask.getPoint_code1(); - upDateIvtOrTask(baseTask, pointCode); - } - } - // else if ((baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) || - // baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) || - // baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")) || - // baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")) || - // baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) || - // baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")) - // || baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务")) - // )) { - // //取货完成信号 - // upDateIvtOrTask(baseTask, baseTask.getPoint_code1()); - // handleGroupTask(baseTask); - // } - else if ((baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) || - baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")) - || baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务")) - )) { - //取货完成信号 - upDateIvtOrTask(baseTask, baseTask.getPoint_code1()); - handleGroupTask(baseTask); - } - } else { - //放货完成信号请求 - if (StringUtils.isNotBlank(baseTask.getCar_no())) { - if (baseTask.getCar_no().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货完成"))) { - throw new BadRequestException(baseTask.getTask_code() + "放货完成失败" + ",该任务已发送过放货完成信号请勿频繁发送!"); - } - } - //放货任务 - List ivtList = packageinfoivtService.list(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code2())); - if (ObjectUtils.isEmpty(ivtList)) { - throw new BadRequestException("任务编号为:" + baseTask.getTask_code() + "放货完成的目标点位不存在!"); - } - if (ivtList.get(0).getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - //增加点位库存 - bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper() - .set("container_name", baseTask.getVehicle_code()) - .set("update_time", DateUtil.now()) - .set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")) - .eq("point_code", baseTask.getPoint_code2())); - //标记任务放货完成 - UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); - updateWrapper1.eq("task_id", baseTask.getTask_id()); - updateWrapper1.set("car_no", PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货完成")); - taskService.update(null, updateWrapper1); - log.info("一楼装箱区二次放货完成" + baseTask.getTask_code() + ",放货完成执行成功,放货信息:点位:" + baseTask.getPoint_code2() + "子卷号为:" + baseTask.getVehicle_code()); - } else { - throw new BadRequestException("该点位已有库存!"); - } - } - } - public void handleGroupTask(SchBaseTask baseTask) { - if (StringUtils.isNotBlank(baseTask.getTask_group_id())) { - //存在关联的未完成的任务组任务 - SchBaseTask groupTask = taskService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTask::getTask_id, baseTask.getTask_group_id()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("否")) - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); - if (groupTask != null) { - switch (groupTask.getTask_type()) { - //待检区->装箱区 - case "010908": - //groupTask.setPoint_code1(baseTask.getPoint_code1()); - sendTask(groupTask); - break; - //待检,管制移库任务 - case "010914": - case "010915": - if (groupTask.getTask_status().equals(TaskStatusEnum.SURE_START.getCode())) { - BstIvtPackageinfoivt shallowIvt = packageinfoivtService.getOne(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_code, groupTask.getPoint_code1())); - String pointCode2 = groupTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")) ? packageinfoivtService.getDjqShiftingPoint(shallowIvt, true) : packageinfoivtService.getDjqShiftingPoint(shallowIvt, false); - if (StringUtils.isNotBlank(pointCode2)) { - groupTask.setPoint_code2(pointCode2); - sendTask(groupTask); - } - } else { - sendTask(groupTask); - } - break; - default: - sendTask(groupTask); - } - //清除起点库存,标记任务已接收取货信号 - upDateIvtOrTask(baseTask, baseTask.getPoint_code1()); - //清除任务组标记 - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("task_id", baseTask.getTask_id()); - updateWrapper.set("task_group_id", null); - taskService.update(null, updateWrapper); - } - } - } + + /** * 任务下发 @@ -789,96 +258,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { - queryWrapper.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code3()); - targetPoint = PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"); - } else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) { - queryWrapper.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code4()); - targetPoint = PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"); - } - if (StringUtils.isNotBlank(taskPointType)) { - targetPoint = taskPointType; - } - BstIvtPackageinfoivt bstIvtPackageinfoivt = bstIvtPackageinfoivtMapper.selectOne(queryWrapper); - //无库存点位 - if (bstIvtPackageinfoivt == null) { - return newPoint; - } - //根据任务类型返回点位分配规则 - BstIvtPackageinfoivt ivtInfo = getIvtInfoFromRegion(baseTask.getTask_type(), actionType); - List newPointList = packageinfoivtService.checkEndPointTask(bstIvtPackageinfoivt.getPoint_status(), ivtInfo.getIvt_status(), targetPoint, ivtInfo.getSort_seq().toString(), ""); - if (ObjectUtils.isEmpty(newPointList)) { - log.info("一楼装箱区二次分配任务编号为:" + baseTask.getTask_code() + ",分配失败,暂无点位资源或点位外层有载具阻挡!"); - throw new BadRequestException("一楼装箱区二次分配任务编号为:" + baseTask.getTask_code() + ",分配失败,暂无点位资源或点位外层有载具阻挡!"); - } - newPoint = newPointList.get(0); - return newPoint; - } - /** - * 获取不阻挡的空载具缓存点位 - */ - public BstIvtPackageinfoivt checkIvtSBlock(SchBaseTask baseTask) { - BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt(); - List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, (PackageInfoIvtEnum.TASK_POINT_TYPE.code("空载具放货分配")), PackageInfoIvtEnum.SORT_TYPE.code("降序"), baseTask.getTask_type()); - if (ObjectUtils.isNotEmpty(kzjIvtList)) { - return kzjIvtList.get(0); - } else { - return newPoint; - } - } - - - /** - * 判断点位是否有外层阻挡 - */ - private static BstIvtPackageinfoivt getBstIvtPackageinfoivt(List vehicleList,List kzjIvtList) { - boolean hasEmptyVehicle; - BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt(); - if (ObjectUtils.isNotEmpty(vehicleList)) { - hasEmptyVehicle = kzjIvtList.stream() - .noneMatch(r -> r.getSort_seq().compareTo(vehicleList.get(0).getSort_seq()) < 0 && - r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))); - //有阻挡 - if (!hasEmptyVehicle) { - return newPoint; - } else { - return vehicleList.get(0); - } - } else { - return newPoint; - } - } - - /** - * 根据库存和空载具返回空点位 - */ - private static BstIvtPackageinfoivt getSecondaryIvt(List vehicleList, List kzjIvtList) { - List emptyVehicleList; - BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt(); - if (ObjectUtils.isNotEmpty(vehicleList)) { - emptyVehicleList = vehicleList.stream() - .filter(r -> r.getSort_seq().compareTo(kzjIvtList.get(0).getSort_seq()) < 0 ).collect(Collectors.toList()); - //有空位匹配 - if (ObjectUtils.isNotEmpty(emptyVehicleList)) { - return emptyVehicleList.get(0); - } else { - return newPoint; - } - } else { - return newPoint; - } - } /** @@ -1006,11 +386,11 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl dtoList; UpdateWrapper updateWrapper = new UpdateWrapper<>(); - //LMS获取MES称重后子卷信息 JSONObject jo = new JSONObject(); + //是否开启mes String isOnMes = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_on_mes").getValue(); //子卷质检合格品和管制品 - if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isBlank(whereJson.getString("pointCode"))) { + if (StringUtils.isNotBlank(whereJson.getString("container_name"))) { if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("空")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))) { throw new BadRequestException("质检结果只能为合格品或管制品"); } @@ -1018,7 +398,11 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl() .eq("container_name", whereJson.getString("container_name"))); if (one!=null){ - throw new BadRequestException("包装关系存在,请先解绑MES及LMS包装关系"); + if (isOnMes.equals(IOSEnum.IS_NOTANDYES.code("是"))) { + throw new BadRequestException("包装关系存在,请先解绑MES及LMS包装关系"); + }else { + throw new BadRequestException("包装关系存已存在"); + } } } dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getContainer_name, whereJson.getString("container_name"))); @@ -1053,9 +437,46 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl schBaseTasks = taskService.checkHaveTask(pointCode); + if (!CollectionUtils.isEmpty(schBaseTasks)){ + throw new BadRequestException("当前点位"+dtoList.get(0).getPoint_name()+"正在执行搬运任务"+schBaseTasks.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + } + updateWrapper.eq("point_code", pointCode); + updateWrapper.set("update_optid", Long.valueOf(SecurityUtils.getCurrentUserId())); + updateWrapper.set("update_optname", SecurityUtils.getCurrentNickName()); + updateWrapper.set("update_time", DateUtil.now()); + bstIvtPackageinfoivtMapper.update(null, updateWrapper); + result.put("status", org.springframework.http.HttpStatus.OK.value()); + result.put("message", "检验成功!"); + return result; + } + + + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject update2(JSONObject whereJson) { + JSONObject result = new JSONObject(); + if (StringUtils.isBlank(whereJson.getString("ivt_status"))) { + throw new BadRequestException("子卷检验结果为空"); + } + //"空","0","空载具","1","有子卷","2","合格品","3","管制品","4",人工卷,"5" + List dtoList; + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + JSONObject jo = new JSONObject(); + //是否开启mes + String isOnMes = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_on_mes").getValue(); //复称 - else if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isNotBlank(whereJson.getString("pointCode"))) { + if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isNotBlank(whereJson.getString("pointCode"))) { dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_code, whereJson.getString("pointCode").equals("1") ? "ZXQ_135" : "ZXQ_136")); if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) { //获取子卷最新信息 @@ -1095,9 +516,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl0){ throw new BadRequestException("当前人工管制点存在任务,稍后操作"); } - if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))){ - autoSendVehicleToDjq.getPointCode(task,PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); - } + dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_code, whereJson.getString("pointCode").equals("1") ? "ZXQ_135" : "ZXQ_136")); updateWrapper.set("container_name", null); updateWrapper.set("ivt_status", whereJson.getString("ivt_status")); @@ -1124,6 +543,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl().eq(PdmBiSlittingproductionplan::getContainer_name, whereJson.get("container_name")) @@ -1146,21 +566,21 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl djqPackageinfoivtList = packageinfoivtService.checkEndPointTask( - PackageInfoIvtEnum.POINT_STATUS.code("待检区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"), - PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), - PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); - if (ObjectUtils.isNotEmpty(djqPackageinfoivtList)) { - return djqPackageinfoivtList.get(0).getPoint_code(); - } else if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))) { - List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask( - PackageInfoIvtEnum.POINT_STATUS.code("管制区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"), - PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), - PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); - return gzqPackageinfoivtList.get(0).getPoint_code(); - } - } else { - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask( - PackageInfoIvtEnum.POINT_STATUS.code("管制区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"), - PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), - PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); - if (ObjectUtils.isNotEmpty(djqPackageinfoivtList)) { - return djqPackageinfoivtList.get(0).getPoint_code(); - } else if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))) { - List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask( - PackageInfoIvtEnum.POINT_STATUS.code("待检区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"), - PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), - PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); - return gzqPackageinfoivtList.get(0).getPoint_code(); - } - } - return null; - } + /** @@ -1288,12 +666,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl selectNoTargetTaskPoints(String point_status, String ivt_status) { - if (StringUtils.isEmpty(point_status)||StringUtils.isEmpty(ivt_status)){ - throw new BadRequestException("点位类型或状态不能为空"); - } - return this.baseMapper.selectNoTargetTaskPoint(point_status, ivt_status); - } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java index 7c7ce2c..1bd4e40 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java @@ -52,8 +52,7 @@ public class DjqTask extends AbstractAcsTask { @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private ShiftingTask shiftingTask; + @Resource private TaskQueueManager taskQueueManager; @@ -116,25 +115,18 @@ public class DjqTask extends AbstractAcsTask { //agv取货完成信号未发送 log.info(schBaseTask.getTask_code() + "检查检查->满轴位-待检区,agv取货完成信号未发送!已通过任务完成自动清空点位:"+schBaseTask.getPoint_code1()+"的库存,子卷号为:"+schBaseTask.getVehicle_code()); } - //2.改变起点点位状态,满轴位->待检区,二次分配取货完成信号发送就改起点库存,检查起点库存是否清空 + //2.改变起点点位状态 BstIvtPackageinfoivt ivtPoint = packageinfoivtService.getOne(new LambdaUpdateWrapper().eq(BstIvtPackageinfoivt::getPoint_code, schBaseTask.getPoint_code1())); - //如果起点库存未清空,则清空 - if (ivtPoint.getContainer_name() != null && schBaseTask.getVehicle_code() != null) { - if (ivtPoint.getContainer_name().equals(schBaseTask.getVehicle_code())) { - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - } - } + packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //3.更新终点库存记录 String ivtStatus; if (StringUtils.isNotBlank(schBaseTask.getRequest_param())) { if (schBaseTask.getRequest_param().equals("98")) { //管制区送空载具任务 ivtStatus = PackageInfoIvtEnum.IVT_STATUS.code("空载具"); - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); } else if (schBaseTask.getRequest_param().equals("99")) { //管制品重新质检 ivtStatus = PackageInfoIvtEnum.IVT_STATUS.code("合格品"); - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); } else { ivtStatus = PackageInfoIvtEnum.IVT_STATUS.code("有子卷"); } @@ -149,21 +141,8 @@ public class DjqTask extends AbstractAcsTask { .eq("point_code", schBaseTask.getPoint_code2())); //4.更改任务状态为完成 updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //5.更新并清除预分配位 - List taskList = taskService.list(new LambdaQueryWrapper() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("否")) - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); - List SamePointtaskList = taskList.stream().filter(r -> r.getPoint_code3().equals(schBaseTask.getPoint_code1())&&!r.getTask_id().equals(schBaseTask.getTask_id())).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(SamePointtaskList)) { - UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); - updateWrapper1.eq("task_id", SamePointtaskList.get(0).getTask_id()); - updateWrapper1.set("point_code3", schBaseTask.getPoint_code3()); - taskService.update(null, updateWrapper1); - } - updateWrapper.set(SchBaseTask::getPoint_code3, ""); - //6.判断是否存在任务组任务 - packageinfoivtService.handleGroupTask(schBaseTask); + + } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -178,12 +157,7 @@ public class DjqTask extends AbstractAcsTask { taskService.update(null, updateWrapper); } - private void sendTask(SchBaseTask groupTask) { - groupTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - taskService.updateById(groupTask); - shiftingTask.immediateNotifyAcs(null); - log.info("移库任务编号为:" + groupTask.getTask_code() + ",任务状态为:" + groupTask.getTask_status() + "下发完成。"); - } + @Override @@ -239,19 +213,7 @@ public class DjqTask extends AbstractAcsTask { return task.getTask_id(); } - public void sendDjqToZxq(SchBaseTask schBaseTask) { - //装箱区有空位 - List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); - if (ObjectUtils.isNotEmpty(bstIvtPackageinfoivtList)) { - Map> ivtList = bstIvtPackageinfoivtList.stream() - .collect(Collectors.groupingBy( - BstIvtPackageinfoivt::getPoint_code, - LinkedHashMap::new, - Collectors.mapping(BstIvtPackageinfoivt::getPoint_name, Collectors.toList()) - )); - taskQueueManager.processTasks(ivtList); - } - } + @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java index ec0b144..dfc5bbd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java @@ -29,6 +29,7 @@ import org.nl.wms.util.TaskUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -55,7 +56,6 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { private IbstIvtPackageinfoivtService packageinfoivtService; - @Override public List addTask() { ArrayList resultList = new ArrayList<>(); @@ -88,7 +88,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { String now = DateUtil.now(); SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; + if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) @@ -99,14 +99,14 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - //1.改变起点点位状态 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //2.更新库存记录 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); - //3.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); + //1.改变起点点位状态 + packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); + //2.更新终点状态 + packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); + //3.更改任务状态为完成 + updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -116,29 +116,12 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { //任务被标记为取消 updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark,"任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); + updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); } taskService.update(null, updateWrapper); } - public void exchangeTaskPoint(SchBaseTask schBaseTask) { - List taskList = taskService.list(new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) - .and( - r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) - .or() - .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) - .or() - )); - List SamePointtaskList = taskList.stream().filter(r -> r.getPoint_code4().equals(schBaseTask.getPoint_code2())&&!r.getTask_id().equals(schBaseTask.getTask_id())).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(SamePointtaskList)) { - UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); - updateWrapper1.eq("task_id", SamePointtaskList.get(0).getTask_id()); - updateWrapper1.set("point_code4", schBaseTask.getPoint_code4()); - taskService.update(null, updateWrapper1); - } - } + @Override @Transactional @@ -204,7 +187,6 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { } - @Override public void cancel(String taskId) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() @@ -224,84 +206,4 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { taskService.update(null, updateWrapper); } - - - // /** - // * 装箱区->空载具缓存位补空 - // */ - // public void toKzjHcw1(String pointCode) { - // //存在空载具缓存位无空载具的点位 - // List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", ""); - // String pointCode1 = null; - // JSONObject task = new JSONObject(); - // if (StringUtils.isNotBlank(pointCode)) { - // pointCode1 = pointCode; - // } else { - // //待检区有空载具且过滤未完成任务 - // List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); - // if (ObjectUtils.isNotEmpty(djqPackageinfoivtList)) { - // //无二次分配 - // List notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList()); - // if (ObjectUtils.isNotEmpty(notNeedAllocation)) { - // pointCode1 = notNeedAllocation.get(0).getPoint_code(); - // task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")); - // } else { - // if (ObjectUtils.isNotEmpty(djqPackageinfoivtList)) { - // pointCode1 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type()); - // task.put("vehicle_code1", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); - // task.put("point_code3", djqPackageinfoivtList.get(0).getPoint_code()); - // } - // } - // } else { - // //管制区有空位 - // List gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), "", ""); - // if (ObjectUtils.isNotEmpty(gzqList)) { - // //需要二次分配,起点分配等待点 - // pointCode1 = packageinfoivtService.getWaitPoint(gzqList.get(0).getBlock(), gzqList.get(0).getWait_point_type()); - // task.put("point_code3", gzqList.get(0).getPoint_code()); - // task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配")); - // } - // } - // //去待检区或管制区搬运空载具 - // if (ObjectUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { - // task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - // task.put("point_code1", pointCode1); - // //送空二次分配,目标点分配等待点 - // task.put("point_code4", kzjIvtList.get(0).getPoint_code()); - // task.put("point_code2", packageinfoivtService.getWaitPoint(kzjIvtList.get(0).getBlock(), kzjIvtList.get(0).getWait_point_type())); - // this.createTask(task); - // } - // } - // } - // - // public void toKzjHcw(String pointCode) { - // //存在空载具缓存位无空载具的点位 - // List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); - // String pointCode1 = null; - // JSONObject toKzjHcwTask = new JSONObject(); - // if (StringUtils.isNotBlank(pointCode)) { - // pointCode1 = pointCode; - // } else { - // //查询装箱区有空载具 - // List zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); - // //装箱区有空载具 - // if (ObjectUtils.isNotEmpty(zxqPointList)) { - // pointCode1 = zxqPointList.get(0).getPoint_code(); - // } else { - // //待检区有空载具 - // List djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); - // if (ObjectUtils.isNotEmpty(djqPointList)) { - // pointCode1 = djqPointList.get(0).getPoint_code(); - // } - // } - // } - // //去装箱区搬运空载具 - // if (ObjectUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { - // toKzjHcwTask.put("point_code1", pointCode1); - // //送到到任意空载具缓存位 - // toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code()); - // toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - // this.createTask(toKzjHcwTask); - // } - // } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java index dbe3886..9a90a77 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -46,8 +46,7 @@ public class GzqTask extends AbstractAcsTask { private IschBaseTaskService taskService; @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private ShiftingTask shiftingTask; + @Override public List addTask() { ArrayList resultList = new ArrayList<>(); @@ -102,8 +101,7 @@ public class GzqTask extends AbstractAcsTask { packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("管制品")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); //3.更改任务状态为完成 updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //4.判断是否存在任务组任务 - packageinfoivtService.handleGroupTask(schBaseTask); + } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -118,17 +116,7 @@ public class GzqTask extends AbstractAcsTask { taskService.update(null,updateWrapper); } - private void sendTask(SchBaseTask schBaseTask, SchBaseTask groupTask) { - groupTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - taskService.updateById(groupTask); - shiftingTask.immediateNotifyAcs(null); - log.info("移库任务编号为:" + groupTask.getTask_code() + ",任务状态为:" + groupTask.getTask_status() + "下发完成。"); - //清除任务组标记 - UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); - updateWrapper1.eq("task_id", schBaseTask.getTask_id()); - updateWrapper1.set("task_group_id", null); - taskService.update(null, updateWrapper1); - } + @Override @Transactional diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java deleted file mode 100644 index 160cfca..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java +++ /dev/null @@ -1,231 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.util.TaskUtil; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - - -/** - * 3 目标空载具缓存位, 管制区->空载具缓存位补空agv任务 - * - * @author gbx - * @since 2024-01-24 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class GzqToKzjhcwTask extends AbstractAcsTask { - - - private final String THIS_CLASS = GzqToKzjhcwTask.class.getName(); - @Resource - private IschBaseTaskService taskService; - - @Resource - private DjqToKzjhcwTask djqToKzjhcwTask; - - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - - - - - @Override - public List addTask() { - ArrayList resultList = new ArrayList<>(); - List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) - .eq(SchBaseTask::getIs_delete, 0) - ); - taskList.forEach(r -> { - AcsTaskDto dto = AcsTaskDto.builder() - .ext_task_id(r.getTask_id().toString()) - .task_code(r.getTask_code()) - .task_type(r.getAcs_task_type()) - .start_device_code(r.getPoint_code1()) - .next_device_code(r.getPoint_code2()) - .vehicle_code(r.getVehicle_code()) - .priority(r.getPriority()) - .remark(r.getRemark()) - .product_area(r.getProduct_area()) - .agv_action_type(r.getVehicle_code2()) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) - .interaction_json(JSON.parseObject(r.getRequest_param())) - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - String now = DateUtil.now(); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, now); - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); - } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + schBaseTask.getUpdate_time() + "被调用---------------------------------------------"); - //1.改变起点点位状态 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //2.更新库存记录 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); - //3.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //4.更新并清除预分配位 - djqToKzjhcwTask.exchangeTaskPoint(schBaseTask); - updateWrapper.set(SchBaseTask::getPoint_code4, ""); - //5.判断是否存在任务组任务 - packageinfoivtService.handleGroupTask(schBaseTask); - //6.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务 - // List taskList = taskService.list(new LambdaQueryWrapper() - // //确定终点未下发 - // .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode()) - // .eq(SchBaseTask::getPoint_code2, "NBJ1002") - // .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) - // ); - // if (ObjectUtils.isNotEmpty(taskList)) { - // SchBaseTask task = taskList.get(0); - // task.setPoint_code1(schBaseTask.getPoint_code2()); - // task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - // taskService.update(task); - // //任务下发 - // ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString()); - // } - } - // 取消 - if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { - throw new BadRequestException("任务已执行不能取消"); - } - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark,"任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); - } - taskService.update(null, updateWrapper); - } - - @Override - @Transactional - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String taskType = form.getString("task_type"); - if (StrUtil.isBlank(taskType)) { - throw new BadRequestException("业务类型不能为空"); - } - String vehicleCode = form.getString("vehicle_code"); - // if (StrUtil.isBlank(vehicleCode)) { - // throw new BadRequestException("载具号不能为空"); - // } - String pointCode1 = form.getString("point_code1"); - if (StrUtil.isBlank(pointCode1)) { - throw new BadRequestException("起点不能为空"); - } - String pointCode2 = form.getString("point_code2"); - if (StrUtil.isBlank(pointCode2)) { - throw new BadRequestException("下一点不能为空"); - } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); - SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() - .task_type(taskType) - .vehicle_code(vehicleCode) - .vehicle_code2(form.getString("vehicle_code2")) - .point_code1(pointCode1) - .point_code2(pointCode2) - .point_code3(form.getString("point_code3")) - .point_code4(form.getString("point_code4")) - .task_id(org.nl.common.utils.IdUtil.getStringId()) - .task_code(org.nl.common.utils.IdUtil.getStringId()) - .task_group_id(form.getString("task_group_id")) - .handle_class(THIS_CLASS) - .create_id(SecurityUtils.getCurrentUserId()) - .create_name(SecurityUtils.getCurrentUsername()) - .create_time(DateUtil.now()) - .is_send(isSend ? "1" : "0") - .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) - .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) - .build(); - SchBaseTask task = new SchBaseTask(); - BeanUtils.copyProperties(schBaseTaskVo, task); - taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { - this.immediateNotifyAcs(null); - } - return task.getTask_id(); - } - - - @Override - @Transactional - public void forceFinish(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); - } - - - - @Override - public void cancel(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (schBaseTask == null) { - throw new BadRequestException("管制区->空载具缓存位取消接口任务号为空!"); - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, DateUtil.now()); - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被用户:" + schBaseTask.getUpdate_optname() + "在:" + DateUtil.now() + "强制取消。"); - taskService.update(null, updateWrapper); - } - - - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java deleted file mode 100644 index 7040b73..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ /dev/null @@ -1,382 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.ContainerLevelEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.util.TaskUtil; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - - -/** - * 1 目标满轴缓存位, 输送线点位 -> 满轴缓存位,桁架任务 - * - * @author gbx - * @since 2024-01-24 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class MzhcwTask extends AbstractAcsTask { - - private final String THIS_CLASS = MzhcwTask.class.getName(); - - @Resource - private IschBaseTaskService taskService; - - @Resource - private IPdmBiSlittingproductionplanService productionPlanService; - - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - @Resource - private DjqTask djqTask; - @Resource - private GzqTask gzqTask; - - - @Resource - private DjqToKzjhcwTask djqToKzjhcwTask; - - - - @Override - public List addTask() { - ArrayList resultList = new ArrayList<>(); - List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) - .eq(SchBaseTask::getIs_delete, 0) - ); - taskList.forEach(r -> { - AcsTaskDto dto = AcsTaskDto.builder() - .ext_task_id(r.getTask_id().toString()) - .task_code(r.getTask_code()) - .task_type(r.getAcs_task_type()) - .start_device_code(r.getPoint_code1()) - .next_device_code(r.getPoint_code2()) - .start_device_code2(r.getPoint_code3()) - .next_device_code2(r.getPoint_code4()) - //四个点任务与两个点任务类型区分 - .agv_action_type(r.getVehicle_code2()) - .vehicle_code(r.getVehicle_code()) - .priority(r.getPriority()) - .remark(r.getRemark()) - .class_type(IOSEnum.ACS_TYPE.code("子卷下线行架任务")) - .product_area(r.getProduct_area()) - .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) - .interaction_json(JSON.parseObject(r.getRequest_param())) - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - String now = DateUtil.now(); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, now); - // 执行中 - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); - } - // 完成 - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - //1.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //2.校验桁架任务取放货完成信号 - if (StringUtils.isNotBlank(schBaseTask.getCar_no())) { - //桁架放货完成信号未发送 - if (!schBaseTask.getCar_no().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货完成"))) { - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); - log.info(schBaseTask.getTask_code() + "检查检查->输送线点位-满轴缓存位,桁架放货完成信号未发送!已在手动点击完成时增加满轴位:" + schBaseTask.getPoint_code2() + "的库存,子卷号为:"+schBaseTask.getVehicle_code()); - } - } else { - //桁架放货完成信号未发送 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); - log.info(schBaseTask.getTask_code() + "检查检查->输送线点位-满轴缓存位,桁架放货完成信号未发送!已在手动点击完成时增加满轴位:" + schBaseTask.getPoint_code2() + "的库存,子卷号为:"+schBaseTask.getVehicle_code()); - } - if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))) { - if (StringUtils.isNotBlank(schBaseTask.getRequest_param())) { - //桁架取货完成信号未发送 - if (!schBaseTask.getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) { - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code3())); - log.info(schBaseTask.getTask_code() + "检查检查->四个点任务,桁架取货完成信号未发送!已在手动点击完成时清除空载具位:" + schBaseTask.getPoint_code3() + "的库存"); - } - } else { - //桁架取货完成信号未发送 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code3())); - log.info(schBaseTask.getTask_code() + "检查检查->四个点任务,桁架取货完成信号未发送!已在手动点击完成时清除空载具位:" + schBaseTask.getPoint_code3() + "的库存"); - } - } - } - // 取消 - if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { - throw new BadRequestException("任务已执行不能取消"); - } - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark,"任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); - - } - taskService.update(null, updateWrapper); - } - - private void sendVehicle(SchBaseTask schBaseTask) { - //空载具缓存位空载具:判断是否有正在搬运空载具过来的任务,有的话不创建 - //没有的话创建搬运空载具任务, 当任务完成的时候,补发桁架任务。 - List packageinfoivtList = packageinfoivtService.list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))); - List taskList = taskService.list(new LambdaUpdateWrapper() - //执行中 - .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) - .and( - r -> r.in(SchBaseTask::getPoint_code2, packageinfoivtList) - )); - //没有正在搬运空载具过来的任务,创建搬运空载具任务 - if (ObjectUtils.isEmpty(taskList)) { - //查询待检区或管制区有空载具的 - List djqOrGzqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List djqPointList = djqOrGzqPointList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList()); - //待检区库位有空载具 - if (ObjectUtils.isNotEmpty(djqPointList)) { - List kzjPoint = packageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) - .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)) - .collect(Collectors.toList()); - //创建搬运空载具任务 - JSONObject toKzjHcwTask = new JSONObject(); - if (ObjectUtils.isNotEmpty(djqPointList)) { - //优先去待检区取空载具 - toKzjHcwTask.put("point_code1", djqPointList.get(0).getPoint_code()); - } else { - - toKzjHcwTask.put("point_code1", djqOrGzqPointList.get(0).getPoint_code()); - } - toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - //送到到任意空载具缓存位 - toKzjHcwTask.put("point_code2", kzjPoint.get(0).getPoint_code()); - //toKzjHcwTask.put("vehicle_code", containerInfo.getContainer_name()); - toKzjHcwTask.put("vehicle_code", schBaseTask.getVehicle_code()); - djqToKzjhcwTask.createTask(toKzjHcwTask); - } - } - } - - private void createTaskToDjq(SchBaseTask schBaseTask) { - if (StringUtils.isBlank(schBaseTask.getVehicle_code())) { - throw new BadRequestException("子卷号不能为空!"); - } - PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() - .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code())); - if (containerInfo == null) { - throw new BadRequestException("找不到子卷信息!"); - } - //查询库位信息 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - JSONObject toDjqTask = new JSONObject(); - //获取子卷号 - toDjqTask.put("vehicle_code", schBaseTask.getVehicle_code()); - List djqPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); - if (ObjectUtils.isEmpty(djqPointList)) { - throw new BadRequestException("待检区暂无空余库位!"); - } - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); - toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); - toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); - djqTask.createTask(toDjqTask); - } - - - private void createTaskToDjq1(SchBaseTask schBaseTask) { - if (StringUtils.isBlank(schBaseTask.getVehicle_code())) { - throw new BadRequestException("子卷号不能为空!"); - } - PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() - .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code())); - if (containerInfo == null) { - throw new BadRequestException("找不到子卷信息!"); - } - //子卷等级 - String level = containerInfo.getLevel() == null ? "1" : containerInfo.getLevel(); - if (Arrays.stream(ContainerLevelEnum.values()).noneMatch(enumItem -> enumItem.getCode().equals(level))) { - throw new BadRequestException("非法的子卷等级!"); - } - //查询库位信息 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - JSONObject toDjqTask = new JSONObject(); - //获取子卷号 - toDjqTask.put("vehicle_code", schBaseTask.getVehicle_code()); - // 判断子卷等级属于待检区还是管制区,创建满轴缓存位到待检区或管制区的agv任务 - if (Stream.of(ContainerLevelEnum.BEST, ContainerLevelEnum.WELL, ContainerLevelEnum.COMMON).anyMatch(enumItem -> enumItem.getCode().equals(level))) { - List djqPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); - if (ObjectUtils.isEmpty(djqPointList)) { - throw new BadRequestException("待检区暂无空余库位!"); - } - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); - toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); - toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); - djqTask.createTask(toDjqTask); - } else if (Stream.of(ContainerLevelEnum.REWORK, ContainerLevelEnum.CONTROL).anyMatch(enumItem -> enumItem.getCode().equals(level))) { - List gkqPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); - if (ObjectUtils.isEmpty(gkqPointList)) { - throw new BadRequestException("管控区暂无空余库位!"); - } - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); - toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); - toDjqTask.put("point_code2", gkqPointList.get(0).getPoint_code()); - gzqTask.createTask(toDjqTask); - } - - } - - @Override - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String taskType = form.getString("task_type"); - if (StrUtil.isBlank(taskType)) { - throw new BadRequestException("业务类型不能为空"); - } - String vehicleCode = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicleCode)) { - throw new BadRequestException("载具号不能为空"); - } - String pointCode1 = form.getString("point_code1"); - if (StrUtil.isBlank(pointCode1)) { - throw new BadRequestException("起点不能为空"); - } - String pointCode2 = form.getString("point_code2"); - // if (StrUtil.isBlank(pointCode2)) { - // throw new BadRequestException("下一点不能为空"); - // } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); - SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() - .task_type(taskType) - .vehicle_code(vehicleCode) - .vehicle_code2(form.getString("vehicle_code2")) - .point_code1(pointCode1) - .point_code2(pointCode2) - .point_code3(form.getString("point_code3")) - .point_code4(form.getString("point_code4")) - .task_id(org.nl.common.utils.IdUtil.getStringId()) - .task_code(org.nl.common.utils.IdUtil.getStringId()) - .task_group_id(form.getString("task_group_id")) - .handle_class(THIS_CLASS) - .create_id(SecurityUtils.getCurrentUserId()) - .create_name(SecurityUtils.getCurrentUsername()) - .create_time(DateUtil.now()) - .is_send(isSend ? "1" : "0") - .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) - .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) - .build(); - SchBaseTask task = new SchBaseTask(); - BeanUtils.copyProperties(schBaseTaskVo, task); - taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { - this.immediateNotifyAcs(null); - } - return task.getTask_id(); - } - - - @Override - @Transactional - public void forceFinish(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); - } - - - - - @Override - public void cancel(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (schBaseTask == null) { - throw new BadRequestException("输送线点位 -> 满轴缓存位取消接口任务号为空!"); - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, DateUtil.now()); - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被用户:" + schBaseTask.getUpdate_optname() + "在:" + DateUtil.now() + "强制取消。"); - taskService.update(null, updateWrapper); - } - - - - - - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java index 6d0ec80..eadee8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java @@ -26,6 +26,7 @@ import org.nl.wms.util.TaskUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -101,8 +102,7 @@ public class SendDjqKzjTask extends AbstractAcsTask { packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); //3.更改任务状态为完成 updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //4.判断是否存在任务组任务 - packageinfoivtService.handleGroupTask(schBaseTask); + } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java deleted file mode 100644 index 7d1dc96..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java +++ /dev/null @@ -1,207 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.util.TaskUtil; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - -/** - * 7 目标管制区, 装箱区 -> 管制区送空载具,agv任务 - * - * @author gbx - * @since 2024-01-24 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class SendGzqKzjTask extends AbstractAcsTask { - @Resource - private IschBaseTaskService taskService; - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - private final String THIS_CLASS = SendGzqKzjTask.class.getName(); - - @Override - public List addTask() { - ArrayList resultList = new ArrayList<>(); - List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) - .eq(SchBaseTask::getIs_delete, 0) - ); - taskList.forEach(r -> { - AcsTaskDto dto = AcsTaskDto.builder() - .ext_task_id(r.getTask_id().toString()) - .task_code(r.getTask_code()) - .task_type(r.getAcs_task_type()) - .start_device_code(r.getPoint_code1()) - .next_device_code(r.getPoint_code2()) - .start_device_code2(r.getPoint_code3()) - .next_device_code2(r.getPoint_code4()) - .vehicle_code(r.getVehicle_code()) - .priority(r.getPriority()) - .remark(r.getRemark()) - .product_area(r.getProduct_area()) - .agv_action_type(r.getVehicle_code2()) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) - .interaction_json(JSON.parseObject(r.getRequest_param())) - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - String now = DateUtil.now(); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, now); - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); - } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - //1.改变起点点位状态 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //2.更新库存记录 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); - //3.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //4.判断是否存在任务组任务 - packageinfoivtService.handleGroupTask(schBaseTask); - } - // 取消 - if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { - throw new BadRequestException("任务已执行不能取消"); - } - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); - } - taskService.update(null, updateWrapper); - } - - @Override - @Transactional - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String taskType = form.getString("task_type"); - if (StrUtil.isBlank(taskType)) { - throw new BadRequestException("业务类型不能为空"); - } - String vehicleCode = form.getString("vehicle_code"); - // if (StrUtil.isBlank(vehicleCode)) { - // throw new BadRequestException("载具号不能为空"); - // } - String pointCode1 = form.getString("point_code1"); - if (StrUtil.isBlank(pointCode1)) { - throw new BadRequestException("起点不能为空"); - } - String pointCode2 = form.getString("point_code2"); - if (StrUtil.isBlank(pointCode2)) { - throw new BadRequestException("下一点不能为空"); - } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); - SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() - .task_type(taskType) - .vehicle_code(vehicleCode) - .vehicle_code2(form.getString("vehicle_code2")) - .point_code1(pointCode1) - .point_code2(pointCode2) - .point_code3(form.getString("point_code3")) - .point_code4(form.getString("point_code4")) - .task_group_id(form.getString("task_group_id")) - .task_id(org.nl.common.utils.IdUtil.getStringId()) - .task_code(org.nl.common.utils.IdUtil.getStringId()) - .handle_class(THIS_CLASS) - .create_id(SecurityUtils.getCurrentUserId()) - .create_name(SecurityUtils.getCurrentUsername()) - .create_time(DateUtil.now()) - .is_send(isSend ? "1" : "0") - .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) - .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) - .build(); - SchBaseTask task = new SchBaseTask(); - BeanUtils.copyProperties(schBaseTaskVo, task); - taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { - this.immediateNotifyAcs(null); - } - return task.getTask_id(); - } - - - @Override - @Transactional - public void forceFinish(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); - } - - - @Override - public void cancel(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (schBaseTask == null) { - throw new BadRequestException("装箱区->管制区送空载具取消接口任务号为空!"); - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, DateUtil.now()); - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被用户:" + schBaseTask.getUpdate_optname() + "在:" +DateUtil.now() + "强制取消。"); - taskService.update(null, updateWrapper); - } - - - - - - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java deleted file mode 100644 index 7fbba72..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java +++ /dev/null @@ -1,202 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.util.TaskUtil; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - -/** - * 7 agv移库任务 - * - * @author gbx - * @since 2024-01-24 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class ShiftingTask extends AbstractAcsTask { - - private final String THIS_CLASS = ShiftingTask.class.getName(); - @Resource - private IschBaseTaskService taskService; - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - @Override - public List addTask() { - ArrayList resultList = new ArrayList<>(); - List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) - .eq(SchBaseTask::getIs_delete, 0) - ); - taskList.forEach(r -> { - AcsTaskDto dto = AcsTaskDto.builder() - .ext_task_id(r.getTask_id().toString()) - .task_code(r.getTask_code()) - .task_type(r.getAcs_task_type()) - .start_device_code(r.getPoint_code1()) - .next_device_code(r.getPoint_code2()) - .start_device_code2(r.getPoint_code3()) - .next_device_code2(r.getPoint_code4()) - //.vehicle_code(r.getVehicle_code()) - .priority(r.getPriority()) - .remark(r.getRemark()) - .product_area(r.getProduct_area()) - .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - String now = DateUtil.now(); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, now); - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); - } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - //1.改变起点点位状态 - // packageinfoivtService.update(null, new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //2.更新终点库存记录,点位状态存到material_code终 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", schBaseTask.getMaterial_code()).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); - //3.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //4.判断是否存在任务组任务 - packageinfoivtService.handleGroupTask(schBaseTask); - } - // 取消 - if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { - throw new BadRequestException("任务已执行不能取消"); - } - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); - } - taskService.update(null, updateWrapper); - } - - @Override - @Transactional - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String taskType = form.getString("task_type"); - if (StrUtil.isBlank(taskType)) { - throw new BadRequestException("业务类型不能为空"); - } - String vehicleCode = form.getString("vehicle_code"); - // if (StrUtil.isBlank(vehicleCode)) { - // throw new BadRequestException("载具号不能为空"); - // } - String pointCode1 = form.getString("point_code1"); - if (StrUtil.isBlank(pointCode1)) { - throw new BadRequestException("起点不能为空"); - } - String pointCode2 = form.getString("point_code2"); - // if (StrUtil.isBlank(pointCode2)) { - // throw new BadRequestException("下一点不能为空"); - // } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); - SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() - .task_type(taskType) - .vehicle_code(vehicleCode) - .vehicle_code2(form.getString("vehicle_code2")) - .point_code1(pointCode1) - .point_code2(pointCode2) - .point_code3(form.getString("point_code3")) - .point_code4(form.getString("point_code4")) - .request_param(form.getString("request_param")) - .task_id(org.nl.common.utils.IdUtil.getStringId()) - .task_code(org.nl.common.utils.IdUtil.getStringId()) - .handle_class(THIS_CLASS) - .create_id(SecurityUtils.getCurrentUserId()) - .create_name(SecurityUtils.getCurrentUsername()) - .create_time(DateUtil.now()) - .is_send(isSend ? "1" : "0") - .task_group_id(form.getString("task_group_id")) - .material_code(form.getString("material_code")) - .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) - .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) - .build(); - SchBaseTask task = new SchBaseTask(); - BeanUtils.copyProperties(schBaseTaskVo, task); - taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { - this.immediateNotifyAcs(null); - } - return task.getTask_id(); - } - - @Override - @Transactional - public void forceFinish(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); - } - - - @Override - public void cancel(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (schBaseTask == null) { - throw new BadRequestException("agv移库任务号为空!"); - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, DateUtil.now()); - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被用户:" + schBaseTask.getUpdate_optname() + "在:" +DateUtil.now() + "强制取消。"); - taskService.update(null, updateWrapper); - } - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java deleted file mode 100644 index 5eb163a..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java +++ /dev/null @@ -1,237 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.util.TaskUtil; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - -/** - * 2 目标输送线点位, 空载具缓存位 -> 输送线,桁架任务 - * - * @author gbx - * @since 2024-01-24 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class SsxDjwTask extends AbstractAcsTask { - - private final String THIS_CLASS = SsxDjwTask.class.getName(); - - @Resource - private IschBaseTaskService taskService; - - - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - - @Override - public List addTask() { - ArrayList resultList = new ArrayList<>(); - List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) - .eq(SchBaseTask::getIs_delete, 0) - ); - taskList.forEach(r -> { - AcsTaskDto dto = AcsTaskDto.builder() - .ext_task_id(r.getTask_id().toString()) - .task_code(r.getTask_code()) - .task_type(r.getAcs_task_type()) - .start_device_code(r.getPoint_code1()) - .next_device_code(r.getPoint_code2()) - .start_device_code2(r.getPoint_code3()) - .next_device_code2(r.getPoint_code4()) - //.vehicle_code(r.getVehicle_code()) - .priority(r.getPriority()) - .remark(r.getRemark()) - .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) - .product_area(r.getProduct_area()) - .interaction_json(JSON.parseObject(r.getRequest_param())) - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - String now = DateUtil.now(); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, now); - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); - } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - //1.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //2.校验桁架任务取货完成信号 - if (StringUtils.isNotBlank(schBaseTask.getRequest_param())) { - //桁架取货完成信号未发送 - if (!schBaseTask.getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) { - packageinfoivtService.update(null,new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - log.info(schBaseTask.getTask_code() + "检查检查->空载具缓存位-输送线,桁架取货完成信号未发送!已在手动点击完成时清除空载具位:"+schBaseTask.getPoint_code1()+"的库存"); - } - } else { - //桁架取货完成信号未发送 - packageinfoivtService.update(null,new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - log.info(schBaseTask.getTask_code() + "检查检查->空载具缓存位-输送线,桁架取货完成信号未发送!已在手动点击完成时清除空载具位:"+schBaseTask.getPoint_code1()+"的库存"); - } - //3.改变起点点位状态 - //packageinfoivtService.update(null,new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //4.空载具缓存位到输送线送空任务完成,去待检区或管制区补空载具 - // List zxqPointList = packageinfoivtService - // .list(new LambdaUpdateWrapper() - // .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) - // .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) - // .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - // .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - // //有空载具,创建搬运空载具任务 - // if (ObjectUtils.isNotEmpty(zxqPointList)) { - // JSONObject toKzjhcwTask = new JSONObject(); - // toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - // toKzjhcwTask.put("point_code1", zxqPointList.get(0).getPoint_code()); - // //任务起点为补空载具终点 - // toKzjhcwTask.put("point_code2", schBaseTask.getPoint_code1()); - // kzjhcwTask.createTask(toKzjhcwTask); - // } - } - // 取消 - if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { - throw new BadRequestException("任务已执行不能取消"); - } - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark,"任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); - } - taskService.update(null, updateWrapper); - } - - @Override - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String taskType = form.getString("task_type"); - if (StrUtil.isBlank(taskType)) { - throw new BadRequestException("业务类型不能为空"); - } - String vehicleCode = form.getString("vehicle_code"); - // if (StrUtil.isBlank(vehicleCode)) { - // throw new BadRequestException("载具号不能为空"); - // } - String pointCode1 = form.getString("point_code1"); - // if (StrUtil.isBlank(pointCode1)) { - // throw new BadRequestException("起点不能为空"); - // } - String pointCode2 = form.getString("point_code2"); - if (StrUtil.isBlank(pointCode2)) { - throw new BadRequestException("下一点不能为空"); - } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); - SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() - .task_type(taskType) - .vehicle_code(vehicleCode) - .vehicle_code2(form.getString("vehicle_code2")) - .point_code1(pointCode1) - .point_code2(pointCode2) - .point_code3(form.getString("point_code3")) - .point_code4(form.getString("point_code4")) - .task_id(org.nl.common.utils.IdUtil.getStringId()) - .task_code(org.nl.common.utils.IdUtil.getStringId()) - .task_group_id(form.getString("task_group_id")) - .handle_class(THIS_CLASS) - .create_id(SecurityUtils.getCurrentUserId()) - .create_name(SecurityUtils.getCurrentUsername()) - .create_time(DateUtil.now()) - .is_send(isSend ? "1" : "0") - .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) - .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) - .build(); - SchBaseTask task = new SchBaseTask(); - BeanUtils.copyProperties(schBaseTaskVo, task); - taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { - this.immediateNotifyAcs(null); - } - return task.getTask_id(); - } - - @Override - @Transactional - public void forceFinish(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); - } - - - - - @Override - public void cancel(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (schBaseTask == null) { - throw new BadRequestException("空载具缓存位 -> 输送线取消接口任务号为空!"); - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, DateUtil.now()); - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark,"任务被用户:" + schBaseTask.getUpdate_optname() + "在:" +DateUtil.now() + "强制取消。"); - taskService.update(null,updateWrapper); - } - - - - - - - - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java deleted file mode 100644 index 3eb7e99..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ /dev/null @@ -1,286 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -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.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; -import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; -import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.auto.AutoSendVehicleToDjq; -import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; -import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.common.utils.RedisUtils; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.util.TaskUtil; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * 6 目标装箱对接位, 装箱区 -> 装箱对接位,桁架任务 - * - * @author gbx - * @since 2024-02-01 - */ -@Service() -@Slf4j -public class ZxDjwTask extends AbstractAcsTask { - - - @Resource - @Qualifier("threadPoolExecutor") - private ThreadPoolExecutor pool; - - @Autowired - private AutoSendVehicleToDjq autoSendVehicleToDjq; - @Autowired - private BstIvtBoxinfoMapper bstIvtBoxinfoMapper; - @Autowired - private IpdmBiSubpackagerelationService subpackageRelationService; - @Autowired - private IschBaseTaskService taskService; - @Autowired - private IbstIvtPackageinfoivtService packageinfoivtService; - @Autowired - private IPdmBiSlittingproductionplanService productionPlanService; - - private final String THIS_CLASS = ZxDjwTask.class.getName(); - - @Override - public List addTask() { - ArrayList resultList = new ArrayList<>(); - List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) - .eq(SchBaseTask::getIs_delete, 0) - ); - taskList.forEach(r -> { - AcsTaskDto dto = AcsTaskDto.builder() - .ext_task_id(r.getTask_id().toString()) - .task_code(r.getTask_code()) - .task_type(r.getAcs_task_type()) - .start_device_code(r.getPoint_code1()) - .next_device_code(r.getPoint_code2()) - .start_device_code2(r.getPoint_code3()) - .next_device_code2(r.getPoint_code4()) - .vehicle_code(r.getVehicle_code()) - .agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")) - .interaction_json(JSON.parseObject(r.getRequest_param())) - .priority(r.getPriority()) - .remark(r.getRemark()) - .product_area(r.getProduct_area()) - .class_type(IOSEnum.ACS_TYPE.code("装箱入库行架任务")) - //.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) - //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) - //.dtl_type(r.getDtl_type()) - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - String now = DateUtil.now(); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, now); - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); - } - if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - List containerInfo = productionPlanService.list(new LambdaUpdateWrapper() - .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code()).eq(PdmBiSlittingproductionplan::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))); - if (containerInfo == null) { - throw new BadRequestException("找不到子卷信息!"); - } else if (StrUtil.isEmpty(containerInfo.get(0).getContainer_name())) { - throw new BadRequestException("子卷号不能为空!"); - } - //1.更改任务状态为完成 - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //2.改变起点点位状态 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //3.判断是否最后一个子卷:相同木箱号的子卷包装关系如果生成状态:0,且个数等于1且子卷号等于当前载具号,就是最后一个子卷 - List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0")); - if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(schBaseTask.getVehicle_code())) { - //4.更改木箱信息为已装箱:1 - BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1")); - if (bstIvtBoxinfo == null) { - throw new BadRequestException("子卷包装关系为已装箱或找该任务的木箱号不存在!"); - } - bstIvtBoxinfo.setIs_packing(IOSEnum.IS_NOTANDYES.code("是")); - bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo); - //5.最后一个子卷,清除装箱位木箱信息 - packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code2())); - //装箱位所在区域 - String block = packageinfoivtService.list(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_code,schBaseTask.getPoint_code2())).get(0).getBlock(); - //6.创建装箱区->待检区或管制区补空任务 - callingVehicleToDjqOrGzq(Integer.parseInt(packagerelationList.get(0).getQuanlity_in_box().toString()),block); - } - //7.改变子卷包装状态为已装箱:1 - PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService - .getOne(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false); - pdmBiSubpackagerelation.setStatus(IOSEnum.IS_NOTANDYES.code("是")); - subpackageRelationService.updateById(pdmBiSubpackagerelation); - } - // 取消 - if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { - throw new BadRequestException("任务已执行不能取消"); - } - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); - } - taskService.update(null, updateWrapper); - } - - /** - * 装箱任务完成,异步间隔调用装箱区->待检区补空任务 - * ... - */ - public void callingVehicleToDjqOrGzq(Integer callingNum,String block) { - CompletableFuture.runAsync(() -> { - try { - for (int i = 0; i < callingNum; i++) { - try { - //9秒执行一次 - TimeUnit.SECONDS.sleep(9L); - autoSendVehicleToDjq.sendVehicleToDjqOrGzq(IOSEnum.IS_NOTANDYES.code("是"),block); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - e.printStackTrace(); - } - } - } catch (Exception e) { - log.error("子卷装箱异常,子卷装箱完成,空载具->待检区或管制区任务创建失败:" + e); - } - }, pool); - } - - - @Override - @Transactional - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String taskType = form.getString("task_type"); - if (StrUtil.isBlank(taskType)) { - throw new BadRequestException("业务类型不能为空"); - } - String vehicleCode = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicleCode)) { - throw new BadRequestException("载具号不能为空"); - } - String pointCode1 = form.getString("point_code1"); - if (StrUtil.isBlank(pointCode1)) { - throw new BadRequestException("起点不能为空"); - } - String pointCode2 = form.getString("point_code2"); - if (StrUtil.isBlank(pointCode2)) { - throw new BadRequestException("下一点不能为空"); - } - //是否立即下发 - boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); - SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() - .task_type(taskType) - .point_code1(pointCode1) - .point_code2(pointCode2) - .vehicle_code(vehicleCode) - .vehicle_code2(form.getString("vehicle_code2")) - .point_code3(form.getString("point_code3")) - .point_code4(form.getString("point_code4")) - .request_param(form.getString("request_param")) - .task_id(org.nl.common.utils.IdUtil.getStringId()) - .task_code(org.nl.common.utils.IdUtil.getStringId()) - .task_group_id(form.getString("task_group_id")) - .handle_class(THIS_CLASS) - .create_id(SecurityUtils.getCurrentUserId()) - .create_name(SecurityUtils.getCurrentUsername()) - .create_time(DateUtil.now()) - .is_send(isSend ? "1" : "0") - .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) - .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) - .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area")) - .build(); - SchBaseTask task = new SchBaseTask(); - BeanUtils.copyProperties(schBaseTaskVo, task); - taskService.save(task); - //如果目标点位没有空位先创建不下发 - if (isSend) { - this.immediateNotifyAcs(null); - } - return task.getTask_id(); - } - - - @Override - @Transactional(rollbackFor = Exception.class) - public void forceFinish(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; - updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode()); - } - - - @Override - public void cancel(String taskId) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false); - if (schBaseTask == null) { - throw new BadRequestException("装箱区 -> 装箱对接位取消接口任务号为空!"); - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId) - .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId()) - .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername()) - .set(SchBaseTask::getUpdate_time, DateUtil.now()); - //任务被标记为取消 - updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); - updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); - updateWrapper.set(SchBaseTask::getRemark, "任务被用户:" + schBaseTask.getUpdate_optname() + "在:" +DateUtil.now() + "强制取消。"); - taskService.update(null, updateWrapper); - } - - - - - - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index 0ddbb15..519f236 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -51,8 +51,7 @@ import java.util.List; @Slf4j public class ZxqTask extends AbstractAcsTask { - @Resource - private ZxDjwTask zxDjwTask; + @Resource @@ -123,13 +122,7 @@ public class ZxqTask extends AbstractAcsTask { } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------"); - // PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() - // .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code())); - // if (containerInfo == null) { - // throw new BadRequestException("该子卷信息不存在!"); - // } else if (StrUtil.isEmpty(containerInfo.getContainer_name())) { - // throw new BadRequestException("子卷号不能为空!"); - // } + //1.改变起点点位状态 //提交检查,后续需要acs反馈取货完成信号,在二次分配中清除点位库存 packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); @@ -137,11 +130,8 @@ public class ZxqTask extends AbstractAcsTask { packageinfoivtService.update(null, new UpdateWrapper().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); //3.更改任务状态为完成 updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); - //4.判断是否存在任务组任务 - //提交检查,后续需要acs反馈取货完成信号,在二次分配中处理任务组逻辑 - packageinfoivtService.handleGroupTask(schBaseTask); - //5.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务,否,什么都不做 - //zxqToZxw(schBaseTask); + + } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteShiftingTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteShiftingTask.java deleted file mode 100644 index be575c2..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteShiftingTask.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area.auto; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.List; -import java.util.concurrent.TimeUnit; - - -@Slf4j -@Component -@RequiredArgsConstructor -public class AutoExecuteShiftingTask { - private final String THIS_CLASS = AutoExecuteShiftingTask.class.getName(); - - @Resource - private RedissonClient redissonClient; - @Resource - private ShiftingTask shiftingTask; - @Resource - private IschBaseTaskService taskService; - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - //自动执行等待的桁架任务 - public void run() { - try { - this.executeShiftingTask(); - }catch (Exception ex){ - log.error(ex.getMessage()); - } - } - - /** - * 执行不满足条件的移库任务 - */ - @SneakyThrows - public void executeShiftingTask() { - log.info(THIS_CLASS + "-移库任务定时任务开始执行扫描。"); - RLock lock = redissonClient.getLock(THIS_CLASS); - boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLock) { - List taskList = taskService.list( - new LambdaQueryWrapper() - .or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) - .and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")))) - .or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) - .and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务")) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")))) - ); - for (SchBaseTask task : taskList) { - if (task != null) { - SchBaseTask groupTask = taskService.getOne(new LambdaQueryWrapper() - .eq(SchBaseTask::getTask_group_id, task.getTask_id()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("否")) - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); - //前置任务完成,才执行移库任务 - if (groupTask != null) { - return; - } - String taskType = task.getTask_type(); - String pointCode2; - BstIvtPackageinfoivt newIvt = packageinfoivtService.getOne(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getPoint_code, task.getPoint_code1())); - if (PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务").equals(taskType)) { - pointCode2 = packageinfoivtService.getDjqShiftingPoint(newIvt, true); - task.setPoint_code2(pointCode2); - if (StringUtils.isNotBlank(pointCode2)) { - task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - taskService.updateById(task); - shiftingTask.immediateNotifyAcs(null); - log.info("待检区移库任务编号为:" + task.getTask_code() + ",任务状态为:" + task.getTask_status() + "下发完成。"); - } - } else if (PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务").equals(taskType)) { - pointCode2 = packageinfoivtService.getDjqShiftingPoint(newIvt, false); - task.setPoint_code2(pointCode2); - if (StringUtils.isNotBlank(pointCode2)) { - task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - taskService.updateById(task); - shiftingTask.immediateNotifyAcs(null); - log.info("管制区移库任务编号为:" + task.getTask_code() + ",任务状态为:" + task.getTask_status() + "下发完成。"); - } - } - } - } - } else { - log.info("执行不满足条件的移库任务正在创建被锁住。"); - } - } finally { - if (lock.isLocked() && lock.isHeldByCurrentThread()) { - lock.unlock(); - } - } - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java deleted file mode 100644 index 074e2e3..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area.auto; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask; -import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - - -@Slf4j -@Component -@RequiredArgsConstructor -public class AutoExecuteWaitTask extends Prun{ - private final String THIS_CLASS = AutoExecuteWaitTask.class.getName(); - - @Resource - private RedissonClient redissonClient; - @Resource - private MzhcwTask mzhcwTask; - - @Resource - private SsxDjwTask ssxDjwTask; - @Resource - private IschBaseTaskService taskService; - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - //自动执行等待的桁架任务 - @Autowired - public void run() { - try { - this.executeWaitTask(); - }catch (Exception ex){ - log.error(ex.getMessage()); - } - } - - - /** - * 放满与取空桁架任务 - */ - @SneakyThrows - public void executeWaitTask() { - log.info(THIS_CLASS+"-放满与取空桁架定时任务开始执行扫描。"); - RLock lock = redissonClient.getLock(THIS_CLASS); - boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLock) { - List taskList = taskService.list( - new LambdaQueryWrapper() - .or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode()) - .and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")))) - .or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) - .and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")))) - ); - for (SchBaseTask task : taskList) { - if (task != null) { - String taskType = task.getTask_type(); - if (PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位").equals(taskType)) { - //校验任务是否存在 - List taskTypes = new ArrayList<>(Collections.singletonList(taskType)); - List existTaskList = taskService.getExistTasks(taskTypes); - //如果有就不创建,没有就创建 - if (existTaskList.size() > 1) { - throw new BadRequestException("存在多个子卷号相同的任务!"); - } - List mzPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用") - ).eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) - .orderByDesc(BstIvtPackageinfoivt::getSort_seq)); - if (ObjectUtils.isEmpty(mzPointList)) { - return; - } - task.setPoint_code2(mzPointList.get(0).getPoint_code()); - task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - taskService.updateById(task); - mzhcwTask.immediateNotifyAcs(null); - } else if (PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)").equals(taskType)) { - //校验任务是否存在 - List taskTypes = new ArrayList<>(Arrays.asList(taskType, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))); - List existTask = taskService.getExistTasks(taskTypes); - //先发输送线->满轴位任务,如果有输送线->满轴位任务未完成任务,暂不下发放空(空载具缓存位->输送线)任务 - List existTask1 = existTask.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(existTask1)) { - return; - } - //过滤未分配的补空载具任务 - List existTask2 = existTask.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(existTask2)) { - //已二次分配过的任务未完成 - if (existTask.stream().anyMatch(r -> r.getResponse_param().equals(IOSEnum.IS_NOTANDYES.code("是")))) { - throw new BadRequestException("存在已二次分配过点位的补空载具任务未完成!"); - } - } - List kzjPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用") - ).eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - if (ObjectUtils.isEmpty(kzjPointList)) { - return; - } - task.setPoint_code1(kzjPointList.get(0).getPoint_code()); - task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); - taskService.updateById(task); - ssxDjwTask.immediateNotifyAcs(null); - } - } - } - } else { - log.info("放满与取空桁架任务正在创建被锁住。"); - } - } finally { - if (lock.isLocked() && lock.isHeldByCurrentThread()) { - lock.unlock(); - } - } - } - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java index 13b82b8..f956b7b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java @@ -1,8 +1,7 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; + import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -14,7 +13,6 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.GzqTask; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -40,8 +38,7 @@ public class AutoSendDjqToGzq extends Prun{ private RedissonClient redissonClient; @Resource private GzqTask gzqTask; - @Resource - private ShiftingTask shiftingTask; + @Resource private IbstIvtPackageinfoivtService packageinfoivtService; @Resource @@ -70,30 +67,30 @@ public class AutoSendDjqToGzq extends Prun{ boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { - //待检区有管制品且过滤未完成任务 - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - List djqPackageinfoivtList2 = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - if (CollectionUtils.isEmpty(djqPackageinfoivtList)) { + List taskTypes = new ArrayList<>(Collections.singletonList(PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"))); + List existTask = taskService.getExistTasks(taskTypes); + if (existTask.size() > 2) { return; } - if (!CollectionUtils.isEmpty(djqPackageinfoivtList2)){ - djqPackageinfoivtList.addAll(djqPackageinfoivtList2); - } - //管制区有空位且过滤未完成任务 - List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - //todo 新增NG卷放置临时管制区135136,只取空不补空 - List ivtLists = - gzqPackageinfoivtList.stream() - .filter(r -> r.getPoint_code().equals("ZXQ_135") || r.getPoint_code().equals("ZXQ_136")) - .collect(Collectors.toList()); - if (ObjectUtils.isEmpty(ivtLists)) { - log.info("待检区->管制区agv自动搬运任务暂无可用空位,子卷号为:" + djqPackageinfoivtList.get(0).getContainer_name()); - throw new BadRequestException("待检区->管制区agv自动搬运任务暂无可用空位,子卷号为:" + djqPackageinfoivtList.get(0).getContainer_name()); - } JSONObject task = new JSONObject(); - task.put("point_code2", ivtLists.get(0).getPoint_code()); + + //待检区有管制品且过滤未完成任务 + List selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品")); + if (ObjectUtils.isEmpty(selectEmpPoints)) { + return; + } + //管制区为空位且过滤未完成任务 + List gzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (ObjectUtils.isEmpty(gzqPackageinfoivtList)) { + return; + } + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - createTask(djqPackageinfoivtList, task); + task.put("vehicle_code", selectEmpPoints.get(0).getContainer_name()); + task.put("point_code1", selectEmpPoints.get(0).getPoint_code()); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + task.put("point_code2", gzqPackageinfoivtList.get(0).getPoint_code()); + gzqTask.createTask(task); } else { log.info("待检区->管制区任务正在创建被锁住。"); } @@ -103,129 +100,4 @@ public class AutoSendDjqToGzq extends Prun{ } } } - - - - - /** - * 创建任务 - */ - private void createTask(List djqPackageinfoivtList, JSONObject task) { - // 浅货位和深货位 - Map> ivtMap = djqPackageinfoivtList.stream() - .collect(Collectors.partitioningBy(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位")))); - List shallowIvtList = ivtMap.get(true); - List deepIvtList = ivtMap.get(false); - if (ObjectUtils.isNotEmpty(shallowIvtList)) { - // 优先处理浅货位 - handleTaskForShallow(task, shallowIvtList.get(0)); - } else if (ObjectUtils.isNotEmpty(deepIvtList)) { - // 处理深货位 - handleTaskForDeep(task, deepIvtList.get(0)); - } - } - - /** - * 处理浅货位 - */ - private void handleTaskForShallow(JSONObject task, BstIvtPackageinfoivt shallowIvt) { - task.put("vehicle_code", shallowIvt.getContainer_name()); - task.put("point_code1", shallowIvt.getPoint_code()); - gzqTask.createTask(task); - } - - /** - * 处理深货位 - */ - private void handleTaskForDeep(JSONObject task, BstIvtPackageinfoivt deepIvt) { - String pointCode1 = deepIvt.getPoint_code(); - List groupIvtList = packageinfoivtService.list(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getCol_num, deepIvt.getCol_num())) - .stream() - .filter(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))) - .collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(groupIvtList)) { - BstIvtPackageinfoivt shallowIvt = groupIvtList.get(0); - //处理深货位对应浅货位的状态 - handleShallowIvtStatus(task, deepIvt, shallowIvt, pointCode1); - } - } - - - /** - * 处理深货位对应浅货位的状态 - */ - private void handleShallowIvtStatus(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1) { - Set pointCodes2 = Collections.singleton(shallowIvt.getPoint_code()); - //浅货位状态为空,查询该货位是否存在运行中的放货任务 - //如果不存在,则直接创建主任务 - //如果存在,则1.建立确定起点的主任务,2.运行中的放货任务完成后,再让下发执行主任务 - //浅货位状态不为空,查询该货位是否存在运行中的取货任务 - //如果不存在,1.创建主任务不下发;2.创建移库任务,绑定主任务关联关系task_group_id,等待移库任务完成后,再下发主任务 - //如果存在,不需要移库,绑定与主任务关联关系task_group_id,等待运行中的取货任务完成后,再让下发执行主任务 - List existTaskList = shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空")) - ? bstIvtPackageinfoivtMapper.getTaskList(null, pointCodes2, null, null) - : bstIvtPackageinfoivtMapper.getTaskList(pointCodes2, null, null, null); - //创建搬运任务 - task.put("vehicle_code", deepIvt.getContainer_name()); - task.put("point_code1", pointCode1); - //不存在搬运任务 - if (ObjectUtils.isEmpty(existTaskList)) { - //浅库位状态为空 - if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - gzqTask.createTask(task); - } else { - createMainTask(task, deepIvt, shallowIvt, pointCode1, null); - } - //存在搬运任务 - } else { - //浅库位状态为空 - if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - createMainTask(task, deepIvt, shallowIvt, pointCode1, existTaskList.get(0)); - } else { - //浅库位状态不为空 - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, existTaskList.get(0).getTask_id()); - updateWrapper.set(SchBaseTask::getTask_group_id, gzqTask.createTask(task)); - taskService.update(null, updateWrapper); - } - } - } - - /** - * 创建搬运和移库任务 - */ - private void createMainTask(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1, SchBaseTask existTask) { - String taskId; - String shiftingTaskId; - task.put("vehicle_code", deepIvt.getContainer_name()); - task.put("point_code1", pointCode1); - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - taskId = gzqTask.createTask(task); - //获取移库任务目标点 - String pointCode4 = packageinfoivtService.getDjqShiftingPoint(shallowIvt,true); - JSONObject task1 = new JSONObject(); - if (existTask != null) { - task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.SURE_END.getCode()); - } else { - task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode()); - } - task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")); - task1.put("vehicle_code", shallowIvt.getContainer_name()); - task1.put("point_code1", shallowIvt.getPoint_code()); - task1.put("point_code2", pointCode4); - task1.put("task_group_id", taskId); - task1.put("material_code", shallowIvt.getIvt_status()); - shiftingTaskId = shiftingTask.createTask(task1); - if (existTask != null) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, existTask.getTask_id()); - updateWrapper.set(SchBaseTask::getTask_group_id, shiftingTaskId); - taskService.update(null, updateWrapper); - } - } - - - } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java index 93204dd..b27ac4d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendGzqToDjq.java @@ -9,8 +9,9 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -20,6 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -36,8 +39,10 @@ public class AutoSendGzqToDjq extends Prun{ private RedissonClient redissonClient; @Autowired private DjqTask djqTask; - @Autowired - private ShiftingTask shiftingTask; + + @Resource + private IschBaseTaskService taskService; + @Autowired private IbstIvtPackageinfoivtService packageinfoivtService; @@ -61,54 +66,31 @@ public class AutoSendGzqToDjq extends Prun{ boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { - //临时管制区135、136->待检区送空载具任务 - JSONObject task1 = new JSONObject(); - String pointCode3; - List gzqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); - //todo 新增NG卷放置临时管制区135136,只取空不补空 - List ivtLists = - gzqIvtList.stream() - .filter(r -> r.getPoint_code().equals("ZXQ_135") || r.getPoint_code().equals("ZXQ_136")) - .collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(ivtLists)) { - pointCode3 = ivtLists.get(0).getPoint_code(); - if (StringUtils.isNotBlank(pointCode3)) { - List packageList; - packageList = packageinfoivtService.checkEndPointTask( - PackageInfoIvtEnum.POINT_STATUS.code("待检区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"), - PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), - PackageInfoIvtEnum.SORT_TYPE.code("升序"), - "" - ); - if (ObjectUtils.isNotEmpty(packageList)) { - task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); - task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - task1.put("point_code1", pointCode3); - task1.put("request_param", "98"); - createTask(packageList, task1); - } - } - }else { - //管制区->待检区送合格品任务 - List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); - if (ObjectUtils.isEmpty(gzqPackageinfoivtList)) { - return; - } - //待检区有空位且过滤未完成任务 - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); - if (ObjectUtils.isEmpty(djqPackageinfoivtList)) { - log.info("管制区->待检区agv自动搬运任务暂无可用空位,子卷号为:" + gzqPackageinfoivtList.get(0).getContainer_name()); - throw new BadRequestException("管制区->待检区agv自动搬运任务暂无可用空位,子卷号为:" + gzqPackageinfoivtList.get(0).getContainer_name()); - } + + List taskTypes = new ArrayList<>(Collections.singletonList(PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区"))); + List existTask = taskService.getExistTasks(taskTypes); + if (existTask.size() > 2) { + return; + } + + //待检区有空位且过滤未完成任务 + List selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (ObjectUtils.isEmpty(selectEmpPoints)) { + return; + } + + //管制区为空载具且过滤未完成任务 + List gzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + if (ObjectUtils.isNotEmpty(gzqPackageinfoivtList)) { JSONObject task = new JSONObject(); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); - task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - //区分管制品重新检测为合格品 - task.put("request_param", "99"); - task.put("vehicle_code", gzqPackageinfoivtList.get(0).getContainer_name()); - task.put("point_code1", gzqPackageinfoivtList.get(0).getPoint_code()); - createTask(djqPackageinfoivtList, task); + createTask(task, gzqPackageinfoivtList, selectEmpPoints,"98"); + } + + //管制区为合格品具且过滤未完成任务 + List gzqPackageinfoivtList2 = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品")); + if (ObjectUtils.isNotEmpty(gzqPackageinfoivtList2)) { + JSONObject task = new JSONObject(); + createTask(task, gzqPackageinfoivtList2, selectEmpPoints,"99"); } } else { log.info("管制区->待检区任务正在创建被锁住。"); @@ -120,6 +102,16 @@ public class AutoSendGzqToDjq extends Prun{ } } + private void createTask(JSONObject task, List gzqPackageinfoivtList, List selectEmpPoints, String number) { + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); + task.put("vehicle_code", gzqPackageinfoivtList.get(0).getContainer_name()); + task.put("point_code1", gzqPackageinfoivtList.get(0).getPoint_code()); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + task.put("request_param", number); + task.put("point_code2", selectEmpPoints.get(0).getPoint_code()); + djqTask.createTask(task); + } + private void createTask(List djqPackageinfoivtList, JSONObject task) { String pointCode2 = null; @@ -172,7 +164,7 @@ public class AutoSendGzqToDjq extends Prun{ task1.put("point_code2", deepPointCode); task1.put("task_group_id", taskId); task1.put("material_code", groupIvtList.get(0).getIvt_status()); - shiftingTask.createTask(task1); + return; } if (pointCode2 != null) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java index 930e751..829573d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java @@ -1,7 +1,6 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -11,10 +10,7 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.manage.TaskStatusEnum; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Component; @@ -23,9 +19,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; @Slf4j @@ -41,8 +35,6 @@ public class AutoSendMzToDjq { @Resource private DjqTask djqTask; - @Resource - private ShiftingTask shiftingTask; @Resource @@ -73,8 +65,7 @@ public class AutoSendMzToDjq { } JSONObject task = new JSONObject(); //满轴有子卷且过滤未完成任务 - - List mzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷")); + List mzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("子卷缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷")); if (ObjectUtils.isEmpty(mzqPackageinfoivtList)) { return; } @@ -84,13 +75,11 @@ public class AutoSendMzToDjq { log.error(THIS_CLASS+"满轴->待检区agv自动搬运任务暂无可用空位,子卷号为:" + mzqPackageinfoivtList.get(0).getContainer_name()); return; } - task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配")); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name()); - task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type())); - //如果浅库位和深库位都有空位,且为一组,优先深库位 + task.put("point_code1", mzqPackageinfoivtList.get(0).getPoint_code()); task.put("point_code2", selectEmpPoints.get(0).getPoint_code()); - task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code()); djqTask.createTask(task); } else { log.info("满轴->待检区agv自动搬运任务正在创建被锁住。"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java index 74f5d2d..f27cb7d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java @@ -1,5 +1,6 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; +import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -15,10 +16,7 @@ import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -54,9 +52,7 @@ public class AutoSendToZxq extends Prun{ } - /** - * 二次分配任务 - */ + @SneakyThrows public void sendDjqToZxq() { log.info(THIS_CLASS + "-待检区->装箱区定时任务开始执行扫描。"); @@ -64,27 +60,30 @@ public class AutoSendToZxq extends Prun{ boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { - //存子卷号为合格品的移库任务,则让移库任务先完成,再创建搬运任务 - List existTask = taskService.getExistTasks(Collections.singletonList(PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务"))); - if (existTask.stream().anyMatch(r -> r.getMaterial_code().equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品")))) { + + JSONObject task = new JSONObject(); + + //待检区有库位为合格品且过滤未完成任务 + List selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品")); + if (ObjectUtils.isEmpty(selectEmpPoints)) { return; } - //装箱区有空位,去待检区消费合格品子卷 - List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask( - PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), - PackageInfoIvtEnum.IVT_STATUS.code("空"), - PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), "", ""); - if (ObjectUtils.isNotEmpty(bstIvtPackageinfoivtList)) { - Map> ivtList = bstIvtPackageinfoivtList.stream() - .collect(Collectors.groupingBy( - BstIvtPackageinfoivt::getBlock, - LinkedHashMap::new, - Collectors.mapping(BstIvtPackageinfoivt::getPoint_code, Collectors.toList()) - )); - taskQueue.processTasks(ivtList); + + //装箱区有空位且过滤未完成任务 + List zxqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (ObjectUtils.isEmpty(zxqPackageinfoivtList)) { + return; } + + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); + task.put("vehicle_code", selectEmpPoints.get(0).getContainer_name()); + task.put("point_code1", zxqPackageinfoivtList.get(0).getPoint_code()); + task.put("point_code2", selectEmpPoints.get(0).getPoint_code()); + zxqTask.createTask(task); + } else { - log.info("满轴->待检区agv自动搬运任务正在创建被锁住。"); + log.info("待检区->装箱区agv自动搬运任务正在创建被锁住。"); } } finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java index 80c383d..e6b03af 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java @@ -1,23 +1,15 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.SendDjqKzjTask; -import org.nl.b_lms.sch.tasks.first_floor_area.SendGzqKzjTask; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.manage.TaskStatusEnum; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -25,9 +17,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; -import java.util.Map; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; @Slf4j @@ -40,12 +30,11 @@ public class AutoSendVehicleToDjq extends Prun{ @Resource private RedissonClient redissonClient; + + @Resource private SendDjqKzjTask sendDjqKzjTask; - @Resource - private SendGzqKzjTask sendGzqKzjTask; - @Resource - private ShiftingTask shiftingTask; + @Resource private IbstIvtPackageinfoivtService packageinfoivtService; @@ -54,7 +43,7 @@ public class AutoSendVehicleToDjq extends Prun{ @Autowired public void run() { try { - this.sendVehicleToDjqOrGzq(IOSEnum.IS_NOTANDYES.code("否"),null); + this.sendVehicleToDjqOrGzq(); }catch (Exception ex){ log.error(ex.getMessage()); } @@ -62,36 +51,30 @@ public class AutoSendVehicleToDjq extends Prun{ } @SneakyThrows - public void sendVehicleToDjqOrGzq(String isCalling, String block) { - log.info(THIS_CLASS + "-装箱区->待检区或管制区补空任务开始执行扫描。"); + public void sendVehicleToDjqOrGzq() { + log.info(THIS_CLASS + "-装箱区->待检区补空任务开始执行扫描。"); RLock lock = redissonClient.getLock("todjq"); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { - if (isCalling.equals(IOSEnum.IS_NOTANDYES.code("否"))) { - //存在正在执行的行架任务 - List taskList = taskService.list(new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) - .eq(SchBaseTask::getTask_type, "010909")); - if (ObjectUtils.isNotEmpty(taskList)) { - return; - } - } - //存在装箱区有空载具的点位 - List zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); - if (ObjectUtils.isEmpty(zxqIvtList)) { + + JSONObject task = new JSONObject(); + //装箱区有空载具且过滤未完成任务 + List zxqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + if (ObjectUtils.isEmpty(zxqPackageinfoivtList)) { return; } - //按块执行取空任务 - if (isCalling.equals(IOSEnum.IS_NOTANDYES.code("是"))) { - if (StringUtils.isNotBlank(block)) { - zxqIvtList = zxqIvtList.stream().filter(r -> r.getBlock().equals(block)).collect(Collectors.toList()); - } + //待检区有库位为空位且过滤未完成任务 + List selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (ObjectUtils.isEmpty(selectEmpPoints)) { + log.error(THIS_CLASS+"装箱区->待检区补空agv自动搬运任务暂无可用空位"); + return; } - JSONObject task = new JSONObject(); - task.put("point_code1", zxqIvtList.get(0).getPoint_code()); - getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); + task.put("point_code1", zxqPackageinfoivtList.get(0).getPoint_code()); + task.put("point_code2", selectEmpPoints.get(0).getPoint_code()); + sendDjqKzjTask.createTask(task); } else { log.info("装箱区->待检区或管制区补空载具任务正在创建被锁住。"); } @@ -103,110 +86,10 @@ public class AutoSendVehicleToDjq extends Prun{ } - public void getPointCode(JSONObject task, String taskType) { - List packageList; - if (taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"))) { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); - if (ObjectUtils.isEmpty(packageList)) { - //todo 新增NG卷放置临时管制区135136,只取空不补空 - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); - packageList = packageList.stream() - .filter(r -> !r.getPoint_code().equals("ZXQ_135") && !r.getPoint_code().equals("ZXQ_136")) - .collect(Collectors.toList()); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); - } else { - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); - } - } else { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); - packageList = packageList.stream() - .filter(r -> !r.getPoint_code().equals("ZXQ_135") && !r.getPoint_code().equals("ZXQ_136")) - .collect(Collectors.toList()); - if (ObjectUtils.isEmpty(packageList)) { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); - } else { - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); - } - } - if (ObjectUtils.isNotEmpty(packageList)) { - task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - createTask(packageList, task); - } else { - log.info("装箱区->待检区或管制区自动搬运空载具任务,待检区或管制区暂无可用空位"); - throw new BadRequestException("装箱区->待检区或管制区自动搬运空载具任务,待检区或管制区暂无可用空位"); - } - } - private void createTask(List packageList, JSONObject task) { - String pointCode2 = null; - Map> ivtMap = packageList.stream() - .collect(Collectors.partitioningBy(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位")))); - List shallowIvtList = ivtMap.get(true); - List deepIvtList = ivtMap.get(false); - //如果浅库位和深库位都有空位,且为一组,优先深库位 - if (ObjectUtils.isNotEmpty(shallowIvtList) && ObjectUtils.isNotEmpty(deepIvtList)) { - // 筛选出浅库位为空且对应的深库位也为空的库位的point_code - pointCode2 = shallowIvtList.stream() - .filter(shallowIvt -> deepIvtList.stream() - .anyMatch(deepIvt -> shallowIvt.getCol_num().equals(deepIvt.getCol_num()))) - .findFirst() - .flatMap(shallowIvt -> deepIvtList.stream() - .filter(deepIvt -> shallowIvt.getCol_num().equals(deepIvt.getCol_num())) - .findFirst() - .map(BstIvtPackageinfoivt::getPoint_code)) - .orElse(null); - if (pointCode2 == null) { - //如果不同一组,则直接浅库位 - pointCode2 = shallowIvtList.get(0).getPoint_code(); - } - } else if (ObjectUtils.isNotEmpty(shallowIvtList)) { - //如果只有浅库位有空位,则直接取浅库位的编号为终点 - pointCode2 = shallowIvtList.get(0).getPoint_code(); - } - //如果只有深库位有空位,需要发起浅库位->深库位的移库任务 - else if (ObjectUtils.isNotEmpty(deepIvtList)) { - //取出深库位的编号为任务终点 - String deepPointCode = deepIvtList.get(0).getPoint_code(); - //查询对应浅库位的编号为任务起点 - List groupIvtList = packageinfoivtService.list(new LambdaQueryWrapper().eq(BstIvtPackageinfoivt::getCol_num, deepIvtList.get(0).getCol_num())).stream().filter(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))).collect(Collectors.toList()); - if (ObjectUtils.isEmpty(groupIvtList)) { - log.info(deepIvtList.get(0).getPoint_code() + "找不到对应的浅货位,请检查点位库存信息!"); - throw new BadRequestException(deepIvtList.get(0).getPoint_code() + "找不到对应的浅货位,请检查点位库存信息!"); - } - pointCode2 = groupIvtList.get(0).getPoint_code(); - //主任务只确定终点 - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - task.put("point_code2", pointCode2); - String taskId; - //移库任务 - JSONObject task1 = new JSONObject(); - if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"))) { - taskId = sendDjqKzjTask.createTask(task); - task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")); - } else { - taskId = sendGzqKzjTask.createTask(task); - task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务")); - } - task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - task1.put("vehicle_code", groupIvtList.get(0).getContainer_name()); - task1.put("point_code1", pointCode2); - task1.put("point_code2", deepPointCode); - task1.put("task_group_id", taskId); - task1.put("material_code", groupIvtList.get(0).getIvt_status()); - shiftingTask.createTask(task1); - return; - } - if (pointCode2 != null) { - task.put("point_code2", pointCode2); - if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"))) { - sendDjqKzjTask.createTask(task); - } else { - sendGzqKzjTask.createTask(task); - } - } - } + + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java index 0bf2ccf..57f19f3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java @@ -1,35 +1,22 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.DjqToKzjhcwTask; -import org.nl.b_lms.sch.tasks.first_floor_area.GzqToKzjhcwTask; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.sch.manage.TaskStatusEnum; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; @Slf4j @@ -42,14 +29,11 @@ public class AutoSendVehicleToKzj extends Prun{ private RedissonClient redissonClient; @Resource private DjqToKzjhcwTask djqToKzjhcwTask; - @Resource - private GzqToKzjhcwTask gzqToKzjhcwTask; - @Resource - private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper; + + @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private ShiftingTask shiftingTask; + @Resource private IschBaseTaskService taskService; @@ -64,34 +48,34 @@ public class AutoSendVehicleToKzj extends Prun{ } - /** - * 二次分配任务 - */ + @SneakyThrows public void toKzjHcw() { - log.info(THIS_CLASS + "-待检区或管制区->空载具缓存位补空任务开始执行扫描。"); + log.info(THIS_CLASS + "-待检区->子卷缓存位补空任务开始执行扫描。"); RLock lock = redissonClient.getLock(THIS_CLASS); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { - if (!tryLock) { - log.info("待检区或管制区->空载具缓存位补空任务正在创建被锁住。"); - return; - } - List taskTypes = new ArrayList(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))); - List existTask = this.taskService.getExistTasks(taskTypes); - if (existTask.size() <= 1) { - List empPoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空")); - List vehiclePoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); - if (!CollectionUtils.isEmpty(empPoints) && !CollectionUtils.isEmpty(vehiclePoints) && existTask.size() < empPoints.size()) { - JSONObject task = new JSONObject(); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配")); - task.put("point_code1", vehiclePoints.get(0).getPoint_code()); - task.put("point_code2", this.packageinfoivtService.getWaitPoint(empPoints.get(0).getBlock(), empPoints.get(0).getWait_point_type())); - task.put("point_code3", empPoints.get(0).getPoint_code()); - this.djqToKzjhcwTask.createTask(task); - } + if (tryLock) { + + JSONObject task = new JSONObject(); + //待检区有空载具且过滤未完成任务 + List djqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + if (ObjectUtils.isEmpty(djqPackageinfoivtList)) { + return; } + //子卷缓存位为空位且过滤未完成任务 + List selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("子卷缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (ObjectUtils.isEmpty(selectEmpPoints)) { + return; + } + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); + task.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code()); + task.put("point_code2", selectEmpPoints.get(0).getPoint_code()); + djqToKzjhcwTask.createTask(task); + } else { + log.info("待检区->满轴缓存位补空任务正在创建被锁住。"); + } } finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); @@ -100,163 +84,10 @@ public class AutoSendVehicleToKzj extends Prun{ } - private void getPointCode(JSONObject task, String taskType) { - List packageList; - if (taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))) { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - if (ObjectUtils.isEmpty(packageList)) { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")); - } else { - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - } - } else { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区")); - if (ObjectUtils.isEmpty(packageList)) { - packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); - } else { - task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")); - } - } - if (ObjectUtils.isNotEmpty(packageList)) { - createTask(packageList, task); - } else { - log.info("待检区或管制区->空载具缓存位补空任务创建失败,暂无空载具。"); - throw new BadRequestException("待检区或管制区->空载具缓存位补空任务创建失败,暂无空载具。"); - } - } - - /** - * 创建任务 - */ - private void createTask(List djqPackageinfoivtList, JSONObject task) { - // 浅货位和深货位 - Map> ivtMap = djqPackageinfoivtList.stream() - .collect(Collectors.partitioningBy(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位")))); - List shallowIvtList = ivtMap.get(true); - List deepIvtList = ivtMap.get(false); - if (ObjectUtils.isNotEmpty(shallowIvtList)) { - // 优先处理浅货位 - handleTaskForShallow(task, shallowIvtList.get(0)); - } else if (ObjectUtils.isNotEmpty(deepIvtList)) { - // 处理深货位 - handleTaskForDeep(task, deepIvtList.get(0)); - } - } - - /** - * 处理浅货位 - */ - private void handleTaskForShallow(JSONObject task, BstIvtPackageinfoivt shallowIvt) { - task.put("point_code1", shallowIvt.getPoint_code()); - createTask(task); - } - - /** - * 处理深货位 - */ - private void handleTaskForDeep(JSONObject task, BstIvtPackageinfoivt deepIvt) { - String pointCode1 = deepIvt.getPoint_code(); - List groupIvtList = packageinfoivtService.list(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getCol_num, deepIvt.getCol_num())) - .stream() - .filter(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))) - .collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(groupIvtList)) { - BstIvtPackageinfoivt shallowIvt = groupIvtList.get(0); - //处理深货位对应浅货位的状态 - handleShallowIvtStatus(task, deepIvt, shallowIvt, pointCode1); - } - } - /** - * 处理深货位对应浅货位的状态 - */ - private void handleShallowIvtStatus(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1) { - Set pointCodes2 = Collections.singleton(shallowIvt.getPoint_code()); - //浅货位状态为空,查询该货位是否存在运行中的放货任务 - //如果不存在,则直接创建主任务 - //如果存在,则1.建立确定起点的主任务,2.运行中的放货任务完成后,再让下发执行主任务 - //浅货位状态不为空,查询该货位是否存在运行中的取货任务 - //如果不存在,1.创建主任务不下发;2.创建移库任务,绑定主任务关联关系task_group_id,等待移库任务完成后,再下发主任务 - //如果存在,不需要移库,绑定与主任务关联关系task_group_id,等待运行中的取货任务完成后,再让下发执行主任务 - List existTaskList = shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空")) - ? bstIvtPackageinfoivtMapper.getTaskList(null, pointCodes2, null, null) - : bstIvtPackageinfoivtMapper.getTaskList(pointCodes2, null, null, null); - //创建搬运任务 - task.put("point_code1", pointCode1); - //不存在搬运任务 - if (ObjectUtils.isEmpty(existTaskList)) { - //浅库位状态为空 - if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - createTask(task); - } else { - //浅库位状态不为为空 - createMainTask(task, deepIvt, shallowIvt, pointCode1, null); - } - //存在搬运任务 - } else { - //浅库位状态为空 - if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - createMainTask(task, deepIvt, shallowIvt, pointCode1, existTaskList.get(0)); - } else { - //浅库位状态不为空 - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, existTaskList.get(0).getTask_id()); - updateWrapper.set(SchBaseTask::getTask_group_id, createTask(task)); - taskService.update(null, updateWrapper); - } - } - } - /** - * 创建搬运和移库任务 - */ - private void createMainTask(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1, SchBaseTask existTask) { - //主任务id - String taskId; - //主任务类型 - String taskType; - //移库任务id - String shiftingTaskId; - //获取移库任务目标点 - String pointCode4; - task.put("vehicle_code", deepIvt.getContainer_name()); - task.put("point_code1", pointCode1); - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - taskId = createTask(task); - pointCode4 = task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) ? packageinfoivtService.getDjqShiftingPoint(shallowIvt, true) : packageinfoivtService.getDjqShiftingPoint(shallowIvt, false); - taskType = task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) ? PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务") : PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务"); - JSONObject task1 = new JSONObject(); - task1.put("task_type", taskType); - task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - if (existTask != null) { - task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.SURE_END.getCode()); - } else { - task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode()); - } - task1.put("vehicle_code", shallowIvt.getContainer_name()); - task1.put("point_code1", shallowIvt.getPoint_code()); - task1.put("point_code2", pointCode4); - task1.put("task_group_id", taskId); - task1.put("material_code", shallowIvt.getIvt_status()); - shiftingTaskId = shiftingTask.createTask(task1); - if (existTask != null) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, existTask.getTask_id()); - updateWrapper.set(SchBaseTask::getTask_group_id, shiftingTaskId); - taskService.update(null, updateWrapper); - } - } - private String createTask(JSONObject task) { - if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))) { - return djqToKzjhcwTask.createTask(task); - } else { - return gzqToKzjhcwTask.createTask(task); - } - } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java deleted file mode 100644 index d63b5be..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendZxToDjw.java +++ /dev/null @@ -1,292 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area.auto; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -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 lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; -import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; -import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper; -import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.ZxDjwTask; -import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; -import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; -import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; -import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.system.service.param.ISysParamService; -import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static org.nl.wms.util.TaskUtil.getMaxNum; - - -@Slf4j -@Component -@RequiredArgsConstructor -public class AutoSendZxToDjw extends Prun{ - private final String THIS_CLASS = AutoSendZxToDjw.class.getName(); - - private final RedissonClient redissonClient; - @Resource - private IschBaseTaskService taskService; - @Resource - private ZxDjwTask zxDjwTask; - @Autowired - private ISysParamService iSysParamService; - - @Resource - private LmsToMesServiceImpl lmsToMesServiceImpl; - - @Resource - private PdmBiSubpackagerelationMapper pdmBiSubpackagerelationMapper; - @Resource - private IPdmBiSlittingproductionplanService iPdmBiSlittingproductionplanService; - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private IpdmBiSubpackagerelationService subpackageRelationService; - - - @Resource - private PdmBiSlittingproductionplanMapper pdmBiSlittingproductionplanMapper; - @Resource - private BstIvtBoxinfoMapper bstIvtBoxinfoMapper; - - - - //装箱区->装箱对接位agv自动搬运任务 - @Autowired - public void run() { - try { - this.sendZxToDjw(); - }catch (Exception ex){ - log.error(ex.getMessage()); - } - } - - @SneakyThrows - public void sendZxToDjw() { - //装箱位有木箱 - List zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "", PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - if (ObjectUtils.isEmpty(zxwPackageinfoivtList)) { - return; - } - int count = taskService.count(new QueryWrapper() - .eq("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")) - .eq("is_delete", "0") - .lt("task_status", TaskStatusEnum.FINISHED.getCode())); - if (count>0){ - return; - } - - for (BstIvtPackageinfoivt bstIvtPackageinfoivt : zxwPackageinfoivtList) { - //装箱位上的木箱号 - String boxNo = bstIvtPackageinfoivt.getContainer_name(); - //获取木箱信息,未包装的木箱 - BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtBoxinfo::getBox_no, boxNo).ne(BstIvtBoxinfo::getIs_packing, "1")); - if (bstIvtBoxinfo == null) { - log.warn("请检查木箱号:" + boxNo + "是否存在或者状态为已装箱!"); - return; - } - //检查木箱信息 - checkBoxParams(boxNo, bstIvtBoxinfo); - //3.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务 - List relationList = subpackageRelationService - .list(new LambdaUpdateWrapper() - .eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo) - .eq(PdmBiSubpackagerelation::getStatus, "0")); - if (ObjectUtils.isEmpty(relationList)) { - log.warn("装箱位的木箱号" + boxNo + "对应的子卷包装关系为空,请检查子卷包装关系状态是否为0!"); - return; - } - //装箱区有子卷且没有正在进行的装箱任务 - List zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"), "", "", ""); - if (ObjectUtils.isEmpty(zxqPackageinfoivtList)) { - return; - } - //获取与该木箱号匹配的子卷号 - String containerName = relationList.get(0).getContainer_name(); - log.info(THIS_CLASS + "-装箱区->装箱对接位任务开始执行扫描。"); - RLock lock = redissonClient.getLock(containerName); - boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLock) { - List zxqPoint = zxqPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList()); - //装箱区点位上有与该木箱号匹配的子卷 - if (ObjectUtils.isNotEmpty(zxqPoint)) { - List productionPlanList = pdmBiSlittingproductionplanMapper.selectList(new LambdaQueryWrapper().eq(PdmBiSlittingproductionplan::getContainer_name, containerName).eq(PdmBiSlittingproductionplan::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))); - if (ObjectUtils.isEmpty(productionPlanList)) { - log.info("装箱区的子卷号为" + containerName + "无对应的分切计划信息,请检查!"); - throw new BadRequestException("装箱区的子卷号为" + containerName + "无对应的分切计划信息,请检查!"); - } - //校验是否存在相同子卷号任务 - List taskList = taskService.list(new LambdaQueryWrapper().eq(SchBaseTask::getVehicle_code, containerName).eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); - if (ObjectUtils.isEmpty(taskList)) { - //创建搬运任务到装箱位 - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo.put("point_code1", zxqPoint.get(0).getPoint_code()); - jo.put("point_code2", bstIvtPackageinfoivt.getPoint_code()); - jo.put("vehicle_code", containerName); - jo.put("vehicle_code2", boxNo); - jo.put("is_send", IOSEnum.IS_NOTANDYES.code("是")); - //扩展参数 - JSONObject param = new JSONObject(); - //查询是否为最后一个子卷,相同木箱号且子卷包装状态为生成 - List packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, boxNo).eq(PdmBiSubpackagerelation::getStatus, "0")); - if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(containerName)) { - //最后子卷 - param.put("lastOne", IOSEnum.IS_NOTANDYES.code("是")); - } else { - param.put("lastOne", IOSEnum.IS_NOTANDYES.code("否")); - } - String paperSize = SlitterTaskUtil.getPaperSize(productionPlanList.get(0)); - //获取木箱高度等级 - param.put("heightLevel", getHeightLevel(bstIvtBoxinfo)); - //获取子卷长度 - param.put("len", getMaxNum(productionPlanList.get(0), null)); - //木箱最大数量 - param.put("maxNo", bstIvtBoxinfo.getNum()); - //托盘类型 1小托盘 2大托盘 - param.put("containerType", bstIvtBoxinfo.getVehicle_type()); - //木箱需放入子卷数量 - param.put("boxNo", relationList.get(0).getQuanlity_in_box()); - //子卷号 - param.put("frpModel", paperSize); - param.put("barcode", containerName); - jo.put("request_param", param.toString()); - zxDjwTask.createTask(jo); - } - } - } else { - log.info("装箱区->装箱对接位agv自动搬运任务正在创建被锁住。"); - } - } finally { - if (tryLock) { - lock.unlock(); - } - } - } - } - - - /** - * 传输子卷包装关系至MES - */ - public void transferBoxPackageToMes(List packagerelationList, BstIvtBoxinfo bstIvtBoxinfo) { - if (StringUtils.isBlank(packagerelationList.get(0).getPackage_box_sn())) { - log.info("子卷装箱异常,transferBoxPackageToMes接口的子卷号:" + packagerelationList.get(0).getContainer_name() + ",子卷未确定木箱规格信息"); - throw new BadRequestException("子卷未确定木箱规格信息!"); - } - JSONObject param = new JSONObject(); - Set containerNameList = packagerelationList.stream() - .map(PdmBiSubpackagerelation::getContainer_name) - .collect(Collectors.toSet()); - List planList = iPdmBiSlittingproductionplanService.list(new LambdaQueryWrapper().in(PdmBiSlittingproductionplan::getContainer_name, containerNameList)); - if (ObjectUtils.isEmpty(planList)) { - log.info("子卷装箱异常,transferBoxPackageToMes接口的子卷号:" + packagerelationList.get(0).getContainer_name() + ",无对应的分切计划信息,请检查!"); - throw new BadRequestException("该箱号不存在分切计划"); - } - BigDecimal totalWeight; - totalWeight = planList.stream() - .map(PdmBiSlittingproductionplan::getWeight) - .filter(p -> p != null && !p.trim().isEmpty()) - .filter(r -> !r.isEmpty()) - .map(BigDecimal::new) - .reduce(BigDecimal.ZERO, BigDecimal::add); - if (totalWeight.compareTo(new BigDecimal(0)) == 0) { - log.info("子卷装箱异常,transferBoxPackageToMes接口的子卷号:" + packagerelationList.get(0).getContainer_name() + ",分切计划的子卷重量不能为0"); - throw new BadRequestException("分切计划的子卷重量不能为0"); - } - BigDecimal boxWeight = new BigDecimal(bstIvtBoxinfo.getBox_weight()); - if (boxWeight.compareTo(new BigDecimal(0)) == 0) { - log.info("子卷装箱异常,transferBoxPackageToMes接口的子卷号:" + packagerelationList.get(0).getContainer_name() + ",对应的木箱的重量不能0"); - throw new BadRequestException("木箱的重量不能0"); - } - totalWeight = totalWeight.add(boxWeight); - if (totalWeight.compareTo(new BigDecimal(0)) == 0) { - log.info("子卷装箱异常,transferBoxPackageToMes接口的子卷号:" + packagerelationList.get(0).getContainer_name() + ",理论毛重计算有误,不能为0,请检查!"); - throw new BadRequestException("理论毛重不能为0"); - } - //更新子卷包装关系的重量 - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("box_weight", totalWeight); - updateWrapper.set("status", "0"); - updateWrapper.set("box_length", bstIvtBoxinfo.getBox_length()); - updateWrapper.set("box_width", bstIvtBoxinfo.getBox_width()); - updateWrapper.set("box_high", bstIvtBoxinfo.getBox_high()); - updateWrapper.eq("container_name", packagerelationList.get(0).getContainer_name()); - pdmBiSubpackagerelationMapper.update(null, updateWrapper); - //推送MES - JSONArray rows = new JSONArray(); - for (int i = 0; i < packagerelationList.size(); i++) { - PdmBiSubpackagerelation sub = packagerelationList.get(i); - JSONObject row = new JSONObject(); - row.put("ContainerName", sub.getContainer_name()); - rows.add(row); - } - param.put("rows", rows); - param.put("num", packagerelationList.size()); - param.put("box_no", packagerelationList.get(0).getPackage_box_sn()); - param.put("box_weight", totalWeight); - lmsToMesServiceImpl.momBoxPackageSubmit(param); - } - - private static void checkBoxParams(String boxNo, BstIvtBoxinfo bstIvtBoxinfo) { - if (StringUtils.isBlank(bstIvtBoxinfo.getBox_high())) { - throw new BadRequestException("请检查木箱号:" + boxNo + "木箱高度不能为空!"); - } - if (StringUtils.isBlank(bstIvtBoxinfo.getNum())) { - throw new BadRequestException("请检查木箱号:" + boxNo + "能装的最大子卷数不能为空!"); - } - if (StringUtils.isBlank(bstIvtBoxinfo.getVehicle_type())) { - throw new BadRequestException("请检查木箱号:" + boxNo + "托盘类型不能为空!"); - } - } - - private String getHeightLevel(BstIvtBoxinfo bstIvtBoxinfo) { - String height; - String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); - String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); - String box_high = bstIvtBoxinfo.getBox_high(); - if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { - height = "1"; - } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { - height = "2"; - } else { - height = "3"; - } - return height; - } - - - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java index e50b502..e9a6881 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueue.java @@ -1,33 +1,25 @@ package org.nl.b_lms.sch.tasks.first_floor_area.auto; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.dto.SchBaseTaskDto; import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.modules.common.utils.RedisUtils; -import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.sch.AcsUtil; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import java.util.*; -import java.util.stream.Collectors; @Service @@ -43,8 +35,7 @@ public class TaskQueue { private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper; @Autowired private ZxqTask zxqTask; - @Autowired - private ShiftingTask shiftingTask; + @Autowired private AcsUtil acsUtil; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/DownShaftTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/DownShaftTrussTask.java new file mode 100644 index 0000000..4d2b989 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/DownShaftTrussTask.java @@ -0,0 +1,174 @@ +package org.nl.b_lms.sch.tasks.slitter; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.nl.b_lms.sch.point.dao.StIvtCutpointivt; +import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.TaskUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: 分切下气胀轴桁架任务(2/4点任务) + * @Date: 2024/2/1 + */ +@Slf4j +@Service +public class DownShaftTrussTask extends AbstractAcsTask { + private final String THIS_CLASS = DownShaftTrussTask.class.getName(); + @Autowired + private IschBaseTaskService taskService; + @Autowired + private IBstIvtCutpointivtService bcutpointivtService; + @Autowired + private IstIvtCutpointivtService cutpointivtService; + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + List taskList = taskService.getIssueTasks(THIS_CLASS); + + ArrayList resultList = new ArrayList<>(); + String agv_system_type = "2"; + for (SchBaseTask task : taskList) { + String requestParam = task.getRequest_param(); + JSONObject requestParamObj = JSONObject.parseObject(requestParam); + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(task.getTask_id()) + .task_code(task.getTask_code()) + .task_type(task.getAcs_task_type()) + .start_device_code(task.getPoint_code1()) + .next_device_code(task.getPoint_code2()) + .start_device_code2(task.getPoint_code3()) + .next_device_code2(task.getPoint_code4()) + .vehicle_code(task.getVehicle_code()) + .truss_type(requestParamObj.getString("truss_type")) + .empty_site(requestParamObj.getString("empty_site")) + .agv_system_type(agv_system_type) + .priority(task.getPriority()) + .remark(task.getRemark()) + .product_area(task.getProduct_area()) + .build(); + resultList.add(dto); + } + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + SchBaseTask task = taskService.getById(taskObj.getString("task_id")); + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + task.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + //起点 + String pointCode1 = task.getPoint_code1(); + //终点 + String pointCode2 = task.getPoint_code2(); + StIvtCutpointivt point1 = cutpointivtService.getPintByUpOrDownCode(pointCode1, false); + BstIvtCutpointivt point2 = bcutpointivtService.getPintByTrussCode(pointCode2, false); + // 点位数据更新 + + point2.setQzz_no1(point1.getUp_qzzno()); + point1.setUp_qzzno(""); + //下双 + if(ObjectUtil.isNotEmpty(task.getPoint_code3())){ + + point2.setQzz_no2(point1.getDown_qzzno()); + point1.setDown_qzzno(""); + } + //更新分切机点位 + point1.setRemark(""); + point1.setUpdate_optid(3L); + point1.setUpdate_optname("ACS"); + point1.setUpdate_time(DateUtil.now()); + cutpointivtService.updateById(point1); + + //更新分切暂存点 + point2.setPoint_status("3"); + TaskUtils.updateOptMessageByBCutPoint(point2); + bcutpointivtService.updateById(point2); + } + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + } + task.setUpdate_time(DateUtil.now()); + taskService.updateById(task); + } + + @Override + public String createTask(JSONObject form) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setPoint_code1(form.getString("point_code1")); + task.setPoint_code2(form.getString("point_code2")); + task.setPoint_code3(form.getString("point_code3")); + task.setPoint_code4(form.getString("point_code4")); + task.setVehicle_code(form.getString("vehicle_code1")); + task.setVehicle_code2(form.getString("vehicle_code2")); + task.setAcs_task_type("6"); + task.setIs_delete("0"); + task.setRequest_param(form.toJSONString()); + task.setTask_type(form.getString("task_type")); + task.setProduct_area(form.getString("product_area")); + task.setCreate_id(currentUserId); + task.setCreate_name(currentUsername); + task.setCreate_time(DateUtil.now()); + task.setHandle_class(THIS_CLASS); + //根据类型获取对应的任务优先级 + JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0); + if (ObjectUtil.isEmpty(priority_jo)) { + task.setPriority("1"); + } else { + task.setPriority(priority_jo.getString("value")); + } + taskService.save(task); + this.immediateNotifyAcs(null); + return task.getTask_id(); + } + + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + + @Override + public void cancel(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, "0"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java index af17ec2..7b70070 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java @@ -5,21 +5,16 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; -import org.nl.b_lms.bst.ivt.papervehicle.service.IMdPbPapervehicleService; -import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -27,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -44,10 +38,6 @@ public class StockAreaCallTubeTask extends AbstractAcsTask { private IschBaseTaskService taskService; @Autowired private IBstIvtStockingivtService stockingivtService; - @Autowired - private IMdPbPapervehicleService mdPbPapervehicleService; - @Autowired - private WmsToAcsService wmsToAcsService; @Override public List addTask() { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java index 6cd7a34..fa6a9f2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java @@ -92,32 +92,44 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { String endPoint = task.getPoint_code2(); BstIvtStockingivt startPointObj = stockingivtService.getPointByCode(startPoint, false); BstIvtStockingivt endPointObj = stockingivtService.getPointByCode(endPoint, false); - // 互换资源 (交换载具号) - endPointObj.setIvt_status("1"); - endPointObj.setVehicle_code(task.getVehicle_code()); - TaskUtils.updateOptMessageByBStockingPoint(endPointObj); - stockingivtService.update(endPointObj); - startPointObj.setVehicle_code(""); - startPointObj.setIvt_status("0"); - TaskUtils.updateOptMessageByBStockingPoint(startPointObj); - stockingivtService.update(startPointObj); - // 创建搬运任务, 将所需要的纸管对应的托盘换过来。 - String requestParam = task.getRequest_param(); - JSONObject jsonObject = JSONObject.parseObject(requestParam); - if (ObjectUtil.isEmpty(requestParam)) { - throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误"); + if (SlitterEnum.TASK_TYPE.code("备货区单独送空载具").equals(task.getTask_type())) { + // 终点赋值 + endPointObj.setIvt_status("1"); + endPointObj.setVehicle_code(task.getVehicle_code()); + TaskUtils.updateOptMessageByBStockingPoint(endPointObj); + stockingivtService.update(endPointObj); + startPointObj.setVehicle_code(""); + startPointObj.setIvt_status("0"); + TaskUtils.updateOptMessageByBStockingPoint(startPointObj); + stockingivtService.update(startPointObj); + } else { + // 互换资源 (交换载具号) + endPointObj.setIvt_status("1"); + endPointObj.setVehicle_code(task.getVehicle_code()); + TaskUtils.updateOptMessageByBStockingPoint(endPointObj); + stockingivtService.update(endPointObj); + startPointObj.setVehicle_code(""); + startPointObj.setIvt_status("0"); + TaskUtils.updateOptMessageByBStockingPoint(startPointObj); + stockingivtService.update(startPointObj); + // 创建搬运任务, 将所需要的纸管对应的托盘换过来。 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + if (ObjectUtil.isEmpty(requestParam)) { + throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误"); + } + JSONObject callPoint = jsonObject.getJSONObject("call_point"); + JSONObject param = new JSONObject(); + param.put("point_code1", callPoint.getString("point_code")); + param.put("point_code2", startPoint); + param.put("vehicle_code", callPoint.getString("vehicle_code")); + param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code"))); + doSavePaperInfos(paperList, param); + stockAreaCallTubeTask.createTask(param); } - JSONObject callPoint = jsonObject.getJSONObject("call_point"); - JSONObject param = new JSONObject(); - param.put("point_code1", callPoint.getString("point_code")); - param.put("point_code2", startPoint); - param.put("vehicle_code", callPoint.getString("vehicle_code")); - param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() - .eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code"))); - doSavePaperInfos(paperList, param); - stockAreaCallTubeTask.createTask(param); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -138,8 +150,11 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); task.setPoint_code1(form.getString("point_code1")); task.setPoint_code2(form.getString("point_code2")); - task.setPoint_code3(callPoint.getString("point_code")); + task.setPoint_code3(ObjectUtil.isNotEmpty(callPoint) + ? callPoint.getString("point_code") + : ""); task.setVehicle_code(form.getString("vehicle_code")); + task.setVehicle_code2(form.getString("vehicle_code2")); task.setAcs_task_type("3"); task.setIs_delete("0"); task.setRemark("point3只是记录点,不会下到ACS"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java index 230f729..d27c7bf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java @@ -150,49 +150,6 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO); slittingproductionplanService.update(updateWrapper); } - } else{//若无接续则取消预分配的气胀轴空位 - //尺寸 - String qzzSize = jsonObject.getString("qzz_size"); - //代数 - String qzzGeneration = jsonObject.getString("qzz_generation"); - //区域 - String location = endPointObj.getPoint_location(); - //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 - if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))) - { - // 查询拔轴设备旁边缓存架点位是否存在 - List shafttubeivts = shafttubeivtService.getByQzzSize(qzzSize ,endPointObj.getPoint_code(), location); - // 对应尺寸的气涨轴库 - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - //若预分配的是缓存架,则取消缓存架 - if(StrUtil.equals(shafttubeivt.getPlan(), "1")){ - shafttubeivt.setPlan(""); - shafttubeivt.setUpdate_time(DateUtil.now()); - shafttubeivtService.updateById(shafttubeivt); - log.info("预分配缓存架空位被取消 - {}", shafttubeivt); - }else{ - List qzzCache = shafttubeivtService.getNotTaskShaftCacheEmpty3(qzzSize,qzzGeneration); - if (qzzCache.size() > 0) { - // 预扣除暂存架库存 - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan(""); - waitUsedPoint.setUpdate_time(DateUtil.now()); - shafttubeivtService.updateById(waitUsedPoint); - log.info("预分配暂存架空位被取消 - {}", waitUsedPoint); - } - } - }else{ - // 根据尺寸和代数,查询气涨轴暂存架是否有库存 - List qzzCache = shafttubeivtService.getNotTaskShaftCacheEmpty3(qzzSize,qzzGeneration); - if (qzzCache.size() > 0) { - // 预扣除暂存架库存 - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan(""); - waitUsedPoint.setUpdate_time(DateUtil.now()); - shafttubeivtService.updateById(waitUsedPoint); - log.info("预分配暂存架空位被取消 - {}", waitUsedPoint); - } - } } } task.setUpdate_time(DateUtil.now()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index b056a85..2f89e1d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -1,5 +1,6 @@ package org.nl.b_lms.sch.tasks.slitter.auto; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -27,14 +28,12 @@ import org.nl.b_lms.sch.tasks.slitter.StockAreaSendVehicleTask; import org.nl.b_lms.sch.tasks.slitter.TrussCallAirShaftTask; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; -import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.utils.TaskUtils; -import org.nl.modules.common.utils.RedisUtils; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; @@ -42,9 +41,12 @@ import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -74,8 +76,6 @@ public class AutoCallAirShaftTask extends Prun { @Autowired private IBstIvtStockingivtService stockingivtService; @Autowired - private ISysNoticeService noticeService; - @Autowired private StockAreaSendVehicleTask stockAreaSendVehicleTask; @Autowired private StockAreaCallTubeTask stockAreaCallTubeTask; @@ -86,17 +86,13 @@ public class AutoCallAirShaftTask extends Prun { @Autowired private ISysParamService paramService; @Autowired - private RedisUtils redisUtils; - @Autowired - private SlitterMapper slitterMapper; + private IMdPbPapervehicleService papervehicleService; public final static String PARAM_CODE_PLAN_AREA = "PARAM_CODE_PLAN_AREA"; public final static String IS_ONLY_PULLING = "IS_ONLY_PULLING"; public final static String TZ_DAY = "TZ_DAY"; public final static String USE_XN = "USE_XN"; public final static String MAX_QZZ_NUM = "MAX_QZZ_NUM"; - public String stepStr = ""; - public List stepErrorInfo = new ArrayList<>(); public void run() { @@ -116,9 +112,7 @@ public class AutoCallAirShaftTask extends Prun { "", "0"); //循环点位,最多循环两次 for (BstIvtShafttubeivt empty : emptyPoints) { - stepErrorInfo = new ArrayList<>(); doCallShaft(isOnlyPulling, tzDay, tzArea, useXn, max_qzz_num); - redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo); } } @@ -133,8 +127,8 @@ public class AutoCallAirShaftTask extends Prun { @Transactional(rollbackFor = Exception.class) public void doCallShaft(Param isOnlyPulling, Param tzDay, Param tzArea, Param useXn, Param max_qzz_num) { //查询套轴缓存位:点位启用、有子卷、气胀轴字段不为空、且无未完成的任务 - List notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint("0"); - //若有拔轴任务,则会执行本段代码 + List notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint(""); + //(1)若有拔轴任务,则会执行本段代码 //对满足的需拔轴子卷遍历下发任务,同时每次拔轴下发前判断是否有可以接续的套轴计划 for(int i= 0;i emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - cutpointivt.getPoint_location(), "0"); + cutpointivt.getProduct_area(), "0"); if(emptyPoints.size() == 0){ - String point_location = "0"; - if (StrUtil.equals(cutpointivt.getPoint_location(), "0")) - point_location = "1"; - if (StrUtil.equals(cutpointivt.getPoint_location(), "1")) - point_location = "0"; - emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - point_location, "0"); - if(emptyPoints.size() == 0){ - log.warn("气涨轴[{}]排队中,暂时无空闲拔轴机构!", qzzNo); - bcutpointivtService.update(new UpdateWrapper() - .eq("ivt_id",cutpointivt.getIvt_id()) - .set("remark","排队中,暂时无空闲拔轴机构!") - .set("update_time",DateUtil.now())); - //跳过当前子卷 - continue; - } + log.warn("气涨轴[{}]排队中,暂时无空闲拔轴机构!", qzzNo); + bcutpointivtService.update(new UpdateWrapper() + .eq("ivt_id",cutpointivt.getIvt_id()) + .set("remark","排队中,暂时无空闲拔轴机构!") + .set("update_time",DateUtil.now())); + //跳过当前子卷任务 + continue; } List collect = list.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); JSONObject param = new JSONObject(); @@ -213,7 +198,6 @@ public class AutoCallAirShaftTask extends Prun { //判断系统参数是否只做拔轴 if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) { - stepErrorInfo.add("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); //校验是否有空气胀轴位 if(!this.havaEmptyShaft(emptyPoints.get(0),plan,max_qzz_num)) { log.warn("气涨轴[{}]排队中,暂时无空闲气胀轴空位放空轴!", qzzNo); @@ -235,7 +219,7 @@ public class AutoCallAirShaftTask extends Prun { .findFirst() .orElse(null); //没有可以接续的套轴计划,直接下发拔轴任务即可 - if (planDto == null) { + if (ObjectUtil.isEmpty(planDto)) { log.warn("当前拔轴任务无可接续的套轴计划:{}", cutpointivt); if(!this.havaEmptyShaft(emptyPoints.get(0),plan,max_qzz_num)) { log.warn("气涨轴[{}]排队中,暂时无空闲气胀轴空位放空轴!", qzzNo); @@ -297,6 +281,7 @@ public class AutoCallAirShaftTask extends Prun { setIsSleeveShaft(param); // 当前拔轴的分切计划,一根轴最多2卷子卷 List oldPlans = slittingproductionplanService.getByQzzNo(qzzNo); + // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 saveCutPlanMessage(emptyPoints.get(0), needPlans, qzzSize, needPlan.getQzz_generation()); //设置当前的拔管纸管信息到param里 @@ -319,10 +304,9 @@ public class AutoCallAirShaftTask extends Prun { slittingproductionplanService.updateBatchById(needPlans); }//拔轴任务循环已结束 - //拔轴任务循环已结束,判断系统参数是否只做拔轴,若否进入套轴计划判断循环 + //(2)拔轴任务循环已结束,判断系统参数是否只做拔轴,若否进入套轴计划判断循环 if (!(ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue()))) { log.error("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); - stepErrorInfo.add("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); //获取可下发的分切计划 List plans = this.getCanIssuedCutPlan(tzDay, tzArea, useXn); //对满足的计划遍历下发任务 @@ -332,33 +316,24 @@ public class AutoCallAirShaftTask extends Prun { String qzzSize = planDto.getQzz_size(); //计划中需要的气胀轴代数 String qzz_generation = planDto.getQzz_generation(); - String location = "0"; + String product_area = ""; if (StrUtil.equals(qzz_generation, "4")){ - location = "0"; + product_area = "A1"; }else if (StrUtil.equals(qzz_generation, "5")){ - location = "1"; + product_area = "B1"; } //再次查询空的拔轴机构点位,优先查同区的拔轴设备 List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - location, "0"); + product_area, "0"); if(emptyPoints.size() == 0){ - if (StrUtil.equals(location, "0")){ - location = "1"; - }else if (StrUtil.equals(location, "1")){ - location = "0"; - } - emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - location, "0"); - if(emptyPoints.size() == 0){ - log.warn("分切计划{}排队中,暂时无空闲拔轴机构!", planDto.getWorkorder_id()); - slittingproductionplanService.update(new UpdateWrapper() - .eq("workorder_id",planDto.getWorkorder_id()) - .set("remark","排队中,暂时无空闲拔轴机构!") - .set("update_time",DateUtil.now())); - //跳过当前计划 - continue; - } + log.warn("分切计划{}排队中,暂时无空闲拔轴机构!", planDto.getWorkorder_id()); + slittingproductionplanService.update(new UpdateWrapper() + .eq("workorder_id",planDto.getWorkorder_id()) + .set("remark","排队中,暂时无空闲拔轴机构!") + .set("update_time",DateUtil.now())); + //跳过当前计划 + continue; } //判断是否有对应尺寸的气胀轴,无跳过 if(!this.havaEnoughShaft(planDto, emptyPoints.get(0))){ @@ -391,7 +366,6 @@ public class AutoCallAirShaftTask extends Prun { // 调用ACS滚条气涨轴下来 if (!toAcsOutShaft(planDto, emptyPoints.get(0))) { log.error("呼叫出轴失败-穿拔轴{}不进行套轴,跳过!", emptyPoints.get(0).getPoint_code()); - stepErrorInfo.add("呼叫出轴失败-穿拔轴" + emptyPoints.get(0).getPoint_code() + "不进行套轴,跳过!"); return; } //调用agv换托盘 @@ -400,6 +374,48 @@ public class AutoCallAirShaftTask extends Prun { saveCutPlanMessage(emptyPoints.get(0), needPlans, qzzSize, qzz_generation); } } + + //(3)套轴区自动移出空盘 + //判断是否有可移出空盘:有库存、已启用、且属于套轴区点位 + LambdaQueryWrapper stockLam = new LambdaQueryWrapper<>(); + stockLam.eq(BstIvtStockingivt::getIvt_status,SlitterConstant.SLITTER_YES) + .eq(BstIvtStockingivt::getIs_used,SlitterConstant.SLITTER_YES) + .eq(BstIvtStockingivt::getPoint_type,"2"); + List stockList = stockingivtService.list(stockLam); + for(int i=0;i papers = papervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, vehicleCode) + .ne(MdPbPapervehicle::getQty, 0)); + if (papers.size() <= 0) { + // 搬走 + List unFinishtasks = taskService.checkHaveTask(point_code); + if (CollectionUtil.isEmpty(unFinishtasks)) { + // 查找一个没有任务的空位 + List list = stockingivtService.getEmptyPointNotTask("3"); + if (list.size() == 0) { + log.warn("备货区找不到空位置搬运!"); + break; + } + BstIvtStockingivt moveEmptyPoint = list.get(0); + JSONObject moveTaskParam = new JSONObject(); + moveTaskParam.put("point_code1", point_code); + moveTaskParam.put("point_code2", moveEmptyPoint.getPoint_code()); + moveTaskParam.put("vehicle_code", vehicleCode); + moveTaskParam.put("task_type", SlitterEnum.TASK_TYPE.code("备货区单独送空载具")); + moveTaskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + stockAreaSendVehicleTask.createTask(moveTaskParam); + //下发一个就行 + break; + } + } + } } /** @@ -438,54 +454,51 @@ public class AutoCallAirShaftTask extends Prun { String qzzSize = planD.getQzz_size(); //代数4或5 String qzzGeneration = planD.getQzz_generation(); - //当前拔轴设备所在区域0或1 - String location = empty.getPoint_location(); + //当前拔轴设备所在区域 + String product_area = empty.getProduct_area(); // 根据尺寸和代数,查询气涨轴暂存架是否有库存 List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, - qzzGeneration, ""); + qzzGeneration, product_area); if (qzzCache.size() > 0) { return true; } - else{//若暂存架无库存,根据当前拔轴设备所在区域判断是否有缓存架,以及缓存架是否有库存 - //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 - if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))){ - // 查询拔轴设备旁边缓存架点位是否存在 - List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); - if (shafttubeivts.size() == 0) { - log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); - return false; - } - // 对应尺寸的气涨轴库 - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - //判断是否存在残留的脏数据 - String plan = shafttubeivt.getPlan(); - if(ObjectUtil.isNotEmpty(plan) && StrUtil.equals(plan, "1")){ - log.error("气胀轴库" + shafttubeivt.getPoint_code() + "预分配字段plan异常,需要确认并初始化!"); - return false; - } + else{ + //若暂存架无库存,根据当前拔轴设备所在区域判断是否有缓存架,以及缓存架是否有库存 + // 查询拔轴设备旁边缓存架点位是否存在 + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), product_area); + if (shafttubeivts.size() == 0) { + log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); + return false; + } + // 对应尺寸的气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + //判断是否存在残留的脏数据 + String plan = shafttubeivt.getPlan(); + if(ObjectUtil.isNotEmpty(plan) && StrUtil.equals(plan, "1")){ + log.error("气胀轴库" + shafttubeivt.getPoint_code() + "预分配字段plan异常,需要确认并初始化!"); + return false; + } - // 判断气胀轴是否有轴 - JSONArray device_rows = new JSONArray(); - JSONObject device_obj = new JSONObject(); - device_rows.add(device_obj); - device_obj.put("device_code", shafttubeivt.getPoint_code()); - device_obj.put("product_area", "B1"); - JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); - if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { - log.error("获取气胀轴库信息失败"); - return false; - } - JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); - if (data2.getInteger("qty") > 0) { - return true; - }else{ - log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); - return false; - } + // 判断气胀轴是否有轴 + JSONArray device_rows = new JSONArray(); + JSONObject device_obj = new JSONObject(); + device_rows.add(device_obj); + device_obj.put("device_code", shafttubeivt.getPoint_code()); + device_obj.put("product_area", product_area); + JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); + if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { + log.error("获取气胀轴库信息失败"); + return false; + } + JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); + if (data2.getInteger("qty") > 0) { + return true; + }else{ + log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); + return false; } } - return false; } /** * 判断是不是有足够的 对应尺寸、代数的气胀轴空位 @@ -499,16 +512,17 @@ public class AutoCallAirShaftTask extends Prun { String qzzSize = plan.getQzz_size(); //代数4或5 String qzzGeneration = plan.getQzz_generation(); - //当前拔轴设备所在区域0或1 - String location = empty.getPoint_location(); + //当前拔轴设备所在区域 + String product_area = empty.getProduct_area(); //获取气胀轴缓存架最大缓存数量 Integer max_num = Integer.valueOf(max_qzz_num.getValue()); - - //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 - if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))) - { + // 根据尺寸和代数和车间区域,查询气涨轴暂存架是否有空位 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCacheEmpty2(qzzSize,qzzGeneration,product_area); + if (qzzCache.size() > 0) { + return true; + }else{ // 查询拔轴设备旁边缓存架点位是否存在 - List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), product_area); if (shafttubeivts.size() == 0) { log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); return false; @@ -526,7 +540,7 @@ public class AutoCallAirShaftTask extends Prun { JSONObject device_obj = new JSONObject(); device_rows.add(device_obj); device_obj.put("device_code", shafttubeivt.getPoint_code()); - device_obj.put("product_area", "B1"); + device_obj.put("product_area", product_area); JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { log.error("获取气胀轴库信息失败"); @@ -536,39 +550,8 @@ public class AutoCallAirShaftTask extends Prun { //若缓存架数量已经满了 if (data2.getInteger("qty") >= max_num) { log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴空位。"); - // 根据尺寸和代数,查询气涨轴暂存架是否有空位 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCacheEmpty2(qzzSize,qzzGeneration); - if (qzzCache.size() <= 0) { - log.warn("气胀轴暂存架没空位,无法分配拔轴任务"); - return false; - } - // 预扣除暂存架库存 - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan("1"); - waitUsedPoint.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(waitUsedPoint); - log.info("暂存架空位被预分配 - {}", waitUsedPoint); - }else{ - // 预扣除缓存架库存 - shafttubeivt.setPlan("1"); - shafttubeivt.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(shafttubeivt); - log.info("缓存架空位被预分配 - {}", shafttubeivt); - } - - }else{ - // 根据尺寸和代数,查询气涨轴暂存架是否有库存 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCacheEmpty2(qzzSize,qzzGeneration); - if (qzzCache.size() <= 0) { - log.warn("气胀轴暂存架没空位,无法分配拔轴任务"); return false; } - // 预扣除暂存架库存 - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan("1"); - waitUsedPoint.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(waitUsedPoint); - log.info("暂存架空位被预分配 - {}", waitUsedPoint); } return true; } @@ -617,20 +600,19 @@ public class AutoCallAirShaftTask extends Prun { log.info("同位置的另一台穿拔轴机构:{}", one); // 另一台所需要的数量 int otherDeviceTubeSize = 0; + if (ObjectUtil.isNotEmpty(one)) { + if (one.getTube_code1().equals(tubes.get(0))) { + otherDeviceTubeSize = (int) Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).count(); + } + } // 缺省的数量 int needQuantity = 0; // 判断当前区域location对应的备货区是否含有相同的纸管 校验了不在搬运中 - // todo: 要考虑防止所需要的托盘被搬走! - // type=1(桁架底下的托盘), 关联对象material_code=纸管, qty > 0 - List useList = stockingivtService.getPaperTubePoint("1", tubes.get(0), location, 0); + // type=2(桁架底下的托盘), 关联对象material_code=纸管, qty > 0 + List useList = stockingivtService.getPaperTubePoint("2", tubes.get(0), location, 0); if (useList.size() > 0) { // 求和,三个托盘中需要的管芯的数量。 int sum = useList.stream().mapToInt(BstIvtStockingivt::getQty).sum(); - if (ObjectUtil.isNotEmpty(one)) { - if (one.getTube_code1().equals(tubes.get(0))) { - otherDeviceTubeSize = (int) Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).count(); - } - } // 说明三个位置中有包含此纸管的数据。 if (sum >= tubes.size() + otherDeviceTubeSize) { return true; @@ -640,8 +622,32 @@ public class AutoCallAirShaftTask extends Prun { // 兜底 needQuantity = needTemp > 0 ? needTemp : 1; } - // 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中 - List stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location); + // 2.2 查询是否存在任务正在搬运过来。(路上的是另一台机构的轴) + List havePapers = papervehicleService.getInfoByTask(); + if (CollectionUtil.isNotEmpty(havePapers)) { + Map sumByMaterialCode = havePapers.stream() + .collect(Collectors.groupingBy( + MdPbPapervehicle::getMaterial_code, + Collectors.mapping( + MdPbPapervehicle::getQty, + Collectors.reducing( + 0, + Integer::sum + ) + ) + )); + int sumQty = sumByMaterialCode.get(tubes.get(0)).intValue(); + if (sumQty >= needQuantity ) { + log.info("AGV正在搬运管芯..."); + return true; + } + // 如果不够,就计算还缺多少个 + int needTemp = needQuantity - sumQty; + // 兜底 + needQuantity = needTemp > 0 ? needTemp : tubes.size(); + } + // 查找type=3的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中 + List stockingivtList = stockingivtService.getNeedPaperTubePoint("3", tubes.get(0), location); // 找一个点位: 目的需要的点位 // 筛选单独托盘有超过所需数 BhTubePointDto needPoint = null; @@ -652,16 +658,28 @@ public class AutoCallAirShaftTask extends Prun { } } if (needPoint == null) { - // 不存在则站内通知 - noticeService.createNotice("备货区找不到[" + tubes.get(0) + "]的纸管信息", - "点位[" + empty.getPoint_name() + "]无法从备货区找到纸管信息", - NoticeTypeEnum.EXCEPTION.getCode()); - stepErrorInfo.add("备货区找不到[" + tubes.get(0) + "]的纸管信息"); + log.info("备货区找不到[" + tubes.get(0) + "]的纸管信息"); return false; } // 找到就创建AGV搬运任务 // 筛选3个位置中数量最少的搬走, 如果是空位,直接搬运过来 - List needMovePointList = stockingivtService.getCanMovePointList(location, "1"); + List needMovePointListAll = stockingivtService.getCanMovePointList(location, "2"); + // 过滤掉另一台穿拔轴需要的轴的数据 + List needMovePointList = new ArrayList<>(); + if (ObjectUtil.isEmpty(one)) { + needMovePointList = needMovePointListAll; + } else { + List otherTubes = Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); + needMovePointList = needMovePointListAll.stream().filter(bh -> { + String vehicleCode = bh.getVehicle_code(); + if (otherTubes.size() == 0 || "0".equals(bh.getIvt_status()) || ObjectUtil.isEmpty(vehicleCode)) { + return true; + } + List list = papervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, vehicleCode).eq(MdPbPapervehicle::getMaterial_code, otherTubes.get(0))); + return list.size() == 0; + }).collect(Collectors.toList()); + } // 空位就直接创建搬过来的任务 BhTubeMovePointDto needMovePoint = needMovePointList.size() > 0 ? needMovePointList.get(0) : null; if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) { @@ -679,13 +697,28 @@ public class AutoCallAirShaftTask extends Prun { stockAreaCallTubeTask.createTask(param); return true; } + // 3.2 判断是否有单独拉出去的任务,有的话直接拉过来。 + List stockingivts = stockingivtService.getMoveTaskPoints(); + if (CollectionUtil.isNotEmpty(stockingivts)) { + BstIvtStockingivt bstIvtStockingivt = stockingivts.get(0); + // 直接搬过来即可 + JSONObject param = new JSONObject(); + param.put("point_code1", needPoint.getPoint_code()); + param.put("point_code2", bstIvtStockingivt.getPoint_code()); + param.put("vehicle_code", needPoint.getVehicle_code()); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); + // 存储纸管信息 + List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code())); + doSavePaperInfos(paperList, param); + stockAreaCallTubeTask.createTask(param); + return true; + } // 查找一个没有任务的空位 List list = stockingivtService.getEmptyPointNotTask("3"); if (list.size() == 0) { - noticeService.createNotice("备货区找不到空位置搬运", - "点位[" + empty.getPoint_name() + "]无法从备货区找到空位", - NoticeTypeEnum.EXCEPTION.getCode()); - stepErrorInfo.add("备货区找不到空位置搬运。"); + log.info("备货区找不到空位置搬运"); return false; } BstIvtStockingivt endPoint = list.get(0); @@ -699,14 +732,12 @@ public class AutoCallAirShaftTask extends Prun { param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具")); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); stockAreaSendVehicleTask.createTask(param); - stepErrorInfo.add("备货区交换托盘中...请等待。"); return true; } /** * 获取对应的气胀轴库1 - * * @param empty 套拔轴点位 */ private Boolean toAcsOutShaft(SlitterPlanDistinctDto planD, BstIvtShafttubeivt empty) { @@ -716,26 +747,29 @@ public class AutoCallAirShaftTask extends Prun { //代数4或5 String qzzGeneration = planD.getQzz_generation(); //当前拔轴设备所在区域0或1 - String location = empty.getPoint_location(); + String product_area = empty.getProduct_area(); - //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 - if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))) - { - // 查询拔轴设备旁边缓存架点位是否存在 - List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); - if (shafttubeivts.size() == 0) { - log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); - return false; - } - // 对应尺寸的气涨轴库 - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - // 判断气胀轴是否有轴 + // 查询拔轴设备旁边缓存架点位是否存在 + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), product_area); + if (shafttubeivts.size() == 0) { + log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); + return false; + } + // 对应尺寸的气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + + // 根据尺寸和代数,查询气涨轴缓存架是否有库存 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, + qzzGeneration, product_area); + if (qzzCache.size() <= 0) { + log.warn("没有气胀轴,不给ACS写出轴信息"); + //判断暂存架是否有库存 JSONArray device_rows = new JSONArray(); JSONObject device_obj = new JSONObject(); device_rows.add(device_obj); device_obj.put("device_code", shafttubeivt.getPoint_code()); // - device_obj.put("product_area", "B1"); + device_obj.put("product_area", product_area); JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { log.error("获取气胀轴库信息失败"); @@ -744,66 +778,21 @@ public class AutoCallAirShaftTask extends Prun { JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); if (data2.getInteger("qty") <= 0) { log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); - - // 根据尺寸和代数,查询气涨轴暂存架是否有库存 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, - qzzGeneration, ""); - if (qzzCache.size() <= 0) { - log.warn("没有气胀轴,不给ACS写出轴信息"); - return false; - } - // 预扣除暂存架库存 - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan("1"); - waitUsedPoint.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(waitUsedPoint); - }else{ - // 预扣除缓存架库存 - shafttubeivt.setPlan("1"); - shafttubeivt.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(shafttubeivt); - } - // 判断气胀轴密集库是否有数据 - JSONArray acsParam = new JSONArray(); - // 出轴的信号,若缓存架没轴,电气会通过acs申请acsCallShaftFromCache,从暂存架出轴 - JSONObject acsQzz = new JSONObject(); - acsQzz.put("device_code", shafttubeivt.getPoint_code()); - acsQzz.put("code", "to_command"); - acsQzz.put("value", "1"); - acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - acsParam.add(acsQzz); - log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); - JSONObject action = wmsToAcsService.action(acsParam); - log.info("下发给ACS写信号出气涨轴返回参数:{}", action); - - }else{ - // 根据尺寸和代数,查询气涨轴暂存架是否有库存 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, - qzzGeneration, ""); - if (qzzCache.size() > 0) { - // 判断气胀轴密集库是否有数据 - JSONArray acsParam = new JSONArray(); - // 出轴的信号,若缓存架没轴,电气会通过acs申请acsCallShaftFromCache,从暂存架出轴 - JSONObject acsQzz = new JSONObject(); - acsQzz.put("device_code", empty.getPoint_code()); - acsQzz.put("code", "to_command"); - // todo: 需要和电气沟通协议,直接从暂存架出轴 - acsQzz.put("value", "1"); - acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - acsParam.add(acsQzz); - log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); - JSONObject action = wmsToAcsService.action(acsParam); - log.info("下发给ACS写信号出气涨轴返回参数:{}", action); - // 预扣除暂存架库存 - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan("1"); - waitUsedPoint.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(waitUsedPoint); - }else{ - log.warn("没有气胀轴,不给ACS写出轴信息"); return false; } } + // 判断气胀轴密集库是否有数据 + JSONArray acsParam = new JSONArray(); + // 出轴的信号,若缓存架没轴,电气会通过acs申请acsCallShaftFromCache,从暂存架出轴 + JSONObject acsQzz = new JSONObject(); + acsQzz.put("device_code", shafttubeivt.getPoint_code()); + acsQzz.put("code", "to_command"); + acsQzz.put("value", "1"); + acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + acsParam.add(acsQzz); + log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); + JSONObject action = wmsToAcsService.action(acsParam); + log.info("下发给ACS写信号出气涨轴返回参数:{}", action); return true; } @@ -820,7 +809,6 @@ public class AutoCallAirShaftTask extends Prun { empty.setHave_qzz(SlitterConstant.SLITTER_YES); empty.setQzz_size(qzzSize); - empty.setQzz_generation(qzz_generation); TaskUtils.updateOptMessageByBShaftPoint(empty); for (PdmBiSlittingproductionplan plan : needPlans) { @@ -886,35 +874,13 @@ public class AutoCallAirShaftTask extends Prun { if (cuts.size() > 0) { return true; } - // 判断穿拔轴机是否存在正在套轴的,存在也不继续。 - List shafts = bstIvtShafttubeivtService.getOtherCBJData(empty.getPoint_code(), empty.getPoint_location()); - if (shafts.size() > 0) { - BstIvtShafttubeivt shafttubeivt = shafts.get(0); - String containerCode = ObjectUtil.isNotEmpty(shafttubeivt.getContainer_name1()) - ? shafttubeivt.getContainer_name1() : shafttubeivt.getContainer_name2(); - // 获取这个子卷号的分切计划 - PdmBiSlittingproductionplan byContainerName = slittingproductionplanService.getByContainerName(containerCode); - if (ObjectUtil.isNotEmpty(byContainerName)) { - String parent = "1".equals(byContainerName.getOrder_type()) - ? byContainerName.getParent_container_name() - : byContainerName.getRestruct_container_name(); - if (byContainerName.getResource_name().equals(dto.getResource_name())) { - // 如果是同设备同母卷、同组,证明是一根轴上的,故允许套轴 - if (parent.equals(dto.getParent_container_name()) - && byContainerName.getSplit_group().equals(dto.getSplit_group())) { - return true; - } - return false; - } - } - } // 校验是否在拔轴暂存位、分切对接位有相同设备的分切计划信息。 // 有就返回false, 没有就返回true List cuts2 = bcutpointivtService.getReallyQzzSameDevice(dto.getResource_name()); if (cuts2.size() == 0) { return true; } - List stringList = cuts2.stream().map(BstIvtCutpointivt::getPoint_code).collect(Collectors.toList()); + //List stringList = cuts2.stream().map(BstIvtCutpointivt::getPoint_code).collect(Collectors.toList()); } log.info("检查有同母卷不允许套轴:{}", dto); // 有就返回true diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java index f565938..79c83d5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java @@ -23,7 +23,7 @@ public enum SlitterEnum { , "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807" , "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811" , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", - "托盘入管芯库任务", "010816","管芯备货任务", "010817")); + "备货区单独送空载具", "010816","管芯备货任务", "010817","托盘回收任务", "010818","托盘入管芯库任务", "010819")); private Map code; public String code(String desc) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java index f67edcd..27799fa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java @@ -328,6 +328,13 @@ public interface SlitterService { */ JSONObject downRolls2(JSONObject param); + /** + * 子卷下料2 + * @param param + * @return + */ + JSONObject downShafts(JSONObject param); + /** * 母卷暂存架管理 * @param param diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 8408f29..a06b371 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -30,6 +30,7 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproducti import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.dao.StIvtCutpointivt; import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -42,6 +43,7 @@ import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto; import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; +import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; @@ -55,7 +57,6 @@ import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; @@ -125,6 +126,9 @@ public class SlitterServiceImpl implements SlitterService { private UpShaftTrussTask upShaftTrussTask; @Autowired private ReturnShaftAgvTask returnShaftAgvTask; + @Autowired + private DownShaftTrussTask downShaftTrussTask; + @Override @@ -781,17 +785,29 @@ public class SlitterServiceImpl implements SlitterService { throw new BadRequestException("子卷[" + plan.getContainer_name() + "]对应的级别不能为空"); } log.info("分切计划数据:{}", plan); -// plan.setLevel("4"); String point_type = "5".equals(plan.getLevel()) ? "5" : "4"; - // 查找终点 确认是废箔还是成品: 根据分切计划的子卷等级来区分,5为报废 - BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper() - .eq(BstIvtShafttubeivt::getPoint_type, point_type) - .eq(BstIvtShafttubeivt::getPoint_location, device.getPoint_location()) - .eq(BstIvtShafttubeivt::getIs_used, SlitterConstant.SLITTER_YES)); JSONObject taskParam = new JSONObject(); - taskParam.put("point_code2", one.getPoint_code()); + // 查找终点 确认是废箔还是成品: 根据分切计划的子卷等级来区分,5为报废 + //成品 + if(point_type.equals("4")){ + //设置目的点为有架子的点 + List mzPointList = bcutpointivtService.getPointByStatus(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"),PackageInfoIvtEnum.IVT_STATUS.code("空")); + if(mzPointList.size() == 0){ + throw new BadRequestException("内包间无空闲满轴缓存位!"); + } + //设置目的点为满轴位 + taskParam.put("point_code2", mzPointList.get(0).getPoint_code()); + }else{//废箔 + BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtShafttubeivt::getPoint_type, point_type) + .eq(BstIvtShafttubeivt::getPoint_location, device.getPoint_location()) + .eq(BstIvtShafttubeivt::getIs_used, SlitterConstant.SLITTER_YES)); + //设置目的点为废箔称重 + taskParam.put("point_code2", one.getPoint_code()); + } + taskParam.put("material_code", plan.getContainer_name()); - // todo: ???? + //是否打印标签 taskParam.put("to_is_labeling", "0"); res.put("status", HttpStatus.HTTP_OK); res.put("message", "请求成功!"); @@ -903,10 +919,10 @@ public class SlitterServiceImpl implements SlitterService { .eq(MdPbPapervehicle::getRow_num, param.getString("row_num")) .eq(MdPbPapervehicle::getCol_num, param.getString("col_num"))); if (ObjectUtil.isEmpty(mdPbPapervehicle)) { - log.warn("托盘:" + vehicleCode + "第" + param.getString("row_num") + "-" + param.getString("col_num") + "没数据!"); - throw new BadRequestException("托盘:" + vehicleCode + "第" + param.getString("row_num") + "-" + param.getString("col_num") + "行没数据!"); + log.warn("托盘:" + vehicleCode + "第" + param.getString("row_num")+"-"+param.getString("col_num") + "没数据!"); + throw new BadRequestException("托盘:" + vehicleCode + "第" + param.getString("row_num")+"-"+param.getString("col_num") + "行没数据!"); } - log.debug("更新前" + vehicleCode + "数据:" + mdPbPapervehicle); + log.debug("更新前" + vehicleCode + "数据:" + mdPbPapervehicle); if (mdPbPapervehicle != null || mdPbPapervehicle.getQty().intValue() > 0) { boolean remove = papervehicleService.removeById(mdPbPapervehicle); log.debug("删除0结果:" + vehicleCode + ":" + remove); @@ -973,7 +989,6 @@ public class SlitterServiceImpl implements SlitterService { shaftPoint.setContainer_name1(""); shaftPoint.setContainer_name2(""); shaftPoint.setQzz_size(""); - shaftPoint.setQzz_generation(""); TaskUtils.updateOptMessageByBShaftPoint(shaftPoint); shafttubeivtService.update(shaftPoint); JSONObject res = new JSONObject(); @@ -1074,7 +1089,7 @@ public class SlitterServiceImpl implements SlitterService { } else { throw new BadRequestException("操作失败,点位[" + pointCode + "]无气胀轴信息,请先绑定子卷库存!"); } - List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", point.getPoint_location(), "2"); + List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", point.getProduct_area(), "2"); if (areaEmptyNotTaskPoint.size() <= 1) { throw new BadRequestException("请求搬运失败,内包间没有可存放位置!"); } @@ -2324,6 +2339,91 @@ public class SlitterServiceImpl implements SlitterService { return res; } + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject downShafts(JSONObject param) { + log.info("下轴的输入参数为:{}", param); + // param: device_code, container: [{"site":"上下轴(1/2)"}] + String device_code = param.getString("device_code"); + JSONArray conArray = param.getJSONArray("container"); + if (conArray.size() == 0) { + log.error("下空轴参数不能为空!"); + throw new BadRequestException("下空轴参数不能为空!"); + } + // 获得设备 + StIvtCutpointivt device = cutpointivtService.getOne(new LambdaQueryWrapper() + .eq(StIvtCutpointivt::getExt_code, device_code)); + + List tasks = taskService.checkHaveTrussTask(Arrays.asList(device.getUp_point_code(), device.getDown_point_code())); + if (tasks.size() > 0) { + throw new BadRequestException("分切机" + device_code + " 已经有存在的任务"); + } + + List containerList = new ArrayList<>(); + for (int i = 0; i < conArray.size(); i++) { + JSONObject container = conArray.getJSONObject(i); + containerList.add(container.getString("site")); + //上轴要下,且气胀轴字段为空 + if(StrUtil.equals(container.getString("site"),"1") && ObjectUtil.isEmpty(device.getUp_point_code())){ + throw new BadRequestException("分切机上轴无气胀轴信息,无法生成下空轴任务!"); + } + //下轴要下,且气胀轴字段为空 + if(StrUtil.equals(container.getString("site"),"2") && ObjectUtil.isEmpty(device.getDown_point_code())){ + throw new BadRequestException("分切机下轴无气胀轴信息,无法生成下空轴任务!"); + } + //下轴要单下,上轴检测有货 + if(StrUtil.equals(container.getString("site"),"2") && ObjectUtil.isNotEmpty(device.getUp_point_code()) && (conArray.size() == 1)){ + throw new BadRequestException("分切机上轴有货,无法生成单下空轴任务!"); + } + } + + StIvtCutpointivt actualDevice = device; + String area = device.getProduct_area(); + // 获取当前分切机的下一组分切计划(最多四条分切计划) + // 任务参数 + JSONObject taskParam = new JSONObject(); + taskParam.put("containers", containerList); + // 如果没有下一组的分切计划,就只做下卷任务(判断下单/下双) + // 获取分切对接位没任务的空位置 + List emptyPoints = slitterMapper.getEmptyCutPointNotTask(area, + device.getSort_seq(), + getPointLocationInCutDevice(getNumberByResourceCode(device_code), area)); + //必须两个位置都为空 + if (emptyPoints.size() == 0 ) { + log.error("分切机【" + device.getExt_code() + "】对接位不全为空位, 或已存在任务!"); + throw new BadRequestException("分切机【" + device.getExt_code() + "】对接位不全为空位,或已存在任务!"); + } + // 枷锁 + BstIvtCutpointivt emptyPoint = emptyPoints.get(0); + // 创建任务 + if (containerList.size() == 2) { + // 双轴任务 下双 + taskParam.put("point_code1", actualDevice.getUp_point_code()); + taskParam.put("point_code2", emptyPoint.getTruss_point_code1()); + taskParam.put("point_code3", actualDevice.getDown_point_code()); + taskParam.put("point_code4", emptyPoint.getTruss_point_code2()); + taskParam.put("truss_type", "1"); + taskParam.put("empty_site", "0"); + } else if (containerList.size() == 1) { + // 单轴任务 下单 + taskParam.put("point_code1", containerList.get(0) == "2" + ? actualDevice.getDown_point_code() : actualDevice.getUp_point_code()); + taskParam.put("point_code2", containerList.get(0) == "2" + ? emptyPoint.getTruss_point_code2() : emptyPoint.getTruss_point_code1()); + taskParam.put("truss_type", "1"); + taskParam.put("empty_site", "0"); + } + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下气胀轴")); + taskParam.put("product_area", device.getProduct_area()); + // 创建任务 + downShaftTrussTask.createTask(taskParam); + + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "下轴任务生成成功!"); + return res; + } + @Override public JSONObject rollCacheManage(JSONObject param) { // param: point_code、flag(1:清除,2:有空轴) @@ -2470,7 +2570,7 @@ public class SlitterServiceImpl implements SlitterService { JSONObject taskParam = new JSONObject(); // 获取内包间缓存位 - List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", point.getPoint_location(), "2"); + List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", point.getProduct_area(), "2"); if (areaEmptyNotTaskPoint.size() <= 1) { throw new BadRequestException("请求搬运失败,内包间没有可存放位置!"); } @@ -2505,7 +2605,6 @@ public class SlitterServiceImpl implements SlitterService { } return res; } - @Override @Transactional(rollbackFor = Exception.class) public JSONObject downBait(JSONObject param) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java index 976d8d9..02ac6c7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java @@ -28,8 +28,8 @@ public class SlitterTaskUtil { /** B1区域 */ public final static String B1_AREA_CODE = "B1"; - /** B2区域 */ - public final static String B2_AREA_CODE = "B2"; + /** A1区域 */ + public final static String A1_AREA_CODE = "A1"; /** * 组成纸管信息 * @param plan 对应的分切计划数组 @@ -226,8 +226,8 @@ public class SlitterTaskUtil { return "0"; } } - if (area.equals(B2_AREA_CODE)) { - if (num >= 1 && num <= 5) { + if (area.equals(A1_AREA_CODE)) { + if (num >= 1 && num <= 6) { return "0"; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java index 3dfa90d..4b0c602 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvOutService.java @@ -1,6 +1,7 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; @@ -81,7 +82,6 @@ public interface IStIvtIostorinvOutService extends IService { */ void allDiv(JSONObject whereJson); - /** * 手工分配 * @param whereJson:{ diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java index dc73fa0..5bed927 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java @@ -101,5 +101,7 @@ public interface IStIvtIostorinvdisService extends IService { * @return */ List getBillDisByDtlId(String iostorinvdtlId); + + List getAllOverdueByDtlId(String iostorinvdtlId); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java index fce0b01..f1a91ec 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java @@ -342,8 +342,14 @@ public class StIvtIostorinv implements Serializable { * 车型 */ private String car_type; + /** + * 是否超期发货 + */ + private String is_overdue; @TableField(exist = false) private String vbeln; + @TableField(exist = false) + private String plan_qty; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java index b1b9a09..c83c44f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java @@ -79,7 +79,7 @@ public class StIvtIostorinvdis implements Serializable { /** * 物料标识 */ - private Long material_id; + private String material_id; /** * 批次 @@ -119,7 +119,7 @@ public class StIvtIostorinvdis implements Serializable { /** * 数量计量单位标识 */ - private Long qty_unit_id; + private String qty_unit_id; /** * 数量计量单位名称 @@ -139,7 +139,7 @@ public class StIvtIostorinvdis implements Serializable { /** * 出入点位标识 */ - private Long point_id; + private String point_id; /** * 箱号 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java index 13d0618..6f4784d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java @@ -44,7 +44,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 物料标识 */ - private Long material_id; + private String material_id; /** * 批次 @@ -64,7 +64,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 数量计量单位标识 */ - private Long qty_unit_id; + private String qty_unit_id; /** * 数量计量单位名称 @@ -84,7 +84,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 来源单据明细标识 */ - private Long source_billdtl_id; + private String source_billdtl_id; /** * 来源单据类型 @@ -104,7 +104,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 基础单据明细标识 */ - private Long base_billdtl_id; + private String base_billdtl_id; /** * 基础单据类型 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java index 1fab185..a00aa5d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java @@ -11,6 +11,7 @@ import org.nl.wms.st.inbill.service.dto.ChargePageParam; import org.nl.wms.st.inbill.service.dto.InBillQueryPageParam; import org.nl.wms.st.inbill.service.dto.RawAssistIStorDto; import org.nl.wms.st.inbill.service.vo.WriteOffVo; +import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam; import org.springframework.data.domain.Pageable; import java.util.List; @@ -77,4 +78,12 @@ public interface StIvtIostorinvMapper extends BaseMapper { * @return */ IPage inBillPage(IPage pages, InBillQueryPageParam paramMap); + + /** + * 出库单分页查询 + * @param pages + * @param paramMap + * @return + */ + IPage outBillPage(IPage pages, OutBillQueryPageParam paramMap); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml index 18c2d95..220940e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml @@ -578,7 +578,7 @@ AND ios.bill_type = #{paramMap.bill_type} - and ios.bill_code LIKE '%${paramMap.bill_code}%' + AND ios.bill_code LIKE '%${paramMap.bill_code}%' AND ios.create_mode = #{paramMap.create_mode} @@ -653,5 +653,213 @@ dtl.iostorinv_id ) dtl2 ON ios2.iostorinv_id = dtl2.iostorinv_id + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dto/InventoryQueryParam.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dto/InventoryQueryParam.java new file mode 100644 index 0000000..2e2907a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dto/InventoryQueryParam.java @@ -0,0 +1,27 @@ +package org.nl.b_lms.storage_manage.ios.service.iostorInv.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.nl.b_lms.storage_manage.st.service.StIvtStructivtService; + +import java.io.Serializable; +import java.util.List; + +/** + * @see StIvtStructivtService#getAllInventorys(InventoryQueryParam) + * @Author: lyd + * @Date: 2025/6/20 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InventoryQueryParam implements Serializable { + private String sect_id; + + private String stor_id; + + private List box_in; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index 5d94c19..26a3d44 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; @@ -8,10 +9,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.SneakyThrows; import org.nl.b_lms.pdm_manage.enums.SUBEnum; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.TwoExcepionalMoveTask; import org.nl.b_lms.sch.tasks.TwoOutExceptionalTask; import org.nl.b_lms.sch.tasks.TwoOutTask; @@ -29,9 +33,11 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvOutMapper; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.InventoryQueryParam; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.TwoInBussManageService; +import org.nl.b_lms.storage_manage.st.service.StIvtStructivtService; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -137,6 +143,10 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl ivtList = WQL.getWO("BST_OUTDIV").addParam("flag", "1").addParam("stor_id", mstDao.getStor_id().toString()) - .addParam("sect_id", whereJson.getString("sect_id")) - .process().getResultJSONArray(0).toJavaList(JSONObject.class); - + List ivtList = structivtService.getAllInventorys(InventoryQueryParam.builder() + .stor_id(mstDao.getStor_id()) + .sect_id(whereJson.getString("sect_id")) + .build()); if (ObjectUtil.isEmpty(ivtList)) { throw new BadRequestException("库存不足!"); } @@ -424,9 +434,6 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl taskIds = disList.stream() .map(row -> row.getString("task_id")) .distinct() - .collect(Collectors.joining("','")); - - - if (task_id_in.equals("null")) { - task_id_in = ""; + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(taskIds)) { + LambdaUpdateWrapper lam = new LambdaUpdateWrapper<>(); + lam.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")) + .in(SchBaseTask::getTask_id, taskIds); + ischBaseTaskService.update(lam); } - JSONObject taskParam = new JSONObject(); - taskParam.put("is_delete", IOSEnum.IS_NOTANDYES.code("是")); - - taskService.update(taskParam,"task_id IN ('"+task_id_in+"')"); - /* * 删除移库单、移库任务 */ @@ -664,7 +667,8 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl arr = new ArrayList<>(); @@ -691,7 +695,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl dtlDaoList = iStIvtIostorinvdtlService.list( new QueryWrapper().lambda() - .eq(StIvtIostorinvdtl::getIostorinv_id, mstDao.getIostorinv_id().toString()) + .eq(StIvtIostorinvdtl::getIostorinv_id, mstDao.getIostorinv_id()) ); // 判断是否有生成状态的 @@ -776,7 +780,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl disDaoList = iStIvtIostorinvdisService.list( new QueryWrapper().lambda() - .eq(StIvtIostorinvdis::getIostorinv_id, mstDao.getIostorinv_id().toString()) + .eq(StIvtIostorinvdis::getIostorinv_id, mstDao.getIostorinv_id()) ); //判断分配明细中是否有未生成状态的分配明细 @@ -820,13 +824,13 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl { row.setWork_status(IOSEnum.WORK_STATUS.code("生成")); row.setTask_id(task_id); - row.setPoint_id(jsonPoint.getLongValue("point_id")); + row.setPoint_id(jsonPoint.getString("point_id")); }); iStIvtIostorinvdisService.updateBatchById(disDaoList); } @@ -1905,7 +1909,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl { row.setWork_status(IOSEnum.WORK_STATUS.code("生成")); row.setTask_id(task_id); - row.setPoint_id(jsonPoint.getLongValue("point_id")); + row.setPoint_id(jsonPoint.getString("point_id")); }); iStIvtIostorinvdisService.updateBatchById(disDaoList); } @@ -2113,7 +2117,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl attrExceptionList = attrTab .query("sect_code = 'BZC01' AND is_delete = '0' AND is_used = '1' and lock_type = '" + IOSEnum.LOCK_TYPE.code("出库异常锁") + "' and zdepth = '"+IOSEnum.ZDEPTH_STRUCT.code("浅")+"'") .getResultJSONArray(0).toJavaList(JSONObject.class); @@ -2180,7 +2184,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl().lambda() .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) ); - + // 获取木箱号数组 List collectBox = listDis.stream() .map(StIvtIostorinvdis::getBox_no) .distinct() diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java index 8968330..8524b85 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -19,6 +20,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper; import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.CollectionUtils; import org.nl.common.utils.IdUtil; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.st.outbill.service.dto.OutBillTaskParam; @@ -92,13 +94,13 @@ public class StIvtIostorinvdisServiceImpl extends ServiceImpl getAllOverdueByDtlId(String iostorinvdtlId) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(StIvtIostorinvdis::getIostorinvdtl_id, iostorinvdtlId) + .eq(StIvtIostorinvdis::getIs_overdue, "1"); + List list = list(lam); + return CollectionUtils.mapList(list, dis -> (JSONObject) JSON.toJSON(dis)); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java index 5aca36c..2adffcc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java @@ -15,6 +15,8 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdtlMapper; +import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; +import org.nl.b_lms.storage_manage.md.service.MdPbMeasureunitService; import org.nl.common.utils.IdUtil; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; @@ -53,6 +55,12 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl>insertDtl(List rows, String iostorinv_id) { @@ -62,25 +70,19 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl materialCodes = rows.stream() .map(row -> JSONObject.parseObject(JSON.toJSONString(row)).getString("product_name")) .distinct() - .collect(Collectors.joining("','")); + .collect(Collectors.toList()); - List materList = WQLObject.getWQLObject("md_me_materialbase") - .query("material_code in ('" + materialCodeIn + "')") - .getResultJSONArray(0).toJavaList(JSONObject.class); + List materList = materialbaseService.getMaterialAllByCodes(materialCodes); // 查询所有物料对应的计量单位 - String unitIdIn = materList.stream() + List unitIds = materList.stream() .map(row -> row.getString("base_unit_id")) .distinct() - .collect(Collectors.joining("','")); - - List unitList = WQLObject.getWQLObject("md_pb_measureunit") - .query("measure_unit_id in ('" + unitIdIn + "')") - .getResultJSONArray(0).toJavaList(JSONObject.class); - + .collect(Collectors.toList()); + List unitList = measureunitService.getUnitAllByIds(unitIds); // 明细批量插入集合 ArrayList dtlDaoList = new ArrayList<>(); @@ -116,11 +118,11 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl @@ -97,6 +107,17 @@ public class OutBussManageServiceImpl implements OutBussManageService { */ @Autowired private TwoInBussManageService twoInBussManageService; + @Autowired + private StIvtStructivtService structivtService; + @Autowired + private MdPbMeasureunitService measureunitService; + /** 子卷包装关系 */ + @Autowired + private IpdmBiSubpackagerelationService subpackagerelationService; + @Autowired + private StIvtSectattrService sectattrService; + @Autowired + private StIvtStructattrService structattrService; @Override @Transactional @@ -106,13 +127,15 @@ public class OutBussManageServiceImpl implements OutBussManageService { throw new BadRequestException("锁定或解锁仓位不能为空!"); } - // 仓位表 - WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr"); - String operate = json.getString("operate"); if (operate.equals(IOSEnum.IO_TYPE.code("出库"))) { - - attrTab.update(json, "struct_code IN ('" + String.join("','", param) + "')"); + LambdaUpdateWrapper lam = new LambdaUpdateWrapper<>(); + lam.in(StIvtStructattr::getStruct_code, param) + .set(StIvtStructattr::getInv_id, json.getString("inv_id")) + .set(StIvtStructattr::getInv_type, json.getString("inv_type")) + .set(StIvtStructattr::getInv_code, json.getString("inv_code")) + .set(StIvtStructattr::getLock_type, json.getString("lock_type")); + structattrService.update(lam); } } @@ -182,7 +205,7 @@ public class OutBussManageServiceImpl implements OutBussManageService { } else { // 确定子卷: 找相同物料、批次的箱子 List likePcsnBoxList = ivtList.stream() - .filter(row -> row.getString("material_id").equals(dtlDao.getMaterial_id().toString()) && + .filter(row -> row.getString("material_id").equals(dtlDao.getMaterial_id()) && row.getString("pcsn").equals(dtlDao.getPcsn()) ) .collect(Collectors.toList()); @@ -264,29 +287,25 @@ public class OutBussManageServiceImpl implements OutBussManageService { List resultDisList = new ArrayList<>(); // 查询计量单位 - JSONObject jsonUnit = WQLObject.getWQLObject("md_pb_measureunit") - .query("measure_unit_id = '" + likeBoxList.get(0).getString("qty_unit_id") + "'") - .uniqueResult(0); - + List units = measureunitService.getUnitAllByIds(Stream.of(likeBoxList.get(0).getString("qty_unit_id")) + .collect(Collectors.toList())); + if (ObjectUtil.isEmpty(units)) { + throw new BadRequestException("找不到单位【" + likeBoxList.get(0).getString("qty_unit_id") + "】"); + } + JSONObject jsonUnit = units.get(0); // 查询子卷包装关系 - String pcsn_in = likeBoxList.stream() + List pcsns = likeBoxList.stream() .map(row -> row.getString("pcsn")) - .collect(Collectors.joining("','")); - - List subList = WQLObject.getWQLObject("pdm_bi_subpackagerelation") - .query("container_name in ('" + pcsn_in + "')") - .getResultJSONArray(0).toJavaList(JSONObject.class); - + .collect(Collectors.toList()); + List subList = subpackagerelationService.getSubPackageInfoBySubRolls(pcsns); for (int i = 0; i < likeBoxList.size(); i++) { JSONObject jsonIvt = likeBoxList.get(i); // 查询库区 - JSONObject jsonSect = WQLObject.getWQLObject("st_ivt_sectattr") - .query("sect_id = '" + jsonIvt.getString("sect_id") + "'") - .uniqueResult(0); + StIvtSectattr sectAttribute = sectattrService.getById(jsonIvt.getString("sect_id")); String work_status; - if (jsonSect.getString("sect_type_attr").equals(IOSEnum.SECT_TYPE.code("虚拟区"))) { + if (sectAttribute.getSect_type_attr().equals(IOSEnum.SECT_TYPE.code("虚拟区"))) { work_status = IOSEnum.WORK_STATUS.code("生成"); } else { work_status = IOSEnum.WORK_STATUS.code("未生成"); @@ -307,13 +326,13 @@ public class OutBussManageServiceImpl implements OutBussManageService { .struct_id(jsonIvt.getString("struct_id")) .struct_code(jsonIvt.getString("struct_code")) .struct_name(jsonIvt.getString("struct_name")) - .material_id(jsonIvt.getLongValue("material_id")) + .material_id(jsonIvt.getString("material_id")) .pcsn(jsonIvt.getString("pcsn")) .quality_scode(jsonIvt.getString("quality_scode")) .storagevehicle_id(jsonIvt.getString("storagevehicle_id")) .storagevehicle_code(jsonIvt.getString("storagevehicle_code")) .is_issued(IOSEnum.IS_NOTANDYES.code("否")) - .qty_unit_id(jsonUnit.getLongValue("measure_unit_id")) + .qty_unit_id(jsonUnit.getString("measure_unit_id")) .qty_unit_name(jsonUnit.getString("unit_name")) .plan_qty(jsonIvt.getBigDecimal("canuse_qty")) .real_qty(jsonIvt.getBigDecimal("canuse_qty")) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java index 40e1016..c52e071 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java @@ -25,7 +25,7 @@ public class MdMeMaterialBase implements Serializable { * 防止精度丢失 */ @TableId - private Long material_id; + private String material_id; /** * 物料编码 @@ -43,9 +43,9 @@ public class MdMeMaterialBase implements Serializable { private String english_name; - private Long base_unit_id; + private String base_unit_id; - private Long ass_unit_id; + private String ass_unit_id; private String approve_fileno; @@ -55,9 +55,9 @@ public class MdMeMaterialBase implements Serializable { /** * 物料分类 */ - private Long material_type_id; + private String material_type_id; - private Long len_unit_id; + private String len_unit_id; private BigDecimal length; @@ -68,23 +68,23 @@ public class MdMeMaterialBase implements Serializable { /** * 计量单位 */ - private Long weight_unit_id; + private String weight_unit_id; private BigDecimal gross_weight; private BigDecimal net_weight; - private Long cubage_unit_id; + private String cubage_unit_id; private BigDecimal cubage; - private Long create_id; + private String create_id; private String create_name; private String create_time; - private Long update_optid; + private String update_optid; private String update_optname; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java index 990b536..64bed56 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java @@ -15,7 +15,4 @@ import org.nl.b_lms.storage_manage.md.dao.MdMeMaterialBase; public interface MdMeMaterialBaseMapper extends BaseMapper { - - - } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java index 6950d60..b5d8bed 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java @@ -91,4 +91,11 @@ public interface MaterialbaseService { JSONArray getProductSeries(String parent_class_id); + /** + * 通过物料编码获取物料列表JSONObject + *

使用mybatis-plus

+ * @param materialCodes + * @return + */ + List getMaterialAllByCodes(List materialCodes); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MdPbMeasureunitService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MdPbMeasureunitService.java index 7a976ba..afb5981 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MdPbMeasureunitService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MdPbMeasureunitService.java @@ -1,10 +1,19 @@ package org.nl.b_lms.storage_manage.md.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.b_lms.storage_manage.md.dao.MdPbMeasureunit; import org.nl.b_lms.storage_manage.st.dao.StIvtBsrealstorattr; +import java.util.List; + public interface MdPbMeasureunitService extends IService { + /** + * 获取所有单位数据通过单位id + * @param unitIds + * @return + */ + List getUnitAllByIds(List unitIds); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java index 38d3205..f94833c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.b_lms.storage_manage.md.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; @@ -9,9 +10,13 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.md.dao.MdMeMaterialBase; +import org.nl.b_lms.storage_manage.md.dao.mapper.MdMeMaterialBaseMapper; import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; +import org.nl.common.utils.CollectionUtils; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -28,6 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * @author zhouz @@ -39,6 +45,7 @@ import java.util.Set; @Slf4j public class MaterialbaseServiceImpl implements MaterialbaseService { private final ClassstandardService classstandardService; + private final MdMeMaterialBaseMapper mdMeMaterialBaseMapper; @Override public Map queryAll(Map whereJson, Pageable page) { @@ -227,4 +234,15 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { return newParentArray; } + @Override + public List getMaterialAllByCodes(List materialCodes) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(MdMeMaterialBase::getMaterial_code, materialCodes); + List materialBases = mdMeMaterialBaseMapper.selectList(lam); + if (CollectionUtil.isEmpty(materialBases)) { + return null; + } + return CollectionUtils.mapList(materialBases, material -> (JSONObject) JSON.toJSON(material)); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdPbMeasureunitServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdPbMeasureunitServiceImpl.java index f8362ed..7433e3f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdPbMeasureunitServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdPbMeasureunitServiceImpl.java @@ -1,10 +1,33 @@ package org.nl.b_lms.storage_manage.md.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.storage_manage.md.dao.MdPbMeasureunit; import org.nl.b_lms.storage_manage.md.dao.mapper.MdPbMeasureunitMapper; +import org.nl.b_lms.storage_manage.md.service.MdPbMeasureunitService; +import org.nl.common.utils.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; -public class MdPbMeasureunitServiceImpl extends ServiceImpl implements IService { +@Slf4j +@Service +public class MdPbMeasureunitServiceImpl extends ServiceImpl implements MdPbMeasureunitService { + @Autowired + private MdPbMeasureunitMapper mdPbMeasureunitMapper; + + @Override + public List getUnitAllByIds(List unitIds) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(MdPbMeasureunit::getMeasure_unit_id, unitIds); + List mdPbMeasureunits = mdPbMeasureunitMapper.selectList(lam); + return CollectionUtils.mapList(mdPbMeasureunits, mdPbMeasureunit -> (JSONObject) JSON.toJSON(mdPbMeasureunit)); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java index 7e24a56..17ce914 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java @@ -1,13 +1,18 @@ package org.nl.b_lms.storage_manage.st.dao.mapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.InventoryQueryParam; import org.nl.b_lms.storage_manage.st.dao.StIvtStructivt; import org.nl.common.domain.query.PageQuery; import org.nl.wms.basedata.st.service.dto.ProductStoreDownDto; import org.nl.wms.basedata.st.service.dto.ProductStoreParam; import org.nl.wms.basedata.st.service.vo.ProductStoreVo; +import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam; +import org.nl.wms.st.outbill.service.vo.StockMaterialVo; import org.nl.wms.stat.service.dto.PastStructPageParam; import org.nl.wms.stat.service.vo.PastStructPageVo; @@ -25,4 +30,16 @@ public interface StIvtStructivtMapper extends BaseMapper { IPage getPastStructPage(IPage pages, @Param("paramMap") PastStructPageParam paramMap); List getPastStructDatas(@Param("paramMap") PastStructPageParam paramMap); + + /** + * 查询库存(创建出库单选择物料)- 分页查询 + * @param paramMap 参数 + * @param pages 分页 + * @return {@link StockMaterialVo} + */ + IPage queryAddDtl(StockMaterialQueryParam paramMap, IPage pages); + + JSONArray getBoxAllMaterial(String boxNo); + + List getAllInventorys(@Param("param") InventoryQueryParam param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml index cc11b05..bae0dbe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml @@ -666,4 +666,165 @@
ORDER BY sub.package_box_sn ASC + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtStructivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtStructivtService.java index 1c8daf3..d0482ec 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtStructivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtStructivtService.java @@ -1,8 +1,10 @@ package org.nl.b_lms.storage_manage.st.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.apache.ibatis.annotations.Param; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.InventoryQueryParam; import org.nl.b_lms.storage_manage.st.dao.StIvtStructivt; import org.nl.common.domain.query.PageQuery; import org.nl.wms.basedata.st.service.dto.ProductStoreDownDto; @@ -63,4 +65,11 @@ public interface StIvtStructivtService extends IService { * @return */ StIvtStructivt getOneByPcsn(String pcsn, boolean throwEx); + + /** + * 获取所有库存信息 + * @param param + * @return + */ + List getAllInventorys(InventoryQueryParam param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtStructivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtStructivtServiceImpl.java index 21888dd..5e2085e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtStructivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtStructivtServiceImpl.java @@ -1,9 +1,11 @@ package org.nl.b_lms.storage_manage.st.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.InventoryQueryParam; import org.nl.b_lms.storage_manage.st.dao.StIvtStructivt; import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructivtMapper; import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService; @@ -71,4 +73,9 @@ public class StIvtStructivtServiceImpl extends ServiceImpl getAllInventorys(InventoryQueryParam param) { + return stIvtStructivtMapper.getAllInventorys(param); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java index 5776a6e..ff6fad0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java @@ -18,7 +18,7 @@ import java.util.Map; @Getter public enum PackageInfoIvtEnum { //点位类型 - POINT_STATUS(MapOf.of("满轴缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5", "装箱区", "6","等待点", "7")), + POINT_STATUS(MapOf.of("子卷缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5", "装箱区", "6","等待点", "7")), //深浅位类型 DEPTH_TYPE(MapOf.of("浅货位", "0", "深货位", "1")), diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/CollectionUtils.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/CollectionUtils.java new file mode 100644 index 0000000..a747cfe --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/CollectionUtils.java @@ -0,0 +1,22 @@ +package org.nl.common.utils; + +import cn.hutool.core.collection.CollUtil; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Date: 2025/6/20 + */ +public class CollectionUtils { + public static List mapList(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().map(func).collect(Collectors.toList()); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 98c9391..1245850 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -117,12 +117,7 @@ public class AcsToWmsController { - @PostMapping("/sendProductToFirstFloor") - @Log(value = "成品子卷到达一楼输送线", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) - @SaIgnore - public ResponseEntity sendProductToFirstFloor(@RequestBody JSONObject json) { - return new ResponseEntity<>(acsToWmsService.sendProductToFirstFloor(json), HttpStatus.OK); - } + @PostMapping("/applyTwo") @Log(value = "二期入库申请任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) @@ -160,7 +155,7 @@ public class AcsToWmsController { } @PostMapping("/sendSubVolumeApply") - @Log(value = "二期内包间送子卷请求", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @Log(value = "二期套管工位请求判断去成品还是废箔", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) @SaIgnore public ResponseEntity sendSubVolumeApply(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.sendSubVolumeApply(param), HttpStatus.OK); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index c690493..c6034bf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -25,15 +25,7 @@ public interface AcsToWmsService { String againApply(String task_id); - /** - * ACS客户端--->WMS服务端 - * ACS向WMS反馈点位状态 - * - * @param jsonObject 条件 - * @return Map - */ - Map receivePointStatusFromAcs(Map jsonObject); /** * ACS给WMS下发工单强制完成状态 @@ -94,14 +86,7 @@ public interface AcsToWmsService { - /** - * ACS客户端--->LMS服务端 - * 成品子卷到达一楼输送线 - * - * @param whereJson 条件 - * @return JSONObject - */ - JSONObject sendProductToFirstFloor(JSONObject whereJson); + /** @@ -159,7 +144,7 @@ public interface AcsToWmsService { JSONObject slitterApply(JSONObject param); /** - * 二期内包间送子卷请求 + * 二期套管工位请求判断去成品还是废箔 * @param param / * @return / */ diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 48e3367..52912d3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -31,8 +31,6 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.TwoBoxExcepTask; import org.nl.b_lms.sch.tasks.TwoExceptionInTask; -import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask; -import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask; import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.IMdpbBoxtypeService; @@ -148,11 +146,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private MzhcwTask mzhcwTask; - @Resource - private SsxDjwTask ssxDjwTask; @Autowired private IMdpbBoxtypeService iMdpbBoxtypeService; @@ -272,10 +266,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return point_code; } - @Override - public Map receivePointStatusFromAcs(Map jsonObject) { - return null; - } + @Override public Map orderFinish(String string) { @@ -1208,144 +1199,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } } - /** - * 二楼到一楼,成品子卷到达一楼输送线 - */ - @Override - public JSONObject sendProductToFirstFloor(JSONObject whereJson) { - log.info("sendProductToFirstFloor被调用--------------------------:" + whereJson.toString()); - if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) { - throw new BadRequestException("接口sendProductToFirstFloor,目标站点或子卷号参数为空!"); - } - if (whereJson.getString("device_code").equals("null") || whereJson.getString("material_barcode").equals("null")) { - throw new BadRequestException("接口sendProductToFirstFloor,目标站点或子卷号参数为null!"); - } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.BAD_REQUEST.value()); - result.put("data", whereJson.getString("material_barcode")); - RedissonUtils.lock(c->{ - //1.查询满轴缓存位是否有空位 - List MzPoints = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) - .orderByDesc(BstIvtPackageinfoivt::getSort_seq)); - if (CollectionUtils.isEmpty(MzPoints)){ - result.put("message", "满轴位无可用位置"); - return result; - } - List empPoints = packageinfoivtService - .selectNoTargetTaskPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); - if (CollectionUtils.isEmpty(empPoints)){ - result.put("message", "空轴位无可用位置"); - return result; - } - // 创建前先判断是否有已创建相同任务 - List taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))); - List existTaskList1 = taskService.getExistTasks(taskTypes); - List existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList()); - List existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(existTaskList2) ||!CollectionUtils.isEmpty(existTaskList3) ){ - result.put("message", "存在正在执行的输送线行架任务"); - return result; - } - List sortEmpPoint = empPoints.stream().sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList()); - JSONObject taskParam = new JSONObject(); - taskParam.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - taskParam.put("vehicle_code", whereJson.getString("material_barcode")); - taskParam.put("point_code1", whereJson.getString("device_code")); - taskParam.put("point_code2", MzPoints.get(0).getPoint_code()); - taskParam.put("point_code3", sortEmpPoint.get(0).getPoint_code()); - taskParam.put("point_code4", whereJson.getString("device_code")); - taskParam.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")); - taskParam.put("is_send", true); - mzhcwTask.createTask(taskParam); - PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,null,Boolean.TRUE,null,whereJson.getString("material_barcode")); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - result.put("status", HttpStatus.OK.value()); - result.put("message", "反馈成功!"); - return result; - },"sendProductToFirstFloor",null); - log.info("sendProductToFirstFloor调用成功--------------------------:" + result); - return result; - } - /** - * 无空载具下发确定终点的补空桁架任务 - */ - private JSONObject createTask2(String containerName, JSONObject jo) { - JSONObject result = new JSONObject(); - result.put("data", containerName); - //如果空载具缓存位缺少空载具,创建输送线->满轴缓存位两个点任务 - // 创建前先判断是否有已创建相同任务 - List taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))); - List existTaskList1 = taskService.getExistTasks(taskTypes); - List existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList()); - List existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList()); - if (ObjectUtils.isEmpty(existTaskList2)&&ObjectUtils.isEmpty(existTaskList3)) { - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); - jo.put("is_send", true); - mzhcwTask.createTask(jo); - PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,null,Boolean.TRUE,null,containerName); - - //不确定起点的空载具缓存位->输送线任务 - createTask3(containerName); - result.put("status", HttpStatus.OK.value()); - result.put("message", "反馈成功!"); - } else { - log.info("存在上一个子卷未完成的桁架任务或已分配的补空载具任务,任务编号为:" + existTaskList1.get(0).getTask_code() + ",请检查!"); - result.put("message", "存在上一个子卷未完成的桁架任务或已分配的补空载具任务,任务编号为:" + existTaskList1.get(0).getTask_code() + ",请检查!"); - result.put("status", HttpStatus.BAD_REQUEST.value()); - } - return result; - } - - /** - * 不确定起点的空载具缓存位->输送线任务 - */ - private void createTask3(String containerName) { - //空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务 - JSONObject jo1 = new JSONObject(); - //创建确定终点任务 - jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")); - jo1.put("point_code2", "NBJ1002"); - jo1.put("vehicle_code", containerName); - jo1.put("task_status", TaskStatusEnum.SURE_END.getCode()); - jo1.put("is_send", false); - ssxDjwTask.createTask(jo1); - } - - private JSONObject createTask(String containerName, JSONObject jo, String pointCode3, String pointCode4) { - JSONObject result = new JSONObject(); - result.put("data", containerName); - // 创建前先判断是否有已创建相同任务 - List taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))); - List existTaskList1 = taskService.getExistTasks(taskTypes); - List existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList()); - List existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList()); - if (ObjectUtils.isEmpty(existTaskList2)&&ObjectUtils.isEmpty(existTaskList3)) { - jo.put("point_code3", pointCode3); - //终点为输送线点位 - jo.put("point_code4", pointCode4); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")); - jo.put("is_send", true); - mzhcwTask.createTask(jo); - PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,null,Boolean.TRUE,null,containerName); - - result.put("status", HttpStatus.OK.value()); - result.put("message", "反馈成功!"); - } else { - log.info("存在上一个子卷未完成的桁架任务或已分配的补空载具任务,任务编号为:" + existTaskList1.get(0).getTask_code() + ",请检查!"); - result.put("message", "存在上一个子卷未完成的桁架任务或已分配的补空载具任务,任务编号为:" + existTaskList1.get(0).getTask_code() + ",请检查!"); - result.put("status", HttpStatus.BAD_REQUEST.value()); - } - return result; - } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InchargeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InchargeServiceImpl.java index 996f469..1c2e077 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InchargeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InchargeServiceImpl.java @@ -457,7 +457,7 @@ public class InchargeServiceImpl implements InchargeService { outDis.setMaterial_id(inDis.getMaterial_id()); outDis.setPcsn(inDis.getPcsn()); outDis.setBox_no(inDis.getBox_no()); - outDis.setPoint_id(0L); + outDis.setPoint_id("0"); outDis.setTask_id(""); outDis.setQuality_scode("01"); // 如果是虚拟库区则将执行状态改为生成:01 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/OutChargeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/OutChargeServiceImpl.java index 2e98939..2eb0636 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/OutChargeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/OutChargeServiceImpl.java @@ -356,7 +356,7 @@ public class OutChargeServiceImpl implements OutChargeService { disRow.setSect_name(""); disRow.setWork_status("00"); disRow.setReal_qty(BigDecimal.ZERO); - disRow.setPoint_id(0L); + disRow.setPoint_id("0"); disRow.setTask_id(""); needSaveDisList.add(disRow); //将包装关系中对应的记录状态改为包装 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java index 44504ad..8341fab 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java @@ -1,18 +1,27 @@ package org.nl.wms.st.outbill.rest; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; import org.nl.modules.logging.annotation.Log; import org.nl.system.service.dict.ISysDictService; import org.nl.wms.st.outbill.service.CheckOutBillService; import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam; +import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam; import org.nl.wms.st.outbill.service.dto.OutBillTaskParam; +import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.Map; /** + * 出库单管理 * @Author: lyd * @Date: 2025/6/11 */ @@ -24,11 +33,37 @@ public class CheckOutBillController { private CheckOutBillService checkOutBillService; @Resource private ISysDictService dictService; + @Resource + private IStIvtIostorinvOutService iStIvtIostorinvOutService; + @GetMapping + @Log("查询出库单") + //@PreAuthorize("@el.check('checkoutbill:list')") + public ResponseEntity query(OutBillQueryPageParam paramMap, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(checkOutBillService.queryOutBillPage(paramMap, page)), HttpStatus.OK); + } @GetMapping("/getOutBillDtl") @Log("查询出库明细") public ResponseEntity getOutBillDtl(OutBillDtlQueryParam param) { return new ResponseEntity<>(checkOutBillService.getOutBillDtl(param), HttpStatus.OK); } + @GetMapping("/addDtl") + @Log("查询库存(创建出库单选择物料)") + //@PreAuthorize("@el.check('checkoutbill:list')") + public ResponseEntity queryAddDtl(StockMaterialQueryParam paramMap, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(checkOutBillService.queryAddDtl(paramMap, page)), HttpStatus.OK); + } + @PostMapping("/queryBox") + @Log("新增物料库存条件过滤") + public ResponseEntity queryBox(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(checkOutBillService.queryBox(whereJson), HttpStatus.OK); + } + + @PostMapping() + @Log("新增出库单") + public ResponseEntity insertDtl(@RequestBody JSONObject whereJson) { + iStIvtIostorinvOutService.insertMst(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } @PostMapping("/getOutBillTask2") @Log("详情查询出库单分配任务2") public ResponseEntity getOutBillTask2(@RequestBody OutBillTaskParam param) { @@ -39,4 +74,50 @@ public class CheckOutBillController { public ResponseEntity getInvTypes() { return new ResponseEntity<>(dictService.getInvTypes(), HttpStatus.OK); } + @GetMapping("/getOutBillDis2") + @Log("查询未出库单分配") + public ResponseEntity getOutBillDis2(@RequestParam Map whereJson) { + return new ResponseEntity<>(checkOutBillService.getOutBillDis2(whereJson), HttpStatus.OK); + } + @PostMapping("/allDiv") + @Log("出库单全部分配") + public ResponseEntity allDiv(@RequestBody JSONObject whereJson) { + iStIvtIostorinvOutService.allDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @GetMapping("/getOutBillTask") + @Log("查询出库单分配任务") + public ResponseEntity getOutBillTask(@RequestParam Map whereJson) { + return new ResponseEntity<>(checkOutBillService.getOutBillTask(whereJson), HttpStatus.OK); + } + @PostMapping("/allDivOne") + @Log("出库单自动分配") + public ResponseEntity allDivOne(@RequestBody JSONObject whereJson) { + iStIvtIostorinvOutService.allDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @PostMapping("/allCancel") + @Log("出库单全部取消") + public ResponseEntity allCancel(@RequestBody JSONObject whereJson) { + iStIvtIostorinvOutService.cancelDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @PostMapping("/updataIsOverdue") + @Log("更新是否超期") + public ResponseEntity updataIsOverdue(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(checkOutBillService.updataIsOverdue(whereJson),HttpStatus.OK); + } + + @PostMapping("/allSetPoint") + @Log("一键设置") + public ResponseEntity allSetPoint(@RequestBody JSONObject whereJson) { + iStIvtIostorinvOutService.allSetPoint(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @PostMapping("/confirm") + @Log("出库单强制确认") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + iStIvtIostorinvOutService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java index 5bcab01..4096454 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java @@ -1,11 +1,20 @@ package org.nl.wms.st.outbill.service; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.common.domain.query.PageQuery; import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam; +import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam; import org.nl.wms.st.outbill.service.dto.OutBillTaskParam; +import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam; import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; import org.nl.wms.st.outbill.service.vo.OutBillTaskVo; +import org.nl.wms.st.outbill.service.vo.StockMaterialVo; import java.util.List; +import java.util.Map; /** * @Author: lyd @@ -25,4 +34,39 @@ public interface CheckOutBillService { * @return */ List getOutBillTask2(OutBillTaskParam param); + + IPage queryOutBillPage(OutBillQueryPageParam paramMap, PageQuery page); + + /** + * 查询库存(创建出库单选择物料)- 分页查询 + * @param paramMap + * @param page + * @return + */ + IPage queryAddDtl(StockMaterialQueryParam paramMap, PageQuery page); + + /** + * + * @param whereJson + * @return + */ + JSONArray queryBox(JSONObject whereJson); + + JSONArray getOutBillDis2(Map whereJson); + + /** + * 查询出库单分配任务 + * + * @param whereJson / + * @return + */ + JSONArray getOutBillTask(Map whereJson); + + /** + * 更新是否超期 + * @param whereJson { + * 主表数据 + * } + */ + JSONObject updataIsOverdue(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutBillQueryPageParam.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutBillQueryPageParam.java new file mode 100644 index 0000000..73b93e5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutBillQueryPageParam.java @@ -0,0 +1,34 @@ +package org.nl.wms.st.outbill.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: lyd + * @Date: 2025/6/18 + */ +@Data +public class OutBillQueryPageParam implements Serializable { + private String bill_code; + private List stor_id; + private List bill_status; + private List bill_type; + private String vbeln; + private List vbeln_in; + private String box_no; + private List box_no_in; + private String pcsn; + private List pcsn_in; + private String sap_pcsn; + private List sap_pcsn_in; + private List in_stor_id; + private String cust_code; + private String width; + private String is_upload; + private String begin_time; + private String end_time; + private String create_mode; + private String flag; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/StockMaterialQueryParam.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/StockMaterialQueryParam.java new file mode 100644 index 0000000..5c73764 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/StockMaterialQueryParam.java @@ -0,0 +1,31 @@ +package org.nl.wms.st.outbill.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 出库单物料选择查询参数 + * @Author: lyd + * @Date: 2025/6/19 + */ +@Data +public class StockMaterialQueryParam implements Serializable { + private String stor_id; + private String material_code; + private String pcsn; + private List pcsn_in; + private List sap_pcsn_in; + private String sap_pcsn; + private String package_box_sn; + private List box_no_in; + private String width_standard; + private String thickness_request; + private String customer_name; + private String struct_code; + private String begin_time; + private String end_time; + private String create_mode; + private String canuse_qty; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index c34a6ed..537e974 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -1,17 +1,38 @@ package org.nl.wms.st.outbill.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvMapper; +import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructivtMapper; +import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.StringDealUtils; +import org.nl.modules.wql.WQL; import org.nl.wms.st.outbill.service.CheckOutBillService; import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam; +import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam; import org.nl.wms.st.outbill.service.dto.OutBillTaskParam; +import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam; import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; import org.nl.wms.st.outbill.service.vo.OutBillTaskVo; +import org.nl.wms.st.outbill.service.vo.StockMaterialVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; /** * @Author: lyd @@ -24,6 +45,15 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { private IStIvtIostorinvdtlService iostorinvdtlService; @Autowired private IStIvtIostorinvdisService iostorinvdisService; + @Autowired + private StIvtBsrealstorattrService bsrealstorattrService; + @Autowired + private IStIvtIostorinvService stIvtIostorinvService; + @Autowired + private StIvtIostorinvMapper stIvtIostorinvMapper; + @Autowired + private StIvtStructivtMapper stIvtStructivtMapper; + @Override public List getOutBillDtl(OutBillDtlQueryParam param) { return iostorinvdtlService.getOutBillDtl(param); @@ -33,4 +63,117 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { public List getOutBillTask2(OutBillTaskParam param) { return iostorinvdisService.getOutBillTask2(param); } + + @Override + public IPage queryOutBillPage(OutBillQueryPageParam paramMap, PageQuery page) { + paramMap.setPcsn_in(StringDealUtils.splitString(paramMap.getPcsn())); + paramMap.setBox_no_in(StringDealUtils.splitString(paramMap.getBox_no())); + paramMap.setSap_pcsn_in(StringDealUtils.splitString(paramMap.getSap_pcsn())); + paramMap.setVbeln_in(StringDealUtils.splitString(paramMap.getVbeln())); + if (CollectionUtil.isNotEmpty(paramMap.getPcsn_in())) { + paramMap.setPcsn(""); + paramMap.setFlag("1"); + } + if (CollectionUtil.isNotEmpty(paramMap.getBox_no_in())) { + paramMap.setBox_no(""); + paramMap.setFlag("1"); + } + if (CollectionUtil.isNotEmpty(paramMap.getSap_pcsn_in())) { + paramMap.setSap_pcsn(""); + paramMap.setFlag("1"); + } + if (CollectionUtil.isNotEmpty(paramMap.getVbeln_in())) { + paramMap.setVbeln(""); + paramMap.setFlag("1"); + } + //获取人员对应的仓库 + List storIds = bsrealstorattrService.getStoreForUser(SecurityUtils.getCurrentUserId()); + paramMap.setIn_stor_id(storIds); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + return stIvtIostorinvMapper.outBillPage(pages, paramMap); + } + + @Override + public IPage queryAddDtl(StockMaterialQueryParam paramMap, PageQuery page) { + paramMap.setCanuse_qty("0"); + paramMap.setPcsn_in(StringDealUtils.splitString(paramMap.getPcsn())); + paramMap.setBox_no_in(StringDealUtils.splitString(paramMap.getPackage_box_sn())); + paramMap.setSap_pcsn_in(StringDealUtils.splitString(paramMap.getSap_pcsn())); + if (CollectionUtil.isNotEmpty(paramMap.getPcsn_in())) { + paramMap.setPcsn(""); + } + if (CollectionUtil.isNotEmpty(paramMap.getBox_no_in())) { + paramMap.setPackage_box_sn(""); + } + if (CollectionUtil.isNotEmpty(paramMap.getSap_pcsn_in())) { + paramMap.setSap_pcsn(""); + } + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + return stIvtStructivtMapper.queryAddDtl(paramMap, pages); + } + + @Override + public JSONArray queryBox(JSONObject whereJson) { + JSONArray data = whereJson.getJSONArray("data"); + // 先过滤相同的箱号 + HashSet boxSet = new HashSet<>(); + for (int i = 0; i < data.size(); i++) { + JSONObject json = data.getJSONObject(i); + boxSet.add(json.getString("box_no")); + } + + JSONArray array = new JSONArray(); + // 遍历 + for (String box_no : boxSet) { + JSONArray boxArr = stIvtStructivtMapper.getBoxAllMaterial(box_no); + array.addAll(boxArr); + } + return array; + } + + @Override + public JSONArray getOutBillDis2(Map whereJson) { + whereJson.put("flag", "52"); + JSONArray jo = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParamMap((HashMap) whereJson) + .process() + .getResultJSONArray(0); + return jo; + } + + @Override + public JSONArray getOutBillTask(Map whereJson) { + HashMap map = new HashMap<>(whereJson); + map.put("flag", "10"); + if ("true".equals(map.get("checked"))) { + map.put("task_status", "99"); + } + JSONArray jo = new JSONArray(); + if (map.containsKey("iostorinvdtl_id")) { + jo = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParamMap(map) + .process() + .getResultJSONArray(0); + } + return jo; + } + + @Override + public JSONObject updataIsOverdue(JSONObject whereJson) { + // 更新主表 + StIvtIostorinv jsonMst = stIvtIostorinvService.getById(whereJson.getString("iostorinv_id")); + jsonMst.setIs_overdue("1"); + stIvtIostorinvService.updateById(jsonMst); + + // 计算超期数量 + List disList = iostorinvdisService.getAllOverdueByDtlId(whereJson.getString("iostorinvdtl_id")); + double overdue_qyt = disList.stream() + .map(row -> row.getDoubleValue("plan_qty")) + .reduce(Double::sum).orElse(0.00); + + JSONObject result = new JSONObject(); + result.put("overdue_qyt", overdue_qyt); + result.put("mst", jsonMst); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/OutBillDtlVo.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/OutBillDtlVo.java index e807088..8bc1220 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/OutBillDtlVo.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/OutBillDtlVo.java @@ -30,7 +30,7 @@ public class OutBillDtlVo implements Serializable { /** * 物料标识 */ - private Long material_id; + private String material_id; /** * 批次 @@ -50,7 +50,7 @@ public class OutBillDtlVo implements Serializable { /** * 数量计量单位标识 */ - private Long qty_unit_id; + private String qty_unit_id; /** * 数量计量单位名称 @@ -70,7 +70,7 @@ public class OutBillDtlVo implements Serializable { /** * 来源单据明细标识 */ - private Long source_billdtl_id; + private String source_billdtl_id; /** * 来源单据类型 @@ -90,7 +90,7 @@ public class OutBillDtlVo implements Serializable { /** * 基础单据明细标识 */ - private Long base_billdtl_id; + private String base_billdtl_id; /** * 基础单据类型 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/StockMaterialVo.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/StockMaterialVo.java new file mode 100644 index 0000000..eadf383 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/StockMaterialVo.java @@ -0,0 +1,35 @@ +package org.nl.wms.st.outbill.service.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 出库单物料选择库存物料VO + * + * @Author: lyd + * @Date: 2025/6/19 + */ +@Data +public class StockMaterialVo implements Serializable { + private String stockrecord_id; + private String struct_id; + private String struct_code; + private String struct_name; + private String region_id; + private String material_id; + private String quality_scode; + private String pcsn; + private String canuse_qty; + private String frozen_qty; + private String ivt_qty; + private String plan_qty; + private String warehousing_qty; + private String qty_unit_id; + private String instorage_time; + private String material_name; + private String material_code; + private String qty_unit_name; + private String box_no; + private String sap_pcsn; +} diff --git a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java b/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java deleted file mode 100644 index 8fbb5fc..0000000 --- a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java +++ /dev/null @@ -1,325 +0,0 @@ -package org.nl.init; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -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.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt; -import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.mapper.BstIvtShafttubeivtMapper; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; -import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; -import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.tasks.first_floor_area.*; -import org.nl.b_lms.sch.tasks.slitter.service.impl.SlitterServiceImpl; -import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; -import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; -import org.nl.common.enums.ContainerLevelEnum; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.system.service.param.ISysParamService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import javax.annotation.Resource; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -@Slf4j -@ExtendWith(SpringExtension.class) -@DisplayName("event test") -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class EventTest { - - @Resource - private ZxqTask zxqTask; - @Resource - private ZxDjwTask zxDjwTask; - - @Resource - private ISysParamService iSysParamService; - - @Resource - private DjqTask djqTask; - @Resource - private GzqTask gzqTask; - - @Resource - private DjqToKzjhcwTask djqToKzjhcwTask; - - @Resource - private OutBoxManageService outBoxManageService; - - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - @Resource - private PdmBiSubpackagerelationMapper pdmBiSubpackagerelationMapper; - @Autowired - private BstIvtShafttubeivtMapper bstIvtShafttubeivtMapper; - @Autowired - private SchBasePointMapper schBasePointMapper; - @Autowired - private IPdmBiSlittingproductionplanService slittingproductionplanService; - @Test - public void sss() { - System.out.println(schBasePointMapper.queryKZPoint()); - } - - @Test - public void getWeight() { - List plans = slittingproductionplanService.getByQzzNos(Arrays.asList("B203-4")); - String weights = ""; - SlitterTaskUtil.setPaperWeightStr(weights, plans); - slittingproductionplanService.updateBatchById(plans); - System.out.println(weights); - } - - @Test - public void testValidate() { - // 示例数据 - JSONArray jsonArray = JSONArray.parseArray( - "[{\"container_name\":\"A\", \"site\":\"1\"},{\"container_name\":\"B\", \"site\":\"2\"}]" - ); - - PdmBiSlittingproductionplan p1 = new PdmBiSlittingproductionplan(); - PdmBiSlittingproductionplan p2 = new PdmBiSlittingproductionplan(); - p1.setContainer_name("A"); - p1.setUp_or_down("1"); - p2.setContainer_name("B"); - p2.setUp_or_down("2"); - List plans = Arrays.asList(p1, p2); - - // 执行校验 - SlitterTaskUtil.validateConsistency(jsonArray, plans); - } - - - @Test - public void sl() { - List notTaskShaftCache = bstIvtShafttubeivtMapper.getNotTaskShaftCache("3", "4", "0"); - System.out.println(notTaskShaftCache); - } - - /** - * 装箱区->空载具缓存位补空 - */ - @Test - public void zxToKzjHcw() { - //djqToKzjhcwTask.toKzjHcw(""); - } - - /** - * 满轴->待检 - */ - @Test - public void mzToDj() { - //子卷成色等级 - String level = "1"; - //子卷号 - String containerName = "1"; - //起点 - String pointCode1 = "2"; - //查询库位信息 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - JSONObject toDjqTask = new JSONObject(); - //获取子卷号 - toDjqTask.put("vehicle_code", containerName); - // 判断子卷等级属于待检区还是管制区,创建满轴缓存位到待检区或管制区的agv任务 - if (Stream.of(ContainerLevelEnum.BEST, ContainerLevelEnum.WELL, ContainerLevelEnum.COMMON).anyMatch(enumItem -> enumItem.getCode().equals(level))) { - List djqPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(djqPointList)) { - throw new BadRequestException("待检区暂无空余库位!"); - } - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); - toDjqTask.put("point_code1", pointCode1); - toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); - djqTask.createTask(toDjqTask); - } else if (Stream.of(ContainerLevelEnum.REWORK, ContainerLevelEnum.CONTROL).anyMatch(enumItem -> enumItem.getCode().equals(level))) { - List gkqPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(gkqPointList)) { - throw new BadRequestException("管控区暂无空余库位!"); - } - toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); - toDjqTask.put("point_code1", pointCode1); - toDjqTask.put("point_code2", gkqPointList.get(0).getPoint_code()); - gzqTask.createTask(toDjqTask); - } - } - - /** - * 待检->装箱 - */ - @Test - public void djToZx() { - //子卷号 - String containerName = ""; - //起点 - String pointCode1 = ""; - //木箱 - String boxSn = ""; - //装箱区点位 - List zxqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) - //装箱区1 - .eq(BstIvtPackageinfoivt::getBlock, "1") - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); - jo.put("vehicle_code", containerName); - jo.put("point_code1", pointCode1); - //木箱号 - jo.put("vehicle_code2", boxSn); - //装箱区没满,则确定起点与终点,如果满了则只确定起点 - if (CollectionUtils.isNotEmpty(zxqPointList)) { - jo.put("point_code2", zxqPointList.get(0).getPoint_code()); - } - zxqTask.createTask(jo); - } - - - /** - * 空木箱出库 - */ - @Test - public void outBox() { - JSONObject boxInfo = new JSONObject(); - boxInfo.put("device_code", "ZXQ_1_1"); - boxInfo.put("material_code", "MX61102"); - String workorderId = "1597797877554483218"; - //子卷个数 - boxInfo.put("num", "1"); - String boxSn = outBoxManageService.outBox(boxInfo); - if (StringUtils.isBlank(boxSn)) { - throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!"); - } - //更新子卷包装关系更新木箱号 - UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); - updateWrapper1.set("package_box_sn", boxSn); - updateWrapper1.eq("workorder_id", workorderId); - pdmBiSubpackagerelationMapper.update(null, updateWrapper1); - } - - /** - * 装箱区->装箱对接位桁架任务 - */ - @Test - public void transferToPacking() { - JSONObject jo = new JSONObject(); - //子卷号 - String containerName = "A1642211060505E2"; - //获取纸管长度 - String frpDescription = "1300"; - //获取木箱高度等级 - String height = "730"; - //起点 - String point_code1 = "ZXQ_1_9"; - //终点 - String point_code2 = "ZXQ_1_1"; - //托盘类型 1小托盘 2大托盘 - String containerType = "2"; - //木箱高度等级 - String heightLevel = ""; - String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); - String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); - if (Integer.parseInt(height) <= Integer.parseInt(heightLevel1)) { - heightLevel = "1"; - } else if (Integer.parseInt(height) > Integer.parseInt(heightLevel1) && Integer.parseInt(height) <= Integer.parseInt(heightLevel2)) { - heightLevel = "2"; - } else { - heightLevel = "3"; - } - jo.put("point_code1", point_code1); - jo.put("point_code2", point_code2); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - jo.put("vehicle_code", containerName); - jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo.put("is_send", "1"); - JSONObject param = new JSONObject(); - //木箱最大数量 - param.put("maxNo", "1"); - //木箱放入子卷数量 - param.put("boxNo", "1"); - //是否最后子卷 - param.put("lastOne", "1"); - //子卷号 - param.put("barcode", containerName); - //子卷长度 - param.put("len", frpDescription); - //木箱高度等级 - param.put("heightLevel", heightLevel); - //托盘类型 1小托盘 2大托盘 - param.put("containerType", containerType); - jo.put("request_param", param.toString()); - zxDjwTask.createTask(jo); - } - - /** - * 装箱区->装箱对接位桁架任务2 - */ - @Test - public void transferToPacking1() { - //下发装箱区->装箱对接位桁架任务 - JSONObject jo = new JSONObject(); - //子卷号 - String containerName = ""; - //获取纸管长度 - String frpDescription = ""; - //起点 - String point_code1 = "ZXQ_1_8"; - //终点 - String point_code2 = "ZXQ_1_1"; - jo.put("point_code1", point_code1); - jo.put("point_code2", point_code2); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); - jo.put("vehicle_code", containerName); - jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo.put("is_send", "1"); - JSONObject param = new JSONObject(); - //木箱最大数量 - param.put("maxNo", "1"); - //木箱放入子卷数量 - param.put("boxNo", "1"); - //是否最后子卷 - param.put("lastOne", "1"); - //子卷号 - param.put("barcode", containerName); - //子卷长度 - param.put("len", frpDescription); - //托盘类型 1小托盘 2大托盘 - param.put("containerType", "1"); - jo.put("request_param", param.toString()); - zxDjwTask.createTask(jo); - } - - public static void main(String[] args) { - String name = "纸制筒管|纸管|6英寸|12|650"; - if (name.contains("3英寸") || name.contains("3.12英寸")) { - System.out.println("4"); - } else { - System.out.println("5"); - } - } -} diff --git a/lms/nladmin-system/src/test/java/org/nl/test/EventTest.java b/lms/nladmin-system/src/test/java/org/nl/test/EventTest.java new file mode 100644 index 0000000..be57a21 --- /dev/null +++ b/lms/nladmin-system/src/test/java/org/nl/test/EventTest.java @@ -0,0 +1,18 @@ +package org.nl.test; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +/** + * @Author: lyd + * @Date: 2025/6/23 + */ +@Slf4j +@ExtendWith(SpringExtension.class) +@DisplayName("event test") +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class EventTest { +} diff --git a/lms/nladmin-ui/src/views/wms/st/inbill/ViewDialog.vue b/lms/nladmin-ui/src/views/wms/st/inbill/ViewDialog.vue index ad64f67..fd54d01 100644 --- a/lms/nladmin-ui/src/views/wms/st/inbill/ViewDialog.vue +++ b/lms/nladmin-ui/src/views/wms/st/inbill/ViewDialog.vue @@ -96,6 +96,7 @@ { this.tableDtl = res + this.loading = false }) }, queryTableDdis() { if (this.currentdtl !== null) { - checkoutbill.getOutBillTask({ 'iostorinvdtl_id': this.currentdtl.iostorinvdtl_id }).then(res => { + checkoutbill.getOutBillTask2({ 'iostorinvdtl_id': this.currentdtl.iostorinvdtl_id }).then(res => { this.tabledis = res }).catch(() => { this.tabledis = [] + }).finally(() => { + this.loading2 = false }) } } diff --git a/lms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue b/lms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue index 31f0c19..beddedd 100644 --- a/lms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue +++ b/lms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue @@ -57,8 +57,8 @@ > @@ -99,7 +99,7 @@ - + --> - +