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 51dfddd..e60d26a 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 @@ -96,14 +96,35 @@ ) + SELECT bc.* + FROM bst_ivt_cutpointivt bc + LEFT JOIN pdm_bi_slittingproductionplan p + ON IFNULL(p.qzzno, '') ]]> '' AND (p.qzzno = bc.qzz_no1 OR p.qzzno = bc.qzz_no2) + WHERE bc.point_type = '1' + AND bc.point_status = '2' + AND (IFNULL(bc.qzz_no1, '') ]]> '' OR IFNULL(bc.qzz_no2, '') ]]> '' + ) + AND (IFNULL(bc.qzz_no1, '') = '' OR IFNULL(bc.qzz_no2, '') = '') + AND p.resource_name = #{resource_name} + AND p.parent_container_name = #{parent_container_name} + AND p.split_group = #{split_group} + AND p.is_delete = '0' + AND bc.is_used = '1' + UNION SELECT bc.* FROM bst_ivt_cutpointivt bc - LEFT JOIN pdm_bi_slittingproductionplan p ON p.qzzno = bc.qzz_no1 OR p.qzzno = bc.qzz_no2 - WHERE bc.point_type = '1' AND bc.point_status = '2' AND (IFNULL(bc.qzz_no1,'') ]]> '' OR IFNULL(bc.qzz_no2,'') ]]> '' - ) AND (IFNULL(bc.qzz_no1,'') = '' OR IFNULL(bc.qzz_no2,'') = '') - AND p.resource_name = #{resource_name} - AND (p.restruct_container_name = #{parent_container_name} OR p.parent_container_name = #{parent_container_name}) - AND p.split_group = #{split_group} + LEFT JOIN pdm_bi_slittingproductionplan p + ON IFNULL(p.qzzno, '') ]]> '' AND (p.qzzno = bc.qzz_no1 OR p.qzzno = bc.qzz_no2) + WHERE bc.point_type = '1' + AND bc.point_status = '2' + AND (IFNULL(bc.qzz_no1, '') ]]> '' OR IFNULL(bc.qzz_no2, '') ]]> '' + ) + AND (IFNULL(bc.qzz_no1, '') = '' OR IFNULL(bc.qzz_no2, '') = '') + AND p.resource_name = #{resource_name} + AND p.restruct_container_name = #{parent_container_name} + AND p.split_group = #{split_group} + AND p.is_delete = '0' + AND bc.is_used = '1' diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/controller/MdPbPaperController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/controller/MdPbPaperController.java new file mode 100644 index 0000000..b111cab --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/controller/MdPbPaperController.java @@ -0,0 +1,62 @@ +package org.nl.b_lms.bst.ivt.paper.controller; + +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.paper.service.IMdPbPaperService; +import org.nl.b_lms.bst.ivt.paper.service.dao.MdPbPaper; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +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.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.Set; + + +@Slf4j +@RestController +@RequestMapping("/api/mdPbPaper") +public class MdPbPaperController { + + @Autowired + private IMdPbPaperService mdPbPaperService; + + @GetMapping + @Log("查询管芯库存") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdPbPaperService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增管芯库存") + public ResponseEntity create(@Validated @RequestBody MdPbPaper entity){ + mdPbPaperService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改管芯库存") + public ResponseEntity update(@Validated @RequestBody MdPbPaper entity){ + mdPbPaperService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除管芯库存") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdPbPaperService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/print") + @Log("打印") + public ResponseEntity print( @RequestBody List list){ + mdPbPaperService.print(list); + return new ResponseEntity<>(HttpStatus.CREATED); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/IMdPbPaperService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/IMdPbPaperService.java new file mode 100644 index 0000000..611d33c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/IMdPbPaperService.java @@ -0,0 +1,51 @@ +package org.nl.b_lms.bst.ivt.paper.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.bst.ivt.paper.service.dao.MdPbPaper; +import org.nl.common.domain.query.PageQuery; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2024-06-04 +**/ +public interface IMdPbPaperService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdPbPaper entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdPbPaper entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 创建 + * @param list / + */ + void print(List list); + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/MdPbPaper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/MdPbPaper.java new file mode 100644 index 0000000..0a9e67f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/MdPbPaper.java @@ -0,0 +1,64 @@ +package org.nl.b_lms.bst.ivt.paper.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_pb_paper") +public class MdPbPaper implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 载具标识 */ + @TableId(value = "ivt_id", type = IdType.NONE) + private String ivt_id; + + /** + * FRP管/纸管编码 + */ + private String paper_code; + + /** + * 物料号 + */ + private String material_code; + + /** + * 物料名称 + */ + private String material_name; + + /** + * FRP管/纸管理论重量 + */ + private BigDecimal standard_weight; + + /** + * FRP管/纸管实际重量 + */ + private BigDecimal fact_weight; + + /** + * 修改时间 + */ + private String update_optid; + + /** + * 修改人 + */ + private String update_optname; + + /** + * 修改人姓名 + */ + private String update_time; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/mapper/MdPbPaperMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/mapper/MdPbPaperMapper.java new file mode 100644 index 0000000..5423e6b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/mapper/MdPbPaperMapper.java @@ -0,0 +1,16 @@ +package org.nl.b_lms.bst.ivt.paper.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.b_lms.bst.ivt.paper.service.dao.MdPbPaper; + + +/** +* @author lyd +* @date 2024-06-04 +**/ +public interface MdPbPaperMapper extends BaseMapper { + + + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/mapper/MdPbPaperMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/mapper/MdPbPaperMapper.xml new file mode 100644 index 0000000..2848410 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/dao/mapper/MdPbPaperMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/impl/MdPbPaperServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/impl/MdPbPaperServiceImpl.java new file mode 100644 index 0000000..a03966e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/paper/service/impl/MdPbPaperServiceImpl.java @@ -0,0 +1,109 @@ +package org.nl.b_lms.bst.ivt.paper.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.paper.service.IMdPbPaperService; +import org.nl.b_lms.bst.ivt.paper.service.dao.MdPbPaper; +import org.nl.b_lms.bst.ivt.paper.service.dao.mapper.MdPbPaperMapper; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.pda.st.service.impl.PrintServiceImpl; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2024-06-04 +**/ +@Slf4j +@Service +public class MdPbPaperServiceImpl extends ServiceImpl implements IMdPbPaperService { + + @Resource + private MdPbPaperMapper mdPbPaperMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + String paper_code = (String) whereJson.get("paper_code"); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq( ObjectUtil.isNotEmpty(paper_code),MdPbPaper::getPaper_code,paper_code); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdPbPaperMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(MdPbPaper entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String gx_code = CodeUtil.getNewCode("GX_CODE"); + entity.setPaper_code(gx_code); + entity.setIvt_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setUpdate_optid(currentUserId); + entity.setUpdate_optname(nickName); + entity.setUpdate_time(now); + mdPbPaperMapper.insert(entity); + } + + @Override + public void update(MdPbPaper entity) { + MdPbPaper dto = mdPbPaperMapper.selectById(entity.getIvt_id()); + if (dto == null) { + throw new BadRequestException("被删除或无权限,操作失败"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_optid(currentUserId); + entity.setUpdate_optname(nickName); + entity.setUpdate_time(now); + + int updateFlag = mdPbPaperMapper.updateById(entity); + log.warn("mdPbPaperMapper更新结果:" +updateFlag); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + mdPbPaperMapper.deleteBatchIds(ids); + } + @Override + public void print(List list) { + + JSONObject print_info = WQLObject.getWQLObject("pdm_bi_printinfo").query("print_name = 'GXBQ'").uniqueResult(0); + + for(int i=0;i queryAll(Map whereJson, PageQuery page){ + String paper_code = (String) whereJson.get("paper_code"); + String vehicle_code = (String) whereJson.get("vehicle_code"); + String material_code = (String) whereJson.get("material_code"); LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq( ObjectUtil.isNotEmpty(paper_code), MdPbPapervehicle::getPaper_code,paper_code) + .eq( ObjectUtil.isNotEmpty(material_code),MdPbPapervehicle::getMaterial_code,material_code) + .eq( ObjectUtil.isNotEmpty(vehicle_code),MdPbPapervehicle::getVehicle_code,vehicle_code); IPage pages = new Page<>(page.getPage() + 1, page.getSize()); mdPbPapervehicleMapper.selectPage(pages, lam); return pages; 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 84550d7..f561ca7 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 @@ -101,6 +101,21 @@ public interface IBstIvtShafttubeivtService extends IService * @return */ List getNotTaskShaftCacheEmpty(BstIvtShafttubeivt startPoint); + /** + * 获取没任务的气涨轴缓存位 + * @param qzzSize + * @param specification + * @return + */ + List getNotTaskShaftCacheEmpty2(String qzzSize, String specification); + + /** + * 获取没任务的气涨轴缓存位 + * @param qzzSize + * @param specification + * @return + */ + List getNotTaskShaftCacheEmpty3(String qzzSize, String specification); void setHaveShaft(JSONObject param); 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 8099500..59a9ce1 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 @@ -34,6 +34,24 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper */ List getNotTaskShaftCacheEmpty(@Param("startPoint") BstIvtShafttubeivt startPoint); + /** + * 获取含有气胀轴的气胀轴暂存位 + * @param qzzSize 气胀轴尺寸 + * @param specification 标箔/锂电 + * @return / + */ + List getNotTaskShaftCacheEmpty2(@Param("qzzSize") String qzzSize, + @Param("specification") String specification); + + /** + * 获取含有气胀轴的气胀轴暂存位 + * @param qzzSize 气胀轴尺寸 + * @param specification 标箔/锂电 + * @return / + */ + List getNotTaskShaftCacheEmpty3(@Param("qzzSize") String qzzSize, + @Param("specification") String specification); + List getOtherCBJData(String pointCode, String location); List getNotTaskEmptyShaftCache(@Param("size") String size, 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 8d2842d..311f18f 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 @@ -8,7 +8,11 @@ * FROM `bst_ivt_shafttubeivt` bst - WHERE bst.point_type = #{type} AND bst.point_location = #{location} AND bst.have_qzz = #{have} AND bst.is_used = '1' + WHERE bst.point_type = #{type} + + AND bst.point_location = #{location} + + AND bst.have_qzz = #{have} AND bst.is_used = '1' AND 0 = ( SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code2 = bst.point_code ) @@ -22,20 +26,6 @@ AND bsf.point_location = #{location} AND bsf.parent_code = #{pointCode} - - SELECT * - FROM `bst_ivt_shafttubeivt` b - WHERE b.have_qzz = '1' - AND b.point_type = '6' - AND b.qzz_size = #{qzzSize} - - AND b.qzz_generation = #{specification} - - AND b.point_location = #{location} - AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code1 = b.point_code) - ORDER BY b.sort_seq DESC - SELECT * @@ -43,20 +33,44 @@ WHERE b.have_qzz = '0' AND b.point_type = '6' AND b.qzz_size = #{startPoint.qzz_size} - - AND b.qzz_generation = #{startPoint.qzz_generation} - - AND b.point_location = #{startPoint.point_location} + AND b.qzz_generation = #{startPoint.qzz_generation} 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 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) + AND bb.qzz_size = #{startPoint.qzz_size} + AND bb.sort_seq > b.sort_seq) ORDER BY b.sort_seq ASC + + SELECT * + FROM `bst_ivt_shafttubeivt` b + WHERE b.have_qzz = '0' + AND b.point_type = '6' + AND b.qzz_size = #{qzzSize} + AND b.qzz_generation = #{specification} + AND (b.plan ]]> '1' OR b.plan IS NULL) + 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 bb.qzz_generation = #{specification} + AND bb.qzz_size = #{qzzSize} + AND bb.sort_seq > b.sort_seq) + ORDER BY b.sort_seq ASC + + + SELECT * + FROM `bst_ivt_shafttubeivt` b + WHERE b.have_qzz = '0' + AND b.point_type = '6' + AND b.plan = '1' + AND b.qzz_size = #{qzzSize} + AND b.qzz_generation = #{specification} + 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') + ORDER BY b.sort_seq desc + - SELECT + SELECT * FROM bst_ivt_shafttubeivt bsf @@ -83,6 +97,20 @@ AND bb.qzz_size = #{size} AND bb.point_location = #{location} AND bb.sort_seq > b.sort_seq) ORDER BY b.sort_seq ASC + + SELECT * + FROM `bst_ivt_shafttubeivt` b + WHERE b.have_qzz = '1' + AND b.point_type = '6' + AND b.qzz_size = #{qzzSize} + AND b.qzz_generation = #{specification} + + AND b.point_location = #{location} + + AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code1 = b.point_code) + ORDER BY b.sort_seq DESC + SELECT * @@ -90,8 +118,9 @@ WHERE b.have_qzz = '1' AND b.point_type = '6' AND b.qzz_size = #{qzzSize} - - AND b.qzz_generation = #{specification} + AND b.qzz_generation = #{specification} + + AND b.point_location = #{location} AND b.point_location = #{location} AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code1 = b.point_code) 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 03a3a67..50a25eb 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 @@ -137,6 +137,16 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getNotTaskShaftCacheEmpty2(String qzzSize, String specification) { + return bstIvtShafttubeivtMapper.getNotTaskShaftCacheEmpty2(qzzSize, specification); + } + + @Override + public List getNotTaskShaftCacheEmpty3(String qzzSize, String specification) { + return bstIvtShafttubeivtMapper.getNotTaskShaftCacheEmpty3(qzzSize, specification); + } + @Override public void setHaveShaft(JSONObject param) { JSONArray data = param.getJSONArray("data"); 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 8a194ad..871243f 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 @@ -30,14 +30,12 @@ public class BstIvtStockingivtController { @GetMapping @Log("查询备货区点位库存表") - //@SaCheckPermission("@el.check('bstIvtStockingivt:list')") public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(bstIvtStockingivtService.queryAll(whereJson, page)), HttpStatus.OK); } @PostMapping @Log("新增备货区点位库存表") - //@SaCheckPermission("@el.check('bstIvtStockingivt:add')") public ResponseEntity create(@Validated @RequestBody BstIvtStockingivt entity) { bstIvtStockingivtService.create(entity); @@ -46,14 +44,12 @@ public class BstIvtStockingivtController { @PutMapping @Log("修改备货区点位库存表") - //@SaCheckPermission("@el.check('bstIvtStockingivt:edit')") public ResponseEntity update(@Validated @RequestBody BstIvtStockingivt entity) { bstIvtStockingivtService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除备货区点位库存表") - //@SaCheckPermission("@el.check('bstIvtStockingivt:del')") @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { bstIvtStockingivtService.deleteAll(ids); @@ -61,14 +57,12 @@ public class BstIvtStockingivtController { } @Log("操作管芯托盘库存") - //@SaCheckPermission("@el.check('bstIvtStockingivt:del')") @PostMapping("operateIvt") public ResponseEntity operateIvt(@RequestBody JSONObject param) { return new ResponseEntity<>(bstIvtStockingivtService.operateIvt(param), HttpStatus.OK); } - @Log("管芯托盘库存") - //@SaCheckPermission("@el.check('bstIvtStockingivt:del')") + @Log("查询管芯托盘库存明细") @PostMapping("/showDetail") public ResponseEntity showDetail(@RequestBody JSONObject param) { return new ResponseEntity<>(bstIvtStockingivtService.showDetail(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 b987f4f..f0a3d33 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 @@ -60,11 +60,10 @@ public interface IBstIvtStockingivtService extends IService { /** * 获取备货区空位,没有任务的位置 - * @param location 位置:0上区域,1下区域 * @param pointType 类型:0暂存位置,1靠近分切机 * @return / */ - List getEmptyPointNotTask(String location, String pointType); + List getEmptyPointNotTask(String pointType); /** * 根据点位编码获取备货区点位 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 42edf4d..fc9eff5 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,7 @@ 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.bst.ivt.stockingivt.service.dto.ShowStockView; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; @@ -24,11 +25,10 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getPaperTubePoint(String pointType, String tube, String location, int qty); /** * 获取备货区空位,没有任务的位置 - * @param location 位置:0上区域,1下区域 * @param pointType 类型:0暂存位置,1靠近分切机 * @return / */ - List getEmptyPointNotTask(String location, String pointType); + List getEmptyPointNotTask(String pointType); BstIvtStockingivt getCanMovePointOne(String location, String pointType); @@ -42,4 +42,6 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getNeedPaperTubePoint(String pointType, String tube, String location); List getCanMovePointList(String location, String pointType); + + List showPapervehicleView(String product_area, String material_code); } 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 baaa70b..7eafc49 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 @@ -24,7 +24,6 @@ SELECT bs.* FROM `bst_ivt_stockingivt` bs WHERE bs.point_type = #{pointType} - AND bs.point_location = #{location} AND bs.is_used = '1' AND bs.ivt_status = '0' AND 0 = (SELECT COUNT(*) @@ -90,4 +89,32 @@ ORDER BY ivt_status ASC, qty ASC; + + + SELECT + p.vehicle_code, + p.material_code, + p.material_name, + sum( p.qty ) AS total_num, + MAX( bs.point_code ) AS point_code, + MAX( bs.product_area ) AS product_area, + MAX( dict.label ) as product_area_name + FROM + `md_pb_papervehicle` p + INNER JOIN bst_ivt_stockingivt bs ON p.vehicle_code = bs.vehicle_code + LEFT JOIN sys_dict dict ON (dict.value = bs.product_area and dict.code='stockingivt_product_area') + WHERE + 1 = 1 + and bs.product_area = #{product_area} + AND p.material_code = #{material_code} + AND bs.point_type ]]> '0' + and bs.is_used = '1' + GROUP BY + p.vehicle_code, + p.material_code, + p.material_name + ORDER BY + p.vehicle_code, + p.material_code + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dto/ShowStockView.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dto/ShowStockView.java new file mode 100644 index 0000000..dcfd164 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dto/ShowStockView.java @@ -0,0 +1,30 @@ +package org.nl.b_lms.bst.ivt.stockingivt.service.dto; + +import lombok.Data; + +/** + * @Author: zds + * @Date: 2025/3/20 + */ +@Data +public class ShowStockView { + /** + * 托盘编码 + */ + private String vehicle_code; + + /** + * 管芯编码 + */ + private String material_code; + //管芯名称 + private String material_name; + //数量 + private String total_num; + //点位编码 + private String point_code; + //区域 + private String product_area; + //区域名称 + private String product_area_name; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java new file mode 100644 index 0000000..87a555f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/StockingIvtController.java @@ -0,0 +1,80 @@ +package org.nl.b_lms.pda.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; +import org.nl.b_lms.pda.service.StockingIvtService; +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; + +/** + * @Author: zds + * @Description: + * @Date: 2024/5/30 + */ +@RestController +@RequestMapping("/api/pda/stockingivt") +@Slf4j +public class StockingIvtController { + + @Autowired + private StockingIvtService stockingIvtService; + + @Autowired + private IBstIvtStockingivtService bstIvtStockingivtService; + + @PostMapping("/queryProductArea") + @Log("查询生产区域") + @SaIgnore + public ResponseEntity queryProductArea(@RequestBody JSONObject param) { + return new ResponseEntity<>(stockingIvtService.queryProductArea(), HttpStatus.OK); + } + @PostMapping("/doStockAreaBinding") + @Log("手持备货区托盘点位绑定") + @SaIgnore + public ResponseEntity doStockAreaBinding(@RequestBody JSONObject param) { + return new ResponseEntity<>(stockingIvtService.doStockAreaBinding(param), HttpStatus.OK); + } + @PostMapping("/doStockAreaUnbinding") + @Log("手持备货区托盘点位解除绑定") + @SaIgnore + public ResponseEntity doStockAreaUnbinding(@RequestBody JSONObject param) { + return new ResponseEntity<>(stockingIvtService.doStockAreaUnbinding(param), HttpStatus.OK); + } + + @PostMapping("/instorStock") + @Log("手持入管芯库") + @SaIgnore + public ResponseEntity instorStock(@RequestBody JSONObject param) { + return new ResponseEntity<>(stockingIvtService.instorStock(param), HttpStatus.OK); + } + + @PostMapping("/showPapervehicleView") + @Log("查询管芯库存情况") + @SaIgnore + public ResponseEntity showPapervehicleView(@RequestBody JSONObject param) { + return new ResponseEntity<>(stockingIvtService.showPapervehicleView(param), HttpStatus.OK); + } + + @PostMapping("/moveStock") + @Log("手持管芯备货") + @SaIgnore + public ResponseEntity moveStock(@RequestBody JSONObject param) { + return new ResponseEntity<>(stockingIvtService.moveStock(param), HttpStatus.OK); + } + + @Log("操作管芯托盘库存") + @PostMapping("operateIvt") + @SaIgnore + public ResponseEntity operateIvt(@RequestBody JSONObject param) { + return new ResponseEntity<>(bstIvtStockingivtService.operateIvt(param), HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/StockingIvtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/StockingIvtService.java new file mode 100644 index 0000000..0f9029d --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/StockingIvtService.java @@ -0,0 +1,55 @@ +package org.nl.b_lms.pda.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.b_lms.bst.ivt.stockingivt.service.dto.ShowStockView; + +import java.util.List; + +/** + * @Author: zds + * @Description: + * @Date: 2024/5/30 + */ +public interface StockingIvtService { + /** + * 手持备货区绑定 + * @param param / + * @return / + */ + JSONObject doStockAreaBinding(JSONObject param); + /** + * 手持备货区解除绑定 + * @param param / + * @return / + */ + JSONObject doStockAreaUnbinding(JSONObject param); + /** + * 手持入管芯库 + * @param param / + * @return / + */ + JSONObject instorStock(JSONObject param); + + /** + * 查看人工套轴信息 + * @param param + * @return + */ + JSONObject showPapervehicleView(JSONObject param); + + /** + * 手持管芯备货 + * @param param / + * @return / + */ + JSONObject moveStock(JSONObject param); + + /** + * 查询生产区域 + * + * @return json + */ + JSONObject queryProductArea(); + + JSONObject operateIvt(JSONObject jsonObject) ; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java new file mode 100644 index 0000000..5e31e4c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/StockingIvtServiceImpl.java @@ -0,0 +1,420 @@ +package org.nl.b_lms.pda.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.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.ShowStockView; +import org.nl.b_lms.pda.service.StockingIvtService; +import org.nl.b_lms.sch.tasks.slitter.InstorStockAgvTask; +import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; +import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; +import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.TaskUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.wms.basedata.master.service.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.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @Author: zds + * @Description: + * @Date: 2024/5/30 + */ +@Slf4j +@Service +public class StockingIvtServiceImpl implements StockingIvtService { + @Autowired + private BstIvtStockingivtMapper bstIvtStockingivtMapper; + @Autowired + private IBstIvtStockingivtService stockingivtService; + @Autowired + private InstorStockAgvTask instorStockAgvTask; + @Autowired + private SysDictMapper sysDictMapper; + @Autowired + private WmsToAcsService wmsToAcsService; + @Autowired + private IMdPbPapervehicleService papervehicleService; + @Autowired + private MaterialbaseService materialbaseService; + + @Override + public JSONObject doStockAreaBinding(JSONObject param) { + // param: point_code vehicle_code + log.info("手持备货区绑定的数据:{}", param); + String pointCode = param.getString("point_code"); + String vehicleCode = param.getString("vehicle_code"); + BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true); + 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() + "上,不允许重复绑定!"); + } + //判断是否已经下发了任务 + JSONObject task1 = isSingleTask(pointCode); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); + } + pointByCode.setVehicle_code(vehicleCode); + pointByCode.setIvt_status("1"); + TaskUtils.updateOptMessageByBStockingPoint(pointByCode); + stockingivtService.updateById(pointByCode); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "备货区绑定成功!"); + return res; + } + + @Override + public JSONObject doStockAreaUnbinding(JSONObject param) { + // param: point_code + log.info("手持备货区解除绑定的数据:{}", param); + String pointCode = param.getString("point_code"); + BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true); + if (ObjectUtil.isEmpty(pointByCode)) { + throw new BadRequestException("点位 [" + pointCode + "] 不存在或者已被禁用!"); + } + //判断是否已经下发了任务 + JSONObject task1 = isSingleTask(pointCode); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); + } + pointByCode.setVehicle_code(""); + pointByCode.setIvt_status("0"); + TaskUtils.updateOptMessageByBStockingPoint(pointByCode); + stockingivtService.updateById(pointByCode); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "备货区解绑成功!"); + return res; + } + + @Override + public JSONObject instorStock(JSONObject jo) { + // param: point_code vehicle_code + log.info("手持入管芯库的数据:{}", jo); + String pointCode = jo.getString("point_code"); + String vehicleCode = jo.getString("vehicle_code"); + //入库,operate_type=1 + String operate_type = jo.getString("operate_type"); + + BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true); + if (ObjectUtil.isEmpty(pointByCode)) { + throw new BadRequestException("点位 [" + pointCode + "] 不存在或者已被禁用!"); + } + if (ObjectUtil.isEmpty(vehicleCode)) { + throw new BadRequestException("托盘信息不能为空!"); + } + if (!vehicleCode.contains("GX")) { + throw new BadRequestException("请扫描或输入正确的托盘码!"); + } + //点位类型必须为入库点,point_type = 0 + String point_type = pointByCode.getPoint_type(); + if (!point_type.equals("0")) { + throw new BadRequestException("请扫描管芯库入库点!"); + } + //校验所扫点位上托盘是否和扫码托盘一致 + if (!vehicleCode.equals(pointByCode.getVehicle_code())) { + throw new BadRequestException("点位:"+pointCode+"已存在托盘"+pointByCode.getVehicle_code()+",与扫码托盘不一致!"); + } + //判断是否已经下发了任务 + JSONObject task1 = isSingleTask(pointCode); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); + } + //生成管芯入库agv任务,两个点 + List list = stockingivtService.getEmptyPointNotTask("1"); + if (list.size() == 0) { + throw new BadRequestException("管芯库无空闲点位!"); + } + BstIvtStockingivt endPoint = list.get(0); + JSONObject param = new JSONObject(); + param.put("point_code1", pointByCode.getPoint_code()); + param.put("point_code2", endPoint.getPoint_code()); + param.put("vehicle_code", vehicleCode); + param.put("task_type", SlitterEnum.TASK_TYPE.code("托盘入管芯库任务")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + instorStockAgvTask.createTask(param); + + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "入管芯库任务生成成功!"); + return res; + } + + @Override + public JSONObject showPapervehicleView(JSONObject param) { + JSONObject jo = new JSONObject(); + String product_area = param.getString("product_area"); + String material_code = param.getString("material_code"); + List list = bstIvtStockingivtMapper.showPapervehicleView(product_area,material_code); + log.info("showPapervehicleView数据size:{}", list.size()); + jo.put("rows", list); + jo.put("status", HttpStatus.HTTP_OK); + jo.put("message", "查询成功!"); + return jo; + } + + @Override + public JSONObject moveStock(JSONObject jo) { + // param: point_code vehicle_code + log.info("手持管芯备货的数据:{}", jo); + String pointCode = jo.getString("point_code"); + String vehicleCode = jo.getString("vehicle_code"); + + BstIvtStockingivt pointByCode = stockingivtService.getPointByCode(pointCode, true); + if (ObjectUtil.isEmpty(pointByCode)) { + throw new BadRequestException("点位 [" + pointCode + "] 不存在或者已被禁用!"); + } + if (ObjectUtil.isEmpty(vehicleCode)) { + throw new BadRequestException("托盘信息不能为空!"); + } + //点位类型必须为入库点,point_type = 1 + String point_type = pointByCode.getPoint_type(); + if (!point_type.equals("1")) { + throw new BadRequestException("请选择管芯库点位!"); + } + //判断是否已经下发了任务 + JSONObject task1 = isSingleTask(pointCode); + if ( ObjectUtil.isNotEmpty(task1)) { + throw new BadRequestException("点位:" + pointCode + "存在未完成的任务:"+task1.getString("task_code")); + } + //生成管芯入库agv任务,两个点 + List list = stockingivtService.getEmptyPointNotTask("3"); + if (list.size() >= 2) { + throw new BadRequestException("备货区无空闲点位!"); + } + BstIvtStockingivt endPoint = list.get(0); + JSONObject param = new JSONObject(); + param.put("point_code1", pointByCode.getPoint_code()); + param.put("point_code2", endPoint.getPoint_code()); + param.put("vehicle_code", vehicleCode); + param.put("task_type", SlitterEnum.TASK_TYPE.code("管芯备货任务")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + instorStockAgvTask.createTask(param); + + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "管芯备货任务生成成功!"); + return res; + } + + @Override + public JSONObject queryProductArea() { + JSONObject jo = new JSONObject(); + + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(Dict::getCode, "stockingivt_product_area") + .isNotNull(Dict::getLabel) + .ne(Dict::getLabel, "") + .orderBy(true, true, Dict::getDict_sort); + List ret = sysDictMapper.selectList(lam); + + JSONArray ja = new JSONArray(); + for(int i=0;i().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, row_num).eq(MdPbPapervehicle::getCol_num, col_num)); + if (ObjectUtil.isNotEmpty(papervehicle) && !papervehicle.getMaterial_code().equals(material_code)) { + throw new BadRequestException("当前排-列已有物料为【" + papervehicle.getMaterial_code() + "】,如需要修改请先清除库存,再进行绑定!"); + } + //查询当前管芯编码是否在托盘中 + MdPbPapervehicle papervehicle_flag = papervehicleService.getOne(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getPaper_code, paper_code)); + if (ObjectUtil.isNotEmpty(papervehicle_flag)) { + throw new BadRequestException("当前管芯编码已存在托盘上:" + papervehicle_flag.getVehicle_code() + "所在位置排列:"+papervehicle_flag.getRow_num()+"-"+papervehicle_flag.getCol_num()); + } + //获取当前纸管的高度 + // 解析描述数组 + String[] tubeArray = material_name.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + + int currLength = Integer.parseInt(tubeArray[tubeArray.length - 1]); + + //校验高度差要大于50MM,否则不允许进行绑定 + int num = Integer.parseInt(row_num); + if (num == 1) { + //只判断第二排的纸管长度 + int nextNum = num + 1; + MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, nextNum)); + if (ObjectUtil.isNotEmpty(nextPaper)) { + //获取第二排的纸管高度和纸管类型 + String nextMaterialName = nextPaper.getMaterial_name(); + String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); + if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { + throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); + } + } + } else { + //判断后一排的纸管高度 + int nextNum = num + 1; + MdPbPapervehicle nextPaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, nextNum)); + if (ObjectUtil.isNotEmpty(nextPaper)) { + //获取后一排的纸管高度和纸管类型 + String nextMaterialName = nextPaper.getMaterial_name(); + String[] nextArray = nextMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + int nextLength = Integer.parseInt(nextArray[nextArray.length - 1]); + if (Math.abs(nextLength - currLength) <= 50 && !material_code.equals(nextPaper.getMaterial_code())) { + throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); + } + } + //判断前一排的纸管高度 + int preNum = num - 1; + MdPbPapervehicle prePaper = papervehicleService.getOne(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, preNum)); + if (ObjectUtil.isNotEmpty(prePaper)) { + //获取后一排的纸管高度和纸管类型 + String preMaterialName = prePaper.getMaterial_name(); + String[] preArray = preMaterialName.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + int preLength = Integer.parseInt(preArray[preArray.length - 1]); + if (Math.abs(preLength - currLength) <= 50 && !material_code.equals(prePaper.getMaterial_code())) { + throw new BadRequestException("相邻排的纸管高度差要大于等于50MM!"); + } + } + } + if (ObjectUtil.isNotEmpty(papervehicle)) { + papervehicle.setQty(1); + papervehicle.setUpdate_optid(currentUserId); + papervehicle.setUpdate_optname(nickName); + papervehicle.setUpdate_time(now); + papervehicleService.updateById(papervehicle); + } else { + papervehicle = new MdPbPapervehicle(); + papervehicle.setIvt_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + papervehicle.setVehicle_code(vehicle_code); + papervehicle.setRow_num(row_num); + papervehicle.setMaterial_code(material_code); + papervehicle.setMaterial_name(material_name); + papervehicle.setQty(1); + papervehicle.setUpdate_optid(currentUserId); + papervehicle.setUpdate_optname(nickName); + papervehicle.setUpdate_time(now); + papervehicleService.save(papervehicle); + } + }else if (type.equals("2")) { + //清除管芯托盘库存 + papervehicleService.remove(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code) + .eq(MdPbPapervehicle::getRow_num, row_num) + .eq(MdPbPapervehicle::getCol_num, col_num)); + } + + //判断绑定的纸管是否在机械手范围内,如果存在的话把最新库存推送给电气 + BstIvtStockingivt bstIvtStockingivt = bstIvtStockingivtMapper.selectOne(new LambdaQueryWrapper().eq(BstIvtStockingivt::getVehicle_code, vehicle_code)); + if (bstIvtStockingivt != null && bstIvtStockingivt.getPoint_type().equals("1")) { + List list = papervehicleService.list(new LambdaQueryWrapper().eq(MdPbPapervehicle::getVehicle_code, vehicle_code)); + JSONObject jo = new JSONObject(); + SlitterTaskUtil.doSavePaperInfos(list, jo); + jo.put("product_area", bstIvtStockingivt.getProduct_area()); + jo.put("device_code", bstIvtStockingivt.getPoint_code()); + wmsToAcsService.getTubeMsg(jo); + } + + JSONObject result = new JSONObject(); + result.put("status", org.springframework.http.HttpStatus.OK.value()); + result.put("message", "操作成功!"); + return result; + } + /** + * 根据输入点位查询是否有未完成任务 + * @param point_code + * @return + */ + 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)){ + 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/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 e5c02f1..3c65ee9 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 @@ -196,7 +196,9 @@ rn = 1; - SELECT p.resource_name, + SELECT + p.workorder_id, + p.resource_name, p.parent_container_name, p.split_group, p.up_or_down, @@ -216,6 +218,7 @@ AND p.container_name LIKE '%虚拟-B%' AND '1' = ( SELECT c.is_used FROM st_ivt_cutpointivt c WHERE c.ext_code = p.resource_name ) GROUP BY + p.workorder_id, p.resource_name, p.parent_container_name, p.split_group, @@ -224,7 +227,7 @@ p.manufacture_sort, p.qzz_size, p.qzz_generation - order by p.qzz_size, + order by p.manufacture_sort desc, p.start_time diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/InstorStockAgvTask.java similarity index 65% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/InstorStockAgvTask.java index 9f69b13..0ca0c81 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/InstorStockAgvTask.java @@ -2,49 +2,41 @@ package org.nl.b_lms.sch.tasks.slitter; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; -import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService; -import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; +import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; +import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; -import org.nl.modules.wql.WQL; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import java.util.ArrayList; import java.util.List; + /** - * @Author: lyd - * @Description: acs请求拔轴完毕的送铜箔子卷任务 + * @Author: zds + * @Description: 管芯agv搬运任务 * @Date: 2024/2/1 */ -@Deprecated @Slf4j @Service -public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask { - private final String THIS_CLASS = SendCopperFoilSubRollTrussTask.class.getName(); +public class InstorStockAgvTask extends AbstractAcsTask { + private final String THIS_CLASS = InstorStockAgvTask.class.getName(); + @Autowired private IschBaseTaskService taskService; @Autowired - private IPdmBiSlittingproductionplanService slittingproductionplanService; - @Autowired - private IBstIvtCutpointivtService bcutpointivtService; - @Autowired - private IBstIvtShafttubeivtService shafttubeivtService; - + private IBstIvtStockingivtService stockingivtService; @Override public List addTask() { /* @@ -61,12 +53,11 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask { .task_type(task.getAcs_task_type()) .start_device_code(task.getPoint_code1()) .next_device_code(task.getPoint_code2()) - .start_device_code2(task.getPoint_code3()) - .next_device_code2(task.getPoint_code4()) + .start_device_code2("") + .next_device_code2("") .vehicle_code(task.getVehicle_code()) .agv_system_type(agv_system_type) .priority(task.getPriority()) - .remark(task.getRemark()) .product_area(task.getProduct_area()) .build(); resultList.add(dto); @@ -75,38 +66,60 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + String task_status = task.getTask_status(); + if(task_status.equals(TaskStatusEnum.FINISHED.getCode())){ + throw new BadRequestException("任务已完成不允许操作!"); + } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 task.setTask_status(TaskStatusEnum.EXECUTING.getCode()); } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + String startPoint = task.getPoint_code1(); + String endPoint = task.getPoint_code2(); + BstIvtStockingivt startPointObj = stockingivtService.getPointByCode(startPoint, false); + BstIvtStockingivt endPointObj = stockingivtService.getPointByCode(endPoint, false); + // 互换资源 (交换载具号) + endPointObj.setIvt_status("1"); + endPointObj.setVehicle_code(task.getVehicle_code()); + TaskUtils.updateOptMessageByBStockingPoint(endPointObj); + stockingivtService.update(endPointObj); + startPointObj.setVehicle_code(""); + startPointObj.setIvt_status("0"); + TaskUtils.updateOptMessageByBStockingPoint(startPointObj); + stockingivtService.update(startPointObj); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if(task_status.equals(TaskStatusEnum.PICK_UP_COMPLETED.getCode())){ + throw new BadRequestException("取货完成不允许取消!"); + } task.setTask_status(TaskStatusEnum.FINISHED.getCode()); } - TaskUtils.updateOptMessageByTask(task); + task.setUpdate_time(DateUtil.now()); + task.setUpdate_optid(currentUserId); + task.setUpdate_optname(currentUsername); taskService.updateById(task); } @Override - @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String currentUserId = SecurityUtils.getCurrentUserId(); String currentUsername = SecurityUtils.getCurrentUsername(); - SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); task.setPoint_code1(form.getString("point_code1")); task.setPoint_code2(form.getString("point_code2")); - task.setMaterial_code(form.getString("material_code")); - task.setAcs_task_type("6"); + task.setVehicle_code(form.getString("vehicle_code")); + task.setAcs_task_type("3"); task.setIs_delete("0"); task.setRequest_param(form.toJSONString()); task.setTask_type(form.getString("task_type")); @@ -115,15 +128,9 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask { task.setCreate_name(currentUsername); task.setCreate_time(DateUtil.now()); task.setHandle_class(THIS_CLASS); - //根据类型获取对应的任务优先级 - JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0); - if (ObjectUtil.isEmpty(priority_jo)) { - task.setPriority("1"); - } else { - task.setPriority(priority_jo.getString("value")); - } + task.setPriority("1"); taskService.save(task); -// this.immediateNotifyAcs(null); + this.immediateNotifyAcs(null); return task.getTask_id(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftCacheAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftCacheAgvTask.java deleted file mode 100644 index 3de44fa..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftCacheAgvTask.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.nl.b_lms.sch.tasks.slitter; - -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.nl.wms.sch.AcsTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @Author: lyd - * @Description: 分切缓存位送子卷业务(废弃) - * @Date: 2024/2/1 - */ -@Deprecated -@Slf4j -@Service -public class SendShaftCacheAgvTask extends AbstractAcsTask { - - @Override - public List addTask() { - return null; - } - - @Override - public void updateTaskStatus(JSONObject taskObj, String status) { - - } - - @Override - public String createTask(JSONObject form) { - return null; - } - - @Override - public void forceFinish(String task_id) { - - } - - @Override - public void cancel(String task_id) { - - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java index 29539c2..230f729 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java @@ -121,23 +121,78 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + + //获取穿拔轴点 + String endPoint = task.getPoint_code2(); + BstIvtShafttubeivt endPointObj = shafttubeivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtShafttubeivt::getPoint_code, endPoint)); + // 将分切计划is_paper_ok --- 2 -> 1 String requestParam = task.getRequest_param(); JSONObject jsonObject = JSONObject.parseObject(requestParam); if (ObjectUtil.isEmpty(requestParam)) { throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误"); } - JSONObject needPlan = jsonObject.getJSONObject("needPlan"); - if (ObjectUtil.isNotEmpty(needPlan)) { - // 回退 - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); - updateWrapper.set(PdmBiSlittingproductionplan::getIs_paper_ok, "1") - .eq(PdmBiSlittingproductionplan::getParent_container_name, needPlan.getString("parent_container_name")) - .eq(PdmBiSlittingproductionplan::getResource_name, needPlan.getString("resource_name")) - .eq(PdmBiSlittingproductionplan::getSplit_group, needPlan.getString("split_group")) - .eq(PdmBiSlittingproductionplan::getUp_or_down, needPlan.getString("up_or_down")) - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO); - slittingproductionplanService.update(updateWrapper); + //是否有接续的套轴计划 + Integer casingCount = jsonObject.getInteger("casingCount"); + + //若有接续套轴则取消套轴计划 + if(casingCount.intValue() > 0){ + JSONObject needPlan = jsonObject.getJSONObject("needPlan"); + if (ObjectUtil.isNotEmpty(needPlan)) { + // 回退最多同一根轴的两个计划 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); + updateWrapper.set(PdmBiSlittingproductionplan::getIs_paper_ok, "1") + .eq(PdmBiSlittingproductionplan::getParent_container_name, needPlan.getString("parent_container_name")) + .eq(PdmBiSlittingproductionplan::getResource_name, needPlan.getString("resource_name")) + .eq(PdmBiSlittingproductionplan::getSplit_group, needPlan.getString("split_group")) + .eq(PdmBiSlittingproductionplan::getUp_or_down, needPlan.getString("up_or_down")) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO); + slittingproductionplanService.update(updateWrapper); + } + } else{//若无接续则取消预分配的气胀轴空位 + //尺寸 + String qzzSize = jsonObject.getString("qzz_size"); + //代数 + String qzzGeneration = jsonObject.getString("qzz_generation"); + //区域 + String location = endPointObj.getPoint_location(); + //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 + if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))) + { + // 查询拔轴设备旁边缓存架点位是否存在 + List shafttubeivts = shafttubeivtService.getByQzzSize(qzzSize ,endPointObj.getPoint_code(), location); + // 对应尺寸的气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + //若预分配的是缓存架,则取消缓存架 + if(StrUtil.equals(shafttubeivt.getPlan(), "1")){ + shafttubeivt.setPlan(""); + shafttubeivt.setUpdate_time(DateUtil.now()); + shafttubeivtService.updateById(shafttubeivt); + log.info("预分配缓存架空位被取消 - {}", shafttubeivt); + }else{ + List qzzCache = shafttubeivtService.getNotTaskShaftCacheEmpty3(qzzSize,qzzGeneration); + if (qzzCache.size() > 0) { + // 预扣除暂存架库存 + BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); + waitUsedPoint.setPlan(""); + waitUsedPoint.setUpdate_time(DateUtil.now()); + shafttubeivtService.updateById(waitUsedPoint); + log.info("预分配暂存架空位被取消 - {}", waitUsedPoint); + } + } + }else{ + // 根据尺寸和代数,查询气涨轴暂存架是否有库存 + List qzzCache = shafttubeivtService.getNotTaskShaftCacheEmpty3(qzzSize,qzzGeneration); + if (qzzCache.size() > 0) { + // 预扣除暂存架库存 + BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); + waitUsedPoint.setPlan(""); + waitUsedPoint.setUpdate_time(DateUtil.now()); + shafttubeivtService.updateById(waitUsedPoint); + log.info("预分配暂存架空位被取消 - {}", waitUsedPoint); + } + } } } task.setUpdate_time(DateUtil.now()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java index 193fabd..f37fccb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java @@ -94,6 +94,7 @@ public class TrussCallShaftCacheTask extends AbstractAcsTask { endPointObj.setHave_qzz("1"); + endPointObj.setPlan(""); TaskUtils.updateOptMessageByBShaftPoint(endPointObj); shafttubeivtService.updateById(endPointObj); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java index 60cfcc5..e42e50d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java @@ -93,6 +93,7 @@ public class TrussSendAirShaftTask extends AbstractAcsTask { task.setTask_status(TaskStatusEnum.FINISHED.getCode()); String startPoint = task.getPoint_code1(); String endPoint = task.getPoint_code2(); + //拔轴设备点位 BstIvtShafttubeivt startPointObj = shafttubeivtService.getByPointCode(startPoint, false); BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByTrussCode(endPoint, false); // 设置点位信息 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index 53dc99c..c216156 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -1,9 +1,8 @@ package org.nl.b_lms.sch.tasks.slitter.auto; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSON; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -26,16 +25,15 @@ import org.nl.b_lms.sch.tasks.first_floor_area.auto.Prun; import org.nl.b_lms.sch.tasks.slitter.StockAreaCallTubeTask; import org.nl.b_lms.sch.tasks.slitter.StockAreaSendVehicleTask; import org.nl.b_lms.sch.tasks.slitter.TrussCallAirShaftTask; -import org.nl.b_lms.sch.tasks.slitter.TrussCallShaftCacheTask; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; +import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.utils.TaskUtils; -import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.RedisUtils; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; @@ -44,11 +42,8 @@ import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Arrays; -import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -77,8 +72,6 @@ public class AutoCallAirShaftTask extends Prun { @Autowired private WmsToAcsService wmsToAcsService; @Autowired - private TrussCallShaftCacheTask trussCallShaftCacheTask; - @Autowired private IBstIvtStockingivtService stockingivtService; @Autowired private ISysNoticeService noticeService; @@ -95,371 +88,487 @@ public class AutoCallAirShaftTask extends Prun { @Autowired private RedisUtils redisUtils; @Autowired - private IMdPbPapervehicleService papervehicleService; + private SlitterMapper slitterMapper; public final static String PARAM_CODE_PLAN_AREA = "PARAM_CODE_PLAN_AREA"; public final static String IS_ONLY_PULLING = "IS_ONLY_PULLING"; public final static String TZ_DAY = "TZ_DAY"; public final static String USE_XN = "USE_XN"; + public final static String MAX_QZZ_NUM = "MAX_QZZ_NUM"; public String stepStr = ""; + public List stepErrorInfo = new ArrayList<>(); + - /** - * hint: 目前只是考虑了上区域 - * 执行套轴和拔轴任务的逻辑处理。 - * 该方法首先寻找空闲的插拔轴位,然后根据不同的条件(如标箔或锂电)来确定区域。接着,它会检查是否有分切计划需要执行, - * 并根据计划来决定是进行套轴还是拔轴操作。如果需要套轴,它会寻找合适的套轴位置,并且在没有合适位置时会触发滚条气涨轴的操作。 - * 同时,该方法也会更新相关的分切计划状态。 - * 套拔轴缓存位满了、没有分切计划,则触发自动创建套拔轴任务 - * update: 24/04/28 内包间只是区分气胀轴大小(即代数),不需要区分锂电/标箔 - */ public void run() { log.info("自动呼叫套轴开始执行..."); // 判断配置参数是否只做拔轴 Param isOnlyPulling = paramService.findByCode(IS_ONLY_PULLING); + //0表示当天数据,1是近两天,2是近3天... Param tzDay = paramService.findByCode(TZ_DAY); - Param paramObj = paramService.findByCode(PARAM_CODE_PLAN_AREA); + //套轴区域 + Param tzArea = paramService.findByCode(PARAM_CODE_PLAN_AREA); + //1:使用虚拟,2:使用实际+虚拟 Param useXn = paramService.findByCode(USE_XN); - // 1、获取空的插拔轴位(无任务) + //气胀轴缓存架最大缓存数量 + Param max_qzz_num = paramService.findByCode(MAX_QZZ_NUM); + // 1、获取空的拔套轴机构位(无任务) List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - "0", "0"); -// emptyPoints.forEach(empty -> doCallShaft(empty, isOnlyPulling, tzDay, paramObj)); + "", "0"); + //循环点位,最多循环两次 for (BstIvtShafttubeivt empty : emptyPoints) { - stepStr = ""; - doCallShaft(empty, isOnlyPulling, tzDay, paramObj, useXn); - redisUtils.set("INFO" + empty.getPoint_code(), stepStr); + stepErrorInfo = new ArrayList<>(); + doCallShaft(isOnlyPulling, tzDay, tzArea, useXn, max_qzz_num); + redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo); } } + /** + * + * @param isOnlyPulling 判断配置参数是否只做拔轴 + * @param tzDay 0表示当天数据,1是近两天,2是近3天... + * @param tzArea 套轴区域 + * @param useXn 1:使用虚拟,2:使用实际+虚拟 + * @param max_qzz_num 气胀轴缓存架最大缓存数量 + */ @Transactional(rollbackFor = Exception.class) - public void doCallShaft(BstIvtShafttubeivt empty, Param isOnlyPulling, Param tzDay, Param paramObj, Param useXn) { - // 标箔:1,锂电:2 改:大小:4代5代 - String specification = empty.getQzz_generation(); - String location = empty.getPoint_location(); - stepStr += "1"; - if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) { - // 只做拔轴 - makePullShaft(empty, specification); - return; - } - stepStr += ",2"; - Integer integer = Integer.valueOf(ObjectUtil.isEmpty(tzDay.getValue()) ? "0" : tzDay.getValue()); - // 2、获取分切计划数据 校验代数 todo: 顺序可能需要考虑 - List planAll; - if (ObjectUtil.isNotEmpty(useXn) && "1".equals(useXn.getValue())) { - planAll = slittingproductionplanService.getAllCutPlan2(integer); - } else { - planAll = slittingproductionplanService.getAllCutPlan(integer); - } - // 排序 - /* List planAll = planAllNoSort.stream() - .sorted(Comparator.comparing( - dto -> LocalDateTime.parse(dto.getStart_time(), TIME_FORMATTER) - )) - .collect(Collectors.toList());*/ - // 过滤 - String value = paramObj.getValue(); - List prefixList = Arrays.asList(value.split("[,,]")); - List plans = planAll.stream() - .filter(p -> prefixList.stream() - .anyMatch(prefix -> p.getResource_name().startsWith(prefix)) && - checkComputationPoint(p, empty) && checkHasTask(p)) - .collect(Collectors.toList()); - if (plans.size() == 0) { - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); - return; - } - // 过滤相比当前时间大于1小时 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - LocalDateTime cutoffTime = LocalDateTime.now().minusHours(1); - List filteredList = planAll.stream() - .filter(p -> { - try { - LocalDateTime startTime = LocalDateTime.parse(p.getStart_time(), formatter); - return startTime.isBefore(cutoffTime); - } catch (Exception e) { - return false; - } - }) - .collect(Collectors.toList()); - List filterCheckPlans = null; - if (filteredList.size() > 0) { - log.info("过滤时间之后的数据:{}", filteredList); - // 获取当前三个位置的所有管芯信息 - List papers = papervehicleService.getAllTubesByPoint(location); - if (CollectionUtil.isNotEmpty(papers)) { - List tubeCodes = papers.stream() - .map(MdPbPapervehicle::getMaterial_code) - .distinct() - .collect(Collectors.toList()); - // 获取所有dto中的分切计划信息 - List parents = filteredList.stream() - .map(SlitterPlanDistinctDto::getParent_container_name) - .distinct() - .collect(Collectors.toList()); - List checkPlans = slittingproductionplanService.list(new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getParent_container_name, parents) - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) - .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); - filterCheckPlans = checkPlans.stream() - .filter(p -> tubeCodes.contains("1".equals(p.getPaper_tube_or_FRP()) ? p.getPaper_tube_material() : p.getFRP_material())) - .collect(Collectors.toList()); + public void doCallShaft(Param isOnlyPulling, Param tzDay, Param tzArea, Param useXn, Param max_qzz_num) { + //查询套轴缓存位:点位启用、有子卷、气胀轴字段不为空、且无未完成的任务 + List notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint("0"); + //若有拔轴任务,则会执行本段代码 + //对满足的需拔轴子卷遍历下发任务,同时每次拔轴下发前判断是否有可以接续的套轴计划 + for(int i= 0;i().eq(BstIvtCutpointivt::getIvt_id,cutpointivt.getIvt_id().toString())); + if(StrUtil.equals(nowcutpointivt.getIs_used(),"0") ){ + log.warn("点位{}已被禁用,直接跳过!", qzz_point); + continue; } - } - log.info("获取过滤后的分切计划数据:{}", JSON.toJSONString(plans)); - // 查看套轴对接位是否满了 - // todo: 这里需要注意不要去校验071的任务,不然提前释放货位没意义。 - List emptyShaftPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", - "1", location, "0"); - stepStr += ",6"; - // 如果满了就只做拔轴 预留一个货位?,防止套轴直接站满 - if (emptyShaftPoint.size() < 1) { - log.info("暂存位没有空位!正在检测是否存在半个点位!"); - // 校验是否存在半个位置,且有分切计划 - // 获取只有一个位置的点位 - stepStr += ",7"; - List halfPlacePoint = bcutpointivtService.getAllHalfPlacePoints("1", - "1", location); - List qzzs = halfPlacePoint.stream() - .map(p -> ObjectUtil.isNotEmpty(p.getQzz_no1()) ? p.getQzz_no1() : p.getQzz_no2()) - .collect(Collectors.toList()); - if (qzzs.size() == 0) { - log.info("没有半个点位,或者对应的另一半分切计划没有找到!"); - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); + //气胀轴编码 + String qzzNo = cutpointivt.getQzz_no(); + // 获取对应的分切计划 + List list = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getQzzno, qzzNo) + .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); + if (list.size() == 0) { + log.warn("点位{}上气涨轴[{}]对应的分切计划不存在!", qzz_point, qzzNo); + bcutpointivtService.update(new UpdateWrapper() + .eq("ivt_id",cutpointivt.getIvt_id()) + .set("is_used","0") + .set("remark","点位:"+qzz_point+"上气胀轴" + qzzNo + "的分切计划不存在,无效点位自动禁用") + .set("update_time",DateUtil.now())); + //跳过当前子卷 + continue; + } + //需拔子卷计划 + PdmBiSlittingproductionplan plan = list.get(0); + //再次查询空的拔轴机构点位,优先查同区的拔轴设备 + List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", + cutpointivt.getPoint_location(), "0"); + if(emptyPoints.size() == 0){ + String point_location = "0"; + if (StrUtil.equals(cutpointivt.getPoint_location(), "0")) + point_location = "1"; + if (StrUtil.equals(cutpointivt.getPoint_location(), "1")) + point_location = "0"; + emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", + point_location, "0"); + if(emptyPoints.size() == 0){ + log.warn("气涨轴[{}]排队中,暂时无空闲拔轴机构!", qzzNo); + bcutpointivtService.update(new UpdateWrapper() + .eq("ivt_id",cutpointivt.getIvt_id()) + .set("remark","排队中,暂时无空闲拔轴机构!") + .set("update_time",DateUtil.now())); + //跳过当前子卷 + continue; + } + } + List collect = list.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); + JSONObject param = new JSONObject(); + param.put("point_code1", qzz_point); + param.put("point_code2", emptyPoints.get(0).getPoint_code()); + param.put("vehicle_code", qzzNo); + param.put("qzz_no", qzzNo); + param.put("containers", collect); + // 当前纸管信息 + SlitterTaskUtil.putCurrentPaperSpec(param, list); + // 套管数量 + param.put("casingCount", 0); + // 拔管数量 + param.put("pullCount", list.size()); + // 当前分切计划的气涨轴尺寸 + param.put("qzz_size", plan.getQzz_size()); + // 当前分切计划的气涨轴代数 + param.put("qzz_generation", plan.getQzz_generation()); + //任务类型 + param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>穿拔轴位")); + //任务区域 + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + + param.put("is_bushing", SlitterConstant.SLITTER_NO); + param.put("is_pulling", SlitterConstant.SLITTER_YES); + + //判断系统参数是否只做拔轴 + if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) { + stepErrorInfo.add("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); + //校验是否有空气胀轴位 + if(!this.havaEmptyShaft(emptyPoints.get(0),plan,max_qzz_num)) { + log.warn("气涨轴[{}]排队中,暂时无空闲气胀轴空位放空轴!", qzzNo); + bcutpointivtService.update(new UpdateWrapper() + .eq("ivt_id",cutpointivt.getIvt_id()) + .set("remark","排队中,暂时无空闲气胀轴空位放空轴!") + .set("update_time",DateUtil.now())); + }; + // 只做拔轴,直接下发即可 + trussCallAirShaftTask.createTask(param); return; } - stepStr += ",12"; - // 从寻查找分切计划,并放在plans, 没有考虑区域问题, 里面会考虑代数 - List tzOKPlans = slittingproductionplanService.getByQzzNos(qzzs, "01"); - if (ObjectUtil.isEmpty(tzOKPlans)) { - stepStr += ",13"; - log.info("计划找不到"); + + //下发拔轴任务前,判断是否有满足的套轴计划 + List plans = this.getCanIssuedCutPlan(tzDay, tzArea, useXn); + //过滤找出 同尺寸同代数的需套轴的分切计划 + SlitterPlanDistinctDto planDto = plans.stream() + .filter(planD -> (cutpointivt.getQzz_size().equals(planD.getQzz_size())&& cutpointivt.getQzz_generation().equals(planD.getQzz_generation()))) + .findFirst() + .orElse(null); + //没有可以接续的套轴计划,直接下发拔轴任务即可 + if (planDto == null) { + log.warn("当前拔轴任务无可接续的套轴计划:{}", cutpointivt); + if(!this.havaEmptyShaft(emptyPoints.get(0),plan,max_qzz_num)) { + log.warn("气涨轴[{}]排队中,暂时无空闲气胀轴空位放空轴!", qzzNo); + bcutpointivtService.update(new UpdateWrapper() + .eq("ivt_id",cutpointivt.getIvt_id()) + .set("remark","排队中,暂时无空闲气胀轴空位放空轴!") + .set("update_time",DateUtil.now())); + }; + trussCallAirShaftTask.createTask(param); return; } - PdmBiSlittingproductionplan oneTzOkPlan = tzOKPlans.get(0); - if (oneTzOkPlan.getOrder_type().equals("1")) { - plans = slittingproductionplanService.getAllHalfPlan(qzzs); - } else { - // 改切 - plans = slittingproductionplanService.getAllHalfPlanRestruct(qzzs); - } - if (plans.size() == 0) { - log.info("没有找到对应的另一半分切计划没有找到"); - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); - return; - } - log.info("找到对应的另一半的计划 - {}", plans); - } - stepStr += ",14"; - // 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足 - // todo: 需要校验分切设备是在对应的区域中 - SlitterPlanDistinctDto planDto = plans.stream() - .filter(planD -> ("6".equals(planD.getQzz_size()) || - ("3".equals(planD.getQzz_size()) && specification.equals(planD.getQzz_generation()))) && - havaEmptyShaft(planD, empty)) - .findFirst() - .orElse(null); - if (planDto == null) { - log.warn("过滤3/6寸和代数输出结果为空,跳过此次套轴,直接拔轴。此时点位对应代数:{}", specification); - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); - return; - } - log.info("此时获取的分切计划dto: {}", planDto); - // 获取分切计划dto中对应的需要套轴的分切计划 最多两个计划 - List needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() - .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) - .eq(PdmBiSlittingproductionplan::getParent_container_name, planDto.getParent_container_name()) - .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) - .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) - .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); - if (needPlans.size() == 0) { - // 可能是改切,所以换成restruct_container_name来使用 - needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + log.info("此时获取的可以接续分切计划dto: {}", planDto); + // 获取分切计划dto中对应的需要套轴的分切计划 最多两个计划 + List needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) - .eq(PdmBiSlittingproductionplan::getRestruct_container_name, planDto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getParent_container_name, planDto.getParent_container_name()) .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); - } - // 如果过滤出来的需要套轴的信息,则直接获取 - if (CollectionUtil.isNotEmpty(filterCheckPlans)) { - needPlans = filterCheckPlans; - } - log.info("通过dto获取的分切计划:{}", needPlans); - // 获取其中一条 - PdmBiSlittingproductionplan needPlan = needPlans.get(0); - String qzzSize = needPlan.getQzz_size(); - - String qzz_generation = needPlan.getQzz_generation(); - // 从套轴对接位获取相同气涨轴大小 - // update: 不需要(同标箔或者锂电分开) - // todo: 需要校验区域0/1 - stepStr += ",15"; - List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification); - log.info("查找到满足到对应尺寸的点位-{}", qzzPoint); - if (qzzPoint.size() == 0) { - stepStr += ",16"; - //若套轴暂存位没有相同规格的气胀轴,直接去气胀轴库找即可 - // 调用ACS滚条气涨轴下来 - if (!toAcsOutShaft(qzzSize,location, empty)) { - log.error("呼叫出轴失败-穿拔轴{}不进行套轴,跳过!", empty.getPoint_code()); - return; + if (needPlans.size() == 0) { + // 可能是改切,所以换成restruct_container_name来使用 + needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getRestruct_container_name, planDto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); } - toCallAgvMovePaperTube(needPlans, location, empty); + log.info("通过dto获取的分切计划:{}", needPlans); + // 获取其中一条 + PdmBiSlittingproductionplan needPlan = needPlans.get(0); + String qzzSize = needPlan.getQzz_size(); + // 创建任务 + //需拔轴的套轴暂存点位 + param.put("point_code1", qzz_point); + //拔轴设备点位 + param.put("point_code2", emptyPoints.get(0).getPoint_code()); + //拔轴的气胀轴号 + param.put("vehicle_code", qzzNo); + // 气胀轴号 + param.put("qzz_no", qzzNo); + //拔轴后套轴对应的分切计划 + param.put("needPlan", planDto); + // 是否拔轴 + param.put("is_pulling", SlitterConstant.SLITTER_YES); + //任务类型 + param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>穿拔轴位")); + //任务区域 + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + //气胀轴尺寸 + param.put("qzz_size", needPlan.getQzz_size()); + // 当前分切计划的气涨轴代数 + param.put("qzz_generation", needPlan.getQzz_generation()); + // 所需的纸管规格 + SlitterTaskUtil.putNeedPaperSpec(param, needPlans); + // 设置是否套轴:1:正常套轴,2:待定(到后面还会申请套轴) + setIsSleeveShaft(param); + // 当前拔轴的分切计划,一根轴最多2卷子卷 + List oldPlans = slittingproductionplanService.getByQzzNo(qzzNo); // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 - saveCutPlanMessage(empty, needPlans, qzzSize); - stepStr += ",97"; - return; - } - // 查找一条没任务的点位 - BstIvtCutpointivt startPoint = qzzPoint.get(0); - // 当前纸管的规格信息 - String oldQzzNo = ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) - ? startPoint.getQzz_no1() : startPoint.getQzz_no2(); - stepStr += ",33"; - if (oldQzzNo == null) { - log.error("当前气胀轴的编码为空!"); - stepStr += ",96"; - return; - } - String startPointCode = ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) - ? startPoint.getTruss_point_code1() : startPoint.getTruss_point_code2(); - if (startPointCode == null) { - log.error("当前点位的编码为空!"); - stepStr += ",96"; - return; - } - stepStr += ",34"; - // 如果A6寸 B3寸,则需要过滤到精确点位 - if (ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) && ObjectUtil.isNotEmpty(startPoint.getQzz_no2())) { - // 获取需要的数据 - List aPlans = slittingproductionplanService.getByQzzNoByStatus(startPoint.getQzz_no1(), null); - List bPlans = slittingproductionplanService.getByQzzNoByStatus(startPoint.getQzz_no2(), null); - log.info("筛选得到的计划值:{},{}", aPlans, bPlans); - if (aPlans.size() > 0) { - PdmBiSlittingproductionplan aPlan = aPlans.get(0); - if (needPlan.getQzz_size().equals(aPlan.getQzz_size())) { - oldQzzNo = aPlan.getQzzno(); - startPointCode = startPoint.getTruss_point_code1(); - } else { - if (bPlans.size() > 0) { - PdmBiSlittingproductionplan bPlan = bPlans.get(0); - if (needPlan.getQzz_size().equals(bPlan.getQzz_size())) { - oldQzzNo = bPlan.getQzzno(); - startPointCode = startPoint.getTruss_point_code2(); - } + saveCutPlanMessage(emptyPoints.get(0), needPlans, qzzSize, needPlan.getQzz_generation()); + //设置当前的拔管纸管信息到param里 + SlitterTaskUtil.putCurrentPaperSpec(param, oldPlans); + // 套管数量 + param.put("casingCount", needPlans.size()); + // 拔管数量 + param.put("pullCount", oldPlans.size()); + param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList())); + //呼叫agv换托盘 + toCallAgvMovePaperTube(needPlans, "0", emptyPoints.get(0)); + //生成并下发拔轴行架任务 + trussCallAirShaftTask.createTask(param); + // 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴) + needPlans.forEach(p -> { + p.setIs_paper_ok("2"); + TaskUtils.updateOptMessageBySlitterPlan(p); + }); + //更新分切计划状态 + slittingproductionplanService.updateBatchById(needPlans); + }//拔轴任务循环已结束 + + //拔轴任务循环已结束,判断系统参数是否只做拔轴,若否进入套轴计划判断循环 + if (!(ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue()))) { + log.error("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); + stepErrorInfo.add("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); + //获取可下发的分切计划 + List plans = this.getCanIssuedCutPlan(tzDay, tzArea, useXn); + //对满足的计划遍历下发任务 + for(int i= 0;i emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", + location, "0"); + if(emptyPoints.size() == 0){ + if (StrUtil.equals(location, "0")){ + location = "1"; + }else if (StrUtil.equals(location, "1")){ + location = "0"; + } + emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", + location, "0"); + if(emptyPoints.size() == 0){ + log.warn("分切计划{}排队中,暂时无空闲拔轴机构!", planDto.getWorkorder_id()); + slittingproductionplanService.update(new UpdateWrapper() + .eq("workorder_id",planDto.getWorkorder_id()) + .set("remark","排队中,暂时无空闲拔轴机构!") + .set("update_time",DateUtil.now())); + //跳过当前计划 + continue; } } + //判断是否有对应尺寸的气胀轴,无跳过 + if(!this.havaEnoughShaft(planDto, emptyPoints.get(0))){ + log.warn("分切计划{}排队中,暂时相应规格{}寸{}代的气胀轴!", planDto.getWorkorder_id(),planDto.getQzz_size(),planDto.getQzz_generation()); + slittingproductionplanService.update(new UpdateWrapper() + .eq("workorder_id",planDto.getWorkorder_id()) + .set("remark","分切计划排队中,暂时相应规格"+planDto.getQzz_size()+"寸"+planDto.getQzz_generation()+"代的气胀轴!") + .set("update_time",DateUtil.now())); + continue; + } + // 获取分切计划dto中对应的需要套轴的分切计划 最多两个计划 + List needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getParent_container_name, planDto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + if (needPlans.size() == 0) { + // 可能是改切,所以换成restruct_container_name来使用 + needPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getRestruct_container_name, planDto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, planDto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + } + //若套轴暂存架没有相同规格的气胀轴,直接去气胀轴库找即可 + // 调用ACS滚条气涨轴下来 + if (!toAcsOutShaft(planDto, emptyPoints.get(0))) { + log.error("呼叫出轴失败-穿拔轴{}不进行套轴,跳过!", emptyPoints.get(0).getPoint_code()); + stepErrorInfo.add("呼叫出轴失败-穿拔轴" + emptyPoints.get(0).getPoint_code() + "不进行套轴,跳过!"); + return; + } + //调用agv换托盘 + toCallAgvMovePaperTube(needPlans, "0", emptyPoints.get(0)); + // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 + saveCutPlanMessage(emptyPoints.get(0), needPlans, qzzSize, qzz_generation); } } - stepStr += ",35"; - // 创建任务 - JSONObject param = new JSONObject(); - param.put("point_code1", startPointCode); - param.put("point_code2", empty.getPoint_code()); - param.put("vehicle_code", oldQzzNo); - // 气胀轴号 - param.put("qzz_no", oldQzzNo); - param.put("needPlan", planDto); - // 是否拔轴 - param.put("is_pulling", SlitterConstant.SLITTER_YES); - param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>穿拔轴位")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - param.put("qzz_size", needPlan.getQzz_size()); - // 所需的纸管规格 - SlitterTaskUtil.putNeedPaperSpec(param, needPlans); - // 设置是否套轴:1:正常套轴,2:待定(到后面还会申请套轴) - setIsSleeveShaft(param); - // 最多两条 - List oldPlans = slittingproductionplanService.getByQzzNo(oldQzzNo); - if (oldPlans.size() == 0) { - stepStr += ",96"; - log.warn("当前气胀轴编码{},找不到对应的计划", oldQzzNo); - // 把点位禁用 - startPoint.setIs_used("0"); - startPoint.setRemark("气胀轴" + oldQzzNo + "的计划不存在,无效点位自动禁用。"); - startPoint.setUpdate_time(DateUtil.now()); - bcutpointivtService.updateById(startPoint); - return; - } - // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 - saveCutPlanMessage(empty, needPlans, qzzSize); - SlitterTaskUtil.putCurrentPaperSpec(param, oldPlans); - // 套管数量 - param.put("casingCount", needPlans.size()); - // 拔管数量 - param.put("pullCount", oldPlans.size()); - param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList())); - toCallAgvMovePaperTube(needPlans, location, empty); - stepStr += ",36"; - trussCallAirShaftTask.createTask(param); - stepStr += ",37"; - // 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴) - needPlans.forEach(p -> { - p.setIs_paper_ok("2"); - TaskUtils.updateOptMessageBySlitterPlan(p); - }); - slittingproductionplanService.updateBatchById(needPlans); - stepStr += ",97"; } /** - * 判断是不是有空位置 - * @param planD - * @return + *获取满足条件的可下发的分切计划 */ - public boolean havaEmptyShaft(SlitterPlanDistinctDto planD, BstIvtShafttubeivt empty) { + public List getCanIssuedCutPlan(Param tzDay, Param tzArea, Param useXn){ + Integer integer = Integer.valueOf(ObjectUtil.isEmpty(tzDay.getValue()) ? "0" : tzDay.getValue()); + // 2、获取分切计划数据 校验代数 + List planAll; + //1:使用虚拟,2:使用实际+虚拟 + if (ObjectUtil.isNotEmpty(useXn) && "1".equals(useXn.getValue())) { + planAll = slittingproductionplanService.getAllCutPlan2(integer); + } else { + // todo: sql待优化 + planAll = slittingproductionplanService.getAllCutPlan(integer); + } + // 过滤车间 + String value = tzArea.getValue(); + List prefixList = Arrays.asList(value.split("[,,]")); + List plans = planAll.stream() + .filter(p -> prefixList.stream() + .anyMatch(prefix -> p.getResource_name().startsWith(prefix)) && + checkComputationPoint(p, null) && checkHasTask(p)) + .collect(Collectors.toList()); + return plans; + } + + /** + * 判断是不是有足够的 对应尺寸、代数的气胀轴库存 + * @param planD 当前需套轴的计划信息 + * @param empty 当前分配的拔轴设备点位 + * @return true 有库存, false无库存 + */ + public boolean havaEnoughShaft(SlitterPlanDistinctDto planD, BstIvtShafttubeivt empty) { + //气胀轴尺寸3寸或6寸 String qzzSize = planD.getQzz_size(); + //代数4或5 String qzzGeneration = planD.getQzz_generation(); + //当前拔轴设备所在区域0或1 String location = empty.getPoint_location(); - // 需要区分上下 - List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); - if (shafttubeivts.size() == 0) { - log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位"); - return false; + + // 根据尺寸和代数,查询气涨轴暂存架是否有库存 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, + qzzGeneration, ""); + if (qzzCache.size() > 0) { + return true; } - // 气涨轴库 - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - // 判断气胀轴是否有轴 - JSONArray device_rows = new JSONArray(); - JSONObject device_obj = new JSONObject(); - device_rows.add(device_obj); - device_obj.put("device_code", shafttubeivt.getPoint_code()); - // todo: 暂时都是B1 - device_obj.put("product_area", "B1"); - JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); - if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { - log.error("获取气胀轴库信息失败"); - return false; + else{//若暂存架无库存,根据当前拔轴设备所在区域判断是否有缓存架,以及缓存架是否有库存 + //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 + if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))){ + // 查询拔轴设备旁边缓存架点位是否存在 + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); + if (shafttubeivts.size() == 0) { + log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); + return false; + } + // 对应尺寸的气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + //判断是否存在残留的脏数据 + String plan = shafttubeivt.getPlan(); + if(ObjectUtil.isNotEmpty(plan) && StrUtil.equals(plan, "1")){ + log.error("气胀轴库" + shafttubeivt.getPoint_code() + "预分配字段plan异常,需要确认并初始化!"); + return false; + } + + // 判断气胀轴是否有轴 + JSONArray device_rows = new JSONArray(); + JSONObject device_obj = new JSONObject(); + device_rows.add(device_obj); + device_obj.put("device_code", shafttubeivt.getPoint_code()); + device_obj.put("product_area", "B1"); + JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); + if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { + log.error("获取气胀轴库信息失败"); + return false; + } + JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); + if (data2.getInteger("qty") > 0) { + return true; + }else{ + log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); + return false; + } + } } - boolean judgment1 = true; - boolean judgment2 = true; - JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); - if (data2.getInteger("qty") == 0) { - log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); - judgment1 = false; - } - // 获取气涨轴缓存没有任务的点位 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize, - shafttubeivt.getQzz_generation(), location); - if (qzzCache.size() == 0) { - log.warn("未找到气胀轴密集库气涨轴规格「" + qzzSize + "」的暂存位"); - judgment2 = false; - } - // 从套轴对接位获取相同气涨轴大小 - // update: 不需要(同标箔或者锂电分开) - // todo: 需要校验区域0/1 - stepStr += ",15"; - List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, qzzGeneration); - log.info("查找可以拔轴的点位数:{}", qzzPoint.size()); - if (!judgment1 && !judgment2 && qzzPoint.size() == 0) { - log.warn("都没有气胀轴"); - return false; + return false; + } + /** + * 判断是不是有足够的 对应尺寸、代数的气胀轴空位 + * @param empty 当前分配的拔轴设备点位 + * @param plan 当前需拔轴的计划信息 + * @param max_qzz_num 气胀轴缓存架最大缓存数量 + * @return true 有空位, false无空位 + */ + public boolean havaEmptyShaft(BstIvtShafttubeivt empty, PdmBiSlittingproductionplan plan, Param max_qzz_num) { + //气胀轴尺寸3寸或6寸 + String qzzSize = plan.getQzz_size(); + //代数4或5 + String qzzGeneration = plan.getQzz_generation(); + //当前拔轴设备所在区域0或1 + String location = empty.getPoint_location(); + //获取气胀轴缓存架最大缓存数量 + Integer max_num = Integer.valueOf(max_qzz_num.getValue()); + + //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 + if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))) + { + // 查询拔轴设备旁边缓存架点位是否存在 + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); + if (shafttubeivts.size() == 0) { + log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); + return false; + } + // 对应尺寸的气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + //判断是否存在残留的脏数据 + String planStr = shafttubeivt.getPlan(); + if(ObjectUtil.isNotEmpty(planStr) && StrUtil.equals(planStr, "1")){ + log.error("气胀轴库" + shafttubeivt.getPoint_code() + "预分配字段plan异常,需要确认并初始化!"); + return false; + } + // 判断气胀轴是否有轴 + JSONArray device_rows = new JSONArray(); + JSONObject device_obj = new JSONObject(); + device_rows.add(device_obj); + device_obj.put("device_code", shafttubeivt.getPoint_code()); + device_obj.put("product_area", "B1"); + JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); + if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { + log.error("获取气胀轴库信息失败"); + return false; + } + JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); + //若缓存架数量已经满了 + if (data2.getInteger("qty") >= max_num) { + log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴空位。"); + // 根据尺寸和代数,查询气涨轴暂存架是否有空位 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCacheEmpty2(qzzSize,qzzGeneration); + if (qzzCache.size() <= 0) { + log.warn("气胀轴暂存架没空位,无法分配拔轴任务"); + return false; + } + // 预扣除暂存架库存 + BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); + waitUsedPoint.setPlan("1"); + waitUsedPoint.setUpdate_time(DateUtil.now()); + bstIvtShafttubeivtService.updateById(waitUsedPoint); + log.info("暂存架空位被预分配 - {}", waitUsedPoint); + }else{ + // 预扣除缓存架库存 + shafttubeivt.setPlan("1"); + shafttubeivt.setUpdate_time(DateUtil.now()); + bstIvtShafttubeivtService.updateById(shafttubeivt); + log.info("缓存架空位被预分配 - {}", shafttubeivt); + } + + }else{ + // 根据尺寸和代数,查询气涨轴暂存架是否有库存 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCacheEmpty2(qzzSize,qzzGeneration); + if (qzzCache.size() <= 0) { + log.warn("气胀轴暂存架没空位,无法分配拔轴任务"); + return false; + } + // 预扣除暂存架库存 + BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); + waitUsedPoint.setPlan("1"); + waitUsedPoint.setUpdate_time(DateUtil.now()); + bstIvtShafttubeivtService.updateById(waitUsedPoint); + log.info("暂存架空位被预分配 - {}", waitUsedPoint); } return true; } @@ -487,12 +596,10 @@ public class AutoCallAirShaftTask extends Prun { /** * 呼叫AGV更换纸管 - * * @param needPlans 所需要套轴的分切计划 * @param location 位置 */ public Boolean toCallAgvMovePaperTube(List needPlans, String location, BstIvtShafttubeivt empty) { - stepStr += ",17"; // 最多两根 List tubes = needPlans.stream().map(plan -> { if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { @@ -508,12 +615,12 @@ public class AutoCallAirShaftTask extends Prun { .eq(BstIvtShafttubeivt::getPoint_type, empty.getPoint_type()) .eq(BstIvtShafttubeivt::getIs_used, "1")); log.info("同位置的另一台穿拔轴机构:{}", one); - stepStr += ",18"; // 另一台所需要的数量 int otherDeviceTubeSize = 0; // 缺省的数量 int needQuantity = 0; // 判断当前区域location对应的备货区是否含有相同的纸管 校验了不在搬运中 + // todo: 要考虑防止所需要的托盘被搬走! // type=1(桁架底下的托盘), 关联对象material_code=纸管, qty > 0 List useList = stockingivtService.getPaperTubePoint("1", tubes.get(0), location, 0); if (useList.size() > 0) { @@ -526,7 +633,6 @@ public class AutoCallAirShaftTask extends Prun { } // 说明三个位置中有包含此纸管的数据。 if (sum >= tubes.size() + otherDeviceTubeSize) { - stepStr += ",19"; return true; } // 如果不够,就计算还缺多少个 @@ -534,7 +640,6 @@ public class AutoCallAirShaftTask extends Prun { // 兜底 needQuantity = needTemp > 0 ? needTemp : 1; } - stepStr += ",20"; // 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中 List stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location); // 找一个点位: 目的需要的点位 @@ -547,11 +652,11 @@ public class AutoCallAirShaftTask extends Prun { } } if (needPoint == null) { - stepStr += ",21"; // 不存在则站内通知 noticeService.createNotice("备货区找不到[" + tubes.get(0) + "]的纸管信息", "点位[" + empty.getPoint_name() + "]无法从备货区找到纸管信息", NoticeTypeEnum.EXCEPTION.getCode()); + stepErrorInfo.add("备货区找不到[" + tubes.get(0) + "]的纸管信息"); return false; } // 找到就创建AGV搬运任务 @@ -559,7 +664,6 @@ public class AutoCallAirShaftTask extends Prun { List needMovePointList = stockingivtService.getCanMovePointList(location, "1"); // 空位就直接创建搬过来的任务 BhTubeMovePointDto needMovePoint = needMovePointList.size() > 0 ? needMovePointList.get(0) : null; - stepStr += ",22"; if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) { // 直接搬过来即可 JSONObject param = new JSONObject(); @@ -573,17 +677,15 @@ public class AutoCallAirShaftTask extends Prun { .eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code())); doSavePaperInfos(paperList, param); stockAreaCallTubeTask.createTask(param); - stepStr += ",23"; return true; } - stepStr += ",24"; // 查找一个没有任务的空位 - List list = stockingivtService.getEmptyPointNotTask(location, "0"); + List list = stockingivtService.getEmptyPointNotTask("3"); if (list.size() == 0) { - stepStr += ",25"; noticeService.createNotice("备货区找不到空位置搬运", "点位[" + empty.getPoint_name() + "]无法从备货区找到空位", NoticeTypeEnum.EXCEPTION.getCode()); + stepErrorInfo.add("备货区找不到空位置搬运。"); return false; } BstIvtStockingivt endPoint = list.get(0); @@ -597,7 +699,7 @@ public class AutoCallAirShaftTask extends Prun { param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具")); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); stockAreaSendVehicleTask.createTask(param); - stepStr += ",26"; + stepErrorInfo.add("备货区交换托盘中...请等待。"); return true; } @@ -605,116 +707,121 @@ public class AutoCallAirShaftTask extends Prun { /** * 获取对应的气胀轴库1 * - * @param qzzSize 气涨轴尺寸 - * @param location 位置:上半部分还是下半部分 * @param empty 套拔轴点位 */ - private Boolean toAcsOutShaft(String qzzSize, String location, BstIvtShafttubeivt empty) { - stepStr += ",27"; - // 需要区分上下 - List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); - stepStr += ",28"; - if (shafttubeivts.size() == 0) { - log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位"); - stepStr += ",98"; - return false; - } - // 气涨轴库 - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - stepStr += ",29"; - // 判断气胀轴是否有轴 - JSONArray device_rows = new JSONArray(); - JSONObject device_obj = new JSONObject(); - device_rows.add(device_obj); - device_obj.put("device_code", shafttubeivt.getPoint_code()); - // todo: 暂时都是B1 - device_obj.put("product_area", "B1"); - JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); - if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { - stepStr += ",98"; - log.error("获取气胀轴库信息失败"); - return false; - } - boolean judgment1 = true; - boolean judgment2 = true; - // 获取气涨轴缓存没有任务的点位 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, - shafttubeivt.getQzz_generation(), location); - if (qzzCache.size() == 0) { - log.warn("未找到气胀轴密集库气涨轴规格「" + qzzSize + "」的暂存位"); - judgment2 = false; - } - JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); - if (data2.getInteger("qty") == 0) { - log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); - judgment1 = false; - // 预扣除 - if (judgment2) { + private Boolean toAcsOutShaft(SlitterPlanDistinctDto planD, BstIvtShafttubeivt empty) { + + //气胀轴尺寸3寸或6寸 + String qzzSize = planD.getQzz_size(); + //代数4或5 + String qzzGeneration = planD.getQzz_generation(); + //当前拔轴设备所在区域0或1 + String location = empty.getPoint_location(); + + //若点位是短区,且计划需要4短;若点位是长区,且计划需要5长 + if ((StrUtil.equals(qzzGeneration, "4") && StrUtil.equals(location, "0")) || (StrUtil.equals(qzzGeneration, "5") && StrUtil.equals(location, "1"))) + { + // 查询拔轴设备旁边缓存架点位是否存在 + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); + if (shafttubeivts.size() == 0) { + log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴缓存位"); + return false; + } + // 对应尺寸的气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + // 判断气胀轴是否有轴 + JSONArray device_rows = new JSONArray(); + JSONObject device_obj = new JSONObject(); + device_rows.add(device_obj); + device_obj.put("device_code", shafttubeivt.getPoint_code()); + // + device_obj.put("product_area", "B1"); + JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); + if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { + log.error("获取气胀轴库信息失败"); + return false; + } + JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); + if (data2.getInteger("qty") <= 0) { + log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); + + // 根据尺寸和代数,查询气涨轴暂存架是否有库存 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, + qzzGeneration, ""); + if (qzzCache.size() <= 0) { + log.warn("没有气胀轴,不给ACS写出轴信息"); + return false; + } + // 预扣除暂存架库存 BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); waitUsedPoint.setPlan("1"); - waitUsedPoint.setTube_name1("预分配给" + empty.getPoint_code()); waitUsedPoint.setUpdate_time(DateUtil.now()); bstIvtShafttubeivtService.updateById(waitUsedPoint); + }else{ + // 预扣除缓存架库存 + shafttubeivt.setPlan("1"); + shafttubeivt.setUpdate_time(DateUtil.now()); + bstIvtShafttubeivtService.updateById(shafttubeivt); + } + // 判断气胀轴密集库是否有数据 + JSONArray acsParam = new JSONArray(); + // 出轴的信号,若缓存架没轴,电气会通过acs申请acsCallShaftFromCache,从暂存架出轴 + JSONObject acsQzz = new JSONObject(); + acsQzz.put("device_code", shafttubeivt.getPoint_code()); + acsQzz.put("code", "to_command"); + acsQzz.put("value", "1"); + acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + acsParam.add(acsQzz); + log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); + JSONObject action = wmsToAcsService.action(acsParam); + log.info("下发给ACS写信号出气涨轴返回参数:{}", action); + + }else{ + // 根据尺寸和代数,查询气涨轴暂存架是否有库存 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, + qzzGeneration, ""); + if (qzzCache.size() > 0) { + // 判断气胀轴密集库是否有数据 + JSONArray acsParam = new JSONArray(); + // 出轴的信号,若缓存架没轴,电气会通过acs申请acsCallShaftFromCache,从暂存架出轴 + JSONObject acsQzz = new JSONObject(); + acsQzz.put("device_code", empty.getPoint_code()); + acsQzz.put("code", "to_command"); + // todo: 需要和电气沟通协议,直接从暂存架出轴 + acsQzz.put("value", "1"); + acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + acsParam.add(acsQzz); + log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); + JSONObject action = wmsToAcsService.action(acsParam); + log.info("下发给ACS写信号出气涨轴返回参数:{}", action); + // 预扣除暂存架库存 + BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); + waitUsedPoint.setPlan("1"); + waitUsedPoint.setUpdate_time(DateUtil.now()); + bstIvtShafttubeivtService.updateById(waitUsedPoint); + }else{ + log.warn("没有气胀轴,不给ACS写出轴信息"); + return false; } } - stepStr += ",30"; - if (!judgment1 && !judgment2) { - log.warn("没有气胀轴,不给ACS写出轴信息"); - stepStr += ",98"; - return false; - } - // 判断气胀轴密集库是否有数据 - JSONArray acsParam = new JSONArray(); - // 出轴的信号 - JSONObject acsQzz = new JSONObject(); - acsQzz.put("device_code", shafttubeivt.getPoint_code()); - acsQzz.put("code", "to_command"); - acsQzz.put("value", "1"); - acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - acsParam.add(acsQzz); - stepStr += ",31"; - log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); - JSONObject action = wmsToAcsService.action(acsParam); - log.info("下发给ACS写信号出气涨轴返回参数:{}", action); return true; } - /** - * 创建气涨轴缓存的桁架任务 - * - * @param qzzSize 气涨轴尺寸 - * @param location 位置:上半部分还是下半部分 - * @param empty 套拔轴点位 - */ - private void toCreatShaftCacheTask(String qzzSize, String location, BstIvtShafttubeivt empty) { - // 获取气涨轴缓存没有任务的点位 - List shafttubeivts = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize, empty.getQzz_generation(), location); - if (shafttubeivts.size() == 0) { - throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位"); - } - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - JSONObject param = new JSONObject(); - param.put("point_code1", shafttubeivt.getPoint_code()); - param.put("point_code2", empty.getPoint_code()); - param.put("is_bushing", SlitterConstant.SLITTER_YES); - param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴位<>气胀轴缓存位")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - param.put("qzz_size", qzzSize); - trussCallShaftCacheTask.createTask(param); - } - /** * 保存信息到点位上 * * @param empty 套拔轴机位置 * @param needPlans 需要的分切计划 * @param qzzSize 气涨轴尺寸 + * @param qzz_generation 气涨轴代数 */ - private void saveCutPlanMessage(BstIvtShafttubeivt empty, List needPlans, String qzzSize) { - stepStr += ",32"; + private void saveCutPlanMessage(BstIvtShafttubeivt empty, List needPlans, String qzzSize, String qzz_generation) { log.info("正在保存套轴信息 - {} , 尺寸 - {} 到点位 - {}", needPlans, qzzSize, empty); + empty.setHave_qzz(SlitterConstant.SLITTER_YES); empty.setQzz_size(qzzSize); + empty.setQzz_generation(qzz_generation); + TaskUtils.updateOptMessageByBShaftPoint(empty); for (PdmBiSlittingproductionplan plan : needPlans) { if (needPlans.size() == 1 || SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { @@ -750,81 +857,6 @@ public class AutoCallAirShaftTask extends Prun { log.info("保存完毕,并且分切计划已经更改"); } - /** - * 不需要套轴,就只做拔轴 - * update: 不需要(区分标箔、锂电) - * - * @param empty 空的插拔轴点位 - * @param specification 代数(4、5) - */ - private void makePullShaft(BstIvtShafttubeivt empty, String specification) { - stepStr += ",3"; - stepStr += ",8"; - log.info("不需要套轴,只做拔轴!"); - //查询套轴缓存位哦:point_type=1 - List notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint(empty.getPoint_location()); - //所有TC暂存位有卷的:Truss_point_code1,Truss_point_code2有任务的 - //根据point_code排序 - if (notTaskPoints.size() == 0) { - stepStr += ",99"; - return; - } - stepStr += ",9"; - // 筛选一个满足的位置:3寸:看代数4/5;6寸直接 - //判断气胀轴代 - CutpointAirShhaftDto cutpointivt = notTaskPoints.stream() - .sorted(Comparator.comparingLong(CutpointAirShhaftDto::getIvt_id)) - .filter(cut -> "6".equals(cut.getQzz_size()) || - ("3".equals(cut.getQzz_size()) && specification.equals(cut.getQzz_generation()))) - .findFirst() - .orElse(null); - if (cutpointivt == null) { - stepStr += ",99"; - return; - } - stepStr += ",10"; - String pointCode1 = cutpointivt.getPoint_code(); - String qzzNo = cutpointivt.getQzz_no(); - // 获取对应的分切计划 - List list = slittingproductionplanService.list(new LambdaQueryWrapper() - .eq(PdmBiSlittingproductionplan::getQzzno, qzzNo) - .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); - if (list.size() == 0) { - stepStr += ",99"; - log.warn("气涨轴[{}]对应的分切计划不存在!", qzzNo); - bcutpointivtService.update(new UpdateWrapper() - .eq("ivt_id",cutpointivt.getIvt_id()) - .set("is_used","0") - .set("remark","气胀轴" + qzzNo + "的计划不存在,无效点位自动禁用") - .set("update_time",DateUtil.now())); - - return; - } - PdmBiSlittingproductionplan plan = list.get(0); - // todo: 考虑是否有空位(如果气涨轴库和气胀轴暂存架都没有空位,则退出)【暂时不考虑】 - List collect = list.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); - JSONObject param = new JSONObject(); - param.put("point_code1", pointCode1); - param.put("point_code2", empty.getPoint_code()); - param.put("vehicle_code", qzzNo); - param.put("qzz_no", qzzNo); - param.put("containers", collect); - // 当前纸管信息 - SlitterTaskUtil.putCurrentPaperSpec(param, list); - // 套管数量 - param.put("casingCount", 0); - // 拔管数量 - param.put("pullCount", list.size()); - // hint: 当前分切计划的气涨轴尺寸 - param.put("qzz_size", plan.getQzz_size()); - param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>穿拔轴位")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - param.put("is_bushing", SlitterConstant.SLITTER_NO); - param.put("is_pulling", SlitterConstant.SLITTER_YES); - trussCallAirShaftTask.createTask(param); - stepStr += ",11"; - } - /** * 检查是否有同设备的任务 * @@ -837,8 +869,8 @@ public class AutoCallAirShaftTask extends Prun { if (tasks.size() == 0) { return true; } + stepErrorInfo.add("存在为" + dto.getResource_name() + "送轴任务,不会继续套轴..."); log.info("存在任务,不允许套轴{}", dto); - stepStr += ",5"; return false; } @@ -863,18 +895,18 @@ public class AutoCallAirShaftTask extends Prun { ? shafttubeivt.getContainer_name1() : shafttubeivt.getContainer_name2(); // 获取这个子卷号的分切计划 PdmBiSlittingproductionplan byContainerName = slittingproductionplanService.getByContainerName(containerCode); - if ("1".equals(byContainerName.getOrder_type())) { - // 判断母卷 - if (byContainerName.getParent_container_name().equals(dto.getParent_container_name())) { - stepStr += ",4"; - return false; - } - } else { - // 判断改切 - if (byContainerName.getRestruct_container_name().equals(dto.getParent_container_name())) { - stepStr += ",4"; - return false; + String parent = SlitterConstant.SLITTER_TYPE_PAPER.equals(byContainerName.getPaper_tube_or_FRP()) + ? byContainerName.getParent_container_name() + : byContainerName.getRestruct_container_name(); + if (byContainerName.getResource_name().equals(dto.getResource_name())) { + // 如果是同设备同母卷、同组,证明是一根轴上的,故允许套轴 + if (parent.equals(dto.getParent_container_name()) + && byContainerName.getSplit_group().equals(dto.getSplit_group())) { + return true; } + stepStr += ",4"; + stepErrorInfo.add(">>>穿拔轴机" + shafttubeivt.getPoint_code() + "已经在为" + dto.getResource_name() + "套轴了..."); + return false; } } // 校验是否在拔轴暂存位、分切对接位有相同设备的分切计划信息。 @@ -883,6 +915,8 @@ public class AutoCallAirShaftTask extends Prun { if (cuts2.size() == 0) { return true; } + List stringList = cuts2.stream().map(BstIvtCutpointivt::getPoint_code).collect(Collectors.toList()); + stepErrorInfo.add("设备" + dto.getResource_name() + "检测到暂存架" + stringList + "有套好的管芯,不会进行套轴。"); } log.info("检查有同母卷不允许套轴:{}", dto); stepStr += ",4"; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java index ed852f5..f565938 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java @@ -22,7 +22,8 @@ public enum SlitterEnum { TASK_TYPE(MapOf.of("穿拔轴缓存<>穿拔轴位", "010801", "穿拔轴缓存<>分切对接位", "010802", "穿拔轴位<>气胀轴缓存位", "010803" , "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807" , "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811" - , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815")); + , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", + "托盘入管芯库任务", "010816","管芯备货任务", "010817")); private Map code; public String code(String desc) { 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 231444f..28955d5 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 @@ -9,6 +9,10 @@ import lombok.Data; */ @Data public class SlitterPlanDistinctDto { + /** + * 分切计划标识 + */ + private String workorder_id; /** * 分切设备 */ 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 99466c1..48e3367 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 @@ -2054,23 +2054,27 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { public JSONObject acsRequestPoint(JSONObject param) { log.info("acsRequestPoint输入参数为--------------------------:" + param.toString()); JSONObject result = new JSONObject(); - // task_code、type + // 1正常二次取货 2正常二次放货 3退轴二次放货 String type = param.getString("type"); String taskCode = param.getString("task_code"); SchBaseTask task = taskService.getOne(new LambdaQueryWrapper() .eq(SchBaseTask::getTask_code, taskCode) + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) .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, @@ -2089,6 +2093,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { targetPoint = task.getPoint_code1(); } } + //二次放货 if ("2".equals(type)) { if (task.getPoint_code2().contains("FHD")) { // 请求放货 @@ -2115,6 +2120,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { targetPoint = task.getPoint_code2(); } } + //退轴二次放货 if ("3".equals(type)) { if (task.getPoint_code2().contains("FHD")) { // 请求放货 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java index 639be74..7a5a062 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java @@ -1,5 +1,6 @@ package org.nl.wms.pda.mps.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,7 +31,7 @@ public class PaperTubeController { @PostMapping("/queryPaperMaterial") @Log("查询纸管物料") - + @SaIgnore public ResponseEntity queryPaperMaterial(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(paperTubeService.queryPaperMaterial(whereJson), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java index 6032ebb..e32cbfe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.wms.pda.mps.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -142,6 +143,7 @@ public class PaperTubeServiceImpl implements PaperTubeService { JSONArray rows = WQL.getWO("PDA_02").addParamMap(map).process().getResultJSONArray(0); JSONObject result = new JSONObject(); result.put("rows", rows); + result.put("status", HttpStatus.HTTP_OK); result.put("message", "查询成功!"); return result; } 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 8441ead..709e8f1 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 @@ -43,6 +43,13 @@ public interface PrintService { */ JSONObject customerPrintBY2(JSONObject whereJson); + /** + * 管芯打印 + * @param whereJson + * @return + */ + public JSONObject gx_print(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 3a815af..d2e3f38 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 @@ -461,6 +461,57 @@ public class PrintServiceImpl implements PrintService { return jo; } + @Override + public JSONObject gx_print(JSONObject whereJson) { + JSONObject jo = new JSONObject(); + String paper_code = jo.getString("paper_code"); + String material_code = jo.getString("material_code"); + String material_name = jo.getString("material_name"); + String standard_weight = jo.getString("standard_weight"); + + + WQLObject printTab = WQLObject.getWQLObject("pdm_bi_printinfo"); + // 生成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("paper_code,material_code,material_name,standard_weight\n"); + + bw.write(paper_code + "," + + material_code + "," + + material_name + "," + + standard_weight + "KG"+ "\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-ui/src/layout/components/Sidebar/Logo.vue b/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue index e14b13d..1726d48 100644 --- a/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue +++ b/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue @@ -34,7 +34,7 @@ export default { }, data() { return { - title: '甘肃海亮铜箔LMS', + title: '印尼海亮铜箔LMS', logo: Logo } } diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue b/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue index 9e88ece..7bfe6d1 100644 --- a/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue @@ -51,7 +51,7 @@ /> - + + + + + + + + + + + + + + + + 打印 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/paper/mdPbPaper.js b/lms/nladmin-ui/src/views/b_lms/bst/ivt/paper/mdPbPaper.js new file mode 100644 index 0000000..da5f651 --- /dev/null +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/paper/mdPbPaper.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/mdPbPaper', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/mdPbPaper/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/mdPbPaper', + method: 'put', + data + }) +} + +export function print(data) { + return request({ + url: '/api/mdPbPaper/print', + method: 'post', + data + }) +} + +export default { add, edit, del, print } diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/papervehicle/index.vue b/lms/nladmin-ui/src/views/b_lms/bst/ivt/papervehicle/index.vue index dc7e26c..1b83e3d 100644 --- a/lms/nladmin-ui/src/views/b_lms/bst/ivt/papervehicle/index.vue +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/papervehicle/index.vue @@ -2,20 +2,61 @@ + + + + + + + + + + + + + + - - - + + + + + + @@ -26,13 +67,10 @@ - - - - + - +