pom.xml
@@ -124,7 +124,7 @@ </dependencies> <build> <finalName>jgwms</finalName> <finalName>ljqwms</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> src/main/java/com/zy/asrs/controller/MesController.java
@@ -41,16 +41,16 @@ return mesReturn; } // 出库申请 @PostMapping("/api/mes/outBoundOrder") public MesReturn outBoundOrder(@RequestBody MesOutApply param){ // // 出库申请 // @PostMapping("/api/mes/outBoundOrder") // public MesReturn outBoundOrder(@RequestBody MesOutApply param){ // // MesReturn mesReturn = new MesReturn(); // mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2"); // return mesReturn; // } MesReturn mesReturn = new MesReturn(); mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2"); return mesReturn; } // 出库申请(叫料),装配库、滑块库 // // 出库入库订单申请 @PostMapping("/api/mes/callOutBoundOrder") public MesReturn callOutBoundOrder(@RequestBody MesCallOutApply param){ @@ -71,14 +71,12 @@ // 入站允许 @PostMapping("/api/mes/allowInStation") public MesReturn allowInStation(@RequestBody TransInOutStationAllow param){ return mesService.allowInStation(param); } // 离站允许,装配库、滑块库 @PostMapping("/api/mes/allowOutStation") public MesReturn allowOutStation(@RequestBody TransInOutStationAllow param){ return mesService.allowOutStation(param); } src/main/java/com/zy/asrs/controller/MobileController.java
@@ -1,5 +1,6 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; @@ -15,6 +16,7 @@ import com.zy.asrs.service.*; import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.common.model.WrkDto; import com.zy.common.utils.HttpHandler; import com.zy.common.web.BaseController; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -525,14 +527,26 @@ return R.ok("出库成功"); } /** * 补空板 * * @param locNo 目标站点 * @param size 托盘大小 1:小托盘 2:大托盘 * @return */ // pda呼叫空料框出库 @PostMapping("/callEmptyBinOutBound") @ManagerAuth(memo = "pda呼叫空料框出库") public synchronized R callEmptyBinOutBound(@RequestBody JSONObject param) { if(!param.containsKey("staNo") || !param.containsKey("locType")){ // 1.窄,2.宽 return R.parse(BaseRes.PARAM); public synchronized R callEmptyBinOutBound(@RequestParam(required = false) String locNo , @RequestParam(required = false) String size) { if (Cools.isEmpty(locNo) || Cools.isEmpty(size)) { return R.error("站点或者大小不能为空"); } return mobileService.callEmptyBinOutBound(param.getString("staNo"),param.getString("locType"),getUserId()); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("memo", locNo)); if (wrkMast != null) { return R.error("该站点="+locNo+"已经有空板出库任务,为了不堵塞堆垛机接驳站点,禁止下发多个空板出库任务"); } return mobileService.callEmptyBinOutBound(locNo,size,getUserId()); } } src/main/java/com/zy/asrs/controller/OutController.java
@@ -6,6 +6,7 @@ import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.service.*; import com.zy.common.model.LocDto; import com.zy.common.model.TaskDto; @@ -126,8 +127,9 @@ if (issued <= 0.0D) { continue; } List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3()); orderDetl.getBrand(),orderPakOut.getDocType()==11?null:orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3()); for (LocDetl locDetl : locDetls) { if (issued > 0) { LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), @@ -212,10 +214,75 @@ taskDtos.add(taskDto); } } OrderPakout orderPakout = orderPakOutService.selectByNo(locDtos.get(0).getOrderNo()); //配盘出库单用, i=5时或者出库到最后时下发空板出库任务 int i = 0; //需要出库的托盘数量 int size = taskDtos.size(); //优先级 int ioPri = 50; //已下空板出库任务数量 int j=1; // ----------------------------------------------------------------------------------------------- for (TaskDto taskDto : taskDtos) { BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); workService.stockOut(staNo, taskDto, getUserId()); workService.stockOut(staNo, taskDto, getUserId(),ioPri); ioPri--; i++; //配盘出库单使用,下发需要出的空板任务 if (orderPakout.getDocType() == 11) { if (size<5&&i==size){ for (;j<=orderPakout.getPayType();j++){ String bar=""; if(!Cools.isEmpty(orderPakout.getShipCode())&&orderPakout.getShipCode().equals("A01")){ bar = "A01"; } LocMast locMast = new LocMast(); if(Cools.isEmpty(bar)){ locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "D")); }else { locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "D").like("barcode", bar)); } if (Cools.isEmpty(locMast)) { return R.error("库存没有空板"); } String locNo = locMast.getLocNo(); EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); emptyPlateOutParam.setOutSite(303); emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locNo);}}); WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam,ioPri); ioPri--; } }else if(i == 5){ String bar=""; if(!Cools.isEmpty(orderPakout.getShipCode())&&orderPakout.getShipCode().equals("A01")){ bar = "A01"; } LocMast locMast = null; if(Cools.isEmpty(bar)){ locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "D")); }else { locMast=locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "D").like("barcode", bar)); } if (Cools.isEmpty(locMast)) { return R.error("库存没有空板"); } String locNo = locMast.getLocNo(); EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); emptyPlateOutParam.setOutSite(303); emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locNo);}}); WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam,ioPri); ioPri--; } } } return R.ok(); } src/main/java/com/zy/asrs/controller/RcsController.java
@@ -36,7 +36,7 @@ // 华晓AGV申请进入产线(光幕) @PostMapping("/api/robot/apply/inLine") public JSONObject hxApplyInLine(@RequestBody TransParent param){ public RcsReturn hxApplyInLine(@RequestBody TransParent param){ return rcsService.hxApplyInLine(param); } src/main/java/com/zy/asrs/entity/LocMast.java
@@ -96,15 +96,29 @@ @TableField("loc_type") private String locType; /** * 1.低库位 * 2.高库位 * */ @ApiModelProperty(value= "高低类型{0:未知,1:低库位,2:高库位}") @TableField("loc_type1") private Short locType1; @ApiModelProperty(value= "宽窄类型{0:未知,1:窄库位,2:宽库位}") /** * 1.小托盘 * 2.大托盘 */ @ApiModelProperty(value= "") @TableField("loc_type2") private Short locType2; @ApiModelProperty(value= "轻重类型{0:未知,1:轻库位,2:重库位}") /** * 滑块和连接器库区分 * 1.滑块库 * 2.链接器库 */ @ApiModelProperty(value= "") @TableField("loc_type3") private Short locType3; src/main/java/com/zy/asrs/entity/OrderDetlPakout.java
@@ -93,6 +93,12 @@ private String batch; /** * 料架号 */ @ApiModelProperty(value= "料架号") private String sku; /** * 规格 */ @ApiModelProperty(value= "规格") @@ -128,11 +134,7 @@ @ApiModelProperty(value= "单价") private Double price; /** * sku */ @ApiModelProperty(value= "sku") private String sku; /** * 单位量 src/main/java/com/zy/asrs/entity/OrderPakout.java
@@ -60,6 +60,20 @@ private Long docType; /** * 空板出库数量 */ @ApiModelProperty(value= "空板出库数量") @TableField("pay_type") private Integer payType; /** * 区域地址 */ @ApiModelProperty(value= "区域地址") @TableField("ship_code") private String shipCode; /** * 项目编号 */ @ApiModelProperty(value= "项目编号") @@ -150,12 +164,6 @@ @TableField("act_fee") private Double actFee; /** * 付款类型 1: 现金 2: 记账 */ @ApiModelProperty(value= "付款类型 1: 现金 2: 记账 ") @TableField("pay_type") private Integer payType; /** * 业务员 @@ -206,13 +214,6 @@ @ApiModelProperty(value= "物流名称") @TableField("ship_name") private String shipName; /** * 物流单号 */ @ApiModelProperty(value= "物流单号") @TableField("ship_code") private String shipCode; /** * 订单状态 src/main/java/com/zy/asrs/entity/Task.java
@@ -66,6 +66,9 @@ /** * 入出库类型 * 3.站到站 * 4.站到区域 * 5.区域到站 */ @ApiModelProperty(value= "入出库类型") @TableField("io_type") @@ -125,6 +128,13 @@ @TableField("loc_sts") private String locSts; @ApiModelProperty(value= "1.海康AGV 2.华晓AGV 默认是1.海康") @TableField("plt_type") private Integer pltType=1; @ApiModelProperty(value= "料架号") private String packed; /** * 拣料 */ @@ -139,7 +149,7 @@ @TableField("online_yn") private String onlineYn; @ApiModelProperty(value= "") @ApiModelProperty(value= "是否任务报错") @TableField("upd_mk") private String updMk; @@ -149,10 +159,6 @@ @ApiModelProperty(value= "退出") @TableField("exit_mk") private String exitMk; @ApiModelProperty(value= "") @TableField("plt_type") private Integer pltType; /** * 空板 @@ -171,9 +177,6 @@ @ApiModelProperty(value= "") @TableField("ctn_type") private Integer ctnType; @ApiModelProperty(value= "") private String packed; @ApiModelProperty(value= "") @TableField("ove_mk") src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -72,6 +72,12 @@ private String orderNo; /** * 取消任务标记 1 */ @ApiModelProperty(value= "取消任务标记") private Integer danger; /** * 规格 */ @ApiModelProperty(value= "规格") @@ -229,12 +235,6 @@ */ @ApiModelProperty(value= "要求检验 1: 是 0: 否 ") private Integer inspect; /** * 危险品 1: 是 0: 否 */ @ApiModelProperty(value= "危险品 1: 是 0: 否 ") private Integer danger; /** * 修改人员 src/main/java/com/zy/asrs/entity/mes/MesCallOutApply.java
@@ -12,23 +12,23 @@ @Data public class MesCallOutApply extends MesParent { // // 任务编号 // private String taskno; // // 任务名称 // private String taskname; // // 生产订单号 // @JsonProperty("OrderNo") // private String OrderNo; // 任务编号 private String taskno; // 任务名称 private String taskname; // 生产订单号 @JsonProperty("OrderNo") private String OrderNo; // 运输类型,字典值(wms_tranfs_type) 06 装配领料;01:空托 @JsonProperty("TransType") @JSONField(name = "TransType") private String TransType; // // 生产线编码 // @JsonProperty("ProductLineId") // private String ProductLineId; // // 工位编码 // @JsonProperty("StationId") // private String StationId; // 生产线编码 @JsonProperty("ProductLineId") private String ProductLineId; // 工位编码 @JsonProperty("StationId") private String StationId; // 当前工序 @JsonProperty("CurProcess") @JSONField(name = "CurProcess") @@ -37,6 +37,11 @@ @JsonProperty("Itemdata") @JSONField(name = "Itemdata") private List<MesOutApplyItem> Itemdata; // 空托盘数量 @JsonProperty("EmptyCount") @JSONField(name = "EmptyCount") private List<MesOutApplyItem> EmptyCount; // (sfc_shop_route_consume)mes中配盘表名 @Data @@ -56,6 +61,17 @@ @JsonProperty("ItemBarcode") @JSONField(name = "ItemBarcode") private String ItemBarcode; // 物料二维码 @JsonProperty("stationAGV") @JSONField(name = "stationAGV") private String stationAGV; //托盘码 private String wmsBarcode; //料架号 private String rackNumber; } } src/main/java/com/zy/asrs/entity/mes/MesOutApply.java
@@ -12,37 +12,66 @@ @Data public class MesOutApply extends MesParent { // // 任务编号 // private String taskno; // // 任务名称 // private String taskname; // // 生产订单号 // @JsonProperty("OrderNo") // @JSONField(name = "OrderNo") // private String OrderNo; // 运输类型,字典值(wms_tranfs_type) 01:立库出空托;02 立库入空托;03 立库出毛坯; 04 立库回毛坯; 05 立库出成品;06 立库入成品; // 任务编号 private String taskno; // 任务名称 private String taskname; // 生产订单号 @JsonProperty("OrderNo") private String OrderNo; // 运输类型,字典值(wms_tranfs_type) 06 装配领料;01:空托 @JsonProperty("TransType") @JSONField(name = "TransType") private String TransType; // 零件编码 @JsonProperty("Itemno") @JSONField(name = "Itemno") private String Itemno; // 数量 @JsonProperty("Qty") @JSONField(name = "Qty") private Integer Qty; // // 生产线编码 // @JsonProperty("ProductLineId") // @JSONField(name = "ProductLineId") // private String ProductLineId; // // 工位编码 // @JsonProperty("StationId") // @JSONField(name = "StationId") // private String StationId; // 物料二维码 @JsonProperty("ItemBarcode") @JSONField(name = "ItemBarcode") private List<String> ItemBarcode; // 生产线编码 @JsonProperty("ProductLineId") private String ProductLineId; // 工位编码 @JsonProperty("StationId") private String StationId; // 当前工序 @JsonProperty("CurProcess") @JSONField(name = "CurProcess") private String CurProcess; // 配盘信息 @JsonProperty("Itemdata") @JSONField(name = "Itemdata") private List<MesOutApply.MesOutApplyItem> Itemdata; // 空托盘数量 @JsonProperty("EmptyCount") @JSONField(name = "EmptyCount") private Integer EmptyCount; // (sfc_shop_route_consume)mes中配盘表名 @Data public static class MesOutApplyItem { // 配盘号 private String trayid; // 零件编码 @JsonProperty("Itemno") @JSONField(name = "Itemno") private String Itemno; // 数量 @JsonProperty("Qty") @JSONField(name = "Qty") private Integer Qty; // 物料二维码 @JsonProperty("ItemBarcode") @JSONField(name = "ItemBarcode") private String ItemBarcode; // 物料二维码 @JsonProperty("stationAGV") @JSONField(name = "stationAGV") private String stationAGV; //托盘码 private String wmsBarcode; //料架号 private String rackNumber; } } src/main/java/com/zy/asrs/entity/mes/TransInOutStationAllow.java
@@ -7,6 +7,22 @@ @EqualsAndHashCode(callSuper = true) @Data public class TransInOutStationAllow extends TransParent { //任务编号 private String taskno; //任务名称 private String taskname; //AGV编号 private String AgvCode; //运输类型 private String TransType; //生产线编号 private String ProductLineId; //工位编号 private String StationId; //任务类型 private String taskType; // 是否允许,Y 允许;N,不允许 private String status; src/main/java/com/zy/asrs/entity/mes/TransParent.java
@@ -28,4 +28,12 @@ @JsonProperty("StationId") @JSONField(name = "StationId") private String StationId; // 任务类型 @JsonProperty("TaskType") @JSONField(name = "TaskType") private String TaskType; //请求类型 private String method; } src/main/java/com/zy/asrs/entity/mes/TransTask.java
@@ -58,10 +58,17 @@ @JsonProperty("OperateType") @JSONField(name = "OperateType") private Integer OperateType; // 指定AGV厂家,1 海康;2 华晓;华晓与海康AGV运载能力不同,MES可按需求指定 @JsonProperty("AgvFactory") @JSONField(name = "AgvFactory") private Integer AgvFactory; // @JsonProperty("AgvFactory") // @JSONField(name = "AgvFactory") private Integer agvFactory; //托盘码 private String barcode; //料架号 private String rackNumber; // 托盘ID @JsonProperty("TuoPanId") src/main/java/com/zy/asrs/entity/rcs/RcsReporterTask.java
@@ -15,4 +15,7 @@ private Integer currentSeq; // 详细信息 private JSONObject extra; //华晓AGV任务状态及请求 private String method; } src/main/java/com/zy/asrs/service/MobileService.java
@@ -6,6 +6,7 @@ import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.param.*; import org.springframework.web.bind.annotation.RequestParam; import java.util.Date; @@ -107,4 +108,5 @@ * @param userId 用户id */ R callEmptyBinOutBound(String staNo, String locType, Long userId); } src/main/java/com/zy/asrs/service/RcsService.java
@@ -29,7 +29,7 @@ * @param rcsFactory * @return */ int continueTask(RcsTaskContinue rcsTaskContinue, int rcsFactory); int continueTask(Object rcsTaskContinue, int rcsFactory); /** * 2.1.4任务取消接口 @@ -62,5 +62,5 @@ * @param apply * @return */ JSONObject hxApplyInLine(TransParent apply); RcsReturn hxApplyInLine(TransParent apply); } src/main/java/com/zy/asrs/service/TaskService.java
@@ -14,4 +14,5 @@ void pickWrkMast(String workNo, Long userId); List<Task> selectToBeCompleteData(); } src/main/java/com/zy/asrs/service/WorkService.java
@@ -40,7 +40,7 @@ */ void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId); void stockOut(BasDevp staNo, TaskDto taskDto, Long userId); void stockOut(BasDevp staNo, TaskDto taskDto, Long userId,Integer ioPri); /** * 空板入库 @@ -58,7 +58,7 @@ * @param param * @return */ public WrkMast emptyPlateOut(EmptyPlateOutParam param); public WrkMast emptyPlateOut(EmptyPlateOutParam param,Integer ioPri); /** * 盘点出库 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -22,6 +22,7 @@ import com.zy.common.service.CommonService; 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; @@ -90,6 +91,10 @@ @Resource private MobileService mobileService; @Autowired private DocTypeService docTypeService; @Autowired private OrderService orderService; // region MES接口 @@ -124,7 +129,8 @@ } else { throw new CoolException("同步物料信息,生成入库单失败"); } mesReturn.setSuccess("1"); mesReturn.setMessage(""); return mesReturn; } @@ -189,20 +195,6 @@ if (mat == null) { if (!matService.insert(newMat)) return -2; } else { JSONObject dbMemo = JSONObject.parseObject(mat.getMemo()); dbMemo.remove("OrderNo"); dbMemo.remove("qty"); dbMemo.remove("ItemBarcode"); JSONObject newMemo = JSONObject.parseObject(newMat.getMemo()); newMemo.remove("OrderNo"); newMemo.remove("qty"); dbMemo.remove("ItemBarcode"); if (!dbMemo.equals(newMemo)) { newMat.setId(mat.getId()); if (!matService.updateById(newMat)) return -2; } } } else { return -1; @@ -214,13 +206,12 @@ /** * 物料同步入库单,按OrderNo生成多个订单 * * * @param matRecvForm * @return */ public int inBoundOrder_List(MesMatRecvForm matRecvForm){ public int inBoundOrder_List(MesMatRecvForm matRecvForm) { long docType = 4; // docType根据库类型确定 long docType = 1; // docType根据库类型确定 来料申请单 long settle = 1; Date now = new Date(); @@ -232,8 +223,12 @@ // 校验订单是否重复 OrderPakin order = orderPakinService.selectByNo(entry.getKey()); if (order != null && !StringUtils.isEmpty(order.getOrderNo())) { return -1; // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 if (!Cools.isEmpty(order)) { if (order.getSettle() > 1L) { throw new CoolException(entry.getKey() + "正在出库,无法修改单据"); } orderPakinService.remove(order.getId()); } // 生成订单 @@ -243,52 +238,56 @@ newMemo.put("operuser", matRecvForm.getOperuser()); newMemo.put("itemdata", list); // 生成订单 OrderPakin orderPakin = new OrderPakin(); orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId())); orderPakin.setOrderNo(entry.getKey()); orderPakin.setOrderTime(com.core.common.DateUtils.convert(now)); orderPakin.setDocType(docType); orderPakin.setSettle(settle); orderPakin.setSettle(1L); orderPakin.setStatus(1); orderPakin.setCreateBy(defaultUserId); orderPakin.setCreateTime(now); orderPakin.setUpdateBy(defaultUserId); orderPakin.setUpdateTime(now); orderPakin.setMemo(newMemo.toJSONString()); //为领料入库完成反馈保存 JSONObject.toJSONString(matRecvForm) orderPakin.setMemo(JSONObject.toJSONString(newMemo)); //为出库完成反馈保存 orderPakin.setPakinPakoutStatus(1); if (!orderPakinService.insert(orderPakin)) { log.error("MES保存入库订单主档失败"); throw new CoolException("保存入库订单主档失败"); } orderPakinService.insert(orderPakin); if (list != null && !list.isEmpty()) { for (MesMatInfo mesMatInfo : list) { // 生成明细 for (MesMatInfo mesMat : list) { Mat mat = matService.selectByMatnr(mesMat.getItemNo()); OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); orderDetlPakin.setOrderId(orderPakin.getId()); orderDetlPakin.setOrderNo(orderPakin.getOrderNo()); orderDetlPakin.setAnfme(Double.valueOf(mesMat.getQty())); orderDetlPakin.setQty(0.0); orderDetlPakin.setMatnr(mat.getMatnr()); orderDetlPakin.setMaktx(mat.getMaktx()); orderDetlPakin.setSpecs(mat.getSpecs()); orderDetlPakin.setModel(mat.getModel()); orderDetlPakin.setStandby1(JSONObject.toJSONString(mesMat.getItemBarcode())); // 零件二维码 orderDetlPakin.setStandby2("1"); //保存齐套性检查标识,1 检查;0 不检查; orderDetlPakin.setCreateBy(defaultUserId); orderDetlPakin.setCreateTime(now); orderDetlPakin.setUpdateBy(defaultUserId); orderDetlPakin.setUpdateTime(now); orderDetlPakin.setStatus(1); orderDetlPakin.setPakinPakoutStatus(1); if (!orderDetlPakinService.insert(orderDetlPakin)) { log.error("MES保存入库订单明细档失败1"); throw new CoolException("保存入库订单明细档失败1"); // 生成明细 Mat mat = matService.selectByMatnr(mesMatInfo.getItemNo()); if(Cools.isEmpty(mat)){ log.error("该物料编号立库没有="+mesMatInfo.getItemNo()); continue; } OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); orderDetlPakin.setOrderId(orderPakin.getId()); orderDetlPakin.setOrderNo(orderPakin.getOrderNo()); orderDetlPakin.setAnfme(Double.valueOf(mesMatInfo.getQty())); orderDetlPakin.setQty(0.0); orderDetlPakin.setMatnr(mat.getMatnr()); orderDetlPakin.setMaktx(mat.getMaktx()); orderDetlPakin.setSpecs(mat.getSpecs()); orderDetlPakin.setModel(mat.getModel()); // orderDetlPakin.setThreeCode(mesOutApplyItem.getItemBarcode()); // orderDetlPakin.setStandby1(mesOutApplyItem.getTrayid()); //保存配盘号,非托盘号 orderDetlPakin.setStandby2("0"); //保存齐套性检查标识,1 检查;0 不检查; orderDetlPakin.setCreateBy(defaultUserId); orderDetlPakin.setCreateTime(now); orderDetlPakin.setUpdateBy(defaultUserId); orderDetlPakin.setUpdateTime(now); orderDetlPakin.setStatus(1); orderDetlPakin.setPakinPakoutStatus(1); orderDetlPakinService.insert(orderDetlPakin); } } } return 1; } /** @@ -348,9 +347,9 @@ String url = MES_URL + "MaterialReceiptAndReturn"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesRecvFeedback)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { return 1; } } @@ -367,137 +366,137 @@ * @param mesOutApply * @return 1 成功;-1 订单重复; */ public int outBoundOrder(MesOutApply mesOutApply){ public int outBoundOrder(MesOutApply mesOutApply) { // 空托出库 if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) { // 生成空托出库任务 mobileService.callEmptyBinOutBound(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); } return 1; } else { // 毛坯(物料)出库 // docType根据库类型确定 long docType = 7; long settle = 1; // 校验订单是否重复 OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo()); if (order != null && !StringUtils.isEmpty(order.getOrderNo())) { log.error("出库订单号重复:{}",mesOutApply.getOrderNo()); return -1; } // 生成订单 Date now = new Date(); OrderPakout orderPakout = new OrderPakout(); orderPakout.setUuid( String.valueOf(snowflakeIdWorker.nextId())); orderPakout.setOrderNo(mesOutApply.getOrderNo()); orderPakout.setOrderTime(com.core.common.DateUtils.convert(now)); orderPakout.setDocType(docType); orderPakout.setSettle(settle); orderPakout.setStatus(1); orderPakout.setCreateBy(defaultUserId); orderPakout.setCreateTime(now); orderPakout.setUpdateBy(defaultUserId); orderPakout.setUpdateTime(now); orderPakout.setMemo(JSONObject.toJSONString(mesOutApply)); orderPakout.setPakinPakoutStatus(2); if (!orderPakoutService.insert(orderPakout)) { log.error("MES保存出库订单主档失败"); throw new CoolException("保存出库订单主档失败"); } // 生成明细 Mat mat = matService.selectByMatnr(mesOutApply.getItemno()); OrderDetlPakout orderDetlPakout = new OrderDetlPakout(); orderDetlPakout.setOrderId(orderPakout.getId()); orderDetlPakout.setOrderNo(orderPakout.getOrderNo()); orderDetlPakout.setAnfme(Double.valueOf(mesOutApply.getQty())); 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.setCreateBy(defaultUserId); orderDetlPakout.setCreateTime(now); orderDetlPakout.setUpdateBy(defaultUserId); orderDetlPakout.setUpdateTime(now); orderDetlPakout.setStatus(1); orderDetlPakout.setPakinPakoutStatus(2); if (!orderDetlPakoutService.insert(orderDetlPakout)) { log.error("MES保存出库订单明细档失败"); throw new CoolException("保存出库订单明细档失败"); } // TODO:若AGV和输送线没有安全交互,则要保证立库出货完成后再呼叫AGV。 // 立库生成订单后,自动调度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(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)); } } } } } catch (Exception e) { log.error("下发AGV运输任务失败", e); } } // // 空托出库 // if (StringUtils.isEmpty(mesOutApply.getOrderNo()) && "01".equals(mesOutApply.getTransType())) { // // 生成空托出库任务 // mobileService.callEmptyBinOutBound(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); // } // // return 1; // } else { // 毛坯(物料)出库 // // docType根据库类型确定 // long docType = 7; // long settle = 1; // // // 校验订单是否重复 // OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo()); // if (order != null && !StringUtils.isEmpty(order.getOrderNo())) { // log.error("出库订单号重复:{}", mesOutApply.getOrderNo()); // return -1; // } // // // 生成订单 // Date now = new Date(); // OrderPakout orderPakout = new OrderPakout(); // orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId())); // orderPakout.setOrderNo(mesOutApply.getOrderNo()); // orderPakout.setOrderTime(com.core.common.DateUtils.convert(now)); // orderPakout.setDocType(docType); // orderPakout.setSettle(settle); // orderPakout.setStatus(1); // orderPakout.setCreateBy(defaultUserId); // orderPakout.setCreateTime(now); // orderPakout.setUpdateBy(defaultUserId); // orderPakout.setUpdateTime(now); // orderPakout.setMemo(JSONObject.toJSONString(mesOutApply)); // orderPakout.setPakinPakoutStatus(2); // if (!orderPakoutService.insert(orderPakout)) { // log.error("MES保存出库订单主档失败"); // throw new CoolException("保存出库订单主档失败"); // } // // // 生成明细 // Mat mat = matService.selectByMatnr(mesOutApply.getItemno()); // OrderDetlPakout orderDetlPakout = new OrderDetlPakout(); // orderDetlPakout.setOrderId(orderPakout.getId()); // orderDetlPakout.setOrderNo(orderPakout.getOrderNo()); // orderDetlPakout.setAnfme(Double.valueOf(mesOutApply.getQty())); // 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.setCreateBy(defaultUserId); // orderDetlPakout.setCreateTime(now); // orderDetlPakout.setUpdateBy(defaultUserId); // orderDetlPakout.setUpdateTime(now); // orderDetlPakout.setStatus(1); // orderDetlPakout.setPakinPakoutStatus(2); // if (!orderDetlPakoutService.insert(orderDetlPakout)) { // log.error("MES保存出库订单明细档失败"); // throw new CoolException("保存出库订单明细档失败"); // } // // // TODO:若AGV和输送线没有安全交互,则要保证立库出货完成后再呼叫AGV。 // // 立库生成订单后,自动调度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(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)); // } // } // } // } // } catch (Exception e) { // log.error("下发AGV运输任务失败", e); // } // } return 1; } @@ -509,33 +508,33 @@ * @param mesInApply */ @Transactional public int inBoundOrder(MesInApply mesInApply){ public int inBoundOrder(MesInApply mesInApply) { // 空托回库 if (StringUtils.isEmpty(mesInApply.getOrderNo()) && StringUtils.isEmpty(mesInApply.getItemno())) { if (!StringUtils.isEmpty(mesInApply.getTaskno()) && !StringUtils.isEmpty(mesInApply.getStationID())) { TransTask transTask = new TransTask(); transTask.setTaskno(mesInApply.getTaskno()); transTask.setTaskname(mesInApply.getTaskname()); transTask.setOrderNo(mesInApply.getOrderNo()); transTask.setTransType(mesInApply.getTransType()); transTask.setCurProcess(mesInApply.getProductLineId()); transTask.setCurStationId(mesInApply.getStationID()); 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 = submitTask(transTask); if (!"1".equals(sendAgvTask.getString("Success"))) { log.error("出库下发agv运输任务失败,{}", JSONObject.toJSONString(transTask)); return 2; } } else { log.error("无任务号:{},或无物料编码:{}",mesInApply.getTaskno(),mesInApply.getItemno() ); if (!StringUtils.isEmpty(mesInApply.getTaskno()) && !StringUtils.isEmpty(mesInApply.getStationID())) { TransTask transTask = new TransTask(); transTask.setTaskno(mesInApply.getTaskno()); transTask.setTaskname(mesInApply.getTaskname()); transTask.setOrderNo(mesInApply.getOrderNo()); transTask.setTransType(mesInApply.getTransType()); transTask.setCurProcess(mesInApply.getProductLineId()); transTask.setCurStationId(mesInApply.getStationID()); 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 = submitTask(transTask); if (!"1".equals(sendAgvTask.getString("Success"))) { log.error("出库下发agv运输任务失败,{}", JSONObject.toJSONString(transTask)); return 2; } } else { log.error("无任务号:{},或无物料编码:{}", mesInApply.getTaskno(), mesInApply.getItemno()); return 2; } return 1; } else { // 毛坯、成品回库 @@ -716,9 +715,9 @@ String url = MES_URL + "issueComplete"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { success = 1; } } @@ -759,9 +758,9 @@ String url = MES_URL + "loadComplete"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { success = 1; } } @@ -819,9 +818,9 @@ String url = MES_URL + "loadComplete"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(result)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { success++; } } @@ -885,9 +884,9 @@ String url = MES_URL + "issueComplete"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesOutFeedback)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { success++; } } @@ -934,67 +933,144 @@ * @param mesCallOutApply * @return */ public int callOutBoundOrder(MesCallOutApply mesCallOutApply){ // docType根据库类型确定 long docType = 7; long settle = 1; // 校验订单是否重复 OrderPakout order = orderPakoutService.selectByNo(mesCallOutApply.getOrderNo()); if (order != null && !StringUtils.isEmpty(order.getOrderNo())) { return -1; public int callOutBoundOrder(MesCallOutApply mesCallOutApply) { DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", mesCallOutApply.getTransType())); if (docType == null) { return 0; } //生成出库单 if (docType.getPakout() == 1) { long settle = 1; // 生成订单 Date now = new Date(); OrderPakout orderPakout = new OrderPakout(); orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId())); orderPakout.setOrderNo(mesCallOutApply.getOrderNo()); orderPakout.setOrderTime(com.core.common.DateUtils.convert(now)); orderPakout.setDocType(docType); orderPakout.setSettle(settle); orderPakout.setStatus(1); orderPakout.setCreateBy(defaultUserId); orderPakout.setCreateTime(now); orderPakout.setUpdateBy(defaultUserId); orderPakout.setUpdateTime(now); orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply)); orderPakout.setPakinPakoutStatus(2); if (!orderPakoutService.insert(orderPakout)) { log.error("MES保存出库订单(叫料)主档失败"); throw new CoolException("保存出库订单(叫料)主档失败"); } // 校验订单是否重复 OrderPakout order = orderPakoutService.selectByNo(mesCallOutApply.getOrderNo()); // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 if (!Cools.isEmpty(order)) { if (order.getSettle() > 1L) { throw new CoolException(mesCallOutApply.getOrderNo() + "正在出库,无法修改单据"); } orderPakoutService.remove(order.getId()); } // 生成明细 if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) { for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) { Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno()); OrderDetlPakout orderDetlPakout = new OrderDetlPakout(); orderDetlPakout.setOrderId(orderPakout.getId()); orderDetlPakout.setOrderNo(orderPakout.getOrderNo()); orderDetlPakout.setAnfme(Double.valueOf(mesOutApplyItem.getQty())); orderDetlPakout.setQty(0.0); orderDetlPakout.setMatnr(mat.getMatnr()); orderDetlPakout.setMaktx(mat.getMaktx()); orderDetlPakout.setSpecs(mat.getSpecs()); orderDetlPakout.setModel(mat.getModel()); orderDetlPakout.setThreeCode(mesOutApplyItem.getItemBarcode()); orderDetlPakout.setStandby1(mesOutApplyItem.getTrayid()); //保存配盘号,非托盘号 orderDetlPakout.setCreateBy(defaultUserId); orderDetlPakout.setCreateTime(now); orderDetlPakout.setUpdateBy(defaultUserId); orderDetlPakout.setUpdateTime(now); orderDetlPakout.setStatus(1); orderDetlPakout.setPakinPakoutStatus(2); if (!orderDetlPakoutService.insert(orderDetlPakout)) { log.error("MES保存出库订单(叫料)明细档失败"); throw new CoolException("保存出库订单(叫料)明细档失败"); // 生成订单 Date now = new Date(); OrderPakout orderPakout = new OrderPakout(); orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId())); orderPakout.setOrderNo(mesCallOutApply.getOrderNo()); orderPakout.setOrderTime(com.core.common.DateUtils.convert(now)); orderPakout.setDocType(docType.getDocId()); orderPakout.setSettle(settle); orderPakout.setStatus(1); orderPakout.setCreateBy(defaultUserId); orderPakout.setCreateTime(now); orderPakout.setUpdateBy(defaultUserId); orderPakout.setUpdateTime(now); orderPakout.setMemo(JSONObject.toJSONString(mesCallOutApply)); orderPakout.setPakinPakoutStatus(2); if (!orderPakoutService.insert(orderPakout)) { log.error("MES保存出库订单(叫料)主档失败"); throw new CoolException("保存出库订单(叫料)主档失败"); } Set<String> set = new HashSet<>(); // 生成明细 if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) { for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) { set.add(mesOutApplyItem.getTrayid()); Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno()); OrderDetlPakout orderDetlPakout = new OrderDetlPakout(); orderDetlPakout.setOrderId(orderPakout.getId()); orderDetlPakout.setOrderNo(orderPakout.getOrderNo()); orderDetlPakout.setAnfme(Double.valueOf(mesOutApplyItem.getQty())); orderDetlPakout.setQty(0.0); orderDetlPakout.setMatnr(mat.getMatnr()); orderDetlPakout.setMaktx(mat.getMaktx()); orderDetlPakout.setSpecs(mat.getSpecs()); orderDetlPakout.setModel(mat.getModel()); orderDetlPakout.setThreeCode(mesOutApplyItem.getItemBarcode()); orderDetlPakout.setStandby1(mesOutApplyItem.getTrayid()); //保存配盘号,非托盘号 orderDetlPakout.setCreateBy(defaultUserId); orderDetlPakout.setCreateTime(now); orderDetlPakout.setUpdateBy(defaultUserId); orderDetlPakout.setUpdateTime(now); orderDetlPakout.setStatus(1); orderDetlPakout.setPakinPakoutStatus(2); if (!orderDetlPakoutService.insert(orderDetlPakout)) { log.error("MES保存出库订单(叫料)明细档失败"); throw new CoolException("保存出库订单(叫料)明细档失败"); } } } //有多少种不同的配盘号 只有配盘出库单需要知道 if (mesCallOutApply.getTransType().equals("配盘出库单")){ orderPakout.setPayType(set.size()); String shipCode =mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2]; orderPakout.setShipCode(shipCode);//区域 是否是特殊托盘 orderPakoutService.updateById(orderPakout); } return 1; } else { // 校验订单是否重复 OrderPakin order = orderPakinService.selectByNo(mesCallOutApply.getOrderNo()); // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 if (!Cools.isEmpty(order)) { if (order.getSettle() > 1L) { throw new CoolException(mesCallOutApply.getOrderNo() + "正在出库,无法修改单据"); } orderPakinService.remove(order.getId()); } // 生成订单 Date now = new Date(); OrderPakin orderPakin = new OrderPakin(); orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId())); orderPakin.setOrderNo(mesCallOutApply.getOrderNo()); orderPakin.setOrderTime(com.core.common.DateUtils.convert(now)); orderPakin.setDocType(docType.getDocId()); orderPakin.setSettle(1L); orderPakin.setStatus(1); orderPakin.setCreateBy(defaultUserId); orderPakin.setCreateTime(now); orderPakin.setUpdateBy(defaultUserId); orderPakin.setUpdateTime(now); orderPakin.setMemo(JSONObject.toJSONString(mesCallOutApply)); //为出库完成反馈保存 orderPakin.setPakinPakoutStatus(1); orderPakinService.insert(orderPakin); if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) { for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()){ // 生成明细 Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno()); if(Cools.isEmpty(mat)){ log.error("该物料编号立库没有="+mesOutApplyItem.getItemno()); continue; } OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); orderDetlPakin.setOrderId(orderPakin.getId()); orderDetlPakin.setOrderNo(orderPakin.getOrderNo()); orderDetlPakin.setAnfme(Double.valueOf(mesOutApplyItem.getQty())); orderDetlPakin.setQty(0.0); orderDetlPakin.setMatnr(mat.getMatnr()); orderDetlPakin.setMaktx(mat.getMaktx()); orderDetlPakin.setSpecs(mat.getSpecs()); orderDetlPakin.setModel(mat.getModel()); orderDetlPakin.setThreeCode(mesOutApplyItem.getItemBarcode()); orderDetlPakin.setStandby1(mesOutApplyItem.getTrayid()); //保存配盘号,非托盘号 orderDetlPakin.setStandby2("0"); //保存齐套性检查标识,1 检查;0 不检查; orderDetlPakin.setCreateBy(defaultUserId); orderDetlPakin.setCreateTime(now); orderDetlPakin.setUpdateBy(defaultUserId); orderDetlPakin.setUpdateTime(now); orderDetlPakin.setStatus(1); orderDetlPakin.setPakinPakoutStatus(1); orderDetlPakinService.insert(orderDetlPakin); } } return 1; } return 1; } // endregion @@ -1046,18 +1122,18 @@ rcsTaskSubmit.setTargetRoute(targetRouteList); // 转发给海康或华晓RCS // int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); int success = 1; int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); if (success == 1) { int workNo = commonService.getWorkNo(WorkNoType.OTHER.type); Date now = new Date(); Task task = new Task(); task.setWrkNo(workNo); task.setTaskType("AGV"); task.setWrkSts(301L); task.setIoType(3); task.setTaskType("ZX-AGV"); task.setWrkSts(302L);//302.AGV任务执行中 task.setIoType(3);//3.站到站 task.setIoPri(10.00); task.setWrkDate(now); task.setBarcode(transTask.getBarcode()); task.setSourceStaNo(transTask.getCurStationId()); task.setStaNo(transTask.getNextStationId()); task.setBarcode(transTask.getTuoPanId()); @@ -1067,25 +1143,27 @@ task.setAppeTime(now); task.setTaskNo(transTask.getTaskno()); task.setMemo(JSONObject.toJSONString(transTask)); task.setPltType(transTask.getAgvFactory());//华晓AGV task.setPacked(transTask.getRackNumber());//料架号 taskService.insert(task); Mat mat = matService.selectByMatnr(transTask.getItemno()); TaskDetl taskDetl = new TaskDetl(); taskDetl.setWrkNo(task.getWrkNo()); taskDetl.setIoTime(task.getIoTime()); taskDetl.setMatnr(transTask.getItemno()); taskDetl.setAnfme(0.0); 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.setModiUser(defaultUserId); taskDetl.setModiTime(now); taskDetl.setAppeUser(defaultUserId); taskDetl.setAppeTime(now); taskDetlService.insert(taskDetl); // Mat mat = matService.selectByMatnr(transTask.getItemno()); // TaskDetl taskDetl = new TaskDetl(); // taskDetl.setWrkNo(task.getWrkNo()); // taskDetl.setIoTime(task.getIoTime()); // taskDetl.setMatnr(transTask.getItemno()); // taskDetl.setAnfme(0.0); // 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.setModiUser(defaultUserId); // taskDetl.setModiTime(now); // taskDetl.setAppeUser(defaultUserId); // taskDetl.setAppeTime(now); // taskDetlService.insert(taskDetl); result.put("Success", "1"); result.put("Message", "任务接收成功"); } else { @@ -1125,9 +1203,9 @@ String url = MES_URL + "api/task/reporter"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(transTaskFeedback)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { return 1; } } @@ -1146,9 +1224,9 @@ String url = MES_URL + "api/apply/inLine"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { JSONObject jsonObject = JSONObject.parseObject(response); if("1".equals(jsonObject.getString("Success"))) { if ("1".equals(jsonObject.getString("Success"))) { return jsonObject.getJSONObject("Data").getString("status"); } } @@ -1163,12 +1241,12 @@ * @return */ public int applyInStation(TransParent apply) { String path = ("LL").equals(apply.getProductLineId()) ? "AGVTransportPalletNotice" : "AprsAGVTransportPalletNotice"; String path = "AGVTransportPalletNotice"; String url = MES_URL + path; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { return 1; } } @@ -1185,19 +1263,34 @@ public MesReturn allowInStation(TransInOutStationAllow allow) { MesReturn mesReturn = new MesReturn(); mesReturn.setSuccess("1"); mesReturn.setSuccess("2"); if ("Y".equals(allow.getStatus())) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(allow.getTaskno()); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(allow.getTaskno()); Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", allow.getTaskno())); if (Cools.isEmpty(task)) { mesReturn.setMessage("没有找个该任务编号=" + allow.getTaskno() + "的AGV移动任务"); } else { //查看申请站点的是海康还是华晓 //海康 if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(allow.getTaskno()); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(allow.getTaskno()); // rcsTaskContinue.setTriggerType("ROBOT"); // rcsTaskContinue.setTriggerCode(allow.getAgvCode()); int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode())); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); int success = rcsService.continueTask(rcsTaskContinue, 1); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); } else { allow.setMethod("APPLY_IN_STATION"); int success = rcsService.continueTask(allow, 2); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); } } } return mesReturn; @@ -1219,9 +1312,9 @@ String url = MES_URL + "AGVArrivalCompleted"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(arrivalStation)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { return 1; } } @@ -1237,11 +1330,11 @@ */ public int applyOutStation(TransParent apply) { String url = MES_URL + "api/apply/outStation"; String url = MES_URL + "AGVDepartureRequest"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { return 1; } } @@ -1258,17 +1351,34 @@ public MesReturn allowOutStation(TransInOutStationAllow allow) { MesReturn mesReturn = new MesReturn(); mesReturn.setSuccess("1"); mesReturn.setSuccess("2"); if ("Y".equals(allow.getStatus())) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(allow.getTaskno()); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(allow.getTaskno()); Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", allow.getTaskno())); if (Cools.isEmpty(task)) { mesReturn.setMessage("没有找个该任务编号=" + allow.getTaskno() + "的AGV移动任务"); } else { //查看申请站点的是海康还是华晓 //海康 if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(allow.getTaskno()); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(allow.getTaskno()); // rcsTaskContinue.setTriggerType("ROBOT"); // rcsTaskContinue.setTriggerCode(allow.getAgvCode()); int success = rcsService.continueTask(rcsTaskContinue, checkRcsFactory(allow.getAgvCode())); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); int success = rcsService.continueTask(rcsTaskContinue, 1); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); } else { allow.setMethod("APPLY_OFF_STATION"); int success = rcsService.continueTask(allow, 2); mesReturn.setSuccess(success == 1 ? "1" : "2"); mesReturn.setMessage(success == 1 ? "" : "转发给RCS失败"); } } } return mesReturn; @@ -1284,9 +1394,9 @@ String url = MES_URL + "AGVDepartureCompleted"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { if ("1".equals(mesReturn.getSuccess())) { return 1; } } @@ -1295,13 +1405,13 @@ } @Override public MesReturn queryInventory(String itemno,String orderNo) { public MesReturn queryInventory(String itemno, String orderNo) { MesReturn mesReturn = new MesReturn(); mesReturn.setSuccess("1"); List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", itemno).eq("order_no",orderNo)); List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", itemno).eq("order_no", orderNo)); int count = 0; for(LocDetl locDetl:locDetls) { for (LocDetl locDetl : locDetls) { count += locDetl.getAnfme(); } mesReturn.setMessage(String.valueOf(count)); src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -622,6 +622,15 @@ waitPakin.setModiTime(now); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存入库通知档失败"); }else { WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>() .eq("barcode", param.getBarcode()) .eq("io_type",110)); if (wrkMast != null) { wrkMast.setWrkSts(15L);//空板出库任务转历史档 wrkMast.setModiTime(new Date()); wrkMastService.updateById(wrkMast); } } } // 关联组托 @@ -720,8 +729,46 @@ Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, orderNo); OrderInAndOutUtil.updateOrder(Boolean.TRUE, order.getId(), 2L, userId); }); } if(!Cools.isEmpty(param.getLocNo())){ //生成AGV搬运任务 //生成AGV搬运出库任务 // 保存工作档 Task task = new Task(); Date date = new Date(); String s = ""; if (param.getBarcode().charAt(0) == '3'){ s = "307"; }else if (param.getBarcode().charAt(0) == '4'){ s = "401"; }else if (param.getBarcode().charAt(0) == '5'){ s = "402"; } String TaskNo = param.getBarcode()+"-"+date.getTime(); task.setWrkNo(Integer.getInteger(param.getBarcode())) .setTaskNo(TaskNo) .setIoTime(date) .setWrkSts(301L) // 工作状态:301.任务下发 .setIoType(3) // 入出库状态: 3.站到站 .setTaskType("agv") .setIoPri(10D) .setFullPlt("Y") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(s) .setSourceStaNo(param.getLocNo())//空料架缓存区E1 .setEmptyMk("N")// 空板 .setBarcode(param.getBarcode())// 托盘码 .setLinkMis("N") .setAppeUser(9945L) .setAppeTime(date) .setModiUser(9945L) .setModiTime(date); if (!taskService.insert(task)) { throw new CoolException("保存工作档失败"); } } } } // 商品上架 @@ -1279,14 +1326,25 @@ if(locMast == null) { return R.parse("该类型:" + locType +"空托盘不存在"); } String sta=""; //滑块库 if(locMast.getLocType3()==1){ if(locMast.getLocType2()==1){ } }else if(locMast.getLocType3()==2){ sta="307"; } // 获取路径 Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() .eq("type_no", 110) .eq("stn_no", staNo) .eq("stn_no", sta) .eq("crn_no", locMast.getCrnNo()); StaDesc staDesc = staDescService.selectOne(wrapper); if (staDesc == null) { R.parse("出库路径不存在,站点:" + staNo); R.parse("出库路径不存在,站点:" + sta); } Date now = new Date(); // 生成工作档 @@ -1297,8 +1355,8 @@ wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(110); // 入出库状态: 110.空板出库 wrkMast.setIoPri(10D); wrkMast.setSourceStaNo(staDesc.getCrnStn$()); // 源站 wrkMast.setStaNo(staDesc.getStnNo$()); // 目标站 wrkMast.setSourceStaNo(sta); // 源站 wrkMast.setStaNo(sta); // 目标站 wrkMast.setCrnNo(staDesc.getCrnNo()); wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位 wrkMast.setFullPlt("N"); // 满板:Y @@ -1310,6 +1368,7 @@ wrkMast.setAppeTime(now); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); wrkMast.setMemo(staNo); wrkMastService.insert(wrkMast); // 更新库位状态 src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
@@ -36,6 +36,8 @@ private DocTypeService docTypeService; @Autowired private WrkDetlService wrkDetlService; @Autowired private OrderDetlPakinServiceImpl orderDetlPakinService; @Override public OrderPakin selectByNo(String orderNo) { @@ -71,7 +73,7 @@ if (Cools.isEmpty(order) || order.getSettle() >= 4L) { return; } List<OrderDetlPakin> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", order.getId())); List<OrderDetlPakin> orderDetls = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", order.getId())); boolean complete = true; for (OrderDetlPakin orderDetl : orderDetls) { if (orderDetl.getAnfme() > orderDetl.getQty()) { @@ -83,7 +85,7 @@ // 出库订单重新整理明细 DocType docType = docTypeService.selectById(order.getDocType()); if (null != docType && docType.getPakout() == 1) { if (!orderDetlService.delete(new EntityWrapper<OrderDetlPakin>().eq("order_id", order.getId()))) { if (!orderDetlPakinService.delete(new EntityWrapper<OrderDetlPakin>().eq("order_id", order.getId()))) { throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); } List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo); @@ -98,7 +100,7 @@ orderDetl.setCreateBy(order.getCreateBy()); orderDetl.setUpdateTime(order.getUpdateTime()); orderDetl.setUpdateBy(order.getUpdateBy()); if (!orderDetlService.insert(orderDetl)) { if (!orderDetlPakinService.insert(orderDetl)) { throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); } } @@ -169,7 +171,7 @@ if (!this.deleteById(orderId)) { throw new CoolException("删除单据失败"); } orderDetlService.delete(new EntityWrapper<OrderDetlPakin>().eq("order_id", orderId)); orderDetlPakinService.delete(new EntityWrapper<OrderDetlPakin>().eq("order_id", orderId)); } @Override src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java
@@ -36,6 +36,8 @@ private DocTypeService docTypeService; @Autowired private WrkDetlService wrkDetlService; @Autowired private OrderDetlPakoutServiceImpl orderDetlPakoutService; @Override public OrderPakout selectByNo(String orderNo) { @@ -71,7 +73,7 @@ if (Cools.isEmpty(order) || order.getSettle() >= 4L) { return; } List<OrderDetlPakout> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_id", order.getId())); List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_id", order.getId())); boolean complete = true; for (OrderDetlPakout orderDetl : orderDetls) { if (orderDetl.getAnfme() > orderDetl.getQty()) { @@ -83,7 +85,7 @@ // 出库订单重新整理明细 DocType docType = docTypeService.selectById(order.getDocType()); if (null != docType && docType.getPakout() == 1) { if (!orderDetlService.delete(new EntityWrapper<OrderDetlPakout>().eq("order_id", order.getId()))) { if (!orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>().eq("order_id", order.getId()))) { throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); } List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo); @@ -98,7 +100,8 @@ orderDetl.setCreateBy(order.getCreateBy()); orderDetl.setUpdateTime(order.getUpdateTime()); orderDetl.setUpdateBy(order.getUpdateBy()); if (!orderDetlService.insert(orderDetl)) { orderDetl.setBarcode(wrkDetl.getZpallet()); if (!orderDetlPakoutService.insert(orderDetl)) { throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); } } @@ -168,7 +171,7 @@ if (!this.deleteById(orderId)) { throw new CoolException("删除单据失败"); } orderDetlService.delete(new EntityWrapper<OrderDetlPakout>().eq("order_id", orderId)); orderDetlPakoutService.delete(new EntityWrapper<OrderDetlPakout>().eq("order_id", orderId)); } @Override src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -37,6 +37,15 @@ @Autowired private WrkDetlService wrkDetlService; @Autowired private OrderPakinService orderPakinService; @Autowired private OrderPakoutService orderPakoutService; @Autowired private OrderDetlPakinService orderDetlPakinService; @Autowired private OrderDetlPakoutService orderDetlPakoutService; @Override public Order selectByNo(String orderNo) { List<Order> orderList = this.selectList(new EntityWrapper<Order>().eq("order_no", orderNo)); src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -3,6 +3,7 @@ import com.alibaba.excel.util.StringUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.entity.mes.TransArrivalStation; import com.zy.asrs.entity.mes.TransParent; @@ -16,7 +17,10 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.net.URL; @@ -39,6 +43,12 @@ // 华晓RCS地址 @Value("${hx.url}") private String HX_URL; // 华晓RCS地址 @Value("${hx.taskNo}") private String taskNo; // 华晓RCS地址 @Value("${hx.inOk}") private String inOk; @Value("${mes.defaultUserId}") public long defaultUserId; @@ -55,6 +65,9 @@ private TaskDetlServiceImpl taskDetlService; @Resource private WrkMastService wrkMastService; @Resource private ApiLogService apiLogService; // region 封锁区逻辑,目前只有一个大封锁区,任务全部转到滑块库处理,或直接写到滑块库 @@ -85,40 +98,40 @@ */ public void managerBlock() { try { BlockTask firstTask = blockTaskMapper.findTop(); if (firstTask == null) { return; } EntityWrapper<BlockStation> wrapper = new EntityWrapper<>(); wrapper.eq("block_no", firstTask.getBlockNo()); List<BlockStation> stations = blockStationMapper.selectList(wrapper); if (!stations.isEmpty()) { boolean locked = false; for (BlockStation station : stations) { // 只允许1个厂家设备进入封锁区,status状态:0 空闲;1 海康封锁中;2 华晓封锁中;-1 异常; if (station.getStatus() > 0 && !station.getStatus().equals(firstTask.getAgvFactory())) { locked = true; break; } } try { BlockTask firstTask = blockTaskMapper.findTop(); if (firstTask == null) { return; } EntityWrapper<BlockStation> wrapper = new EntityWrapper<>(); wrapper.eq("block_no", firstTask.getBlockNo()); List<BlockStation> stations = blockStationMapper.selectList(wrapper); if (!stations.isEmpty()) { boolean locked = false; for (BlockStation station : stations) { // 只允许1个厂家设备进入封锁区,status状态:0 空闲;1 海康封锁中;2 华晓封锁中;-1 异常; if (station.getStatus() > 0 && !station.getStatus().equals(firstTask.getAgvFactory())) { locked = true; break; } } if (!locked) { // 封锁状态 int success = blockStationMapper.addByBlockNo(firstTask.getBlockNo(), firstTask.getAgvFactory()); if (success > 0) { // 通知RCS RcsEqptNotify notify = new RcsEqptNotify(); notify.setEqptCode(firstTask.getBlockNo()); notify.setTaskCode(firstTask.getTaskCode()); notify.setActionStatus("1"); notifyEqpt(notify, firstTask.getAgvFactory()); } } } } catch (Exception e) { log.error("管理封锁区异常", e); } if (!locked) { // 封锁状态 int success = blockStationMapper.addByBlockNo(firstTask.getBlockNo(), firstTask.getAgvFactory()); if (success > 0) { // 通知RCS RcsEqptNotify notify = new RcsEqptNotify(); notify.setEqptCode(firstTask.getBlockNo()); notify.setTaskCode(firstTask.getTaskCode()); notify.setActionStatus("1"); notifyEqpt(notify, firstTask.getAgvFactory()); } } } } catch (Exception e) { log.error("管理封锁区异常", e); } } /** @@ -168,13 +181,59 @@ */ public int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){ String url = rcsFactory == 2 ? HIK_URL : HX_URL + "api/robot/controller/task/submit"; String response = sendPost(url, rcsTaskSubmit.toString()); // String response = ""; // boolean success = false; // Map<String,Object> headers = new HashMap<>(); // headers.put("Content-Type","application/json"); // headers.put("Content-Length","<calculated when request is sent>"); // headers.put("Host","<calculated when request is sent>"); //// headers.put("Connection","keep-alive"); //// headers.put("Accept","*/*"); //// headers.put("Accept-Encoding","gzip, deflate, br"); // headers.put("X-lr-request-id","123"); // headers.put("X-lr-version","4.3"); // try { // response = new HttpHandler.Builder() // .setUri(HIK_URL) // .setPath("api/robot/controller/task/submit") // .setHeaders(headers) // .setJson(JSON.toJSONString(rcsTaskSubmit)) // .build() // .doPost(); // JSONObject jsonObject = JSON.parseObject(response); // if (jsonObject.getBoolean("success")) { // success = true; // } else { // log.error("下发agv任务失败!url:{};request:{};response:{}", HIK_URL + "api/robot/controller/task/submit", JSON.toJSONString(rcsTaskSubmit), response); // } // } catch (Exception e) { // log.error("下发agv任务异常", e); // } finally { // try { // // 保存接口日志 // apiLogService.save( // "下发agv任务", // HIK_URL + "api/robot/controller/task/submit", // null, // "127.0.0.1", // JSON.toJSONString(rcsTaskSubmit), // response, // success // ); // } catch (Exception e) { // log.error("下发agv任务保存接口日志异常", e); // } // } // return success ? 1 : 0; String url = rcsFactory == 2 ? HX_URL+taskNo :HIK_URL + "api/robot/controller/task/submit"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit)); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); if("SUCCESS".equals(rcsReturn.getCode())) { if("SUCCESS".equals(rcsReturn.getCode())||"200".equals(rcsReturn.getCode())) { JSONObject data = rcsReturn.getData(); String robotTaskCode = data.getString("robotTaskCode"); String robotTaskCode = data.getString("RobotTaskCode"); if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){ return 1; } @@ -191,18 +250,14 @@ * @param rcsFactory * @return */ public int continueTask(RcsTaskContinue rcsTaskContinue, int rcsFactory){ public int continueTask(Object rcsTaskContinue, int rcsFactory){ String url = rcsFactory == 2 ? HIK_URL : HX_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, rcsTaskContinue.toString()); String url = rcsFactory == 2 ? HX_URL+inOk :HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); if("SUCCESS".equals(rcsReturn.getCode())) { JSONObject data = rcsReturn.getData(); String robotTaskCode = data.getString("robotTaskCode"); if (robotTaskCode.equals(rcsTaskContinue.getRobotTaskCode())) { return 1; } if("200".equals(rcsReturn.getCode())) { return 1; } } @@ -218,7 +273,7 @@ */ public int cancelTask(RcsTaskCancel rcsTaskCancel, int rcsFactory){ String url = rcsFactory == 2 ? HIK_URL : HX_URL + "api/robot/controller/task/cancel"; String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/cancel"; String response = sendPost(url, rcsTaskCancel.toString()); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); @@ -243,7 +298,7 @@ */ private int notifyEqpt(RcsEqptNotify rcsEqptNotify, int rcsFactory){ String url = rcsFactory == 2 ? HIK_URL : HX_URL + "api/wcs/robot/eqpt/notify"; String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/wcs/robot/eqpt/notify"; String response = sendPost(url, rcsEqptNotify.toString()); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class); @@ -272,65 +327,51 @@ String robotTaskCode = rcsReporterTask.getRobotTaskCode(); String singleRobotCode = rcsReporterTask.getSingleRobotCode(); JSONObject values = rcsReporterTask.getExtra().getJSONObject("values"); // start : 任务开始;outbin : 走出储位;end : 任务完成 String method = values.getString("method"); String carrierType = values.getString("carrierType"); String slotCategory = values.getString("slotCategory"); String slotCode = values.getString("slotCode"); try { if ("Q3".equals(carrierType) || "Q8".equals(carrierType)) { //AGV //华晓AGV状态反馈,及申请 if(Cools.isEmpty(rcsReporterTask.getExtra())){ if(Cools.isEmpty(rcsReporterTask.getMethod())){ log.error("华晓AGV上报状态Method为空!"); rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage("华晓AGV上报状态Method为空"); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { EntityWrapper<Task> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); Task task = taskService.selectOne(wrapper); if (task == null || !task.getTaskNo().equals(robotTaskCode)) { rcsReturn.setCode("Err_RobotCodeNotMatch"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); return rcsReturn; } JSONObject memo = JSONObject.parseObject(task.getMemo()); switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { case TASK_START: { String method = rcsReporterTask.getMethod(); JSONObject memo = Cools.isEmpty(task) ? null : JSONObject.parseObject(task.getMemo()); switch (method) { case "TASK_START": { task.setWrkSts(302L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); task.setModiUser(defaultUserId); taskService.updateById(task); } break; case TASK_OUT_BIN: { case "TASK_OUT_BIN": { // TODO:立库出库一托,AGV开始运输后,给MES发送出库完成(一托发一次) JSONObject taskMemo = JSONObject.parseObject(task.getMemo()); mesService.outFeedbackByTuo(taskMemo.getString("OrderNo"), task); // JSONObject taskMemo = JSONObject.parseObject(task.getMemo()); // mesService.outFeedbackByTuo(taskMemo.getString("OrderNo"), task); } break; case TASK_END: { case "TASK_END": { if(Cools.isEmpty(task)){ rcsReturn.setCode("Err_RobotCodeNotMatch"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); return rcsReturn; } // 更新任务状态等内部逻辑 task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); task.setModiUser(defaultUserId); taskService.updateById(task); // 任务完成 // mesService.reporterTask(rcsReporterTask); // EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>(); // wapper2.eq("wrk_no", task.getWrkNo()) // .eq("matnr", memo.getString("ItemNo")) // .eq("order_no", memo.getString("OrderNo")); // TaskDetl taskDetl = taskDetlService.selectOne(wapper2); // taskDetl.setAnfme() // taskDetlService.updateById(); // // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 // taskService.completeWrkMast(); // taskDetlService. } break; case APPLY_IN_STATION: case APPLY_OFF_STATION: case ARRIVE_OFF_STATION: { case "APPLY_IN_STATION": case "APPLY_OFF_STATION": case "ARRIVE_OFF_STATION": { TransParent apply = new TransParent(); apply.setTaskno(robotTaskCode); apply.setTaskname(memo.getString("taskName")); @@ -338,21 +379,19 @@ String transType = memo.getString("TransType"); apply.setTransType(transType); apply.setProductLineId(memo.getString("ProductLineId")); if(transType.equals("02") || transType.equals("04") || transType.equals("06")) { apply.setStationId(task.getSourceStaNo()); } else { apply.setStationId(task.getStaNo()); } if (RcsRetMethodEnum.APPLY_IN_STATION.getCode().equals(method)) { apply.setStationId(task.getSourceStaNo()); //agv入站申请 if ("APPLY_IN_STATION".equals(method)) { mesService.applyInStation(apply); } else if (RcsRetMethodEnum.APPLY_OFF_STATION.getCode().equals(method)) { //agv离站请求 } else if ("APPLY_OFF_STATION".equals(method)) { mesService.applyOutStation(apply); } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) { //agv离站完成 } else { mesService.outStation(apply); } } break; case ARRIVE_ON_STATION: { case "ARRIVE_ON_STATION": { // TODO: 如果产线是运输起点,则不发送到站完成,暂时调试使用lG,未实现判断 if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG")) { break; @@ -389,67 +428,155 @@ } break; default: {} break; } } else if ("CTU".equals(carrierType)) { //CTU EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); WrkMast task = wrkMastService.selectOne(wrapper); if (task == null || !task.getTaskNo().equals(robotTaskCode)) { rcsReturn.setCode("Err_RobotCodeNotMatch"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); return rcsReturn; } // JSONObject memo = JSONObject.parseObject(task.getMemo()); switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { case TASK_START: { // task.setWrkSts(302L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 // task.setModiTime(new Date()); // task.setModiUser(defaultUserId); // taskService.updateById(task); } break; // case TASK_OUT_BIN: {} break; case TASK_END: { // 更新任务状态等内部逻辑 long wrkSts = task.getWrkSts(); // 1.入库;101.出库; if (task.getIoType() == 1) { wrkSts = 4L; } else if (task.getIoType() == 101) { wrkSts = 14L; } task.setWrkSts(wrkSts); // 4.入库完成;14.已出库未确认; task.setModiTime(new Date()); task.setModiUser(defaultUserId); wrkMastService.updateById(task); // TODO:任务完成触发出入库变更操作 // // 入库完成 // mesService.inFeedback(memo.getString("OrderNo")); // // 出库完成 // mesService.outFeedback(memo.getString("OrderNo")); } break; default: {} break; } } // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } catch (Exception e) { log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e); rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage("内部处理异常"); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); //海康AGV状态反馈,及申请 }else { JSONObject values = rcsReporterTask.getExtra().getJSONObject("values"); // start : 任务开始;outbin : 走出储位;end : 任务完成 String method = values.getString("method"); String carrierType = values.getString("carrierType"); String slotCategory = values.getString("slotCategory"); String slotCode = values.getString("slotCode"); try { // q3,q8=1 if ("1".equals(carrierType)) { //AGV EntityWrapper<Task> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); Task task = taskService.selectOne(wrapper); if (task == null || !task.getTaskNo().equals(robotTaskCode)) { rcsReturn.setCode("Err_RobotCodeNotMatch"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); return rcsReturn; } JSONObject memo = JSONObject.parseObject(task.getMemo()); switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { case TASK_START: { task.setWrkSts(302L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); task.setModiUser(defaultUserId); taskService.updateById(task); } break; case TASK_OUT_BIN: { // TODO:立库出库一托,AGV开始运输后,给MES发送出库完成(一托发一次) // JSONObject taskMemo = JSONObject.parseObject(task.getMemo()); // mesService.outFeedbackByTuo(taskMemo.getString("OrderNo"), task); } break; case TASK_END: { // 更新任务状态等内部逻辑 task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); task.setModiUser(defaultUserId); taskService.updateById(task); // 任务完成 // mesService.reporterTask(rcsReporterTask); // EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>(); // wapper2.eq("wrk_no", task.getWrkNo()) // .eq("matnr", memo.getString("ItemNo")) // .eq("order_no", memo.getString("OrderNo")); // TaskDetl taskDetl = taskDetlService.selectOne(wapper2); // taskDetl.setAnfme() // taskDetlService.updateById(); // // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 // taskService.completeWrkMast(); // taskDetlService. } break; case APPLY_IN_STATION: case APPLY_OFF_STATION: case ARRIVE_OFF_STATION: { TransParent apply = new TransParent(); apply.setTaskno(robotTaskCode); apply.setTaskname(memo.getString("taskName")); apply.setAgvCode(singleRobotCode); String transType = memo.getString("TransType"); apply.setTransType(transType); apply.setProductLineId(memo.getString("ProductLineId")); if (transType.equals("02") || transType.equals("04") || transType.equals("06")) { apply.setStationId(task.getSourceStaNo()); } else { apply.setStationId(task.getStaNo()); } if (RcsRetMethodEnum.APPLY_IN_STATION.getCode().equals(method)) { mesService.applyInStation(apply); } else if (RcsRetMethodEnum.APPLY_OFF_STATION.getCode().equals(method)) { mesService.applyOutStation(apply); } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) { mesService.outStation(apply); } } break; case ARRIVE_ON_STATION: { // TODO: 如果产线是运输起点,则不发送到站完成,暂时调试使用lG,未实现判断 if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG")) { break; } EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>(); wapper2.eq("wrk_no", task.getWrkNo()) .eq("matnr", memo.getString("Itemno")) .eq("order_no", memo.getString("OrderNo")); TaskDetl taskDetl = taskDetlService.selectOne(wapper2); TransArrivalStation arrivalStation = new TransArrivalStation(); arrivalStation.setTaskno(robotTaskCode); arrivalStation.setTaskname(memo.getString("taskName")); arrivalStation.setTuoPanId(taskDetl.getZpallet()); // memo.getString("TuoPanId") arrivalStation.setProductLineId(memo.getString("ProductLineId")); String transType = memo.getString("TransType"); arrivalStation.setDaotype(transType); if (transType.equals("02") || transType.equals("04") || transType.equals("06")) { arrivalStation.setStationID(task.getSourceStaNo()); } else { arrivalStation.setStationID(task.getStaNo()); } 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); mesService.arriveOnStation(arrivalStation); } break; default: { } break; } } // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } catch (Exception e) { log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e); rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage("内部处理异常"); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } return rcsReturn; @@ -530,17 +657,53 @@ * @param apply * @return */ public JSONObject hxApplyInLine(TransParent apply) { public RcsReturn hxApplyInLine(TransParent apply) { String status = mesService.applyInLine(apply); JSONObject result = new JSONObject(); result.put("Success", 1); result.put("Message", status); JSONObject data = new JSONObject(); data.put("status", status); result.put("Data", data); RcsReturn rcsReturn = new RcsReturn(); return result; String robotTaskCode = apply.getTaskno(); String singleRobotCode = apply.getAgvCode(); //华晓AGV申请 if(Cools.isEmpty(apply.getMethod())){ log.error("华晓AGV上报状态Method为空!"); rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage("华晓AGV上报状态Method为空"); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { EntityWrapper<Task> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); Task task = taskService.selectOne(wrapper); String method = apply.getMethod(); JSONObject memo = Cools.isEmpty(task) ? null : JSONObject.parseObject(task.getMemo()); switch (method) { case "APPLY_IN_STATION": case "APPLY_OFF_STATION": case "ARRIVE_OFF_STATION": { //agv入站申请 if ("APPLY_IN_STATION".equals(method)) { mesService.applyInStation(apply); //agv离站请求 } else if ("APPLY_OFF_STATION".equals(method)) { mesService.applyOutStation(apply); //agv离站完成 } else { mesService.outStation(apply); } } break; default: {} break; } } // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); //海康AGV状态反馈,及申请 return rcsReturn; } // endregion @@ -563,11 +726,16 @@ log.info("sendPost - {} - {}", url, param); URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Content-Length", "<calculated when request is sent>"); conn.setRequestProperty("Host", "<calculated when request is sent>"); conn.setRequestProperty("Accept", "*/*"); conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br"); conn.setRequestProperty("Connection", "keep-alive"); conn.setRequestProperty("X-lr-request-id", String.valueOf(new Date().getTime())); conn.setRequestProperty("X-lr-version", "4.3"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.setDoOutput(true); src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -397,7 +397,7 @@ @Override @Transactional public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) { public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId,Integer ioPri) { Date now = new Date(); List<LocDto> locDtos = taskDto.getLocDtos(); for (LocDto locDto : locDtos) { @@ -420,7 +420,7 @@ wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(ioType); // 入出库状态 wrkMast.setIoPri(13D); // 优先级:13 wrkMast.setIoPri(ioPri+0.0); // 优先级:13 wrkMast.setCrnNo(locMast.getCrnNo()); wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 源站 wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站 @@ -629,7 +629,7 @@ @Override @Transactional public WrkMast emptyPlateOut(EmptyPlateOutParam param) { public WrkMast emptyPlateOut(EmptyPlateOutParam param,Integer ioPri) { WrkMast wrkMast = new WrkMast(); if (Cools.isEmpty(param.getOutSite())) { throw new CoolException("站点不存在"); @@ -659,7 +659,7 @@ wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(110); // 入出库状态: 110.空板出库 wrkMast.setIoPri(10D); wrkMast.setIoPri(ioPri+0.0); wrkMast.setSourceStaNo(sourceStaNo + ""); // 源站 wrkMast.setStaNo(param.getOutSite() + ""); // 目标站 wrkMast.setCrnNo(locMast.getCrnNo()); @@ -1079,7 +1079,7 @@ @Transactional public void cancelWrkMast(String workNo, Long userId) { Date now = new Date(); WrkMast wrkMast = wrkMastService.selectById(workNo); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo)); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } @@ -1210,6 +1210,9 @@ boolean wrkMastRes = wrkMastService.deleteById(wrkMast); if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) { //取消标记,订单完成后反写订单明细时过滤掉danger = 1的数据 wrkDetlService.updateForSet("danger = 1" ,new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); // 保存工作明细档历史档 if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo()); src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
New file @@ -0,0 +1,124 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.Task; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.TaskService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.task.handler.AGVTaskReportHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; @Component public class AGVTaskReportScheduler { private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class); @Autowired private TaskService taskService; @Autowired private AGVTaskReportHandler AGVTaskReportHandler; @Value("${hik.switch}") private Boolean switchErpReportOld; @Autowired private WrkMastService wrkMastService; /** * 满板和空板出库任务,出到输送线后创建AGV搬运任务 */ @Scheduled(cron = "0/3 * * * * ? ") private void createAGVTask(){ if (!switchErpReportOld){ return; } List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 300)); if (wrkMasts.isEmpty()){ return; } for (WrkMast wrkMast : wrkMasts){ //查询是否有源站和目标站有一样的agv搬运任务 //如果有则跳过本次agv搬运任务下发 Task task1 = taskService.selectOne(new EntityWrapper<Task>() .in("source_sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo()) .in("sta_no", wrkMast.getSourceStaNo(), wrkMast.getMemo())); if (Cools.isEmpty(task1)) { //生成AGV搬运出库任务 // 保存工作档 Task task = new Task(); Date date = new Date(); String TaskNo = wrkMast.getWrkNo()+"-"+date.getTime(); task.setWrkNo(wrkMast.getWrkNo()) .setTaskNo(TaskNo) .setIoTime(date) .setWrkSts(301L) // 工作状态:301.任务下发 .setIoType(3) // 入出库状态: 3.站到站 .setTaskType("agv") .setIoPri(10D) .setFullPlt("Y") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(wrkMast.getMemo()) .setSourceStaNo(wrkMast.getSourceStaNo())//空料架缓存区E1 .setEmptyMk("N")// 空板 .setBarcode(wrkMast.getBarcode())// 托盘码 .setLinkMis("N") .setAppeUser(9945L) .setAppeTime(date) .setModiUser(9945L) .setModiTime(date); if (!taskService.insert(task)) { throw new CoolException("保存工作档失败"); }else { wrkMast.setWrkSts(31L);//31.AGV搬运任务创建成功 wrkMast.setModiTime(date); wrkMastService.updateById(wrkMast); } } } } /** * AGV 任务下发接口,定时给AGV下发任务 */ @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ if (!switchErpReportOld){ return; } //查询所有agv待下发任务 List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 301)); if (wrkSts!=null&& !wrkSts.isEmpty()){ for (Task task:wrkSts){ //查询是否有正在作业的源站和目标站有一样的agv搬运任务 //如果有则跳过本次agv搬运任务下发 Task task1 = taskService.selectOne(new EntityWrapper<Task>() .eq("wrk_sts", 302) .andNew() .in("source_sta_no", task.getSourceStaNo(), task.getStaNo()) .in("sta_no", task.getStaNo(), task.getSourceStaNo())); if (Cools.isEmpty(task1)) { //AGV任务下发 ReturnT<String> start = AGVTaskReportHandler.start(task); if (!start.isSuccess()){ task.setUpdMk("X"); task.setErrorMemo(start.getMsg()); task.setModiTime(new Date()); if (!taskService.updateById(task)) { log.error("工作档[workNo={}]标记待处理失败", task.getWrkNo()); } } } } } } } src/main/java/com/zy/asrs/task/AutoLocMoveScheduler.java
@@ -40,67 +40,67 @@ @Autowired private AutoMoveService autoMoveService; //定时出库 经典双伸 @Scheduled(cron = "0/3 * * * * ? ") public void locToLocAutoLocMove(){ if (slaveWmsParameterProperties.isAutoLocMoveBoolean()){ Config config = configService.selectConfigByCode("AutoLocMove"); if (Cools.isEmpty(config) || config.getValue().equals("false")) { return; } OrderPakout orderPakout = orderPakoutService.selectOrderMoveStatus(); if (!Cools.isEmpty(orderPakout)){ // autoMoveService.selectList() }else { orderPakout = orderPakoutService.selectOrderMoveStatusInitial(); if (Cools.isEmpty(orderPakout)){ return; } orderPakout.setMoveStatus(2); orderPakoutService.updateById(orderPakout); } } } //定时出库 @Scheduled(cron = "0/3 * * * * ? ") public void locToLoc11(){ if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){ Config config = configService.selectConfigByCode("AutoLocMoveUnilateral"); if (Cools.isEmpty(config) || config.getValue().equals("false")) { return; } int crnCount = basCrnpService.selectCount(new EntityWrapper<>()); for (int crnNo = 1;crnNo < crnCount;crnNo++){ WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo)); WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo)); if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)){ autoLocMoveHandler.start(crnNo,11); } } } } //定时入库 @Scheduled(cron = "0/3 * * * * ? ") public void locToLoc111() { if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){ Config config = configService.selectConfigByCode("AutoLocMoveUnilateral"); if (Cools.isEmpty(config) || config.getValue().equals("false")) { return; } int crnCount = basCrnpService.selectCount(new EntityWrapper<>()); for (int crnNo = 1;crnNo < crnCount;crnNo++){ BasCrnp basCrnp = basCrnpService.selectById(crnNo); if (basCrnp == null) { continue; } WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo)); WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo)); if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)){ autoLocMoveHandler.start(crnNo,111); } } } } // //定时出库 经典双伸 // @Scheduled(cron = "0/3 * * * * ? ") // public void locToLocAutoLocMove(){ // if (slaveWmsParameterProperties.isAutoLocMoveBoolean()){ // Config config = configService.selectConfigByCode("AutoLocMove"); // if (Cools.isEmpty(config) || config.getValue().equals("false")) { // return; // } // OrderPakout orderPakout = orderPakoutService.selectOrderMoveStatus(); // if (!Cools.isEmpty(orderPakout)){ //// autoMoveService.selectList() // }else { // orderPakout = orderPakoutService.selectOrderMoveStatusInitial(); // if (Cools.isEmpty(orderPakout)){ // return; // } // orderPakout.setMoveStatus(2); // orderPakoutService.updateById(orderPakout); // } // } // } // // //定时出库 // @Scheduled(cron = "0/3 * * * * ? ") // public void locToLoc11(){ // if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){ // Config config = configService.selectConfigByCode("AutoLocMoveUnilateral"); // if (Cools.isEmpty(config) || config.getValue().equals("false")) { // return; // } // int crnCount = basCrnpService.selectCount(new EntityWrapper<>()); // for (int crnNo = 1;crnNo < crnCount;crnNo++){ // WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo)); // WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo)); // if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)){ // autoLocMoveHandler.start(crnNo,11); // } // } // } // } // // //定时入库 // @Scheduled(cron = "0/3 * * * * ? ") // public void locToLoc111() { // if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){ // Config config = configService.selectConfigByCode("AutoLocMoveUnilateral"); // if (Cools.isEmpty(config) || config.getValue().equals("false")) { // return; // } // int crnCount = basCrnpService.selectCount(new EntityWrapper<>()); // for (int crnNo = 1;crnNo < crnCount;crnNo++){ // BasCrnp basCrnp = basCrnpService.selectById(crnNo); // if (basCrnp == null) { // continue; // } // WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo)); // WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo)); // if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)){ // autoLocMoveHandler.start(crnNo,111); // } // } // } // } } src/main/java/com/zy/asrs/task/BareBoardScheduler.java
@@ -25,18 +25,18 @@ @Autowired private SlaveWmsParameterProperties slaveWmsParameterProperties; /* * 自动调空板出库 * */ @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ if (slaveWmsParameterProperties.isAutomaticFillingBoardStaNosBoolean()){ Config config = configService.selectConfigByCode("AutomaticFillingBoard"); if (!Cools.isEmpty(config) && !Cools.isEmpty(config.getValue()) && config.getValue().equals("true")){ for (Integer staNo : slaveWmsParameterProperties.getAutomaticFillingBoardStaNos()){ bareBoardHandler.start(110,staNo,"D"); } } } } // /* // * 自动调空板出库 // * */ // @Scheduled(cron = "0/3 * * * * ? ") // private void execute(){ // if (slaveWmsParameterProperties.isAutomaticFillingBoardStaNosBoolean()){ // Config config = configService.selectConfigByCode("AutomaticFillingBoard"); // if (!Cools.isEmpty(config) && !Cools.isEmpty(config.getValue()) && config.getValue().equals("true")){ // for (Integer staNo : slaveWmsParameterProperties.getAutomaticFillingBoardStaNos()){ // bareBoardHandler.start(110,staNo,"D"); // } // } // } // } } 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; @@ -49,6 +47,8 @@ @Resource private OrderDetlPakinService orderDetlPakinService; @Resource private OrderDetlPakoutService orderDetlPakoutService; @Value("${mes.url}") public String MES_URL; @@ -130,7 +130,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",4).orderBy("update_time")); .eq("doc_type",1).orderBy("update_time")); if (orderPakin == null) { return; } @@ -160,7 +160,7 @@ mesRecvFeedback.setOperuser(dbMemo.getString("operuser")); mesRecvFeedback.setItemdata(list); String url = MES_URL + "MaterialReceiptAndReturn"; String url = MES_URL + "ActualInventoryFeedback"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesRecvFeedback)); if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); @@ -173,32 +173,71 @@ } } // 其他入库单上报 // 配盘入库单上报 @Scheduled(cron = "0/30 * * * * ? ") @Async("orderThreadPool") void otherInOrderCompleteReport() { 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")); .ne("doc_type", 1).orderBy("update_time")); if (orderPakin == null) { return; } List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectByOrderId(orderPakin.getId()); for (OrderDetlPakin orderDetl : orderDetlPakins) { MesInApply result = JSONObject.parseObject(orderPakin.getMemo(), MesInApply.class); result.setQty(orderDetl.getQty().intValue()); MesOutApply result = JSONObject.parseObject(orderPakin.getMemo(), MesOutApply.class); for(MesOutApply.MesOutApplyItem mes:result.getItemdata()){ if (orderDetl.getMatnr().equals(mes.getItemno())){ mes.setWmsBarcode(orderDetl.getBarcode()); mes.setRackNumber(orderDetl.getSku()); } } // 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/30 * * * * ? ") @Async("orderThreadPool") void otherOutOrderCompleteReport() { String erpReport = Parameter.get().getErpReport(); if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) { OrderPakout orderPakout = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>().eq("settle", 4).orderBy("update_time")); if (orderPakout == null) { return; } List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectByOrderId(orderPakout.getId()); for (OrderDetlPakout orderDetl : orderDetlPakouts) { MesOutApply result = JSONObject.parseObject(orderPakout.getMemo(), MesOutApply.class); for(MesOutApply.MesOutApplyItem mes:result.getItemdata()){ if (orderDetl.getMatnr().equals(mes.getItemno())){ mes.setWmsBarcode(orderDetl.getBarcode()); mes.setRackNumber(orderDetl.getSku()); } } 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())) { orderPakout.setSettle(6L); orderPakoutService.updateById(orderPakout); log.info("订单上报成功,orderNo={}", orderPakout.getOrderNo()); } } } } } src/main/java/com/zy/asrs/task/WorkLogScheduler.java
@@ -1,6 +1,8 @@ package com.zy.asrs.task; import com.zy.asrs.entity.Task; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.TaskService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.task.handler.WorkLogHandler; @@ -22,6 +24,8 @@ private WorkLogHandler workLogHandler; @Autowired private WrkMastService wrkMastService; @Autowired private TaskService taskService; @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ @@ -37,4 +41,18 @@ } } @Scheduled(cron = "0/3 * * * * ? ") private void AGVexecute(){ List<Task> tasks = taskService.selectToBeCompleteData(); if (tasks.isEmpty()) { return; } for (Task task : tasks) { ReturnT<String> result = workLogHandler.AGVstart(task); if (!result.isSuccess()) { log.error("工作档[workNo={}]历史档处理失败", task.getTaskNo()); } } } } src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,5 +1,6 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.entity.Task; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.MesService; @@ -54,9 +55,12 @@ } } /** * AGV 304任务完成,有和WMS关联任务,对关联任务做对应处理,任务状态从304--》305;没有关联任务,任务状态从304--》305 */ @Scheduled(cron = "0/3 * * * * ? ") private void executeTask(){ List<Task> wrkMasts = taskService.selectToBeCompleteData(); List<Task> wrkMasts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 304)); if (wrkMasts.isEmpty()) { return; } src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
New file @@ -0,0 +1,66 @@ package com.zy.asrs.task.handler; import com.zy.asrs.entity.Task; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.rcs.RcsTaskSubmit; import com.zy.asrs.entity.rcs.RcsTaskTargetRoute; import com.zy.asrs.service.RcsService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @Slf4j @Service @Transactional public class AGVTaskReportHandler extends AbstractHandler<String> { @Resource private RcsService rcsService; public ReturnT<String> start(Task task) { String SourceStaNoType = "SITE"; String TargetStaNoType = "SITE"; //给agv下发的任务类型,默认站到站 //任务类型 4.站到区域 if(task.getIoType()==4){ TargetStaNoType = "ZONE"; //任务类型 5.区域到站 }else if(task.getIoType()==5){ SourceStaNoType = "ZONE"; } // 下发给RCS RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit(); rcsTaskSubmit.setRobotTaskCode(task.getTaskNo()); rcsTaskSubmit.setInitPriority(10); //默认10 List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>(); RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute(); startRoute.setSeq(0); startRoute.setType(SourceStaNoType); startRoute.setCode(task.getSourceStaNo()); startRoute.setOperation("COLLECT"); targetRouteList.add(startRoute); RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute(); endRoute.setSeq(1); endRoute.setType(TargetStaNoType); endRoute.setCode(task.getStaNo()); endRoute.setOperation("DELIVERY"); targetRouteList.add(endRoute); rcsTaskSubmit.setTargetRoute(targetRouteList); // 转发给海康或华晓RCS int success = rcsService.submitTask(rcsTaskSubmit, task.getPltType()); if (success == 0){ return FAIL; } return SUCCESS; } } src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -2,10 +2,13 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.Task; import com.zy.asrs.entity.WaitPakin; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.OrderPakinServiceImpl; import com.zy.asrs.service.impl.OrderPakoutServiceImpl; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.utils.OrderInAndOutUtil; @@ -39,6 +42,14 @@ private WaitPakinLogService waitPakinLogService; @Autowired private OrderService orderService; @Autowired private TaskService taskService; @Autowired private TaskLogService taskLogService; @Autowired private OrderPakoutServiceImpl orderPakoutService; @Autowired private OrderPakinServiceImpl orderPakinService; @Transactional public ReturnT<String> start(WrkMast wrkMast) { @@ -50,12 +61,19 @@ while (iterator.hasNext()) { WrkDetl wrkDetl = iterator.next(); if (!Cools.isEmpty(wrkDetl.getOrderNo())) { // orderService.checkComplete(wrkDetl.getOrderNo()); if (wrkMast.getIoType() == 1 || wrkMast.getIoType() == 8 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 104){ OrderInAndOutUtil.checkComplete(Boolean.TRUE,wrkDetl.getOrderNo()); } else { OrderInAndOutUtil.checkComplete(Boolean.FALSE,wrkDetl.getOrderNo()); //出库单 if(wrkMast.getIoType()>100){ orderPakoutService.checkComplete(wrkDetl.getOrderNo()); //入库单 }else { orderPakinService.checkComplete(wrkDetl.getOrderNo()); } // if (wrkMast.getIoType() == 1 || wrkMast.getIoType() == 8 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 104){ // OrderInAndOutUtil.checkComplete(Boolean.TRUE,wrkDetl.getOrderNo()); // } else { // OrderInAndOutUtil.checkComplete(Boolean.FALSE,wrkDetl.getOrderNo()); // } iterator.remove(); } } @@ -125,4 +143,17 @@ return SUCCESS; } @Transactional public ReturnT<String> AGVstart(Task task) { // 保存工作主档历史档 if (!taskLogService.save(task.getWrkNo())) { exceptionHandle("保存工作历史档[workNo={0}]失败", task.getWrkNo()); } // 删除工作主档 if (!taskService.deleteById(task.getId())) { exceptionHandle("删除工作主档[workNo={0}]失败",task.getWrkNo()); } return SUCCESS; } } src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -1,20 +1,21 @@ package com.zy.asrs.task.handler; import com.alibaba.excel.util.StringUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.mes.MesReturn; import com.zy.asrs.enums.LocStsType; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.BasStationServiceImpl; import com.zy.asrs.service.impl.LocCacheServiceImpl; import com.zy.asrs.service.impl.OrderPakinServiceImpl; import com.zy.asrs.service.impl.TaskDetlServiceImpl; import com.zy.asrs.service.impl.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; 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; import org.springframework.transaction.interceptor.TransactionAspectSupport; @@ -56,6 +57,8 @@ private TaskDetlService taskDetlService; @Autowired private BasStationServiceImpl basStationService; @Value("${mes.url}") private String url; public ReturnT<String> start(WrkMast wrkMast) { // 4.入库完成 @@ -568,8 +571,13 @@ default: break; } // 修改工作主档状态 wrkMast.setWrkSts(15L); if(!Cools.isEmpty(wrkMast.getMemo())){ // 修改工作主档状态 wrkMast.setWrkSts(30L);//30.等待创建AGV搬运任务 }else { // 修改工作主档状态 wrkMast.setWrkSts(15L); } wrkMast.setModiTime(now); if (!wrkMastService.updateById(wrkMast)) { // exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo()); @@ -593,12 +601,40 @@ */ @Transactional(rollbackFor = Exception.class) public ReturnT<String> AgvStart(Task task) { // 4.入库完成 if (task.getWrkSts() == 4) { return agvDoIn(task); // 14.出库完成 } else if (task.getWrkSts() == 14) { return agvDoOut(task); //查询是否有关联的WrkMast任务 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", task.getWrkNo())); if (wrkMast != null) { if (wrkMast.getIoType()==110){ wrkMast.setWrkSts(32L);//32.等待组托 }else if (wrkMast.getIoType()==101){ wrkMast.setWrkSts(15L);//15.出库更新完成 } wrkMast.setModiTime(new Date()); wrkMastService.updateById(wrkMast); task.setWrkSts(305L);//任务状态从304--》305 task.setModiTime(new Date()); taskService.updateById(task); //对转序搬运完成的任务结果反馈给mes }else if(task.getTaskType().equals("ZX-AGV")){ HashMap<String,Object> map = new HashMap<>(); map.put("taskno", task.getTaskNo()); String mesUrl = url+"AGVArrivalCompletedFit"; String response = RcsServiceImpl.sendPost(mesUrl, JSONObject.toJSONString(map)); if (!StringUtils.isEmpty(response) && response.contains("Success")){ MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if("1".equals(mesReturn.getSuccess())) { task.setWrkSts(305L);//任务状态从304--》305 task.setModiTime(new Date()); taskService.updateById(task); }else { return new ReturnT<>(500, mesReturn.getMessage()); } } }else { task.setWrkSts(305L);//任务状态从304--》305 task.setModiTime(new Date()); taskService.updateById(task); } return SUCCESS; } src/main/java/com/zy/common/model/LocTypeDto.java
@@ -14,7 +14,7 @@ public class LocTypeDto { // 高低类型{0:未知,1:低库位,2:高库位} private Short locType1; private Short locType1=1; // 宽窄类型{0:未知,1:窄库位,2:宽库位} private Short locType2; @@ -30,9 +30,9 @@ throw new CoolException("plc高低检测异常"); } if (basDevp.getLocType2() == 1) { this.locType2 = 1; // 低库位 this.locType1 = 1; // 低库位 } else { this.locType2 = 2; // 高库位 this.locType1 = 2; // 高库位 } log.info(JSON.toJSONString(this)); } src/main/java/com/zy/common/service/CommonService.java
@@ -158,11 +158,11 @@ @Transactional public StartupDto getLocNoNew(Integer staDescId,Integer sourceStaNo, LocTypeDto locTypeDto) { List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).eq("in_enable", "Y")); if(basCrnps.size() == 0) { log.error("入库请求库位失败:堆垛机报警/无可用/无可入"); throw new CoolException("入库请求库位失败:堆垛机报警/无可用/无可入"); } // List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).eq("in_enable", "Y")); // if(basCrnps.size() == 0) { // log.error("入库请求库位失败:堆垛机报警/无可用/无可入"); // throw new CoolException("入库请求库位失败:堆垛机报警/无可用/无可入"); // } StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", staDescId).eq("stn_no", sourceStaNo).eq("crn_no", 1)); if (staDesc == null) { @@ -170,11 +170,11 @@ throw new CoolException("入库请求库位失败:路径不存在" + staDescId +"," + sourceStaNo); } Short locType2 = locTypeDto.getLocType2(); LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("loc_type2", locType2).orderBy("lev1").orderBy("bay1").orderBy("row1")); Short locType1 = 1; LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("loc_type1", locType1).orderBy("lev1").orderBy("bay1").orderBy("row1")); if (locMast == null) { log.error("入库请求库位失败:无库位" + locType2); throw new CoolException("入库请求库位失败:无库位" + locType2); log.error("入库请求库位失败:无库位" + locType1); throw new CoolException("入库请求库位失败:无库位" + locType1); } StartupDto startupDto = new StartupDto(); src/main/java/com/zy/common/web/AuthController.java
@@ -14,10 +14,8 @@ import com.zy.common.properties.SystemProperties; import com.zy.common.utils.RandomValidateCodeUtil; import com.zy.system.entity.*; import com.zy.system.entity.license.LicenseVerify; import com.zy.system.service.*; import com.zy.system.timer.LicenseTimer; import com.zy.system.timer.LoadingConfigTimer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; @@ -50,42 +48,37 @@ private RolePermissionService rolePermissionService; @Autowired private LicenseTimer licenseTimer; @Autowired private LoadingConfigTimer loadingConfigTimer; @PostMapping("/login.action") @RequestMapping("/login.action") @ManagerAuth(value = ManagerAuth.Auth.NONE, memo = "登录") public R loginAction(@RequestBody Map<String, String> param) { public R loginAction(String username, String password){ //验证许可证是否有效 if (!licenseTimer.getSystemSupport()) { if (!licenseTimer.getSystemSupport()){ return R.parse(CodeRes.SYSTEM_20001); } if (username.equals("super") && password.equals(Cools.md5(superPwd))) { Map<String, Object> res = new HashMap<>(); res.put("username", username); res.put("token", Cools.enToken(System.currentTimeMillis() + username, superPwd)); return R.ok(res); } EntityWrapper<User> userWrapper = new EntityWrapper<>(); userWrapper.eq("username", param.get("username")); userWrapper.eq("username", username); User user = userService.selectOne(userWrapper); if (Cools.isEmpty(user)) { if (param.get("username").equals("super") && param.get("password").equals(Cools.md5(superPwd))) { Map<String, Object> res = new HashMap<>(); res.put("username", param.get("username")); res.put("token", Cools.enToken(System.currentTimeMillis() + param.get("username"), superPwd)); return R.ok(res); } if (Cools.isEmpty(user)){ return R.parse(CodeRes.USER_10001); } if (user.getStatus() != 1) { if (user.getStatus()!=1){ return R.parse(CodeRes.USER_10002); } if (!user.getPassword().equals(param.get("password"))) { if (!user.getPassword().equals(password)){ return R.parse(CodeRes.USER_10003); } String token = Cools.enToken(System.currentTimeMillis() + param.get("username"), user.getPassword()); if (loadingConfigTimer.getTokenNumber() == 1) { userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", user.getId()).eq("system", "WMS")); } UserLogin userLogin = new UserLogin(); String token = Cools.enToken(System.currentTimeMillis() + username, user.getPassword()); userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", user.getId())); UserLogin userLogin = new UserLogin(); userLogin.setUserId(user.getId()); userLogin.setToken(token); userLogin.setCreateTime(new Date()); userLogin.setSystem("WMS"); userLoginService.insert(userLogin); Map<String, Object> res = new HashMap<>(); res.put("username", user.getUsername()); @@ -109,7 +102,7 @@ int time = 0; while (time < 3000) { code = RandomValidateCodeUtil.code.get(sd); if (!Cools.isEmpty(code)) { if (!Cools.isEmpty(code)){ break; } else { Thread.sleep(10); @@ -122,13 +115,13 @@ @RequestMapping("/user/detail/auth") @ManagerAuth public R userDetail() { public R userDetail(){ return R.ok(userService.selectById(getUserId())); } @RequestMapping("/menu/auth") @ManagerAuth public R menu() { public R menu(){ // 获取所有一级菜单 List<Resource> oneLevel; User user = null; @@ -147,7 +140,7 @@ List<RoleResource> roleResources = roleResourceService.selectList(new EntityWrapper<RoleResource>().eq("role_id", user.getRoleId())); List<Long> resourceIds = new ArrayList<>(); roleResources.forEach(roleResource -> resourceIds.add(roleResource.getResourceId())); if (resourceIds.isEmpty()) { if (resourceIds.isEmpty()){ return R.ok(); } resourceWrapper = new EntityWrapper<Resource>().in("id", resourceIds).eq("level", 2).eq("status", 1).orderBy("sort"); @@ -165,11 +158,11 @@ // 是否拥有查看权限 if (getUserId() != 9527) { Resource view = resourceService.selectOne(new EntityWrapper<Resource>().eq("resource_id", resource.getId()).like("code", "#view")); if (!Cools.isEmpty(view)) { if (!Cools.isEmpty(view)){ RoleResource param = new RoleResource(); param.setResourceId(view.getId()); param.setRoleId(user.getRoleId()); if (null == roleResourceService.selectOne(new EntityWrapper<>(param))) { if (null == roleResourceService.selectOne(new EntityWrapper<>(param))){ continue; } } @@ -194,11 +187,11 @@ @RequestMapping("/power/list/auth") @ManagerAuth public R powerList() { public R powerList(){ List<Resource> oneLevels = resourceService.selectList(new EntityWrapper<Resource>().eq("level", 1).eq("status", 1).orderBy("sort")); List<Map> result = new ArrayList<>(); // 一级 for (Resource oneLevel : oneLevels) { for (Resource oneLevel : oneLevels){ List<Map> twoLevelsList = new ArrayList<>(); Map<String, Object> oneLevelMap = new HashMap<>(); oneLevelMap.put("title", oneLevel.getName()); @@ -207,7 +200,7 @@ oneLevelMap.put("children", twoLevelsList); List<Resource> twoLevels = resourceService.selectList(new EntityWrapper<Resource>().eq("resource_id", oneLevel.getId()).eq("level", 2).eq("status", 1).orderBy("sort")); // 二级 for (Resource twoLevel : twoLevels) { for (Resource twoLevel : twoLevels){ Map<String, Object> twoLevelMap = new HashMap<>(); twoLevelMap.put("title", twoLevel.getName()); twoLevelMap.put("id", twoLevel.getId()); @@ -217,7 +210,7 @@ twoLevelMap.put("children", threeLevelsList); // 三级 List<Resource> threeLevels = resourceService.selectList(new EntityWrapper<Resource>().eq("resource_id", twoLevel.getId()).eq("level", 3).eq("status", 1).orderBy("sort")); for (Resource threeLevel : threeLevels) { for (Resource threeLevel : threeLevels){ Map<String, Object> threeLevelMap = new HashMap<>(); threeLevelMap.put("title", threeLevel.getName()); threeLevelMap.put("id", threeLevel.getId()); @@ -256,19 +249,19 @@ List<Object> result = new ArrayList<>(); // 菜单 List<RoleResource> roleResources = roleResourceService.selectList(new EntityWrapper<RoleResource>().eq("role_id", roleId)); for (RoleResource roleResource : roleResources) { for (RoleResource roleResource : roleResources){ Resource resource = resourceService.selectById(roleResource.getResourceId()); if (!Cools.isEmpty(resource)) { if (resource.getLevel() == 3) { if (!Cools.isEmpty(resource)){ if (resource.getLevel() == 3){ result.add(resource.getId()); } } } // 功能 List<RolePermission> rolePermissions = rolePermissionService.selectList(new EntityWrapper<RolePermission>().eq("role_id", roleId)); for (RolePermission rolePermission : rolePermissions) { for (RolePermission rolePermission : rolePermissions){ Permission permission = permissionService.selectById(rolePermission.getPermissionId()); if (!Cools.isEmpty(permission)) { if (!Cools.isEmpty(permission)){ result.add(permission.getAction()); } } @@ -278,12 +271,12 @@ @RequestMapping("/power/auth") @ManagerAuth(memo = "授权") @Transactional public R power(Long roleId, String powers) { public R power(Long roleId, String powers){ Role role = roleService.selectById(roleId); Long leaderId = role.getLeader(); roleResourceService.delete(new EntityWrapper<RoleResource>().eq("role_id", roleId)); rolePermissionService.delete(new EntityWrapper<RolePermission>().eq("role_id", roleId)); if (!Cools.isEmpty(powers)) { if (!Cools.isEmpty(powers)){ List<PowerDto> dtos = JSON.parseArray(powers, PowerDto.class); for (PowerDto dto : dtos) { Resource resource = resourceService.selectOne(new EntityWrapper<Resource>().eq("id", dto.getTwo()).eq("level", 2)); @@ -301,14 +294,14 @@ roleResourceService.insert(roleResource); } else { Permission permission = permissionService.selectOne(new EntityWrapper<Permission>().eq("action", dto.getTwo())); if (!Cools.isEmpty(permission)) { if (!Cools.isEmpty(permission)){ RolePermission rolePermission = new RolePermission(); rolePermission.setRoleId(roleId); rolePermission.setPermissionId(permission.getId()); rolePermissionService.insert(rolePermission); } } for (String three : dto.getThree()) { for (String three : dto.getThree()){ Resource resource1 = resourceService.selectOne(new EntityWrapper<Resource>().eq("id", three).eq("level", 3)); if (!Cools.isEmpty(resource1)) { // 校验上级权限 @@ -344,48 +337,48 @@ return R.ok(resources); } // @GetMapping(value = "/system/activation/auth") // public R activation() { // if (SystemProperties.SYSTEM_ACTIVATION) { // String activationCode = SystemProperties.getActivationCode(OSinfo.getOSname().getActivationCodePath()); // String timeStr = AesUtils.decrypt(activationCode, SystemProperties.SALT); // if (null == timeStr) { // SystemProperties.SYSTEM_ACTIVATION = Boolean.FALSE; // return R.error(); // } // Date exprTime = DateUtils.convert(timeStr, DateUtils.yyyyMMddHHmmss); // if (new Date().getTime() < exprTime.getTime()) { // return R.ok().add(DateUtils.convert(exprTime)); // } else { // SystemProperties.SYSTEM_ACTIVATION = Boolean.FALSE; // return R.error(); // } // } else { // return R.error(); // } // } // // @PostMapping(value = "/system/secret/auth") // @ManagerAuth // public R systemSecret(@RequestParam(value = "secret") String secret) { // if (Cools.isEmpty(secret)) { // return R.error("请输入激活码"); // } // // 验证激活码 // String timeStr = AesUtils.decrypt(secret, SystemProperties.SALT); // if (null == timeStr) { // return R.error("激活码错误"); // } // Date exprTime = DateUtils.convert(timeStr, DateUtils.yyyyMMddHHmmss); // if (new Date().getTime() >= exprTime.getTime()) { // return R.error("激活码已失效"); // } // boolean result = SystemProperties.saveActivationCode(OSinfo.getOSname().getActivationCodePath(), secret); // if (!result) { // return R.error("激活失败"); // } // SystemProperties.SYSTEM_ACTIVATION = Boolean.TRUE; // return R.ok("激活成功,有效期至" + DateUtils.convert(exprTime)); // } @GetMapping(value = "/system/activation/auth") public R activation() { if (SystemProperties.SYSTEM_ACTIVATION) { String activationCode = SystemProperties.getActivationCode(OSinfo.getOSname().getActivationCodePath()); String timeStr = AesUtils.decrypt(activationCode, SystemProperties.SALT); if (null == timeStr) { SystemProperties.SYSTEM_ACTIVATION = Boolean.FALSE; return R.error(); } Date exprTime = DateUtils.convert(timeStr, DateUtils.yyyyMMddHHmmss); if (new Date().getTime() < exprTime.getTime()) { return R.ok().add(DateUtils.convert(exprTime)); } else { SystemProperties.SYSTEM_ACTIVATION = Boolean.FALSE; return R.error(); } } else { return R.error(); } } @PostMapping(value = "/system/secret/auth") @ManagerAuth public R systemSecret(@RequestParam(value = "secret") String secret) { if (Cools.isEmpty(secret)) { return R.error("请输入激活码"); } // 验证激活码 String timeStr = AesUtils.decrypt(secret, SystemProperties.SALT); if (null == timeStr) { return R.error("激活码错误"); } Date exprTime = DateUtils.convert(timeStr, DateUtils.yyyyMMddHHmmss); if (new Date().getTime() >= exprTime.getTime()) { return R.error("激活码已失效"); } boolean result = SystemProperties.saveActivationCode(OSinfo.getOSname().getActivationCodePath(), secret); if (!result) { return R.error("激活失败"); } SystemProperties.SYSTEM_ACTIVATION = Boolean.TRUE; return R.ok("激活成功,有效期至"+DateUtils.convert(exprTime)); } } src/main/java/com/zy/common/web/WcsController.java
@@ -12,6 +12,7 @@ import com.zy.common.CodeRes; 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; @@ -50,6 +51,8 @@ private RowLastnoService rowLastnoService; @Autowired private WorkService workService; @Autowired private TaskService taskService; // TODO:称重、拍照上报存储,CTU料箱运转 @@ -87,9 +90,9 @@ } // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true); sourceStaNo.setLocType2(param.getLocType1()); LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); // BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true); // sourceStaNo.setLocType2(param.getLocType1()); LocTypeDto locTypeDto = new LocTypeDto(); StartupDto dto = null; switch (param.getIoType()) { @@ -153,7 +156,7 @@ EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); emptyPlateOutParam.setOutSite(12); emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locMast.getLocNo()+"");}}); WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam); WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam,50); return R.ok(!Cools.isEmpty(wrkMast)? R.ok("自动空托出库成功,工作号:" + wrkMast.getWrkNo()) : R.error("生成自动空托出库失败")); } @@ -163,7 +166,7 @@ @Transactional public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins) { // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // 检索库位 // List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); // List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList()); @@ -190,7 +193,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("Y"); wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型 wrkMast.setCtnType(1); // 容器类型 // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiTime(now); @@ -221,11 +224,11 @@ throw new CoolException("更新通知档失败"); } // 更新源站点信息 sourceStaNo.setWrkNo(workNo); sourceStaNo.setModiTime(now); if (!basDevpService.updateById(sourceStaNo)){ throw new CoolException("更新源站失败"); } // sourceStaNo.setWrkNo(workNo); // sourceStaNo.setModiTime(now); // if (!basDevpService.updateById(sourceStaNo)){ // throw new CoolException("更新源站失败"); // } // 更新目标库位状态 LocMast locMast = locMastService.selectById(dto.getLocNo()); if (locMast.getLocSts().equals("O")){ @@ -294,4 +297,48 @@ return dto; } @PostMapping("/createAGVMoveTask") @ResponseBody public synchronized R createAGVMoveTask(@RequestBody WrkMast wrkMast){ if (Cools.isEmpty(wrkMast)){ return R.error("出库时创建AGV搬运空料架任务不能为空"); } //查看是否有相关的AGV搬运任务存在 List<Task> tasks = taskService.selectList(new EntityWrapper<Task>() .in("sta_no", wrkMast.getStaNo(),wrkMast.getMemo()) .or() .in("source_sta_no", wrkMast.getStaNo(),wrkMast.getMemo())); if (!tasks.isEmpty()){ return R.error("有对堆垛机接驳站点的AGV搬运任务,暂时无法生成AGV搬运任务"); } //生成AGV搬运空料架任务 // 保存工作档 Task task = new Task(); Date date = new Date(); String TaskNo = wrkMast.getWrkNo()+"-"+date.getTime(); task.setWrkNo(wrkMast.getWrkNo()) .setTaskNo(TaskNo) .setIoTime(date) .setWrkSts(301L) // 工作状态:301.任务下发 .setIoType(5) // 入出库状态: 5.区域到站 .setTaskType("agv") .setIoPri(10D) .setFullPlt("N") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(wrkMast.getStaNo()) .setSourceStaNo("E1")//空料架缓存区E1 .setEmptyMk("Y")// 空板 .setBarcode("")// 托盘码 .setLinkMis("N") .setAppeUser(9945L) .setAppeTime(date) .setModiUser(9945L) .setModiTime(date); if (!taskService.insert(task)) { throw new CoolException("保存工作档失败"); } return R.ok(); } } src/main/resources/application-dev.yml
@@ -1,5 +1,5 @@ server: port: 8089 port: 8083 servlet: context-path: /@pom.build.finalName@ @@ -12,7 +12,7 @@ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver username: sa password: sa@123 url: jdbc:sqlserver://127.0.0.1:1433;databasename=jgwms url: jdbc:sqlserver://127.0.0.1:1433;databasename=jnejc-ljqwms # username: sa # password: Skyouc#23 # url: jdbc:sqlserver://192.168.4.24:1433;databasename=jsxswms @@ -43,14 +43,14 @@ path: /stock/out/@pom.build.finalName@/logs super: pwd: asrs2023 pwd: xltys1995 swagger: enable: false #License相关配置 license: subject: integrationasrs subject: jnejc-ljqasrs publicAlias: publicCert storePass: public_zhongyang_123456789 licensePath: license.lic @@ -131,15 +131,24 @@ #mes对接 mes: url: http://172.26.11.250/dev-api/basicmodel/Api/WMS/ url: http://172.26.160.5:80/dev-api/basicmodel/WmsFit/Api/ #默认接口操作人员id defaultUserId: 30 #海康对接 hik: url: http://127.0.0.1:8089/hik/ switch: false url: http://172.26.11.98:80/ #华晓对接 hx: url: http://127.0.0.1:8089/hx/ url: http://172.26.3.131:8300/api/robot/ #转序任务下发 taskNo: controller/task/submit #入站允许 inOk: eqpt/notify/product #离站允许 #离站完成 src/main/resources/mapper/LocDetlMapper.xml
@@ -125,65 +125,65 @@ <when test="batch != null and batch != ''"> and a.batch = #{batch} </when> <otherwise> and (a.batch IS NULL OR a.batch = '') </otherwise> <!-- <otherwise>--> <!-- and (a.batch IS NULL OR a.batch = '')--> <!-- </otherwise>--> </choose> <choose> <when test="brand != null and brand != ''"> and a.brand = #{brand} </when> <otherwise> and (a.brand IS NULL OR a.brand = '') </otherwise> <!-- <otherwise>--> <!-- and (a.brand IS NULL OR a.brand = '')--> <!-- </otherwise>--> </choose> <choose> <when test="standby1 != null and standby1 != ''"> and a.standby1 = #{standby1} </when> <otherwise> and (a.standby1 IS NULL OR a.standby1 = '') </otherwise> <!-- <otherwise>--> <!-- and (a.standby1 IS NULL OR a.standby1 = '')--> <!-- </otherwise>--> </choose> <choose> <when test="standby2 != null and standby2 != ''"> and a.standby2 = #{standby2} </when> <otherwise> and (a.standby2 IS NULL OR a.standby2 = '') </otherwise> <!-- <otherwise>--> <!-- and (a.standby2 IS NULL OR a.standby2 = '')--> <!-- </otherwise>--> </choose> <choose> <when test="standby3 != null and standby3 != ''"> and a.standby3 = #{standby3} </when> <otherwise> and (a.standby3 IS NULL OR a.standby3 = '') </otherwise> <!-- <otherwise>--> <!-- and (a.standby3 IS NULL OR a.standby3 = '')--> <!-- </otherwise>--> </choose> <choose> <when test="boxType1 != null and boxType1 != ''"> and a.box_type1 = #{boxType1} </when> <otherwise> and (a.box_type1 IS NULL OR a.box_type1 = '') </otherwise> <!-- <otherwise>--> <!-- and (a.box_type1 IS NULL OR a.box_type1 = '')--> <!-- </otherwise>--> </choose> <choose> <when test="boxType2 != null and boxType2 != ''"> and a.box_type2 = #{boxType2} </when> <otherwise> and (a.box_type2 IS NULL OR a.box_type2 = '') </otherwise> <!-- <otherwise>--> <!-- and (a.box_type2 IS NULL OR a.box_type2 = '')--> <!-- </otherwise>--> </choose> <choose> <when test="boxType3 != null and boxType3 != ''"> and a.box_type3 = #{boxType3} </when> <otherwise> and (a.box_type3 IS NULL OR a.box_type3 = '') </otherwise> <!-- <otherwise>--> <!-- and (a.box_type3 IS NULL OR a.box_type3 = '')--> <!-- </otherwise>--> </choose> </sql> <sql id="batchSeqNew"> @@ -545,12 +545,12 @@ <include refid="batchSeqA"></include> <if test="locNos != null and locNos.size > 0"> and b.loc_no not in <foreach item="item" collection="locNos" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <!-- <if test="locNos != null and locNos.size > 0">--> <!-- and b.loc_no not in--> <!-- <foreach item="item" collection="locNos" index="index" separator="," open="(" close=")">--> <!-- #{item}--> <!-- </foreach>--> <!-- </if>--> order by DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme src/main/resources/mapper/TaskMapper.xml
@@ -9,7 +9,7 @@ </resultMap> <select id="selectToBeCompleteData" resultType="com.zy.asrs.entity.Task"> select * from agv_task 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 agv_task where wrk_sts = 305 order by upd_mk,error_time,io_time,wrk_no </select> </mapper> src/main/resources/mapper/WrkDetlMapper.xml
@@ -88,9 +88,9 @@ </update> <select id="selectAndLogByOrderNo" resultMap="BaseResultMap"> select * from asr_wrk_detl where order_no = #{orderNo} select * from asr_wrk_detl where order_no = #{orderNo} and danger != 1 union select * from asr_wrk_detl_log where order_no = #{orderNo} select * from asr_wrk_detl_log where order_no = #{orderNo} and danger != 1 </select> <update id="updateInspect"> src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@ var baseUrl = "/jgwms"; var baseUrl = "/ljqwms"; // 详情窗口-高度 var detailHeight = '80%'; src/main/webapp/views/login.html
@@ -134,12 +134,14 @@ } let params = {username: username, password: hex_md5(password)} $.ajax({ url: baseUrl + "/login.action", headers: {'Content-Type': 'application/json'}, data: JSON.stringify(params), url: baseUrl+"/login.action", data: { username: username, password: hex_md5(password) }, method: 'POST', success: function (res) { if (res.code === 200) { if (res.code === 200){ localStorage.setItem("token", res.data.token); localStorage.setItem("username", res.data.username); window.location.href = "index.html"; @@ -149,9 +151,6 @@ layer.tips(res.msg, '#username', {tips: [4, '#ff0000']}); } else if (res.code === 10003) { layer.tips(res.msg, '#password', {tips: [4, '#ff0000']}); } else if (res.code == 20001) { layer.tips(res.msg, '.login-btn', {tips: [3, '#ff0000']}); $("#updateLicense").show() } else { layer.tips(res.msg, '.login-btn', {tips: [3, '#ff0000']}); }