src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/CombParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/HeartBeat.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/WorkLogHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/waitPakin/waitPakin.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/waitPakin/waitPakin.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/waitPakin/waitPakin_detail.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -13,9 +13,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.*; /** * Created by vincent on 2022/4/8 @@ -46,6 +44,40 @@ return R.ok(); } @PostMapping("/rpc/watchDog/auth/v1") @AppAuth(memo = "心跳接口调用") public synchronized R hostName(@RequestHeader(required = false) String appkey, @RequestBody(required = false) HeartBeat param, HttpServletRequest request){ auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } //........ System.out.println(String.format("id:%s,hostName:%s,requestTime:%s", param.getId(),param.getHostName(),param.getRequestTime())); return R.ok(); } @PostMapping("/rcp/pakIn/auth/v1") @AppAuth(memo = "入库通知单接口调用") public synchronized R combPack(@RequestHeader(required = false) String appkey, @RequestBody(required = false) CombParam param, HttpServletRequest request){ auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } //生成入库通知档 openService.combPACK(param); Map<String,Boolean> map=new HashMap<>(); map.put("isComplete",true); System.out.println(map); return R.ok(map); } /****************************************************************************/ /********************************* 打包上线 **********************************/ /****************************************************************************/ src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -9,6 +9,20 @@ */ @Data public class CombParam { //packNo 是 字符串 PACK码 private String packNo; //packName 是 字符串 产品型号 private String packName; //settingTimes 是 Integer 静置时间,单位分钟 private Integer settingTimes; //requestTime 是 字符串 入库时间,yyyy-MM-dd HH:mm:ss private String requestTime; //PACK状态 private Integer packSts; // 单据编号 private String orderNo; src/main/java/com/zy/asrs/entity/param/HeartBeat.java
New file @@ -0,0 +1,18 @@ package com.zy.asrs.entity.param; import lombok.Data; @Data public class HeartBeat { //报文标识,自增长 private String id; //固定值:MES private String hostName; //上报时间,yyyy-MM-dd HH:mm:ss private String requestTime; } src/main/java/com/zy/asrs/service/OpenService.java
@@ -9,6 +9,11 @@ public interface OpenService { /** * 添加入库通知档 */ void combPACK(CombParam param); /** * 添加入库单 */ void pakinOrderCreate(OpenOrderPakinParam param); src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,6 +1,7 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SnowflakeIdWorker; @@ -19,6 +20,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -48,6 +51,10 @@ private TagService tagService; @Autowired private TagMapper tagMapper; @Autowired private WaitPakinService waitPakinService; @Autowired private WrkDetlService wrkDetlService; @Override @Transactional @@ -544,4 +551,51 @@ } @Override @Transactional public void combPACK(CombParam param) { if (Cools.isEmpty(param.getPackNo())) { throw new CoolException(BaseRes.PARAM); } // 判断是否有相同Pack码的数据 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", param.getPackNo()).eq("io_status", "N")) > 0) { throw new CoolException(param.getPackNo() + "数据正在进行入库"); } int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getPackNo())); int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getPackNo())); if (countLoc > 0 || countWrk > 0) { throw new CoolException("工作档/库存条码数据已存在===>>" + param.getPackNo()); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date date=null; try { date= sdf.parse(param.getRequestTime()); } catch (ParseException e) { e.printStackTrace(); } java.sql.Date requestTime = new java.sql.Date(date.getTime()); // 生成入库通知档 Mat mat = matService.selectByMatnr(param.getPackName()); if (Cools.isEmpty(mat)) { throw new CoolException(param.getPackName() + "商品档案不存在"); } WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); waitPakin.setZpallet(param.getPackNo()); // Pack码 waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAnfme(1.0); // 数量 waitPakin.setStatus("Y"); // 状态 waitPakin.setAppeUser(null); waitPakin.setAppeTime(requestTime); waitPakin.setModiUser(null); waitPakin.setModiTime(requestTime); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存入库通知档失败"); } } } src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -1,19 +1,31 @@ package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.WaitPakin; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.constant.MesConstant; import com.zy.common.model.MesPakinParam; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.parser.JJTCCJSqlParserState; 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; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -38,60 +50,29 @@ private WaitPakinLogService waitPakinLogService; @Autowired private OrderService orderService; @Autowired private ApiLogService apiLogService; @Value("${mes.url}") private String mesUrl; @Value("${mes.inPath}") private String inpath; @Value("${mes.outPath}") private String outPath; @Transactional public ReturnT<String> start(WrkMast wrkMast) { try { List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); // 修改订单状态 作业中 ===>> 已完成 if (!Cools.isEmpty(wrkDetls)) { Iterator<WrkDetl> iterator = wrkDetls.iterator(); while (iterator.hasNext()) { WrkDetl wrkDetl = iterator.next(); if (!Cools.isEmpty(wrkDetl.getOrderNo())) { orderService.checkComplete(wrkDetl.getOrderNo()); iterator.remove(); } } ReturnT<String> result = null; if (wrkMast.getWrkSts() == 5 && wrkMast.getIoType() == 1) { result = postMesData(wrkMast,inpath); } else if (wrkMast.getWrkSts() == 15 && wrkMast.getIoType() == 101){ result = postMesData(wrkMast,outPath); } // 入库 -------------------------------------------------------------------------------- if (wrkMast.getWrkSts() == 5) { // 全板入库 if (wrkMast.getIoType() == 1) { // 入库通知单 if (!Cools.isEmpty(wrkMast.getBarcode())) { // 保存入库通知档历史档 if (!waitPakinLogService.save(wrkMast.getBarcode())) { exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除入库通知档 if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()))) { exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo()); } } // 手动入库生成单据 【 上报三方平台 】 if (!Cools.isEmpty(wrkDetls)) { if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls)) { exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo()); } } // 拣料再入库 } else if (wrkMast.getIoType() == 53) { if (!Cools.isEmpty(wrkDetls)) { if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) { exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); } } } // 出库 -------------------------------------------------------------------------------- } else if (wrkMast.getWrkSts() == 15) { if (!Cools.isEmpty(wrkDetls)) { if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) { exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); } } if(null != result && !result.isSuccess()){ return result; } // 保存工作主档历史档 @@ -119,4 +100,50 @@ return SUCCESS; } private ReturnT<String> postMesData(WrkMast wrkMast, String mesPath){ WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); if(wrkDetl != null){ CombParam combParam = new CombParam(); combParam.setPackNo(wrkDetl.getZpallet()); combParam.setPackName(wrkDetl.getMatnr()); combParam.setLocno(wrkMast.getLocNo()); combParam.setPackSts(1); combParam.setRequestTime(DateUtils.convert(new Date())); String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(mesUrl) .setPath(mesPath) .setJson(JSON.toJSONString(combParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { success = true; } else { log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(combParam), response); throw new CoolException("上报mes系统失败"); } } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "成品库入库上报", MesConstant.URL + MesConstant.PAKIN_URL, null, "127.0.0.1", JSON.toJSONString(combParam), response, success ); } catch (Exception e) { log.error("", e); } } } return SUCCESS; } } src/main/resources/application.yml
@@ -48,4 +48,9 @@ # 双深库位排号 doubleLocs: 1,4,5,8,9,12,13,16 # 一个堆垛机负责的货架排数 groupCount: 2 groupCount: 2 mes: url: 127.0.0.1:8080/test inPath: mesin/v1 outPath: mesin/v1 src/main/webapp/static/js/waitPakin/waitPakin.js
@@ -464,7 +464,8 @@ if (find[0]!=null){ if (find[0].type === 'checkbox'){ if (data[val]==='Y'){ find.attr("checked","checked"); find.attr ("checked","checked"); find.val('Y'); } else { find.remove("checked"); src/main/webapp/views/waitPakin/waitPakin.html
@@ -16,12 +16,12 @@ <div id="search-box" class="layui-form layui-card-header"> <div class="layui-inline"> <div class="layui-input-inline"> <input class="layui-input" type="text" name="zpallet" placeholder="托盘条码" autocomplete="off"> <input class="layui-input" type="text" name="zpallet" placeholder="PACK码" autocomplete="off"> </div> </div> <div class="layui-inline"> <div class="layui-input-inline"> <input class="layui-input" type="text" name="matnr" placeholder="商品编号" autocomplete="off"> <input class="layui-input" type="text" name="matnr" placeholder="产品型号" autocomplete="off"> </div> </div> <!-- 日期范围 --> src/main/webapp/views/waitPakin/waitPakin_detail.html
@@ -30,13 +30,13 @@ </div> </div> <div class="layui-inline" style="width:31%;"> <label class="layui-form-label">托 盘 码:</label> <label class="layui-form-label">PACK 码:</label> <div class="layui-input-inline"> <input id="barcode" class="layui-input" type="text"> </div> </div> <div class="layui-inline" style="width:31%;"> <label class="layui-form-label">商品编号:</label> <label class="layui-form-label">产品型号:</label> <div class="layui-input-inline"> <input id="matnr" class="layui-input" type="text"> </div>