src/main/java/com/zy/asrs/controller/AgvIoWorkController.java
@@ -121,7 +121,7 @@ return null; } int floor = Integer.parseInt(sourceLocNo.split("@")[1]); int floor = Integer.parseInt(sourceLocNo.split("F")[1]); List<String> locNoList = agvLocMastService.queryGroupEmptyStock(floor); src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
@@ -54,7 +54,8 @@ }else { wrapper.orderBy("io_time", false); } return R.ok(agvWrkMastService.selectPage(new Page<>(curr, limit), wrapper)); Page<AgvWrkMast> agvWrkMastPage = agvWrkMastService.selectPage(new Page<>(curr, limit), wrapper); return R.ok(agvWrkMastPage); } @RequestMapping(value = "/wrkMast/list/auth/dbList") src/main/java/com/zy/asrs/controller/OpenController.java
@@ -110,7 +110,7 @@ return R.parse(BaseRes.PARAM); } String docName = param.getChildren().get(0).getIQuantity() > 0 ? "银座采购入库单" : "银座采购退货单"; String docName = !Cools.isEmpty(param.getOrderType()) ? param.getOrderType() : param.getChildren().get(0).getIQuantity() > 0 ? "银座采购入库单" : "银座采购退货单"; boolean pakin = param.getChildren().get(0).getIQuantity() > 0 ? true : false; openService.syncOrder(param,pakin,docName); @@ -119,6 +119,26 @@ } /* 盘点接口 */ @PostMapping("/check/default/v1") @AppAuth(memo = "库存盘点") public synchronized R checkLoc(@RequestHeader(required = false) String appkey, @RequestBody(required = true) CheckParam param, HttpServletRequest request){ auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } openService.checkAndAdjustLocDetl(param); return R.ok("库存调整成功"); } @PostMapping("/order/pakout/default/v1") @AppAuth(memo = "同步工单单据") public synchronized R orderPakout(@RequestHeader(required = false) String appkey, src/main/java/com/zy/asrs/entity/param/CheckParam.java
New file @@ -0,0 +1,13 @@ package com.zy.asrs.entity.param; import com.zy.common.model.DetlDto; import lombok.Data; import java.util.List; @Data public class CheckParam { private String locNo; private String containerCode; private List<DetlDto> locDetls; } src/main/java/com/zy/asrs/entity/param/MesBuyPakinReportParam.java
New file @@ -0,0 +1,53 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * 采购入库上报参数 */ @Data public class MesBuyPakinReportParam { //采购订单编码 private String code; private List<Iteam> iteam; @Data public static class Iteam{ //物料编号 private String materialCode; //批次号 private String batchNo; //⼆维码 private String qrCode; //采购订单⾏号 private String lineNo; //⼊库数量 private Double amount; //备注 private String remark; //单位名称 private String unit; //供应商编号 private String supplierCode; //⼊库位置 private String storageLocationCode; public Iteam(String materialCode, String batchNo, String qrCode, String lineNo, Double amount, String remark, String supplierCode, String storageLocationCode) { this.materialCode = materialCode; this.batchNo = batchNo; this.qrCode = qrCode; this.lineNo = lineNo; this.amount = amount; this.remark = remark; this.supplierCode = supplierCode; this.storageLocationCode = storageLocationCode; } public Iteam(){ } } } src/main/java/com/zy/asrs/entity/param/MesOrderReportParam.java
New file @@ -0,0 +1,89 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * MES调拨参数 */ @Data public class MesOrderReportParam { //编码 private String code; //备注 private String remark; private List<TransferOrderItem> transferOrderItems; private RecordCustomFieldBaseCO recordCustomFieldBaseCO; @Data public static class RecordCustomFieldBaseCO{ private List<CustomField> customFields; @Data public static class CustomField{ private String fieldCode; private String fieldValue; public CustomField(String fieldCode, String fieldValue) { this.fieldCode = fieldCode; this.fieldValue = fieldValue; } } } @Data public static class TransferOrderItem{ //行备注 单据号 private String remark; //接收仓位 private String targetLocationCode; private List<InventoryDetail> inventoryDetails; @Data public static class InventoryDetail{ private Amount amount; private BizKey bizKey; //发出仓位 private String locationCode; //物料编码 private String materialCode; //质量状态 private Integer qcStatus; //仓储状态 private Integer storageStatus; //版本号,默认为null private String version; @Data public static class Amount{ //数量 private Double amount; //单位编码 private String unitCode; //单位名称 二选一 private String unitName; public Amount(Double amount, String unitName, String unitCode) { this.amount = amount; this.unitCode = unitCode; this.unitName = unitName; } } @Data public static class BizKey{ //批次 private String batchNo; public BizKey(String batchNo) { this.batchNo = batchNo; } } } } } src/main/java/com/zy/asrs/entity/param/MesPakinReportParam.java
New file @@ -0,0 +1,41 @@ package com.zy.asrs.entity.param; import lombok.Data; /** * MES入库上报参数 */ @Data public class MesPakinReportParam { private String bizType; private String inboundOrderCode; private String remark; private InventoryAttr inventoryAttr; private NoQrCodeExecAmount noQrCodeExecAmount; @Data public static class InventoryAttr{ private String batchNo; private String materialCode; private String storageLocationCode; public InventoryAttr(String batchNo,String materialCode,String storageLocationCode){ this.batchNo = batchNo; this.materialCode = materialCode; this.storageLocationCode = storageLocationCode; } } @Data public static class NoQrCodeExecAmount{ private Double amount; private String unitName; private String unitCode; public NoQrCodeExecAmount(Double amount, String unitName, String unitCode) { this.amount = amount; this.unitName = unitName; this.unitCode = unitCode; } } } src/main/java/com/zy/asrs/entity/param/MesPakoutReportParam.java
New file @@ -0,0 +1,39 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * MES出库上报参数 */ @Data public class MesPakoutReportParam { //物料编码 private String materialCode; //备注 private String remark; //仓位编号 private String storageCode; //仓库编号 private String wareHouseCode; private List<String> batchNos; private Amount amount; @Data public static class Amount{ private Double amount; //单位编号(编号和名称必填一个,两者不一致且都有效以编号为准) private String unitCode; //单位名称(编号和名称必填一个,两者不一致且都有效以编号为准) private String unitName; public Amount(Double amount, String unitName, String unitCode) { this.amount = amount; this.unitCode = unitCode; this.unitName = unitName; } } } src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java
@@ -12,8 +12,10 @@ //入出库标记 private Integer pakin; //单据类型 private String orderType; //采购订单编号 //订单编号 private String cPOID; //供应商编码 private String cVenCode; @@ -88,10 +90,12 @@ @Data public static class OrderDetl{ //采购订单行号 //订单行号 private String ivouchrowno; //物料编码 private String cInvCode; //批号 private String batch; //需求时间 private String dArriveDate; //需求数量 src/main/java/com/zy/asrs/service/OpenService.java
@@ -5,6 +5,7 @@ import com.zy.asrs.entity.param.*; import com.zy.asrs.entity.result.OpenOrderCompeteResult; import com.zy.asrs.entity.result.StockVo; import com.zy.common.model.LocDetlDto; import java.util.List; @@ -78,4 +79,8 @@ */ boolean orderDelete(String orderNo); /* 库存盘点 */ boolean checkAndAdjustLocDetl(CheckParam params); } src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -390,7 +390,7 @@ //生成移库工作档 AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId,getContainerTypeByloc(sourceLocNo)); //生成工作党明细 createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime(),sourceLocDetl.getProcessSts()); createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime()); //修改目标库位状态 updateAgvLocMast(targetLocMast,"S"); //修改原库位状态 @@ -533,6 +533,7 @@ updateAgvLocMast(agvLocMast,"S"); return agvLocMast.getLocNo(); } /* 空板出库 */ @@ -1055,6 +1056,7 @@ wrkDetl.setAppeTime(now); wrkDetl.setModiUser(userId); wrkDetl.setModiTime(now); wrkDetl.setThreeCode(csocode); wrkDetl.setDeadTime(isoseq); if (!agvWrkDetlService.insert(wrkDetl)) { @@ -1117,7 +1119,6 @@ wrkMast.setModiUser(userId); wrkMast.setModiTime(now); wrkMast.setLogErrMemo("createWaitPainWrkMastStart"); if (!agvWrkMastService.insertByIncrease(wrkMast)) { throw new CoolException("保存工作档失败"); } @@ -1228,4 +1229,4 @@ } } } src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -16,7 +16,9 @@ import com.zy.asrs.utils.MatUtils; import com.zy.common.model.DetlDto; import com.zy.common.utils.NodeUtils; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -59,6 +61,10 @@ private WrkDetlService wrkDetlService; @Autowired private ReportQueryMapper reportQueryMapper; @Autowired private AgvLocMastService agvLocMastService; @Autowired private AgvLocDetlService agvLocDetlService; @Override @Transactional @@ -129,6 +135,9 @@ } OrderDetl orderDetl = new OrderDetl(); orderDetl.sync(mat); if (!Cools.isEmpty(detlDto.getCFree1())){ orderDetl.setSpecs(detlDto.getCFree1()); } orderDetl.setBatch(detlDto.getBatch()); orderDetl.setAnfme(detlDto.getAnfme()); orderDetl.setOrderId(order.getId()); @@ -918,6 +927,49 @@ return true; } @Override @Transactional @Synchronized public boolean checkAndAdjustLocDetl(CheckParam params) { //判断库位是否存在 AgvLocMast agvLocMast = agvLocMastService.selectById(params.getLocNo()); if(Cools.isEmpty(agvLocMast)){ throw new CoolException("库位号不存在"); } if(!Cools.eq("O",agvLocMast.getLocSts()) && !Cools.eq("F",agvLocMast.getLocSts())){ throw new CoolException("当前库位正在作业中,无法盘点调整"); } if(Cools.isEmpty(params.getLocDetls())){ agvLocMast.setLocSts("O"); }else { agvLocMast.setLocSts("F"); } agvLocMastService.updateById(agvLocMast); //删除旧库存 agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",params.getLocNo())); //新增盘点库存 for (DetlDto detlDto : params.getLocDetls()){ AgvLocDetl agvLocDetl = new AgvLocDetl(); Mat mat = matService.selectByMatnr(detlDto.getMatnr()); BeanUtils.copyProperties(mat,agvLocDetl); agvLocDetl.setLocNo(params.getLocNo()); agvLocDetl.setSuppCode(params.getContainerCode()); agvLocDetl.setAnfme(detlDto.getAnfme()); agvLocDetl.setBatch(detlDto.getBatch()); agvLocDetl.setThreeCode(detlDto.getCsocode()); agvLocDetl.setDeadTime(detlDto.getIsoseq()); agvLocDetlService.insert(agvLocDetl); } return true; } private Order orderMapping(OrderSyncParam param, Date now, boolean pakin, String docName){ Order order = new Order(); //uuid @@ -930,6 +982,9 @@ //单据日期 order.setOrderTime(param.getDdate()); //供应商编码 order.setSalesman(param.getCVenCode()); order.setMemo(param.getCMemo()); //制单人 order.setShipCode(param.getCPersonCode()); src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
@@ -82,7 +82,7 @@ try{ autoMoveHandler.start2(agvWrkMast); } catch (Exception e){ log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); //log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); } } @@ -130,7 +130,7 @@ try{ autoMoveHandler.start3(agvWrkMast); } catch (Exception e){ log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); //log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); } } src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -1,14 +1,20 @@ package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.MesBuyPakinReportParam; import com.zy.asrs.entity.param.MesOrderReportParam; import com.zy.asrs.entity.param.MesPakinReportParam; import com.zy.asrs.entity.param.MesPakoutReportParam; import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.utils.HttpHandler; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -17,17 +23,52 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; @Slf4j @Service public class AgvWrkMastHandler extends AbstractHandler<String> { //入库类型数组 private static final List<Integer> IN_TYPE_LIST = new ArrayList<Integer>(){{ add(1); }}; //private static final int[] IN_TYPE_ARRAY = {1}; //出库类型数组 private static final List<Integer> OUT_TYPE_List = new ArrayList<Integer>(){{ // add(101); }}; //private static final int[] OUT_TYPE_ARRAY = {101}; //移库类型数组 private static final List<Integer> MOVE_TYPE_List = new ArrayList<Integer>(){{ add(11);add(101); add(12); add(53); add(101); add(108); add(111); add(112); }}; //private static final int[] MOVE_TYPE_ARRAY = {11,12}; @Value("${agvBasDev.maxWorkNum}") private int maxWrokNum; @Value("${mes.url}") private String url; @Value("${mes.getTokenUrl}") private String getTokenUrl; @Value("${mes.orderReportPath}") private String orderReportPath; @Value("${mes.pakinReportPath}") private String pakinReportPath; @Value("${mes.buyPakinReportPath}") private String buyPakinReportPath; @Value("${mes.pakoutReportPath}") private String pakoutReportPath; @Value("${mes.getTokenPath}") private String getTokenPath; @Value("${mes.appKey}") private String appKey; @Value("${mes.appSecret}") private String appSecret; @Autowired private AgvWrkMastService agvWrkMastService; @@ -51,9 +92,18 @@ private AgvBasDevpService agvBasDevpService; @Autowired private AgvWorkService agvWorkService; @Autowired private ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Autowired private OrderDetlService orderDetlService; @Transactional public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) { //用于上报mes的工作档明细 List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); try{ int wrkNo = agvWrkMast.getWrkNo(); String barcode = agvWrkMast.getBarcode(); @@ -241,17 +291,30 @@ }); } return SUCCESS; //上报mes // MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld); // if(!Cools.isEmpty(param)){ // doHttpRequest(param,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); // } //return SUCCESS; }catch (Exception e){ log.error(""+e.getMessage()); } return FAIL; reportMes(agvWrkMast,agvWrkDetlListOld); return SUCCESS; } @Transactional public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) { //用于上报mes的工作档明细 List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); try{ Date now = new Date(); int wrkNo = agvWrkMast.getWrkNo(); String orderNo = getOrderNoByWrkNo(wrkNo); @@ -291,7 +354,6 @@ wrkMast.setModiUser(9527L); wrkMast.setModiTime(now); wrkMast.setLogErrMemo("completedCarryWrk"); if (!agvWrkMastService.insertByIncrease(wrkMast)) { throw new CoolException("保存工作档失败"); } @@ -328,15 +390,25 @@ orderService.checkComplete(o); }); } return SUCCESS; //上报mes // MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld); // if(!Cools.isEmpty(param)){ // doHttpRequest(param,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); // } }catch (Exception e){ log.error(""+e.getMessage()); } return FAIL; reportMes(agvWrkMast,agvWrkDetlListOld); return SUCCESS; } @Transactional public ReturnT<String> completedCarryWrk2(AgvWrkMast agvWrkMast) { //用于上报mes的工作档明细 List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); try{ int wrkNo = agvWrkMast.getWrkNo(); String orderNo = getOrderNoByWrkNo(wrkNo); @@ -374,11 +446,18 @@ orderService.checkComplete(o); }); } return SUCCESS; //上报mes // MesOrderReportParam param = generateMesParam(agvWrkMast, agvWrkDetlListOld); // if(!Cools.isEmpty(param)){ // doHttpRequest(param,getMesTokenInfo(),"上报mes单据信息",url,orderReportPath,null,"127.0.0.1"); // } // reportMes(agvWrkMast,agvWrkDetlListOld); // return SUCCESS; }catch (Exception e){ log.error(""+e.getMessage()); } return FAIL; reportMes(agvWrkMast,agvWrkDetlListOld); return SUCCESS; } @Transactional @@ -547,4 +626,219 @@ return wrkMast; } private void reportMes(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ if(Cools.isEmpty(agvWrkDetls)){ return ; } //区分不同任务类型的上报方式 if(IN_TYPE_LIST.contains(agvWrkMast.getIoType())){ reportMesPakinOrder(agvWrkMast,agvWrkDetls); } if(OUT_TYPE_List.contains(agvWrkMast.getIoType())){ reportMesPakoutOrder(agvWrkMast,agvWrkDetls); } if(MOVE_TYPE_List.contains(agvWrkMast.getIoType())){ generateMesParam(agvWrkMast,agvWrkDetls); } } private void reportMesPakinOrder(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ for (AgvWrkDetl agvWrkDetl : agvWrkDetls){ //判断是否采购入库 String orderNo = agvWrkDetl.getOrderNo(); Order order = orderService.selectByNo(orderNo); DocType docType = docTypeService.selectById(order.getDocType()); if (docType.getDocName().contains("采购")){ OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(orderNo, agvWrkDetl.getMatnr(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime()); MesBuyPakinReportParam mesBuyPakinReportParam = new MesBuyPakinReportParam(); List<MesBuyPakinReportParam.Iteam> iteams = new ArrayList<>(); MesBuyPakinReportParam.Iteam iteam = new MesBuyPakinReportParam.Iteam(); iteam.setMaterialCode(agvWrkDetl.getMatnr()); iteam.setBatchNo(agvWrkDetl.getBatch()); iteam.setAmount(agvWrkDetl.getAnfme()); iteam.setStorageLocationCode(agvWrkMast.getLocNo()); iteam.setLineNo(orderDetl.getItemNum()); iteam.setSupplierCode(order.getSalesman()); iteam.setUnit(agvWrkDetl.getUnit()); iteams.add(iteam); mesBuyPakinReportParam.setCode(orderNo); mesBuyPakinReportParam.setIteam(iteams); doHttpRequest(mesBuyPakinReportParam,getMesTokenInfo(),"上报mes采购入库信息",url,buyPakinReportPath,null,"127.0.0.1"); }else { MesPakinReportParam mesPakinReportParam = new MesPakinReportParam(); mesPakinReportParam.setInboundOrderCode(agvWrkDetl.getOrderNo()); mesPakinReportParam.setBizType("0"); mesPakinReportParam.setInventoryAttr(new MesPakinReportParam.InventoryAttr(agvWrkDetl.getThreeCode().trim(),agvWrkDetl.getMatnr(),agvWrkMast.getLocNo())); mesPakinReportParam.setNoQrCodeExecAmount(new MesPakinReportParam.NoQrCodeExecAmount(agvWrkDetl.getAnfme(),agvWrkDetl.getUnit(),null)); doHttpRequest(mesPakinReportParam,getMesTokenInfo(),"上报mes入库信息",url,pakinReportPath,null,"127.0.0.1"); } } } private void reportMesPakoutOrder(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ for (AgvWrkDetl agvWrkDetl : agvWrkDetls){ MesPakoutReportParam mesPakoutReportParam = new MesPakoutReportParam(); mesPakoutReportParam.setStorageCode(agvWrkMast.getLocNo()); AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo()); mesPakoutReportParam.setWareHouseCode(agvLocMast.getPltType().toString()); mesPakoutReportParam.setMaterialCode(agvWrkDetl.getMatnr()); mesPakoutReportParam.setBatchNos(Arrays.asList(agvWrkDetl.getThreeCode().trim())); mesPakoutReportParam.setAmount(new MesPakoutReportParam.Amount(agvWrkDetl.getAnfme(),agvWrkDetl.getUnit(),null)); doHttpRequest(mesPakoutReportParam,getMesTokenInfo(),"上报mes出库信息",url,pakoutReportPath,null,"127.0.0.1"); } } private void generateMesParam(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ if(agvWrkMast.getIoType() == 53){ String locNo = agvWrkMast.getLocNo(); agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo()); agvWrkMast.setSourceLocNo(locNo); } MesOrderReportParam param = new MesOrderReportParam(); List<MesOrderReportParam.TransferOrderItem> transferOrderItems = new ArrayList<>(); List<MesOrderReportParam.TransferOrderItem.InventoryDetail> inventoryDetails = new ArrayList<>(); List<MesOrderReportParam.RecordCustomFieldBaseCO.CustomField> customFields = new ArrayList<>(); MesOrderReportParam.RecordCustomFieldBaseCO recordCustomFieldBaseCO = new MesOrderReportParam.RecordCustomFieldBaseCO(); recordCustomFieldBaseCO.setCustomFields(customFields); param.setRecordCustomFieldBaseCO(recordCustomFieldBaseCO); //添加transferOrderItem属性 MesOrderReportParam.TransferOrderItem transferOrderItem = new MesOrderReportParam.TransferOrderItem(); transferOrderItem.setRemark(agvWrkDetls.get(0).getOrderNo()); //调拨 if(agvWrkMast.getLocNo().contains("YZ")){ transferOrderItem.setTargetLocationCode(agvWrkMast.getLocNo()); }else { //出库默认仓位 String floor = agvWrkMast.getLocNo().split("F")[1]; transferOrderItem.setTargetLocationCode(getTargetLocationByFloor(floor)); } transferOrderItems.add(transferOrderItem); transferOrderItem.setInventoryDetails(inventoryDetails); param.setTransferOrderItems(transferOrderItems); for (AgvWrkDetl agvWrkDetl : agvWrkDetls){ MesOrderReportParam.TransferOrderItem.InventoryDetail inventoryDetail = new MesOrderReportParam.TransferOrderItem.InventoryDetail(); //添加amount属性 MesOrderReportParam.TransferOrderItem.InventoryDetail.Amount amount = new MesOrderReportParam.TransferOrderItem.InventoryDetail.Amount(agvWrkDetl.getAnfme(),agvWrkDetl.getUnit(),null); inventoryDetail.setAmount(amount); //添加bizKey属性 MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey bizKey = new MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey(Cools.isEmpty(agvWrkDetl.getBatch()) ? "" : agvWrkDetl.getBatch().trim()); inventoryDetail.setBizKey(bizKey); //添加inventoryDetail属性 inventoryDetail.setLocationCode(agvWrkMast.getSourceLocNo()); inventoryDetail.setMaterialCode(agvWrkDetl.getMatnr()); inventoryDetail.setQcStatus(1); inventoryDetail.setStorageStatus(1); inventoryDetails.add(inventoryDetail); //添加销售订单号 MesOrderReportParam.RecordCustomFieldBaseCO.CustomField customField = new MesOrderReportParam.RecordCustomFieldBaseCO.CustomField("workOrderCode__c",agvWrkDetl.getThreeCode().trim()); customFields.add(customField); } doHttpRequest(param,getMesTokenInfo(),"上报mes调拨信息",url,orderReportPath,null,"127.0.0.1"); } //获取mes token信息 private Map<String,Object> getMesTokenInfo(){ Map<String,String> param = new HashMap<>(); param.put("appKey",appKey); param.put("appSecret",appSecret); JSONObject jsonObject = doHttpRequest(param,null, "获取MesToken", getTokenUrl, getTokenPath, null, "127.0.0.1"); Map<String,Object> headParam = new HashMap<>(); headParam.put("X-AUTH",JSON.parseObject(jsonObject.get("data").toString()).get("appAccessToken").toString()); return headParam; } //根据楼层默认出库仓位 private String getTargetLocationByFloor(String f){ int floor = Integer.parseInt(f); if(floor == 1){ return "WH-000"; } if(floor == 2){ return "WH-000"; } if(floor == 3){ return "WH-000"; } return null; } private JSONObject doHttpRequest(Object requestParam,Map<String,Object> headParam, String namespace, String url, String path, String appkey, String ip){ String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(url) .setPath(path) .setHeaders(headParam) .setJson(JSONObject.toJSONString(requestParam)) .setHttps(true) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if(Cools.isEmpty(jsonObject.get("code")) || Integer.parseInt(jsonObject.get("code").toString()) != 200){ throw new CoolException(jsonObject.get("dsc").toString()); } success = true; return jsonObject; // String succeed = jsonObject.get("succeed").toString(); // // int code = Cools.eq("0",succeed) ? 0 : 1; // if(code != 200){ // throw new CoolException(jsonObject.get("dsc").toString()); // } // success = true; }catch (Exception e){ log.error(e.getMessage()); throw new CoolException(e.getMessage()); }finally { apiLogService.save( namespace, url + path, appkey, ip, JSON.toJSONString(JSONObject.toJSONString(requestParam)), response, success ); } } } src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
@@ -199,6 +199,7 @@ } agvWrkMast.setWrkSts(201L); agvWrkMast.setLocNo(locMast.getLocNo()); agvWrkMast.setLogErrMemo("start2-doAutoMove2"); agvWrkMastService.updateById(agvWrkMast); //更新目标库位状态 updateAgvLocMast(locMast,"S"); @@ -310,6 +311,7 @@ updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode()); return SUCCESS; } public ReturnT<String> autoEmptyBack3(AgvWrkMast agvWrkMast) { Date now = new Date(); AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo()); @@ -332,6 +334,7 @@ updateAgvBasDevp(agvBasDevp,"R"); return SUCCESS; } public ReturnT<String> autoEmptyBack2(AgvLocMast agvLocMast) { Date now = new Date(); //查询工作档 src/main/java/com/zy/common/model/DetlDto.java
@@ -30,6 +30,8 @@ //销售订单行号 private String isoseq; private String cFree1; // 库位类型: 1、代包装成品,2、原材料,3、箱壳 private Integer locType; src/main/resources/application.yml
@@ -90,9 +90,16 @@ ERP: url: http://39.184.149.30:8877 orderReportPath: /DBMS/U8/CM/add MES: url: http://192.168.1.55:8010 orderReportPath: /api/RdAudit mes: url: https://v3-ali.blacklake.cn/api/openapi/domain/web/v1/route orderReportPath: /inventory/open/v2/transfer_order/ordinary/_execute pakinReportPath: /inventory/open/v2/inbound_order/execute/_inbound buyPakinReportPath: /schedule-for-yinzuo/open/yinzuo/inboundOrder pakoutReportPath: /inventory/open/v2/outbound_order/_outbound_by_suggest getTokenUrl: https://v3-ali.blacklake.cn getTokenPath: /api/openapi/domain/api/v1/access_token/_get_access_token appKey: cli_1712644281065780 appSecret: 6710d24e31e64adc963d4c213b2c9b8e agvBasDev: maxWorkNum: 1 src/main/webapp/static/js/agvLocMast/locMast.js
@@ -23,7 +23,6 @@ ,{field: 'locNo', align: 'center',title: '库位号',sort:true} ,{field: 'locSts$', align: 'center',title: '库位状态',width:200} // ,{field: 'whsType$', align: 'center',title: '库位类型'} // ,{field: 'pltType', align: 'center',title: ''} // ,{field: 'ctnType', align: 'center',title: ''} // ,{field: 'locSts', align: 'center',title: ''} // ,{field: 'sheetNo', align: 'center',title: ''} @@ -35,6 +34,7 @@ ,{field: 'floor', align: 'center',title: '楼', sort:true} ,{field: 'barcode', align: 'center',title: '货架码', sort:true} ,{field: 'locType2', align: 'center',title: '货架类型', sort:true} ,{field: 'pltType', align: 'center',title: '仓位编码'} ,{field: 'fullPlt', align: 'center',title: '满板', templet:function(row){ var html = "<input value='fullPlt' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' disabled table-index='"+row.LAY_TABLE_INDEX+"'"; if(row.fullPlt === 'Y'){html += " checked ";} src/main/webapp/static/js/order/order.js
@@ -62,7 +62,6 @@ {field: 'tel', align: 'center',title: '仓库', hide: true}, {field: 'operMemb', align: 'center',title: '出入库类别', hide: true}, {field: 'salesman', align: 'center',title: '部门', hide: true}, {align: 'center', title: '操作', toolbar: '#operate', width: 180} ]], request: { @@ -166,7 +165,9 @@ //{field: 'manu', title: '行号'}, {field: 'threeCode', title: '销售单号'}, {field: 'deadTime', title: '自由项'}, {field: 'processSts$', title: '工序'} {field: 'processSts$', title: '工序'}, {field: 'specs', title: '规格'}, //{field: 'itemNum', title: '行唯一标识'} ]], request: { pageName: 'curr', @@ -192,7 +193,6 @@ }); } }); // 显示表单弹窗 function showEditModel(expTpe) { @@ -306,7 +306,6 @@ }, size: '' }; if (!isExpAdd) { $.ajax({ url: baseUrl+"/order/detl/all/auth?orderId=" + expTpe.id, src/main/webapp/views/order/order.html
@@ -311,7 +311,7 @@ <script type="text/javascript" src="../../static/js/echarts/echarts.min.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/order/order.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/order/order.js?v=1" charset="utf-8"></script> <script type="text/template" id="docTypeTpl"> <option value="">选择类型</option>