diff --git a/lms/nladmin-system/pom.xml b/lms/nladmin-system/pom.xml index 5a0947d80..8f6408f96 100644 --- a/lms/nladmin-system/pom.xml +++ b/lms/nladmin-system/pom.xml @@ -113,6 +113,11 @@ hutool-all ${hutool.version} + + org.apache.shardingsphere + shardingsphere-jdbc-core-spring-boot-starter + 5.1.1 + org.springframework.boot @@ -201,8 +206,8 @@ com.alibaba - druid-spring-boot-starter - ${druid.version} + druid + 1.1.20 net.dreamlu diff --git a/lms/nladmin-system/src/main/java/org/nl/AppRun.java b/lms/nladmin-system/src/main/java/org/nl/AppRun.java index a7c66f3c1..e63337706 100644 --- a/lms/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/lms/nladmin-system/src/main/java/org/nl/AppRun.java @@ -7,6 +7,7 @@ import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.scheduling.annotation.EnableAsync; @@ -21,6 +22,7 @@ import org.springframework.web.bind.annotation.RestController; * @date 2021/2/22 9:20:19 */ @EnableAsync +@EnableCaching @RestController @EnableDynamicTp @SpringBootApplication(exclude = { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java index a01c7c5ac..946b61c9d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java @@ -1,20 +1,34 @@ package org.nl.b_lms.bst.ivt.cutpointivt.controller; +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtQuery; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtVo; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.SubInfo; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.modules.logging.annotation.Log; import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Map; -import java.util.Set; +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; + /** * @author lyd * @date 2024-02-26 @@ -26,17 +40,17 @@ public class BstIvtCutpointivtController { @Autowired private IBstIvtCutpointivtService bstIvtCutpointivtService; + @Autowired + private IPdmBiSlittingproductionplanService iPdmBiSlittingproductionplanService; @GetMapping @Log("查询分切区缓存点位库存") - //@SaCheckPermission("@el.check('bstIvtCutpointivt:list')") public ResponseEntity query(BstIvtCutpointivtQuery whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(bstIvtCutpointivtService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增分切区缓存点位库存") - //@SaCheckPermission("@el.check('bstIvtCutpointivt:add')") public ResponseEntity create(@Validated @RequestBody BstIvtCutpointivt entity){ bstIvtCutpointivtService.create(entity); @@ -45,17 +59,77 @@ public class BstIvtCutpointivtController { @PutMapping @Log("修改分切区缓存点位库存") - //@SaCheckPermission("@el.check('bstIvtCutpointivt:edit')") public ResponseEntity update(@Validated @RequestBody BstIvtCutpointivt entity){ bstIvtCutpointivtService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除分切区缓存点位库存") - //@SaCheckPermission("@el.check('bstIvtCutpointivt:del')") @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { bstIvtCutpointivtService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + //区域看板 + @GetMapping("/cutBoard") + @SaIgnore + public ResponseEntity cutBoard(@RequestParam Map whereJson){ + JSONObject param = new JSONObject(whereJson); + String 车间 = param.getString("product_area"); + String 暂存架区域 = param.getString("point_type"); + QueryWrapper queryWrapper = new QueryWrapper() + .orderByAsc("point_code").select("update_time","point_code","qzz_no1","qzz_no2","product_area","point_status","point_type"); + if (StringUtils.isNotEmpty(车间)){ + queryWrapper.eq("product_area", 车间); + } + if (StringUtils.isNotEmpty(暂存架区域)){ + queryWrapper.eq("point_type", 暂存架区域); + } + List list = bstIvtCutpointivtService.list(queryWrapper); + ArrayList qzzs = new ArrayList<>(); + for (BstIvtCutpointivt cutpointivt : list) { + String qzzNo1 = cutpointivt.getQzz_no1(); + String qzzNo2 = cutpointivt.getQzz_no2(); + if (StringUtils.isNotEmpty(qzzNo1)){qzzs.add(qzzNo1);}; + if (StringUtils.isNotEmpty(qzzNo2)){qzzs.add(qzzNo2);}; + } + List slit = iPdmBiSlittingproductionplanService.list(new QueryWrapper() + .select("qzzno","container_name", "split_breadth", "split_height", "split_weight") + .eq("is_delete", "0") + .ne("description","虚拟卷") + .in("qzzno", qzzs)); + Map> slitMap = slit.stream().collect(Collectors.groupingBy(PdmBiSlittingproductionplan::getQzzno)); + List result = new ArrayList<>(); + for (BstIvtCutpointivt cutpointivt : list) { + BstIvtCutpointivtVo vo = new BstIvtCutpointivtVo(); + vo.setQzz_no1(cutpointivt.getQzz_no1()); + vo.setQzz_no2(cutpointivt.getQzz_no2()); + vo.setPoint_type(cutpointivt.getPoint_type()); + vo.setPoint_code(cutpointivt.getPoint_code()); + vo.setPoint_status(cutpointivt.getPoint_status()); + vo.setProduct_area(cutpointivt.getProduct_area()); + vo.setUpdate_time(cutpointivt.getUpdate_time()); + Map> subInfo = new HashMap<>(); + if (StringUtils.isNotEmpty(cutpointivt.getQzz_no1())){ + List qzz1 = slitMap.get(cutpointivt.getQzz_no1()); + if (!CollectionUtils.isEmpty(qzz1)){ + List collect = qzz1.stream() + .map(sub -> sub.getContainer_name()+"幅宽"+sub.getSplit_breadth().intValue()+"长度"+sub.getSplit_height().intValue()).collect(Collectors.toList()); + subInfo.put(cutpointivt.getQzz_no1(),collect); + } + } + if (StringUtils.isNotEmpty(cutpointivt.getQzz_no2())){ + List qzz2 = slitMap.get(cutpointivt.getQzz_no2()); + if (!CollectionUtils.isEmpty(qzz2)){ + List collect = qzz2.stream() + .map(sub -> sub.getContainer_name()+"幅宽"+sub.getSplit_breadth().intValue()+"长度"+sub.getSplit_height().intValue()).collect(Collectors.toList()); + subInfo.put(cutpointivt.getQzz_no2(),collect); + } + } + vo.setSubInfo(subInfo); + result.add(vo); + } + return new ResponseEntity<>(result,HttpStatus.OK); + } } 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 38d0c44c4..ac3e1fd77 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 @@ -2,6 +2,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.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.common.domain.query.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; @@ -93,6 +94,7 @@ public interface IBstIvtCutpointivtService extends IService { * @return */ List getAreaNotTaskPointByLocationAreaAndStatus(String location); + List getAreaNotTaskPointByTcQzzPoint(String location); /** * 获取一半的点位 @@ -132,4 +134,8 @@ public interface IBstIvtCutpointivtService extends IService { * @return / */ List getPintByAgvCodesByPointTypeAndArea(String area, List types); + + List getNBJCanUsePoint(String type, String pointStatus, String 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 257f2d933..0a1e42765 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 @@ -2,6 +2,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.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import java.util.List; @@ -18,6 +19,8 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getAreaNotTaskPointByLocationAreaAndStatus(String location); + List getAreaNotTaskPointByTcQzzPoint(String location); + List getAllHalfPlacePoints(String type, String pointStatus, String location); List getCachePointSame(SlitterPlanDistinctDto dto); @@ -25,4 +28,8 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getReallyQzzSameDevice(String resourceName); List getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort); + + List getNBJCanUsePoint(String type, String pointStatus, String 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 67f068412..51dfdddc0 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 @@ -15,8 +15,8 @@ WHERE t.task_status '071' AND t.task_status ]]> '07' AND t.is_delete = '0' AND (t.point_code1 = bic.point_code OR t.point_code2 = bic.point_code - OR t.point_code1 = bic.truss_point_code1 oR t.point_code2 = bic.truss_point_code1 - OR t.point_code1 = bic.truss_point_code2 oR t.point_code2 = bic.truss_point_code2) + OR t.point_code1 = bic.truss_point_code1 OR t.point_code2 = bic.truss_point_code1 + OR t.point_code1 = bic.truss_point_code2 OR t.point_code2 = bic.truss_point_code2) ) ORDER BY bic.sort_seq ASC @@ -40,6 +40,7 @@ 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' @@ -136,4 +137,87 @@ ORDER BY bic.sort_seq DESC + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/BstIvtCutpointivtVo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/BstIvtCutpointivtVo.java new file mode 100644 index 000000000..533ab1b0c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/BstIvtCutpointivtVo.java @@ -0,0 +1,20 @@ +package org.nl.b_lms.bst.ivt.cutpointivt.service.dto; + +import lombok.Data; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; + +import java.util.List; +import java.util.Map; + +/** + * @description / + * @author lyd + * @date 2024-02-26 + **/ +@Data +public class BstIvtCutpointivtVo extends BstIvtCutpointivt { + /** + * 气胀轴子卷信息 + */ + private Map> subInfo; +} 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 new file mode 100644 index 000000000..316bf1516 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/CutpointAirShhaftDto.java @@ -0,0 +1,34 @@ +package org.nl.b_lms.bst.ivt.cutpointivt.service.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @description / + * @author lyd + * @date 2024-02-26 + **/ +@Data +public class CutpointAirShhaftDto implements Serializable { + + private Long ivt_id; + + private String point_code; + + private String qzz_no; + + private String qzz_point; + + private String point_location; + + private String qzz_generation; + + private String qzz_size; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/SubInfo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/SubInfo.java new file mode 100644 index 000000000..2a2a439f7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/SubInfo.java @@ -0,0 +1,30 @@ +package org.nl.b_lms.bst.ivt.cutpointivt.service.dto; + +import lombok.Builder; +import lombok.Data; + +/** + * @description / + * @author lyd + * @date 2024-02-26 + **/ +@Data +@Builder +public class SubInfo { + /** + * 气胀轴子卷号 + */ + private String container_name; + /** + * 子卷幅宽 + */ + private Integer split_breadth; + /** + * 子卷长度 + */ + private Integer split_height; + /** + * 子卷重量 + */ + private Integer split_weight; +} 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 fc302a2cb..5908cdfa2 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 @@ -13,6 +13,7 @@ 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.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.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.common.domain.query.PageQuery; @@ -126,6 +127,11 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getAreaNotTaskPointByTcQzzPoint(String location) { + return bstIvtCutpointivtMapper.getAreaNotTaskPointByTcQzzPoint(location); + } + @Override public List getAllHalfPlacePoints(String type, String pointStatus, String location) { return bstIvtCutpointivtMapper.getAllHalfPlacePoints(type, pointStatus, location); @@ -153,4 +159,14 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getNBJCanUsePoint(String type, String pointStatus, String area, String sort) { + return bstIvtCutpointivtMapper.getNBJCanUsePoint(type, pointStatus, area, sort); + } + + @Override + public List getNBJAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort) { + return bstIvtCutpointivtMapper.getNBJAreaNotTaskPointByStatus(type, pointStatus, area, sort); + } } 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 276892380..017d1ea72 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 @@ -1,10 +1,14 @@ package org.nl.b_lms.bst.ivt.papervehicle.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto; +import org.nl.b_lms.sch.tasks.slitter.service.impl.SlitterServiceImpl; import org.nl.common.domain.query.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; +import java.util.List; import java.util.Map; import java.util.Set; @@ -40,4 +44,23 @@ public interface IMdPbPapervehicleService extends IService { * @param ids / */ void deleteAll(Set ids); + + /** + * 获取管芯 + * @param pointLocation + * @param tubes + * @return + */ + List getGXs(String pointLocation, List tubes); + + List getGxPoints(String pointLocation, List tubes); + + Integer checkHaveTaskByPoints(List pointCodes); + + /** + * 获取对接位的所有管芯信息 + * @param location + * @return + */ + List getAllTubesByPoint(String location); } 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 a206284ce..695d7ec11 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 @@ -2,6 +2,11 @@ package org.nl.b_lms.bst.ivt.papervehicle.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto; +import org.nl.b_lms.sch.tasks.slitter.service.impl.SlitterServiceImpl; + +import java.util.List; /** * @author lyd @@ -9,4 +14,11 @@ import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; **/ public interface MdPbPapervehicleMapper extends BaseMapper { + List getGXs(String pointLocation, List tubes); + + List getGxPoints(String pointLocation, List tubes); + + Integer checkHaveTaskByPoints(List pointCodes); + + List getAllTubesByPoint(String location); } 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 88f38812e..99a8c5987 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 @@ -2,4 +2,72 @@ + + + + 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 bec262a5b..c7ef3784e 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 @@ -10,6 +10,9 @@ 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.papervehicle.service.dao.mapper.MdPbPapervehicleMapper; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto; +import org.nl.b_lms.sch.tasks.slitter.service.impl.SlitterServiceImpl; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -17,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; import java.util.Map; import java.util.Set; @@ -67,7 +71,8 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl getGXs(String pointLocation, List tubes) { + return mdPbPapervehicleMapper.getGXs(pointLocation, tubes); + } + + @Override + public List getGxPoints(String pointLocation, List tubes) { + return mdPbPapervehicleMapper.getGxPoints(pointLocation, tubes); + } + + @Override + public Integer checkHaveTaskByPoints(List pointCodes) { + return mdPbPapervehicleMapper.checkHaveTaskByPoints(pointCodes); + } + + @Override + public List getAllTubesByPoint(String location) { + return mdPbPapervehicleMapper.getAllTubesByPoint(location); + } + } 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 61edd60c2..84550d7ad 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 @@ -76,7 +76,7 @@ public interface IBstIvtShafttubeivtService extends IService * @param location 位置:上半部分还是下半部分 * @return */ - List getByQzzSize(String qzzSize, String pointCode, String location); + List getByQzzSize(String qzzSize ,String pointCode, String location); /** * 获取没任务的气涨轴缓存位 @@ -86,6 +86,14 @@ public interface IBstIvtShafttubeivtService extends IService * @return */ List getNotTaskShaftCache(String qzzSize, String specification, String location); + /** + * 获取没任务的气涨轴缓存位2 + * @param qzzSize + * @param specification + * @param location + * @return + */ + List getNotTaskShaftCache2(String qzzSize, String specification, String location); /** * 获取没任务的空的位置 @@ -103,4 +111,6 @@ public interface IBstIvtShafttubeivtService extends IService * @return / */ List getOtherCBJData(String pointCode, String location); + + List getNotTaskEmptyShaftCache(String size, String qzz_generation, String location); } 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 c03347bdb..80995005c 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 @@ -14,7 +14,7 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper List getAllShaftPointsByConditions(String type, String location, String have); - List getByQzzSize(String qzzSize, String pointCode, String location); + List getByQzzSize(String qzzSize ,String pointCode, String location); /** * 获取含有气胀轴的气胀轴暂存位 @@ -35,4 +35,19 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper List getNotTaskShaftCacheEmpty(@Param("startPoint") BstIvtShafttubeivt startPoint); List getOtherCBJData(String pointCode, String location); + + List getNotTaskEmptyShaftCache(@Param("size") String size, + @Param("qzz_generation") String qzz_generation, + @Param("location") String location); + + /** + * 获取含有气胀轴的气胀轴暂存位 + * @param qzzSize 气胀轴尺寸 + * @param specification 标箔/锂电 + * @param location 位置(上下) + * @return / + */ + List getNotTaskShaftCache2(@Param("qzzSize") String qzzSize, + @Param("specification") String specification, + @Param("location") String location); } 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 fef818915..8d2842d02 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 @@ -47,10 +47,10 @@ AND b.qzz_generation = #{startPoint.qzz_generation} AND b.point_location = #{startPoint.point_location} - AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code2 = b.point_code) + AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code2 = b.point_code AND t.is_delete = '0') AND 0 = (SELECT COUNT(*) FROM bst_ivt_shafttubeivt bb WHERE bb.have_qzz ='1' AND bb.point_type = '6' - AND b.qzz_generation = #{startPoint.qzz_generation} + AND bb.qzz_generation = #{startPoint.qzz_generation} AND bb.qzz_size = #{startPoint.qzz_size} AND bb.point_location = #{startPoint.point_location} AND bb.sort_seq > b.sort_seq) ORDER BY b.sort_seq ASC @@ -64,4 +64,38 @@ AND (IFNULL(bsf.container_name1,'') ]]> '' OR IFNULL(bsf.container_name2,'') ]]> '') AND point_location = #{location} + + 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 b486b4421..03a3a67eb 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 @@ -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 location) { + return bstIvtShafttubeivtMapper.getByQzzSize(qzzSize,pointCode, location); } @Override @@ -127,6 +127,11 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getNotTaskShaftCache2(String qzzSize, String specification, String location) { + return bstIvtShafttubeivtMapper.getNotTaskShaftCache2(qzzSize, specification, location); + } + @Override public List getNotTaskShaftCacheEmpty(BstIvtShafttubeivt startPoint) { return bstIvtShafttubeivtMapper.getNotTaskShaftCacheEmpty(startPoint); @@ -149,4 +154,9 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getNotTaskEmptyShaftCache(String size, String qzz_generation,String location) { + return bstIvtShafttubeivtMapper.getNotTaskEmptyShaftCache(size, qzz_generation, location); + } + } 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 c9f0a05cb..8a194adae 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 @@ -67,5 +67,24 @@ public class BstIvtStockingivtController { return new ResponseEntity<>(bstIvtStockingivtService.operateIvt(param), HttpStatus.OK); } + @Log("管芯托盘库存") + //@SaCheckPermission("@el.check('bstIvtStockingivt:del')") + @PostMapping("/showDetail") + public ResponseEntity showDetail(@RequestBody JSONObject param) { + return new ResponseEntity<>(bstIvtStockingivtService.showDetail(param), HttpStatus.OK); + } + + @Log("管芯托盘库存") + @GetMapping("/showDetail2") + public ResponseEntity showDetail2(@RequestParam Map param) { + return new ResponseEntity<>(bstIvtStockingivtService.showDetail2(param), HttpStatus.OK); + } + + @Log("查询bom记录") + @GetMapping("/showBom2") + public ResponseEntity showBom2(@RequestParam Map param) { + return new ResponseEntity<>(bstIvtStockingivtService.showBom2(param), HttpStatus.OK); + } + } 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 d87e371b8..b987f4fff 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 @@ -2,9 +2,14 @@ package org.nl.b_lms.bst.ivt.stockingivt.service; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; -import org.nl.common.domain.query.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; +import org.nl.b_lms.bst.ivt.stockingivt.service.dto.ShowStockVo; +import org.nl.b_lms.pdm.info.dao.PdmBiOrderbominfo; +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.common.domain.query.PageQuery; import java.util.List; import java.util.Map; @@ -78,4 +83,27 @@ public interface IBstIvtStockingivtService extends IService { BstIvtStockingivt getCanMovePointOne(String location, String pointType); JSONObject operateIvt(JSONObject jsonObject) ; + + /** + * 分组聚合获取需要管芯的托盘位置 + * @param pointType + * @param tube + * @param location + * @return + */ + List getNeedPaperTubePoint(String pointType, String tube, String location); + + /** + * 获取3个托盘的数据 + * @param location + * @param pointType + * @return + */ + List getCanMovePointList(String location, String pointType); + + List> showDetail(JSONObject param); + + List showDetail2(Map param); + + PdmBiOrderbominfo showBom2(Map param); } 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 49eaa768d..42edf4d39 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 @@ -2,6 +2,8 @@ package org.nl.b_lms.bst.ivt.stockingivt.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import java.util.List; @@ -29,4 +31,15 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getEmptyPointNotTask(String location, String pointType); BstIvtStockingivt getCanMovePointOne(String location, String pointType); + + /** + * 分组聚合获取备货区中数量够用的的货位 + * @param pointType 类型:0暂存位置,1靠近分切机 + * @param tube 纸管号 两个都是一样的,因此拿一个就行 + * @param location 位置:0上区域,1下区域 + * @return / + */ + List getNeedPaperTubePoint(String pointType, String tube, String location); + + List getCanMovePointList(String location, String pointType); } 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 41faca610..baaa70bff 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 @@ -12,7 +12,7 @@ AND bs.ivt_status = '1' AND bs.is_used = '1' AND mp.material_code = #{tube} - AND mp.qty = ]]> #{qty} + AND mp.qty ]]> #{qty} AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE (t.point_code1 = bs.point_code OR t.point_code2 = bs.point_code OR @@ -48,4 +48,46 @@ AND t.task_status '07') ORDER BY bs.ivt_status, mp.qty LIMIT 1 + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dto/ShowStockVo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dto/ShowStockVo.java new file mode 100644 index 000000000..2a53896fe --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dto/ShowStockVo.java @@ -0,0 +1,20 @@ +package org.nl.b_lms.bst.ivt.stockingivt.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Date: 2025/3/20 + */ +@Data +public class ShowStockVo { + /** + * 0: 空, 1:空位,2:管芯 + */ + private String have_qzz; + + /** + * 管芯信息 + */ + private String tube; +} 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 f831eeb14..19b40105c 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 @@ -2,32 +2,35 @@ package org.nl.b_lms.bst.ivt.stockingivt.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; 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 lombok.RequiredArgsConstructor; 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.bst.ivt.stockingivt.service.dao.mapper.BstIvtStockingivtMapper; +import org.nl.b_lms.bst.ivt.stockingivt.service.dto.ShowStockVo; +import org.nl.b_lms.pdm.info.dao.PdmBiOrderbominfo; +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.service.SlitterService; +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.modules.common.exception.BadRequestException; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; -import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; -import org.nl.b_lms.bst.ivt.stockingivt.service.dao.mapper.BstIvtStockingivtMapper; -import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; +import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.basedata.master.service.MaterialbaseService; 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; @@ -46,11 +49,15 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { @@ -121,32 +128,38 @@ 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); - } +// List 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 material_code = jsonObject.getString("material_code"); - + String point_code = jsonObject.getString("point_code"); + Integer now_qty = jsonObject.getInteger("qty"); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -155,12 +168,26 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl5){ + throw new BadRequestException("数量只允许输入1-5"); + } // MaterialbaseDto mater = materialbaseService.findByCode(material_code); String material_name = mater.getMaterial_name(); //查询当前载具和排是否存在库存 - MdPbPapervehicle papervehicle = PapervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + MdPbPapervehicle papervehicle = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) .eq(MdPbPapervehicle::getRow_num, row_num)); if (ObjectUtil.isNotEmpty(papervehicle) && !papervehicle.getMaterial_code().equals(material_code)) { throw new BadRequestException("当前排物料为【" + papervehicle.getMaterial_code() + "】,与绑定的物料不同,如需要请先清除库存,再进行绑定!"); @@ -177,42 +204,42 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + 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.split("\\|"); + String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); - if (Math.abs(nextLength - currLength) <= 50) { + 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) + 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.split("\\|"); + String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); - if (Math.abs(nextLength - currLength) <= 50) { + 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) + 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.split("\\|"); + String[] preArray = preMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); int preLength = Integer.parseInt(preArray[preArray.length - 1]); - if (Math.abs(preLength - currLength) <= 50) { + if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.getMaterial_code())) { throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); } } @@ -224,7 +251,7 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl stockingivts = bstIvtStockingivtMapper.selectList(new LambdaQueryWrapper() + .eq(BstIvtStockingivt::getVehicle_code, vehicle_code) + .ne(BstIvtStockingivt::getPoint_code, point_code)); + if (stockingivts.size() > 1) { + throw new BadRequestException("该托盘绑定了多个位置!"); + } + if (stockingivts.size() > 0) { + BstIvtStockingivt bstIvtStockingivt = stockingivts.get(0); + bstIvtStockingivt.setVehicle_code(""); + bstIvtStockingivtMapper.updateById(bstIvtStockingivt); + } + BstIvtStockingivt currentStock = bstIvtStockingivtMapper.selectOne(new LambdaQueryWrapper() + .eq(BstIvtStockingivt::getPoint_code, point_code)); + currentStock.setVehicle_code(vehicle_code); + currentStock.setIvt_status("1"); + bstIvtStockingivtMapper.updateById(currentStock); } if (type.equals("2")) { - PapervehicleService.remove(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + papervehicleService.remove(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) .eq(MdPbPapervehicle::getRow_num, row_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)); + 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()); @@ -262,4 +306,77 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl getNeedPaperTubePoint(String pointType, String tube, String location) { + return bstIvtStockingivtMapper.getNeedPaperTubePoint(pointType, tube, location); + } + + @Override + public List getCanMovePointList(String location, String pointType) { + return bstIvtStockingivtMapper.getCanMovePointList(location, pointType); + } + + @Override + public List> showDetail(JSONObject param) { + List> res = new ArrayList<>(); + // vehicle_code + String vehicleCode = param.getString("vehicle_code"); + if (ObjectUtil.isEmpty(vehicleCode)) { + // 5*5的0 + for (int i = 0; i < 5; i++) { + List list = new ArrayList<>(); + for (int j = 0; j < 5; j++) { + ShowStockVo one = new ShowStockVo(); + one.setHave_qzz("0"); + one.setTube("-"); + list.add(one); + } + res.add(list); + } + } else { + // 获取数据 + List papers = papervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, vehicleCode) + .orderByAsc(MdPbPapervehicle::getRow_num)); + // 初始化 5*5的1 + for (int i = 0; i < 5; i++) { + // 获取对应排的数据 + int index = i; + MdPbPapervehicle mdPbPapervehicle = papers.stream().filter(p -> p.getRow_num().equals(index + 1)).findFirst().orElse(null); + int indexJ = mdPbPapervehicle == null ? 0 : mdPbPapervehicle.getQty().intValue(); + List list = new ArrayList<>(); + for (int j = 0; j < 5; j++) { + ShowStockVo one = new ShowStockVo(); + one.setHave_qzz("1"); + one.setTube("-"); + if (j < indexJ && indexJ != 0) { + one.setHave_qzz("2"); + one.setTube(mdPbPapervehicle.getMaterial_name()); + } + list.add(one); + } + res.add(list); + } + + } + return res; + } + + @Override + public List showDetail2(Map whereJson) { + // 获取数据 + List papers = papervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, whereJson.get("vehicle_code")) + .orderByAsc(MdPbPapervehicle::getRow_num)); + return papers; + } + @Override + public PdmBiOrderbominfo showBom2(Map param){ + String mfg_order_name = String.valueOf(param.get("mfg_order_name")); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(PdmBiOrderbominfo::getMfgOrder,mfg_order_name); + PdmBiOrderbominfo order = pdmBiOrderbominfoService.getOne(lam); + return order; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java index f3c5c7786..bb42a7cb1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java @@ -83,4 +83,11 @@ public class ProductOutTwoController { return new ResponseEntity<>(TableDataInfo.build(productOutTwoService.woodenBoxPoint(whereJson)), HttpStatus.OK); } + @PostMapping("/boxOut") + @Log("木箱出库") + @SaIgnore + public ResponseEntity boxOut(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(productOutTwoService.boxOut(whereJson),HttpStatus.OK); + } + } 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 b318642a6..e6601d2ec 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 @@ -8,10 +8,7 @@ import org.nl.modules.logging.annotation.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * @Author: lyd @@ -24,87 +21,100 @@ import org.springframework.web.bind.annotation.RestController; public class SlitterPdaController { @Autowired - private SlitterService slitterDevices; + private SlitterService slitterService; @PostMapping("/slitterDevices") @Log("获取分切设备") @SaIgnore public ResponseEntity slitterDevices(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.slitterDevices(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.slitterDevices(param), HttpStatus.OK); } @PostMapping("/downRolls") @Log("下卷") @SaIgnore public ResponseEntity downRolls(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.downRolls(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.downRolls(param), HttpStatus.OK); + } + + @PostMapping("/downRolls2") + @Log("下卷2") + @SaIgnore + public ResponseEntity downRolls2(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.downRolls2(param), HttpStatus.OK); + } + @PostMapping("/downRollsCheck") + @Log("下卷2提示确认") + @SaIgnore + public ResponseEntity downRollsCheck(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.downRollsCheck(param), HttpStatus.OK); } @PostMapping("/moveVehicle") @Log("搬运废箔斗") @SaIgnore public ResponseEntity moveVehicle(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.moveVehicle(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.moveVehicle(param), HttpStatus.OK); } @PostMapping("/getShaftPoint") @Log("获取套拔轴下拉框数据") @SaIgnore public ResponseEntity getShaftPoint() { - return new ResponseEntity<>(slitterDevices.getShaftPoint(), HttpStatus.OK); + return new ResponseEntity<>(slitterService.getShaftPoint(), HttpStatus.OK); } @PostMapping("/doInitShaftPoint") @Log("初始化套拔轴点位") @SaIgnore public ResponseEntity doInitShaftPoint(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doInitShaftPoint(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doInitShaftPoint(param), HttpStatus.OK); } @PostMapping("/cutIn") @Log("分切母卷上料") @SaIgnore public ResponseEntity cutIn(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.cutIn(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.cutIn(param), HttpStatus.OK); } @PostMapping("/sendSubVolumeToNBJ") @Log("分切缓存到内包间任务") @SaIgnore public ResponseEntity sendSubVolumeToNBJ(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.pdaSendSubVolumeToNBJ(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.pdaSendSubVolumeToNBJ(param), HttpStatus.OK); } @PostMapping("/markingFoilSlittingToCache") @Log("标箔分切下料AGV任务") @SaIgnore public ResponseEntity markingFoilSlittingToCache(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.markingFoilSlittingToCache(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.markingFoilSlittingToCache(param), HttpStatus.OK); } @PostMapping("/getCutCacheAgvPoints") @Log("获取分切暂存位AGV点位下拉框数据") @SaIgnore public ResponseEntity getCutCacheAgvPoints(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.getCutCacheAgvPoints(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.getCutCacheAgvPoints(param), HttpStatus.OK); } @PostMapping("/toCleanCutCacheInventory") @Log("清理分切缓存") @SaIgnore public ResponseEntity toCleanCutCacheInventory(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.toCleanCutCacheInventory(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.toCleanCutCacheInventory(param), HttpStatus.OK); } @PostMapping("/toSubvolumeBinding") @Log("子卷绑定") @SaIgnore public ResponseEntity toSubvolumeBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.toSubvolumeBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.toSubvolumeBinding(param), HttpStatus.OK); } @PostMapping("/shaftMaintenanceInventory") @Log("气胀轴库维护库存") @SaIgnore public ResponseEntity shaftMaintenanceInventory(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.shaftMaintenanceInventory(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.shaftMaintenanceInventory(param), HttpStatus.OK); } @@ -112,92 +122,130 @@ public class SlitterPdaController { @Log("气胀轴绑定") @SaIgnore public ResponseEntity toShaftBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.toShaftBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.toShaftBinding(param), HttpStatus.OK); } @PostMapping("/querySlitterSubVolumeInfo") @Log("查询分切机上的子卷信息") @SaIgnore public ResponseEntity querySlitterSubVolumeInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.querySlitterSubVolumeInfo(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.querySlitterSubVolumeInfo(param), HttpStatus.OK); } @PostMapping("/bindSlitterSubVolumeInfo") @Log("绑定分切机上的子卷信息") @SaIgnore public ResponseEntity bindSlitterSubVolumeInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.bindSlitterSubVolumeInfo(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.bindSlitterSubVolumeInfo(param), HttpStatus.OK); } @PostMapping("/unBindSlitterSubVolumeInfo") @Log("接绑分切机上的子卷信息") @SaIgnore public ResponseEntity unBindSlitterSubVolumeInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.unBindSlitterSubVolumeInfo(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.unBindSlitterSubVolumeInfo(param), HttpStatus.OK); } @PostMapping("/querySlitterDeviceSubVolumeInfos") @Log("查询手持查询设备对应的子卷数据") @SaIgnore public ResponseEntity querySlitterDeviceSubVolumeInfos(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK); } @PostMapping("/queryCacheDownSubVolumeInfos") @Log("手持查询暂存位置的子卷数据") @SaIgnore public ResponseEntity queryCacheDownSubVolumeInfos(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.queryCacheDownSubVolumeInfos(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.queryCacheDownSubVolumeInfos(param), HttpStatus.OK); } @PostMapping("/doStockAreaBinding") @Log("手持备货区绑定") @SaIgnore public ResponseEntity doStockAreaBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doStockAreaBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doStockAreaBinding(param), HttpStatus.OK); } @PostMapping("/doStockAreaUnbinding") @Log("手持备货区解除绑定") @SaIgnore public ResponseEntity doStockAreaUnbinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doStockAreaUnbinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doStockAreaUnbinding(param), HttpStatus.OK); } @PostMapping("/doSubRollWeightBinding") @Log("手持子卷重量绑定") @SaIgnore public ResponseEntity doSubRollWeightBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doSubRollWeightBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doSubRollWeightBinding(param), HttpStatus.OK); } @PostMapping("/doSubRollWeightBindingTip") @Log("手持子卷重量绑定提示") @SaIgnore public ResponseEntity doSubRollWeightBindingTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doSubRollWeightBindingTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doSubRollWeightBindingTip(param), HttpStatus.OK); } @PostMapping("/doUpShaftToSlitter") @Log("手持分切机上气胀轴") @SaIgnore public ResponseEntity doUpShaftToSlitter(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doUpShaftToSlitter(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doUpShaftToSlitter(param), HttpStatus.OK); } @PostMapping("/doUpShaftToSlitterByDevice") @Log("手持分切机上气胀轴2") @SaIgnore public ResponseEntity doUpShaftToSlitterByDevice(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doUpShaftToSlitterByDevice(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doUpShaftToSlitterByDevice(param), HttpStatus.OK); } @PostMapping("/doUpShaftToSlitterByDeviceTip") @Log("手持分切机上气胀轴提示") @SaIgnore public ResponseEntity doUpShaftToSlitterByDeviceTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doUpShaftToSlitterByDeviceTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doUpShaftToSlitterByDeviceTip(param), HttpStatus.OK); } @PostMapping("/getUpShaftTip") @Log("手持分切机上气胀轴-查询信息") @SaIgnore public ResponseEntity getUpShaftTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.getUpShaftTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.getUpShaftTip(param), HttpStatus.OK); } @PostMapping("/forcedFeedShaft") @Log("强制送轴") @SaIgnore public ResponseEntity forcedFeedShaft(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.forcedFeedShaft(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.forcedFeedShaft(param), HttpStatus.OK); + } + @PostMapping("/showManualView") + @Log("送轴情况") + @SaIgnore + public ResponseEntity showManualView(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.showManualView(param), HttpStatus.OK); + } + @PostMapping("/urgentPlan") + @Log("加急送轴") + @SaIgnore + public ResponseEntity urgentPlan(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.urgentPlan(param), HttpStatus.OK); + } + @PostMapping("/rollCacheManage") + @Log("母卷暂存架子管理") + @SaIgnore + public ResponseEntity rollCacheManage(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.rollCacheManage(param), HttpStatus.OK); + } + @PostMapping("/rollCacheManageTip") + @Log("母卷暂存架子管理提示") + @SaIgnore + public ResponseEntity rollCacheManageTip(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.rollCacheManageTip(param), HttpStatus.OK); + } + + @PostMapping("/downBait") + @Log("饵料下卷") + @SaIgnore + public ResponseEntity downBait(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(slitterService.downBait(whereJson), HttpStatus.OK); + } + + @PostMapping("/returnShaft") + @Log("空轴送回") + @SaIgnore + public ResponseEntity returnShaft(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.returnShaft(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 a22ba2469..0dabf07cc 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 @@ -5,6 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pda.service.VehicleTwoService; +import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.modules.logging.annotation.Log; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.Map; /** * @author liuxy @@ -29,8 +31,10 @@ public class VehicleTwoController { @Autowired private VehicleTwoService vehicleTwoService; - @Resource + @Autowired private IbstIvtPackageinfoivtService bstIvtPackageInfoIvtService; + @Autowired + private IpdmBiSubpackagerelationService subpackagerelationService; @PostMapping("/vehicleIn") @@ -69,4 +73,11 @@ public class VehicleTwoController { return new ResponseEntity<>(bstIvtPackageInfoIvtService.update(whereJson), HttpStatus.OK); } + @PostMapping("/toEndSub") + @Log("二期子卷包装解绑") + @SaIgnore + public ResponseEntity toEndSub(@RequestBody JSONObject whereJson) { + Map result = subpackagerelationService.toEndSubpackagerelation(whereJson.getString("container_name")); + return new ResponseEntity<>(result, HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java index d6e1824aa..59ed6c3ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java @@ -84,4 +84,10 @@ public interface ProductOutTwoService { */ List woodenBoxPoint(JSONObject whereJson); + /** + * 要出库的木箱明细 + * @param whereJson 、 + * @return 、 + */ + JSONObject boxOut(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java index 0c0d53299..7136e178f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java @@ -13,11 +13,13 @@ import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxlashboundService; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxlashbound; import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.pda.st.service.impl.ProductionOutServiceImpl; +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; @@ -46,6 +48,9 @@ public class ProductOutTwoServiceImpl implements ProductOutTwoService { @Autowired private IPdmBiOrderbominfoService iPdmBiOrderbominfoService; + @Autowired + private OutBoxManageService outBoxManageService; + @Override public JSONObject ivtQuery(JSONObject whereJson) { @@ -190,4 +195,24 @@ public class ProductOutTwoServiceImpl implements ProductOutTwoService { } return null; } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject boxOut(JSONObject whereJson) { + // 判断当前是否有正在出库的空托盘任务 + JSONArray resultJSONArray = WQLObject.getWQLObject("sch_base_task") + .query("task_type = '010706' and task_status < '" + TaskStatusEnum.FINISHED.getCode() + "' and is_delete = '0'") + .getResultJSONArray(0); + + if (ObjectUtil.isNotEmpty(resultJSONArray)) { + throw new BadRequestException("当前正在执行空托盘出库任务,请稍后再出库!"); + } + + List data = whereJson.getJSONArray("data").toJavaList(JSONObject.class); + outBoxManageService.publicBoxOut(data); + + JSONObject result = new JSONObject(); + result.put("message", "下发出库成功!"); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/VehicleTwoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/VehicleTwoServiceImpl.java index 33e027036..bbefbee98 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/VehicleTwoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/VehicleTwoServiceImpl.java @@ -7,8 +7,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pda.service.VehicleTwoService; +import org.nl.b_lms.pdm.info.dao.PdmBiContainerinbound; +import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService; +import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl; import org.nl.b_lms.sch.point.dao.SchBasePoint; import org.nl.b_lms.sch.point.service.IschBasePointService; +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.TwoInEmpExcepTask; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; @@ -16,13 +21,25 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBoxManageService; 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.InVehicleManageService; +import org.nl.common.enums.SpecEnum; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.basedata.st.service.StructattrService; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.ext.mes.service.LmsToMesService; +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 org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; @Service @Slf4j @@ -32,7 +49,7 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { * 入空载具服务 */ @Autowired - private InVehicleManageService inVehicleManageService; + private IschBaseTaskService ischBaseTaskService; /** * 入空木箱服务 @@ -62,6 +79,8 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { @Autowired private InBussManageService inBussManageService; + @Autowired + private IPdmBiContainerinboundService iPdmBiContainerinboundService; @Override @Transactional(rollbackFor = Exception.class) @@ -163,7 +182,12 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { @Override public JSONObject boxIn(JSONObject whereJson) { // 调用接口 - inBoxManageService.boxBinVehicle(whereJson); + String startCode = whereJson.getString("point_code"); + if ("MXRKW1".equals(startCode)){ + inBoxManageService.boxBinVehicle(whereJson); + }else if ("THRKDJW1".equals(startCode)){ + inBoxManageService.boxBinVehicleByTHRK(whereJson); + } JSONObject result = new JSONObject(); result.put("message", "入库成功!"); return result; @@ -178,6 +202,19 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { return result; } + public static void main(String[] args) { + ArrayList msg = new ArrayList<>(); +// msg.add("称重562不匹配564"); + msg.add("手动至异常口"); + System.out.println(msg.toString()); + System.out.println(JSONObject.toJSONString(msg)); + String a = JSONObject.toJSONString(msg); + List list = JSONObject.parseObject(a, List.class); + Optional 称重 = list.stream().filter(m -> m.contains("称重")).findAny(); + if (称重.isPresent()){ + System.out.println(称重.get()); + } + } @Override @Transactional(rollbackFor = Exception.class) public JSONObject reback(JSONObject whereJson) { @@ -186,6 +223,29 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { String bill_type = whereJson.getString("bill_type"); whereJson.put("material_barcode", whereJson.getString("box_no")); whereJson.put("device_code", whereJson.getString("point_code")); + if ("RK1002".equals(whereJson.getString("point_code"))){ + List list = ischBaseTaskService.list(new QueryWrapper() + .select("task_id") + .eq("point_code2", "RK1004") + .eq("task_type", "010706") + .eq("is_delete", "0") + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException("稍后再试,异常口存在正在执行的任务"+ list.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(","))); + } + Param forceWeight = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("force_weight"); + if (forceWeight!=null && "1".equals(forceWeight.getValue())){ + PdmBiContainerinbound one = iPdmBiContainerinboundService.getOne(new QueryWrapper() + .eq("box", whereJson.getString("box_no"))); + if (one!=null && !StringUtils.isEmpty(one.getRemark())){ + List remark = JSONObject.parseObject(one.getRemark(), List.class); + Optional 称重 = remark.stream().filter(m -> m.contains("称重")).findAny(); + if (称重.isPresent()){ + throw new BadRequestException("开启称重强制校验"+称重.get()); + } + } + } + } if (bill_type.equals("1")) { whereJson.put("bill_type", IOSEnum.IN_TYPE.code("返检入库")); } else if (bill_type.equals("2")) { @@ -196,17 +256,20 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { whereJson.put("bill_type", IOSEnum.IN_TYPE.code("手工入库")); } whereJson.put("box_no", whereJson.getString("box_no")); - JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("material_barcode") + "' AND status = '0'").getResultJSONArray(0); + JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("material_barcode") + "' AND status in ('0','1')").getResultJSONArray(0); if (ObjectUtil.isEmpty(resultJSONArray)) { throw new BadRequestException("未查询到子卷包装信息!"); } String material_barcode = ""; + List subs = new ArrayList<>(); for (int i = 0; i < resultJSONArray.size(); i++) { JSONObject resultObj = resultJSONArray.getJSONObject(i); + String containerName = resultObj.getString("container_name"); + subs.add(containerName); if (i == 0) { - material_barcode = resultObj.getString("container_name"); + material_barcode = containerName; } else { - material_barcode += "," + resultObj.getString("container_name"); + material_barcode += "," + containerName; } } whereJson.put("material_barcode", material_barcode); @@ -244,10 +307,25 @@ public class VehicleTwoServiceImpl implements VehicleTwoService { if (ObjectUtil.isEmpty(jsonExt)) { throw new BadRequestException("载具不存在!"+whereJson.getString("vehicle_code")); } + int hasTask = ischBaseTaskService.count(new QueryWrapper() + .eq("is_delete", "0") + .eq("vehicle_code2", whereJson.getString("vehicle_code")) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (hasTask>0){ + throw new BadRequestException("托盘"+whereJson.getString("vehicle_code")+"存在执行的任务"); + } + String pcsn = jsonExt.getString("pcsn"); + if (StringUtils.isNotEmpty(pcsn)){ + JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0); + if (stIvtStructattr != null && stIvtStructattr.size() > 0) { + throw new BadRequestException("当前托盘"+whereJson.getString("vehicle_code")+"已经绑定木箱"+pcsn); + } + } jsonExt.put("pcsn", whereJson.getString("box_no")); extTab.update(jsonExt); inBussManageService.inTask(whereJson); + PdmProductSpecServiceImpl.doRecord(SpecEnum.RK_YC,null,Boolean.TRUE,null,subs); JSONObject result = new JSONObject(); result.put("message", "入库成功!"); return result; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java index e610bc0b7..38552f473 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java @@ -130,5 +130,29 @@ public interface IPdmBiSlittingproductionplanService extends IService getByQzzNoByNoStatus(String qzzno); + /** + * 根据子卷号获取一条记录 + * @param containerName + * @return + */ + PdmBiSlittingproductionplan getByContainerNameNotStatus(String containerName); + + List getAllHalfPlanRestruct(List qzzs); + + /** + * 获取能够套轴的分切计划,虚拟卷,固定是常规卷 + * @param day 天数 + * @return + */ + List getAllCutPlan2(Integer day); + + /** + * 根据设备获取计划 + * @param deviceCode + * @return + */ + List getXnPlanByDevice(String deviceCode); + int getCountXN(String area, String location); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java index 4a81910aa..6fc701608 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java @@ -18,5 +18,10 @@ public interface PdmBiSlittingproductionplanMapper extends BaseMapper getCurrentPlanInfos(SlitterPlanDistinctDto dto); + List getAllHalfPlanRestruct(List qzzs); + + List getAllCutPlan2(Integer day); + int getCountXN(String area, String location); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml index a75fe5674..b019e50cb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml @@ -71,7 +71,6 @@ AND IFNULL(p.up_or_down,'') ]]> '' AND IFNULL(p.left_or_right,'') ]]> '' AND DATE(p.start_time) >= DATE_SUB(CURDATE(), INTERVAL #{day} DAY) - AND p.FRP_description NOT LIKE '%1800%' AND '1' = (SELECT c.is_used FROM st_ivt_cutpointivt c WHERE c.ext_code = p.resource_name) GROUP BY p.resource_name, @@ -151,6 +150,84 @@ AND (p.parent_container_name = #{parent_container_name} OR restruct_container_name = #{parent_container_name}) AND p.split_group ]]> #{split_group} + + + + - - 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 9932e529e..2f31953a9 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 @@ -8,6 +8,7 @@ import org.nl.b_lms.pdm.subpackagerelation.dto.PdmBiSubpackagerelationDto; import org.nl.common.domain.query.PageQuery; import org.springframework.data.domain.Pageable; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; import java.util.Set; @@ -71,6 +72,11 @@ public interface IpdmBiSubpackagerelationService extends IService recordQuery(List pcsn); + /** + * 解绑子卷包装 + * @param code + */ + Map toEndSubpackagerelation(String code); + + /** + * 数字孪生用 + * @return + */ + List getStructInfoBySZLS(); + + List recordQuery(List pcsn); + + /** + * 导出任务相关数据 + * @param day + */ + void downloadData(Integer day, HttpServletResponse response); + + } 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 adfe2eb6f..93eebaa22 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 @@ -1,10 +1,12 @@ package org.nl.b_lms.pdm.subpackagerelation.service.impl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; 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.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -15,18 +17,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; +import lombok.Data; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j; 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.info.dao.PdmBiContainerinbound; import org.nl.b_lms.pdm.info.dao.PdmBiOrderbominfo; +import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService; import org.nl.b_lms.pdm.info.service.IPdmBiOrderbominfoService; +import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl; 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.dto.PdmBiSubpackagerelationDto; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; +import org.nl.b_lms.pdm_manage.enums.SUBEnum; 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; @@ -45,24 +52,35 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxMana import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.common.enums.SpecEnum; +import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.FileUtil; +import org.nl.modules.logging.service.EsLogService; +import org.nl.modules.logging.service.dto.LogQuery; +import org.nl.modules.logging.service.dto.LogRepositoryDTO; +import org.nl.modules.logging.service.impl.LuceneLogServiceImpl; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.pda.mps.eum.RegionTypeEnum; +import org.nl.wms.sch.AcsUtil; 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.beans.factory.annotation.Qualifier; import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -97,6 +115,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl containerNameList = packagerelationList.stream() .map(PdmBiSubpackagerelation::getContainer_name) .collect(Collectors.toSet()); + + List ivtList = packageinfoivtService + .list(new QueryWrapper() + .in("container_name", containerNameList)); + + for (BstIvtPackageinfoivt ivtPackageinfoivt : ivtList) { + if (!ivtPackageinfoivt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))){ + throw new BadRequestException("当前子卷未质检"+ivtPackageinfoivt.getContainer_name()); + } + } List planList = iPdmBiSlittingproductionplanService.list(new LambdaQueryWrapper() .in(PdmBiSlittingproductionplan::getContainer_name, containerNameList) .eq(PdmBiSlittingproductionplan::getIs_delete,IOSEnum.IS_NOTANDYES.code("否")) @@ -293,6 +330,10 @@ 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()) + .in("ivt_id",collect)); } @Override @@ -343,6 +384,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl collect = subList.stream().map(PdmBiSubpackagerelation::getPackage_box_sn).collect(Collectors.toSet()); Set containers = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toSet()); + List containerList = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toList()); if (collect.size() == 0){ throw new BadRequestException("当前子卷还未进行装箱组盘操作"); } @@ -353,15 +395,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl hasTask = taskService.list(new QueryWrapper() + .select("point_code2") + .eq("is_delete", "0") + .eq("point_code1", boxAttr.getString("struct_code")) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (!CollectionUtils.isEmpty(hasTask)){ + boolean zxq = hasTask.stream().map(a -> a.getPoint_code2()).filter(a -> a.contains("ZXQ")).findAny().isPresent(); + if (zxq){ + throw new BadRequestException("当前子卷正在执行装箱入库操作"); + }else{ + throw new BadRequestException("当前空木箱"+boxSn+"存在正在执行的任务,稍后再操作"); + } + } + // 查询木箱对应的托盘号 + JSONObject jsonVeExt = WQLObject.getWQLObject("md_pb_storagevehicleext").query("pcsn = '" + boxSn + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVeExt)) { + throw new BadRequestException("此木箱没有绑定托盘号!"+boxSn); + } + //子卷到装箱区 + agvTransfer(containers, deviceCode, boxSn); String task_group_id = null; if (boxAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { JSONObject 浅Attr = attrTab .query("zdepth = '1' and row_num = '"+boxAttr.getString("row_num")+"' and col_num = '" + boxAttr.getString("col_num") + "' and layer_num = '"+boxAttr.getString("layer_num")+"'") .uniqueResult(0); - // 判断浅货位是否有木箱 - if (!ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))) { - // 判断是否被锁定 + if (ObjectUtil.isEmpty(浅Attr)){ + throw new BadRequestException(boxAttr.getString("struct_code")+"对应浅货位信息不正确"); + } + if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))){ + if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + throw new BadRequestException("木箱货位"+boxAttr.getString("struct_code")+"的浅货位存在正在执行的任务"); + } + }else { if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { // 判断浅货位木箱和深货位木箱是否相同规格 task_group_id = outBoxManageService.createBoxMove(浅Attr); - } else { - // 判断是否是空木箱出库锁 + } else if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("验箱出库锁"))) { + List list = taskService.list(new QueryWrapper() + .eq("is_delete", "0") + .eq("point_code1", 浅Attr.getString("struct_code")) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (!CollectionUtils.isEmpty(list)){ + throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code")); + } + }else { throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code")); } } } - int moveTask = taskService.count(new QueryWrapper() - .eq("task_type", "010704") - .eq("is_delete", "0") - .eq("point_code1", boxAttr.getString("struct_code")) - .lt("task_status", TaskStatusEnum.FINISHED.getCode())); - if (moveTask>0){ - throw new BadRequestException("当前子卷已经装箱入库"); + PdmBiContainerinbound pdmBiContainerinbound = new PdmBiContainerinbound(); + pdmBiContainerinbound.setId(org.nl.common.utils.IdUtil.getStringId()); + pdmBiContainerinbound.setContainer_name(containerName); + pdmBiContainerinbound.setBox(boxSn); + Boolean inbound = param.getBoolean("inbound"); + if (inbound!=null){ + pdmBiContainerinbound.setInbound(inbound); } + iPdmBiContainerinboundService.save(pdmBiContainerinbound); // 生成任务 JSONObject jsonTaskParam = new JSONObject(); jsonTaskParam.put("task_type", "010704"); @@ -405,10 +472,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl packagerelationList) { @@ -483,7 +553,18 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl { + try { + log.error("----回传子卷包装关系----"); + String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue(); + if ("1".equals(isConnect2)) { + transferBoxPackageToMes(false, whereJson, containerNameList, boxSn, weightTotal); + } + } catch (Exception e) { + log.error("子卷装箱异常,transferBoxPackageToMes给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e); + } + }, pool); } /** @@ -659,21 +740,24 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl djqPointList = 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("合格品")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List djqPoints = djqPointList.stream() - .filter(r -> containerNameList.contains(r.getContainer_name())) - .collect(Collectors.toList()); - + .in(BstIvtPackageinfoivt::getContainer_name,containerNameList)); + if (CollectionUtils.isEmpty(djqPointList)){ + throw new BadRequestException(containerNameList+"子卷信息不存在"); + } + boolean hasNo = djqPointList.stream().anyMatch(a -> !a.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))); + if (hasNo){ + throw new BadRequestException(containerNameList+"子卷未质检合格"); + } + List djqPoints = djqPointList.stream().filter(a -> a.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList()); //任务组id String groupId = deviceCode.substring(deviceCode.indexOf("_") + 1, deviceCode.indexOf("_", deviceCode.indexOf("_") + 1)); String now = DateUtil.now(); for (int i1 = 0; i1 < djqPoints.size(); i1++) { BstIvtPackageinfoivt item = djqPoints.get(i1); //校验重复任务 - List taskList = taskService.list(new LambdaQueryWrapper().eq(SchBaseTask::getVehicle_code, item.getContainer_name()).eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) + List taskList = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getVehicle_code, item.getContainer_name()).eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); if (CollectionUtils.isEmpty(taskList)){ JSONObject jo = new JSONObject(); @@ -691,6 +775,159 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl().eq("container_name", code)); + if (containerName==null){ + throw new BadRequestException("当前子卷"+code+"还未生成子卷包装"); + } + if (SUBEnum.STATUS.code("入库").equals(containerName.getStatus()) + ||SUBEnum.STATUS.code("出库").equals(containerName.getStatus())){ + throw new BadRequestException("当前子卷"+code+"已完成出入库不允许手动解除"); + } + if (StringUtils.isNotEmpty(containerName.getPackage_box_sn())){ + String packageBoxSn = containerName.getPackage_box_sn(); + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject attr = attrTab.query("storagevehicle_code = '" + packageBoxSn + "'").uniqueResult(0); + if (ObjectUtils.isNotEmpty(attr)){ + String structCode = attr.getString("struct_code"); + int count = taskService.count(new QueryWrapper() + .eq("task_type", "010704") + .eq("is_delete", "0") + .eq("point_code1", structCode) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (count>0){ + throw new BadRequestException("当前子卷已经生成装箱入库任务,不允许直接解绑"); + } + attr.put("lock_type","1"); + attrTab.update(attr); + } + } + this.removeById(containerName.getWorkorder_id()); + result.put("message", code+"子卷包装解除成功,同时确认MES装箱以解绑定"); + PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_REMOVE,MapOf.of("子卷编号",code),Boolean.TRUE,null,code); + return result; + } + + @Override + public List getStructInfoBySZLS() { + return this.baseMapper.getStructInfoBySZLS(); + } + + @Override + public List recordQuery(List pcsn) { + return this.baseMapper.recordQuery(pcsn); + } + + @Override + public void boxReturn(JSONObject whereJson) { + String deviceCode = whereJson.getString("device_code"); + String box = whereJson.getString("box"); + if (StringUtils.isEmpty(deviceCode)||StringUtils.isEmpty(box)){ + throw new BadRequestException("参数不全"); + } + PdmBiSubpackagerelation one = this.getOne(new QueryWrapper() + .eq("container_name", whereJson.getString("container_name"))); + if (one!=null){ + throw new BadRequestException("包装关系存在,请先在MES和LMS解绑包装关系"); + } + BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper() + .eq(BstIvtBoxinfo::getBox_no, box)); + if (bstIvtBoxinfo == null) { + throw new BadRequestException("请检查木箱信息不存在"); + } + JSONObject acsParam = new JSONObject(); + String height = "1"; + 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"; + } + acsParam.put("device_code",deviceCode); + acsParam.put("sub_volume","BR"+box); + acsParam.put("height_level",height); + acsParam.put("product_area","BLK"); + AcsUtil.notifyAcsObject("api/wms/returnBox", acsParam); + } + + @Override + public void downloadData(Integer day, HttpServletResponse response) { + if (day>3){ + throw new BadRequestException("只能导出前三天数据"); + } + Date time = DateUtil.offsetDay(new Date(), -day); + LogQuery query = new LogQuery(); + query.setMessage("forcedFeedShaft_"); + query.setPage(1); + query.setSize(1000); + query.setStartTime(time); + query.setFilterSql(true); + query.setIsRequest(true); + JSONObject logPage = luceneLogService.query(query); + //forcedFeedShaft + int total = logPage.getIntValue("total"); + List> log = new ArrayList<>(); + if (total>0){ + PageResult page = (PageResult)logPage.get("page"); + for (LogRepositoryDTO dto : page) { + String message = dto.getMessage(); + if (!StringUtils.isEmpty(message)){ + String requestTime = dto.getRequestTime(); + int start = message.indexOf("{"); + int end = message.lastIndexOf("}"); + if (start>0 && end>start){ + String substring = message.substring(start, end + 1); + JSONObject object = JSONObject.parseObject(substring); + String deviceCode = object.getString("device_code"); + log.add(MapOf.of("呼叫时间",requestTime,"设备",deviceCode)); + } + } + } + } + List> databases = this.baseMapper.downloadData(time.toString()); + List> ioData = new ArrayList<>(); + int max = Math.max(databases.size(), log.size()); + for (int i = 0; i < max; i++) { + Map item = new HashMap<>(); + if (databases.size()>i){ + Map item1 = databases.get(i); + item.putAll(item1); + }else { + item.put("下卷设备",""); + item.put("下卷开始",""); + item.put("下卷结束",""); + } + if (log.size()>i){ + Map item2 = log.get(i); + item.putAll(item2); + }else { + item.put("设备",""); + item.put("呼叫时间",""); + } + item.put("分割",""); + if (item.keySet().size()==6){ + ioData.add(item); + } + } + String[] strings = new String[6]; + strings[0] = "下卷设备"; + strings[1] ="下卷开始"; + strings[2] ="下卷结束"; + strings[3] = "分割"; + strings[4] = "设备"; + strings[5] = "呼叫时间"; + new FileUtil().downloadExcelIO(ioData,strings,response); + } @Override public List recordQuery(List pcsn) { if (CollectionUtils.isEmpty(pcsn)){ 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 ccbd70f48..8bf5e2c13 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 @@ -46,7 +46,7 @@ public class BstIvtPackageinfoivtController { * @param page 分页参数 */ @GetMapping - @Log("查询点位库存") + @SaIgnore public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(bstIvtPackageinfoivtService.queryAll(whereJson, page)), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java index b4dd5b081..57a11a602 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.java @@ -1,5 +1,6 @@ package org.nl.b_lms.sch.point.dao.mapper; +import org.apache.ibatis.annotations.Param; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -34,5 +35,6 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper getTaskList(Set pointCodes1, Set pointCodes2, Set pointCodes3, Set pointCodes4); - + List selectNoTaskPoint(@Param("pointStatus") String pointStatus, @Param("ivtStatus")String ivtStatus); + List selectNoTargetTaskPoint(@Param("pointStatus") String pointStatus, @Param("ivtStatus")String ivtStatus); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml index b42c76402..699c3b2c9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/BstIvtPackageinfoivtMapper.xml @@ -80,6 +80,26 @@ AND (task_status '07') AND (is_delete = '0') + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml index 54aef8fd9..caa71fa42 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml @@ -3,27 +3,23 @@ + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubeMovePointDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubeMovePointDto.java new file mode 100644 index 000000000..00aea2cd7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubeMovePointDto.java @@ -0,0 +1,24 @@ +package org.nl.b_lms.sch.tasks.slitter.mapper.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Date: 2025/3/19 + */ +@Data +public class BhTubeMovePointDto { + /** + * 点位 + */ + private String point_code; + /** + * 托盘号 + */ + private String vehicle_code; + private String ivt_status; + /** + * 数量 + */ + private Integer qty; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java new file mode 100644 index 000000000..6c63ba254 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java @@ -0,0 +1,24 @@ +package org.nl.b_lms.sch.tasks.slitter.mapper.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Date: 2025/3/18 + */ +@Data +public class BhTubePointDto { + + /** + * 点位 + */ + private String point_code; + /** + * 托盘号 + */ + private String vehicle_code; + /** + * 数量 + */ + private Integer qty; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java new file mode 100644 index 000000000..7f88b3938 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java @@ -0,0 +1,48 @@ +package org.nl.b_lms.sch.tasks.slitter.mapper.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: lyd + * @Date: 2025/3/11 + */ +@Data +public class CallPlanViewVO implements Serializable { + /** + * uuid + */ + private String workorder_id; + /** + * 分切设备 + */ + private String resource_name; + /** + * 母卷 + */ + private String parent_container_name; + /** + * 分切组 + */ + private String split_group; + /** + * 上轴/下轴 + */ + private String up_or_down; + /** + * 数量 + */ + private String status; + /** + * 气胀轴尺寸 + */ + private String qzz_size; + private String tube; + /** + * 气胀轴代数 + */ + private String qzz_generation; + private String start_time; + private String is_paper_ok; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/GxQtyDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/GxQtyDto.java new file mode 100644 index 000000000..b29a2f7ee --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/GxQtyDto.java @@ -0,0 +1,14 @@ +package org.nl.b_lms.sch.tasks.slitter.mapper.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Date: 2025/4/29 + */ +@Data +public class GxQtyDto { + private String point_code; + private String point_type; + private Integer qty; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/SlitterPlanDistinctDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/SlitterPlanDistinctDto.java index 4d112329c..231444f07 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/SlitterPlanDistinctDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/SlitterPlanDistinctDto.java @@ -33,8 +33,17 @@ public class SlitterPlanDistinctDto { * 气胀轴尺寸 */ private String qzz_size; + /** + * 生产顺序 + */ + private String manufacture_sort; /** * 气胀轴代数 */ private String qzz_generation; + + /** + * 开始时间 + */ + private String start_time; } 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 1cb543bde..f67edcdf1 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 @@ -3,6 +3,7 @@ package org.nl.b_lms.sch.tasks.slitter.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO; import java.util.List; @@ -305,4 +306,60 @@ public interface SlitterService { * @return */ JSONObject forcedFeedShaft(JSONObject param); + + /** + * 查看人工套轴信息 + * @param param + * @return + */ + List showManualView(JSONObject param); + + /** + * 加急送轴 + * @param param + * @return + */ + JSONObject urgentPlan(JSONObject param); + + /** + * 子卷下料2 + * @param param + * @return + */ + JSONObject downRolls2(JSONObject param); + + /** + * 母卷暂存架管理 + * @param param + * @return + */ + JSONObject rollCacheManage(JSONObject param); + + /** + * 母卷暂存管理提示 + * @param param + * @return + */ + JSONObject rollCacheManageTip(JSONObject param); + + /** + * 下卷确认 + * @param param + * @return + */ + JSONObject downRollsCheck(JSONObject param); + + /** + * 饵料下卷 + * @param param + * @return + */ + JSONObject downBait(JSONObject param); + + /** + * 空轴退回 + * @param param + * @return + */ + JSONObject returnShaft(JSONObject 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 c14ffcb6a..6cc1bef66 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 @@ -26,6 +26,7 @@ import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService; import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt; 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.bst.ivt.stockingivt.service.dao.mapper.BstIvtStockingivtMapper; 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; @@ -38,12 +39,15 @@ import org.nl.b_lms.sch.tasks.slitter.*; 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.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.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.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; import org.nl.wms.ext.acs.service.WmsToAcsService; @@ -60,7 +64,6 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -76,6 +79,8 @@ import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.getPointLocati @Service public class SlitterServiceImpl implements SlitterService { + @Autowired + private BstIvtStockingivtMapper bstIvtStockingivtMapper; @Autowired private IschBaseTaskService taskService; @Autowired @@ -93,8 +98,6 @@ public class SlitterServiceImpl implements SlitterService { @Autowired private SlitterDownTrussTask slitterDownTrussTask; @Autowired - private SendCopperFoilSubRollTrussTask sendCopperFoilSubRollTrussTask; - @Autowired private RedissonClient redissonClient; @Autowired private TrussCallShaftCacheTask trussCallShaftCacheTask; @@ -122,10 +125,15 @@ public class SlitterServiceImpl implements SlitterService { private IpdmBiSubpackagerelationService subpackagerelationService; @Autowired private UpShaftTrussTask upShaftTrussTask; + @Autowired + private ReturnShaftAgvTask returnShaftAgvTask; + @Autowired + private ISysNoticeService noticeService; @Override public JSONObject acsRequestShaftLoadTube(JSONObject param) { + // hint: 现在的考虑都是基于B1,B2的车间,后续的B3、B4需要再次修改 log.info("acs申请套轴的输入参数为:{}", param); JSONObject res = new JSONObject(); JSONObject con = new JSONObject(); @@ -136,6 +144,7 @@ public class SlitterServiceImpl implements SlitterService { if (ObjectUtil.isEmpty(autoSendEmpty)) { throw new BadRequestException("未配置是否直接送气胀轴"); } + log.info("获取的穿拔轴点位数据:{}", point); // 判断尺寸是否相同 if (!size.equals(point.getQzz_size())) { log.error("设备:{}对应的气胀轴尺寸不批对,需要气胀轴尺寸:{},实际尺寸:{}", deviceCode, point.getQzz_size(), size); @@ -145,17 +154,40 @@ public class SlitterServiceImpl implements SlitterService { List tubes = Stream.of(point.getTube_code1(), point.getTube_code2()) .filter(ObjectUtil::isNotEmpty) .collect(Collectors.toList()); - // 判断是否存在纸管 - List list = papervehicleService.list(new LambdaQueryWrapper() - .in(MdPbPapervehicle::getMaterial_code, tubes) - .gt(MdPbPapervehicle::getQty, 0)); + // 判断是否存在纸管(查找三点位是否有所需的管芯) +// List list = papervehicleService.list(new LambdaQueryWrapper() +// .in(MdPbPapervehicle::getMaterial_code, tubes) +// .gt(MdPbPapervehicle::getQty, 0)); + List gxQtyList = papervehicleService.getGxPoints(point.getPoint_location(), tubes); // point.getTube_code1() 编码 , getTube_name1() : 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 res.put("device_code", deviceCode); res.put("data", con); - if ("1".equals(autoSendEmpty.getValue()) && list.size() == 0) { - con.put("is_bushing", "2"); + if ("1".equals(autoSendEmpty.getValue()) && gxQtyList.size() == 0) { + con.put("is_bushing", SlitterConstant.TO_SHAFT_INFO_97); } else { - con.put("is_bushing", list.size() > 0 ? SlitterConstant.SLITTER_YES : SlitterConstant.SLITTER_NO); +// int sum = list.stream() +// .mapToInt(e -> e.getQty().intValue()) +// .sum(); +// // 需要求和判断当前数量和所需数 +// con.put("is_bushing", sum >= tubes.size() ? SlitterConstant.SLITTER_YES : SlitterConstant.SLITTER_NO); + List hasNeedPoint = gxQtyList.stream() + .filter(gx -> "1".equals(gx.getPoint_type()) && gx.getQty() >= tubes.size()) + .collect(Collectors.toList()); + if (hasNeedPoint.size() > 0) { + // 1、判断点位类型有没有=1,且数量大于等于所需数 + con.put("is_bushing", SlitterConstant.SLITTER_YES); + } else { + // 2、判断点位有没有任务(010807->point3, 010808->point1) + List pointCodes = gxQtyList.stream() + .map(GxQtyDto::getPoint_code) + .distinct() + .collect(Collectors.toList()); + Integer tasks = papervehicleService.checkHaveTaskByPoints(pointCodes); + con.put("is_bushing", tasks > 0 + ? SlitterConstant.SLITTER_YES + : "1".equals(autoSendEmpty.getValue()) ? SlitterConstant.TO_SHAFT_INFO_97 : SlitterConstant.TO_SHAFT_INFO_98); + } + } con.put("left", point.getTube_code1()); con.put("leftSize", ObjectUtil.isNotEmpty(point.getTube_name1()) @@ -266,9 +298,9 @@ public class SlitterServiceImpl implements SlitterService { } List plans = slittingproductionplanService.list( new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getContainer_name, collect) - .eq(PdmBiSlittingproductionplan::getStatus, "01") - .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); + .in(PdmBiSlittingproductionplan::getContainer_name, collect) + .eq(PdmBiSlittingproductionplan::getStatus, "01") + .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); // 去异常位 if (plans.size() == 0) { log.error("找不到[{}]对应的分切计划,分切计划可能被删除或者拼接!", collect); @@ -338,7 +370,9 @@ public class SlitterServiceImpl implements SlitterService { } if (ObjectUtil.isEmpty(cutPoint)) { // 获取一个空位 (上下区域) - List emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus( +// List emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus( +// "1", "1", startPoint.getPoint_location(), "1"); + List emptyNotTaskPoint = bcutpointivtService.getNBJAreaNotTaskPointByStatus( "1", "1", startPoint.getPoint_location(), "1"); if (emptyNotTaskPoint.size() == 0) { throw new BadRequestException("找不到可用套轴对接位!"); @@ -390,35 +424,41 @@ public class SlitterServiceImpl implements SlitterService { @SneakyThrows @Override public JSONObject acsSendShaftToCache(JSONObject param) { + // 需要请求放货 log.info("ACS申请送气涨轴到气涨轴暂存位的输入参数为:{}", param); + String lock = "lock"; JSONObject res = new JSONObject(); String deviceCode = param.getString("device_code"); String qzzSize = param.getString("size"); - // 判断是否有未完成的任务 - List list = taskService.list(new LambdaQueryWrapper() - .eq(SchBaseTask::getPoint_code1, deviceCode) - .lt(SchBaseTask::getTask_status, "07")); - if (list.size() > 0) { - throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); - } - BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); - // 临时存放气涨轴尺寸 - startPoint.setQzz_size(qzzSize); - // 获取空位 - List shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint); - if (shafttubeivts.size() == 0) { - throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); - } - // todo: 过滤空位后面是否有轴的位置 - - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - RLock lockPoint = redissonClient.getLock(shafttubeivt.getPoint_code()); + RLock lockPoint = redissonClient.getLock(lock + qzzSize); boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS); try { if (tryLockPoint) { + // 判断是否有未完成的任务 + List list = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code1, deviceCode) + .lt(SchBaseTask::getTask_status, "07")); + if (list.size() > 0) { + throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); + } + BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); + // 临时存放气涨轴尺寸 + startPoint.setQzz_size(qzzSize); + // 获取等待点(放货点) + // 获取空位 +// List shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint); +// if (shafttubeivts.size() == 0) { +// throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); +// } + BstIvtShafttubeivt putWaitPoint = shafttubeivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtShafttubeivt::getPoint_location, startPoint.getPoint_location()) + .eq(BstIvtShafttubeivt::getPoint_type, "8")); + if (ObjectUtil.isEmpty(putWaitPoint)) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的等待点位"); + } // 创建任务 param.put("point_code1", deviceCode); - param.put("point_code2", shafttubeivt.getPoint_code()); + param.put("point_code2", putWaitPoint.getPoint_code()); // hint: 当前分切计划的气涨轴尺寸 param.put("qzz_size", qzzSize); param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴位<>气胀轴缓存位")); @@ -453,14 +493,20 @@ public class SlitterServiceImpl implements SlitterService { } BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); // 获取气涨轴缓存没有任务的点位 - List shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize, - startPoint.getQzz_generation(), startPoint.getPoint_location()); - if (shafttubeivts.size() == 0) { - throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位"); +// List shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize, +// startPoint.getQzz_generation(), startPoint.getPoint_location()); +// if (shafttubeivts.size() == 0) { +// throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位"); +// } + BstIvtShafttubeivt pickWaitPoint = shafttubeivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtShafttubeivt::getPoint_location, startPoint.getPoint_location()) + .eq(BstIvtShafttubeivt::getPoint_type, "7")); + if (ObjectUtil.isEmpty(pickWaitPoint)) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的等待点位"); } - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); +// BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); JSONObject taskParam = new JSONObject(); - taskParam.put("point_code1", shafttubeivt.getPoint_code()); + taskParam.put("point_code1", pickWaitPoint.getPoint_code()); taskParam.put("point_code2", startPoint.getPoint_code()); taskParam.put("is_bushing", SlitterConstant.SLITTER_YES); taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴位<>气胀轴缓存位")); @@ -486,12 +532,11 @@ public class SlitterServiceImpl implements SlitterService { log.error("子卷参数不能为空!"); throw new BadRequestException("子卷参数不能为空!"); } - // 获取分切计划,最多4个需要出站的任务 + // 获取分切计划,最多4个需要出站的任务 (不在校验05状态) List currentPlans = slittingproductionplanService.list( new LambdaQueryWrapper() .in(PdmBiSlittingproductionplan::getContainer_name, containerList) - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) - .eq(PdmBiSlittingproductionplan::getStatus, "05")); + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO)); if (currentPlans.size() == 0) { log.error("当前子卷已经出卷或者不存在!"); throw new BadRequestException("当前子卷已经出卷或者不存在!"); @@ -514,20 +559,12 @@ public class SlitterServiceImpl implements SlitterService { } String area = device.getProduct_area(); // 获取当前分切机的下一组分切计划(最多四条分切计划) - // hint: 获取到的分切可能是不同组的但具有一定时间顺序 - List timePlans = slittingproductionplanService.list( - new LambdaQueryWrapper() - .eq(PdmBiSlittingproductionplan::getResource_name, device.getExt_code()) - .eq(PdmBiSlittingproductionplan::getStatus, "03") - .eq(PdmBiSlittingproductionplan::getIs_delete, "0") - .orderByAsc(PdmBiSlittingproductionplan::getUpdate_time)); - log.info("获取下一组分切计划(可能存在脏数据):{}", timePlans); // 寻找备好轴的对接点位 - List cutPointList = slitterMapper.getReadyShaftPoint(device.getExt_code()); + List cutPointList = slitterMapper.getReadyShaftPoint(actualDeviceCode); // 任务参数 JSONObject taskParam = new JSONObject(); taskParam.put("containers", containers); - if (timePlans.size() == 0 || cutPointList.size() == 0) { + if (cutPointList.size() == 0) { // 如果没有下一组的分切计划,就只做下卷任务(判断下单/下双) // 获取分切对接位没任务的空位置 List emptyPoints = slitterMapper.getEmptyCutPointNotTask(area, @@ -581,19 +618,16 @@ public class SlitterServiceImpl implements SlitterService { } } } - PdmBiSlittingproductionplan tmpPlan = timePlans.get(0); - // hint: 以第一条为准,过滤和第一条同组同母卷的分切计划 - List nextPlans = timePlans.stream() - .filter(plan -> plan.getParent_container_name().equals(tmpPlan.getParent_container_name()) - && plan.getRestruct_container_name().equals(tmpPlan.getRestruct_container_name()) - && plan.getSplit_group().equals(tmpPlan.getSplit_group())) + // 找到该分切计划的点位 + BstIvtCutpointivt newCutPoint = cutPointList.get(0); + List qzznos = Stream.of(newCutPoint.getQzz_no1(), newCutPoint.getQzz_no2()).filter(ObjectUtil::isNotEmpty) .collect(Collectors.toList()); + // hint: 以第一条为准,过滤和第一条同组同母卷的分切计划 + List nextPlans = slittingproductionplanService.getByQzzNos(qzznos); log.info("获取下一趟分切计划数据:{}", nextPlans); // 筛选上下轴各一条 PdmBiSlittingproductionplan nextUpPlan = nextPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null); PdmBiSlittingproductionplan nextDownPlan = nextPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null); - // 找到该分切计划的点位 - BstIvtCutpointivt newCutPoint = cutPointList.get(0); String binaryExpress = TaskUtils.binaryConvertExpress(currentUpPlan, currentDownPlan, nextUpPlan, nextDownPlan); switch (binaryExpress) { case "00": @@ -821,7 +855,7 @@ public class SlitterServiceImpl implements SlitterService { if (list.size() == 0) { throw new BadRequestException("分切机" + device_code + " 的分切计划 " + qzzNo + " 不存在"); } - List tasks = taskService.checkHaveTask(device_code); + List tasks = taskService.checkHaveTrussTask(Arrays.asList(deviceCode.getUp_point_code(), deviceCode.getDown_point_code())); if (tasks.size() > 0) { throw new BadRequestException("分切机" + device_code + " 已经有存在的任务"); } @@ -862,8 +896,13 @@ public class SlitterServiceImpl implements SlitterService { return null; } + @Override + @Transactional(rollbackFor = Exception.class) public JSONObject acsToReduceTube(JSONObject param) { log.info("扣除纸管数据的输入参数为:{}", param); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "请求成功!"); // param: device_code row_num if (ObjectUtil.isEmpty(param.getString("row_num"))) { log.error("设备:{},排数不能为空", param.getString("device_code")); @@ -885,24 +924,38 @@ public class SlitterServiceImpl implements SlitterService { MdPbPapervehicle mdPbPapervehicle = papervehicleService.getOne(new LambdaQueryWrapper() .eq(MdPbPapervehicle::getVehicle_code, vehicleCode) .eq(MdPbPapervehicle::getRow_num, param.getString("row_num"))); - int qty = mdPbPapervehicle.getQty().intValue(); - if (qty <= 0) { - throw new BadRequestException("当前物料数量为0!"); + if (ObjectUtil.isEmpty(mdPbPapervehicle)) { + log.warn("托盘:" + vehicleCode + "第" + param.getString("row_num") + "行没数据!"); + throw new BadRequestException("托盘:" + vehicleCode + "第" + param.getString("row_num") + "行没数据!"); + } + log.debug("更新前:" + vehicleCode + "第" + param.getString("row_num") + mdPbPapervehicle); + if (mdPbPapervehicle != null || mdPbPapervehicle.getQty().intValue() > 0) { + //数量减一 + mdPbPapervehicle.setQty(BigDecimal.valueOf(mdPbPapervehicle.getQty().intValue() - 1)); + + log.debug("更新后:" + vehicleCode + "第" + param.getString("row_num") + mdPbPapervehicle); + + // 检查更新后的 qty 是否为 0,然后删除相应的记录 + if (mdPbPapervehicle.getQty().intValue() <= 0) { + boolean remove = papervehicleService.removeById(mdPbPapervehicle); + log.debug("删除0结果:" + vehicleCode + ":" + remove); + } else { + papervehicleService.update(mdPbPapervehicle); + } + // todo: 如果qty=0,创建AGV送空任务,(新的task_type)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071 +// if (remove) { // hint: 错误 +// // 证明删除成功,创建任务搬走 +// // 查找一个没有任务的空位 +// List list = stockingivtService.getEmptyPointNotTask(device.getPoint_location(), "0"); +// if (list.size() == 0) { +// noticeService.createNotice("管芯抓取备货区找不到空位置搬运", +// "管芯抓取点位[" + device.getPoint_name() + "]无法从备货区找到空位", +// NoticeTypeEnum.EXCEPTION.getCode()); +// return res; +// } +// BstIvtStockingivt stockingivt = list.get(0); +// } } - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("vehicle_code", vehicleCode) - .eq("row_num", param.getString("row_num")) - .setSql("qty=qty-1"); - papervehicleService.update(updateWrapper); - // 检查更新后的 qty 是否为 0,然后删除相应的记录 - QueryWrapper deleteWrapper = new QueryWrapper<>(); - deleteWrapper.eq("vehicle_code", vehicleCode) - .eq("row_num", param.getString("row_num")) - .eq("qty", "0"); - papervehicleService.remove(deleteWrapper); - JSONObject res = new JSONObject(); - res.put("status", HttpStatus.HTTP_OK); - res.put("message", "请求成功!"); return res; } @@ -975,14 +1028,12 @@ public class SlitterServiceImpl implements SlitterService { String device_code = param.getString("device_code"); //查询当前母卷所在的点位在哪 - JSONObject cache_jo = WQLObject.getWQLObject("st_ivt_stpointcacheivt").query("container_name = '"+container_name+"'").uniqueResult(0); + JSONObject cache_jo = WQLObject.getWQLObject("st_ivt_stpointcacheivt").query("container_name = '" + container_name + "'").uniqueResult(0); if (ObjectUtil.isEmpty(cache_jo)) { throw new BadRequestException("未查询到母卷所在的点位!"); } - - return null; } @@ -1026,7 +1077,7 @@ public class SlitterServiceImpl implements SlitterService { // param: point_code String pointCode = param.getString("point_code"); // 校验是否存在任务 - List taskList = taskService.checkHaveTask(pointCode); + List taskList = taskService.checkHaveStartTask(pointCode); if (taskList.size() > 0) { throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的任务!"); } @@ -1048,11 +1099,17 @@ public class SlitterServiceImpl implements SlitterService { if (CollectionUtil.isNotEmpty(qzzNos)) { List plans = slittingproductionplanService.getByQzzNos(qzzNos); List collect = plans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); + if (collect.size() == 0) { + throw new BadRequestException("操作失败,点位[" + pointCode + "]未查到子卷分切计划,请先绑定子卷库存!"); + } taskParam.put("containers", collect); + } else { + throw new BadRequestException("操作失败,点位[" + pointCode + "]无气胀轴信息,请先绑定子卷库存!"); } - List areaEmptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", - "1", "0", "2"); - if (areaEmptyNotTaskPoint.size() == 0) { +// List areaEmptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", +// "1", "0", "2"); + List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", "0", "2"); + if (areaEmptyNotTaskPoint.size() <= 1) { throw new BadRequestException("请求搬运失败,内包间没有可存放位置!"); } BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0); @@ -1192,6 +1249,11 @@ public class SlitterServiceImpl implements SlitterService { if (plans.size() == 0) { throw new BadRequestException("子卷号:[" + containerName + "] 的分切计划没找到,检查是否推送或者子卷号是否正确!"); } + // 校验是否存在任务 + List taskList = taskService.checkHaveStartTask(pointCode1); + if (taskList.size() > 0) { + throw new BadRequestException("操作失败,点位[" + pointCode1 + "]存在未完成的任务!"); + } BstIvtCutpointivt pointCode = bcutpointivtService.getPintByTrussCode(pointCode1, false); PdmBiSlittingproductionplan demoPlan = plans.get(0); String resourceName = demoPlan.getResource_name(); @@ -1254,6 +1316,11 @@ public class SlitterServiceImpl implements SlitterService { if (plans.size() == 0) { throw new BadRequestException("子卷号:[" + containerName + "] 的分切计划没找到,检查是否推送或者子卷号是否正确!"); } + // 校验是否存在任务 + List taskList = taskService.checkHaveStartTask(pointCode1); + if (taskList.size() > 0) { + throw new BadRequestException("操作失败,点位[" + pointCode1 + "]存在未完成的任务!"); + } BstIvtCutpointivt pointCode = bcutpointivtService.getPintByTrussCode(pointCode1, false); PdmBiSlittingproductionplan demoPlan = plans.get(0); String resourceName = demoPlan.getResource_name(); @@ -1401,7 +1468,7 @@ public class SlitterServiceImpl implements SlitterService { String upQzzno = deviceCode.getUp_qzzno(); String downQzzno = deviceCode.getDown_qzzno(); if (ObjectUtil.isNotEmpty(upQzzno)) { - List byQzzNo = slittingproductionplanService.getByQzzNoByStatus(upQzzno, "05"); + List byQzzNo = slittingproductionplanService.getByQzzNoByNoStatus(upQzzno); if (byQzzNo.size() == 0) { msg = "上轴对应的数据不存在!"; } else { @@ -1410,12 +1477,16 @@ public class SlitterServiceImpl implements SlitterService { .map(PdmBiSlittingproductionplan::getContainer_name) .collect(Collectors.joining(",")); data.put("up", collect); + PdmBiSlittingproductionplan dplan = byQzzNo.get(0); + if (!dplan.getStatus().equals("05")) { + msg = "上轴的计划不是入站完成!"; + } } } else { msg = "上轴无子卷信息!"; } if (ObjectUtil.isNotEmpty(downQzzno)) { - List byQzzNo = slittingproductionplanService.getByQzzNoByStatus(downQzzno, "05"); + List byQzzNo = slittingproductionplanService.getByQzzNoByNoStatus(downQzzno); if (byQzzNo.size() == 0) { msg = msg + "下轴对应的数据不存在!"; } else { @@ -1424,6 +1495,10 @@ public class SlitterServiceImpl implements SlitterService { .map(PdmBiSlittingproductionplan::getContainer_name) .collect(Collectors.joining(",")); data.put("down", collect); + PdmBiSlittingproductionplan dplan = byQzzNo.get(0); + if (!dplan.getStatus().equals("05")) { + msg = "下轴的计划不是入站完成!"; + } } } else { msg = msg + "下轴无子卷信息!"; @@ -1537,6 +1612,20 @@ public class SlitterServiceImpl implements SlitterService { if (ObjectUtil.isEmpty(pointByCode)) { throw new BadRequestException("点位 [" + pointCode + "] 不存在或者已被禁用!"); } + if (ObjectUtil.isEmpty(vehicleCode)) { + throw new BadRequestException("托盘信息不能为空!"); + } + if (!vehicleCode.contains("GX")) { + throw new BadRequestException("请扫描或输入正确的托盘码!"); + } + + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(BstIvtStockingivt::getVehicle_code, vehicleCode) + .eq(BstIvtStockingivt::getIs_used, SlitterConstant.SLITTER_YES); + BstIvtStockingivt old = bstIvtStockingivtMapper.selectOne(lam); + if (ObjectUtil.isNotEmpty(old)) { + throw new BadRequestException("当前托盘:" + vehicleCode + "已绑定在点位:" + old.getPoint_code() + "上,不允许重复绑定!"); + } pointByCode.setVehicle_code(vehicleCode); pointByCode.setIvt_status("1"); TaskUtils.updateOptMessageByBStockingPoint(pointByCode); @@ -1590,7 +1679,7 @@ public class SlitterServiceImpl implements SlitterService { List containers = byQzzNos.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); taskParam.put("containers", containers); List areaEmptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus("2", - "1", "0","0"); + "1", "0", "0"); if (areaEmptyNotTaskPoint.size() == 0) { throw new BadRequestException(cut.getProduct_area() + "该区域暂存位暂无位置存放满轴"); } @@ -1634,7 +1723,7 @@ public class SlitterServiceImpl implements SlitterService { PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName); if (ObjectUtil.isNotEmpty(rollWeight)) { BigDecimal bigDecimal = new BigDecimal(rollWeight); - if (bigDecimal.intValue()<50){ + if (bigDecimal.intValue() < 50) { throw new BadRequestException("子卷重量异常,不能小于50"); } plan.setWeight(rollWeight); @@ -1926,8 +2015,12 @@ public class SlitterServiceImpl implements SlitterService { // 玻璃纤维及其制品|FRP管|6英寸|15|1700|高强 // param: area, device_code, up_left_size_k,up_right_size_k, up_left_size_v,up_right_size_v // down_left_size_k,down_right_size_k, down_left_size_v,down_right_size_v - log.info("创建虚拟分切计划呼叫气胀轴 - {}", param); + log.info("forcedFeedShaft_创建虚拟分切计划呼叫气胀轴 - {}", param); String area = param.getString("area"); + int uLeftLen = 0; + int uRightLen = 0; + int dLeftLen = 0; + int dRightLen = 0; if (!area.startsWith("B")) { throw new BadRequestException("该功能只对二期有用!"); } @@ -1944,11 +2037,38 @@ public class SlitterServiceImpl implements SlitterService { String downRightSizeK = param.getString("down_right_size_k"); String downLeftSizeV = param.getString("down_left_size_v"); String downRightSizeV = param.getString("down_right_size_v"); + // 获取设备的 + List checkPlans = slittingproductionplanService.getXnPlanByDevice(deviceCode); + //判断是否有未配送完成的虚拟分切计划 + if (ObjectUtil.isNotEmpty(checkPlans)) { + PdmBiSlittingproductionplan now_checkPlan = checkPlans.get(0); + if ("01".equals(now_checkPlan.getStatus())) { + log.debug(deviceCode + "气胀轴正在准备,不允许二次呼叫套轴!"); + throw new BadRequestException(deviceCode + "气胀轴正在准备,不允许二次呼叫套轴!"); + } else if ("02".equals(now_checkPlan.getStatus())) { + log.debug(deviceCode + "气胀轴配送中,不允许二次呼叫套轴!"); + throw new BadRequestException(deviceCode + "气胀轴配送中,不允许二次呼叫套轴!"); + } + } + //判断分切暂存位是否有已配送的气胀轴或未下料完成的子卷 + //根据机台号获取分切区域表 + StIvtCutpointivt deviceCut = cutpointivtService.getPintByExtCode(deviceCode, false); + //获取机台对应的空闲对接位 + List emptyPoint = slitterMapper.getEmptyCutPointNotTask(deviceCut.getProduct_area(), + deviceCut.getSort_seq(), + SlitterTaskUtil.getPointLocationInCutDevice( + SlitterTaskUtil.getNumberByResourceCode(deviceCode), + deviceCut.getProduct_area())); + if (emptyPoint.size() == 0) { + log.debug(deviceCode + "对接缓存位不是空位或存在执行中的任务!"); + throw new BadRequestException(deviceCode + "对接缓存位不是空位或存在执行中的任务!"); + } + List plans = new ArrayList<>(); // 虚拟计划 for (int i = 0; i < 4; i++) { String containerName = area + "虚拟-" + deviceCode + "-" + i; - PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName); + PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerNameNotStatus(containerName); if (ObjectUtil.isEmpty(plan)) { plan = new PdmBiSlittingproductionplan(); plan.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr()); @@ -2010,6 +2130,7 @@ public class SlitterServiceImpl implements SlitterService { } plan.setUp_or_down("1"); plan.setLeft_or_right("1"); + uLeftLen = SlitterTaskUtil.getPaperLengthInt(plan); } if (i == 1 && ObjectUtil.isNotEmpty(upRightSizeK)) { // 上右 @@ -2032,6 +2153,7 @@ public class SlitterServiceImpl implements SlitterService { } else { plan.setQzz_generation("5"); } + uRightLen = SlitterTaskUtil.getPaperLengthInt(plan); } if (i == 2 && ObjectUtil.isNotEmpty(downLeftSizeK)) { // 下左 @@ -2054,6 +2176,7 @@ public class SlitterServiceImpl implements SlitterService { } else { plan.setQzz_generation("5"); } + dLeftLen = SlitterTaskUtil.getPaperLengthInt(plan); } if (i == 4 && ObjectUtil.isNotEmpty(downRightSizeK)) { // 下右 @@ -2076,6 +2199,7 @@ public class SlitterServiceImpl implements SlitterService { } else { plan.setQzz_generation("5"); } + dRightLen = SlitterTaskUtil.getPaperLengthInt(plan); } if (i == 0 && ObjectUtil.isEmpty(upLeftSizeK)) { plan.setIs_delete("1"); @@ -2091,6 +2215,10 @@ public class SlitterServiceImpl implements SlitterService { } plans.add(plan); } + if (uLeftLen + uRightLen > 1700 || dLeftLen + dRightLen > 1700) { + throw new BadRequestException("同一根轴长度不能超过气胀轴长度,请确认是否选择正确!"); + } + log.warn("forcedFeedShaft_______:{}", deviceCode); slittingproductionplanService.saveOrUpdateBatch(plans); if (area.startsWith("B")) { // 机台打开 @@ -2107,4 +2235,439 @@ public class SlitterServiceImpl implements SlitterService { res.put("message", "呼叫送轴成功!"); return res; } + + private PdmBiSlittingproductionplan doCheckCanCallAgain(List checkPlans) { + // 如果is_paper_ok = 2那就不允许 + for (PdmBiSlittingproductionplan checkPlan : checkPlans) { + if ("2".equals(checkPlan.getStatus())) { + return checkPlan; + } + } + return null; + } + + @Override + public List showManualView(JSONObject param) { + return slitterMapper.showManualView(); + } + + @Override + public JSONObject urgentPlan(JSONObject param) { + JSONObject res = new JSONObject(); + log.info("加急送轴的输入参数为:{}", param); + String workorder_id = param.getString("workorder_id"); + PdmBiSlittingproductionplan plan = slittingproductionplanService.getById(workorder_id); + log.info("当前加急送轴的计划为:{}", plan); + if (!"01".equals(plan.getStatus())) { + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "加急失败,当前计划正在套轴!"); + return res; + } + if (!"P1".equals(plan.getManufacture_sort())) { + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "加急失败,当前计划已加急过一次!"); + return res; + } + //更新套轴计划开始时间为当前时间 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); + updateWrapper.set(PdmBiSlittingproductionplan::getStart_time, DateUtil.now()) + .set(PdmBiSlittingproductionplan::getManufacture_sort, "P2") + .eq(PdmBiSlittingproductionplan::getWorkorder_id, workorder_id) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO); + //判断更新是否成功 + boolean flag = slittingproductionplanService.update(updateWrapper); + if (flag) { + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "加急成功!"); + } else { + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "加急失败,请刷新再试!"); + } + return res; + } + + @Override + public JSONObject downRolls2(JSONObject param) { + log.info("下卷2的输入参数为:{}", param); + // param: device_code, container: [{"container_name":"子卷号", "site":"上下轴(1/2)"}] + String device_code = param.getString("device_code"); + StIvtCutpointivt deviceCode = cutpointivtService.getPintByExtCode(device_code, false); + List tasks = taskService.checkHaveTrussTask(Arrays.asList(deviceCode.getUp_point_code(), deviceCode.getDown_point_code())); + if (tasks.size() > 0) { + throw new BadRequestException("分切机" + device_code + " 已经有存在的任务"); + } + JSONArray conArray = param.getJSONArray("container"); + List containerNames = new ArrayList<>(); + for (int i = 0; i < conArray.size(); i++) { + JSONObject container = conArray.getJSONObject(i); + containerNames.add(container.getString("container_name")); + } + List plans = slittingproductionplanService.getByContainerNames(containerNames); + // 兜底校验:判断与实际是否一致 + SlitterTaskUtil.validateConsistency(conArray, plans); + JSONObject reqParam = new JSONObject(); + reqParam.put("device_code", device_code); + reqParam.put("container", containerNames); + mesSlittingMachineSendMaterial(reqParam); + 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:有空轴) + String pointCode = param.getString("point_code"); + String flag = param.getString("flag"); + WQLObject coolTab = WQLObject.getWQLObject("st_ivt_coolpointivt"); + JSONObject cool_jo = coolTab + .query("full_point_code = '" + pointCode + "' or empty_point_code = '" + pointCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(cool_jo)) { + throw new BadRequestException("该暂存架不存在!"); + } + cool_jo.put("empty_point_status", "1".equals(flag) ? "01" : "02"); + cool_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + cool_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + cool_jo.put("update_time", DateUtil.now()); + coolTab.update(cool_jo); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "点位更新成功!"); + return res; + } + + @Override + public JSONObject rollCacheManageTip(JSONObject param) { + // param: point_code + String pointCode = param.getString("point_code"); + JSONObject res = new JSONObject(); + JSONObject data = new JSONObject(); + WQLObject coolTab = WQLObject.getWQLObject("st_ivt_coolpointivt"); + JSONObject cool_jo = coolTab + .query("full_point_code = '" + pointCode + "' or empty_point_code = '" + pointCode + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(cool_jo)) { + throw new BadRequestException("该暂存架不存在!"); + } + data.put("msg", "该位置 " + ("01".equals(cool_jo.getString("empty_point_status")) ? "没有空轴" : "有空轴")); + res.put("status", HttpStatus.HTTP_OK); + res.put("data", data); + return res; + } + + @Override + public JSONObject downRollsCheck(JSONObject param) { + // param: device_code, container: [{"container_name":"子卷号", "site":"上下轴(1/2)"}] + JSONObject res = new JSONObject(); + String device_code = param.getString("device_code"); + List tasks = taskService.checkHaveTask(device_code); + if (tasks.size() > 0) { + throw new BadRequestException("分切机" + device_code + " 已经有存在的任务"); + } + JSONArray conArray = param.getJSONArray("container"); + List containerNames = new ArrayList<>(); + for (int i = 0; i < conArray.size(); i++) { + JSONObject container = conArray.getJSONObject(i); + containerNames.add(container.getString("container_name")); + } + List plans = slittingproductionplanService.getByContainerNames(containerNames); + + try { + SlitterTaskUtil.validateConsistency(conArray, plans); + } catch (Exception e) { + res.put("flag", "2"); + res.put("message", e.getMessage()); + } + res.put("flag", "1"); + return res; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject returnShaft(JSONObject param) { + log.info("空轴退回 - {}", param); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "创建AGV任务成功!"); + // param: point_code + String pointCode = param.getString("point_code"); + //缓存A气胀轴规格 3-4 三寸四代 + String size1 = param.getString("size1"); + //缓存B气胀轴规格 + String size2 = param.getString("size2"); + + BstIvtCutpointivt point = bcutpointivtService.getPintByAgvCode(pointCode, false); + // 校验是否存在行架任务 + Boolean haveTaskByZcPoint = taskService.checkHaveTaskByZcPoint(point); + if (haveTaskByZcPoint) { + throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的行架任务!"); + } + // 校验是否存在agv任务 + List taskList = taskService.checkHaveStartTask(pointCode); + if (taskList.size() > 0) { + throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的agv任务!"); + } + + if (ObjectUtil.equals(point.getPoint_status(), "2")) { + // 如果是没货 + throw new BadRequestException("点位:" + point.getPoint_code() + "检测空气胀轴,请先清空点位信息再触发!!"); + } + if (ObjectUtil.equals(point.getPoint_status(), "3")) { + throw new BadRequestException("点位:" + point.getPoint_code() + "检测子卷,请先清空点位信息再触发!!"); + } + if (ObjectUtil.isNotEmpty(point.getQzz_no1()) || ObjectUtil.isNotEmpty(point.getQzz_no2())) { + throw new BadRequestException("点位:" + point.getPoint_code() + " 的气胀轴编码不为空,请先清空点位信息再触发!!"); + } + if (Objects.equals(point.getPoint_status(), "1") && ObjectUtil.isEmpty(point.getQzz_no1()) && ObjectUtil.isEmpty(point.getQzz_no2())) { + // 如果是没货 绑定为空轴状态 + point.setPoint_status("4"); + bcutpointivtService.updateById(point); + } + JSONObject taskParam = new JSONObject(); + + // 获取内包间缓存位 + List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", "0", "2"); + if (areaEmptyNotTaskPoint.size() <= 1) { + throw new BadRequestException("请求搬运失败,内包间没有可存放位置!"); + } + BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0); + RLock lock = redissonClient.getLock(endPoint.getPoint_code()); + boolean tryLock; + try { + tryLock = lock.tryLock(0, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new BadRequestException("获取锁异常"); + } + try { + if (tryLock) { + taskParam.put("point_code1", point.getPoint_code()); + taskParam.put("point_code2", endPoint.getPoint_code()); + if (ObjectUtil.isNotEmpty(size1)) { + taskParam.put("vehicle_code1", IdUtil.getSnowflake(1, 1).nextIdStr() + size1); + } + if (ObjectUtil.isNotEmpty(size2)) { + taskParam.put("vehicle_code2", IdUtil.getSnowflake(1, 1).nextIdStr() + size2); + } + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料AGV到内包间")); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + returnShaftAgvTask.createTask(taskParam); + } else { + throw new BadRequestException("系统繁忙,稍后在试!!"); + } + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + return res; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject downBait(JSONObject param) { + log.info("饵料下卷:{}", param); + // param: area, device_code, point_code, left_spec, right_spec + String area = param.getString("area"); + String point_code = param.getString("point_code"); + String up_or_down = param.getString("up_or_down"); + String left_spec = param.getString("left_spec_value"); + String right_spec = param.getString("right_spec_value"); + String left_spec_value = param.getString("left_spec"); + String right_spec_value = param.getString("right_spec"); + int num = ObjectUtil.isNotEmpty(left_spec) && ObjectUtil.isNotEmpty(right_spec) ? 2 : 1; + if (!area.startsWith("B")) { + throw new BadRequestException("仅限于二期使用"); + } + //查询该点位对应的机台编号 + StIvtCutpointivt cutDevice = cutpointivtService.getPintByUpOrDownCode(point_code, false); +// JSONObject cut_ivt = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("up_point_code ='" + point_code + "' OR down_point_code ='" + point_code + "'").uniqueResult(0); + String device_code = cutDevice.getExt_code(); + if (ObjectUtil.isEmpty(cutDevice)) { + throw new BadRequestException("未查询到对应的分切机!"); + } + // 判断是否存在任务 + List tasks = taskService.checkHaveTask("1".equals(up_or_down) ? cutDevice.getUp_point_code() : cutDevice.getDown_point_code()); + if (tasks.size() > 0) { + throw new BadRequestException("该点位已经创建过任务"); + } + List plans = new ArrayList<>(); + String qzzNo = device_code.substring(0, 2) + + device_code.substring(device_code.length() - 2) + + TaskUtils.getDateTime("yyMMddHHmmss") + "-饵料"; + String code = "饵料" + TaskUtils.getDateTime("yyMMddHHmmss"); + // 创建饵料计划 + for (int i = 0; i < num; i++) { + String containerName = area + code + "-" + i; + PdmBiSlittingproductionplan plan = new PdmBiSlittingproductionplan(); + plan.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + // 公共部分插入 + plan.setOrder_type("1"); + plan.setContainer_name(containerName); + plan.setProduct_name("220890200000001"); + plan.setDescription("虚拟卷"); + plan.setParent_container_name(code); + plan.setRestruct_container_name(""); + plan.setWare_house("1"); + plan.setResource_name(device_code); + plan.setSplit_group("A"); + plan.setManufacture_sort("P1"); + plan.setMfg_order_name("-"); + plan.setManufacture_date(DateUtil.format(DateUtil.date(), "yyyy-MM-dd")); + plan.setSplit_breadth(new BigDecimal("999")); + plan.setSplit_height(new BigDecimal("999")); + plan.setSplit_weight(new BigDecimal("999")); + plan.setStart_time(DateUtil.now()); + plan.setEnd_time(""); + plan.setStatus("01"); + plan.setIs_parent_ok("0"); + plan.setIs_child_tz_ok("0"); + plan.setIs_child_ps_ok("0"); + plan.setPaper_weight("0"); + plan.setQzzno(""); + plan.setIs_delete("0"); + plan.setSale_order_name("-"); + plan.setIs_call("0"); + plan.setIs_paper_ok("1"); + plan.setFRP_model(""); + plan.setFRP_material(""); + plan.setFRP_description(""); + plan.setPaper_tube_model(""); + plan.setPaper_tube_material(""); + plan.setPaper_tube_description(""); + plan.setQzzno(qzzNo); + plan.setLevel("5"); + // 区分位置创建 + if (i == 0 && ObjectUtil.isNotEmpty(left_spec) && "1".equals(up_or_down)) { + // 上左 + plan.setPaper_tube_or_FRP(left_spec_value.startsWith("48") ? "1" : "2"); + String[] split = left_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(left_spec_value); + plan.setPaper_tube_model(left_spec); + plan.setPaper_tube_description(left_spec); + } else { + plan.setFRP_material(left_spec_value); + plan.setFRP_model(left_spec); + plan.setFRP_description(left_spec); + } + if (left_spec.contains("3英寸") || left_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + plan.setUp_or_down("1"); + plan.setLeft_or_right("1"); + } + if (i == 1 && ObjectUtil.isNotEmpty(right_spec) && "1".equals(up_or_down)) { + // 上右 + plan.setPaper_tube_or_FRP(right_spec_value.startsWith("48") ? "1" : "2"); + String[] split = right_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(right_spec_value); + plan.setPaper_tube_model(right_spec); + plan.setPaper_tube_description(right_spec); + } else { + plan.setFRP_material(right_spec_value); + plan.setFRP_model(right_spec); + plan.setFRP_description(right_spec); + } + plan.setUp_or_down("1"); + plan.setLeft_or_right("2"); + if (right_spec.contains("3英寸") || right_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + } + if (i == 0 && ObjectUtil.isNotEmpty(left_spec) && "2".equals(up_or_down)) { + // 下左 + plan.setPaper_tube_or_FRP(left_spec_value.startsWith("48") ? "1" : "2"); + String[] split = left_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(left_spec_value); + plan.setPaper_tube_model(left_spec); + plan.setPaper_tube_description(left_spec); + } else { + plan.setFRP_material(left_spec_value); + plan.setFRP_model(left_spec); + plan.setFRP_description(left_spec); + } + plan.setUp_or_down("2"); + plan.setLeft_or_right("1"); + if (left_spec.contains("3英寸") || left_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + } + if (i == 1 && ObjectUtil.isNotEmpty(right_spec) && "2".equals(up_or_down)) { + // 下右 + plan.setPaper_tube_or_FRP(right_spec_value.startsWith("48") ? "1" : "2"); + String[] split = right_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(right_spec_value); + plan.setPaper_tube_model(right_spec); + plan.setPaper_tube_description(right_spec); + } else { + plan.setFRP_material(right_spec_value); + plan.setFRP_model(right_spec); + plan.setFRP_description(right_spec); + } + plan.setUp_or_down("2"); + plan.setLeft_or_right("2"); + if (right_spec.contains("3英寸") || right_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + } + plans.add(plan); + } + // 校验设备对应的分切暂存架子是不是可用切无数据无任务。 + BstIvtCutpointivt cutCacheShelf = bcutpointivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtCutpointivt::getProduct_area, cutDevice.getProduct_area()) + .eq(BstIvtCutpointivt::getPlan, cutDevice.getPoint_code()) + .eq(BstIvtCutpointivt::getIs_used, SlitterConstant.SLITTER_YES)); + if (ObjectUtil.isEmpty(cutCacheShelf)) { + throw new BadRequestException("分切机{" + cutDevice.getPoint_code() + "}对应的分切架子不存在!"); + } + if (!SlitterConstant.SLITTER_YES.equals(cutCacheShelf.getPoint_status())) { + throw new BadRequestException("架子[" + cutCacheShelf.getPoint_code() + "]上有货!"); + } + // 判断任务 + List taskList = taskService.checkHaveTask(cutCacheShelf.getPoint_code()); + if (taskList.size() > 0) { + throw new BadRequestException("分切架子存在任务!"); + } + // 创建任务 + JSONObject taskParam = new JSONObject(); + List containers = plans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); + taskParam.put("containers", containers); + taskParam.put("point_code1", "1".equals(up_or_down) + ? cutDevice.getUp_point_code() : cutDevice.getDown_point_code()); + taskParam.put("point_code2", "1".equals(up_or_down) + ? cutCacheShelf.getTruss_point_code1() : cutCacheShelf.getTruss_point_code2()); + taskParam.put("truss_type", "1"); + taskParam.put("empty_site", "0"); + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料桁架任务")); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + // 分切计划修改状态 05 -> 06 + plans.forEach(plan -> { + plan.setStatus("06"); + TaskUtils.updateOptMessageBySlitterPlan(plan); + }); + slittingproductionplanService.saveBatch(plans); + // 创建任务 + slitterDownTrussTask.createTask(taskParam); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "饵料下卷成功!"); + return res; + } } 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 502dd496f..72cd2ff49 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 @@ -4,20 +4,26 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.modules.common.exception.BadRequestException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Author: lyd * @Description: 分切部分的任务工具类 * @Date: 2024/4/12 */ +@Slf4j public class SlitterTaskUtil { /** B1区域 */ @@ -51,7 +57,7 @@ public class SlitterTaskUtil { * 获取组成信息 * @param tubeDescription 纸管信息 * @param paperOrFrp 材质(1纸管,2FRP管) - * @return 长*外径*内径*壁厚*重量*材质(1纸管,2FRP管) + * @return 长*外径*内径*壁厚*重量*薄壁厚*阶梯长度*材质(1纸管,2FRP管) */ public static String getComposePaperTubeInformation(String tubeDescription, String paperOrFrp) { if (ObjectUtil.isEmpty(tubeDescription)) { @@ -63,12 +69,13 @@ public class SlitterTaskUtil { /** * 获取组成信息 * @param tubeDescription 纸管信息 - * @return 长*外径*内径*壁厚*重量 + * @return 长*外径*内径*壁厚*重量*薄壁厚*阶梯长度 */ public static String getComposePaperTubeInformation(String tubeDescription) { if (ObjectUtil.isEmpty(tubeDescription)) { return ""; } + boolean flag = tubeDescription.contains("阶梯"); tubeDescription = tubeDescription.replaceAll("\\|[\\u4e00-\\u9fa5]+$", ""); // 解析描述数组 String[] tubeArray = tubeDescription.split("\\|"); @@ -77,10 +84,27 @@ public class SlitterTaskUtil { // 假设壁厚默认值为15,如果描述数组长度为4,则重新赋值 String th = tubeArray.length == 5 ? tubeArray[3] : "15"; + String th2 = "0"; + String jtLen = "0"; if (tubeArray[3].contains("-")) { - th = tubeArray[3].split("-")[0]; + th = tubeArray[3].split("-")[1]; + th2 = tubeArray[3].split("-")[0]; + } + if (flag) { + switch (tubeArray[tubeArray.length - 1]) { + case "1400": + case "1700": + jtLen = "75"; + break; + case "1500": + case "1600": + jtLen = "150"; + break; + default: + jtLen = "0"; + break; + } } - // 计算外径和内径 double externalDiameter = dia * 25.4 + Double.parseDouble(th) * 2; double internalDiameter = dia * 25.4; @@ -101,15 +125,26 @@ public class SlitterTaskUtil { sb.append("*"); // 重量 sb.append(0); + sb.append("*"); + // 薄壁厚 + sb.append(th2); + sb.append("*"); + // 阶梯长度 + sb.append(jtLen); return sb.toString(); } + public static void main(String[] args) { + System.out.println(getComposePaperTubeInformation("玻璃纤维及其制品|FRP管|6英寸|15|1100", "1")); + } + /** * 设置所需的套管纸管信息 * @param param 任务参数 * @param needPlans 所需的分切计划 */ public static void putNeedPaperSpec(JSONObject param, List needPlans) { + log.info("正在设置所需的套管纸管信息..."); // 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 for (PdmBiSlittingproductionplan plan : needPlans) { if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { @@ -239,6 +274,9 @@ public class SlitterTaskUtil { String[] material_codes = new String[paperList.size()]; String[] material_specs = new String[paperList.size()]; int[] qtys = new int[paperList.size()]; + String[] material_codes1 = {null,null,null,null,null}; + String[] material_specs1 = {null,null,null,null,null}; + int[] qtys1 = {0,0,0,0,0}; for (int i = 0; i < paperList.size(); i++) { MdPbPapervehicle vehicle = paperList.get(i); String materialCode = vehicle.getMaterial_code(); @@ -248,18 +286,32 @@ public class SlitterTaskUtil { qtys[index] += qty; } else { material_codes[i] = vehicle.getMaterial_code(); - String spec = getComposePaperTubeInformation(vehicle.getMaterial_name()); + String spec = getComposePaperTubeInformation(vehicle.getMaterial_name(), vehicle.getMaterial_code().startsWith("4") ? "1" : "2"); material_specs[i] = spec; qtys[i] = qty; } + //新规格数据处理 + int row_num = Integer.parseInt(vehicle.getRow_num()); + String spec = getComposePaperTubeInformation(vehicle.getMaterial_name(), vehicle.getMaterial_code().startsWith("4") ? "1" : "2"); + material_codes1[row_num-1] = materialCode; + material_specs1[row_num-1] = spec; + qtys1[row_num-1] = qty; } // 转成String String[] qtysStr = Arrays.stream(qtys) .mapToObj(String::valueOf) .toArray(String[]::new); + // 转成String + String[] qtysStr1 = Arrays.stream(qtys1) + .mapToObj(String::valueOf) + .toArray(String[]::new); param.put("to_material", String.join(",", material_codes)); param.put("to_spec", String.join(",", material_specs)); param.put("to_qty", String.join(",", qtysStr)); + + param.put("to_material1", String.join(",", material_codes1)); + param.put("to_spec1", String.join(",", material_specs1)); + param.put("to_qty1", String.join(",", qtysStr1)); param.put("device_code", material_specs); } @@ -308,4 +360,173 @@ public class SlitterTaskUtil { String[] split = paperStr.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); return split[split.length - 1]; } + public static String getPaperSize(PdmBiSlittingproductionplan plan) { +// String s = "玻璃纤维及其制品|FRP管|6英寸|15|1700"; + String paperStr = ""; + if (plan.getPaper_tube_or_FRP().equals(SlitterConstant.SLITTER_TYPE_PAPER)) { + paperStr = plan.getPaper_tube_model(); + } else { + paperStr = plan.getFRP_model(); + } + String[] split = paperStr.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + return split[2].replaceAll("英寸",""); + } + + public static Integer getPaperLengthInt(PdmBiSlittingproductionplan plan) { + return Integer.valueOf(getPaperLength(plan)); + } + + /** + * 设置重量 + * @param plans 分切计划 + * @return 0,0,0,0 + */ + public static void setPaperWeightStr(String weightStr, List plans) { + // 1. 校验输入格式 + String[] parts = weightStr.split(","); + if (parts.length != 4) { + // 没有数据则不修改 + return; + } + + // 2. 遍历四个位置 + for (int index = 0; index < 4; index++) { + // 解析重量值(自动四舍五入到两位小数) + String strValue = parts[index]; + BigDecimal value; + try { + value = new BigDecimal(strValue).setScale(2, RoundingMode.HALF_UP); + } catch (NumberFormatException e) { + continue; // 跳过无效数值 + } + + // 3. 根据索引确定位置规则 + String expectedUp, expectedLeft; + switch (index) { + case 0: // 上左 + expectedUp = "1"; + expectedLeft = "1"; + break; + case 1: // 上右 + expectedUp = "1"; + expectedLeft = "2"; + break; + case 2: // 下左 + expectedUp = "2"; + expectedLeft = "1"; + break; + case 3: // 下右 + expectedUp = "2"; + expectedLeft = "2"; + break; + default: + throw new IllegalStateException("非法索引: " + index); + } + + // 4. 在集合中查找匹配项并更新 + for (PdmBiSlittingproductionplan plan : plans) { + if (expectedUp.equals(plan.getUp_or_down()) && + expectedLeft.equals(plan.getLeft_or_right())) { + plan.setPaper_weight(value.toString()); + break; // 找到后跳出循环 + } + } + } + } + + /** + * 获取重量 + * @param plans 分切计划 + * @return 0,0,0,0 + */ + public static String getPaperWeightStr(List plans) { + String[] weights = new String[4]; + Arrays.fill(weights, "0"); + + for (PdmBiSlittingproductionplan plan : plans) { + // 1. 获取重量并四舍五入 + String weightStr = plan.getPaper_weight(); + BigDecimal weight; + try { + weight = new BigDecimal(weightStr); + } catch (Exception e) { + continue; + } + BigDecimal rounded = weight.setScale(2, RoundingMode.HALF_UP); + + // 2. 根据位置确定数组索引 + String upDown = plan.getUp_or_down(); + String leftRight = plan.getLeft_or_right(); + int index = -1; + + if ("1".equals(upDown)) { + index = ("1".equals(leftRight)) ? 0 : 1; + } else { + index = ("1".equals(leftRight)) ? 2 : 3; + } + + // 3. 更新对应位置的重量(格式化为两位小数) + if (index >= 0 && index < 4) { + weights[index] = rounded.toString(); + } + } + + // 4. 拼接结果字符串 + return String.join(",", weights); + } + + /** + * 固定输入与输出气胀轴库点位 + * @param input + * @return + */ + public static String getQzzkMappedValue(String input) { + switch (input) { + case "B_QZZK01": return "B_QZZK02"; + case "B_QZZK02": return "B_QZZK01"; + case "B_QZZK03": return "B_QZZK04"; + case "B_QZZK04": return "B_QZZK03"; + default: throw new BadRequestException("站点输入错误: " + input); + } + } + + /** + * 下卷前置校验,判断卷的上下轴属性与实际是否一致 - 校验子卷属性 + * @param jsonArray 子卷数组 + * @param plans 计划 + */ + public static void validateConsistency(JSONArray jsonArray, List plans) { + if (plans.size() == 0) { + throw new BadRequestException("计划未找到,请确保MES已推送。"); + } + // 1. 将 List 转为 Map + Map planMap = plans.stream() + .collect(Collectors.toMap( + p -> p.getContainer_name(), + p -> p.getUp_or_down(), + // 如果有重复 key,保留第一个(按需调整) + (existing, replacement) -> existing + )); + + // 2. 遍历 JSONArray + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject item = jsonArray.getJSONObject(i); + String containerName = item.getString("container_name"); + String site = item.getString("site"); + + // 3. 检查 Plan 中是否存在对应的 container_name + if (!planMap.containsKey(containerName)) { + throw new BadRequestException("校验失败: container_name " + containerName + " 在计划列表中不存在"); + } + + // 4. 比较 site 和 up_or_down 是否一致 + String expectedUpDown = planMap.get(containerName); + if (!expectedUpDown.equals(site)) { + throw new BadRequestException("校验失败: 子卷号 " + containerName + + " 的上下轴位置" + + "与MES分切计划中的上下轴位置" + expectedUpDown + "不一致!"); + } + } + log.info("分切下卷计划位置校验通过!"); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbBoxtypeController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbBoxtypeController.java index 69d5b43fc..6e2c15051 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbBoxtypeController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbBoxtypeController.java @@ -67,4 +67,18 @@ public class MdpbBoxtypeController { return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/confirmBox") + @Log("保存bom") + public ResponseEntity confirmBox(@RequestBody JSONObject whereJson) { + iMdpbBoxtypeService.confirmBox(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @GetMapping("/getBoxTypes") + @Log("查询木箱类型") + public ResponseEntity query(@RequestParam Map whereJson) { + return new ResponseEntity<>(iMdpbBoxtypeService.list(), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IMdpbBoxtypeService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IMdpbBoxtypeService.java index c211b48ee..f3131c7c7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IMdpbBoxtypeService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IMdpbBoxtypeService.java @@ -50,4 +50,10 @@ public interface IMdpbBoxtypeService extends IService { * @param whereJson: {需要修改的参数} */ void confirmUpdate(JSONObject whereJson); + + /** + * 一键修改 + * @param whereJson: {需要修改的参数} + */ + void confirmBox(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java index 0a78085ef..55e292315 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java @@ -81,9 +81,14 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl().eq(BstIvtBoxinfo::getBox_no, whereJson.getString("ContainerName"))); if (ObjectUtil.isEmpty(boxDao)) { + String height = whereJson.getString("Height"); + int i = height.indexOf("|"); + if (i>1){ + height=height.substring(0,i); + } boxDao = BstIvtBoxinfo.builder() .box_id(IdUtil.getStringId()) - .box_high(whereJson.getString("Height")) + .box_high(height) .box_length(whereJson.getString("Length")) .box_width(whereJson.getString("Width")) .material_code(whereJson.getString("ProductName")) @@ -96,7 +101,6 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl1){ + height=height.substring(0,i); + } + boxDao.setBox_high(height); boxDao.setBox_length(whereJson.getString("Length")); boxDao.setBox_width(whereJson.getString("Width")); boxDao.setVehicle_type(vehicle_type); @@ -128,7 +137,6 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl implements IMdpbBoxtypeService { + @Autowired + private IPdmBiOrderbominfoService pdmBiOrderbominfoService; @Override public IPage queryAll(Map whereJson, PageQuery page) { // 查询条件 @@ -81,4 +86,23 @@ public class MdpbBoxtypeServiceImpl extends ServiceImpl().lambda() + .eq(PdmBiOrderbominfo::getMfgOrder,whereJson.getString("mfgOrder")) + .set(PdmBiOrderbominfo::getProductName, whereJson.getString("productName")) + .set(PdmBiOrderbominfo::getDescription, boxtype.getBox_name()) + ); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java index f8f2de935..6de79e0a5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java @@ -129,6 +129,11 @@ public enum IOSEnum { "子卷下线行架任务", "16","退货入库行架任务", "14","RGV输送任务", "15", "木箱堆叠行架任务", "17" )), + + // acs反馈异常出库 + ACS_EXCEPTIONAL_TYPE(MapOf.of("入库满入", "1","浅货位有货(入库)", "4", + "出库空出", "2","浅货位有货(出库)", "3" + )), ; private Map code; 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 84ead0f16..3dfa90d05 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 @@ -138,4 +138,11 @@ public interface IStIvtIostorinvOutService extends IService { * @param whereJson: 任务对象 */ void finishTask(JSONObject whereJson); + + /** + * 出库浅货位有货阻挡异常处理 + * @param whereJson / + * @return String 任务标识 + */ + String taskExceptionalOut(JSONObject whereJson); } 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 62b6530d9..8dd3dc5c5 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 @@ -1089,6 +1089,45 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl 0) { throw new BadRequestException("当前木箱入库任务已存在" + boxNo); } + SchBaseTask one = ischBaseTaskService.getOne(new QueryWrapper() + .eq("task_type", "010702") + .eq("is_delete", "0") + .orderByDesc("task_id") + .last("limit 1")); + if (one!=null){ + String vehicleCode2 = one.getVehicle_code2(); + if (whereJson.getString("vehicle_code").equals(vehicleCode2)){ + throw new BadRequestException("当前托盘"+whereJson.getString("vehicle_code")+"已经存在木箱入库任务"+one.getTask_code()); + }; + } //查询仓库是否存在相同木箱 JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + boxNo + "'").getResultJSONArray(0); if (stIvtStructattr != null && stIvtStructattr.size() > 0) { @@ -117,18 +131,6 @@ public class InBoxManageServiceImpl implements InBoxManageService { new QueryWrapper().lambda() .eq(BstIvtBoxinfo::getBox_no, boxNo) ); - /* - * 找一个木箱区的一个仓位,生成任务并下发 - */ - /* // 判断起点点位是否存在 - JSONObject jsonPoint = schBasePointService.query("point_code = '" + whereJson.getString("device_code") + "' AND is_delete = '" + - IOSEnum.IS_NOTANDYES.code("否") + "' AND is_used = '" + - IOSEnum.IS_NOTANDYES.code("是") + "'") - .uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint)) { - throw new BadRequestException("起始点位不存在或未启用!"); - }*/ - // 找一个木箱区空位 //根据木箱高度,判断入库仓位的高度 String height = ""; String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); @@ -336,6 +338,58 @@ public class InBoxManageServiceImpl implements InBoxManageService { taskBean.immediateNotifyAcs(null); } + + @Override + @Transactional + public void boxBinVehicleByTHRK(JSONObject whereJson) { + //查询仓库是否存在相同木箱 + final String boxSn = whereJson.getString("box_no"); + JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + boxSn + "'").getResultJSONArray(0); + if (stIvtStructattr != null && stIvtStructattr.size() > 0) { + throw new BadRequestException("当前木箱已经存在库中" + stIvtStructattr.getJSONObject(0).getString("struct_code")); + } + JSONObject jo = new JSONObject(); + jo.put("box_no", boxSn); +// lmsToMesService.momGetPackingInfo(jo); + // 查询木箱信息 + BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( + new QueryWrapper().lambda() + .eq(BstIvtBoxinfo::getBox_no, whereJson.getString("box_no")) + ); + // 下发桁架任务 + JSONObject taskParam = new JSONObject(); + taskParam.put("task_type", "010713"); + taskParam.put("start_device_code", whereJson.getString("point_code")); + taskParam.put("next_device_code", "CK2005"); + taskParam.put("vehicle_code", whereJson.getString("box_no")); + //taskParam.put("vehicle_code2", whereJson.getString("box_no")); + JSONObject param = new JSONObject(); + param.put("layer", whereJson.getString("layer")); + param.put("length", boxDao.getBox_length()); + param.put("width", boxDao.getBox_width()); + param.put("height", boxDao.getBox_high()); + param.put("containerType", boxDao.getVehicle_type()); + + param.put("barcode", whereJson.getString("box_no") + "-9" ); + //根据木箱高度,判断入库仓位的高度 + String height = ""; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + String box_high = boxDao.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"; + } + param.put("heightLevel", height); + taskParam.put("request_param", param.toString()); + TwoInBoxTrussTask taskBean = new TwoInBoxTrussTask(); + taskBean.createTask(taskParam); + taskBean.immediateNotifyAcs(null); + } + @Override @Transactional(rollbackFor = Exception.class) public void returnIn(JSONObject whereJson) { @@ -360,6 +414,23 @@ public class InBoxManageServiceImpl implements InBoxManageService { } } + // 判断是否是同一个木箱号在一小时内生成过任务 + // 获取当前时间前一个小时时间 + DateTime nowDate = DateUtil.parse(DateUtil.now()); + String queryDate = DateUtil.offsetHour(nowDate, -1).toString(); + + int hasCount = ischBaseTaskService.count( + new QueryWrapper().lambda() + .eq(SchBaseTask::getVehicle_code, whereJson.getString("box_no")) + .eq(SchBaseTask::getTask_type, "010713") + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + .ge(SchBaseTask::getCreate_time, queryDate) + .le(SchBaseTask::getCreate_time, DateUtil.now()) + ); + if (hasCount>0) { + throw new BadRequestException("当前木箱【"+whereJson.getString("box_no")+"】在1个小时之内生成过行架任务!"); + } + // 根据木箱号查询是否有托盘绑定关系,如果有则解绑 JSONObject jsonExt = WQLObject.getWQLObject("md_pb_storagevehicleext") .query("pcsn = '" + whereJson.getString("box_no") + "'") @@ -649,6 +720,11 @@ public class InBoxManageServiceImpl implements InBoxManageService { jsonParam.put("row_num", row_num); JSONObject jsonAttr = queryStruct(jsonParam); + // 如果是移库空并且仓位为空则报错 + if (ObjectUtil.isNotEmpty(block_num) && ObjectUtil.isEmpty(jsonAttr)) { + throw new BadRequestException("转库任务巷道"+block_num+"仓位不足!"); + } + // 为空则新找巷道 if (ObjectUtil.isEmpty(jsonAttr)) { @@ -668,6 +744,8 @@ public class InBoxManageServiceImpl implements InBoxManageService { json.put("box_length", jsonParam.getString("box_length")); json.put("box_width", jsonParam.getString("box_width")); json.put("box_high", jsonParam.getString("box_high")); + json.put("vehicle_type", jsonParam.getString("vehicle_type")); + json.put("height", jsonParam.getString("height")); String row_num_2 = getMinRow(json); json.put("row_num", row_num_2); @@ -686,6 +764,51 @@ public class InBoxManageServiceImpl implements InBoxManageService { return jsonAttr; } + /** + * 同巷道移库查看库位 + * @param jsonParam + * @return + */ + public JSONObject getMoveStruct(JSONObject jsonParam) { + // 仓位表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + /* + * 判断是否有仓位 + * 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具 + */ + String block_num = jsonParam.getString("move_block_num"); + if (StringUtils.isEmpty(block_num)){ + throw new BadRequestException("同巷道分配库位巷道参数不能为空"); + } + JSONArray structArray = attrTab.query("IFNULL(storagevehicle_code,'') = '' " + + "AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " + + "AND storagevehicle_type = '" + jsonParam.getString("vehicle_type") + "'" + + "AND height = '" + jsonParam.getString("height") + "'" + + "AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonParam.getString("stor_id") + "' " + + "AND sect_id = '" + jsonParam.getString("sect_id") + "' AND block_num = '" + block_num + "'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(structArray)) { + notInRowList.clear(); + notInBlockList.clear(); + throw new BadRequestException("仓位不足!"); + } + // 确定排:查看每排的木箱数量,找到数量最小的那排 + jsonParam.put("block_num", block_num); + String row_num = getMinRow(jsonParam); + + // 确定仓位: 找到仓位 + jsonParam.put("row_num", row_num); + JSONObject jsonAttr = queryStruct(jsonParam); + + // 为空则新找巷道 + if (ObjectUtil.isEmpty(jsonAttr)) { + throw new BadRequestException("当前巷道"+block_num+"没有可用库位"); + } + + notInRowList.clear(); + notInBlockList.clear(); + return jsonAttr; + } + /** * 确定巷道 * @@ -906,6 +1029,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { List lowAttr = structAllList.stream() .filter(row -> row.getString("col_num").equals(json.getString("col_num")) && row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("row_num").equals(json.getString("row_num")) && row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) .collect(Collectors.toList()); @@ -934,6 +1058,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { List darkAttr = structAllList.stream() .filter(row -> row.getString("col_num").equals(json.getString("col_num")) && row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("row_num").equals(json.getString("row_num")) && row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) .collect(Collectors.toList()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java index 5a1fd12bf..17ad998f7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java @@ -26,11 +26,16 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; 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.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; /** @@ -60,6 +65,13 @@ public class InBussManageServiceImpl implements InBussManageService { @Autowired private IschBaseTaskService ischBaseTaskService; + @Autowired + private LmsToMesServiceImpl lmsToMesServiceImpl; + + @Resource + @Qualifier("threadPoolExecutor") + private ThreadPoolExecutor pool; + /** * 不需要查询的排集合 @@ -136,7 +148,6 @@ public class InBussManageServiceImpl implements InBussManageService { "AND height IN " + jsonObject.getString("height") + "AND sect_id = '" + jsonObject.getString("sect_id") + "' AND block_num = '"+block_num+"'") .getResultJSONArray(0); - } @@ -266,6 +277,7 @@ public class InBussManageServiceImpl implements InBussManageService { mst.put("remark", ""); // 明细 ArrayList tableData = new ArrayList<>(); + List subs = new ArrayList<>(); for (int i = 0; i < subList.size(); i++) { JSONObject json = subList.get(i); LinkedHashMap jsonDtl = new LinkedHashMap<>(); @@ -285,10 +297,21 @@ public class InBussManageServiceImpl implements InBussManageService { jsonDtl.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品")); jsonDtl.put("is_active", IOSEnum.IS_SEND.code("是")); tableData.add(jsonDtl); + subs.add(json.getString("container_name")); + } + String package_box_sn = (String) tableData.get(0).get("package_box_sn"); + + try { + JSONObject param_jo = new JSONObject(); + param_jo.put("box_no", package_box_sn); + param_jo.put("box_weight", subList.get(0).getString("box_weight")); + param_jo.put("container_name", subs); + lmsToMesServiceImpl.BoxDataCollectionSubmit2(param_jo); + } catch (Exception e) { + log.error("验箱回传MES异常,BoxDataCollectionSubmit2给MES传输子卷包装关系异常,木箱号为:" + package_box_sn + ",异常信息:" + e); } mst.put("tableData", tableData); // 判断是否已经生成过入库单 - String package_box_sn = (String) tableData.get(0).get("package_box_sn"); JSONObject param = new JSONObject(); param.put("package_box_sn",package_box_sn); JSONObject iosMst = stIvtIostorinvMapper.queryBoxMst(param); @@ -379,6 +402,9 @@ public class InBussManageServiceImpl implements InBussManageService { .eq(StIvtIostorinvdtl::getIostorinvdtl_id, disList.get(0).get("iostorinvdtl_id")) ).get(0); + // 获取当前巷道 + JSONObject jsonAttr = attrTab.query("struct_code = '" + taskDao.getPoint_code2() + "'").uniqueResult(0); + JSONObject jsonDiv = new JSONObject(); jsonDiv.put("dtl_row", JSONObject.parseObject(JSON.toJSONString(dtlDao))); jsonDiv.put("tableMater", disList); @@ -386,6 +412,8 @@ public class InBussManageServiceImpl implements InBussManageService { jsonDiv.put("is_send", IOSEnum.IS_SEND.code("否")); jsonDiv.put("sect_id", IOSEnum.SECT_ID.code("二期主存区")); jsonDiv.put("stor_id", IOSEnum.STOR_ID.code("二期")); + jsonDiv.put("move_block_num", jsonAttr.getString("block_num")); + jsonDiv.put("in_buss", IOSEnum.IS_NOTANDYES.code("是")); iStIvtIostorinvService.divStruct(jsonDiv); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InVehicleManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InVehicleManageServiceImpl.java index cbced69e0..beb0b80fd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InVehicleManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InVehicleManageServiceImpl.java @@ -70,7 +70,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { if (ObjectUtil.isEmpty(jsonPoint)) { throw new BadRequestException("起始点位不存在或未启用!"); } - int count = ischBaseTaskService.count(new QueryWrapper() + /* int count = ischBaseTaskService.count(new QueryWrapper() .eq("point_code1", whereJson.getString("device_code")) .eq("vehicle_code", whereJson.getString("vehicle_code")) .eq("task_type", "010705") @@ -78,7 +78,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService { .lt("task_status", TaskStatusEnum.EXECUTING.getCode())); if (count>0){ return; - } + }*/ // 找一个托盘区的空仓位 JSONObject jsonParam = new JSONObject(); jsonParam.put("stor_id", IOSEnum.STOR_ID.code("二期")); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java index 221f625ec..78a4ed71b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java @@ -28,17 +28,17 @@ import org.nl.common.utils.IdUtil; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.pda.st.service.impl.PrintServiceImpl; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -88,6 +88,11 @@ public class LashManageServiceImpl implements LashManageService { */ private final IschBaseTaskService ischBaseTaskService; + /** + * 任务服务 + */ + private final ISysParamService iSysParamService; + @Override @Transactional public void createLashTask(JSONObject whereJson) { @@ -218,6 +223,8 @@ public class LashManageServiceImpl implements LashManageService { end_point = jsonPoint.getString("point_code"); schBasePointMapper.updateById(JSON.parseObject(jsonPoint.toString(), SchBasePoint.class)); + boolean remove_flag = iBstIvtBoxlashboundService.remove(new QueryWrapper().lambda() + .eq(BstIvtBoxlashbound::getBox_no, boxDao.getBox_no())); /* * 插入绑定木箱表 */ @@ -308,88 +315,141 @@ public class LashManageServiceImpl implements LashManageService { jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code")); jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code")); jsonTaskParam.put("request_param", whereJson); - TwoOutHeapTask bean = SpringContextHolder.getBean(TwoOutHeapTask.class); bean.createTask(jsonTaskParam); - bean.sendTaskAcs(whereJson.getString("task_group_id")); } @Override public JSONObject applyTab(JSONObject whereJson) { // 载具扩展属性表 - WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); - // 任务表 - WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + WQLObject md_pb_storagevehicleext = WQLObject.getWQLObject("md_pb_storagevehicleext"); // TODO 贴标流程 JSONObject result = new JSONObject(); - + //设备号 + String device_code = whereJson.getString("device_code"); + //载具号 String vehicle_code = whereJson.getString("vehicle_code"); - //查询托盘对应的载具号 - JSONObject vehicle_ext = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0); + //查询托盘详细信息 + JSONObject vehicle_ext = md_pb_storagevehicleext.query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0); if (ObjectUtil.isEmpty(vehicle_ext)) { throw new BadRequestException("未查询到托盘对应的扩展属性"); } + //判断木箱信息是否为空 String box_no = vehicle_ext.getString("pcsn"); if (StrUtil.isEmpty(box_no)) { - throw new BadRequestException("未查询到托盘绑定了相关木箱!"); + throw new BadRequestException("未查询到托盘:"+vehicle_code+"绑定了相关木箱!"); } // 查询木箱信息 - BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne( - new QueryWrapper().lambda() - .eq(BstIvtBoxinfo::getBox_no, vehicle_ext.getString("pcsn")) + BstIvtBoxinfo boxinfo = iBstIvtBoxinfoService.getOne( + new QueryWrapper().lambda().eq(BstIvtBoxinfo::getBox_no, box_no) ); - - // 根据木箱料号查询木箱类型信息 - MdpbBoxtype boxTypeDao = iMdpbBoxtypeService.getById(boxDao.getMaterial_code()); - if (ObjectUtil.isEmpty(boxTypeDao)) { - throw new BadRequestException("木箱类型信息不存在!木箱料号为:" + boxDao.getMaterial_code()); + //判断木箱类型信息是否为空 + if (StrUtil.isEmpty(boxinfo.getMaterial_code())) { + throw new BadRequestException("木箱料号未设置木箱类型信息:bst_ivt_boxinfo!"); + } + // 根据木箱料号查询木箱类型信息 + MdpbBoxtype boxType = iMdpbBoxtypeService.getById(boxinfo.getMaterial_code()); + if (ObjectUtil.isEmpty(boxType)) { + throw new BadRequestException("木箱类型信息不存在!木箱料号为:" + boxinfo.getMaterial_code()); } - // 返回参数 - result.put("length", boxDao.getBox_length()); - result.put("width", boxDao.getBox_width()); - result.put("height", boxDao.getBox_high()); - result.put("case", boxDao.getMaterial_code()); + result.put("length", boxinfo.getBox_length()); + result.put("width", boxinfo.getBox_width()); + result.put("height", boxinfo.getBox_high()); + result.put("case", boxinfo.getMaterial_code()); + + // 捆扎模板 + if (ObjectUtil.isEmpty(boxType.getLash_num())) { + throw new BadRequestException("捆扎模版不能为空!"); + } + result.put("bindingTemplate", boxType.getLash_num()); + // 第一次捆扎次数 + if (ObjectUtil.isEmpty(boxType.getLash_num_one())) { + throw new BadRequestException("第一次捆扎数量不能为空!"); + } + result.put("bundleTimes", boxType.getLash_num_one()); + // 木箱结构 + if (ObjectUtil.isEmpty(boxType.getBox_structure())) { + throw new BadRequestException("木箱结构不能为空!"); + } + result.put("box_structure", boxType.getBox_structure()); // 是否捆扎: 如果是返检或者反切的则不需要捆扎(找最近的木箱出库单据) - if (ObjectUtil.isEmpty(boxTypeDao.getNeed_lash_one())) { + if (ObjectUtil.isEmpty(boxType.getNeed_lash_one())) { throw new BadRequestException("第一次是否捆扎不能为空!"); } - String isBinding = boxTypeDao.getNeed_lash_one(); - - JSONObject jsonMst = stIvtIostorinvOutMapper.queryBoxOutInfo(boxDao.getBox_no()); + String isBinding = boxType.getNeed_lash_one(); + JSONObject jsonMst = stIvtIostorinvOutMapper.queryBoxOutInfo(boxinfo.getBox_no()); if (ObjectUtil.isNotEmpty(jsonMst)) { if (jsonMst.getString("bill_type").equals(IOSEnum.OUT_TYPE.code("改切出库")) || jsonMst.getString("bill_type").equals(IOSEnum.OUT_TYPE.code("返检出库"))) { isBinding = IOSEnum.IS_NOTANDYES.code("否"); } } - + // 是否捆扎 result.put("isBinding", isBinding); + + + // TODO 是否贴标 result.put("isLabeling", IOSEnum.IS_SEND.code("否")); + // TODO 贴标数量 + result.put("printQty", "2"); + // TODO 贴标模版 - result.put("labelingTemplate", boxDao.getLash_num()); - // 捆扎模板 - if (ObjectUtil.isEmpty(boxTypeDao.getLash_num())) { - throw new BadRequestException("捆扎模版不能为空!"); - } - result.put("bindingTemplate", boxTypeDao.getLash_num()); + result.put("labelingTemplate", "201"); // TODO 打印机 result.put("printDevice", "1"); - // TODO 贴标数量 - result.put("printQty", "1"); - // 第一次捆扎次数 - if (ObjectUtil.isEmpty(boxTypeDao.getLash_num_one())) { - throw new BadRequestException("第一次捆扎数量不能为空!"); + //判断系统参数是否贴标 + String is_labeling = iSysParamService.findByCode("is_labeling2").getValue(); + if (is_labeling.equals("1")) { + result.put("isLabeling", IOSEnum.IS_SEND.code("是")); + + //查询贴标次数参数 + String labelingTemplateNum = iSysParamService.findByCode("labelingTemplateNum").getValue(); + result.put("printQty", labelingTemplateNum); + + //查询贴标模板参数 + String labelingTemplate = iSysParamService.findByCode("labelingTemplate").getValue(); + result.put("labelingTemplate", labelingTemplate); + Param label_num = null; + //CK2019,CK2015 + if(device_code.equals("CK2019") || device_code.equals("CK2015")){ + label_num = iSysParamService.findMinByCode(device_code); + String print_code = label_num.getCode(); + JSONObject print_info = WQLObject.getWQLObject("pdm_bi_printinfo").query("print_name = '" + print_code + "'").uniqueResult(0); + JSONObject print_jo = new JSONObject(); + print_jo.put("box_no", box_no); + print_jo.put("print_type", print_info.getString("print_id")); + int times = Integer.parseInt(labelingTemplateNum); + for(int i=0;i= Integer.valueOf(now_num)) { + result.put("message", "标签纸数量过低,请更换!"); + } + }else{ + throw new BadRequestException("贴标请求设备点位异常:"+device_code); + } } - result.put("bundleTimes", boxTypeDao.getLash_num_one()); - // 木箱结构 - if (ObjectUtil.isEmpty(boxTypeDao.getBox_structure())) { - throw new BadRequestException("木箱结构不能为空!"); - } - result.put("box_structure", boxTypeDao.getBox_structure()); return result; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java index ecefd6d26..3409bdf8d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java @@ -1,13 +1,17 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; +import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; 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.TwoMoveBoxTask; +import org.nl.b_lms.sch.tasks.TwoOutBoxExcepTask; import org.nl.b_lms.sch.tasks.TwoOutBoxTask; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; @@ -20,9 +24,11 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.pda.mps.eum.RegionTypeEnum; +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 org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; @@ -41,6 +47,9 @@ import java.util.stream.Collectors; @Service public class OutBoxManageServiceImpl implements OutBoxManageService { + @Autowired + private TwoOutBoxTask twoOutBoxTask; + /** * 出库不需要查询的排集合 */ @@ -55,7 +64,7 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { * 木箱信息服务 */ @Autowired - private IBstIvtBoxinfoService iBstIvtBoxinfoService; + private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService; /** * 任务服务 @@ -118,9 +127,8 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { JSONObject request_param = new JSONObject(); request_param.put("containerType", jsonAttr.getString("storagevehicle_type")); jsonTaskParam.put("request_param", request_param.toString()); - TwoOutBoxTask taskBean = new TwoOutBoxTask(); - taskBean.createTask(jsonTaskParam); - taskBean.immediateNotifyAcs(null); + twoOutBoxTask.createTask(jsonTaskParam); + twoOutBoxTask.immediateNotifyAcs(null); // 锁定起点 jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("验箱出库锁")); attrTab.update(jsonAttr); @@ -160,111 +168,82 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { } } - // 确定巷道:找相同规格木箱的最多的巷道 - if (ObjectUtil.isEmpty(block_num)) { - block_num = getMaxBlock(whereJson); - } - // 确定排:找某一巷道规格木箱的最多排 - whereJson.put("block_num", block_num); - String row_num = getMaxRow(whereJson); - // 确定仓位 - whereJson.put("row_num", row_num); - whereJson.put("notMove",true); - JSONObject jsonAttr = getBox(whereJson); - // 为空则新找巷道 - if (ObjectUtil.isEmpty(jsonAttr)) { - whereJson.put("flag", "1"); - notOutBlockList.add(whereJson.getString("block_num")); - String join = "('" + String.join("','", notOutBlockList) + "')"; - whereJson.put("not_block_id", join); - List blockList = WQL.getWO("BST_OUTBOX").addParamMap(whereJson) - .process().getResultJSONArray(0).toJavaList(JSONObject.class); - for (int i = 0; i < blockList.size(); i++) { - JSONObject json = blockList.get(i); - json.put("stor_id", whereJson.getString("stor_id")); - json.put("sect_id", whereJson.getString("sect_id")); - json.put("box_length", whereJson.getString("box_length")); - json.put("box_width", whereJson.getString("box_width")); - json.put("box_high", whereJson.getString("box_high")); - json.put("num", whereJson.getString("num")); - String row_num_2 = getMaxRow(json); - json.put("row_num", row_num_2); - JSONObject jsonAttr_2 = getBox(json); - if (ObjectUtil.isNotEmpty(jsonAttr_2)) { - jsonAttr = jsonAttr_2; - break; - } else { - continue; - } + JSONObject jsonBox = null; + for (int i = 0; i < structArray.size(); i++) { + JSONObject jsonObject = structArray.getJSONObject(i); + int count = ipdmBiSubpackagerelationService.count(new QueryWrapper() + .eq("package_box_sn", jsonObject.getString("storagevehicle_code"))); + if (count == 0){ + jsonBox = jsonObject; + break; } } - if (ObjectUtil.isEmpty(jsonAttr)) { + + if (ObjectUtil.isEmpty(jsonBox)) { notOutRowList.clear(); notOutBlockList.clear(); throw new BadRequestException("没有符合规格的木箱!"); } // 查询木箱对应的托盘号 - JSONObject jsonVeExt = veExtTab.query("pcsn = '" + jsonAttr.getString("storagevehicle_code") + "'") + JSONObject jsonVeExt = veExtTab.query("pcsn = '" + jsonBox.getString("storagevehicle_code") + "'") .uniqueResult(0); if (ObjectUtil.isEmpty(jsonVeExt)) { - throw new BadRequestException("此木箱没有绑定托盘号!"+jsonAttr.getString("storagevehicle_code")); + throw new BadRequestException("此木箱没有绑定托盘号!"+jsonBox.getString("storagevehicle_code")); } // 锁定起点 - jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("木箱出库锁")); - attrTab.update(jsonAttr); + jsonBox.put("lock_type", IOSEnum.LOCK_TYPE.code("验箱出库锁")); + jsonBox.put("update_time", DateUtil.now()); + attrTab.update(jsonBox); // 清空缓存 notOutRowList.clear(); notOutBlockList.clear(); - return jsonAttr.getString("storagevehicle_code"); + return jsonBox.getString("storagevehicle_code"); } @Override - @Transactional public JSONObject taskExceptional(JSONObject jsonObject) { // 仓位表 + JSONObject jsonAttrNow = null; WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr"); - // 查询任务 SchBaseTask taskDao = ischBaseTaskService.getOne( new QueryWrapper().lambda() .eq(SchBaseTask::getTask_code, jsonObject.getString("task_code")) ); - - // 标记原货位为满入异常锁 JSONObject jsonAttr = attrTab.query("struct_code = '" + taskDao.getPoint_code1() + "'").uniqueResult(0); - jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("货位异常锁")); + jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); + jsonAttr.put("storagevehicle_code",null); + jsonAttr.put("remark", "空出设置为空"+taskDao.getTask_id()); attrTab.update(jsonAttr); - if (taskDao.getPoint_code2().contains("ZXQ")){ - throw new BadRequestException("当前木箱出库至ZXQ,木箱空出异常"); + + if ("010706".equals(taskDao.getTask_type())){ + BstIvtBoxinfo boxDao = bstIvtBoxinfoMapper.selectOne( + new QueryWrapper().lambda() + .eq(BstIvtBoxinfo::getBox_no, taskDao.getVehicle_code()) + ); + + JSONObject jsonParam = new JSONObject(); + jsonParam.put("stor_id", IOSEnum.STOR_ID.code("二期")); + jsonParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); + jsonParam.put("material_code", boxDao.getMaterial_code()); + jsonParam.put("move_block_num", jsonAttr.getString("block_num")); + jsonParam.put("num", boxDao.getNum()); + jsonAttrNow = getStruct(jsonParam); + if (ObjectUtil.isEmpty(jsonAttrNow)) { + throw new BadRequestException("空出重新分配:库存不足!"); + } + // 锁定新终点 + jsonAttrNow.put("lock_type", IOSEnum.LOCK_TYPE.code("空托盘出库锁")); + attrTab.update(jsonAttrNow); + // 更新任务起点 + taskDao.setPoint_code1(jsonAttrNow.getString("struct_code")); + taskDao.setVehicle_code(jsonAttrNow.getString("storagevehicle_code")); + ischBaseTaskService.updateById(taskDao); + }else { + taskDao.setRemark("空出,手动处理任务"); + ischBaseTaskService.updateById(taskDao); + throw new BadRequestException("空出异常:手动维护业务及任务"); } - // 重新分配货位 - BstIvtBoxinfo boxDao = bstIvtBoxinfoMapper.selectOne( - new QueryWrapper().lambda() - .eq(BstIvtBoxinfo::getBox_no, taskDao.getVehicle_code()) - ); - - JSONObject jsonParam = new JSONObject(); - jsonParam.put("stor_id", IOSEnum.STOR_ID.code("二期")); - jsonParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); - jsonParam.put("material_code", boxDao.getMaterial_code()); - jsonParam.put("move_block_num", jsonAttr.getString("block_num")); - jsonParam.put("num", boxDao.getNum()); - - // 调用找货位方法 - JSONObject jsonAttrNow = getStruct(jsonParam); - if (ObjectUtil.isEmpty(jsonAttrNow)) { - throw new BadRequestException("库存不足!"); - } - - // 锁定新终点 - jsonAttrNow.put("lock_type", IOSEnum.LOCK_TYPE.code("木箱出库锁")); - attrTab.update(jsonAttrNow); - - // 更新任务起点 - taskDao.setPoint_code1(jsonAttrNow.getString("struct_code")); - taskDao.setVehicle_code(jsonAttrNow.getString("storagevehicle_code")); - ischBaseTaskService.updateById(taskDao); - return jsonAttrNow; } @@ -287,7 +266,15 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { if (ObjectUtil.isEmpty(jsonAttrNow)) { throw new BadRequestException("对应浅货位不存在或未启用!" + jsonTask.getString("point_code1")); } - + List list = ischBaseTaskService.list(new QueryWrapper() + .eq("point_code1", jsonAttrNow.getString("struct_code")) + .eq("point_code2", IOSEnum.OUT_POINT.code(jsonAttrNow.getString("row_num"))) + .eq("task_type", "010712") + .eq("is_delete", "0") + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (!CollectionUtils.isEmpty(list)){ + return list.get(0).getTask_id(); + } // 锁住仓位 jsonAttrNow.put("lock_type", IOSEnum.LOCK_TYPE.code("货位异常出库锁")); attrTab.update(jsonAttrNow); @@ -733,8 +720,138 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { TwoMoveBoxTask taskBan = new TwoMoveBoxTask(); taskBan.createTask(jsonTaskParam); taskBan.immediateNotifyAcs(null); - + try { + Thread.sleep(500); + }catch (Exception ex){} return jsonTaskParam.getString("task_group_id"); } + @Override + @Transactional(rollbackFor = Exception.class) + public void publicBoxOut(List list) { + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); + + // 查询需要出库的仓位信息 + String struct_code_in = list.stream() + .map(row -> row.getString("struct_code")) + .collect(Collectors.joining("','")); + + List attrList = attrTab.query("struct_code in ('" + struct_code_in + "') AND sect_code = 'BZC01'") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 获取这些仓位的每排仓位 + String row_num_in = attrList.stream() + .map(row -> row.getString("row_num")) + .distinct() + .collect(Collectors.joining("','")); + + List allList = attrTab.query("row_num IN ('" + row_num_in + "') AND sect_code = 'BZC01' AND is_delete = '0'") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 查询木箱对应的托盘号 + String box_no_in = list.stream() + .map(row -> row.getString("box_no")) + .collect(Collectors.joining("','")); + + List extList = extTab.query("pcsn IN ('" + box_no_in + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 需要移库的木箱仓位 + ArrayList moveList = new ArrayList<>(); + + // 创建任务 + for (JSONObject json : attrList) { + // 判断是否是深货位 + if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { + // 查询对应的浅货位 + JSONObject jsonShallow = allList.stream() + .filter(row -> row.getString("row_num").equals(json.getString("row_num")) && + row.getString("col_num").equals(json.getString("col_num")) && + row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) + ) + .findFirst().orElse(null); + if (ObjectUtil.isEmpty(jsonShallow)) { + throw new BadRequestException("仓位【"+json.getString("struct_code")+"】对应的浅货位信息错误!"); + } + + // 判断浅货位是否有空木箱 + if (ObjectUtil.isNotEmpty(jsonShallow.getString("storagevehicle_code"))) { + // 判断是否是当前需要出库的集合当中 + int size = (int) attrList.stream() + .filter(row -> row.getString("struct_code").equals(jsonShallow.getString("struct_code"))).count(); + + // 不在要出库的集合当中 + if (size == 0) { + // 判断是否被锁定 + if (jsonShallow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + // 加入要移库的集合当中 + moveList.add(jsonShallow); + } else if (!jsonShallow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("木箱出库锁")) + && (!jsonShallow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("移出锁"))) + ) { + throw new BadRequestException("仓位【"+jsonShallow.getString("struct_code")+"】被锁定,无法生成移库任务!"); + } + } + } + } +// // 校验木箱是否绑定了托盘 +// JSONObject jsonExt = extList.stream() +// .filter(row -> row.getString("pcsn").equals(json.getString("storagevehicle_code"))) +// .findFirst().orElse(null); +// +// if (ObjectUtil.isEmpty(jsonExt)) { +// throw new BadRequestException("此木箱【"+json.getString("storagevehicle_code")+"】没有绑定托盘,请核查"); +// } + + // 创建任务 + JSONObject jsonTaskParam = new JSONObject(); + jsonTaskParam.put("task_type", "010704"); + jsonTaskParam.put("start_device_code", json.getString("struct_code")); + jsonTaskParam.put("next_device_code", IOSEnum.EXCEP_OUT.code("异常出库口")); + jsonTaskParam.put("vehicle_code", json.getString("storagevehicle_code")); +// jsonTaskParam.put("vehicle_code2", jsonExt.getString("storagevehicle_code")); + jsonTaskParam.put("task_group_id", IdUtil.getStringId()); + jsonTaskParam.put("priority", json.getString("zdepth")); + JSONObject request_param = new JSONObject(); + request_param.put("containerType", json.getString("storagevehicle_type")); + jsonTaskParam.put("request_param", request_param.toString()); + TwoOutBoxExcepTask twoOutBoxExcepTask = new TwoOutBoxExcepTask(); + twoOutBoxExcepTask.createTask(jsonTaskParam); + + // 更新仓位锁定状态 + json.put("lock_type", IOSEnum.LOCK_TYPE.code("木箱出库锁")); + attrTab.update(json); + } + + // 查询移库木箱对应的托盘 + String storagevehicle_code_in = moveList.stream() + .map(row -> row.getString("storagevehicle_code")) + .collect(Collectors.joining("','")); + List extMoveList = extTab.query("pcsn IN ('" + storagevehicle_code_in + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 此循环为防止下发一部分后报错无法回滚 + moveList.forEach(item -> { + // 校验木箱和托盘是否绑定 + JSONObject jsonExtMove = extMoveList.stream() + .filter(row -> row.getString("pcsn").equals(item.getString("storagevehicle_code"))) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(jsonExtMove)) { + throw new BadRequestException("此移库木箱【"+jsonExtMove.getString("storagevehicle_code")+"】没有绑定托盘,请核查"); + } + }); + + // 生成移库任务 + for (JSONObject jsonMove : moveList) { + // 调用接口生成木箱移库任务 + this.createBoxMove(jsonMove); + } + + // 下发木箱出库任务 + new TwoOutBoxExcepTask().immediateNotifyAcs(null); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBoxManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBoxManageService.java index b21ac6d2d..ed5a43e7e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBoxManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBoxManageService.java @@ -36,6 +36,7 @@ public interface InBoxManageService { * } */ void boxBinVehicle(JSONObject whereJson); + void boxBinVehicleByTHRK(JSONObject whereJson); /** * 任务异常处理(1.满入 2.浅货位有货-放货时) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java index d5ae9ab9e..58dddd75d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java @@ -46,11 +46,15 @@ public interface LashManageService { * length: 木箱长 * weight: 木箱宽 * height: 木箱高 + * case: 木箱类型 * isBinding: 是否捆绑 - * isLabeling: 是否贴标 * bindingTemplate: 捆扎模板 - * labelingTemplate: 贴标模板 + * bundleTimes: 第一次捆扎数量 + * box_structure: 木箱结构 + * box_structure: 木箱结构 * bundleTimes: 捆扎次数 + * isLabeling: 是否贴标 + * labelingTemplate: 贴标模板 * printQty: 贴标数量 * printDevice: 使用打印机 * } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBoxManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBoxManageService.java index 3f979a9be..bee2a6954 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBoxManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/OutBoxManageService.java @@ -2,6 +2,8 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service; import com.alibaba.fastjson.JSONObject; +import java.util.List; + /** *

* 空木箱业务处理 服务类 @@ -52,4 +54,10 @@ public interface OutBoxManageService { */ public String createBoxMove(JSONObject jsonObject); + /** + * 根据木箱号出库公共方法(多条数据) + * @param list 需要出库的木箱集合 + */ + void publicBoxOut(List list); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql index 3218aaf1d..39528f7cc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql @@ -156,7 +156,9 @@ AND attr.stor_id = 输入.stor_id AND attr.sect_id = 输入.sect_id AND attr.block_num = 输入.block_num - AND attr.row_num = 输入.row_num + OPTION 输入.row_num <> "" + attr.row_num = 输入.row_num + ENDOPTION AND attr.storagevehicle_type = 输入.vehicle_type AND attr.height = 输入.height order by attr.col_num DESC,attr.layer_num ASC,attr.zdepth DESC @@ -187,7 +189,9 @@ AND attr.stor_id = 输入.stor_id AND attr.sect_id = 输入.sect_id AND attr.block_num = 输入.block_num - AND attr.row_num = 输入.row_num + OPTION 输入.row_num <> "" + attr.row_num = 输入.row_num + ENDOPTION AND attr.storagevehicle_type = 输入.vehicle_type AND attr.height = 输入.height diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTBOX.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTBOX.wql index 7ae8d20c2..5f5f8fc03 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTBOX.wql +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTBOX.wql @@ -70,7 +70,7 @@ AND box.is_packing = '0' OPTION 输入.not_block_id <> "" - attr.block_num not in = 输入.not_block_id + attr.block_num not in 输入.not_block_id ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTVEHICLE.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTVEHICLE.wql index 9efe41774..a750f0d50 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTVEHICLE.wql +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_OUTVEHICLE.wql @@ -66,7 +66,7 @@ ENDOPTION OPTION 输入.not_block_id <> "" - attr.block_num not in = 输入.not_block_id + attr.block_num not in 输入.not_block_id ENDOPTION group by attr.block_num diff --git a/lms/nladmin-system/src/main/java/org/nl/common/enums/SpecEnum.java b/lms/nladmin-system/src/main/java/org/nl/common/enums/SpecEnum.java new file mode 100644 index 000000000..8aa9d234f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/common/enums/SpecEnum.java @@ -0,0 +1,54 @@ +package org.nl.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/9 + */ +@Getter +@AllArgsConstructor +public enum SpecEnum { + + FQ_WG(1, "分切称重",""), + XX(2, "子卷下线",""), + ZJ(3, "质检",""), + BZ(4, "包装",""), + BZ_REMOVE(5, "包装解除",""), + BZ_MES(6, "包装回传","CamstarApi/momBoxPackageSubmit"), + ZXRK(7, "装箱入库",""), + TYCK(8, "退异常口",""), + YX_MES(9, "验箱","CamstarApi/BoxDataCollectionSubmit2"), + RK(10, "入库",""), + RK_YC(11, "异常口入库",""), + RK_MES(12, "入库回传","CamstarApi/ChildRollFGInboundComplete"), +; + + private final Integer value; + private final String desc; + private final String url; + public static String conversUrl(Integer value){ + if (value != null){ + for (SpecEnum specEnum : SpecEnum.values()) { + if (specEnum.getValue().equals(value)){ + return specEnum.getUrl(); + } + } + + } + return ""; + } + public static String converName(Integer value){ + if (value != null){ + for (SpecEnum specEnum : SpecEnum.values()) { + if (specEnum.getValue().equals(value)){ + return specEnum.getDesc(); + } + } + + } + return ""; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/ApiDocScan.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/ApiDocScan.java new file mode 100644 index 000000000..227ddcc81 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/ApiDocScan.java @@ -0,0 +1,58 @@ +package org.nl.common.utils; + + +import org.nl.modules.logging.annotation.Log; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.SmartLifecycle; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import javax.annotation.Resource; +import java.lang.annotation.Annotation; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/* + * @author ZZQ + * @Date 2023/10/17 14:51 + * 接口文档工具 + */ +@Component +public class ApiDocScan implements SmartLifecycle { + @Resource + @Qualifier("requestMappingHandlerMapping") + public RequestMappingHandlerMapping requestHandlers; + + public static Map Log_Url; + + @Override + public void start() { + Map handlerMethods = requestHandlers.getHandlerMethods(); + HashMap map = new HashMap<>(); + handlerMethods.forEach((a,b)->{ + Set patterns = a.getPatternsCondition().getPatterns(); + String name = patterns.iterator().next(); + Annotation[] annotations = b.getMethod().getDeclaredAnnotations(); + for (Annotation annotation : annotations) { + if (annotation instanceof Log){ + Log log = (Log) annotation; + String urlName = log.value(); + map.put(urlName,name); + } + } + }); + Log_Url = map; + } + + @Override + public void stop() { + + } + @Override + public boolean isRunning() { + return false; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java index b8ed22d97..d5893473d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/CodeUtil.java @@ -1,5 +1,6 @@ package org.nl.common.utils; +import cn.hutool.http.HttpUtil; import lombok.SneakyThrows; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.util.SpringContextHolder; @@ -27,8 +28,11 @@ public class CodeUtil { String flag = "1"; HashMap map = new HashMap<>(); map.put("flag", flag); - map.put("code", ruleCode); - return SpringContextHolder.getBean(ISysCodeRuleService.class).codeDemo(map); + String code = HttpUtil.get("http://127.0.0.1:8013/api/codeDetail/getNewCode?code=" + ruleCode + "&flag=" + flag); + if (code.contains("status")){ + throw new BadRequestException(code); + } + return code; } else { throw new BadRequestException("系统繁忙,稍后在试!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java index 01ecd5799..127941c1b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java @@ -1,11 +1,13 @@ package org.nl.common.utils; import lombok.SneakyThrows; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.util.SpringContextHolder; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -32,6 +34,55 @@ public class RedissonUtils { } else { return; } + }catch (Exception ex){ + throw ex; + }finally { + if (isLock && lock.isHeldByCurrentThread()){ + lock.unlock(); + } + } + } + + /** + * + * @param process + * @param key + * @param secend:最大等待时间 + * @param param + */ + @SneakyThrows + public static void lock(Consumer process, String key, int secend, Object param){ + RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class); + RLock lock = redissonClient.getLock(key); + boolean isLock; + isLock = lock.tryLock(secend,secend+5,TimeUnit.SECONDS); + try { + if (isLock){ + process.accept(param); + } else { + throw new BadRequestException("当前业务"+key+"正在执行"); + } + }catch (Exception ex){ + ex.printStackTrace(); + throw ex; + }finally { + if (isLock && lock.isHeldByCurrentThread()){ + lock.unlock(); + } + } + } + @SneakyThrows + public static void lock(Consumer process, String key, int secend, Object param,String throwinfo){ + RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class); + RLock lock = redissonClient.getLock(key); + boolean isLock; + isLock = lock.tryLock(secend,secend+5,TimeUnit.SECONDS); + try { + if (isLock){ + process.accept(param); + } else { + throw new BadRequestException(throwinfo); + } }catch (Exception ex){ ex.printStackTrace(); throw ex; diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/ReturnLockProcess.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/ReturnLockProcess.java new file mode 100644 index 000000000..9fa883ef0 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/ReturnLockProcess.java @@ -0,0 +1,9 @@ +package org.nl.common.utils; + +import java.io.IOException; + +@FunctionalInterface +public +interface ReturnLockProcess { + T process() throws IOException; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java index 90c30a0ab..38cb2421d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java @@ -66,6 +66,22 @@ public class TaskUtils { target.setUpdate_time(now); } + + /** + * 根据任务维护分切点位库存 + * @param target + */ + public static void pointMaintenance(SchBaseTask task, BstIvtCutpointivt target) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + target.setUpdate_optid(currentUserId); + target.setUpdate_optname(currentUsername); + target.setUpdate_time(now); + } + + + /** * 用0,1,2,3四个的二进制字符表示是下单(双)上单(双) * @param currentUpPlan 要下来的上轴 diff --git a/lms/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java b/lms/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java index 88e916df8..3671c0ada 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.Primary; import javax.sql.DataSource; -@Configuration +//@Configuration @Slf4j public class DataBaseConfig { public static CountSqlParser countSqlParser = new CountSqlParser(); diff --git a/lms/nladmin-system/src/main/java/org/nl/config/DruidFilter.java b/lms/nladmin-system/src/main/java/org/nl/config/DruidFilter.java index f119c085b..5152f0a4d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/DruidFilter.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/DruidFilter.java @@ -8,13 +8,18 @@ import com.alibaba.druid.proxy.jdbc.ResultSetProxy; import com.alibaba.druid.proxy.jdbc.StatementProxy; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.util.JdbcUtils; +import com.mysql.cj.jdbc.ConnectionImpl; import com.mysql.cj.jdbc.result.ResultSetImpl; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; +import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /* * @author ZZQ @@ -23,6 +28,11 @@ import java.util.List; @Slf4j public class DruidFilter extends FilterEventAdapter { + private static final Pattern GENERIC_HOST_PTRN = Pattern.compile("(?[\\w\\+:%]+)\\s*" // scheme: required; alphanumeric, plus, colon or percent + + "(?://(?[^:/?#]*)).*"); + + public static volatile List Table_Range = new ArrayList<>(); + @Override public int preparedStatement_executeUpdate(FilterChain chain, PreparedStatementProxy statement) throws SQLException { @@ -37,25 +47,29 @@ public class DruidFilter extends FilterEventAdapter { @Override protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) { - int size = statement.getParametersSize(); - String executeSql = sql; - int count = 0; + String database=""; try { + ConnectionImpl connection = (ConnectionImpl)statement.getConnection(); + String url = connection.getURL(); + Matcher matcher = GENERIC_HOST_PTRN.matcher(url); + if (matcher.matches()){ + database = matcher.group("host"); + } + int size = statement.getParametersSize(); + String executeSql = sql; + int count = 0; count = statement.getUpdateCount(); - } catch (Exception ex) { - } - if (count > 0) { - if (size > 0) { + if (count>=0){ Collection values = statement.getParameters().values(); List params = new ArrayList<>(); for (JdbcParameter value : values) { params.add(value.getValue()); } executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params); + log.info("[----SQL----][update][执行结果:{}][数据库:{}][ SQL: {} ]",count,database, executeSql); } - if (!sql.contains("sys_log") && !sql.contains("sys_interface_log")){ - log.info("[----SQL----][update][ SQL: {} ]", executeSql); - } + }catch (Exception ex){ + log.warn("[-SQL解析异常-][{}]", ex.getMessage()); } super.statementExecuteAfter(statement, sql, result); } @@ -64,25 +78,36 @@ public class DruidFilter extends FilterEventAdapter { public ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException { ResultSetProxy rs = super.statement_getResultSet(chain, statement); String executeSql = statement.getLastExecuteSql(); + String database=""; int result = 0; - if (rs != null) { - ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class); - result = rss.getRows().size(); - } try { - int size = statement.getParametersSize(); - if (size > 0) { - Collection values = statement.getParameters().values(); - List params = new ArrayList<>(); - for (JdbcParameter value : values) { - params.add(value.getValue()); + String finalExecuteSql = executeSql; + boolean present = Table_Range.stream().filter(a -> finalExecuteSql.contains(a)).findAny().isPresent(); + if (CollectionUtils.isEmpty(Table_Range) || present){ + ConnectionImpl connection = (ConnectionImpl)statement.getConnection(); + String url = connection.getURL(); + Matcher matcher = GENERIC_HOST_PTRN.matcher(url); + if (matcher.matches()){ + database = matcher.group("host"); } - executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params); + if (rs != null) { + ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class); + result = rss.getRows().size(); + } + int size = statement.getParametersSize(); + if (size > 0) { + Collection values = statement.getParameters().values(); + List params = new ArrayList<>(); + for (JdbcParameter value : values) { + params.add(value.getValue()); + } + executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params); + } + log.info("[----SQL----][select][执行结果:{}][数据库:{}][ SQL: {} ]", result,database, executeSql); } - } catch (Exception ex) { + }catch (Exception ex){ log.warn("[-SQL解析异常-][{}]", ex.getMessage()); } - log.info("[----SQL----][select][执行结果:{}][ SQL: {} ]", result, executeSql); return rs; } diff --git a/lms/nladmin-system/src/main/java/org/nl/config/TlogIdGenerator.java b/lms/nladmin-system/src/main/java/org/nl/config/TlogIdGenerator.java index 557fe91bc..d2a73ba07 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/TlogIdGenerator.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/TlogIdGenerator.java @@ -9,10 +9,11 @@ import java.util.UUID; public class TlogIdGenerator extends TLogIdGenerator { @Override public String generateTraceId() { - String idStr = String.valueOf(System.currentTimeMillis()); + String idStr; try { idStr = IdUtil.getSnowflake(1, 1).nextIdStr(); }catch (Exception ex){ + idStr = String.valueOf(System.currentTimeMillis()); } return idStr; } diff --git a/lms/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java b/lms/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java index 7615078c0..3e97fae34 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java @@ -2,9 +2,11 @@ package org.nl.config.mybatis; import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.github.pagehelper.PageInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -30,18 +32,16 @@ public class MybatisPlusConfig { public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - // 分页插件 - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); +//// // 分页插件 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } +// @Bean +// ConfigurationCustomizer mybatisConfigurationCustomizer() { +// return configuration -> configuration.addInterceptor(new PageInterceptor()); +// } - @PostConstruct - public void datainnit() { - String url = ((DruidDataSource) dataSource).getUrl(); - System.out.println("项目数据库地址:" + url); - log.debug("项目数据库地址:{}", url); - } } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/base/BlockItemDTO.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/base/BlockItemDTO.java new file mode 100755 index 000000000..fb1fa1daf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/base/BlockItemDTO.java @@ -0,0 +1,23 @@ +package org.nl.modules.common.base; + +import lombok.Data; +import org.apache.commons.lang.builder.ToStringBuilder; + +import java.io.Serializable; +import java.util.Map; + +@Data +public class BlockItemDTO implements Serializable { + private static final long serialVersionUID = 4337563581927229706L; + + /** + * 主键(分块明细项Id) + */ + private Long id; + + /** + * Excel一行数据(key为列名[columns_name可以和Excel列显示名不一致],value为单元格内容) + */ + private Map columnMap; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/LogAspect.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/LogAspect.java index c2bc6bc65..93365c265 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/LogAspect.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/LogAspect.java @@ -43,10 +43,8 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; -import java.lang.reflect.UndeclaredThrowableException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -104,33 +102,27 @@ public class LogAspect { Object result; try { log.info("[--request--][请求接口:{}][请求参数:{}]", url, params); - currentTime.set(System.currentTimeMillis()); result = joinPoint.proceed(); - }catch (Throwable ex) { + }catch (Exception ex) { StringBuffer errorStack = new StringBuffer(); errorStack.append("
【异常堆栈:"); + String errorMsg = ex.getMessage(); int x = 0; - if (ex instanceof UndeclaredThrowableException){ - ex = ((UndeclaredThrowableException) ex).getUndeclaredThrowable(); - if (ex instanceof InvocationTargetException){ - ex = ((InvocationTargetException) ex).getTargetException(); - } - } StackTraceElement[] stackTrace = ex.getStackTrace(); if (stackTrace != null && stackTrace.length > 0) { for (StackTraceElement stack : stackTrace) { x++; errorStack.append(stack.toString().replaceAll("<", ">")).append("
"); - if (x > 15) { + if (x > 10) { break; } } } - log.error("[-requestError-][请求接口:{}]【异常信息:{}】[请求参数:{}] {}", url, ex.getMessage(), params, ThrowableUtil.getStackTrace(ex)); + log.error("[-requestError-][请求接口:{}]【异常信息:{}】[请求参数:{}] {}", url, errorMsg, params, errorStack.append("】").toString()); if (ex instanceof BadRequestException){ throw ex; }else { - throw new BadRequestException("系统繁忙,请联系管理员确认,稍后再试"); + throw new BadRequestException("系统繁忙,请联系管理员确认,稍后再试"); } } finally { log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]", url, (System.currentTimeMillis() - comming) / 1000); @@ -173,20 +165,6 @@ public class LogAspect { } - /** - * 配置异常通知 - * - * @param joinPoint join point for advice - * @param e exception - */ -// @AfterThrowing(pointcut = "logPointcut()", throwing = "e") - public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { - SysLog log = new SysLog("ERROR", System.currentTimeMillis() - currentTime.get()); - currentTime.remove(); - log.setException_detail(ThrowableUtil.getStackTrace(e).getBytes()); - HttpServletRequest request = RequestHolder.getHttpServletRequest(); - logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint) joinPoint, log); - } public String getUsername() { try { diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java index ae5169a7b..b79e23c7e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java @@ -24,21 +24,17 @@ import org.springframework.web.bind.annotation.*; public class EsLogController { private final EsLogService esLogService; - @GetMapping("/labels/{type}") - public ResponseEntity labelsValues(@PathVariable String type) { return new ResponseEntity<>(esLogService.getLabelsValues(type), HttpStatus.OK); } @PostMapping("/query") - public ResponseEntity queryAll(@RequestBody LogQuery query) { return new ResponseEntity<>(esLogService.query(query), HttpStatus.OK); } @DeleteMapping("/clearLogs") - public ResponseEntity clearLogs(@RequestBody LogQuery query) { esLogService.clearLogs(query); return new ResponseEntity<>(HttpStatus.OK); diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java index 92a557fc5..e43ffa406 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java @@ -16,6 +16,7 @@ import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.*; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.BytesRef; +import org.nl.common.utils.ApiDocScan; import org.nl.config.lucene.LuceneAppender; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.logging.service.EsLogService; @@ -24,13 +25,11 @@ import org.nl.modules.logging.service.dto.LogRepositoryDTO; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.wltea.analyzer.lucene.IKAnalyzer; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @author ldjun @@ -70,11 +69,27 @@ public class LuceneLogServiceImpl implements EsLogService { @Override public JSONArray getLabelsValues(String type) { JSONArray result = new JSONArray(); - for (String v : INFO_LEVEL) { - JSONObject item = new JSONObject(); - item.put("label", v); - item.put("value", v); - result.add(item); + switch (type){ + case "logLevel": + for (String v : INFO_LEVEL) { + JSONObject item = new JSONObject(); + item.put("label", v); + item.put("value", v); + result.add(item); + } + break; + case "interface": + if (!CollectionUtils.isEmpty(ApiDocScan.Log_Url)){ + Set strings = ApiDocScan.Log_Url.keySet(); + for (String label : strings) { + String value = ApiDocScan.Log_Url.get(label); + JSONObject item = new JSONObject(); + item.put("label", label); + item.put("value", value); + result.add(item); + } + } + break; } return result; } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/mapstruct/LogErrorMapper.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/mapstruct/LogErrorMapper.java deleted file mode 100644 index 8cd8b559f..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/mapstruct/LogErrorMapper.java +++ /dev/null @@ -1,31 +0,0 @@ -///* -// * Copyright 2019-2020 Zheng Jie -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -//package org.nl.modules.logging.service.mapstruct; -// -//import org.mapstruct.Mapper; -//import org.mapstruct.ReportingPolicy; -//import org.nl.modules.common.base.BaseMapper; -//import org.nl.modules.logging.domain.Log; -//import org.nl.modules.logging.service.dto.LogErrorDTO; -// -///** -// * @author Zheng Jie -// * @date 2019-5-22 -// */ -//@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) -//public interface LogErrorMapper extends BaseMapper { -// -//} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/mapstruct/LogSmallMapper.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/mapstruct/LogSmallMapper.java deleted file mode 100644 index a86f7d507..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/mapstruct/LogSmallMapper.java +++ /dev/null @@ -1,31 +0,0 @@ -///* -// * Copyright 2019-2020 Zheng Jie -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -//package org.nl.modules.logging.service.mapstruct; -// -//import org.mapstruct.Mapper; -//import org.mapstruct.ReportingPolicy; -//import org.nl.modules.common.base.BaseMapper; -//import org.nl.modules.logging.domain.Log; -//import org.nl.modules.logging.service.dto.LogSmallDTO; -// -///** -// * @author Zheng Jie -// * @date 2019-5-22 -// */ -//@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) -//public interface LogSmallMapper extends BaseMapper { -// -//} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java index 3b3d29f23..17a82a645 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java @@ -99,7 +99,7 @@ // } // // @Override -// @Transactional(Transactional.TxType.REQUIRES_NEW) +// @Transactional(Transactional.TxType.`REQUIRES_NEW`) // public String codeDemo(Map form) { // String code = (String) form.get("code"); // String id = this.queryIdByCode(code); diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/wql/WQLCore.java b/lms/nladmin-system/src/main/java/org/nl/modules/wql/WQLCore.java index 22e50fccb..9e888d301 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/wql/WQLCore.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/wql/WQLCore.java @@ -28,7 +28,7 @@ public class WQLCore { //解析wql文件的根目录 public static String ROOT = "wql"; //数据库默认名 - public static String defalutDBName = "dataSource"; + public static String defalutDBName = "shardingSphereDataSource"; //wql源文件 public static HashMap> wqlMap = new HashMap>(); diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java index 6bf8ae107..f84183697 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java @@ -20,6 +20,7 @@ import org.apache.commons.beanutils.BasicDynaBean; import org.apache.commons.beanutils.BasicDynaClass; import org.apache.commons.beanutils.DynaProperty; import org.apache.commons.beanutils.RowSetDynaClass; +import org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSet; import org.nl.modules.wql.util.WqlUtil; import java.beans.IntrospectionException; @@ -342,6 +343,11 @@ public class ResultBean implements Serializable, Cloneable { } try { //支持别名的设置 + if (sqlResultSet instanceof ShardingSphereResultSet){ + ShardingSphereResultSet resultSet = (ShardingSphereResultSet) sqlResultSet; + sqlResultSet = resultSet.getResultSets().get(0); + } + WQLRowSetDynaClass rs = new WQLRowSetDynaClass(sqlResultSet, true, -1); rslist.add(rs); ResultCount = rslist.size(); diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/WQLObject.java b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/WQLObject.java index 32a23d9f4..6ed6b045d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/WQLObject.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/WQLObject.java @@ -26,7 +26,7 @@ public class WQLObject implements Serializable, Cloneable { private static final long serialVersionUID = 3512111887957792224L; - private String dbname = "dataSource"; //指定使用的数据库 + private String dbname = "shardingSphereDataSource"; //指定使用的数据库 public WQLObject setDbname(String dbname) { this.dbname = dbname; diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/engine/object/WO.java b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/engine/object/WO.java index d70395fc6..9e47f4255 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/engine/object/WO.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/engine/object/WO.java @@ -7,7 +7,7 @@ * * 创 建 者 :yumeng * 创建时间:2014-07-01 14:25:35 - * 文件版本:v1.0 + * 文件版本:v1.0 * *******************************************************/ package org.nl.modules.wql.core.engine.object; @@ -47,7 +47,7 @@ public class WO implements Serializable, Cloneable { public WP wp; private String code = ""; //当前交易编号 - private String dbname = "dataSource"; //指定使用的数据库 + private String dbname = "shardingSphereDataSource"; //指定使用的数据库 public WO setDbname(String dbname) { this.dbname = dbname; @@ -368,7 +368,7 @@ public class WO implements Serializable, Cloneable { // //this.wp.conn = null; //// this.wp.utx=null; // } -// +// // } else { // try { //// if(this.wp.utx!=null){ @@ -410,7 +410,7 @@ public class WO implements Serializable, Cloneable { // DBConnection.freeConnection(this.wp.conn,this.dbname); // } // } -// +// // if(this.wp._success){ // log.debug(this.code+"执行成功"); // this.wp.rb.setSucess(1); diff --git a/lms/nladmin-system/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java b/lms/nladmin-system/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java index 6a40a1ff9..91c2c5360 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java @@ -2,8 +2,11 @@ package org.nl.system.controller.coderule; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; +import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.logging.annotation.Log; import org.nl.system.service.coderule.ISysCodeRuleDetailService; import org.nl.system.service.coderule.dao.SysCodeRuleDetail; @@ -55,12 +58,20 @@ public class SysCodeRuleDetailController { } @Log("修改编码明细") - @PutMapping @SaCheckPermission("genCode:edit") public ResponseEntity update(@RequestBody SysCodeRuleDetail json) { codeDetailService.update(json); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + @GetMapping("getNewCode") + @SaIgnore + public ResponseEntity getCode(String code,String flag) { + if (StringUtils.isEmpty(flag)){ + flag = "1"; + } + String newCode = codeDetailService.getNewCode(code, flag); + return new ResponseEntity<>(newCode,HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java b/lms/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java index dc3da84de..0f7abb7ee 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java @@ -1,5 +1,6 @@ package org.nl.system.controller.dict; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -8,6 +9,7 @@ import org.nl.system.service.dict.ISysDictService; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dto.DictQuery; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; @@ -59,7 +61,6 @@ public class SysDictController { @PutMapping @Log("修改字典") - //@SaCheckPermission("@el.check('dict:edit')") public ResponseEntity updateDict(@Validated @RequestBody Dict dto) { dictService.updateDict(dto); @@ -76,12 +77,16 @@ public class SysDictController { } @GetMapping("/dictDetail") - public ResponseEntity queryDetails(@RequestParam Map criteria, PageQuery pageable) { DictQuery dictQuery = JSONObject.parseObject(JSONObject.toJSONString(criteria), DictQuery.class); return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery, pageable)), HttpStatus.OK); } + @PostMapping("/dictDetail/post") + public ResponseEntity queryDetailsPost(@RequestBody String code) { + return new ResponseEntity<>(TableDataInfo.build(dictService.queryDetailsPost(code)), HttpStatus.OK); + } + @GetMapping(value = "/dictDetail/map") public ResponseEntity getDictDetailMaps(@RequestParam String dictName) { diff --git a/lms/nladmin-system/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java b/lms/nladmin-system/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java index d5c51ec90..1049b765e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java @@ -4,15 +4,19 @@ package org.nl.system.controller.generator; import cn.dev33.satoken.annotation.SaIgnore; -import lombok.RequiredArgsConstructor; +import org.nl.config.DruidFilter; import org.nl.system.service.generator.ICodeGenConfigService; import org.nl.system.service.generator.dao.CodeGenConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.Map; + /** *

* 代码生成配置表 前端控制器 @@ -40,5 +44,15 @@ public class CodeGenConfigController { public ResponseEntity update(@Validated @RequestBody CodeGenConfig genConfig){ return new ResponseEntity<>(genConfigService.update(genConfig.getTable_name(), genConfig),HttpStatus.OK); } + + @PostMapping("/changeRange") + @SaIgnore + public ResponseEntity changeRange(@RequestBody Map param){ + if (!CollectionUtils.isEmpty(param)){ + DruidFilter.Table_Range = (List) param.get("tables"); + } + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/ISysCodeRuleDetailService.java b/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/ISysCodeRuleDetailService.java index 3f349b7ee..da451eb7b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/ISysCodeRuleDetailService.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/ISysCodeRuleDetailService.java @@ -45,4 +45,8 @@ public interface ISysCodeRuleDetailService extends IService { * @param json */ void update(SysCodeRuleDetail json); + /** + * http获取code + */ + String getNewCode(String code,String flag); } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java index 4cf4df144..817050f92 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java @@ -2,22 +2,28 @@ package org.nl.system.service.coderule.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; 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.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; import org.nl.system.service.coderule.ISysCodeRuleDetailService; +import org.nl.system.service.coderule.dao.SysCodeRule; import org.nl.system.service.coderule.dao.SysCodeRuleDetail; import org.nl.system.service.coderule.dao.mapper.SysCodeRuleDetailMapper; +import org.nl.system.service.coderule.dao.mapper.SysCodeRuleMapper; import org.nl.system.service.coderule.dto.CodeRuleDetailQuery; import org.nl.system.service.coderule.utils.CodeRuleTypeEnum; 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.Date; +import java.util.List; /** *

@@ -32,6 +38,9 @@ public class SysCodeRuleDetailServiceImpl extends ServiceImpl queryAll(CodeRuleDetailQuery form, PageQuery page) { LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); @@ -77,4 +86,79 @@ public class SysCodeRuleDetailServiceImpl extends ServiceImpl().eq(SysCodeRule::getCode, code)).getId(); + // 如果flag = 1就执行更新数据库的操作 + List ruleDetails = codeRuleDetailMapper.selectList(new LambdaQueryWrapper() + .eq(SysCodeRuleDetail::getCode_rule_id, id) + .orderByAsc(SysCodeRuleDetail::getSort_num)); + String demo = ""; + boolean isSame = true; + for (SysCodeRuleDetail detail : ruleDetails) { + String value = ""; + String type = detail.getType(); + //固定直接取值 + if (type.equals(CodeRuleTypeEnum.FIXED.getType())) { + value = detail.getInit_value(); + } + //日期判断数据库的值与当前值是否相同来决定顺序的值 + if (type.equals(CodeRuleTypeEnum.DATE.getType())) { + String currentValue = detail.getCurrent_value(); + Date date = DateUtil.date(); + String format = detail.getFormat(); + String nowDate = DateUtil.format(date, format); + if (!nowDate.equals(currentValue)) { + isSame = false; + } + if ("1".equals(flag)) { + detail.setInit_value(nowDate); + detail.setCurrent_value(nowDate); + } + value = nowDate; + } + //顺序的值:如果日期一样就+步长,等于最大值就归为初始值;日期不一样就归为初始值 + if (type.equals(CodeRuleTypeEnum.ORDER.getType())) { + String numValue = ""; + int step = Integer.parseInt(detail.getStep()); + Long maxValue = Long.valueOf(detail.getMax_value()); + if (!isSame || (Long.valueOf(detail.getCurrent_value()) + step) > maxValue) { + numValue = detail.getInit_value(); + } else { + numValue = Integer.parseInt(detail.getCurrent_value()) + step + ""; + } + int size = numValue.length(); + int length = detail.getLength(); + String fillchar = detail.getFillchar(); + for (int m = 0; m < (length - size); m++) { + value += fillchar; + } + value += numValue; + if ("1".equals(flag)) { + if (!isSame) { + int initValue = Integer.parseInt(detail.getInit_value()); + if (StrUtil.isEmpty((initValue + ""))) { + throw new BadRequestException("请完善编码数值的初始值!"); + } + detail.setCurrent_value(String.valueOf(initValue)); + } else { + int numCurr = Integer.parseInt(detail.getCurrent_value()); + if (numCurr >= maxValue) { + numCurr = Integer.parseInt(detail.getInit_value()); + detail.setCurrent_value(String.valueOf(numCurr)); + } else { + detail.setCurrent_value(String.valueOf(numCurr + step)); + } + } + } + } + demo += value; + if ("1".equals(flag)) { + codeRuleDetailMapper.updateById(detail); + } + } + return demo; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java index f9a98852f..9ef728082 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java @@ -4,6 +4,9 @@ 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.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,6 +17,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.MapOf; import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.utils.ElAdminConstant; import org.nl.system.service.coderule.ISysCodeRuleService; import org.nl.system.service.coderule.dao.SysCodeRule; import org.nl.system.service.coderule.dao.SysCodeRuleDetail; @@ -62,7 +66,6 @@ public class SysCodeRuleServiceImpl extends ServiceImpl().eq(SysCodeRule::getCode, code)).getId(); @@ -132,7 +135,10 @@ public class SysCodeRuleServiceImpl extends ServiceImpl{ + codeRuleDetailMapper.updateById(detail); + }) + .start(); } log.info("更新成功:更新数据{}", detail); } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/dict/ISysDictService.java b/lms/nladmin-system/src/main/java/org/nl/system/service/dict/ISysDictService.java index 8c168dc06..f70fd51ec 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/dict/ISysDictService.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/dict/ISysDictService.java @@ -94,4 +94,11 @@ public interface ISysDictService extends IService { * @return */ List queryAll(); + + /** + * 根据code获取字典数据 + * @param code + * @return + */ + List queryDetailsPost(String code); } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java index a1f5cea70..f35cfc04c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java @@ -17,6 +17,8 @@ import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.dict.dto.DictQuery; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -77,6 +79,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = "dict", key = "#dto.code") public void updateDict(Dict dto) { Dict dict = sysDictMapper.selectById(dto.getDict_id()); if (ObjectUtil.isEmpty(dict)) { @@ -102,6 +105,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = "dict", allEntries = true) public void deleteBatchByIds(Set ids) { // 查找code删除 ids.forEach(id -> { @@ -132,6 +136,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = {"dict"}, key = "#dict.code") public void createDetail(Dict dict) { // 校验是否已经有标签 Dict one = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(Dict::getLabel, dict.getLabel()) @@ -170,6 +175,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = {"dict"}, key = "#resources.code") public void updateDetail(Dict resources) { Dict dict = sysDictMapper.selectById(resources.getDict_id()); if (ObjectUtil.isEmpty(dict)) { @@ -189,6 +195,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = "dict", allEntries = true) public void deleteDetail(String id) { sysDictMapper.deleteById(id); } @@ -201,4 +208,15 @@ public class SysDictServiceImpl extends ServiceImpl impleme .groupBy(Dict::getCode, Dict::getName)); } + @Override + @Cacheable(value = {"dict"}, key = "#code") + public List queryDetailsPost(String code) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(Dict::getCode, code) + .isNotNull(Dict::getLabel) + .ne(Dict::getLabel, "") + .orderBy(true, true, Dict::getDict_sort); + return sysDictMapper.selectList(lam); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java index 51de17ff2..52e1a3f74 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java @@ -100,9 +100,8 @@ public class SysNoticeServiceImpl extends ServiceImpl sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper() + return sysNoticeMapper.selectCount(new LambdaQueryWrapper() .eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue())); - return ObjectUtil.isNotEmpty(sysNotices) ? sysNotices.size() : 0; } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/param/ISysParamService.java b/lms/nladmin-system/src/main/java/org/nl/system/service/param/ISysParamService.java index fa257c4c5..6b998867c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/param/ISysParamService.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/param/ISysParamService.java @@ -55,4 +55,6 @@ public interface ISysParamService extends IService { * @return Param */ Param findByCode(String code); + + Param findMinByCode(String code); } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java index ecaf104e8..46f898aa2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java @@ -20,6 +20,7 @@ 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; import java.util.Map; @@ -103,4 +104,13 @@ public class SysParamServiceImpl extends ServiceImpl impl Param param = paramMapper.selectOne(queryWrapper); return param; } + + @Override + public Param findMinByCode(String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like("code", code); + queryWrapper.orderByDesc("value"); + List param = paramMapper.selectList(queryWrapper); + return param.get(0); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java index 1041e14d5..c18855cac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java @@ -15,6 +15,8 @@ import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; +import java.net.InetAddress; +import java.util.LinkedHashSet; import java.util.List; @Component @@ -39,7 +41,7 @@ public class JobRunner implements ApplicationRunner { log.info("--------------------注入定时任务---------------------"); List quartzJobs = quartzJobService.findByIsPauseIsFalse(); quartzJobs.forEach(job -> { - if (localIp.equals(job.getJob_ip())) { + if (judgmentIp(job.getJob_ip())) { log.info("定时任务:{}, 执行ip: {}, 定时任务开启", job.getJob_name(), localIp); System.out.println("定时任务: " + job.getJob_name() + ", 执行ip: " + localIp + ", 定时任务开启"); quartzManage.addJob(job); @@ -52,4 +54,9 @@ public class JobRunner implements ApplicationRunner { log.info("--------------------定时任务注入完成---------------------"); } + public static Boolean judgmentIp(String ip) { + return NetUtil.localAddressList(null).stream() + .anyMatch(inet -> ip.equals(inet.getHostAddress())); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java index d020b4201..0fa8c3f38 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; import lombok.SneakyThrows; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; @@ -121,7 +122,7 @@ public class ISysUserServiceImpl extends ServiceImpl imp } }, Date.class); try { - + BeanUtils.populate(sysUser, userDetail); } catch (Exception ex) { throw new RuntimeException(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java index 74c727342..35acd3bf2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java @@ -480,7 +480,7 @@ public class ClassstandardServiceImpl implements ClassstandardService { //添加子节点 try { - List list = Db.use((DataSource) SpringContextHolder.getBean("dataSource")).query(sql); + List list = Db.use((DataSource) SpringContextHolder.getBean("shardingSphereDataSource")).query(sql); list.forEach(item -> { set.add(item.getStr("class_id")); }); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java index a6d979f90..674a67c0e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java @@ -143,6 +143,7 @@ public class StructivtServiceImpl implements StructivtService { map.put("is_virtual", is_virtual); map.put("sub_type", sub_type); map.put("quality_scode", quality_scode); + map.put("control", control); if (StrUtil.isNotEmpty(material)) { map.put("material", "%" + material + "%"); } 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 527fc78d2..629d18949 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 @@ -230,6 +230,13 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.acsCallShaftFromCache(param), HttpStatus.OK); } + @PostMapping("/acsRequestPoint") + @Log(value = "二期ACS请求出轴", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @SaIgnore + public ResponseEntity acsRequestPoint(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.acsRequestPoint(param), HttpStatus.OK); + } + @PostMapping("/forceMove") @Log(value = "二期捆扎位ACS请求强制离开", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) @SaIgnore 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 6dbbe188a..5756ceda4 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 @@ -239,4 +239,11 @@ public interface AcsToWmsService { * @return JSONObject */ JSONObject forceMove(JSONObject param); + + /** + * 二期请求放货/取货 + * @param param + * @return + */ + JSONObject acsRequestPoint(JSONObject param); } 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 55313e9f7..005b3b2b1 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 @@ -19,9 +19,14 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService; +import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt; import org.nl.b_lms.pda.service.ProductOutTwoService; 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.info.dao.PdmBiContainerinbound; +import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService; +import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl; 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.IbstIvtPackageinfoivtService; @@ -39,9 +44,11 @@ import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.TASKEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*; import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.common.enums.SpecEnum; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; @@ -51,6 +58,7 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.ext.acs.service.WmsToAcsService; @@ -61,6 +69,8 @@ import org.nl.wms.pda.mps.service.impl.BakingServiceImpl; import org.nl.wms.pda.st.service.impl.PrintServiceImpl; import org.nl.wms.sch.ComPareUtil; import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.AutoSendFeiShu; +import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.tasks.CutConveyorTask; import org.nl.wms.sch.tasks.EmptyVehicleTask; @@ -107,6 +117,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final ISysNoticeService noticeService; + @Autowired + private IPdmBiContainerinboundService iPdmBiContainerinboundService; + /** * 入库处理类服务 */ @@ -159,6 +172,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Resource private SsxDjwTask ssxDjwTask; + @Autowired + private IMdpbBoxtypeService iMdpbBoxtypeService; @Autowired private ISysParamService iSysParamService; @@ -172,6 +187,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Autowired private ProductOutTwoService productOutTwoService; + @Autowired + private IStIvtIostorinvOutService iStIvtIostorinvOutService; + @Autowired + private IBstIvtShafttubeivtService shafttubeivtService; + private final IstIvtCutpointivtService cutpointivtService; private final WmsToAcsService wmsToAcsService; @@ -191,6 +211,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONArray array = JSONArray.parseArray(string); //返回处理失败的任务 JSONArray errArr = new JSONArray(); + JSONObject result = new JSONObject(); for (int i = 0; i < array.size(); i++) { JSONObject row = array.getJSONObject(i); String task_id = row.getString("task_id"); @@ -198,16 +219,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task") - .query("task_id = '" + task_id + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)){ - throw new BadRequestException("未找到任务标识为:" + task_id + "的任务!"); + JSONObject task = WQLObject.getWQLObject("SCH_BASE_Task") + .query("task_id = '" + task_id + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(task)){ + throw new BadRequestException("未找到任务标识为:" + task_id + "的任务!"); } - if ("1".equals(taskObj.getString("is_delete"))){ + if ("1".equals(task.getString("is_delete"))){ log.debug(task_id+"当前LMS任务已删除,不需要再次反馈更新!"); continue; } - if ("08,07".contains(taskObj.getString("task_status"))){ + if ("08,07".contains(task.getString("task_status"))){ log.debug(task_id+"当前LMS任务完成或取消,不需要再次反馈更新!"); continue; } @@ -215,37 +237,29 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { WQLObject.getWQLObject("SCH_BASE_Task") .update(MapOf.of("car_no",row.getString("car_no")),"task_id = '" + task_id + "'"); } - // 任务处理类 - String processing_class = taskObj.getString("handle_class"); - if (StrUtil.isEmpty(processing_class)) { + String handleClassName = task.getString("handle_class"); + if (StrUtil.isEmpty(handleClassName)) { throw new BadRequestException("当前任务的处理类未找到!"); } - AbstractAcsTask abstractTask = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(taskObj.getString("handle_class"))); + AbstractAcsTask abstractTask = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getString("handle_class"))); abstractTask.updateTaskStatus(row,Task_Status_Convers.get(row.getString("task_status"))); } else { throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!"); } + }catch (BadRequestException ex){ + log.error(task_id+"acs更新任务失败:{}", ex); + WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark",DateUtil.now()+"更新"+row.getString("task_status")+"失败:"+ex.getMessage()),"task_id = '" + task_id + "'"); + throw ex; }catch (Exception ex){ log.error(task_id+"acs更新任务失败:{}", ex); - String msg = ""; - if (!StringUtils.isEmpty(ex.getMessage())){ - int length = ex.getMessage().length(); - if (length>100){ - msg = ex.getMessage().substring(0, 99); - }else { - msg = ex.getMessage(); - } - } - WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark","更新"+row.getString("task_status")+"失败:"+msg),"task_id = '" + task_id + "'"); + WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark",DateUtil.now()+"更新"+row.getString("task_status")+"失败,系统异常"),"task_id = '" + task_id + "'"); throw ex; }finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); } } - } - JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); result.put("message", "任务状态反馈成功!"); result.put("data", new JSONObject()); @@ -785,7 +799,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { RLock lock = redissonClient.getLock("acs_to_deviceApply_wms:" + type); boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS); - + WQLObject pdm_bi_subpackagerelation = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); try { if (tryLock) { if ("1".equals(type)) { @@ -796,7 +810,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (StrUtil.isEmpty(weight)) { throw new BadRequestException("重量不能为空!"); } - JSONObject sub_jo = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + vehicle_code + "'").uniqueResult(0); + JSONObject sub_jo = pdm_bi_subpackagerelation.query("package_box_sn = '" + vehicle_code + "'").uniqueResult(0); if (ObjectUtil.isEmpty(sub_jo)) { throw new BadRequestException("未查询到该木箱对应的包装关系!"); } @@ -818,7 +832,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //更新实际重量 HashMap map = new HashMap<>(); map.put("real_weight", NumberUtil.round(weight, 1)); - WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "package_box_sn = '" + vehicle_code + "'"); + pdm_bi_subpackagerelation.update(map, "package_box_sn = '" + vehicle_code + "'"); data.put("is_auto_table", "0"); result.put("data", data); return result; @@ -878,7 +892,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (StrUtil.isEmpty(vehicle_code)) { throw new BadRequestException("木箱码不能为空!"); } - JSONObject sub_jo = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + vehicle_code + "'").uniqueResult(0); + JSONObject sub_jo = pdm_bi_subpackagerelation.query("package_box_sn = '" + vehicle_code + "'").uniqueResult(0); if (ObjectUtil.isEmpty(sub_jo)) { throw new BadRequestException("未查询到该木箱对应的包装关系!"); } @@ -2079,95 +2093,65 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * 二楼到一楼,成品子卷到达一楼输送线 */ @Override - @Transactional(rollbackFor = Exception.class) - @SneakyThrows public JSONObject sendProductToFirstFloor(JSONObject whereJson) { - // JSONObject whereJson 应该传子卷号,设备号,车间号 - // 先查询满轴缓存位是否有可用库位,有创建搬运任务 - // 任务完成创建空载具补充到输送线桁架任务,子卷搬运至待检区或或管制区agv任务 - // 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发; - // 这个情况是有agv任务在搬去待检区或管制区的路上,还没有更新任务状态;需要查询是否有这种任务,等这个任务更新完后, - // 再补发之前创建的输送线到满轴缓存位任务; - log.info("二楼到一楼,成品子卷到达一楼输送线接口sendProductToFirstFloor被调用--------------------------:" + whereJson.toString()); + 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!"); } - String containerName = whereJson.getString("material_barcode"); JSONObject result = new JSONObject(); - result.put("data", containerName); - RLock lock = redissonClient.getLock(containerName); - boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLock) { - //1.查询满轴缓存位是否有空位 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper().eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List mzPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())) - .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList()); - - JSONObject jo = new JSONObject(); - jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo.put("vehicle_code", containerName); - //2.创建输送线->满轴位桁架任务, - String point_code1 = whereJson.getString("device_code"); - jo.put("point_code1", point_code1); - if (ObjectUtils.isNotEmpty(mzPointList)) { - //任意一个满轴缓存位为终点 - jo.put("point_code2", mzPointList.get(0).getPoint_code()); - List kzjPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) - .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList()); - //空载具缓存位有空载具,桁架取空载具从外到里取空载具,升序 - if (ObjectUtils.isNotEmpty(kzjPointList)) { - //创建输送线四个点任务 - return createTask(containerName, jo, kzjPointList.get(0).getPoint_code(), whereJson.getString("device_code")); - } else { - //创建输送线->满轴缓存位两个点任务 - return createTask2(containerName, jo); - } - } else { - //如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发; - List taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))); - List existTaskList = taskService.getExistTasks(taskTypes); - //如果有就不创建,没有就创建 - if (ObjectUtils.isEmpty(existTaskList)) { - //只确定起点NBJ1002 - JSONObject jo2 = new JSONObject(); - jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); - jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); - jo2.put("point_code1", "NBJ1002"); - jo2.put("vehicle_code", containerName); - jo2.put("task_status", TaskStatusEnum.SURE_START.getCode()); - jo2.put("is_send", false); - mzhcwTask.createTask(jo2); - //不确定起点的空载具缓存位->输送线任务 - createTask3(containerName); - result.put("status", HttpStatus.OK.value()); - result.put("message", "反馈成功!"); - } else { - log.info("已存在未完成的且已分配的补空载具或桁架任务,任务编号为:" + existTaskList.get(0).getTask_code() + ",请检查!"); - result.put("status", HttpStatus.BAD_REQUEST.value()); - result.put("message", "已存在未完成的且已分配的补空载具或桁架任务,任务编号为:" + existTaskList.get(0).getTask_code() + ",请检查!"); - } - } - } else { - log.info("二楼到一楼成品子卷到达一楼输送线任务正在创建被锁住。"); - result.put("status", HttpStatus.BAD_REQUEST.value()); - result.put("message", "二楼到一楼成品子卷到达一楼输送线任务正在创建被锁住。"); + 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; } - } finally { - if (lock.isLocked() && lock.isHeldByCurrentThread()) { - lock.unlock(); + List empPoints = packageinfoivtService + .selectNoTargetTaskPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + if (CollectionUtils.isEmpty(empPoints)){ + result.put("message", "空轴位无可用位置"); + return result; } - } - log.info("二楼到一楼,成品子卷到达一楼输送线接口sendProductToFirstFloor调用成功--------------------------:" + result.toString()); + // 创建前先判断是否有已创建相同任务 + 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; } @@ -2187,6 +2171,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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()); @@ -2230,6 +2216,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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 { @@ -2275,53 +2263,93 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (ObjectUtil.isEmpty(whereJson.getString("material_barcode"))) { throw new BadRequestException("子卷号不能为空!"); } - if (whereJson.getIntValue("weight") <= 0) { - throw new BadRequestException("上报的重量不能为0!"); - } - JSONObject jsonObject = ComPareUtil.CompareWhight(whereJson); - if (jsonObject.getBoolean("compaer_result")) { - whereJson.put("bill_type", IOSEnum.IN_TYPE.code("生产入库")); - //"material_barcode":"C1101,","device_code":"RK1018","weight":500.95,"vehicle_code":"B01401","type":"1" + // 5-木箱入库.木箱回库 + String materialBarcode = whereJson.getString("material_barcode"); + if (materialBarcode.contains("BRMX")){ + String brBox = Arrays.asList(materialBarcode.split(",")).get(0); + whereJson.put("box_no", brBox.replace("BR", "")); + inBoxManageService.inBox(whereJson); + }else { + if (whereJson.getIntValue("weight") <= 0) { + throw new BadRequestException("上报的重量不能为0!"); + } + List errorMsg = new ArrayList<>(); + JSONObject jsonObject = ComPareUtil.CompareWhight(whereJson); + Boolean inbound = jsonObject.getBoolean("inbound"); + Boolean compaerResult = jsonObject.getBoolean("compaer_result"); + String box_no = jsonObject.getString("box_no"); + Integer box_weight = jsonObject.getIntValue("box_weight"); + Integer current_weight = jsonObject.getIntValue("current_weight"); + List containers = jsonObject.getObject("containers", List.class); int count = taskService.count(new QueryWrapper() .eq("point_code1", whereJson.getString("device_code")) - .eq("task_type", "010703") .eq("vehicle_code2", whereJson.getString("vehicle_code")) .eq("is_delete", "0") .lt("task_status", TaskStatusEnum.EXECUTING.getCode())); + JSONObject jsonExt = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonExt)) { + errorMsg.add("载具无数据"+whereJson.getString("vehicle_code")); + }else { + String pcsn = jsonExt.getString("pcsn"); + if (StringUtils.isNotEmpty(pcsn)){ + JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0); + if (stIvtStructattr != null && stIvtStructattr.size() > 0) { + errorMsg.add("载具"+whereJson.getString("vehicle_code")+"已绑定"+pcsn); + } + } + } + if (!compaerResult){ + errorMsg.add("称重"+current_weight+"不匹配"+box_weight); + Param notify = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("weight_notify"); + if (notify!=null && StringUtils.isNotEmpty(notify.getValue())){ + AutoSendFeiShu.sendFeiShuMsg(notify.getValue(),box_no+"称重"+current_weight+",理论"+box_weight,"二期称重异常提醒"); + } + } + if (!inbound){ + errorMsg.add("手动至异常口"); + } if (count>0){ - log.info("acs申请入库任务以存在直接跳过"+whereJson.getString("vehicle_code")); - result.put("status", HttpStatus.OK.value()); - result.put("message", "acs申请入库任务以存在直接跳过!"); - return result; + errorMsg.add(whereJson.getString("vehicle_code")+"存在任务"); } - inBussManageService.inTask(whereJson); - } else { - JSONObject jsonTaskParam = new JSONObject(); - //创建异常任务去异常入库口 - //入库口 - jsonTaskParam.put("point_code1", "RK1018"); - //异常位 - jsonTaskParam.put("point_code2", "RK1003"); - jsonTaskParam.put("vehicle_code", jsonObject.getString("box_no")); - jsonTaskParam.put("vehicle_code2", whereJson.getString("vehicle_code")); - JSONObject request_param = new JSONObject(); - if (whereJson.getString("vehicle_code").startsWith("A")) { - request_param.put("containerType", "2"); - } else if (whereJson.getString("vehicle_code").startsWith("B")) { - request_param.put("containerType", "1"); + //"material_barcode":"C1101,","device_code":"RK1018","weight":500.95,"vehicle_code":"B01401","type":"1" + if (CollectionUtils.isEmpty(errorMsg)) { + whereJson.put("bill_type", IOSEnum.IN_TYPE.code("生产入库")); + inBussManageService.inTask(whereJson); + PdmProductSpecServiceImpl.doRecord(SpecEnum.RK,null,Boolean.TRUE,null,containers); } else { - throw new BadRequestException("托盘号有误,无法找到对应的托盘类型!"); - } - // 更新子卷包装关系为生成 - JSONObject param = new JSONObject(); - param.put("status", IOSEnum.IS_NOTANDYES.code("否")); - WQLObject.getWQLObject("pdm_bi_subpackagerelation") - .update(param,"package_box_sn = '"+jsonObject.getString("box_no")+"'"); + iPdmBiContainerinboundService + .update(new UpdateWrapper() + .set("remark",JSONObject.toJSONString(errorMsg)) + .eq("box",box_no)); + //更新子卷入库备注信息 + JSONObject jsonTaskParam = new JSONObject(); + //创建异常任务去异常入库口 + //入库口 + jsonTaskParam.put("point_code1", "RK1018"); + //异常位 + jsonTaskParam.put("point_code2", "RK1003"); + jsonTaskParam.put("vehicle_code", jsonObject.getString("box_no")); + jsonTaskParam.put("vehicle_code2", whereJson.getString("vehicle_code")); + JSONObject request_param = new JSONObject(); + if (whereJson.getString("vehicle_code").startsWith("A")) { + request_param.put("containerType", "2"); + } else if (whereJson.getString("vehicle_code").startsWith("B")) { + request_param.put("containerType", "1"); + } else { + throw new BadRequestException("托盘号有误,无法找到对应的托盘类型!"); + } + // 更新子卷包装关系为生成 + JSONObject param = new JSONObject(); + param.put("status", IOSEnum.IS_NOTANDYES.code("否")); + WQLObject.getWQLObject("pdm_bi_subpackagerelation") + .update(param,"package_box_sn = '"+jsonObject.getString("box_no")+"'"); - jsonTaskParam.put("request_param", request_param); - TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class); - bean.createTask(jsonTaskParam); - bean.immediateNotifyAcs(null); + jsonTaskParam.put("request_param", request_param); + TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class); + bean.createTask(jsonTaskParam); + bean.immediateNotifyAcs(null); + PdmProductSpecServiceImpl.doRecord(SpecEnum.TYCK,null,Boolean.FALSE,errorMsg.toString(),containers); + } } } else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库"))) { @@ -2352,10 +2380,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { whereJson.put("box_no", whereJson.getString("material_barcode")); inBoxManageService.inBox(whereJson); } else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("退货入库"))) { - WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); - // 载具扩展属性表 - WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); - // 6-退货入库 String materialBarcode = whereJson.getString("material_barcode"); if(StrUtil.isEmpty(materialBarcode)){ throw new BadRequestException("当前木箱号不能为空!"); @@ -2365,47 +2389,72 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 处理分割结果不足的情况 throw new BadRequestException("当前木箱号数据异常!"+box_arr.toString()); } - //获取当前的入库类型 - whereJson.put("bill_type", "000" + box_arr[1]); - whereJson.put("box_no", box_arr[0]); - JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("box_no") + "' AND status in ('0','1','99')").getResultJSONArray(0); - if (ObjectUtil.isEmpty(resultJSONArray)) { - throw new BadRequestException("未查询到子卷包装信息!"); - } - String material_barcode = ""; - for (int i = 0; i < resultJSONArray.size(); i++) { - JSONObject resultObj = resultJSONArray.getJSONObject(i); - if (i == 0) { - material_barcode = resultObj.getString("container_name"); - } else { - material_barcode += "," + resultObj.getString("container_name"); + if (box_arr[1].equals("9")){ + //空木箱入库 + // -{"material_barcode":"MX250324000091-1","device_code":"CK2005","vehicle_code":"B00165","type":"6"} + whereJson.put("box_no", box_arr[0]); + inBoxManageService.inBox(whereJson); + }else { + //退货入库 + WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + // 载具扩展属性表 + WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); + //获取当前的入库类型 + whereJson.put("bill_type", "000" + box_arr[1]); + whereJson.put("box_no", box_arr[0]); + JSONArray resultJSONArray = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + whereJson.getString("box_no") + "' AND status in ('0','1','99')").getResultJSONArray(0); + if (ObjectUtil.isEmpty(resultJSONArray)) { + throw new BadRequestException("未查询到子卷包装信息!"); + } + String material_barcode = ""; + for (int i = 0; i < resultJSONArray.size(); i++) { + JSONObject resultObj = resultJSONArray.getJSONObject(i); + if (i == 0) { + material_barcode = resultObj.getString("container_name"); + } else { + material_barcode += "," + resultObj.getString("container_name"); + } } - } - JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'") - .uniqueResult(0); - if (ObjectUtil.isEmpty(jsonVehicle)) { - throw new BadRequestException("载具不存在!"); + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在!"); + } + int hasTask = taskService.count(new QueryWrapper() + .eq("is_delete", "0") + .eq("vehicle_code2", whereJson.getString("vehicle_code")) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (hasTask>0){ + throw new BadRequestException("托盘"+whereJson.getString("vehicle_code")+"存在执行的任务"); + } + JSONObject ext_jo = veExtTab.query("storagevehicle_code = '" + jsonVehicle.getString("storagevehicle_code") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(ext_jo)) { + JSONObject jsonVeExt = new JSONObject(); + jsonVeExt.put("storagevehicleext_id", org.nl.common.utils.IdUtil.getLongId()); + jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id")); + jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code")); + jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type")); + jsonVeExt.put("pcsn", whereJson.getString("box_no")); + jsonVeExt.put("device_uuid", org.nl.common.utils.IdUtil.getLongId()); + jsonVeExt.put("update_time", DateUtil.now()); + veExtTab.insert(jsonVeExt); + } else { + String pcsn = ext_jo.getString("pcsn"); + if (StringUtils.isNotEmpty(pcsn)){ + JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0); + if (stIvtStructattr != null && stIvtStructattr.size() > 0) { + throw new BadRequestException("当前托盘"+whereJson.getString("vehicle_code")+"已经绑定木箱"+pcsn); + } + } + ext_jo.put("pcsn", whereJson.getString("box_no")); + ext_jo.put("device_uuid", org.nl.common.utils.IdUtil.getLongId()); + ext_jo.put("update_time", DateUtil.now()); + veExtTab.update(ext_jo); + } + whereJson.put("material_barcode", material_barcode); + inBussManageService.inTask(whereJson); } - JSONObject ext_jo = veExtTab.query("storagevehicle_code = '" + jsonVehicle.getString("storagevehicle_code") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(ext_jo)) { - JSONObject jsonVeExt = new JSONObject(); - jsonVeExt.put("storagevehicleext_id", org.nl.common.utils.IdUtil.getLongId()); - jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id")); - jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code")); - jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type")); - jsonVeExt.put("pcsn", whereJson.getString("box_no")); - jsonVeExt.put("device_uuid", org.nl.common.utils.IdUtil.getLongId()); - jsonVeExt.put("update_time", DateUtil.now()); - veExtTab.insert(jsonVeExt); - } else { - ext_jo.put("pcsn", whereJson.getString("box_no")); - ext_jo.put("device_uuid", org.nl.common.utils.IdUtil.getLongId()); - ext_jo.put("update_time", DateUtil.now()); - veExtTab.update(ext_jo); - } - whereJson.put("material_barcode", material_barcode); - inBussManageService.inTask(whereJson); } result.put("status", HttpStatus.OK.value()); result.put("message", "下发成功!"); @@ -2505,7 +2554,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } @Override - @Transactional @SneakyThrows public JSONObject deviceApplyExceptional(JSONObject whereJson) { log.info("deviceApplyExceptional请求参数:---------------------------------------------" + whereJson.toString()); @@ -2528,40 +2576,40 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 判断任务类型 if (taskDao.getTask_type().equals(TASKEnum.BOX_TYPE.code("木箱入库"))) { // 木箱入库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = inBoxManageService.taskExceptional(whereJson); } } else if (taskDao.getTask_type().equals(TASKEnum.BOX_TYPE.code("木箱出库"))) { // 木箱出库:空出、浅货位有货-取货时 - if (type.equals("2")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { point_code = outBoxManageService.taskExceptional(whereJson); } - if (type.equals("3")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)"))) { String task_id = outBoxManageService.taskExceptionalOut(whereJson); result.put("task_id", task_id); } } else if (taskDao.getTask_type().equals(TASKEnum.VEHICLE_TYPE.code("托盘入库"))) { // 托盘入库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = inVehicleManageService.taskExceptional(whereJson); } } else if (taskDao.getTask_type().equals(TASKEnum.VEHICLE_TYPE.code("托盘出库"))) { // 托盘出库:空出、浅货位有货-取货时 - if (type.equals("2")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { point_code = outVehicleManageService.taskExceptional(whereJson); } - if (type.equals("3")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)"))) { String task_id = outVehicleManageService.taskExceptionalOut(whereJson); result.put("task_id", task_id); } } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("成品入库"))) { // 成品入库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = inBussManageService.taskExceptional(whereJson); } } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("成品出库"))) { // 成品出库:空出 - if (type.equals("2")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { taskDao.setRemark("【空出】请检查货位库存!"); taskDao.setCar_no("【空出】请检查货位库存!"); taskService.updateById(taskDao); @@ -2572,11 +2620,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("deviceApplyExceptional返回参数:---------------------------------------------" + result.toString()); return result; } + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)"))) { + // 浅货位阻挡-取货时 + String task_id = iStIvtIostorinvOutService.taskExceptionalOut(whereJson); + result.put("task_id", task_id); + } } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("立库转库"))) { // 立库转库:满入、浅货位有货-放货时 - if (type.equals("1") || type.equals("4")) { + if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("入库满入")) || type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(入库)"))) { point_code = outBussManageService.taskExceptional(whereJson); - } else if (type.equals("2")) { + } else if (type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("出库空出"))) { // 立库转库空出 taskDao.setRemark("【空出】请检查货位库存!"); taskDao.setCar_no("【空出】请检查货位库存!"); @@ -2590,7 +2643,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } } - if (!type.equals("3") && ObjectUtil.isEmpty(point_code)) { + if (!type.equals(IOSEnum.ACS_EXCEPTIONAL_TYPE.code("浅货位有货(出库)")) && ObjectUtil.isEmpty(point_code)) { throw new BadRequestException("立库异常任务处理失败,仓位为空!"); } @@ -2689,13 +2742,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override public JSONObject feedbackSubVolumeWeightApply(JSONObject param) { + log.info("ACS反馈子卷重量:{}", param); JSONObject res = new JSONObject(); String subVolume = param.getString("sub_volume"); String weight = param.getString("weight1"); +// PdmBiSlittingproductionplan containerName = slittingproductionplanService.getByContainerName(subVolume); +// if (ObjectUtil.isEmpty(containerName)) { +// throw new BadRequestException("子卷号[" + subVolume + "]对应的分切计划不存在!"); +// } +// if (ObjectUtil.isNotEmpty(containerName.getWeight())) { +// throw new BadRequestException("子卷号[" + subVolume + "]不允许重复更新重量!"); +// } LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); updateWrapper.set(PdmBiSlittingproductionplan::getWeight, NumberUtil.round(weight, 2).toString()) .eq(PdmBiSlittingproductionplan::getContainer_name, subVolume); boolean update = slittingproductionplanService.update(updateWrapper); + PdmProductSpecServiceImpl.doRecord(SpecEnum.FQ_WG,param,Boolean.TRUE,null,subVolume); if (update) { res.put("code", cn.hutool.http.HttpStatus.HTTP_OK); res.put("message", "更新成功!"); @@ -2711,11 +2773,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return param; } - public static void main(String[] args) { - String material_barcode = "123123-1"; - String split = material_barcode.split("-")[0]; - System.out.println(split); - } @Override public JSONObject getBoxInfo(JSONObject param) { String material_barcode = param.getString("material_barcode"); @@ -2990,4 +3047,111 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("forceMove返回参数:---------------------------------------------{}", result.toString()); return result; } + + @Override + public JSONObject acsRequestPoint(JSONObject param) { + log.info("acsRequestPoint输入参数为--------------------------:" + param.toString()); + JSONObject result = new JSONObject(); + // task_code、type + String type = param.getString("type"); + String taskCode = param.getString("task_code"); + SchBaseTask task = taskService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_code, taskCode) + .eq(SchBaseTask::getIs_delete, "0")); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("任务号【" + taskCode + "】对应的任务找不到!"); + } + String targetPoint = ""; + boolean updateFlag = false; + if ("1".equals(type)) { + if (task.getPoint_code1().contains("QHD")) { + // 请求取货 + String deviceCode = task.getPoint_code2(); + BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); + JSONObject requestParam = JSONObject.parseObject(task.getRequest_param()); + String qzzSize = requestParam.getString("qzz_size"); + // 获取气涨轴缓存没有任务的点位 + List shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize, + startPoint.getQzz_generation(), startPoint.getPoint_location()); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位"); + } + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + targetPoint = shafttubeivt.getPoint_code(); + // 修改任务 + task.setPoint_code1(targetPoint); + task.setRemark("取货请求成功"); + task.setUpdate_time(DateUtil.now()); + updateFlag = true; + } else { + targetPoint = task.getPoint_code1(); + } + } + if ("2".equals(type)) { + if (task.getPoint_code2().contains("FHD")) { + // 请求放货 + // 穿拔轴点位 + String deviceCode = task.getPoint_code1(); + BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); + JSONObject requestParam = JSONObject.parseObject(task.getRequest_param()); + String qzzSize = requestParam.getString("qzz_size"); + // 临时存放气涨轴尺寸 + startPoint.setQzz_size(qzzSize); + // 获取空位 + List shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); + } + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + targetPoint = shafttubeivt.getPoint_code(); + // 修改任务 + task.setPoint_code2(targetPoint); + task.setRemark("放货请求成功"); + task.setUpdate_time(DateUtil.now()); + updateFlag = true; + } else { + targetPoint = task.getPoint_code2(); + } + } + if ("3".equals(type)) { + if (task.getPoint_code2().contains("FHD")) { + // 请求放货 + // 穿拔轴点位 + String deviceCode = task.getPoint_code1(); + BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); + JSONObject requestParam = JSONObject.parseObject(task.getRequest_param()); + String qzzSize = requestParam.getString("qzz_size"); + if (ObjectUtil.isEmpty(qzzSize)) { + throw new BadRequestException("气涨轴规格不能为空!"); + } + String qzz= qzzSize.substring(qzzSize.length() - 3); + String[] split = qzz.split("-"); + String size = split[0]; + String qzz_generation = split[1]; + + // 获取空位 + List shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation,"0"); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); + } + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + targetPoint = shafttubeivt.getPoint_code(); + // 修改任务 + task.setPoint_code2(targetPoint); + task.setRemark("放货请求成功"); + task.setUpdate_time(DateUtil.now()); + updateFlag = true; + } else { + targetPoint = task.getPoint_code2(); + } + } + if (updateFlag) { + taskService.updateById(task); + } + result.put("status", HttpStatus.OK.value()); + result.put("device_code", targetPoint); + result.put("message", "反馈成功!"); + log.info("acsRequestPoint输出参数为--------------------------:" + result.toString()); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java index 682d61d52..a0314833f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java @@ -15,9 +15,11 @@ import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.A; import org.nl.b_lms.pdm.info.dao.PdmBiContainerinfo; 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; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; +import org.nl.common.enums.SpecEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; @@ -28,6 +30,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + /** * LMS系统为客户端,MES为服务端 */ @@ -948,7 +954,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { param.put("QuanlityInBox", num); param.put("BoxWeight", box_weight); param.put("ContainerList", rows); - + List list = new ArrayList<>(); try { String resultMsg = HttpRequest.post(url) .body(String.valueOf(param)) @@ -957,6 +963,11 @@ public class LmsToMesServiceImpl implements LmsToMesService { result = JSONObject.parseObject(resultMsg); IpdmBiSubpackagerelationService subpackagerelationService = SpringContextHolder.getBean(IpdmBiSubpackagerelationService.class); JSONArray array = result.getJSONArray("RTDAT"); + for (int i = 0; i < rows.size(); i++) { + JSONObject item = rows.getJSONObject(i); + String containerName = item.getString("ContainerName"); + list.add(containerName); + } if (ObjectUtil.isNotEmpty(array)) { for (int i = 0; i < array.size(); i++) { JSONObject row = array.getJSONObject(i); @@ -966,15 +977,13 @@ public class LmsToMesServiceImpl implements LmsToMesService { } } log.info("momBoxPackageSubmit接口输出参数为:-------------------" + result.toString()); - - String RTYPE = result.getString("RTYPE"); if ("E".equals(RTYPE)) { throw new BadRequestException(result.getString("RTMSG")); } - - + PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.TRUE,null,list); } catch (Exception e) { + PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.FALSE,e.getMessage(),list); throw new BadRequestException("MES提示错误:" + e.getMessage()); } return result; @@ -988,6 +997,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { String box_no = param.getString("box_no"); String box_weight = param.getString("box_weight"); + List containerName = param.getObject("container_name", List.class); if (StrUtil.isEmpty(box_no)) { throw new BadRequestException("木箱号不能为空!"); @@ -1017,14 +1027,23 @@ public class LmsToMesServiceImpl implements LmsToMesService { row1.put("DataValue","true"); row1.put("DataCollectionDefId","001c61800000004f"); row1.put("DataCollectionDefName","PACKAGE"); - row1.put("DataCollectionDefName","PACKAGE"); - rows.add(row1); - row1.put("DataPointName","信息核对准确"); - rows.add(row1); - row1.put("DataPointName","木箱是否防护"); rows.add(row1); + JSONObject row2 = new JSONObject(); + row2.put("DataPointName","信息核对准确"); + row2.put("DataType","7"); + row2.put("DataValue","true"); + row2.put("DataCollectionDefId","001c61800000004f"); + row2.put("DataCollectionDefName","PACKAGE"); + rows.add(row2); + JSONObject row3 = new JSONObject(); + row3.put("DataPointName","木箱是否防护"); + row3.put("DataType","7"); + row3.put("DataValue","true"); + row3.put("DataCollectionDefId","001c61800000004f"); + row3.put("DataCollectionDefName","PACKAGE"); + rows.add(row3); param.put("DataPoints", rows); - + log.info("BoxDataCollectionSubmit2接口请求参数为:-------------------" + param.toString()); try { String resultMsg = HttpRequest.post(url) .body(String.valueOf(param)) @@ -1035,11 +1054,13 @@ public class LmsToMesServiceImpl implements LmsToMesService { String RTYPE = result.getString("RTYPE"); if ("E".equals(RTYPE)) { - throw new BadRequestException(result.getString("RTMSG")); + throw new BadRequestException("MES提示错误:" +result.getString("RTMSG")); } } catch (Exception e) { - throw new BadRequestException("MES提示错误:" + e.getMessage()); + PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.FALSE,e.getMessage(),containerName); + throw new BadRequestException("MES错误:" + e.getMessage()); } + PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.TRUE,null,containerName); return result; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java index 5f30db8cc..ebc038baa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -1714,7 +1714,7 @@ public class MesToLmsServiceImpl implements MesToLmsService { if (ObjectUtil.isEmpty(Type)) { throw new BadRequestException("传入的类型不能为空!"); } - + //表处设备表 JSONObject device_jo = WQLObject.getWQLObject("st_ivt_stpointivt").query("ext_code = '" + ResourceName + "'").uniqueResult(0); if (ObjectUtil.isEmpty(device_jo)) { throw new BadRequestException("未查询到[" + ResourceName + "]应的表处机设备!"); @@ -1742,10 +1742,14 @@ public class MesToLmsServiceImpl implements MesToLmsService { form.put("acs_task_type", "3"); } else { //取满取空放满放空 + //满轴 form.put("point_code1", jsonCoolIvt.getString("full_point_code")); + //放满 form.put("point_code2", device_jo.getString("up_point_code") + "_M"); + //取空 form.put("point_code3", device_jo.getString("up_point_code") + "_K"); //判断对应空轴点位是否为空,为空用当前点位,不为空查询其他点位 + //01没有空轴 if (jsonCoolIvt.getString("empty_point_status").equals("01")) { form.put("point_code4", jsonCoolIvt.getString("empty_point_code")); } else { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/szls/service/impl/LmsToBigScreenServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/szls/service/impl/LmsToBigScreenServiceImpl.java index dd2fa72cb..55ff4175d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/szls/service/impl/LmsToBigScreenServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/szls/service/impl/LmsToBigScreenServiceImpl.java @@ -4,8 +4,12 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; +import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.common.utils.MapOf; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -16,8 +20,13 @@ import org.nl.wms.sch.manage.AutoQueryProudDayData; import org.nl.wms.sch.tasks.URLEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -26,6 +35,8 @@ public class LmsToBigScreenServiceImpl implements LmsToBigScreenService { @Autowired private final WmsToAcsService wmsToAcsService; + @Autowired + private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService; @Override public JSONObject getDeviceInfo(JSONObject jo) { @@ -59,50 +70,52 @@ public class LmsToBigScreenServiceImpl implements LmsToBigScreenService { @Override public JSONArray getStructInfo(JSONObject jo) { - JSONArray rows = WQLObject.getWQLObject("st_ivt_structattr").query("sect_code IN ('ZC01','KTP01','ZZ01','PD01')").getResultJSONArray(0); + List rows = ipdmBiSubpackagerelationService.getStructInfoBySZLS(); JSONArray data = new JSONArray(); + List boxs = new ArrayList<>(); + for (JSONObject row : rows) { + String box = row.getString("storagevehicle_code"); + if (!StringUtils.isEmpty(box) && box.contains("MX")){ + boxs.add(box); + } + } + List list = ipdmBiSubpackagerelationService.list(new QueryWrapper() + .in("package_box_sn", boxs) + .select("package_box_sn","container_name","product_description", "sale_order_name", "quanlity_in_box","box_weight", "net_weight")); + Map> collect = list.stream().filter(a->StringUtils.isNotEmpty(a.getPackage_box_sn())).collect(Collectors.groupingBy(item -> item.getPackage_box_sn())); for (int i = 0; i < rows.size(); i++) { - JSONObject row = rows.getJSONObject(i); - JSONObject json = new JSONObject(); - String struct_code = row.getString("struct_code"); - json.put("struct_code", struct_code); - json.put("struct_status", "0"); - String storagevehicle_code = row.getString("storagevehicle_code"); - if (StrUtil.isNotEmpty(storagevehicle_code)) { - json.put("storagevehicle_code", storagevehicle_code); - if (storagevehicle_code.startsWith("KTP")) { - json.put("struct_status", "1"); - } - String struct_id = row.getString("struct_id"); - JSONArray array = WQL - .getWO("QST_STRUCTATTR") - .addParamMap(MapOf.of("struct_id", struct_id, "flag", "1")) - .process() - .getResultJSONArray(0); - // 计算合计 - JSONObject object = array.getJSONObject(0); - if (ObjectUtil.isNotEmpty(object.getString("net_weight"))) { - BigDecimal container_weight = array.stream().map(info -> ((JSONObject) info).getBigDecimal("net_weight")).reduce(BigDecimal.ZERO, BigDecimal::add); - json.put("container_weight", container_weight); - json.put("product_description", object.getString("product_description")); - json.put("sale_order_name", object.getString("sale_order_name")); - json.put("quanlity_in_box", object.getString("quanlity_in_box")); - json.put("box_weight", object.getString("box_weight")); - json.put("struct_status", "2"); - JSONArray detail = new JSONArray(); - for (int j = 0; j < array.size(); j++) { - JSONObject dtl = array.getJSONObject(j); - String container_name = dtl.getString("container_name"); - String net_weight = dtl.getString("net_weight"); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("container_name", container_name); - jsonObject.put("net_weight", net_weight); - detail.add(jsonObject); + JSONObject row = rows.get(i); + JSONObject item = new JSONObject(); + item.put("struct_code", row.getString("struct_code")); + item.put("struct_status", "0"); + String box = row.getString("storagevehicle_code"); + if (!StringUtils.isEmpty(box)){ + item.put("storagevehicle_code", box); + if (box.startsWith("KTP")) { + item.put("struct_status", "1"); + }else { + List subs = collect.get(box); + if (!CollectionUtils.isEmpty(subs) && StringUtils.isNotEmpty(subs.get(0).getNet_weight())){ + BigDecimal container_weight = subs.stream().map(info -> new BigDecimal(info.getNet_weight())) + .reduce(BigDecimal.ZERO, BigDecimal::add); + item.put("container_weight", container_weight); + item.put("product_description", subs.get(0).getProduct_description()); + item.put("sale_order_name", subs.get(0).getSale_order_name()); + item.put("quanlity_in_box", subs.get(0).getQuanlity_in_box().toString()); + item.put("box_weight", subs.get(0).getBox_weight()); + item.put("struct_status", "2"); + JSONArray detail = new JSONArray(); + for (PdmBiSubpackagerelation dtl : subs) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("container_name", dtl.getContainer_name()); + jsonObject.put("net_weight", dtl.getNet_weight().toString()); + detail.add(jsonObject); + } + item.put("detail", detail); } - json.put("detail", detail); } } - data.add(json); + data.add(item); } return data; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java index 50365855b..7ee477412 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java @@ -139,6 +139,7 @@ public class BakingServiceImpl implements BakingService { jsonMap.put("point_location", jsonPointZc.getString("point_location")); JSONArray hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0); JSONObject jsonHotIvt = new JSONObject(); + log.debug("获取温度幅度hot_rows:"+hot_rows); for (int i = 0; i < hot_rows.size(); i++) { JSONObject hot_row = hot_rows.getJSONObject(i); String point_code = hot_row.getString("point_code"); @@ -150,6 +151,7 @@ public class BakingServiceImpl implements BakingService { if (ObjectUtil.isNotEmpty(point_temperature)) { if (point_temperature.equals(temperature)) { jsonHotIvt = hot_row; + log.debug("获取满足温度幅度jsonHotIvt:"+jsonHotIvt); break; } } @@ -560,7 +562,7 @@ public class BakingServiceImpl implements BakingService { public JSONObject getJsonObject(String product_area, JSONObject point_code2_jo, String temperature) { if (ObjectUtil.isEmpty(point_code2_jo)) { - throw new BadRequestException("暂无满足条件的烘箱位置!"); + throw new BadRequestException("烘箱对接没有可用位置!"); } JSONObject jsonMap = new JSONObject(); jsonMap.put("flag", "1"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java index e38436f12..26e118d65 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java @@ -265,7 +265,7 @@ public class FeedingServiceImpl implements FeedingService { public JSONObject handleConfirm(JSONObject form) { String point_code = form.getString("point_code"); String next_point_code = form.getString("next_point_code"); - + String container_name = form.getString("container_name"); if (StrUtil.isEmpty(point_code)) { throw new BadRequestException("输入的起点不能为空!"); } @@ -288,6 +288,57 @@ public class FeedingServiceImpl implements FeedingService { if (!StrUtil.equals(cool_jo.getString("full_point_status"), "02")) { throw new BadRequestException("该点位上不存在母卷!"); } + if (!StrUtil.equals(cool_jo.getString("container_name"), container_name)) { + throw new BadRequestException("该点位:"+point_code+"不存在母卷:"+container_name); + } + JSONObject result = new JSONObject(); + result.put("message", "操作成功!"); + //B1烘箱外边的冷却点 + if (cool_jo.getString("product_area").equals("B1") && cool_jo.getString("point_type").equals("1")) { + JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + next_point_code + "' and product_area='"+cool_jo.getString("product_area")+"'").uniqueResult(0); + if (ObjectUtil.isEmpty(cut_jo)) { + cut_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + next_point_code + "' and product_area='"+cool_jo.getString("product_area")+"' and point_type in ('1','6')").uniqueResult(0); + } + if (ObjectUtil.isEmpty(cut_jo)) { + throw new BadRequestException("请扫描B1车间分切机满轴点位、分切缓存位满轴点位、生箔冷却缓存位满轴点位做为终点!"); + } + //创建AGV任务 + JSONObject jo = new JSONObject(); + if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) { + jo.put("point_code1", cool_jo.getString("full_point_code")); + jo.put("point_code2", cut_jo.getString("full_point_code")); + jo.put("material_code",cool_jo.getString("container_name")); + jo.put("product_area", cut_jo.getString("product_area")); + jo.put("task_type", "010302"); + } else { + jo.put("point_code1", cool_jo.getString("full_point_code")); + jo.put("point_code2", cut_jo.getString("full_point_code")); + jo.put("point_code3", cut_jo.getString("empty_point_code")); + // 2.找冷却区空货位 + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("product_area", cut_jo.getString("product_area")); + map.put("point_location", "0"); + + JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); + // 如果为空 + if (ObjectUtil.isEmpty(jsonCooIvt)) { + map.put("point_location", "1"); + jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); + } + if (ObjectUtil.isEmpty(jsonCooIvt)) { + throw new BadRequestException("B1车间冷却区空位不足"); + } + jo.put("point_code4", jsonCooIvt.getString("empty_point_code")); + jo.put("material_code", cool_jo.getString("container_name")); + jo.put("product_area", cut_jo.getString("product_area")); + jo.put("task_type", "010301"); + } + AbstractAcsTask task = new CoolCutTask(); + task.createTask(jo); + + return result; + } if (cool_jo.getString("product_area").equals("B1") && cool_jo.getString("point_type").equals("3")) { if (ObjectUtil.isNotEmpty(cool_jo) && cool_jo.getString("point_type").equals("4")) { @@ -384,7 +435,8 @@ public class FeedingServiceImpl implements FeedingService { OutHotTask outHotTask = new OutHotTask(); String task_id = outHotTask.createTask(task_jo); } - } else { + } + else { JSONObject jo = new JSONObject(); //查询该分切机对应的点位 JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + next_point_code + "'").uniqueResult(0); @@ -467,7 +519,6 @@ public class FeedingServiceImpl implements FeedingService { WQLObject.getWQLObject("ST_IVT_CoolRegionIO").insert(jsonCool); } - JSONObject result = new JSONObject(); result.put("message", "操作成功!"); return result; } @@ -522,8 +573,17 @@ public class FeedingServiceImpl implements FeedingService { if (type.equals("2")) { //查询对应的分切点位是否存在 JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + point_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(cut_jo)) { - throw new BadRequestException("请输入或者扫码分切区域的满轴点位!"); + + //B1支持从分切上料暂存架送回母卷 + if(point_code.contains("B1_FQZC")){ + cut_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(cut_jo)) { + throw new BadRequestException("请输入或者扫码分切区域的满轴点位!"); + } + }else{ + if (ObjectUtil.isEmpty(cut_jo)) { + throw new BadRequestException("请输入或者扫码分切区域的满轴点位!"); + } } if (StrUtil.equals("01", cut_jo.getString("full_point_status"))) { throw new BadRequestException("该点位库存状态不存在满轴!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java index 19c41e750..27bb52e8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java @@ -175,7 +175,7 @@ public class RawFoilServiceImpl implements RawFoilService { if (jsonSb.getString("product_area").equals("B1")) { // 2.根据就近原则查对应空卷轴 JSONObject map = new JSONObject(); - map.put("flag", "6"); + map.put("flag", "601"); map.put("product_area", jsonSb.getString("product_area")); map.put("point_location", jsonSb.getString("point_location")); // 查找冷却区空轴位状态是空轴的点位 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql index 97223b505..b0740b142 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql @@ -305,7 +305,7 @@ IF 输入.flag = "6" FROM ST_IVT_CoolPointIvt ivt WHERE - ivt.empty_point_status = '02' + ivt.empty_point_status = '01' AND ivt.is_used = '1' AND NOT EXISTS ( @@ -333,3 +333,39 @@ IF 输入.flag = "6" ENDQUERY ENDIF + IF 输入.flag = "601" + QUERY + SELECT + ivt.* + FROM + ST_IVT_CoolPointIvt ivt + WHERE + ivt.empty_point_status = '02' + AND ivt.point_type = '1' + AND + ivt.is_used = '1' + AND NOT EXISTS ( + SELECT + * + FROM + sch_base_task + WHERE + ( point_code1 = ivt.empty_point_code OR point_code4 = ivt.empty_point_code ) + AND task_status < '07' + AND is_delete = '0' + ) + + OPTION 输入.product_area <> "" + ivt.product_area = 输入.product_area + ENDOPTION + + OPTION 输入.point_location <> "" + ivt.point_location = 输入.point_location + ENDOPTION + + order by ivt.point_code ASC + + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/PrintService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/PrintService.java index 79d34451c..8441eaddd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/PrintService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/PrintService.java @@ -33,6 +33,16 @@ public interface PrintService { */ JSONObject customerPrint2(JSONObject whereJson); + + + /** + * 二期贴标数据组织 + * + * @param whereJson / + * @return JSONObject / + */ + JSONObject customerPrintBY2(JSONObject whereJson); + /** * 获取单据类型 * diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/PrintServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/PrintServiceImpl.java index 37b0ea539..3a815afca 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/PrintServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/PrintServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.pda.st.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; @@ -319,6 +320,147 @@ public class PrintServiceImpl implements PrintService { return jo; } + @Override + public JSONObject customerPrintBY2(JSONObject whereJson) { + JSONObject jo = new JSONObject(); + WQLObject printTab = WQLObject.getWQLObject("pdm_bi_printinfo"); + WQLObject custTab = WQLObject.getWQLObject("md_cs_customerbase"); + WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); + + String box_no = whereJson.getString("box_no"); + + JSONObject box_jo = subTab.query("package_box_sn = '" + box_no + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(box_jo)) { + throw new BadRequestException("未查询到木箱相关信息!"); + } + //组织木箱打印信息 + //箱号 + String package_box_sn = box_jo.getString("package_box_sn"); + + String package_box_sn1 = ""; + String package_box_sn2 = ""; + try { + // 木箱1 + package_box_sn1 = package_box_sn.substring(0, package_box_sn.indexOf("@") + 1); + // 木箱2 + package_box_sn2 = package_box_sn.substring(package_box_sn.indexOf("@") + 1, package_box_sn.length()); + } catch (Exception e) { + package_box_sn2 = package_box_sn; + } + //订单号 + String sale_order_name = box_jo.getString("sale_order_name"); + //品名 + String product_description = box_jo.getString("product_description"); + //物料号 + String product_name = box_jo.getString("product_name"); + //规格: 厚度*幅宽 + String width = box_jo.getString("thickness_request") + "*" + box_jo.getString("width_standard"); + + //入库日期:取此箱子中最晚的入库日期 + JSONObject jsonInbound = subTab.query("package_box_sn = '" + box_no + "' order by date_of_fg_inbound DESC").uniqueResult(0); + String date_of_FG_inbound = jsonInbound.getString("date_of_fg_inbound"); + + String box_weight = NumberUtil.round(box_jo.getString("box_weight"), 2).toString(); + //生产日期:取此箱子中最晚的生产日期 + JSONObject jsonProduction = subTab.query("package_box_sn = '" + box_no + "' order by date_of_production DESC").uniqueResult(0); + String date_of_production = jsonProduction.getString("date_of_production"); + //批号 + String pcsn = jsonProduction.getString("date_of_production"); + if (ObjectUtil.isNotEmpty(pcsn)) { + pcsn = pcsn.replaceAll("[[\\s-:punct:]]", ""); + } + //卷数 + String quanlity_in_box = box_jo.getString("quanlity_in_box"); + //保质期 + String quality_guaran_period = box_jo.getString("quality_guaran_period"); + //检验员 + String nspector = "1"; + //储存条件 + String storage_conditions = ""; + + // 根据客户条件选择对应模板 + JSONObject jsonCust = custTab.query("cust_code = '" + box_jo.getString("customer_name") + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonCust)) { + throw new BadRequestException("客户不存在或未启用"); + } + + if (ObjectUtil.isEmpty(jsonCust.getString("bz_print_no"))) { + throw new BadRequestException("请先设置客户打印模板"); + } + String bz_print_no = jsonCust.getString("bz_print_no"); + + double weight = 0; + JSONArray rows = WQL.getWO("PDA_ST_01").addParam("flag", "5").addParam("box_no", box_no).process().getResultJSONArray(0); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + weight += row.getDoubleValue("net_weight"); + } + + // 生成txt文件 + JSONObject jsonPrint = printTab.query("print_id = '" + whereJson.getString("print_type") + "'").uniqueResult(0); + //10.1.3.21/LMSPrinter/ + String time = String.valueOf(DateUtil.current()); + String filePath = jsonPrint.getString("print_route") +time+"外包标签.txt"; + FileWriter fw = null; + try { + File file = new File(filePath); + if (!file.exists()) { + file.createNewFile(); + } + fw = new FileWriter(filePath); + OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); + BufferedWriter bw = new BufferedWriter(write); + bw.write("bz_print_no,package_box_sn1,package_box_sn2,sale_order_name,product_description,product_name,width,pcsn,date_of_FG_inbound,box_weight,date_of_production,quanlity_in_box,quality_guaran_period,nspector,storage_conditions,weight,customer_name,customer_description,thickness,mass_per_unit_area,length,box_type,sap_pcsn,box_length,box_width,box_high,material_type,joint_type\n"); + + bw.write(bz_print_no + "," + + package_box_sn1 + "," + + package_box_sn2 + "," + + sale_order_name + "," + + product_description + "," + + product_name + "," + + width + "," + + pcsn + "," + + date_of_FG_inbound + "," + + box_weight + "KG," + + date_of_production + "," + + quanlity_in_box + "," + + quality_guaran_period + "," + + nspector + "," + + storage_conditions + "," + + NumberUtil.round(weight, 2).toString() + "KG," + + box_jo.getString("customer_name") + "," + + box_jo.getString("customer_description") + "," + + box_jo.getString("thickness") + "," + + box_jo.getString("mass_per_unit_area") + "," + + NumberUtil.round(box_jo.getString("length"), 2) + "," + + box_jo.getString("box_type") + "," + + box_jo.getString("sap_pcsn") + "," + + box_jo.getString("box_length") + "," + + box_jo.getString("box_width") + "," + + box_jo.getString("box_high") + "," + + box_jo.getString("material_type") + "," + + NumberUtil.round(box_jo.getString("joint_type"),2) + "\n" + ); + + bw.close(); + jo.put("message", "打印成功!"); + log.info(DateUtil.now()+"打印成功!"); + } catch (Exception e) { + jo.put("message", "打印失败!" + e.getMessage()); + log.info(DateUtil.now()+"1打印失败!"); + } finally { + try { + if(fw != null){ + fw.close(); + } + } catch (Exception e) { + jo.put("message", "打印失败!" + e.getMessage()); + log.info(DateUtil.now()+"2打印失败!"); + } + } + return jo; + } + @Override public JSONObject printType(JSONObject whereJson) { JSONArray rows = WQL.getWO("PDA_ST_01").addParam("flag", "6").process().getResultJSONArray(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/rest/SubpackagerelationController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/rest/SubpackagerelationController.java index 88c2539be..f8e2b3e84 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/rest/SubpackagerelationController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/bi/rest/SubpackagerelationController.java @@ -1,6 +1,7 @@ package org.nl.wms.pdm.bi.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -8,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.logging.annotation.Log; import org.nl.wms.pdm.bi.service.SubpackagerelationService; import org.nl.wms.pdm.bi.service.dto.SubpackagerelationDto; +import org.nl.wms.sch.manage.AutoSendFeiShu; import org.nl.wms.util.TranUtil; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -73,13 +75,10 @@ public class SubpackagerelationController { public void download(@RequestParam Map map, HttpServletResponse response) throws IOException { subpackagerelationService.download(map, response); } - @Log("导出数据") - @GetMapping(value = "/tranTest") - public void tranTest(@RequestBody JSONObject param) throws IOException { - TranUtil.openTransaction((req,callback)->{ - - return null; - },new JSONArray()); + @PostMapping (value = "/sendMsg") + @SaIgnore + public void tranTest(@RequestBody JSONObject param) { + AutoSendFeiShu.sendFeiShuMsg(param.getString("u"),param.getString("m"),param.getString("t")); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java index 09c82fcae..19497e755 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java @@ -29,7 +29,6 @@ public class AcsUtil { return jsonObject; } - @InterfaceLog public JSONObject notifyAcs3(String api, JSONArray list) { log.info("下发ACS参数----------------------------------------+" + api + ",---" + list.toString()); //判断是否连接ACS系统 @@ -158,4 +157,37 @@ public class AcsUtil { } return result; } + public static JSONObject notifyAcsObject(String api, JSONObject param) { + //判断是否连接ACS系统 + String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_connect_acs").getValue(); + JSONObject result = new JSONObject(); + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接ACS!"); + result.put("data", new JSONObject()); + return result; + } + String product_area = param.getString("product_area"); + String acs_url = URLEnum.find(product_area); + if (StrUtil.isEmpty(acs_url)) { + log.info(product_area); + throw new BadRequestException("未查询到区域对应的acs地址!"); + } + String url = acs_url + api; + try { + String resultMsg = HttpRequest.post(url) + .body(JSONObject.toJSONString(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("ACS相应参数----------------------------------------+" + api + ",---" + result.toString()); + } catch (Exception e) { + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + } + if (!StrUtil.equals(result.getString("status"), "200")) { + throw new BadRequestException(result.getString("message")); + } + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java index d1eef376f..ecc4992d0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java @@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.pdm.info.dao.PdmBiContainerinbound; +import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; @@ -19,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; public class ComPareUtil { @@ -67,10 +70,17 @@ public class ComPareUtil { if (!(NumberUtil.sub(box_weight, weight_sys) <= current_weight && NumberUtil.add(box_weight, weight_sys) >= current_weight)) { compaer_result = false; } - + //查询子卷入库配置 + IPdmBiContainerinboundService iPdmBiContainerinboundService = SpringContextHolder.getBean(IPdmBiContainerinboundService.class); + PdmBiContainerinbound pdmBiContainerinbound = iPdmBiContainerinboundService.getOne(new QueryWrapper() + .eq("box", sub.getPackage_box_sn())); JSONObject json = new JSONObject(); json.put("compaer_result", compaer_result); json.put("box_no", sub.getPackage_box_sn()); + json.put("box_weight", sub.getBox_weight().intValue()); + json.put("current_weight", new BigDecimal(current_weight).intValue()); + json.put("containers", list.stream().map(a->a.getContainer_name()).collect(Collectors.toList())); + json.put("inbound", (pdmBiContainerinbound != null ? pdmBiContainerinbound.getInbound():false)); return json; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index dafefac1a..e51dc2e1e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -120,6 +120,11 @@ public abstract class AbstractAcsTask { * */ public JSONObject immediateNotifyAcs(String task_id) { + try { + Thread.sleep(1000); + }catch (Exception ex){ + + } List taskList; if (StringUtils.isEmpty(task_id)){ taskList = this.schedule(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java new file mode 100644 index 000000000..ef6db9464 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java @@ -0,0 +1,76 @@ +package org.nl.wms.sch.manage; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +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.auto.AutoSendToZxq; +import org.nl.modules.wql.WQL; +import org.nl.wms.sch.tasks.InCoolIvtTask; +import org.nl.wms.sch.tasks.InHotTask; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @Author: lyd + * @Date: 2025/2/21 + */ +@Slf4j +@Component +public class AutoIntoHotCacheTask { + private final String THIS_CLASS = AutoIntoHotCacheTask.class.getName(); + @Autowired + private IschBaseTaskService taskService; + @Autowired + private RedissonClient redissonClient; + + @SneakyThrows + public void run() { + log.info("定时对B1入暂存...."); + RLock lock = redissonClient.getLock(THIS_CLASS); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + List tasks = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_type, "010206") + .eq(SchBaseTask::getIs_delete, "0") + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); + for (SchBaseTask task : tasks) { + + JSONObject cache_param = JSONObject.parseObject(task.getRemark()); + JSONObject cache_jo = WQL.getWO("PDA_COOLIN").addParamMap(cache_param).process().uniqueResult(0); + if (ObjectUtil.isEmpty(cache_jo) || ObjectUtil.isEmpty(cache_jo.getString("point_code"))) { + log.info("烘箱对接位:{} 没找到暂存位!", task.getPoint_code1()); + return; + } + new InHotTask().immediateNotifyAcs(task.getTask_id()); + + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setPoint_code2(cache_jo.getString("point_code")); + task.setRemark("-"); + task.setUpdate_time(DateUtil.now()); + task.setTask_type("010204"); + taskService.updateById(task); + } + } else { + log.info("定时对B1入暂存任务被锁住。"); + } + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } + +} \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSaveIvtExcel.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSaveIvtExcel.java index 5b85cf98d..d0de8d4f0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSaveIvtExcel.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSaveIvtExcel.java @@ -116,7 +116,8 @@ public class AutoSaveIvtExcel { path, type, "", - DateUtil.now()); + DateUtil.now() + ); iToolLocalStorageService.save(localStorage); workbook.write(fileOut); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java index 72a3375f1..99143e89a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java @@ -47,7 +47,35 @@ public class AutoSendFeiShu { } } } - + public static void sendFeiShuMsg(String ul,String m,String t){ + JSONObject jo = new JSONObject(); + String[] u = ul.split(","); + JSONArray UserList = new JSONArray(); + if (u.length > 0) { + for (String s : u) { + JSONObject param = new JSONObject(); + param.put("User", s); + UserList.add(param); + } + } + jo.put("SendType", "L"); + jo.put("Title", t); + jo.put("WarnType", "string"); + jo.put("MessageType", "P"); + jo.put("UserList", UserList); + jo.put("Message", m); + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("FEISHU_URL").getValue(); + String api = "/FeiShuNoticesWebApi/CommunalApi"; + url = url + api; + try { + log.info("飞书输 ru参数为:-------------------" + String.valueOf(jo)); + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(jo)) + .execute().body(); + } catch (Exception e) { + log.info(e.getMessage()); + } + } void sendInfo(JSONArray device_rows) { WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus"); for (int i = 0; i < device_rows.size(); i++) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java index 593800237..7a47aa6ba 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.service; +import org.nl.common.TableDataInfo; import org.springframework.data.domain.Pageable; import java.util.Map; @@ -18,7 +19,7 @@ public interface TaskService { * @param page 分页参数 * @return Map */ - Map queryAll(Map whereJson, Pageable page); + Map queryAll(Map whereJson, Pageable page); /** * 任务操作 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index efcc5e1ea..e33475460 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.FileUtil; @@ -23,10 +24,13 @@ import org.nl.wms.sch.service.dto.RegionDto; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; +import java.util.function.BiConsumer; +import java.util.stream.Collectors; /** * @author ldjun @@ -52,20 +56,29 @@ public class PointServiceImpl implements PointService { map.put("point_type", whereJson.get("point_type")); Object name = whereJson.get("name"); if (ObjectUtil.isNotEmpty(name)) { - String search = (String) name; - String[] split = search.split("_"); - name = String.join("\\_", split); - map.put("name", name); + + map.put("name", "%"+name+"%"); } JSONObject json = WQL.getWO("QSCH_BASE_POINT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "point_code asc"); JSONArray content = json.getJSONArray("content"); + if (CollectionUtils.isEmpty(content)){ + return json; + } + List regionIds = new ArrayList<>(); + for (int i = 0; i < content.size(); i++) { + JSONObject object = content.getJSONObject(i); + String region_id = object.getString("region_id"); + regionIds.add(region_id); + } + List regionDtos = regionService.queryAll("region_id in ('" + regionIds.stream().collect(Collectors.joining(",")) + "')"); + Map attrMap = regionDtos.stream().collect(HashMap::new, (m, o) -> m.put(o.getRegion_id(), o), HashMap::putAll); JSONArray res = new JSONArray(); for (int i = 0; i < content.size(); i++) { JSONObject object = content.getJSONObject(i); Long region_id = object.getLong("region_id"); String point_status = object.getString("point_status"); String point_type = object.getString("point_type"); - RegionDto regionDto = regionService.findById(region_id); + RegionDto regionDto = attrMap.get(region_id); String point_status_explain = regionDto.getPoint_status_explain(); String point_type_explain = regionDto.getPoint_type_explain(); // 获取点位状态名称 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java index 42cb0ee04..50d3d58ff 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -8,9 +8,13 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.nl.common.TableDataInfo; +import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -20,6 +24,7 @@ import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.basedata.master.service.dto.ClassstandardDto; import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.TaskService; import org.redisson.api.RLock; @@ -50,7 +55,7 @@ public class TaskServiceImpl implements TaskService { private final RedissonClient redissonClient; @Override - public Map queryAll(Map form, Pageable page) { + public Map queryAll(Map form, Pageable page) { HashMap map = new HashMap<>(); map.put("flag", "1"); @@ -68,7 +73,7 @@ public class TaskServiceImpl implements TaskService { map.put("task_status", task_status.replace("-1", "")); } if (StrUtil.isNotEmpty(whereJson.getString("task_code"))) { - map.put("task_code", "%" + whereJson.getString("task_code") + "%"); + map.put("task_code", whereJson.getString("task_code")); } if (StrUtil.isNotEmpty(whereJson.getString("point_code1"))) { map.put("point_code1", "%" + whereJson.getString("point_code1") + "%"); @@ -102,17 +107,7 @@ public class TaskServiceImpl implements TaskService { if (ObjectUtil.isNotEmpty(in_area_id)) { map.put("in_area_id", in_area_id); } - JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); - JSONArray content = json.getJSONArray("content"); - JSONArray res = new JSONArray(); - - //点位基础表【SCH_BASE_Point】 - WQLObject schBasePointService = WQLObject.getWQLObject("SCH_BASE_Point"); - for (int i = 0; i < content.size(); i++) { - JSONObject taskObj = content.getJSONObject(i); - res.add(taskObj); - } - json.put("content", res); + JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "task_id desc"); return json; } @@ -124,70 +119,37 @@ public class TaskServiceImpl implements TaskService { boolean tryLock = lock.tryLock(0,20, TimeUnit.SECONDS); try { if (tryLock) { - String method_name = MapUtil.getStr(map, "method_name"); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); - if ("finish".equals(method_name)) { - //强制执行,只把任务变更成完成状态 - // 更改任务状态为完成 - HashMap hashMap = new HashMap<>(); - hashMap.put("task_status", TaskStatusEnum.FINISHED.getCode()); - hashMap.put("update_optid", SecurityUtils.getCurrentUserId()); - hashMap.put("update_optname", SecurityUtils.getCurrentUsername()); - hashMap.put("update_time", DateUtil.now()); - hashMap.put("remark", "任务被用户:" + SecurityUtils.getCurrentUsername() + "在:" + DateUtil.now() + "强制完成。"); - WQLObject.getWQLObject("SCH_BASE_Task").update(hashMap,"task_id = '" + task_id + "'"); - } else { - // 任务处理类 - String processing_class = taskObj.getString("handle_class"); - String message = ""; - - try { - Object obj = new Object(); - try { - obj = SpringContextHolder.getBean(Class.forName(processing_class)); - } catch (Exception e) { - Class clz = Class.forName(processing_class); - obj = clz.newInstance(); - } - // 调用每个任务类的method_name()强制结束方法 - Method m = obj.getClass().getMethod(method_name, String.class); - JSONObject result = (JSONObject) m.invoke(obj, task_id); - if (ObjectUtil.isEmpty(result)) { - return; - } - JSONArray arr = result.getJSONArray("errArr"); - WQLObject wo = WQLObject.getWQLObject("sch_base_task"); - if (ObjectUtil.isNotEmpty(arr)) { - for (int i = 0; i < arr.size(); i++) { - JSONObject json = arr.getJSONObject(i); - JSONObject param = new JSONObject(); - param.put("task_id", json.getString("task_id")); - param.put("remark", json.getString("message")); - wo.update(param); - } - throw new BadRequestException("任务操作失败!"); - } else { - JSONObject param = new JSONObject(); - param.put("task_id", task_id); - param.put("remark", "操作成功"); - wo.update(param); - } - } catch (InvocationTargetException e) { - if (ObjectUtil.isNull(e.getTargetException().getMessage())) { - message = e.getTargetException().toString(); - } else { - message = e.getTargetException().getMessage(); - } - throw new BadRequestException(message); - } catch (Exception e) { - e.printStackTrace(); - throw new BadRequestException(e.getMessage()); - } + String processing_class = taskObj.getString("handle_class"); + AbstractAcsTask obj = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(processing_class)); + switch (MapUtil.getStr(map, "method_name")){ + case "finish": + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); + taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "任务被用户:" + SecurityUtils.getCurrentUsername() + "在:" + DateUtil.now() + "强制完成。"); + WQLObject.getWQLObject("SCH_BASE_Task").update(taskObj); + break; + case "forceFinish": + obj.forceFinish(task_id); + break; + case "cancel": + obj.cancel(task_id); + break; + case "immediateNotifyAcs": + obj.immediateNotifyAcs(task_id); + break; } } else { throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!"); } - } finally { + }catch (BadRequestException ex){ + log.error(task_id+"手动更新任务失败:{}", ex); + WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark",DateUtil.now()+"更新"+MapUtil.getStr(map, "method_name")+"失败:"+ex.getMessage()),"task_id = '" + task_id + "'"); + throw ex; + } + finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql index 01f061771..0c3d5c549 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql @@ -78,7 +78,7 @@ point.is_used = 输入.is_used ENDOPTION OPTION 输入.name <> "" - ( point.point_code like "%" 输入.name "%" or point.point_name like "%" 输入.name "%" ) + ( point.point_code like 输入.name or point.point_name like 输入.name ) ENDOPTION ENDSELECT ENDPAGEQUERY diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql index ac19f6afb..b16ee78a2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql @@ -18,6 +18,7 @@ 输入.finished_type TYPEAS s_string 输入.task_type TYPEAS f_string 输入.in_area_id TYPEAS f_string + 输入.lk TYPEAS s_string 输入.point_code1 TYPEAS s_string 输入.point_code2 TYPEAS s_string 输入.task_code TYPEAS s_string @@ -50,61 +51,53 @@ ########################################## IF 输入.flag = "1" - PAGEQUERY - SELECT * FROM ( - SELECT - task.*, - md.class_name task_type_name, - user.person_name AS create_name1, - dict.label task_status_name, - case when task.task_type like '0105%' then 'LK' when task.task_type like '0107%' then 'LK' ELSE task.product_area end AS final_product_area - FROM - (select - tas.* - from - sch_base_task tas - where 1=1 - OPTION 输入.is_delete <> "" - tas.is_delete = 输入.is_delete - ENDOPTION - OPTION 输入.finished_type <> "" - tas.finished_type = 输入.finished_type - ENDOPTION - OPTION 输入.unFinish <> "" - tas.task_status <> '07' - ENDOPTION - OPTION 输入.task_status <> "" - find_in_set( tas.task_status, 输入.task_status) - ENDOPTION - OPTION 输入.vehicle_code <> "" - (tas.vehicle_code like 输入.vehicle_code OR tas.material_code like 输入.vehicle_code OR tas.vehicle_code2 like 输入.vehicle_code) - ENDOPTION - OPTION 输入.task_code <> "" - (tas.task_code like 输入.task_code) - ENDOPTION - OPTION 输入.point_code1 <> "" - (tas.point_code1 like 输入.point_code1) - ENDOPTION - OPTION 输入.begin_time <> "" - tas.create_time >= 输入.begin_time - ENDOPTION - OPTION 输入.end_time <> "" - tas.create_time <= 输入.end_time - ENDOPTION - ) task - LEFT JOIN md_pb_classstandard md ON task.task_type = md.class_code - LEFT JOIN sys_user user ON user.username = task.create_name - LEFT JOIN sys_dict dict ON dict.`value` = task.task_status AND dict.`code` = 'task_status' - WHERE - 1=1 - OPTION 输入.task_type <> "" - md.class_id in 输入.task_type - ENDOPTION - ) a - WHERE 1=1 - OPTION 输入.in_area_id <> "" - a.final_product_area IN 输入.in_area_id + PAGEQUERY + SELECT + task.*, + md.class_name task_type_name, + user.person_name AS create_name1, + dict.label task_status_name + FROM + sch_base_task task + LEFT JOIN md_pb_classstandard md ON task.task_type = md.class_code + LEFT JOIN sys_user user ON user.username = task.create_name + LEFT JOIN sys_dict dict ON dict.`value` = task.task_status AND dict.`code` = 'task_status' + WHERE + 1=1 + OPTION 输入.is_delete <> "" + task.is_delete = 输入.is_delete ENDOPTION + OPTION 输入.task_type <> "" + md.class_id in 输入.task_type + ENDOPTION + OPTION 输入.finished_type <> "" + task.finished_type = 输入.finished_type + ENDOPTION + OPTION 输入.unFinish <> "" + task.task_status <> '07' + ENDOPTION + OPTION 输入.task_status <> "" + find_in_set( task.task_status, 输入.task_status) + ENDOPTION + OPTION 输入.vehicle_code <> "" + (task.vehicle_code like 输入.vehicle_code OR task.material_code like 输入.vehicle_code OR task.vehicle_code2 like 输入.vehicle_code) + ENDOPTION + OPTION 输入.task_code <> "" + (task.task_code = 输入.task_code) + ENDOPTION + OPTION 输入.point_code1 <> "" + (task.point_code1 like 输入.point_code1) + ENDOPTION + OPTION 输入.begin_time <> "" + task.create_time >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + task.create_time <= 输入.end_time + ENDOPTION + OPTION 输入.in_area_id <> "" + IF(task_type like '0105%','LK',IF(task_type like '0107%','LK',ifnull(product_area,'LK'))) + IN 输入.in_area_id + ENDOPTION ENDSELECT ENDPAGEQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java index 54ac8813e..8fb2a5ff2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java @@ -205,7 +205,7 @@ public class CallEmpReelTask extends AbstractAcsTask { if (jsonTask.getString("task_type").equals("010104")) { // 校验终点是否存在 JSONObject jsonIvt2 = point_tab.query("point_code ='" + point_code4 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonIvt)) { + if (ObjectUtil.isEmpty(jsonIvt2)) { throw new BadRequestException("终点未找到可用点位:" + point_code2); } @@ -217,22 +217,46 @@ public class CallEmpReelTask extends AbstractAcsTask { cache_param.put("product_area", jsonIvt.getString("product_area")); JSONObject cache_jo = WQL.getWO("PDA_COOLIN").addParamMap(cache_param).process().uniqueResult(0); if (ObjectUtil.isEmpty(cache_jo) || ObjectUtil.isEmpty(cache_jo.getString("point_code"))) { - throw new BadRequestException("未查询到可用的冷却区暂存位!"); - } - JSONObject param = new JSONObject(); - param.put("point_code1", point_code4); - param.put("point_code2", cache_jo.getString("point_code")); - param.put("material_code", jsonTask.getString("material_code")); - param.put("product_area", jsonTask.getString("product_area")); - param.put("type", "3"); - InHotTask inHotTask = SpringContextHolder.getBean(InHotTask.class); - inHotTask.createTask(param); + // B1才创建半条任务 + if ("B1".equals(jsonTask.getString("product_area"))) { + // 创建半条任务 + JSONObject jo = new JSONObject(); + jo.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); + jo.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); + jo.put("task_type", "010206"); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + jo.put("point_code1", point_code4); + jo.put("point_code2", ""); + jo.put("material_code", jsonTask.getString("material_code")); + jo.put("product_area", jsonTask.getString("product_area")); + jo.put("handle_class", InHotTask.class.getName()); + jo.put("remark", cache_param); + jo.put("type", "3"); + jo.put("priority", "1"); + jo.put("sort_seq", "1"); + jo.put("create_time", DateUtil.now()); + jo.put("acs_task_type", "6"); + taskTab.insert(jo); + } else { + throw new BadRequestException("找不到对应的半成品缓存位"); + } + } else { + JSONObject param = new JSONObject(); + param.put("point_code1", point_code4); + param.put("point_code2", cache_jo.getString("point_code")); + param.put("material_code", jsonTask.getString("material_code")); + param.put("product_area", jsonTask.getString("product_area")); + param.put("type", "3"); + InHotTask inHotTask = SpringContextHolder.getBean(InHotTask.class); + inHotTask.createTask(param); + } // 更新点位库存状态 jsonIvt2.put("point_status", "2"); jsonIvt2.put("material_code", jsonTask.getString("material_code")); point_tab.update(jsonIvt2); } else if (jsonTask.getString("task_type").equals("010106")) { + // B2生箔 BakingServiceImpl bean = SpringContextHolder.getBean(BakingServiceImpl.class); WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表 JSONObject requestParam = jsonTask.getJSONObject("request_param"); @@ -268,34 +292,37 @@ public class CallEmpReelTask extends AbstractAcsTask { // 创建桁架任务,入烘箱。 JSONObject hotPoint = bean.getJsonObject(jsonIvt2.getString("product_area"), jsonIvt2, temperature); String container_name = jsonTask.getString("material_code"); - // 创建暂存位 --> 烘烤区任务 - JSONObject param = new JSONObject(); - param.put("type", "2"); - param.put("point_code1", point_code4); - param.put("point_code2", hotPoint.getString("point_code")); - param.put("material_code", container_name); - param.put("product_area", hotPoint.getString("product_area")); - param.put("request_param", NumberUtil.mul(Double.parseDouble(hours), 60)); + //优化 + if (ObjectUtil.isNotEmpty(hotPoint)) { + // 创建暂存位 --> 烘烤区任务 + JSONObject param = new JSONObject(); + param.put("type", "2"); + param.put("point_code1", point_code4); + param.put("point_code2", hotPoint.getString("point_code")); + param.put("material_code", container_name); + param.put("product_area", hotPoint.getString("product_area")); + param.put("request_param", NumberUtil.mul(Double.parseDouble(hours), 60)); - InHotTask inHotTask = new InHotTask(); - String taskId = inHotTask.createTask(param); - // 3.插入主表 - JSONObject jsonRawHot = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); - JSONObject jsonMater = materTab.query("material_code = '" + jsonRawHot.getString("product_name") + "'").uniqueResult(0); + InHotTask inHotTask = new InHotTask(); + String taskId = inHotTask.createTask(param); + // 3.插入主表 + JSONObject jsonRawHot = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); + JSONObject jsonMater = materTab.query("material_code = '" + jsonRawHot.getString("product_name") + "'").uniqueResult(0); - JSONObject hotParam = new JSONObject(); - hotParam.put("container_name", container_name); - hotParam.put("workorder_id", jsonRawHot.getString("workorder_id")); - hotParam.put("material_id", jsonMater.getString("material_id")); - hotParam.put("qty", jsonRawHot.get("productin_qty")); - hotParam.put("io_type", "0"); - hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); - hotParam.put("task_id", taskId); - hotParam.put("start_point_code", point_code1); - hotParam.put("end_point_code", hotPoint.getString("point_code")); - hotParam.put("temperature", temperature); - hotParam.put("oven_time", hours); - bean.createHotIoMst(hotParam); + JSONObject hotParam = new JSONObject(); + hotParam.put("container_name", container_name); + hotParam.put("workorder_id", jsonRawHot.getString("workorder_id")); + hotParam.put("material_id", jsonMater.getString("material_id")); + hotParam.put("qty", jsonRawHot.get("productin_qty")); + hotParam.put("io_type", "0"); + hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); + hotParam.put("task_id", taskId); + hotParam.put("start_point_code", point_code1); + hotParam.put("end_point_code", hotPoint.getString("point_code")); + hotParam.put("temperature", temperature); + hotParam.put("oven_time", hours); + bean.createHotIoMst(hotParam); + } } else { // 校验终点是否存在 JSONObject jsonIvt2 = ivtTab.query("full_point_code ='" + point_code4 + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java index 6c6c7db4f..27ca43c0e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java @@ -362,16 +362,36 @@ public class CoolCutTask extends AbstractAcsTask { if ("010304".equals(jsonTask.getString("task_type"))) { //更新分切区空轴库存 - + String container_name = ""; + //若起点是ST_IVT_CutPointIvt表 JSONObject cut_jo2 = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("full_point_code = '" + point_code1 + "'").uniqueResult(0); - String container_name = cut_jo2.getString("container_name"); - cut_jo2.put("full_point_status", "01"); - cut_jo2.put("full_vehicle_code", ""); - cut_jo2.put("container_name", ""); - cut_jo2.put("update_optid", currentUserId); - cut_jo2.put("update_optname", currentUsername); - cut_jo2.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo2); + if (ObjectUtil.isEmpty(cut_jo2)) { + //B1车间支持从分切上料暂存位送回母卷 + if(point_code1.contains("B1_FQZC")){ + cut_jo2 = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(cut_jo2)) { + throw new BadRequestException("任务点位异常,st_ivt_coolpointivt表找不到满轴点位:"+point_code1); + } + container_name = cut_jo2.getString("container_name"); + cut_jo2.put("full_point_status", "01"); + cut_jo2.put("full_vehicle_code", ""); + cut_jo2.put("container_name", ""); + cut_jo2.put("update_optid", currentUserId); + cut_jo2.put("update_optname", currentUsername); + cut_jo2.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("st_ivt_coolpointivt").update(cut_jo2); + } + }else{ + container_name = cut_jo2.getString("container_name"); + cut_jo2.put("full_point_status", "01"); + cut_jo2.put("full_vehicle_code", ""); + cut_jo2.put("container_name", ""); + cut_jo2.put("update_optid", currentUserId); + cut_jo2.put("update_optname", currentUsername); + cut_jo2.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo2); + } + //更新冷却区空轴库存 JSONObject jsonCoolIvt2 = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code2 + "'").uniqueResult(0); @@ -409,17 +429,21 @@ public class CoolCutTask extends AbstractAcsTask { String point_code2 = form.getString("point_code2"); String point_code3 = form.getString("point_code3"); String point_code4 = form.getString("point_code4"); - if (isSingleTask(point_code1)) { - throw new BadRequestException("点位:" + point_code1 + "存在未完成的任务!"); + JSONObject task1 = isSingleTask(point_code1); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + point_code1 + "存在未完成的任务:"+task1.getString("task_code")); } - if (isSingleTask(point_code2)) { - throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!"); + JSONObject task2 = isSingleTask(point_code2); + if ( ObjectUtil.isNotEmpty(task2)) { + throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务:"+task2.getString("task_code")); } - if (isSingleTask(point_code3)) { - throw new BadRequestException("点位:" + point_code3 + "存在未完成的任务!"); + JSONObject task3 = isSingleTask(point_code3); + if ( ObjectUtil.isNotEmpty(task3)) { + throw new BadRequestException("点位:" + point_code3 +"存在未完成的任务:"+task3.getString("task_code")); } - if (isSingleTask(point_code4)) { - throw new BadRequestException("点位:" + point_code4 + "存在未完成的任务!"); + JSONObject task4 = isSingleTask(point_code4); + if ( ObjectUtil.isNotEmpty(task4)) { + throw new BadRequestException("点位:" + point_code4 + "存在未完成的任务:"+task4.getString("task_code")); } JSONObject json = new JSONObject(); json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); @@ -473,17 +497,23 @@ public class CoolCutTask extends AbstractAcsTask { } //判断该点位是否存在未完成的任务 - public boolean isSingleTask(String point_code) { + public JSONObject isSingleTask(String point_code) { JSONObject task1 = WQLObject.getWQLObject("SCH_BASE_Task").query("point_code1 = '" + point_code + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); JSONObject task2 = WQLObject.getWQLObject("SCH_BASE_Task").query("point_code2 = '" + point_code + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); JSONObject task3 = WQLObject.getWQLObject("SCH_BASE_Task").query("point_code3 = '" + point_code + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); JSONObject task4 = WQLObject.getWQLObject("SCH_BASE_Task").query("point_code4 = '" + point_code + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(task1) || ObjectUtil.isNotEmpty(task2) || ObjectUtil.isNotEmpty(task3) || ObjectUtil.isNotEmpty(task4)) { - return true; - } else { - return false; + if(ObjectUtil.isNotEmpty(task1)){ + return task1; + }else if(ObjectUtil.isNotEmpty(task2)){ + return task2; + }else if(ObjectUtil.isNotEmpty(task3)){ + return task3; + }else if(ObjectUtil.isNotEmpty(task4)){ + return task4; } + + return null; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/EmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/EmptyVehicleTask.java index ef4b2eee3..b91bc38ea 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/EmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/EmptyVehicleTask.java @@ -155,7 +155,6 @@ public class EmptyVehicleTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String task_type = form.getString("task_type"); @@ -200,7 +199,6 @@ public class EmptyVehicleTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) 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()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java index 7d83fe9a5..7a67af7ea 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java @@ -385,7 +385,6 @@ public class InHotTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) 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()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InTask.java index 35bbc12b0..c2da49502 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InTask.java @@ -68,7 +68,6 @@ public class InTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配表 WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); // 出入库主表 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java index ed1256333..7febd0944 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java @@ -231,13 +231,19 @@ public class OutHotTask extends AbstractAcsTask { String point_code1 = form.getString("point_code1"); String point_code2 = form.getString("point_code2"); + String point_code3 = form.getString("point_code3"); if (cutConveyorTask.isSingleTask(point_code1)) { throw new BadRequestException("点位:" + point_code1 + "存在未完成的任务!"); } if (cutConveyorTask.isSingleTask(point_code2)) { throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!"); } - + //第三个点不空位时,判断是否存在任务 + if (ObjectUtil.isNotEmpty(point_code3)) { + if (cutConveyorTask.isSingleTask(point_code3)) { + throw new BadRequestException("点位:" + point_code3 + "存在未完成的任务!"); + } + } JSONObject json = new JSONObject(); json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); @@ -272,7 +278,6 @@ public class OutHotTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) 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()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java index 9410e2a18..2c6da0385 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java @@ -1,11 +1,13 @@ package org.nl.wms.st.inbill.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; 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.IStIvtIostorinvService; +import org.nl.common.utils.MapOf; import org.nl.modules.logging.annotation.Log; import org.nl.wms.st.inbill.service.RawAssistIStorService; import org.springframework.beans.factory.annotation.Autowired; @@ -285,4 +287,13 @@ public class RawAssistIStorController { public void download(@RequestParam Map map, HttpServletResponse response) throws IOException { rawAssistIStorService.download(map, response); } + + + @Log("一期扩容接口") + @GetMapping(value = "/updateStructSect") + @SaIgnore + public ResponseEntity updateStructSect(String layer_num) throws IOException { + rawAssistIStorService.updateStructSect(layer_num); + return new ResponseEntity<>(MapOf.of("status","200","message","sucess"),HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java index f90e53fc5..0d1df8fbe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java @@ -73,4 +73,10 @@ public interface RawAssistIStorService { * @throws IOException / */ void download(Map map, HttpServletResponse response) throws IOException; + + /** + * 一期仓库扩容 + * @param layer_num + */ + void updateStructSect(String layer_num); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java index a046a991f..2a3f289ba 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java @@ -1868,7 +1868,15 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { if (ObjectUtil.isEmpty(struct_jo)) { // 主存区类型更改成中转区类型:找一排主存区的更改中转区、把一排中转区的更改成主存区(只允许调用一次) - SpringContextHolder.getBean(RawAssistIStorServiceImpl.class).updateStructSect(col_num); + String result = HttpUtil.get("http://127.0.0.1:8013/api/in/rawAssist/updateStructSect?layer_num=" + col_num); + if (StringUtils.isEmpty(result)){ + throw new BadRequestException("扩容异常"); + } + JSONObject toJSON = JSONObject.parseObject(result); + if (!toJSON.getString("status").equals("200")){ + throw new BadRequestException(toJSON.getString("message")); + } +// SpringContextHolder.getBean(RawAssistIStorServiceImpl.class).updateStructSect(col_num); struct_jo = autoDisMove2(whereJson); } return struct_jo; @@ -2795,7 +2803,7 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { /** * 新开事务,把当前事务挂起,(新开事务不回滚) */ - @Transactional(propagation=Propagation.REQUIRES_NEW) + @Transactional() public void updateStructSect(String layer_num) { WQLObject attr = WQLObject.getWQLObject("st_ivt_structattr"); WQLObject point = WQLObject.getWQLObject("sch_base_point"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java index 9fa6e0714..92958aad5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java @@ -13,6 +13,7 @@ import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; @@ -23,7 +24,7 @@ import java.util.List; * @Date:2023/12/12 * @Description:立库空载具搬运任务 */ -@Component +@Service @RequiredArgsConstructor public class EmpMoveTask extends AbstractAcsTask { private final String THIS_CLASS = EmpMoveTask.class.getName(); @@ -188,7 +189,6 @@ public class EmpMoveTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) 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()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/HandMoveStorAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/HandMoveStorAcsTask.java index 175678610..46835cc6f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/HandMoveStorAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/HandMoveStorAcsTask.java @@ -15,13 +15,14 @@ import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.st.instor.service.impl.HandMoveStorServiceImpl; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -@Component +@Service @RequiredArgsConstructor public class HandMoveStorAcsTask extends AbstractAcsTask { private final String THIS_CLASS = HandMoveStorAcsTask.class.getName(); 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 2b31fc22f..6b3f5ad22 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 @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.tasks.TwoSendOutTask; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; @@ -51,6 +52,8 @@ public class CheckOutBillController { private final OutBoxManageService outBoxManageService; + private final TwoSendOutTask twoSendOutTask; + @GetMapping @Log("查询出库单") @@ -437,6 +440,20 @@ public class CheckOutBillController { return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/testSendOut2") + @Log("发货区测试2") + @SaIgnore + public ResponseEntity testSendOut2(@RequestBody JSONObject whereJson) { + //创建任务 + JSONObject task_jo = new JSONObject(); + task_jo.put("point_code1", whereJson.getString("point1")); + task_jo.put("point_code2", whereJson.getString("point2")); + task_jo.put("vehicle_code", whereJson.getString("vehicle_code")); + task_jo.put("task_type", "010708"); + twoSendOutTask.createTask(task_jo); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/testIn") @Log("申请入库") public ResponseEntity testIn(@RequestBody JSONObject whereJson) { 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 ed889043c..8f09d98bf 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 @@ -1579,6 +1579,8 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { //库区表 WQLObject wo_sect = WQLObject.getWQLObject("st_ivt_sectattr"); + //定义需要更新的仓位集合 + HashMap Struct_map = new HashMap(); String iostorinv_id = whereJson.getString("iostorinv_id"); //查询主表信息 JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/util/IPUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/util/IPUtil.java new file mode 100644 index 000000000..e2509bcc5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/util/IPUtil.java @@ -0,0 +1,32 @@ +package org.nl.wms.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.net.NetUtil; + +import java.net.*; +import java.util.*; + +public class IPUtil { + public static void main(String[] args) throws SocketException { + List localhostStrs = getLocalhostStrs(); + System.out.println(localhostStrs); + } + public static List getLocalhostStrs(){ + List ips = new ArrayList<>(); + try { + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()){ + NetworkInterface nextElement = interfaces.nextElement(); + for (InterfaceAddress address : nextElement.getInterfaceAddresses()) { + InetAddress inetAddress = address.getAddress(); + if (inetAddress instanceof Inet4Address){ + ips.add(inetAddress.getHostAddress()); + } + } + } + return ips; + }catch (Exception ex){ + return ips; + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/util/TaskUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/util/TaskUtil.java index 3d143b01a..ff14f64c8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/util/TaskUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/util/TaskUtil.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -46,18 +47,7 @@ public class TaskUtil { * 根据分切计划获取子卷长度 */ public static int getMaxNum(PdmBiSlittingproductionplan productionPlan, String paperDescription) { - String containerLength = productionPlan != null ? productionPlan.getPaper_tube_or_FRP().equals("1") ? productionPlan.getPaper_tube_description() : productionPlan.getFRP_description() : paperDescription; - int maxNum = 0; - for (String part : containerLength.split("\\|")) { - String numStr = part.replaceAll("\\D+", ""); - if (!numStr.isEmpty()) { - int num = Integer.parseInt(numStr); - if (num > maxNum) { - maxNum = num; - } - } - } - return maxNum; + return SlitterTaskUtil.getPaperLengthInt(productionPlan); } -} \ No newline at end of file +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/util/TranUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/util/TranUtil.java index 1ddd0d44a..5ea258fdf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/util/TranUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/util/TranUtil.java @@ -3,6 +3,7 @@ package org.nl.wms.util; import com.alibaba.fastjson.JSONArray; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.ThrowableUtil; import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; @@ -45,7 +46,7 @@ public class TranUtil { errTask = function.apply(request, allTransactionConsumer); } catch (Exception ex) { - log.error("一键设置异常:{}",ex); + log.error("一键设置异常:{}", ThrowableUtil.getStackTrace(ex)); if (commits.size() > 0) { TransactionStatus transactionStatus = commits.removeLast(); txManager.rollback(transactionStatus); diff --git a/lms/nladmin-system/src/main/resources/config/application-dev.yml b/lms/nladmin-system/src/main/resources/config/application-dev.yml index 5514c6c14..66a8bd00e 100644 --- a/lms/nladmin-system/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/src/main/resources/config/application-dev.yml @@ -1,57 +1,104 @@ server: - port: 9999 + port: 8013 #配置数据源 spring: - datasource: - druid: - db-type: com.alibaba.druid.pool.DruidDataSource - driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:root} - password: ${DB_PWD:123456} - # 初始连接数 - initial-size: 5 - # 最小连接数 - min-idle: 15 - # 最大连接数 - max-active: 30 - # 超时时间(以秒数为单位) - remove-abandoned-timeout: 180 - # 获取连接超时时间 - max-wait: 3000 - # 连接有效性检测时间 - time-between-eviction-runs-millis: 60000 - # 连接在池中最小生存的时间 - min-evictable-idle-time-millis: 300000 - # 连接在池中最大生存的时间 - max-evictable-idle-time-millis: 900000 - # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 - test-while-idle: true - # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 - test-on-borrow: true - # 是否在归还到池中前进行检验 - test-on-return: false - # 检测连接是否有效 - validation-query: select 1 - # 配置监控统计 - webStatFilter: - enabled: true - stat-view-servlet: - enabled: true - url-pattern: /druid/* - reset-enable: false - filters: - DruidFilter,stat -# query-timeout: 1 - # stat: -# enabled: true -# # 记录慢SQL -# log-slow-sql: true -# slow-sql-millis: 1000 -# merge-sql: true -# wall: -# config: -# multi-statement-allow: true + shardingsphere: + datasource: + names: master,slave + master: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + # 初始连接数 + initial-size: 20 + # 最小连接数 + min-idle: 30 + # 最大连接数 + max-active: 300 + # 是否自动回收超时连接 + socket-timeout: 10 + query-time-out: 7 + transaction-query-timeout: 30 + # 获取连接超时时间 + max-wait: 4000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + url: jdbc:mysql://localhost:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + username: root + password: 123456 + slave: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + # 初始连接数 + initial-size: 20 + # 最小连接数 + min-idle: 30 + # 最大连接数 + max-active: 300 + # 是否自动回收超时连接 + socket-timeout: 10 + query-time-out: 7 + transaction-query-timeout: 30 + # 获取连接超时时间 + max-wait: 4000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + url: jdbc:mysql://127.0.0.1:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + username: root + password: 123456 + rules: + readwrite-splitting: + data-sources: + db: + type: Static + props: + #接口有事务,读写分离不生效,默认全部使用主库 + write-data-source-name: master + read-data-source-names: slave + #负载均衡算法名称 + load-balancer-name: round-robin + redis: #数据库索引 database: ${REDIS_DB:15} diff --git a/lms/nladmin-system/src/main/resources/config/application-prod.yml b/lms/nladmin-system/src/main/resources/config/application-prod.yml index d567b5f63..116aa3756 100644 --- a/lms/nladmin-system/src/main/resources/config/application-prod.yml +++ b/lms/nladmin-system/src/main/resources/config/application-prod.yml @@ -1,63 +1,107 @@ server: - port: 8011 + port: 8013 #配置数据源 spring: - datasource: - druid: - db-type: com.alibaba.druid.pool.DruidDataSource - driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:10.1.3.91}:${DB_PORT:3306}/${DB_NAME:lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - # url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_tb_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - # username: ${DB_USER:root} - username: ${DB_USER:root} - password: ${DB_PWD:123456} - # password: ${DB_PWD:root} - # 初始连接数 - initial-size: 5 - # 最小连接数 - min-idle: 15 - # 最大连接数 - max-active: 220 - # 超时时间(以秒数为单位) - remove-abandoned-timeout: 180 - # 获取连接超时时间 - max-wait: 2000 - # 连接有效性检测时间 - time-between-eviction-runs-millis: 60000 - # 连接在池中最小生存的时间 - min-evictable-idle-time-millis: 300000 - # 连接在池中最大生存的时间 - max-evictable-idle-time-millis: 900000 - # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 - test-while-idle: true - # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 - test-on-borrow: false - # 是否在归还到池中前进行检验 - test-on-return: false - # 检测连接是否有效 - validation-query: select 1 - # 配置监控统计 - webStatFilter: - enabled: true - stat-view-servlet: - enabled: true - url-pattern: /druid/* - reset-enable: false - filters: - DruidFilter,stat - # stat: - # enabled: true - # # 记录慢SQL - # log-slow-sql: true - # slow-sql-millis: 1000 - # merge-sql: true - # wall: - # config: - # multi-statement-allow: true + shardingsphere: + datasource: + names: master,slave + master: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + # 初始连接数 + initial-size: 20 + # 最小连接数 + min-idle: 30 + # 最大连接数 + max-active: 300 + # 是否自动回收超时连接 + socket-timeout: 10 + query-time-out: 7 + transaction-query-timeout: 30 + # 获取连接超时时间 + max-wait: 4000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + url: jdbc:mysql://10.1.3.87:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: root + password: NLABC&hl123 + slave: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + # 初始连接数 + initial-size: 20 + # 最小连接数 + min-idle: 30 + # 最大连接数 + max-active: 300 + + socket-timeout: 10 + query-time-out: 7 + transaction-query-timeout: 30 + # 获取连接超时时间 + max-wait: 4000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + url: jdbc:mysql://10.1.3.89:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: root + password: NLABC&hl123 + rules: + readwrite-splitting: + data-sources: + db: + type: Static + props: + #接口有事务,读写分离不生效,默认全部使用主库 + write-data-source-name: master + read-data-source-names: slave + #负载均衡算法名称 + load-balancer-name: round-robin redis: #数据库索引 database: ${REDIS_DB:11} - host: ${REDIS_HOST:10.1.3.93} + host: ${REDIS_HOST:10.1.3.91} port: ${REDIS_PORT:6379} password: ${REDIS_PWD:} redisson: @@ -68,7 +112,7 @@ spring: connectionMinimumIdleSize: 8 connectionPoolSize: 8 database: 11 - address: redis://10.1.3.93:6379 + address: redis://10.1.3.91:6379 idleConnectionTimeout: 10000 timeout: 3000 # 登录相关配置 @@ -160,6 +204,3 @@ sa-token: cookie: # 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com domain: -lucene: - index: - path: D:\log\lms\lucene\index diff --git a/lms/nladmin-system/src/main/resources/config/application.yml b/lms/nladmin-system/src/main/resources/config/application.yml index 1aacdc663..a9fc87884 100644 --- a/lms/nladmin-system/src/main/resources/config/application.yml +++ b/lms/nladmin-system/src/main/resources/config/application.yml @@ -6,7 +6,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: prod jackson: time-zone: GMT+8 data: @@ -126,6 +126,9 @@ security: - /api/param/getValueByCode - /plumelog/** - /api/esLog/** + - /api/s/** + - /api/codeDetail/getNewCode + - /api/in/rawAssist/updateStructSect # Sa-Token配置 sa-token: # token 名称 (同时也是cookie名称) diff --git a/lms/nladmin-system/src/main/resources/logback-spring.xml b/lms/nladmin-system/src/main/resources/logback-spring.xml index 73fbb2be1..2c520ee34 100644 --- a/lms/nladmin-system/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/src/main/resources/logback-spring.xml @@ -58,7 +58,7 @@ https://juejin.cn/post/6844903775631572999 0 - 500 + 512 @@ -132,8 +132,8 @@ https://juejin.cn/post/6844903775631572999 - + 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 index 6e00c07a9..62e23540b 100644 --- a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java +++ b/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java @@ -13,6 +13,8 @@ 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; @@ -21,6 +23,8 @@ 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.*; +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; @@ -37,6 +41,7 @@ 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; @@ -73,6 +78,43 @@ public class EventTest { 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); + } + @Autowired private IDeliverycachepointivtService deliverycachepointivtService; diff --git a/lms/nladmin-ui/.env.development b/lms/nladmin-ui/.env.development index 3e1472584..79da18d26 100644 --- a/lms/nladmin-ui/.env.development +++ b/lms/nladmin-ui/.env.development @@ -1,8 +1,8 @@ ENV = 'development' # 接口地址 -VUE_APP_BASE_API = 'http://localhost:9999' -VUE_APP_WS_API = 'ws://localhost:9999' +VUE_APP_BASE_API = 'http://127.0.0.1:8013' +VUE_APP_WS_API = 'ws://127.0.0.1:8013' # 是否启用 babel-plugin-dynamic-import-node插件 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/lms/nladmin-ui/package.json b/lms/nladmin-ui/package.json index 47d2ec533..1c54f3758 100644 --- a/lms/nladmin-ui/package.json +++ b/lms/nladmin-ui/package.json @@ -7,7 +7,7 @@ "scripts": { "dev": "vue-cli-service serve", "dev2": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", - "build:prod": "vue-cli-service build", + "build:prod": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build", "build:stage": "vue-cli-service build --mode staging", "preview": "node build/index.js --preview", "lint": "eslint --ext .js,.vue src", diff --git a/lms/nladmin-ui/public/config.js b/lms/nladmin-ui/public/config.js index 5fc1438c5..a4c28810e 100644 --- a/lms/nladmin-ui/public/config.js +++ b/lms/nladmin-ui/public/config.js @@ -1,9 +1,9 @@ window.g = { dev: { - VUE_APP_BASE_API: 'http://localhost:8020' + VUE_APP_BASE_API: 'http://localhost:8081' }, prod: { - VUE_APP_BASE_API: 'http://localhost:8020' + VUE_APP_BASE_API: 'http://localhost:8081' } diff --git a/lms/nladmin-ui/src/assets/images/empty.png b/lms/nladmin-ui/src/assets/images/empty.png new file mode 100644 index 000000000..ee838b670 Binary files /dev/null and b/lms/nladmin-ui/src/assets/images/empty.png differ diff --git a/lms/nladmin-ui/src/assets/images/empty2.png b/lms/nladmin-ui/src/assets/images/empty2.png new file mode 100644 index 000000000..fb9656491 Binary files /dev/null and b/lms/nladmin-ui/src/assets/images/empty2.png differ diff --git a/lms/nladmin-ui/src/assets/images/showTube.png b/lms/nladmin-ui/src/assets/images/showTube.png new file mode 100644 index 000000000..8120004c7 Binary files /dev/null and b/lms/nladmin-ui/src/assets/images/showTube.png differ diff --git a/lms/nladmin-ui/src/components/Dict/Dict.js b/lms/nladmin-ui/src/components/Dict/Dict.js index b6a9cc697..9e0421305 100644 --- a/lms/nladmin-ui/src/components/Dict/Dict.js +++ b/lms/nladmin-ui/src/components/Dict/Dict.js @@ -1,5 +1,5 @@ import Vue from 'vue' -import { get as getDictDetail } from '@/views/system/dict/dictDetail' +import { getDictDetails as getDictDetail } from '@/views/system/dict/dictDetail' export default class Dict { constructor(dict) { diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/bstIvtStockingivt.js b/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/bstIvtStockingivt.js index bb77adce0..190917cac 100644 --- a/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/bstIvtStockingivt.js +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/bstIvtStockingivt.js @@ -24,4 +24,27 @@ export function edit(data) { }) } -export default { add, edit, del } +export function showDetail(data) { + return request({ + url: 'api/bstIvtStockingivt/showDetail', + method: 'post', + data + }) +} + +export function showDetail2(params) { + return request({ + url: 'api/bstIvtStockingivt/showDetail2', + method: 'get', + params + }) +} +export function showBom2(params) { + return request({ + url: 'api/bstIvtStockingivt/showBom2', + method: 'get', + params + }) +} + +export default { add, edit, del, showDetail, showDetail2, showBom2 } diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/index.vue b/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/index.vue index daaa66ac9..0555d498d 100644 --- a/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/index.vue +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/index.vue @@ -83,12 +83,27 @@ - + - + + - - + + + - + + + - - @@ -125,16 +142,17 @@ + + + diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/tubeDialog2.vue b/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/tubeDialog2.vue new file mode 100644 index 000000000..a5ee96653 --- /dev/null +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/stockingivt/tubeDialog2.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/login.vue b/lms/nladmin-ui/src/views/login.vue index 418d0c685..7b3de2254 100644 --- a/lms/nladmin-ui/src/views/login.vue +++ b/lms/nladmin-ui/src/views/login.vue @@ -162,53 +162,53 @@ export default { diff --git a/lms/nladmin-ui/src/views/loki/api/loki.js b/lms/nladmin-ui/src/views/loki/api/loki.js index 8cc509d5a..039744d3f 100644 --- a/lms/nladmin-ui/src/views/loki/api/loki.js +++ b/lms/nladmin-ui/src/views/loki/api/loki.js @@ -22,5 +22,12 @@ export function clearLogs(param) { data: param }) } +export function downloadData(param) { + return request({ + url: '/api/pdmBiSubpackagerelation/downloadData', + method: 'post', + responseType: 'blob' + }) +} -export default { getLogData, labelsValues, clearLogs } +export default { getLogData, labelsValues, clearLogs, downloadData } diff --git a/lms/nladmin-ui/src/views/loki/view/index.vue b/lms/nladmin-ui/src/views/loki/view/index.vue index 3b5987867..e33752bd1 100644 --- a/lms/nladmin-ui/src/views/loki/view/index.vue +++ b/lms/nladmin-ui/src/views/loki/view/index.vue @@ -7,7 +7,7 @@ + + + + + @@ -135,6 +150,7 @@ 清空日志 + 导出分切数据 @@ -180,6 +196,7 @@ diff --git a/lms/nladmin-ui/src/views/system/user/index.vue b/lms/nladmin-ui/src/views/system/user/index.vue index 5e4bfb0fa..b4206307b 100644 --- a/lms/nladmin-ui/src/views/system/user/index.vue +++ b/lms/nladmin-ui/src/views/system/user/index.vue @@ -260,7 +260,7 @@ style="width: 100%;" @selection-change="getRows" > - + + + @@ -184,7 +197,7 @@ const defaultForm = { qzzno: null, vehicle_code: null, point_status: null, - packageinfo_area: null, + packageinfo_area: '3', sch_packageinfo_status: null, sort_seq: null, is_used: null, @@ -209,6 +222,10 @@ export default { idField: 'ivt_id', sort: 'ivt_id,desc', crudMethod: { ...crudDeliverypointivt }, + query: { + packageinfo_area:'3', + size:100 + }, optShow: { add: false, edit: false, @@ -239,6 +256,20 @@ export default { [CRUD.HOOK.beforeRefresh]() { return true }, + rowStyle({row,index}){ + let backgroun = {} + if (row.container_name!=null && row.update_time!=null && row.update_time!=undefined){ + let now = new Date() + let before = new Date(row.update_time) + const diff = now.getTime() - before.getTime(); + let min = Math.floor(diff/(1000*60)) + console.log(min) + if (min>120){ + backgroun.background = 'red'; + } + } + return backgroun; + }, hand(value) { this.crud.toQuery() } diff --git a/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/index.vue b/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/index.vue index f4b77ed34..8ba8d664e 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/index.vue @@ -488,7 +488,11 @@ - + + + @@ -557,6 +561,7 @@ + @@ -565,8 +570,8 @@ import crudSlittingproductionplan from '@/views/wms/pdm/order/slittingplan/slitt import CRUD, { crud, form, header, presenter } from '@crud/crud' import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' -import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' +import TubeDialog2 from '@/views/wms/pdm/order/slittingplan/tubeDialog2.vue' const defaultForm = { workorder_id: null, @@ -619,7 +624,7 @@ const defaultForm = { export default { name: 'Slittingproductionplan', dicts: ['product_area', 'order_type', 'cut_product_status', 'ware_house', 'paper_tube_or_frp', 'IS_OR_NOT'], - components: { pagination, crudOperation, rrOperation, udOperation }, + components: { pagination, crudOperation, rrOperation, TubeDialog2 }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -640,6 +645,8 @@ export default { data() { return { permission: {}, + showView2: false, + mstrow: {}, rules: { order_type: [ { required: true, message: '分切订单类型不能为空', trigger: 'blur' } @@ -679,6 +686,14 @@ export default { hand() { this.crud.toQuery() }, + toView2(index, row) { + this.showView2 = true + this.mstrow = row + }, + querytable() { + this.$refs.table.clearSelection() + this.crud.toQuery() + }, upMaterFinish() { const _selectData = this.$refs.table.selection const data = { diff --git a/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/tubeDialog2.vue b/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/tubeDialog2.vue new file mode 100644 index 000000000..8a84a1ab0 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/tubeDialog2.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/sch/task/index.vue b/lms/nladmin-ui/src/views/wms/sch/task/index.vue index 39370fd29..c6d9b33c5 100644 --- a/lms/nladmin-ui/src/views/wms/sch/task/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/task/index.vue @@ -276,8 +276,9 @@ export default { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { if (this.query_flag) { - this.crud.query.begin_time = (new Date().daysAgo(7)).strftime('%F', 'zh') - this.crud.query.end_time = (new Date()).strftime('%F', 'zh') + const afterD = new Date(new Date().getTime() + 2 * 8.64E7) + this.crud.query.begin_time = (new Date().daysAgo(3)).strftime('%F', 'zh') + this.crud.query.end_time = (afterD).strftime('%F', 'zh') this.query_flag = false } }, diff --git a/lms/nladmin-ui/src/views/wms/st/inbill/DivDialog.vue b/lms/nladmin-ui/src/views/wms/st/inbill/DivDialog.vue index 184ad3321..cc529a231 100644 --- a/lms/nladmin-ui/src/views/wms/st/inbill/DivDialog.vue +++ b/lms/nladmin-ui/src/views/wms/st/inbill/DivDialog.vue @@ -396,6 +396,7 @@ export default { this.allDivBtn = true const data = {} data.sect_id = this.sect_id + data.stor_id = this.stor_id data.iostorinv_id = this.openParam[0].iostorinv_id crudRawAssist.allDivStruct(data).then(res => { crudRawAssist.getIODtl({ 'bill_code': this.openParam[0].bill_code, 'open_flag': '1' }).then(res => { diff --git a/lms/nladmin-ui/src/views/wms/st/outcharge/index.vue b/lms/nladmin-ui/src/views/wms/st/outcharge/index.vue index d625b3867..f74242a65 100644 --- a/lms/nladmin-ui/src/views/wms/st/outcharge/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/outcharge/index.vue @@ -167,17 +167,14 @@ import CRUD, { crud, header, presenter } from '@crud/crud' import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' -import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -import DateRangePicker from '@/components/DateRangePicker/index' import crudOutchargefrom from '@/views/wms/st/outcharge/outcharge' -import crudStorattr from '@/views/wms/basedata/st/stor/storattr' import ViewDialog from '@/views/wms/st/outbill/ViewDialog' import crudUserStor from '@/views/wms/basedata/st/userStor/userStor' export default { name: 'Outcharge', - components: { crudOperation, rrOperation, udOperation, pagination, DateRangePicker, ViewDialog }, + components: { crudOperation, rrOperation, pagination, ViewDialog }, cruds() { return CRUD({ title: '出库冲销', @@ -245,9 +242,6 @@ export default { this.$set(this.query, 'createTime', [startDate, endDate]) this.crud.toQuery() }, - // [CRUD.HOOK.beforeRefresh]() { - // return false - // }, toView(index, row) { this.mstrow = row this.viewShow = true diff --git a/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js b/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js index 37698e6eb..b107a4a78 100644 --- a/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js +++ b/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js @@ -24,4 +24,11 @@ export function edit(data) { }) } -export default { add, edit, del } +export function subRecord(code) { + return request({ + url: '/api/pdmProductSpec/subSpec/'+code, + method: 'get' + }) +} + +export default { add, edit, del, subRecord } diff --git a/lms/nladmin-ui/vue.config.js b/lms/nladmin-ui/vue.config.js index 9cea9e1b6..43e738a3d 100644 --- a/lms/nladmin-ui/vue.config.js +++ b/lms/nladmin-ui/vue.config.js @@ -7,7 +7,7 @@ function resolve(dir) { } const name = defaultSettings.title // 网址标题 -const port = 8013 // 端口配置 +const port = 8081 // 端口配置 // All configuration item explanations can be find in https://cli.vuejs.org/config/ module.exports = {