pom.xml
@@ -45,12 +45,17 @@ <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- 使用本地 JAR 解决缺失的 cn.cool:framework:jar:3.2.0 --> <!-- <dependency>--> <!-- <groupId>cn.cool</groupId>--> <!-- <artifactId>framework</artifactId>--> <!-- <version>3.2.0</version>--> <!-- <scope>system</scope>--> <!-- <systemPath>${project.basedir}/version/lib/framework-3.2.0.jar</systemPath>--> <!-- </dependency>--> <dependency> <groupId>cn.cool</groupId> <artifactId>framework</artifactId> <version>3.2.0</version> <scope>system</scope> <systemPath>${project.basedir}/version/lib/framework-3.2.0.jar</systemPath> </dependency> <dependency> <groupId>org.apache.tika</groupId> src/main/java/com/zy/api/controller/WcsApiController.java
@@ -82,13 +82,18 @@ return wcsApiService.combInPub(combParam, 10031L); } @ManagerAuth(memo = "移库任务") @RequestMapping("/task/move") public R taskMove(@RequestBody CompleteParam combParam) { /** * WCS申请在库库位更换库位 * @param combParam * @return */ @ManagerAuth(memo = "WCS申请在库库位更换库位") @RequestMapping("/openapi/change/loc") public R changeLoc(@RequestBody CompleteParam combParam) { if (Objects.isNull(combParam)) { return R.error("参数不能为空!!"); } return mobileService.taskMove(combParam, 10031L); return mobileService.changeLoc(combParam, 10031L); } @@ -103,5 +108,18 @@ } /** * 重新分配入库信息 */ @ManagerAuth @ApiOperation("WCS申请任务重新分配入库") @PostMapping("/openapi/reassign/loc") public R repeatLocs(@RequestBody CompleteParam params) { if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } return wcsApiService.repeatLoc(params); } } src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
@@ -13,8 +13,6 @@ @ApiModel(value = "ReceviceTaskParams", description = "穿线墙参数") public class ReceviceTaskParams implements Serializable { @ApiModelProperty("机台号") private String deviceNo; @ApiModelProperty("流水号") private Integer id; src/main/java/com/zy/api/service/WcsApiService.java
@@ -77,4 +77,11 @@ * @return */ R combInPub(CompleteParam combParam, long l); /** * WCS申请任务重新分配入库 * @param params * @return */ R repeatLoc(CompleteParam params); } src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -128,6 +128,7 @@ if (!Objects.isNull(code) && code.equals(200)) { if (!Objects.isNull(order)) { order.setReportOnce(5); order.setSettle(6L); orderService.updateById(order); } return XSR.ok("入库单上报完成!!"); src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -13,10 +13,13 @@ import com.zy.api.service.WcsApiService; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.CompleteParam; import com.zy.asrs.enums.LocStsType; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.LocDetlServiceImpl; import com.zy.asrs.service.impl.MatServiceImpl; import com.zy.asrs.service.impl.RowLastnoServiceImpl; import com.zy.asrs.service.impl.WrkDetlServiceImpl; import com.zy.asrs.utils.Utils; import com.zy.common.constant.MesConstant; import com.zy.common.utils.HttpHandler; import org.springframework.beans.BeanUtils; @@ -43,6 +46,8 @@ private MatService matService; @Autowired private LocDetlService locDetlService; @Autowired private RowLastnoService rowLastnoService; /** * 通知WCS锁定库位,及禁止当前库位的一切操作 @@ -150,6 +155,7 @@ } return R.ok(); } /** * 堆垛机执行状态上报 * @@ -191,6 +197,7 @@ /** * 獲取庫位信息 * * @param params * @return */ @@ -234,6 +241,7 @@ /** * 条码站入库申请 * * @param combParam * @param l * @return @@ -242,4 +250,108 @@ public R combInPub(CompleteParam combParam, long l) { return null; } /** * WCS申请任务重新分配入库 * * @param params * @return */ @Override public R repeatLoc(CompleteParam params) { if (Objects.isNull(params.getTaskNo())) { return R.error("工作号不能为空!!"); } WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getTaskNo())); if (Objects.isNull(wrkMast)) { return R.error("任务档不存在,或已加入历史档"); } LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); if (Objects.isNull(locMast)) { return R.error("库位信息不存在!!"); } Integer whsType = Utils.GetWhsType(Integer.parseInt(wrkMast.getSourceStaNo())); if (whsType.equals(1)) { RowLastno lastno = rowLastnoService.selectById(whsType); if (Objects.isNull(lastno)) { return R.error("堆垛要策略不存在!!"); } if (locMast.getRow1().equals(141)) { LocMast selectOne = locMastService.selectOne(new EntityWrapper<LocMast>() .ne("row1", 141) .ge("crn_no", lastno.getsCrnNo()) .le("crn_no", lastno.geteCrnNo()) .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) .orderAsc(Arrays.asList("row1", "bay1", "lev1"))); if (!Objects.isNull(selectOne)) { Map<String, Object> response = new HashMap<>(); response.put("locNo", selectOne.getLocNo()); //原库位置空 locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type); locMastService.updateById(locMast); //新库位预约入库 selectOne.setLocSts(LocStsType.LOC_STS_TYPE_S.type); locMastService.updateById(selectOne); wrkMast.setLocNo(selectOne.getLocNo()); wrkMastService.updateById(wrkMast); return R.ok().add(response); } else { return R.error("暂无可用库位!!"); } } else { LocMast selectOne = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("crn_no", wrkMast.getCrnNo()) .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) .orderAsc(Arrays.asList("row1", "bay1", "lev1"))); if (!Objects.isNull(selectOne)) { Map<String, Object> response = new HashMap<>(); response.put("locNo", selectOne.getLocNo()); //原库位置空 locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type); locMastService.updateById(locMast); //新库位预约入库 selectOne.setLocSts(LocStsType.LOC_STS_TYPE_S.type); locMastService.updateById(selectOne); wrkMast.setLocNo(selectOne.getLocNo()); wrkMastService.updateById(wrkMast); return R.ok().add(response); } else { return R.error("暂无可用库位!!"); } } } else { LocMast selectOne = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("crn_no", wrkMast.getCrnNo()) .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type) .orderAsc(Arrays.asList("row1", "bay1", "lev1"))); if (!Objects.isNull(selectOne)) { Map<String, Object> response = new HashMap<>(); response.put("locNo", selectOne.getLocNo()); //原库位置空 locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type); locMastService.updateById(locMast); //新库位预约入库 selectOne.setLocSts(LocStsType.LOC_STS_TYPE_S.type); locMastService.updateById(selectOne); wrkMast.setLocNo(selectOne.getLocNo()); wrkMastService.updateById(wrkMast); return R.ok().add(response); } else { return R.error("暂无可用库位!!"); } } } } src/main/java/com/zy/asrs/entity/param/CompleteParam.java
@@ -22,6 +22,8 @@ //目标库位 private String locNo; private String taskNo; //任务号 private String workNo; src/main/java/com/zy/asrs/entity/param/PakinMatsByQRParams.java
@@ -14,4 +14,7 @@ @ApiModelProperty("物料编码") private String matnr; @ApiModelProperty("BS Code") private String threeCode; } src/main/java/com/zy/asrs/service/MobileService.java
@@ -176,4 +176,13 @@ * @return */ R taskMove(CompleteParam combParam, long l); /** * WCS申请在库库位更换库位 * @param combParam * @param l * @return */ R changeLoc(CompleteParam combParam, long l); } src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -17,6 +17,7 @@ import com.zy.asrs.service.*; import com.zy.asrs.utils.MatUtils; import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.asrs.utils.Utils; import com.zy.common.constant.HIKApiConstant; import com.zy.common.constant.MesConstant; import com.zy.common.entity.Parameter; @@ -25,6 +26,7 @@ import com.zy.common.model.MesCombParam; import com.zy.common.model.StartupDto; import com.zy.common.model.enums.WorkNoType; import com.zy.common.properties.SlaveProperties; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; @@ -86,6 +88,9 @@ private ManLocDetlService manLocDetlService; @Autowired private ManLocDetlMapper manLocDetlMapper; @Autowired private SlaveProperties slaveProperties; @Autowired private AdjDetlService adjDetlService; @@ -1316,6 +1321,7 @@ throw new CoolException("数据错误:单据不存在!!"); } List<OrderDetlPakin> detlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>() .eq(!Cools.isEmpty(params.getThreeCode()), "three_code", params.getThreeCode()) .eq(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr()) .eq("order_id", orderPakin.getId())); if (Objects.isNull(detlPakins) || detlPakins.isEmpty()) { @@ -2003,7 +2009,7 @@ wrkMast.setIoType(1); // 入出库状态:1.入库 wrkMast.setCrnNo(dto.getCrnNo()); wrkMast.setSourceStaNo(dto.getSourceStaNo() + ""); wrkMast.setStaNo(dto.getStaNo() + ""); wrkMast.setStaNo(!Objects.isNull(dto.getStaNo()) ? dto.getStaNo() + "" : null); wrkMast.setLocNo(dto.getLocNo()); wrkMast.setIoPri(13D); // 优先级 wrkMast.setBarcode(pakin.getZpallet()); // 托盘码 @@ -2580,6 +2586,7 @@ /** * 移库任务申请 * * @param combParam * @param userId * @return @@ -2642,6 +2649,97 @@ } /** * 6.15WCS申请在库库位更换库位 * @param combParam * @param l * @return */ @Override @Transactional(rollbackFor = Exception.class) public R changeLoc(CompleteParam combParam, long l) { if (Objects.isNull(combParam)) { return R.error("参数不能为空!"); } if (Objects.isNull(combParam.getLocNo())) { return R.error("库位号不能为空!!"); } LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", combParam.getLocNo())); if (Objects.isNull(locMast)) { return R.error("库位信息不存在或库位状态非 F.在库 状态"); } List<Integer> doubleLocs = slaveProperties.getDoubleLocs(); List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() .in("row1", doubleLocs) .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)); Map<String, Object> result = new HashMap<>(); LocMast selected = new LocMast(); for (LocMast loc : locMasts) { LocMast temLoc = locMastService.selectById(loc.getLocNo()); if (Objects.isNull(temLoc)) { throw new CoolException("数据错误, 原库位信息不存在!!"); } String shallowLoc = Utils.getShallowLoc(slaveProperties, temLoc.getLocNo()); LocMast locMast1 = locMastService.selectById(shallowLoc); if (Objects.isNull(locMast1)) { throw new CoolException("数据错误, 新库位信息不存在!!"); } if (!locMast1.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) { continue; } selected = loc; break; } WrkMast moveTask = generateMoveTask(selected, locMast); result.put("locNo", selected.getLocNo()); result.put("taskNo", moveTask.getWrkNo()); return R.ok().add(result); } /** * 生成移库任务 * * @param result * @param sourceLoc * @return */ @Transactional(rollbackFor = Exception.class) public WrkMast generateMoveTask(LocMast result, LocMast sourceLoc) { WrkMast wrkMast = new WrkMast(); int workNo = commonService.getWorkNo(0); wrkMast.setWrkNo(workNo); wrkMast.setLocNo(result.getLocNo()); wrkMast.setSourceLocNo(sourceLoc.getLocNo()); wrkMast.setWrkSts(11L); wrkMast.setIoType(11); wrkMast.setCrnNo(sourceLoc.getCrnNo()); wrkMast.setAppeTime(new Date()); wrkMast.setModiTime(new Date()); wrkMast.setIoPri(13D); wrkMast.setWrkDate(new Date()); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("任务保存失败!!"); } List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLoc.getLocNo())); locDetls.forEach(detl -> { detl.setLocNo(result.getLocNo()); if (!locDetlService.updateById(detl)) { throw new CoolException("明细更新失败!!"); } }); return wrkMast; } /** * 按优先级查找可用库位 * 顺序:入库缓存区 -> SO区 -> EO区 */ src/main/java/com/zy/common/constant/MesConstant.java
@@ -6,7 +6,8 @@ public class MesConstant { //小系统接口地址 public static final String URL = "http://webservice.kopen.com.cn:1482/kc-api/api/wms/ "; // public static final String URL = "http://webservice.kopen.com.cn:1482/kc-api/api/wms/ "; public static final String URL = "http://10.143.23.26:1482/kc-api/api/wms/ "; //WCS系统接口地址 public static final String WCS_URL = "http://192.168.238.244:9090/wcs"; @@ -21,6 +22,9 @@ /**移库申请链接任务**/ public static final String MOVE_LOC_TASK = "/openapi/createLocMoveTask"; /****/ public static final String LOC_F_MOV = "/openapi/change/loc"; /***申请入库任务*/ public static final String PUB_TASK_IN = "/openapi/createInTask"; src/main/java/com/zy/common/model/StartupDto.java
@@ -18,4 +18,6 @@ private Integer workNo; } src/main/java/com/zy/common/service/CommonService.java
@@ -133,23 +133,25 @@ /** * 库型 1: 标准堆垛机库 2: 平库 3: 穿梭板 4: 四向车 5: AGV 0: 未知 */ switch (rowLastnoType.getType()) { case 1: return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); case 2: log.error("站点={} 未查询到对应的规则", sourceStaNo); break; case 3: log.error("站点={} 未查询到对应的规则", sourceStaNo); break; case 4: return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0); case 5: return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); default: log.error("站点={} 未查询到对应的规则", sourceStaNo); break; } // switch (rowLastnoType.getType()) { // case 1: // return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); //// case 2: //// log.error("站点={} 未查询到对应的规则", sourceStaNo); //// break; //// case 3: //// log.error("站点={} 未查询到对应的规则", sourceStaNo); //// break; //// case 4: //// return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0); //// case 5: //// return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0); //// default: //// log.error("站点={} 未查询到对应的规则", sourceStaNo); //// break; // } } catch (Exception e) { log.error("站点={} 未查询到对应的规则", sourceStaNo); @@ -182,8 +184,9 @@ throw new CoolException("数据异常,请联系管理员===>库位规则未知"); } StartupDto startupDto = new StartupDto(); //TODO 需要区分207,217, 239站点,滤芯和中件需要区分开 locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .ne("row1", rowLastno.getsRow()) .ge("row1", rowLastno.getsRow()) .le("row1", rowLastno.geteRow()) .eq("loc_sts", "O") .orderAsc(Arrays.asList("row1", "bay1", "lev1"))); version/lib/cool-framework-install.txt
@@ -1 +1 @@ mvn install:install-file -Dfile=framework-3.2.0.jar -DgroupId=cn.cool -DartifactId=framework -Dversion=3.2.0 -Dpackaging=jar -DgeneratePom=true mvn install:install-file '-Dfile=version/lib/framework-3.2.0.jar' '-DgroupId=cn.cool' '-DartifactId=framework' '-Dversion=3.2.0' '-Dpackaging=jar' '-DgeneratePom=true'