src/main/java/com/zy/asrs/controller/MesController.java
@@ -12,6 +12,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; @RestController @Slf4j @@ -28,11 +29,13 @@ // 物料信息同步 @PostMapping("/api/mes/synMatInfo") @AppAuth(memo = "物料信息同步") public MesReturn synMatInfo(@RequestHeader(required = false) String appkey,@RequestBody MesMatRecvForm param, HttpServletRequest request){ public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody List<MesMatRecvForm> param, HttpServletRequest request){ auth(appkey, param, request); MesReturn mesReturn = new MesReturn(); try { mesReturn = mesService.matInfoAndInBound(param); for(MesMatRecvForm matRecvForm:param) { mesReturn = mesService.matInfoAndInBound(matRecvForm); } } catch (Exception e) { mesReturn.setSuccess("2"); mesReturn.setMessage("物料信息同步失败"); src/main/java/com/zy/asrs/controller/MobileController.java
@@ -532,7 +532,16 @@ if(!param.containsKey("staNo") || !param.containsKey("locType")){ // 1.窄,2.宽 return R.parse(BaseRes.PARAM); } return mobileService.callEmptyBinOutBound(param.getString("staNo"),param.getString("locType"),getUserId()); return mobileService.callEmptyBinOutBound(null,param.getString("staNo"),param.getString("locType"),getUserId()); } @PostMapping("/callEmptyBinInBound") @ManagerAuth(memo = "pda呼叫料框回库") public synchronized R callEmptyBinInBound(@RequestBody JSONObject param) { if(!param.containsKey("site")){ // 搬运起点 return R.parse(BaseRes.PARAM); } return mobileService.callEmptyBinInBound(param.getString("site"),getUserId()); } } src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -332,6 +332,14 @@ @TableField("task_no") private String taskNo; @ApiModelProperty(value= "是否呼叫agv,0.未呼叫,1.已呼叫") @TableField("call_agv") private Integer callAgv; @ApiModelProperty(value= "agv目标站点") @TableField("agv_sta") private String agvSta; public WrkMast() {} public String getYmd$(){ src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -327,6 +327,17 @@ @TableField("take_none") private String takeNone; @TableField("task_no") private String taskNo; @ApiModelProperty(value= "是否呼叫agv,0.未呼叫,1.已呼叫") @TableField("call_agv") private Integer callAgv; @ApiModelProperty(value= "agv目标站点") @TableField("agv_sta") private String agvSta; public WrkMastLog() { } src/main/java/com/zy/asrs/entity/mes/TransTask.java
@@ -18,7 +18,8 @@ @JsonProperty("OrderNo") @JSONField(name = "OrderNo") private String OrderNo; // 运输类型,01:空托,02:毛坯,03:成品,04:转序,本接口为转序 // 运输类型,01上空托 02 下空托,毛坯 03 上毛坯 04 下成品 05 上刀 06 下刀 //上出立库,下入立库 @JsonProperty("TransType") @JSONField(name = "TransType") private String TransType; src/main/java/com/zy/asrs/service/MobileService.java
@@ -5,6 +5,7 @@ import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.mes.MesOutApply; import com.zy.asrs.entity.param.*; import java.util.Date; @@ -106,5 +107,10 @@ * @param locType 托盘类型 1.窄,2.宽 * @param userId 用户id */ R callEmptyBinOutBound(String staNo, String locType, Long userId); R callEmptyBinOutBound(MesOutApply mesOutApply,String staNo, String locType, Long userId); /** * pda呼叫料框回库 */ R callEmptyBinInBound(String site, Long userId); } src/main/java/com/zy/asrs/service/RcsService.java
@@ -20,7 +20,7 @@ * @param rcsFactory 1 海康;2 华晓; * @return */ int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory); RcsReturn submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory); /** * 2.1.3任务继续执行接口 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -4,18 +4,17 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.mes.*; import com.zy.asrs.entity.rcs.RcsReporterTask; import com.zy.asrs.entity.rcs.RcsTaskContinue; import com.zy.asrs.entity.rcs.RcsTaskSubmit; import com.zy.asrs.entity.rcs.RcsTaskTargetRoute; import com.zy.asrs.entity.rcs.*; import com.zy.asrs.mapper.AgvInfoMapper; import com.zy.asrs.mapper.MatItemBarcodeMapper; import com.zy.asrs.service.*; import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.common.model.LocDetlDto; import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import lombok.extern.slf4j.Slf4j; @@ -86,6 +85,12 @@ @Resource private MobileService mobileService; @Resource private WrkMastService wrkMastService; @Resource private WrkDetlService wrkDetlService; // region MES接口 @@ -267,7 +272,7 @@ orderDetlPakin.setMaktx(mat.getMaktx()); orderDetlPakin.setSpecs(mat.getSpecs()); orderDetlPakin.setModel(mat.getModel()); orderDetlPakin.setStandby1(JSONObject.toJSONString(mesMat.getItemBarcode())); // 零件二维码 orderDetlPakin.setStandby1(barCodeListToStr(mesMat.getItemBarcode())); // 零件二维码 orderDetlPakin.setStandby2("1"); //保存齐套性检查标识,1 检查;0 不检查; orderDetlPakin.setCreateBy(defaultUserId); orderDetlPakin.setCreateTime(now); @@ -361,48 +366,59 @@ * @param mesOutApply * @return 1 成功;-1 订单重复; */ @Transactional public int outBoundOrder(MesOutApply mesOutApply){ // 空托出库 if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) { // 生成空托出库任务 mobileService.callEmptyBinOutBound(WMS_TRANS_START_STATION_1,"1",defaultUserId); mobileService.callEmptyBinOutBound(mesOutApply,WMS_TRANS_START_STATION_1,"1",defaultUserId); try { if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) { TransTask transTask = new TransTask(); transTask.setTaskno(mesOutApply.getTaskno()); transTask.setTaskname(mesOutApply.getTaskname()); transTask.setOrderNo(mesOutApply.getOrderNo()); transTask.setTransType(mesOutApply.getTransType()); transTask.setCurStationId(WMS_TRANS_START_STATION_1); transTask.setNextProcess(mesOutApply.getProductLineId()); transTask.setNextStationId(mesOutApply.getStationId()); transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 transTask.setQty(1); // 空托只出1个 transTask.setProductLineId(mesOutApply.getProductLineId()); transTask.setOperateType(1); transTask.setAgvFactory(1); JSONObject sendAgvTask = submitTask(transTask); if (!"1".equals(sendAgvTask.getString("Success"))) { log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); } } } catch (Exception e) { log.error("下发AGV运输任务失败", e); } // try { // if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) { // TransTask transTask = new TransTask(); // transTask.setTaskno(mesOutApply.getTaskno()); // transTask.setTaskname(mesOutApply.getTaskname()); // transTask.setOrderNo(mesOutApply.getOrderNo()); // transTask.setTransType(mesOutApply.getTransType()); // transTask.setCurStationId(WMS_TRANS_START_STATION_1); // transTask.setNextProcess(mesOutApply.getProductLineId()); // transTask.setNextStationId(mesOutApply.getStationId()); // transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 // transTask.setQty(1); // 空托只出1个 // transTask.setProductLineId(mesOutApply.getProductLineId()); // transTask.setOperateType(1); // transTask.setAgvFactory(1); // JSONObject sendAgvTask = submitTask(transTask); // if (!"1".equals(sendAgvTask.getString("Success"))) { // log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); // } // } // } catch (Exception e) { // log.error("下发AGV运输任务失败", e); // } return 1; } else { // 毛坯(物料)出库 // docType根据库类型确定 long docType = 7; long settle = 1; long settle = 2; // 校验订单是否重复 OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo()); if (order != null && !StringUtils.isEmpty(order.getOrderNo())) { log.error("出库订单号重复:{}",mesOutApply.getOrderNo()); return -1; } String itemBarcode = barCodeListToStr(mesOutApply.getItemBarcode()); // 自动出库 LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("standby1", itemBarcode)); if (locDetl == null) { throw new CoolException("零件二维码没有匹配到库存:" +itemBarcode ); } LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo())); if (!locMast.getLocSts().equals("F")) { throw new CoolException("库位状态不为F:" +locMast.getLocNo() ); } // 生成订单 @@ -420,6 +436,7 @@ orderPakout.setUpdateTime(now); orderPakout.setMemo(JSONObject.toJSONString(mesOutApply)); orderPakout.setPakinPakoutStatus(2); orderPakout.setNumber(locMast.getBarcode()); // 托盘条码,上报时用 if (!orderPakoutService.insert(orderPakout)) { log.error("MES保存出库订单主档失败"); throw new CoolException("保存出库订单主档失败"); @@ -431,12 +448,14 @@ orderDetlPakout.setOrderId(orderPakout.getId()); orderDetlPakout.setOrderNo(orderPakout.getOrderNo()); orderDetlPakout.setAnfme(Double.valueOf(mesOutApply.getQty())); orderDetlPakout.setWorkQty(orderDetlPakout.getAnfme()); orderDetlPakout.setQty(0.0); orderDetlPakout.setMatnr(mat.getMatnr()); orderDetlPakout.setMaktx(mat.getMaktx()); orderDetlPakout.setSpecs(mat.getSpecs()); orderDetlPakout.setModel(mat.getModel()); orderDetlPakout.setStandby1(barCodeListToStr(mesOutApply.getItemBarcode())); orderDetlPakout.setStandby1(itemBarcode); orderDetlPakout.setCreateBy(defaultUserId); orderDetlPakout.setCreateTime(now); orderDetlPakout.setUpdateBy(defaultUserId); @@ -448,48 +467,102 @@ throw new CoolException("保存出库订单明细档失败"); } // 立库生成订单后,自动调度AGV运送到站点,目前多托生成多个。 try { if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) { // 按零件二维码查询有几个托,多托生成多个任务,每托对应零件二维码 String barCode = barCodeListToStr(mesOutApply.getItemBarcode()); EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>(); matItemBarcodeEntityWrapper.in("item_barcode", barCode); List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper); if (barcodes != null) { Map<String, List<MatItemBarcode>> map = barcodes.stream().collect(Collectors.groupingBy(MatItemBarcode::getZapplet)); for (Map.Entry<String, List<MatItemBarcode>> entry : map.entrySet()) { List<MatItemBarcode> list = entry.getValue(); List<String> codes = new ArrayList<>(); for (MatItemBarcode zapllet : list) { codes.add(zapllet.getItemBarcode()); } // 生成工作号 int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(101)); // 生成工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(101); // 入出库状态 wrkMast.setIoPri(13D); // 优先级:13 wrkMast.setCrnNo(1); wrkMast.setSourceStaNo("203"); // 源站 wrkMast.setStaNo("204"); // 目标站 wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setBarcode(locMast.getBarcode()); wrkMast.setAppeUser(defaultUserId); // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiUser(defaultUserId); wrkMast.setModiTime(now); wrkMast.setMemo(JSONObject.toJSONString(mesOutApply)); wrkMast.setTaskNo(mesOutApply.getTaskno()); wrkMast.setAgvSta(mesOutApply.getStationId()); wrkMastService.insert(wrkMast); // 生成工作档明细 WrkDetl wrkDetl = new WrkDetl(); wrkDetl.sync(locDetl); wrkDetl.setOrderNo(orderPakout.getOrderNo()); // 手动出库不需要带出库存中的单据编号 wrkDetl.setWrkNo(workNo); wrkDetl.setIoTime(now); wrkDetl.setAnfme(orderDetlPakout.getAnfme()); // 数量 wrkDetl.setAppeTime(now); wrkDetl.setAppeUser(defaultUserId); wrkDetl.setModiTime(now); wrkDetl.setModiUser(defaultUserId); // wrkDetl.setMatnr(detlDto.getLocDetl().getMatnr()); // wrkDetl.setMaktx(detlDto.getLocDetl().getMaktx()); // wrkDetl.setUnit(detlDto.getLocDetl().getUnit()); // wrkDetl.setSpecs(detlDto.getLocDetl().getSpecs()); // wrkDetl.setUnit(detlDto.getLocDetl().getUnit()); // wrkDetl.setModel(detlDto.getLocDetl().getModel()); wrkDetlService.insert(wrkDetl); TransTask transTask = new TransTask(); transTask.setTaskno(mesOutApply.getTaskno()); transTask.setTaskname(mesOutApply.getTaskname()); transTask.setOrderNo(mesOutApply.getOrderNo()); transTask.setTransType(mesOutApply.getTransType()); transTask.setCurStationId(WMS_TRANS_START_STATION_3); transTask.setNextProcess(mesOutApply.getProductLineId()); transTask.setNextStationId(mesOutApply.getStationId()); transTask.setItemno(mesOutApply.getItemno()); transTask.setQty(list.size()); transTask.setProductLineId(mesOutApply.getProductLineId()); transTask.setItemBarcode(codes); transTask.setTuoPanId(entry.getKey()); transTask.setOperateType(1); transTask.setAgvFactory(1); JSONObject sendAgvTask = submitTask(transTask); if (!"1".equals(sendAgvTask.getString("Success"))) { log.error("出库下发agv运输任务失败", JSONObject.toJSONString(transTask)); // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 if (locMast.getLocSts().equals("F")) { locMast.setLocSts("R"); locMast.setModiUser(defaultUserId); locMast.setModiTime(now); locMastService.updateById(locMast); } } } } } catch (Exception e) { log.error("下发AGV运输任务失败", e); } log.info("出库任务生成成功,任务号:{}",workNo); // 立库生成订单后,自动调度AGV运送到站点,目前多托生成多个。 // try { // if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) { // // 按零件二维码查询有几个托,多托生成多个任务,每托对应零件二维码 //// String barCode = barCodeListToStr(mesOutApply.getItemBarcode()); //// EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>(); //// matItemBarcodeEntityWrapper.in("item_barcode", barCode); //// List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper); //// if (barcodes != null) { //// Map<String, List<MatItemBarcode>> map = barcodes.stream().collect(Collectors.groupingBy(MatItemBarcode::getZapplet)); //// for (Map.Entry<String, List<MatItemBarcode>> entry : map.entrySet()) { //// List<MatItemBarcode> list = entry.getValue(); //// List<String> codes = new ArrayList<>(); //// for (MatItemBarcode zapllet : list) { //// codes.add(zapllet.getItemBarcode()); //// } // // TransTask transTask = new TransTask(); // transTask.setTaskno(mesOutApply.getTaskno()); // transTask.setTaskname(mesOutApply.getTaskname()); // transTask.setOrderNo(mesOutApply.getOrderNo()); // transTask.setTransType(mesOutApply.getTransType()); // transTask.setCurStationId(WMS_TRANS_START_STATION_3); // transTask.setNextProcess(mesOutApply.getProductLineId()); // transTask.setNextStationId(mesOutApply.getStationId()); // transTask.setItemno(mesOutApply.getItemno()); // transTask.setQty(mesOutApply.getQty()); // transTask.setProductLineId(mesOutApply.getProductLineId()); // transTask.setItemBarcode(mesOutApply.getItemBarcode()); // transTask.setTuoPanId(locDetl.getZpallet()); // transTask.setOperateType(1); // transTask.setAgvFactory(1); // JSONObject sendAgvTask = submitTask(transTask); // if (!"1".equals(sendAgvTask.getString("Success"))) { // log.error("出库下发agv运输任务失败", JSONObject.toJSONString(transTask)); // } //// } //// } // } // } catch (Exception e) { // log.error("下发AGV运输任务失败", e); // } } return 1; @@ -513,8 +586,8 @@ transTask.setOrderNo(mesInApply.getOrderNo()); transTask.setTransType(mesInApply.getTransType()); transTask.setCurProcess(mesInApply.getProductLineId()); transTask.setCurStationId(mesInApply.getStationID()); transTask.setNextStationId(WMS_TRANS_START_STATION_2); transTask.setCurStationId("A3"); transTask.setNextStationId("A4"); transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 transTask.setQty(1); // 空托只回1个 transTask.setProductLineId(mesInApply.getProductLineId()); @@ -571,9 +644,9 @@ orderDetlPakin.setMaktx(mat.getMaktx()); orderDetlPakin.setSpecs(mat.getSpecs()); orderDetlPakin.setModel(mat.getModel()); if (mesInApply.getProductInfo() != null) { orderDetlPakin.setStandby1(JSONObject.toJSONString(mesInApply.getProductInfo())); //零件详情存在1 } List<String> itemBarcode = mesInApply.getProductInfo().stream().map(MesInApply.ProductInfo::getItemBarcode).collect(Collectors.toList()); orderDetlPakin.setStandby1(barCodeListToStr(itemBarcode)); //零件详情存在1 orderDetlPakin.setStandby2("0"); //保存齐套性检查标识,1 检查;0 不检查; orderDetlPakin.setCreateBy(defaultUserId); orderDetlPakin.setCreateTime(now); @@ -597,7 +670,6 @@ waitPakin.setAppeTime(now); waitPakin.setModiUser(defaultUserId); waitPakin.setModiTime(now); List<String> itemBarcode = mesInApply.getProductInfo().stream().map(MesInApply.ProductInfo::getItemBarcode).collect(Collectors.toList()); waitPakin.setStandby1(barCodeListToStr(itemBarcode)); waitPakinService.insert(waitPakin); OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE, orderPakin.getId(), orderDetlPakin.getMatnr(), orderDetlPakin.getBatch(), @@ -770,6 +842,9 @@ * @return */ public static String barCodeListToStr(List<String> list) { if(list.isEmpty()) { return ""; } StringBuilder stringBuilder = new StringBuilder(); for (String str : list) { stringBuilder.append(str).append(","); @@ -1047,8 +1122,14 @@ rcsTaskSubmit.setTargetRoute(targetRouteList); // 转发给海康或华晓RCS int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); if (success == 1) { RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); if (rcsReturn.getCode().equals("SUCCESS")) { JSONObject data = rcsReturn.getData(); String robotTaskCode = data.getString("robotTaskCode"); if (Cools.isEmpty(transTask.getTaskno())) { transTask.setTaskno(robotTaskCode); result.put("taskno", transTask.getTaskno()); } int workNo = commonService.getWorkNo(WorkNoType.OTHER.type); Date now = new Date(); Task task = new Task(); @@ -1075,12 +1156,12 @@ taskDetl.setIoTime(task.getIoTime()); taskDetl.setMatnr(transTask.getItemno()); taskDetl.setAnfme(0.0); taskDetl.setStandby1(String.valueOf(transTask.getQty())); // taskDetl.setStandby1(String.valueOf(transTask.getQty())); taskDetl.setMaktx(mat.getMaktx()); taskDetl.setSpecs(mat.getSpecs()); taskDetl.setOrderNo(transTask.getOrderNo()); taskDetl.setZpallet(transTask.getTuoPanId()); taskDetl.setMemo(JSONObject.toJSONString(transTask.getItemBarcode())); taskDetl.setMemo(barCodeListToStr(transTask.getItemBarcode())); taskDetl.setModiUser(defaultUserId); taskDetl.setModiTime(now); taskDetl.setAppeUser(defaultUserId); @@ -1163,7 +1244,7 @@ * @return */ public int applyInStation(TransParent apply) { String path = ("LL").equals(apply.getProductLineId()) ? "AGVTransportPalletNotice" : "AprsAGVTransportPalletNotice"; String path = ("LL").equals(apply.getProductLineId()) ? "AGVTransportPalletNotice" : "Aprs/AGVTransportPalletNotice"; String url = MES_URL + path; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ @@ -1195,7 +1276,7 @@ // rcsTaskContinue.setTriggerType("ROBOT"); // rcsTaskContinue.setTriggerCode(allow.getAgvCode()); int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode())); int success = rcsService.continueTask(rcsTaskContinue, 1); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); } @@ -1217,7 +1298,8 @@ arrivalStation.setOrderNo(null); } String url = MES_URL + "AGVArrivalCompleted"; String path = ("LL").equals(arrivalStation.getProductLineId()) ? "AGVArrivalCompleted" : "Aprs/AGVArrivalCompleted"; String url = MES_URL + path; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(arrivalStation)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); @@ -1282,7 +1364,8 @@ */ public int outStation(TransParent apply) { String url = MES_URL + "AGVDepartureCompleted"; String path = ("LL").equals(apply.getProductLineId()) ? "AGVDepartureCompleted" : "Aprs/AGVDepartureCompleted"; String url = MES_URL + path; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -7,6 +7,8 @@ import com.core.common.*; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.mes.MesOutApply; import com.zy.asrs.entity.mes.TransTask; import com.zy.asrs.entity.param.*; import com.zy.asrs.enums.CommonEnum; import com.zy.asrs.enums.LocStsType; @@ -25,6 +27,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,6 +44,11 @@ @Slf4j @Service public class MobileServiceImpl implements MobileService { @Value("${wms.wmsTransStartStation2}") public String WMS_TRANS_START_STATION_2; @Value("${wms.zpalletId}") public String WMS_ZPALLET_ID; @Autowired private MatService matService; @@ -114,6 +122,9 @@ private BasStationService basStationService; @Autowired private BasContainerService basContainerService; @Resource private MesService mesService; @Override @Transactional @@ -654,6 +665,7 @@ elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme()); detlDto.setOrderId(order.getId()); detlDto.setOrderNo(order.getOrderNo()); detlDto.setStandby1(detls.getStandby1()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.findDto(detlDtos, detlDto); assert one != null; @@ -706,6 +718,7 @@ waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAnfme(detlDto.getAnfme()); // 数量 waitPakin.setStatus("Y"); // 状态 waitPakin.setStandby1(detlDto.getStandby1()); waitPakin.setAppeUser(userId); waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); @@ -1274,7 +1287,7 @@ @Override @Transactional public R callEmptyBinOutBound(String staNo, String locType, Long userId) { public R callEmptyBinOutBound(MesOutApply mesOutApply, String staNo, String locType, Long userId) { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", 'D').eq("loc_type2", locType)); if(locMast == null) { return R.parse("该类型:" + locType +"空托盘不存在"); @@ -1282,11 +1295,11 @@ // 获取路径 Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() .eq("type_no", 110) .eq("stn_no", staNo) .eq("stn_no", 204) .eq("crn_no", locMast.getCrnNo()); StaDesc staDesc = staDescService.selectOne(wrapper); if (staDesc == null) { R.parse("出库路径不存在,站点:" + staNo); return R.parse("出库路径不存在,站点:" + staNo); } Date now = new Date(); // 生成工作档 @@ -1310,6 +1323,14 @@ wrkMast.setAppeTime(now); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); if (mesOutApply != null) { wrkMast.setTaskNo(mesOutApply.getTaskno()); wrkMast.setAgvSta(mesOutApply.getStationId()); wrkMast.setMemo(JSONObject.toJSONString(mesOutApply)); } else { wrkMast.setAgvSta(staNo); } wrkMastService.insert(wrkMast); // 更新库位状态 @@ -1319,10 +1340,35 @@ locMast.setModiTime(now); locMastService.updateById(locMast); } log.info("生成空托出库任务成功,任务号:{}",wrkMast.getWrkNo()); return R.ok("出库成功"); } @Override public R callEmptyBinInBound(String site, Long userId) { TransTask transTask = new TransTask(); // transTask.setTaskno(mesInApply.getTaskno()); // transTask.setTaskname(mesInApply.getTaskname()); // transTask.setOrderNo(mesInApply.getOrderNo()); transTask.setTransType("02"); // 下毛坯 // transTask.setCurProcess(mesInApply.getProductLineId()); transTask.setCurStationId(site); transTask.setNextStationId(WMS_TRANS_START_STATION_2); transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 transTask.setQty(1); // 空托只回1个 // transTask.setProductLineId(mesInApply.getProductLineId()); transTask.setOperateType(1); transTask.setAgvFactory(1); JSONObject sendAgvTask = mesService.submitTask(transTask); if ("1".equals(sendAgvTask.getString("Success"))) { log.info("pda呼叫料框回库成功,{}", JSONObject.toJSONString(transTask)); return R.ok("成功"); } else { log.error("pda呼叫料框回库失败,{}", JSONObject.toJSONString(transTask)); return R.parse("失败"); } } /** * @author Ryan * @date 2025/9/25 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -1,10 +1,12 @@ package com.zy.asrs.service.impl; import com.alibaba.excel.util.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.entity.*; import com.zy.asrs.entity.mes.TransArrivalStation; import com.zy.asrs.entity.mes.TransInOutStationAllow; import com.zy.asrs.entity.mes.TransParent; import com.zy.asrs.entity.rcs.*; import com.zy.asrs.enums.RcsRetMethodEnum; @@ -25,10 +27,7 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -55,7 +54,7 @@ @Resource private BlockTaskMapper blockTaskMapper; @Resource private TaskDetlServiceImpl taskDetlService; private TaskDetlService taskDetlService; @Resource private WrkMastService wrkMastService; @@ -172,7 +171,7 @@ * @param rcsFactory 1 海康;2 华晓; * @return */ public int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){ public RcsReturn submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){ // String response = ""; // boolean success = false; @@ -218,22 +217,46 @@ // } // } // return success ? 1 : 0; RcsReturn rcsReturn = new RcsReturn(); boolean success = false; String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/submit"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit)); String response = ""; try { response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit)); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); rcsReturn = JSONObject.parseObject(response, RcsReturn.class); if("SUCCESS".equals(rcsReturn.getCode())) { JSONObject data = rcsReturn.getData(); String robotTaskCode = data.getString("robotTaskCode"); if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){ return 1; } } } // 模拟返回 // rcsReturn.setCode("SUCCESS"); // JSONObject jsonObject = new JSONObject(); // jsonObject.put("robotTaskCode",4); // rcsReturn.setData(jsonObject); success = true; return 0; log.info("呼叫agv搬运成功!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); } else { log.error("呼叫agv搬运失败!url:{};request:{};response:{}", url, JSON.toJSONString(rcsTaskSubmit), response); } } } catch (Exception e) { log.error("呼叫agv搬运异常", e); } finally { try { // 保存接口日志 apiLogService.save( "呼叫agv搬运", url, null, "127.0.0.1", JSON.toJSONString(rcsTaskSubmit), response, success ); } catch (Exception e) { log.error("呼叫agv搬运保存接口日志异常", e); } } return rcsReturn; } /** @@ -333,7 +356,7 @@ try { // q3,q8=1 if ("1".equals(carrierType)) { //AGV // if ("1".equals(carrierType)) { //AGV EntityWrapper<Task> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); Task task = taskService.selectOne(wrapper); @@ -403,13 +426,20 @@ mesService.applyOutStation(apply); } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) { mesService.outStation(apply); // agv继续执行 TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow(); inOutStationAllow.setTaskno(robotTaskCode); inOutStationAllow.setStatus("Y"); inOutStationAllow.setAgvCode("agv001"); mesService.allowOutStation(inOutStationAllow); } } break; case ARRIVE_ON_STATION: { // TODO: 如果产线是运输起点,则不发送到站完成,暂时调试使用lG,未实现判断 if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG")) { break; } // if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG") || task.getSourceStaNo().startsWith("LL")) { // break; // } EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>(); wapper2.eq("wrk_no", task.getWrkNo()) @@ -419,7 +449,7 @@ TransArrivalStation arrivalStation = new TransArrivalStation(); arrivalStation.setTaskno(robotTaskCode); arrivalStation.setTaskname(memo.getString("taskName")); arrivalStation.setTuoPanId(taskDetl.getZpallet()); // memo.getString("TuoPanId") arrivalStation.setTuoPanId(taskDetl == null ? "":taskDetl.getZpallet()); // memo.getString("TuoPanId") arrivalStation.setProductLineId(memo.getString("ProductLineId")); String transType = memo.getString("TransType"); arrivalStation.setDaotype(transType); @@ -431,18 +461,19 @@ arrivalStation.setOrderNo(memo.getString("OrderNo")); arrivalStation.setAgvCode(singleRobotCode); arrivalStation.setItemno(memo.getString("Itemno")); String memo2 = taskDetl.getMemo(); List<String> itemBarCode = new ArrayList<>(); Matcher matcher = Pattern.compile("\"([^\"]*)\"").matcher(memo2); while (matcher.find()) { itemBarCode.add(matcher.group(1)); } arrivalStation.setItemBarcode(itemBarCode); String memo2 = taskDetl == null ? "":taskDetl.getMemo(); String[] array = memo2.split(","); // List<String> itemBarCode = new ArrayList<>(); // Matcher matcher = Pattern.compile("\"([^\"]*)\"").matcher(memo2); // while (matcher.find()) { // itemBarCode.add(matcher.group(1)); // } arrivalStation.setItemBarcode(Arrays.asList(array)); mesService.arriveOnStation(arrivalStation); } break; default: {} break; } } // } // else if ("CTU".equals(carrierType)) { //CTU // EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); // wrapper.eq("task_no", robotTaskCode); src/main/java/com/zy/asrs/task/JlerScheduler.java
New file @@ -0,0 +1,65 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.Task; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.TaskService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.task.handler.JlerHandler; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author pang.jiabao * @description 济南二机床加工相关定时任务 * @createDate 2025/11/18 14:18 */ @Component public class JlerScheduler { @Resource private ConfigService configService; @Resource private JlerHandler jlerHandler; @Resource private TaskService taskService; @Resource private WrkMastMapper wrkMastMapper; @Resource private BasDevpService basDevpService; @Resource private WrkMastService wrkMastService; /** * 货物到达出库口,生成agv任务 */ @Scheduled(cron = "0/5 * * * * ? ") private void createAgvOutTasks() { List<BasDevp> devps = basDevpService.selectList(new EntityWrapper<BasDevp>().in("dev_no", 202, 204) .gt("wrk_no",0).lt("wrk_no",9990)); for(BasDevp basDevp:devps) { WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo())); if(wrkMast != null && wrkMast.getCallAgv() == 0 && !Cools.isEmpty(wrkMast.getAgvSta())) { jlerHandler.createAgvOutTasks(wrkMast); } } } } src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -5,9 +5,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.entity.mes.MesInApply; import com.zy.asrs.entity.mes.MesRecvFeedback; import com.zy.asrs.entity.mes.MesReturn; import com.zy.asrs.entity.mes.*; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.RcsServiceImpl; import com.zy.asrs.task.core.ReturnT; @@ -180,7 +178,7 @@ String erpReport = Parameter.get().getErpReport(); if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) { OrderPakin orderPakin = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().eq("settle", 4) .eq("doc_type", 3).orderBy("update_time")); .in("doc_type", 3).orderBy("update_time")); if (orderPakin == null) { return; } @@ -189,16 +187,59 @@ MesInApply result = JSONObject.parseObject(orderPakin.getMemo(), MesInApply.class); result.setQty(orderDetl.getQty().intValue()); // String url = MES_URL + "loadComplete"; // String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result)); // if (!StringUtils.isEmpty(response) && response.contains("Success")) { // MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); // if ("1".equals(mesReturn.getSuccess())) { String url = MES_URL + "loadComplete"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result)); if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if ("1".equals(mesReturn.getSuccess())) { orderPakin.setSettle(6L); orderPakinService.updateById(orderPakin); log.info("订单上报成功,orderNo={}", orderPakin.getOrderNo()); // } // } } } } } } // 出库完成上报 @Scheduled(cron = "0/10 * * * * ? ") @Async("orderThreadPool") void outOrderCompleteReport() { String erpReport = Parameter.get().getErpReport(); if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) { List<OrderPakout> orderPakoutList = orderPakoutService.selectList(new EntityWrapper<OrderPakout>().eq("settle", 4).orderBy("update_time")); if (orderPakoutList.size() == 0) { return; } for(OrderPakout orderPakout:orderPakoutList) { try { MesOutApply mesOutApply = JSONObject.parseObject(orderPakout.getMemo(), MesOutApply.class); MesOutFeedback mesOutFeedback = new MesOutFeedback(); mesOutFeedback.setTaskno(mesOutApply.getTaskno()); mesOutFeedback.setTaskname(mesOutApply.getTaskname()); mesOutFeedback.setProductLineId(mesOutApply.getProductLineId()); mesOutFeedback.setStationId(mesOutApply.getStationId()); mesOutFeedback.setItemno(mesOutApply.getItemno()); mesOutFeedback.setTuoPanId(orderPakout.getNumber()); mesOutFeedback.setQty(mesOutApply.getQty()); mesOutFeedback.setItemBarcode(mesOutApply.getItemBarcode()); mesOutFeedback.setOrderNo(mesOutApply.getOrderNo()); String url = MES_URL + "Aprs/issueComplete"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback)); if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if ("1".equals(mesReturn.getSuccess())) { orderPakout.setSettle(6L); orderPakoutService.updateById(orderPakout); log.info("订单上报成功,orderNo={}", orderPakout.getOrderNo()); } } }catch (Exception e) { log.error("出库订单上报失败,orderNo:{},exception:{}",orderPakout.getOrderNo(),e); } } } } src/main/java/com/zy/asrs/task/handler/JlerHandler.java
New file @@ -0,0 +1,140 @@ package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSONObject; import com.core.common.Cools; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.mes.MesInApply; import com.zy.asrs.entity.mes.MesOutApply; import com.zy.asrs.entity.mes.TransTask; import com.zy.asrs.service.MesService; import com.zy.asrs.service.WrkMastService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; /** * @author pang.jiabao * @description 济南二机床加工相关定时任务 * @createDate 2025/12/10 14:25 */ @Slf4j @Service public class JlerHandler { @Resource private MesService mesService; @Value("${wms.wmsTransStartStation3}") public String WMS_TRANS_START_STATION_3; @Value("${wms.zpalletId}") public String WMS_ZPALLET_ID; @Resource private WrkMastService wrkMastService; @Transactional public void createAgvOutTasks(WrkMast wrkMast) { String memo = wrkMast.getMemo(); MesOutApply mesOutApply = null; if(!Cools.isEmpty(memo)) { mesOutApply = JSONObject.parseObject(memo, MesOutApply.class); } // 空托出库 if(wrkMast.getIoType() == 110) { if(mesOutApply == null) { // 不是mes下发的空托出库 TransTask transTask = new TransTask(); // transTask.setTaskno(mesOutApply.getTaskno()); // transTask.setTaskname(mesOutApply.getTaskname()); // transTask.setOrderNo(mesOutApply.getOrderNo()); transTask.setTransType("01"); transTask.setCurStationId(WMS_TRANS_START_STATION_3); // transTask.setNextProcess(mesOutApply.getProductLineId()); transTask.setNextStationId(wrkMast.getAgvSta()); transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 transTask.setQty(1); // 空托只出1个 // transTask.setProductLineId(mesOutApply.getProductLineId()); transTask.setOperateType(1); transTask.setAgvFactory(1); JSONObject sendAgvTask = mesService.submitTask(transTask); if ("1".equals(sendAgvTask.getString("Success"))) { String taskno = sendAgvTask.getString("taskno"); if(Cools.isEmpty(wrkMast.getTaskNo())) { wrkMast.setTaskNo(taskno); } wrkMast.setCallAgv(1); wrkMastService.updateById(wrkMast); }else { log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); } } else { TransTask transTask = new TransTask(); transTask.setTaskno(mesOutApply.getTaskno()); transTask.setTaskname(mesOutApply.getTaskname()); transTask.setOrderNo(mesOutApply.getOrderNo()); transTask.setTransType(mesOutApply.getTransType()); transTask.setCurStationId(WMS_TRANS_START_STATION_3); transTask.setNextProcess(mesOutApply.getProductLineId()); transTask.setNextStationId(mesOutApply.getStationId()); transTask.setItemno(WMS_ZPALLET_ID); // 固定为空托的编码 transTask.setItemBarcode(new ArrayList<>()); // 没有零件二维码 transTask.setQty(1); // 空托只出1个 transTask.setProductLineId(mesOutApply.getProductLineId()); transTask.setOperateType(1); transTask.setAgvFactory(1); JSONObject sendAgvTask = mesService.submitTask(transTask); if ("1".equals(sendAgvTask.getString("Success"))) { // String taskno = sendAgvTask.getString("taskno"); // if(Cools.isEmpty(wrkMast.getTaskNo())) { // wrkMast.setTaskNo(taskno); // } wrkMast.setCallAgv(1); wrkMastService.updateById(wrkMast); }else { log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); } } } else if(wrkMast.getIoType() == 101) { // 满托出库 if(mesOutApply == null) { log.error("满托出库呼叫agv无transTask,任务号:{}",wrkMast.getWrkNo()); } else { TransTask transTask = new TransTask(); transTask.setTaskno(mesOutApply.getTaskno()); transTask.setTaskname(mesOutApply.getTaskname()); transTask.setOrderNo(mesOutApply.getOrderNo()); transTask.setTransType(mesOutApply.getTransType()); transTask.setCurStationId(WMS_TRANS_START_STATION_3); transTask.setNextProcess(mesOutApply.getProductLineId()); transTask.setNextStationId(mesOutApply.getStationId()); transTask.setItemno(mesOutApply.getItemno()); transTask.setQty(mesOutApply.getQty()); transTask.setProductLineId(mesOutApply.getProductLineId()); transTask.setItemBarcode(mesOutApply.getItemBarcode()); transTask.setTuoPanId(wrkMast.getBarcode()); transTask.setOperateType(1); transTask.setAgvFactory(1); JSONObject sendAgvTask = mesService.submitTask(transTask); if ("1".equals(sendAgvTask.getString("Success"))) { // String taskno = sendAgvTask.getString("taskno"); // if(Cools.isEmpty(wrkMast.getTaskNo())) { // wrkMast.setTaskNo(taskno); // } wrkMast.setCallAgv(1); wrkMastService.updateById(wrkMast); }else { log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask)); } } } else { log.error("出库呼叫agv任务类型错误,任务号:{}",wrkMast.getWrkNo()); } } } src/main/java/com/zy/common/web/WcsController.java
@@ -82,13 +82,13 @@ return R.error(CodeRes.EXIST_500); } } if (Cools.isEmpty(param.getLocType1(),param.getLocType2())){ if (Cools.isEmpty(param.getLocType2())){ // param.getLocType1(), return R.error("高低/长短检测信号不能为空"); } // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true); sourceStaNo.setLocType1(param.getLocType1()); sourceStaNo.setLocType1((short) 1); // todo 先默认低库位 sourceStaNo.setLocType2(param.getLocType2()); LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); src/main/resources/application-dev.yml
@@ -121,7 +121,7 @@ #当前库名称 currentName: 加工库 #立库AGV自动运货出库口编码 wmsTransStartStation1: 205 wmsTransStartStation1: 204 #立库AGV自动运货入库口编码(输送线) wmsTransStartStation2: 202 #立库AGV自动运货出库口编码(输送线) @@ -132,6 +132,7 @@ #mes对接 mes: url: http://172.26.11.250/dev-api/basicmodel/Api/WMS/ # url: http://192.9.100.173:8088/prod-api/basicmodel/Api/WMS/ #默认接口操作人员id defaultUserId: 30 src/main/resources/mapper/TaskDetlMapper.xml
@@ -3,54 +3,54 @@ <mapper namespace="com.zy.asrs.mapper.TaskDetlMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.TaskDetl"> <result column="wrk_no" property="wrkNo" /> <result column="io_time" property="ioTime" /> <result column="anfme" property="anfme" /> <result column="zpallet" property="zpallet" /> <result column="matnr" property="matnr" /> <result column="maktx" property="maktx" /> <result column="batch" property="batch" /> <result column="order_no" property="orderNo" /> <result column="specs" property="specs" /> <result column="model" property="model" /> <result column="color" property="color" /> <result column="brand" property="brand" /> <result column="unit" property="unit" /> <result column="price" property="price" /> <result column="sku" property="sku" /> <result column="units" property="units" /> <result column="barcode" property="barcode" /> <result column="origin" property="origin" /> <result column="manu" property="manu" /> <result column="manu_date" property="manuDate" /> <result column="item_num" property="itemNum" /> <result column="safe_qty" property="safeQty" /> <result column="weight" property="weight" /> <result column="man_length" property="manLength" /> <result column="volume" property="volume" /> <result column="three_code" property="threeCode" /> <result column="supp" property="supp" /> <result column="supp_code" property="suppCode" /> <result column="be_batch" property="beBatch" /> <result column="dead_time" property="deadTime" /> <result column="dead_warn" property="deadWarn" /> <result column="source" property="source" /> <result column="inspect" property="inspect" /> <result column="danger" property="danger" /> <result column="modi_user" property="modiUser" /> <result column="modi_time" property="modiTime" /> <result column="appe_user" property="appeUser" /> <result column="appe_time" property="appeTime" /> <result column="memo" property="memo" /> <result column="line_number" property="lineNumber" /> <result column="standby1" property="standby1" /> <result column="standby2" property="standby2" /> <result column="standby3" property="standby3" /> <result column="box_type1" property="boxType1" /> <result column="box_type2" property="boxType2" /> <result column="box_type3" property="boxType3" /> <!-- <resultMap id="BaseResultMap" type="com.zy.asrs.entity.TaskDetl">--> <!-- <result column="wrk_no" property="wrkNo" />--> <!-- <result column="io_time" property="ioTime" />--> <!-- <result column="anfme" property="anfme" />--> <!-- <result column="zpallet" property="zpallet" />--> <!-- <result column="matnr" property="matnr" />--> <!-- <result column="maktx" property="maktx" />--> <!-- <result column="batch" property="batch" />--> <!-- <result column="order_no" property="orderNo" />--> <!-- <result column="specs" property="specs" />--> <!-- <result column="model" property="model" />--> <!-- <result column="color" property="color" />--> <!-- <result column="brand" property="brand" />--> <!-- <result column="unit" property="unit" />--> <!-- <result column="price" property="price" />--> <!-- <result column="sku" property="sku" />--> <!-- <result column="units" property="units" />--> <!-- <result column="barcode" property="barcode" />--> <!-- <result column="origin" property="origin" />--> <!-- <result column="manu" property="manu" />--> <!-- <result column="manu_date" property="manuDate" />--> <!-- <result column="item_num" property="itemNum" />--> <!-- <result column="safe_qty" property="safeQty" />--> <!-- <result column="weight" property="weight" />--> <!-- <result column="man_length" property="manLength" />--> <!-- <result column="volume" property="volume" />--> <!-- <result column="three_code" property="threeCode" />--> <!-- <result column="supp" property="supp" />--> <!-- <result column="supp_code" property="suppCode" />--> <!-- <result column="be_batch" property="beBatch" />--> <!-- <result column="dead_time" property="deadTime" />--> <!-- <result column="dead_warn" property="deadWarn" />--> <!-- <result column="source" property="source" />--> <!-- <result column="inspect" property="inspect" />--> <!-- <result column="danger" property="danger" />--> <!-- <result column="modi_user" property="modiUser" />--> <!-- <result column="modi_time" property="modiTime" />--> <!-- <result column="appe_user" property="appeUser" />--> <!-- <result column="appe_time" property="appeTime" />--> <!-- <result column="memo" property="memo" />--> <!-- <result column="line_number" property="lineNumber" />--> <!-- <result column="standby1" property="standby1" />--> <!-- <result column="standby2" property="standby2" />--> <!-- <result column="standby3" property="standby3" />--> <!-- <result column="box_type1" property="boxType1" />--> <!-- <result column="box_type2" property="boxType2" />--> <!-- <result column="box_type3" property="boxType3" />--> </resultMap> <!-- </resultMap>--> </mapper> src/main/resources/mapper/WrkMastLogMapper.xml
@@ -61,6 +61,9 @@ <result column="full_plt" property="fullPlt" /> <result column="pre_have" property="preHave" /> <result column="take_none" property="takeNone" /> <result column="task_no" property="taskNo" /> <result column="call_agv" property="callAgv" /> <result column="agv_sta" property="agvSta" /> </resultMap> <sql id="queryWhere"> <where> src/main/resources/mapper/WrkMastMapper.xml
@@ -60,6 +60,9 @@ <result column="full_plt" property="fullPlt" /> <result column="pre_have" property="preHave" /> <result column="take_none" property="takeNone" /> <result column="task_no" property="taskNo" /> <result column="call_agv" property="callAgv" /> <result column="agv_sta" property="agvSta" /> </resultMap> <select id="selectToBeCompleteData" resultMap="BaseResultMap"> @@ -70,7 +73,7 @@ select * from asr_wrk_mast where wrk_sts=5 or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp)) or (wrk_sts=15 and dateadd(mi,3,crn_end_time) <= getdate() and wrk_no not in (select wrk_no from asr_bas_devp)) or (wrk_sts=15 and dateadd(mi,1,crn_end_time) <= getdate() and wrk_no not in (select wrk_no from asr_bas_devp)) or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp)) order by io_time,wrk_no asc </select>