src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/CheckParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/MesOrderReportParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/OrderSyncParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/OpenService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/agvLocMast/locMast.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -308,7 +308,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); @@ -317,6 +317,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/MesOrderReportParam.java
New file @@ -0,0 +1,53 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; @Data public class MesOrderReportParam { //编码 private String code; //备注 private String remark; private List<TransferOrderItem> transferOrderItems; @Data public static class TransferOrderItem{ private List<InventoryDetail> inventoryDetails; //行备注 单据号 private String remark; //接收仓位 private String targetLocationCode; @Data public static class InventoryDetail{ private Amount amount; private BizKey bizKey; //发出仓位 private String locationCode; //物料编码 private String materialCode; //质量状态 private Integer qcStatus; //仓储状态 private Integer storageStatus; @Data public static class Amount{ //数量 private Double amount; //单位编码 private String unitCode; //单位名称 二选一 private String unitName; } @Data public static class BizKey{ //批次 private String batchNo; } } } } 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/OpenServiceImpl.java
@@ -15,8 +15,11 @@ import com.zy.asrs.service.*; import com.zy.asrs.utils.MatUtils; import com.zy.common.model.DetlDto; import com.zy.common.model.LocDetlDto; 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 +62,10 @@ private WrkDetlService wrkDetlService; @Autowired private ReportQueryMapper reportQueryMapper; @Autowired private AgvLocMastService agvLocMastService; @Autowired private AgvLocDetlService agvLocDetlService; @Override @Transactional @@ -918,6 +925,37 @@ return true; } @Override @Transactional @Synchronized public boolean checkAndAdjustLocDetl(CheckParam params) { //判断库位是否存在 AgvLocMast agvLocMast = agvLocMastService.selectById(params.getLocNo()); if(Cools.isEmpty(agvLocMast)){ throw new CoolException("库位号不存在"); } //删除旧库存 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 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -1,14 +1,17 @@ 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.MesOrderReportParam; 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,9 +20,7 @@ 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 @@ -28,6 +29,17 @@ @Value("${agvBasDev.maxWorkNum}") private int maxWrokNum; @Value("${mes.url}") private String url; @Value("${mes.orderReportPath}") private String orderReportPath; @Value("${mes.getTokenPath}") private String getTokenPath; @Value("${mes.appKey}") private String appKey; @Value("${mes.appSecret}") private String appSecret; @Autowired private AgvWrkMastService agvWrkMastService; @@ -51,6 +63,8 @@ private AgvBasDevpService agvBasDevpService; @Autowired private AgvWorkService agvWorkService; @Autowired private ApiLogService apiLogService; @Transactional public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) { @@ -65,6 +79,8 @@ agvBasDevp = agvWrkMast.getSourceLocNo(); } //用于上报mes的工作档明细 List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); //修改工作档状态为207.库存更新完成 agvWrkMast.setWrkSts(207L); @@ -222,6 +238,12 @@ }); } //上报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()); @@ -232,7 +254,12 @@ @Transactional public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) { try{ //用于上报mes的工作档明细 List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); Date now = new Date(); int wrkNo = agvWrkMast.getWrkNo(); String orderNo = getOrderNoByWrkNo(wrkNo); @@ -308,6 +335,13 @@ orderService.checkComplete(o); }); } //上报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()); @@ -318,6 +352,9 @@ @Transactional public ReturnT<String> completedCarryWrk2(AgvWrkMast agvWrkMast) { try{ //用于上报mes的工作档明细 List<AgvWrkDetl> agvWrkDetlListOld = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); int wrkNo = agvWrkMast.getWrkNo(); String orderNo = getOrderNoByWrkNo(wrkNo); String agvBasDevp = ""; @@ -353,6 +390,11 @@ String o = map.get("orderNo").toString(); orderService.checkComplete(o); }); } //上报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){ @@ -527,4 +569,113 @@ return wrkMast; } private MesOrderReportParam generateMesParam(AgvWrkMast agvWrkMast, List<AgvWrkDetl> agvWrkDetls){ if(Cools.isEmpty(agvWrkDetls)){ return null; } 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<>(); //添加transferOrderItem属性 MesOrderReportParam.TransferOrderItem transferOrderItem = new MesOrderReportParam.TransferOrderItem(); transferOrderItem.setRemark(agvWrkDetls.get(0).getOrderNo()); transferOrderItem.setTargetLocationCode(agvWrkMast.getLocNo()); 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(); amount.setAmount(agvWrkDetl.getAnfme()); amount.setUnitName(agvWrkDetl.getUnit()); inventoryDetail.setAmount(amount); //添加bizKey属性 MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey bizKey = new MesOrderReportParam.TransferOrderItem.InventoryDetail.BizKey(); bizKey.setBatchNo(agvWrkDetl.getThreeCode()); inventoryDetail.setBizKey(bizKey); //添加inventoryDetail属性 inventoryDetail.setLocationCode(agvWrkMast.getSourceLocNo()); inventoryDetail.setMaterialCode(agvWrkDetl.getMatnr()); inventoryDetail.setQcStatus(1); inventoryDetail.setStorageStatus(1); inventoryDetails.add(inventoryDetail); } return param; } //获取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", url, 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 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()); } 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/resources/application.yml
@@ -90,9 +90,12 @@ 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 orderReportPath: /api/openapi/domain/web/v1/route/inventory/open/v2/transfer_order/ordinary/_execute 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 ";}