src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -40,4 +40,6 @@ List<LocMast> selectAreaEmpty(Short locType1,Integer crnNo); List<LocMast> selectAllLocNotEmpty(@Param("groupLoc") List<String> groupOuterLoc); LocMast getLocFByMatnr(String locNo); } src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.Date; import java.util.List; @Mapper @@ -23,4 +24,6 @@ int updateInspect( @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch); List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr); int updateIoTime(@Param("workNo") Integer workNo, @Param("ioTime") Date ioTime); } src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -89,4 +89,5 @@ List<LocDetlAll> selectOwnerAllAnfme(); List<String> getSameDetl(String matnr, String batch, String grade); } src/main/java/com/zy/asrs/service/LocMastService.java
@@ -57,4 +57,6 @@ List<LocMast> selectAreaEmpty(Short locType1, Integer crnNo); boolean checkAllLocEmpty(List<String> groupLoc); LocMast getLocFByMatnr(String matnr); } src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -21,4 +21,6 @@ List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr); boolean updateIoTime(Integer workNo, Date ioTime); } src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -121,4 +121,11 @@ return result.size() <= 0; } @Override public LocMast getLocFByMatnr(String matnr) { return this.baseMapper.getLocFByMatnr(matnr); } } src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -79,4 +79,9 @@ public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) { return this.baseMapper.selectPakoutQuery(staNo, matnr); } @Override public boolean updateIoTime(Integer workNo, Date ioTime) { return this.baseMapper.updateIoTime(workNo, ioTime) > 0; } } src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -213,6 +213,45 @@ } break; // 并板入库 case 55: // 根据工作号,查询工作明细档 List<WrkDetl> wrkDetls55 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls55.isEmpty()) { // exceptionHandle("并板入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } // 修改库存明细数量,如无库存,曾新增 for (WrkDetl wrkDetl:wrkDetls55) { LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo())); locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", locDetl.getLocNo())); locDetl = new LocDetl(); locDetl.sync(wrkDetl); locDetl.setLocNo(wrkMast.getLocNo()); // 库位号 locDetl.setAnfme(wrkDetl.getAnfme()); // 数量 locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码 locDetl.setModiTime(now); locDetl.setAppeTime(now); if (!locDetlService.insert(locDetl)) { // exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 新增库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } // 修改库位状态 Q ====>> F if (locMast.getLocSts().equals("Q")) { locMast.setLocSts("F"); locMast.setBarcode(wrkMast.getBarcode()); locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("并板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } break; case 54: // 根据工作号,查询工作明细档 List<WrkDetl> wrkDetls54 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); @@ -259,6 +298,7 @@ } } break; // 盘点入库 case 57: // 根据工作号,查询工作明细档 src/main/java/com/zy/common/web/WcsController.java
@@ -8,10 +8,13 @@ import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.MatServiceImpl; import com.zy.asrs.utils.Utils; import com.zy.common.CodeRes; import com.zy.common.model.LocDto; import com.zy.common.model.LocTypeDto; import com.zy.common.model.StartupDto; import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import com.zy.common.web.param.SearchLocParam; import lombok.extern.slf4j.Slf4j; @@ -52,6 +55,14 @@ private WorkService workService; @Autowired private BasCrnpService basCrnpService; @Autowired private StaDescService staDescService; @Autowired private WrkMastLogService wrkMastLogService; @Autowired private WrkDetlLogService wrkDetlLogService; @Autowired private MatServiceImpl matService; @PostMapping("/pakin/loc/v1") @ResponseBody @@ -342,4 +353,159 @@ return dto; } @PostMapping("/process/loc/v1") @ResponseBody @Transactional public synchronized R processLoc() { log.info("收到WCS罐装出库接口请求"); Date now = new Date(); // 查询库存状态位F 且 库存明细包含该物料的库位 LocMast tarLoc = locMastService.getLocFByMatnr("BZ10100ZZ00000010"); if (Cools.isEmpty(tarLoc)) { throw new CoolException("没有可出库的库位"); } List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 105).ne("wrk_sts", 14)); if (!Cools.isEmpty(tarLoc)) { if (wrkMasts.size() > 3) { throw new CoolException("当前已有4笔出库任务,暂停下发"); } } // 获取源站 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("type_no", 105) .eq("stn_no", 2301) .eq("crn_no", tarLoc.getCrnNo())); Integer sourceStaNo = staDesc.getCrnStn(); // 生成工作号 int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(103)); // 生成工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(105); // 入出库状态 wrkMast.setIoPri(13D); // 优先级:13 wrkMast.setCrnNo(tarLoc.getCrnNo()); wrkMast.setSourceStaNo(sourceStaNo); // 源站 wrkMast.setStaNo(2301); // 目标站 wrkMast.setSourceLocNo(tarLoc.getLocNo()); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setBarcode(tarLoc.getBarcode()); wrkMast.setAppeTime(now); wrkMast.setModiTime(now); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("保存工作档失败,出库库位号:"+tarLoc.getLocNo()); } // 生成工作档明细 List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", tarLoc.getLocNo())); for (LocDetl locDetl : locDetls) { WrkDetl wrkDetl = new WrkDetl(); wrkDetl.sync(locDetl); wrkDetl.setZpallet(wrkMast.getBarcode()); wrkDetl.setIoTime(now); wrkDetl.setWrkNo(workNo); wrkDetl.setBatch(locDetl.getBatch()); wrkDetl.setAnfme(locDetl.getAnfme()); // 数量 wrkDetl.setAppeTime(now); wrkDetl.setModiTime(now); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } } // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 if (tarLoc.getLocSts().equals("F")) { tarLoc.setLocSts("P"); tarLoc.setModiTime(now); if (!locMastService.updateById(tarLoc)) { throw new CoolException("预约库位状态失败,库位号:"+tarLoc.getLocNo()); } } else { throw new CoolException(tarLoc.getLocNo() + "库位不是在库状态"); } return R.ok(); } @PostMapping("/process/in/loc/v1") @ResponseBody @Transactional public synchronized R processInLoc(@RequestBody SearchLocParam param){ log.info("灌装线收到WCS入库接口请求====>>入参:{}", param); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>() .eq("barcode", param.getBarcode()) .eq("io_type", 105) .eq("wrk_sts", 14)); if (Cools.isEmpty(wrkMast)) { log.info("查询不到该托盘码的罐装出库任务,托盘码位{" + param.getBarcode() + "}" ); throw new CoolException("查询不到该托盘码的罐装出库任务,托盘码位{" + param.getBarcode() + "}" ); } // 获取目标站 Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() .eq("type_no", 55) .eq("stn_no", 2106) .eq("crn_no", wrkMast.getCrnNo()); StaDesc staDesc = staDescService.selectOne(wrapper); if (Cools.isEmpty(staDesc)) { throw new CoolException("入库路径不存在!"); } try { // 保存工作明细档历史档 if (!wrkMastLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作明细档历史档失败"); } // 保存工作主档历史档 if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作主档历史档失败"); } Date now = new Date(); // 堆垛机站点(目标站) Integer staNo = staDesc.getCrnStn(); // 更新工作档数据状态 wrkMast.setIoTime(now); wrkMast.setIoType(55); wrkMast.setWrkSts(2L); wrkMast.setSourceStaNo(2106); wrkMast.setStaNo(staNo); wrkMast.setLocNo(wrkMast.getSourceLocNo()); wrkMast.setSourceLocNo(""); wrkMast.setModiTime(now); if (!wrkMastService.updateById(wrkMast)) { throw new CoolException("更新工作档数据状态失败"); } List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); for (WrkDetl wrkDetl : wrkDetls) { Mat mat = matService.selectByMatnr("CP10103TY22014617"); WrkDetl wrkDetl1 = new WrkDetl(); wrkDetl1.sync(wrkDetl); wrkDetl1.sync(mat); wrkDetl1.setBatch(param.getBatch()); wrkDetl1.setIoTime(now); wrkDetlService.insert(wrkDetl1); } wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("matnr", "BZ10100ZZ00000010").eq("wrk_no",wrkMast.getWrkNo())); // 更新明细档io_time (历史档关联使用) // wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); // 修改库位状态 Q.拣料/盘点/并板再入库 LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); locMast.setLocSts("Q"); locMast.setModiTime(new Date()); if (!locMastService.updateById(locMast)) { throw new CoolException("修改库位状态失败"); } } catch (Exception e) { throw new CoolException("入库失败!"); } StartupDto dto = new StartupDto(); dto.setWorkNo(wrkMast.getWrkNo()); dto.setCrnNo(wrkMast.getCrnNo()); dto.setSourceStaNo(wrkMast.getSourceStaNo()); dto.setStaNo(wrkMast.getStaNo()); dto.setLocNo(wrkMast.getLocNo()); log.info("WCS入库接口返参:{},托盘码:{}", dto, param.getBarcode()); return R.ok().add(dto); } } src/main/java/com/zy/common/web/param/SearchLocParam.java
@@ -17,4 +17,6 @@ // 库位规格( 0:未知, 1:低库位, 2:高库位) private Short locType1; private String batch; } src/main/resources/mapper/LocMastMapper.xml
@@ -117,5 +117,15 @@ </foreach> </select> <select id="getLocFByMatnr" resultMap="BaseResultMap"> SELECT TOP 1 mast.* FROM asr_loc_mast mast JOIN asr_loc_detl detl ON mast.loc_no = detl.loc_no AND mast.loc_sts = 'F' AND detl.matnr = #{matnr} ORDER BY mast.modi_time </select> </mapper> src/main/resources/mapper/WrkDetlMapper.xml
@@ -111,4 +111,11 @@ and awd.matnr + '-' + awd.batch = #{matnr} </select> <update id="updateIoTime"> update asr_wrk_detl set io_time = #{ioTime} where 1=1 and wrk_no = #{workNo} </update> </mapper> src/main/resources/mapper/WrkMastMapper.xml
@@ -63,7 +63,7 @@ </resultMap> <select id="selectToBeCompleteData" resultMap="BaseResultMap"> select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 105 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no </select> <select id="selectToBeHistoryData" resultMap="BaseResultMap"> src/main/webapp/static/js/common.js
@@ -271,6 +271,7 @@ ,{field: 'check$', align: 'center',title: '要求检验', hide: true} ,{field: 'danger$', align: 'center',title: '危险品', hide: true} ,{field: 'owner$', align: 'center',title: '货主', hide: true} ,{field: 'memo', align: 'center',title: '备注', hide: false} ,{field: 'payment$', align: 'center',title: '货物形态', hide: false} ] src/main/webapp/static/js/locDetl/locDetl.js
@@ -24,6 +24,7 @@ ,{field: 'safeQty', align: 'center',title: '安全库存量', hide: true} ,{field: 'weight', align: 'center',title: '重量', hide: false} ,{field: 'owner$', align: 'center',title: '货主', hide: false} ,{field: 'memo', align: 'center',title: '备注', hide: false} ,{field: 'payment$', align: 'center',title: '货物状态', hide: false} ,{field: 'length', align: 'center',title: '单箱毛重', hide: true} ,{field: 'volume', align: 'center',title: '单箱体积', hide: true}