自动化立体仓库 - WMS系统
dubin
1 天以前 cc4e0bd14edeeb43268216f18c70be62e482b8f0
初始化未完成
2个文件已添加
8个文件已修改
163 ■■■■ 已修改文件
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MatSyncParam.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/TokenParam.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/result/TokenVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -120,7 +120,7 @@
    </dependencies>
    <build>
        <finalName>jshdasrs</finalName>
        <finalName>wms</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -7,6 +7,7 @@
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.TokenVo;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OpenService;
import com.zy.common.model.DetlDto;
@@ -39,7 +40,21 @@
    @Autowired
    private OpenService openService;
    @PostMapping("/order/matSync/default/v2")
    @PostMapping("/getToken")
    public synchronized R getToken(@RequestBody(required = true) TokenParam param,
                                   HttpServletRequest request){
        authNew(param, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        TokenVo tokenVo = new TokenVo();
        String token = Cools.enToken(System.currentTimeMillis() + param.getAppId(), param.getAppSecret());
        tokenVo.setToken(token);
        tokenVo.setValidTime(30);
        return R.ok().add(tokenVo);
    }
    @PostMapping("/erp/mat/sync")
//    @AppAuth(memo = "商品信息同步接口")
    public synchronized R syncMatInfoV2(@RequestHeader(required = false) String appkey,
                                      @RequestBody(required = false) MatSyncParam.MatParam param,
@@ -183,6 +198,23 @@
        }
    }
    private void authNew(TokenParam param, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appSecret:{};请求数据:{}", "open/sensorType/list/auth/v1", param.getAppSecret(), JSON.toJSONString(obj));
        request.setAttribute("cache", obj);
        if (!auth) {
            return;
        }
        if (Cools.isEmpty(param.getAppId()) || Cools.isEmpty(param.getAppSecret())) {
            throw new CoolException("认证失败,请确认appId和appSecret无误!");
        }
        if (!param.getAppId().contains("FNWMS")){
            throw new CoolException("认证失败,请确认appId无误!");
        }
        if (!APP_KEY_LIST.contains(param.getAppSecret())) {
            throw new CoolException("认证失败,请确认appSecret无误!");
        }
    }
    public static void main(String[] args) {
        // 1
        System.out.println("======================================");
src/main/java/com/zy/asrs/entity/param/MatSyncParam.java
@@ -1,5 +1,6 @@
package com.zy.asrs.entity.param;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@@ -23,16 +24,19 @@
        /**
         * 商品编号
         */
        @JsonProperty("matNr")
        private String matnr;
        /**
         * 商品名称
         */
        @JsonProperty("makTx")
        private String maktx;
        /**
         * 商品分类
         */
        @JsonProperty("groupId")
        private String groupCode;
        /**
@@ -176,8 +180,9 @@
        private Integer danger;
        /**
         * 状态 1: 正常  0: 禁用
         * 状态 1: 新增(默认)  2: 修改 3: 禁用 4: 启用
         */
        @JsonProperty("operateType")
        private Integer status;
        /**
@@ -193,6 +198,7 @@
        /**
         * 备注
         */
        @JsonProperty("describle")
        private String memo;
    }
src/main/java/com/zy/asrs/entity/param/TokenParam.java
New file
@@ -0,0 +1,19 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class TokenParam {
    /**
     * 应用编码 wms线下分配
     */
    private String appId;
    /**
     * 应用密钥 wms线下分配
     */
    private String appSecret;
}
src/main/java/com/zy/asrs/entity/result/TokenVo.java
New file
@@ -0,0 +1,17 @@
package com.zy.asrs.entity.result;
import lombok.Data;
@Data
public class TokenVo {
    /**
     * token值
     */
    private String token;
    /**
     * 有效时间 单位:分钟
     */
    private Integer validTime;
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -559,8 +559,8 @@
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        if(param.getBarcode().length()!=6){
            throw new CoolException("条码长度不是6位===>>" + param.getBarcode());
        if(param.getBarcode().length()!=8){
            throw new CoolException("条码长度不是8位===>>" + param.getBarcode());
        }
//        if (param.getCombMats().size()>1){
//            throw new CoolException("不允许混料===>>" + param.getBarcode());
src/main/java/com/zy/asrs/task/OrderToSortLineScheduler.java
@@ -138,7 +138,7 @@
        }
    }
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void orderToSortLine2() {
        //获取未下发单据
        List<String> orderNos = orderPakinService.AllStatusSatisfyOrder(1);
src/main/java/com/zy/common/service/CommonService.java
@@ -172,6 +172,11 @@
//            }
            int rowCount = params[0];
            int nearRow = params[3];
            int MIN_SPARE_SLOTS = 0;
            if (rowLastno.getTypeId() == 1){
                MIN_SPARE_SLOTS = 2;
            }
            // 只取数量判断,避免拉整 list
            int availableLocCount = locMastService.selectCount(new EntityWrapper<LocMast>()
@@ -180,7 +185,7 @@
                    .eq("whs_type", rowLastnoType.getType().longValue()));
            int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>()
                    .eq("crn_no", crnNo).le("io_type", 100));
            if (availableLocCount - crnCountO <= 2) { // 可以提成常量,比如 MIN_SPARE_SLOTS = 2
            if (availableLocCount - crnCountO <= MIN_SPARE_SLOTS) { // 可以提成常量,比如 MIN_SPARE_SLOTS = 2
                log.error("{}号堆垛机没有空库位!!! 尺寸规格: {}, 轮询次数:{}", crnNo, JSON.toJSONString(locTypeDto), attempt);
                attempt++;
                continue;
@@ -242,15 +247,21 @@
        //此程序用于优化堆垛机异常时的运行时间
        Optional<CrnRowInfo> infoOpt = findAvailableCrnAndNearRow(rowLastno, curRow, crnNumber, times, findLocNoAttributeVo, locTypeDto, rowLastnoType);
        if (!infoOpt.isPresent()) {
            throw new CoolException("无可用堆垛机");
        if (infoOpt.isPresent()) {
//            throw new CoolException("无可用堆垛机");
            CrnRowInfo info = infoOpt.get();
            crnNo = info.getCrnNo();
            nearRow = info.getNearRow();
            curRow = info.getCurRow();
            rowCount = info.getRowCount();
            times = info.getTimes();
        }
        CrnRowInfo info = infoOpt.get();
        crnNo = info.getCrnNo();
        nearRow = info.getNearRow();
        curRow = info.getCurRow();
        rowCount = info.getRowCount();
        times = info.getTimes();
//        CrnRowInfo info = infoOpt.get();
//        crnNo = info.getCrnNo();
//        nearRow = info.getNearRow();
//        curRow = info.getCurRow();
//        rowCount = info.getRowCount();
//        times = info.getTimes();
        boolean signRule1 = false;
@@ -440,19 +451,26 @@
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", nearRow)
                    .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
                    .orderBy("lev1", true).orderBy("bay1", false));
                    .orderBy("lev1", true).orderBy("bay1", true));
            for (LocMast locMast1 : locMasts) {
                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                    continue;
                }
                if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                            .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
                    if (!Cools.isEmpty(locMast2)) {
                        locMast = locMast2;
                    if (locMast1.getCrnNo() == 2) {
                        String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
                        if (!Cools.isEmpty(locMast2)) {
                            locMast = locMast2;
                            break;
                        }
                    } else if (locMast1.getCrnNo() == 1) {
                        locMast = locMast1;
                        break;
                    }
                } else {
                    if (!Cools.isEmpty(locMast1)) {
                        locMast = locMast1;
@@ -505,9 +523,10 @@
        // 递归查询
        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
            // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归
            if (times < rowCount * 2) {
            if (times <= rowCount * 2) {
                times = times + 1;
                return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
//                return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
                return getLocNoRun(5, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
            }
//            // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位
//            if (locTypeDto.getLocType1() < 2) {
src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8081
  port: 8080
  servlet:
    context-path: /@pom.build.finalName@
@@ -32,17 +32,17 @@
logging:
  file:
    path: /stock/out/@pom.build.finalName@/logs
    path: ./stock/out/@pom.build.finalName@/logs
super:
  pwd: asrs2023
  pwd: xltys1995
swagger:
  enable: false
#License相关配置
license:
  subject: jshdasrs
  subject:  hnfnasrs
  publicAlias: publicCert
  storePass: public_zhongyang_123456789
  licensePath: license.lic
@@ -58,13 +58,13 @@
  # 双深
  doubleDeep: true
  # 双深库位排号
  doubleLocs: 1,4,5,8,9,12,13,16,17,20
  doubleLocs: 3,6
  # 一个堆垛机负责的货架排数
  groupCount: 4
  # 左深库位排号
  doubleLocsLeft: 1,5,9,13,17
  doubleLocsLeft: 3
  # 右深库位排号
  doubleLocsRight: 4,8,12,16,20
  doubleLocsRight: 6
# wms参数配置
wms-parameter:
  # 自动补空板功能开关
@@ -98,13 +98,13 @@
  #  开关
  switch:
    #计时器上报开关
    ErpReportOld: true
    ErpReportOld: false
    #获取单据开关
    InboundOrderSwitch: true
    InboundOrderSwitch: false
    #登录接口开关
    LoginAuthenticationSwitch: true
    LoginAuthenticationSwitch: false
    #上报、审核单据开关
    ReviewOrderSwitch: true
    ReviewOrderSwitch: false
  #  地址
  address:
    URL: https://shyucheng.test.kdgalaxy.com
src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@
var baseUrl = "/jshdasrs";
var baseUrl = "/wms";
// 详情窗口-高度
var detailHeight = '80%';