自动化立体仓库 - WMS系统
18516761980
2022-08-11 3c43878b87e5724585a107fd30080ba8899d7690
Merge branch 'gzynasrs' of http://47.97.1.152:5880/r/zy-asrs into gzynasrs
1个文件已添加
9个文件已修改
272 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/HeartBeat.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/waitPakin/waitPakin.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/waitPakin/waitPakin.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/waitPakin/waitPakin_detail.html 4 ●●●● 补丁 | 查看 | 原始文档 | 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>