自动化立体仓库 - WMS系统
skyouc
6 天以前 f6e687c194354f1c0b883b5ac56da3a8e70db471
出库工作档功能优化
18个文件已修改
631 ■■■■ 已修改文件
src/main/java/com/zy/api/controller/params/WorkTaskParams.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/WorkController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocAroundBind.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Mat.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/MatExcelListener.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locAroundBind/locAroundBind.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/order.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkMast/wrkMast.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locAroundBind/locAroundBind.html 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/mat/mat.html 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/params/WorkTaskParams.java
@@ -36,4 +36,7 @@
    @ApiModelProperty("作业类型,in: 入库, out:出库")
    private String type;
    @ApiModelProperty("是否余料")
    private Integer isSuplus;
}
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -11,10 +11,7 @@
import com.zy.asrs.entity.BasDevice;
import com.zy.asrs.entity.LocAroundBind;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasDeviceService;
import com.zy.asrs.service.LocAroundBindService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.*;
import com.zy.common.constant.MesConstant;
import com.zy.common.utils.HttpHandler;
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +35,8 @@
    private LocMastService locMastService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WorkService workService;
    /**
     * 通知WCS锁定库位,及禁止当前库位的一切操作
@@ -76,26 +75,28 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R backLocs(WorkTaskParams params) {
        if (Objects.isNull(params.getTaskNo())) {
        if (Objects.isNull(params.getWrkNo())) {
            throw new CoolException("工作号不能为空!!");
        }
        String wrkCode = params.getTaskNo();
       if (wrkCode.contains("-1")) {
           throw new CoolException("配对任务编码错误,请检查后重新上传!!");
       }
        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_code", params.getTaskNo()));
//        String wrkCode = params.getTaskNo();
//       if (wrkCode.contains("-1")) {
//           throw new CoolException("配对任务编码错误,请检查后重新上传!!");
//       }
        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getWrkNo()));
       if (Objects.isNull(mast)) {
           throw new CoolException("任务不存在!!");
       }
       if (!mast.getWrkSts().equals(103L)) {
           throw new CoolException("当前任务并非余料出库任务!!");
       }
        mast.setWrkSts(53L);
       if (!wrkMastService.updateById(mast)) {
           throw new CoolException("任务状态更新失败!!");
       }
//       if (!mast.getWrkSts().equals(103L)) {
//           throw new CoolException("当前任务并非余料出库任务!!");
//       }
//       if (params.getIsSuplus() == 1) {
//           mast.setIsSuplus(1);
//       }
//
//       if (!wrkMastService.updateById(mast)) {
//           throw new CoolException("任务状态更新失败!!");
//       }
        workService.backLocOperation(mast.getWrkNo() + "", mast.getAppeUser());
       return R.ok("接收成功,执行回库中...");
    }
src/main/java/com/zy/asrs/controller/MatController.java
@@ -10,13 +10,13 @@
import com.core.annotations.ManagerAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.MatPrint;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.BatchMatsUpdateParam;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.result.KeyValueVo;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.utils.MatExcelListener;
import com.zy.common.CodeRes;
import com.zy.common.config.AdminInterceptor;
@@ -43,6 +43,11 @@
    private MatService matService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @RequestMapping(value = "/mat/auto/matnr/auth")
    public R autoMatnr() {
@@ -164,6 +169,14 @@
            return R.error();
        }
        for (Mat entity : list) {
            List<WrkDetl> matnr = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("matnr", entity.getMatnr()));
            if (Cools.isEmpty(matnr)) {
                throw new CoolException("删除失败,当前物料还有执行中的任务档明细,请联系管理员!!");
            }
            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", entity.getMatnr()));
            if (Cools.isEmpty(locDetls)) {
                throw new CoolException("删除失败,当前物料还有库存明细存在立库中,请联系管理员!!");
            }
            if (!matService.delete(new EntityWrapper<>(entity))) {
                throw new CoolException("删除失败,请联系管理员");
            }
src/main/java/com/zy/asrs/controller/WorkController.java
@@ -167,7 +167,11 @@
            workService.pickWrkMast(workNo, getUserId());
            return R.ok("工作档已拣料");
        } else if (type == 4) {
            workService.backLocOperation(workNo, getUserId());
            workService.updateWrkIsSuplus(workNo, getUserId(), type);
//            workService.backLocOperation(workNo, getUserId());
        } else if (type == 5) {
            workService.updateWrkIsSuplus(workNo, getUserId(), type);
        }
        return R.ok();
    }
src/main/java/com/zy/asrs/entity/LocAroundBind.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
import com.core.common.SpringUtils;
import com.zy.asrs.service.BasLocStsService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
@@ -51,6 +53,10 @@
    @TableField("is_default")
    private Integer isDefault;
    @ApiModelProperty("工位状态")
    @TableField("loc_type")
    private String locType;
    public LocAroundBind() {}
    public LocAroundBind(Long devId,String devNo,Long bLocId,String bLocNo) {
@@ -62,12 +68,25 @@
    public String getDef$() {
        if (this.isDefault == 0) {
            return "否";
            return "备用";
        } else {
            return "是";
            return "默认";
        }
    }
    public String getLocType$() {
        if (this.locType == null) {
            return null;
        }
        BasLocStsService service = SpringUtils.getBean(BasLocStsService.class);
        BasLocSts basLocSts = service.selectById(this.locType);
        if (!Cools.isEmpty(basLocSts)){
            return String.valueOf(basLocSts.getLocDesc());
        }
        return null;
    }
//    LocAroundBind locAroundBind = new LocAroundBind(
//            null,    // 机台ID[非空]
//            null,    // 机台号[非空]
src/main/java/com/zy/asrs/entity/Mat.java
@@ -177,7 +177,7 @@
     * 安全库存量
     */
    @ApiModelProperty(value= "安全库存量")
    @ExcelProperty(value = "安全库存量")
    @ExcelProperty(value = "归零阀值")
    @TableField("safe_qty")
    private Double safeQty;
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.enums.FieldStrategy;
import com.zy.asrs.service.*;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
@@ -34,7 +35,7 @@
    private String taskType;
    @ApiModelProperty("任务编码")
    @TableField("wrk_code")
    @TableField(value = "wrk_code", strategy = FieldStrategy.IGNORED)
    private String wrkCode;
    @ApiModelProperty(value= "")
@@ -307,6 +308,10 @@
    @TableField("ctn_no")
    private String ctnNo;
    @ApiModelProperty("是否余料")
    @TableField("is_suplus")
    private Integer isSuplus;
    /**
     * 满板
     */
@@ -389,6 +394,15 @@
        }
    }
    public String getIsSuplus$(){
        if (Cools.isEmpty(this.isSuplus)){return  null;}
        if (isSuplus == 0) {
            return "空板回库";
        } else {
            return "余料回库";
        }
    }
    public String getStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
src/main/java/com/zy/asrs/service/WorkService.java
@@ -111,4 +111,14 @@
    void turnMatLocDetl(EmptyPlateOutParam param, Long userId);
    /**
     * 修改任务档空余回库
     *
     * @param workNo
     * @param userId
     * @param type
     * @author Ryan
     * @date 2026/1/14 15:06
     */
    void updateWrkIsSuplus(String workNo, Long userId, Integer type);
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -15,6 +15,7 @@
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.asrs.utils.Utils;
@@ -24,9 +25,7 @@
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.web.WcsController;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -102,6 +101,8 @@
    private OrderPakoutService orderPakOutService;
    @Autowired
    private BasDeviceServiceImpl basDeviceService;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Override
    @Transactional
@@ -420,7 +421,7 @@
        String wrkCode = null;
        if (!Objects.isNull(deviceNo)) {
            wrkCode = workNo + "-1";
            ioType = 101;
//            ioType = 101;
            generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, deviceNo);
        } else {
            generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, null);
@@ -533,21 +534,22 @@
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBrand(orderDetl.getBrand());
            wrkDetl.setModel(orderDetl.getModel());
            wrkDetl.setUnit(orderDetl.getUnit());
            wrkDetl.setStandby1(locDto.getStandby1());
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
//            LocDetl locDel = locDetlService.selectOne(new EntityWrapper<LocDetl>()
//                    .eq("loc_no", locDto.getLocNo())
//                    .eq("batch", locDto.getBatch())
//                    .eq(!Objects.isNull(locDto.getBarcode()), "barcode", locDto.getBarcode())
//                    .eq("matnr", locDto.getMatnr()));
//            if (Objects.isNull(locDel)) {
//                throw new CoolException("数据错误,库存明细不存在!!");
//            }
            wrkDetl.setStandby1(locDto.getStandby1());
            LocDetl locDel = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                    .eq("loc_no", locDto.getLocNo())
                    .eq("batch", locDto.getBatch())
                    .eq(!Objects.isNull(locDto.getBarcode()), "barcode", locDto.getBarcode())
                    .eq("matnr", locDto.getMatnr()));
            if (Objects.isNull(locDel)) {
                throw new CoolException("数据错误,库存明细不存在!!");
            }
            wrkDetl.setBrand(locDel.getBrand());
            wrkDetl.setModel(locDel.getModel());
            wrkDetl.setUnit(locDel.getUnit());
            wrkDetl.setSpecs(locDel.getSpecs());
            wrkDetl.setBatch(locDel.getBatch());
//            wrkDetl.setAnfme(locDel.getAnfme());
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
@@ -1158,11 +1160,11 @@
                locMast.setLocSts("F");
            }
        }
        locMast.setModiUser(userId);
        locMast.setModiTime(now);
        if (!locMastService.updateById(locMast)) {
            throw new CoolException("更新库位状态失败");
        }
//        locMast.setModiUser(userId);
//        locMast.setModiTime(now);
//        if (!locMastService.updateById(locMast)) {
//            throw new CoolException("更新库位状态失败");
//        }
    }
@@ -1192,6 +1194,16 @@
                locMast.setModiTime(now);
                locMast.setModiUser(userId);
                locMastService.updateById(locMast);
            }
            if (!Objects.isNull(wrkMast.getWrkCode())) {
                LocAroundBind aroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getSourceLocNo()));
                if (!Objects.isNull(aroundBind)) {
                    aroundBind.setLocType(LocStsType.LOC_STS_TYPE_O.type);
                    if (!locAroundBindService.updateById(aroundBind)) {
                        throw new CoolException("工位状态修改失败!!");
                    }
                }
            }
            // 出库取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
@@ -1399,13 +1411,21 @@
        Integer ioType = wrkMast.getIoType() - 50;
        Integer wokNo;
        // 入出库类型判断
        if (wrkMast.getIoType() == 103) {
            ioType = 1;
        } else if (wrkMast.getIoType() == 101) {
//        if (wrkMast.getIoType() == 103) {
//            ioType = 1;
//        } else if (wrkMast.getIoType() == 101) {
//            ioType = 10;
//        }
        if (Objects.isNull(wrkMast.getIsSuplus())) {
            throw new CoolException("回库类型不能为空!!");
        }
        if (wrkMast.getIsSuplus() == 0) {
            ioType = 10;
        } else {
            ioType = 1;
        }
        wokNo = commonService.getWorkNo(0);
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", ioType)
@@ -1415,6 +1435,23 @@
        if (Cools.isEmpty(staDesc)) {
            throw new CoolException("入库路径不存在");
        }
        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", wrkMast.getBarcode()));
        if (count >= 2) {
            throw new CoolException("任务档已生成,不可以重复生成相同的子任务!!");
        }
        WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        LocDetl locDetl = new LocDetl();
        BeanUtils.copyProperties(detl, locDetl);
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.parseInt(wrkMast.getStaNo()), false);
        sourceStaNo.setLocType1((short) 1);
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto locNo = commonService.getLocNo(1, Integer.parseInt(wrkMast.getStaNo()), findLocNoAttributeVo, locTypeDto);
        Date now = new Date();
        // 堆垛机站点(目标站)
        Integer staNo = staDesc.getCrnStn();
@@ -1426,11 +1463,8 @@
        mast.setWrkSts(2L); // 工作状态: 2.设备上走
        mast.setSourceStaNo(wrkMast.getStaNo()); // 源站
        mast.setStaNo(staNo + ""); // 目标站
        //判断是否为领料出库
        if (Objects.isNull(mast.getWrkCode())) {
            mast.setLocNo(mast.getSourceLocNo()); // 目标库位 = 出库时的源库位
        }
//        mast.setSourceLocNo(""); // 源库位清空
        mast.setSourceLocNo(wrkMast.getLocNo());
        mast.setLocNo(locNo.getLocNo()); // 目标库位 = 出库时的源库位
        mast.setModiTime(now);
        mast.setModiUser(userId);
        if (!wrkMastService.insert(mast)) {
@@ -1440,29 +1474,49 @@
        if (Cools.isEmpty(wrkDetls)) {
            throw new CoolException("数据错误,任务档明细不存在 !!");
        }
        wrkDetls.forEach(wrkDetl -> {
            WrkDetl wrkDetl1 = new WrkDetl();
            BeanUtils.copyProperties(wrkDetl, wrkDetl1);
            wrkDetl1.setWrkNo(wokNo);
            if (!wrkDetlService.insert(wrkDetl1)) {
                throw new CoolException("任务档明细保存失败!!");
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast inLoc = locMastService.selectById(mast.getLocNo());
        inLoc.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
        inLoc.setModiTime(now);
        inLoc.setModiUser(userId);
        if (!locMastService.updateById(inLoc)) {
            throw new CoolException("修改库位状态失败");
        }
        LocAroundBind aroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", mast.getSourceLocNo()));
        if (!Objects.isNull(aroundBind)) {
            aroundBind.setLocType(LocStsType.LOC_STS_TYPE_R.type);
            if (!locAroundBindService.updateById(aroundBind)) {
                throw new CoolException("工位状态修改失败!!");
            }
        });
        }
        //工作类型为1时,才添加明细
        if (ioType == 1) {
            wrkDetls.forEach(wrkDetl -> {
                WrkDetl wrkDetl1 = new WrkDetl();
                BeanUtils.copyProperties(wrkDetl, wrkDetl1);
                wrkDetl1.setWrkNo(wokNo);
                if (!wrkDetlService.insert(wrkDetl1)) {
                    throw new CoolException("任务档明细保存失败!!");
                }
            });
        }
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        locMast.setLocSts("Q");
        locMast.setLocSts("R");
        locMast.setModiTime(now);
        locMast.setModiUser(userId);
        if (!locMastService.updateById(locMast)) {
            throw new CoolException("修改库位状态失败");
        }
        wrkMast.setWrkCode(null);
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("任务档更新失败!!");
        }
//        wrkMast.setWrkCode(null);
//
//        if (!wrkMastService.updateById(wrkMast)) {
//            throw new CoolException("任务档更新失败!!");
//        }
    }
@@ -1598,6 +1652,36 @@
        }
    }
    /**
     * 修改任务档余料回库状态
     *
     * @param workNo
     * @param userId
     * @param type
     * @author Ryan
     * @date 2026/1/14 15:06
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateWrkIsSuplus(String workNo, Long userId, Integer type) {
        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
        if (Objects.isNull(mast)) {
            throw new CoolException("任务档不存在!!");
        }
        if (mast.getWrkSts() != 15) {
            throw new CoolException("当前任务状态,无法执行此操作!");
        }
        if (type == 4) {
            mast.setIsSuplus(0);
        } else if (type == 5) {
            mast.setIsSuplus(1);
        }
        if (!wrkMastService.updateById(mast)) {
            throw new CoolException("任务档修改失败!!");
        }
    }
    /**
     * 生成出库匹配的工作站入库任务
     *
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -56,6 +56,8 @@
    private TaskDetlService taskDetlService;
    @Autowired
    private BasStationServiceImpl basStationService;
    @Autowired
    private WorkService workService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -387,41 +389,42 @@
                    break;
                // 库位移转
                case 11:
                    // 默认目标库位是空板
                    String locSts = "D";
                    // 库位移转判断是否为空板移转
                    if (wrkMast.getEmptyMk().equals("N")) {
                        locSts = "F";
                        // 转移库存明细数据: 库存号 由工作档源库位变为目标库位
                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
//                            exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                        }
                    }
                    // 修改源库位状态 ==> O
                    LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                    if (null != sourceLoc) {
                        sourceLoc.setBarcode("");
                        sourceLoc.setLocSts("O");
                        sourceLoc.setModiTime(now);
                        sourceLoc.setIoTime(now);
                        if (!locMastService.updateById(sourceLoc)) {
//                            exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                        }
                    }
                    // 修改目标库位状态 ==> .locSts
                    locMast.setLocSts(locSts);
                    locMast.setBarcode(wrkMast.getBarcode());
                    locMast.setIoTime(now);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
//                        exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                    }
//                    // 默认目标库位是空板
//                    String locSts = "D";
//                    // 库位移转判断是否为空板移转
//                    if (wrkMast.getEmptyMk().equals("N")) {
//                        locSts = "F";
//                        // 转移库存明细数据: 库存号 由工作档源库位变为目标库位
//                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
////                            exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                            return FAIL.setMsg("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
//                        }
//                    }
//                    // 修改源库位状态 ==> O
//                    LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
//                    if (null != sourceLoc) {
//                        sourceLoc.setBarcode("");
//                        sourceLoc.setLocSts("O");
//                        sourceLoc.setModiTime(now);
//                        sourceLoc.setIoTime(now);
//                        if (!locMastService.updateById(sourceLoc)) {
////                            exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                            return FAIL.setMsg("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
//                        }
//                    }
//                    // 修改目标库位状态 ==> .locSts
//                    locMast.setLocSts(locSts);
//                    locMast.setBarcode(wrkMast.getBarcode());
//                    locMast.setIoTime(now);
//                    locMast.setModiTime(now);
//                    if (!locMastService.updateById(locMast)) {
////                        exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
//                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                        return FAIL.setMsg("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
//                    }
                    movLoc(wrkMast);
                    break;
                default:
                    break;
@@ -444,6 +447,48 @@
        return SUCCESS;
    }
    public void movLoc(WrkMast wrkMast) {
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        Date now = new Date();
        // 默认目标库位是空板
        String locSts = "D";
        // 库位移转判断是否为空板移转
        if (wrkMast.getEmptyMk().equals("N")) {
            locSts = "F";
            // 转移库存明细数据: 库存号 由工作档源库位变为目标库位
            if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
//                            exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                log.info("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            }
        }
        // 修改源库位状态 ==> O
        LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
        if (null != sourceLoc) {
            sourceLoc.setBarcode("");
            sourceLoc.setLocSts("O");
            sourceLoc.setModiTime(now);
            sourceLoc.setIoTime(now);
            if (!locMastService.updateById(sourceLoc)) {
//                            exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                log.info("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            }
        }
        // 修改目标库位状态 ==> .locSts
        locMast.setLocSts(locSts);
        locMast.setBarcode(wrkMast.getBarcode());
        locMast.setIoTime(now);
        locMast.setModiTime(now);
        if (!locMastService.updateById(locMast)) {
//                        exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
           log.info("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
        }
    }
    private ReturnT<String> doOut(WrkMast wrkMast) {
        Date now = new Date();
        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
@@ -457,52 +502,60 @@
            switch (wrkMast.getIoType()) {
                // 全板出库
                case 101:
                    //如果wrkCode不为空,表示是工作台叫货,如果不为空走移库逻辑
                    //todo 判断如果库位所属不是同一个堆垛机号,需再生成一个新的入库任务
                    if (!Objects.isNull(wrkMast.getWrkCode())) {
                        //TODO 移库
//                        workService.locMove(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), wrkMast.getAppeUser());
                        movLoc(wrkMast);
                    } else {
//                    // 出库确认信号位
//                    if (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) {
//                        return SUCCESS;
//                    }
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    if (wrkDetls101.isEmpty()) {
                        // 根据工作号,查询工作明细档
                        List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                        if (wrkDetls101.isEmpty()) {
//                        exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                    }
                    for (WrkDetl wrkDetl : wrkDetls101) {
                        // 更新订单完成数量
                        OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        if (orderDetlPakout == null) {
                            orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                    wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        }
                        try {
                            if (!Cools.isEmpty(orderDetlPakout)) {
                                if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore) {
                        }
                    }
                    // 删除工作档源库位的库存明细
                    if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("全板出库 ===>> 删除库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                    }
                    // 修改源库位状态 R ===>> O
                    if (locMast.getLocSts().equals("R")) {
                        locMast.setLocSts("O");
                        locMast.setBarcode("");
                        locMast.setModiTime(now);
                        locMast.setIoTime(now);
                        if (!locMastService.updateById(locMast)) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                            return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                        }
                        for (WrkDetl wrkDetl : wrkDetls101) {
                            // 更新订单完成数量
                            OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                    wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                            if (orderDetlPakout == null) {
                                orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                            }
                            try {
                                if (!Cools.isEmpty(orderDetlPakout)) {
                                    if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                            orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
                                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                        return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                    }
                                }
                            } catch (Exception ignore) {
                            }
                        }
                        // 删除工作档源库位的库存明细
                        if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("全板出库 ===>> 删除库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                        }
                        // 修改源库位状态 R ===>> O
                        if (locMast.getLocSts().equals("R")) {
                            locMast.setLocSts("O");
                            locMast.setBarcode("");
                            locMast.setModiTime(now);
                            locMast.setIoTime(now);
                            if (!locMastService.updateById(locMast)) {
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                            }
                        }
                    }
                    break;
src/main/java/com/zy/asrs/utils/MatExcelListener.java
@@ -14,10 +14,7 @@
import com.zy.common.utils.NodeUtils;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * Created by vincent on 2019-11-25
@@ -132,6 +129,12 @@
            mat = excel;
            mat.setTagId(tagId);
            mat.setLocType(tagId);
            if (Objects.isNull(mat.getVolume())) {
                throw new CoolException("每公斤长度不能为空!!");
            }
            if (Objects.isNull(mat.getSafeQty())) {
                throw new CoolException("归零阀值不能为空!!");
            }
            if (!matService.insert(mat)) {
                throw new CoolException("保存商品信息失败,商品编码:" + excel.getMatnr());
            }
src/main/resources/application-dev.yml
@@ -13,6 +13,7 @@
    username: sa
    password: sa@123
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=jxhcwms
#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jxhcwms
  mvc:
    static-path-pattern: /**
  redis:
@@ -30,7 +31,7 @@
  #  global-config:
  #    field-strategy: 0
  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: true
    call-setters-on-nulls: true
src/main/resources/mapper/LocDetlMapper.xml
@@ -128,14 +128,14 @@
<!--                and (a.batch IS NULL OR a.batch = '')-->
<!--            </otherwise>-->
        </choose>
        <choose>
            <when test="brand != null and brand != ''">
                and a.brand = #{brand}
            </when>
<!--            <otherwise>-->
<!--                and (a.brand IS NULL OR a.brand = '')-->
<!--            </otherwise>-->
        </choose>
<!--        <choose>-->
<!--            <when test="brand != null and brand != ''">-->
<!--                and a.brand = #{brand}-->
<!--            </when>-->
<!--&lt;!&ndash;            <otherwise>&ndash;&gt;-->
<!--&lt;!&ndash;                and (a.brand IS NULL OR a.brand = '')&ndash;&gt;-->
<!--&lt;!&ndash;            </otherwise>&ndash;&gt;-->
<!--        </choose>-->
<!--        <choose>-->
<!--            <when test="standby1 != null and standby1 != ''">-->
<!--                and a.standby1 = #{standby1}-->
src/main/webapp/static/js/locAroundBind/locAroundBind.js
@@ -22,12 +22,14 @@
        height: 'full-120',
        cols: [[
            { type: 'checkbox' }
            , { field: 'id', align: 'center', title: 'ID' }
            , { field: 'devId', align: 'center', title: '机台ID' }
            , { field: 'id', align: 'center', title: 'ID' , hide: true }
            , { field: 'devId', align: 'center', title: '机台ID', hide: true }
            , { field: 'devNo', align: 'center', title: '机台号' }
            , { field: 'devName', align: 'center', title: '设备名称' }
            , { field: 'blocId', align: 'center', title: '库位ID', hide: true }
            , { field: 'blocNo', align: 'center', title: '库位码' }
            , { field: 'def$', align: 'center', title: '是否默认' }
            , { field: 'blocNo', align: 'center', title: '工位' }
            ,{field: 'locType$', align:'center', title: '工位状态'}
            , { field: 'def$', align: 'center', title: '工位类型' }
            , { fixed: 'right', title: '操作', align: 'center', toolbar: '#operate', width: 120 }
        ]],
        request: {
src/main/webapp/static/js/orderPakout/order.js
@@ -234,10 +234,12 @@
                        {field: 'maktx', title: '商品名称', width: 200},
                        {field: 'batch', title: '批号', edit: true},
                        {field: 'specs', title: '规格'},
                        {field: 'model', title: '型号'},
                        {field: 'brand', title: '品牌'},
                        {field: 'unit', title: '单位', width: 80},
                        {field: 'standby1', title: '机台', edit: true},
                        {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        {field: 'workQty', title: '作业数量',  minWidth: 100, width: 100},
                        // {field: 'unit', title: '单位', width: 80},
                        {field: 'memo', title: '备注' , edit: true},
                        {align: 'center', title: '操作', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
                    ]],
src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -26,7 +26,6 @@
            ,{field: 'wrkSts$', align: 'center',title: '工作状态', width: 120}
            ,{field: 'ioType$', align: 'center',title: '入出库类型', width: 140}
            ,{field: 'ioPri', align: 'center',title: '优先级', width: 95}
            // ,{field: 'taskType$', align: 'center',title: '任务类型', width: 95}
            ,{field: 'barcode', align: 'center',title: 'SN', width: 120}
            ,{field: 'crnNo$', align: 'center',title: '堆垛机', width: 95}
            ,{field: 'sourceStaNo$', align: 'center',title: '源站', width: 95}
@@ -35,6 +34,7 @@
            ,{field: 'locNo', align: 'center',title: '目标库位', width: 120}
            ,{field: 'preHave', align: 'center',title: '先入品', hide: true}
            ,{field: 'takeNone', align: 'center',title: '空操作', hide: true}
            ,{field: 'isSuplus$', align: 'center', title: '回库类型', hide: false, width: 120}
            ,{field: 'modiUser$', align: 'center',title: '修改人员', hide:true}
            ,{field: 'modiTime$', align: 'center',title: '修改时间', hide:true, width: 160}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:350}
@@ -293,7 +293,7 @@
                break;
            //空板回库
            case 'empty':
                layer.confirm('空板入库该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                layer.confirm('空板回库该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:4}, function (res) {
                        $(".layui-laypage-btn")[0].click();
                        layer.msg(data.wrkNo + res.msg);
@@ -303,8 +303,8 @@
                break;
            //  拣料入库
            case 'pick':
                layer.confirm('拣料入库该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:4}, function (res) {
                layer.confirm('拣料回库该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:5}, function (res) {
                        $(".layui-laypage-btn")[0].click();
                        layer.msg(data.wrkNo + res.msg);
                    })
src/main/webapp/views/locAroundBind/locAroundBind.html
@@ -71,12 +71,12 @@
                        <input class="layui-input" name="devNo" placeholder="请输入机台号" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
<!--                <div class="layui-form-item">-->
<!--                    <label class="layui-form-label layui-form-required">库位ID: </label>-->
<!--                    <div class="layui-input-block">-->
<!--                        <input class="layui-input" name="blocId" placeholder="请输入库位ID" lay-vertype="tips" lay-verify="required">-->
<!--                    </div>-->
<!--                </div>-->
                <div class="layui-form-item">
                    <label class="layui-form-label">设备名称: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="devName" placeholder="请输入设备名称" lay-vertype="tips">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">库位码: </label>
                    <div class="layui-input-block">
@@ -90,6 +90,23 @@
                            <option value="1" selected="">是</option>
                            <option value="0">否</option>
                        </select>
                    </div>
                </div>
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">工位状态</label>
                        <div class="layui-input-inline cool-auto-complete">
                            <input id="locType" name="locType" class="layui-input" type="text" style="display: none">
                            <input id="locType$" name="locType$"  class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text"
                                   placeholder="工位状态" onfocus=this.blur()>
                            <div class="cool-auto-complete-window">
                                <input class="cool-auto-complete-window-input" data-key="basLocStsQueryBylocSts"
                                       onkeyup="autoLoad2(this.getAttribute('data-key'))">
                                <select class="cool-auto-complete-window-select" data-key="basLocStsQueryBylocStsSelect"
                                        onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                                </select>
                            </div>
                        </div>
                    </div>
                </div>
             </div>
@@ -157,6 +174,35 @@
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-inline">
                <label class="layui-form-label">库位状态</label>
                <select name="frozen" class="layui-input" type="text" autocomplete="off">
                    <option value="O">O.空库</option>
                    <option value="F">F.在库</option>
                    <option value="S">S.预约入库</option>
                    <option value="R">S.预约出库</option>
                </select>
            </div>
<!--            <div class="layui-inline">-->
<!--                <label class="layui-form-label">库位状态</label>-->
<!--                <div class="layui-input-inline cool-auto-complete">-->
<!--                    <input id="locSts" name="loc_sts" class="layui-input" type="text" style="display: none">-->
<!--                    <input id="locSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text"-->
<!--                           placeholder="库位状态" onfocus=this.blur()>-->
<!--                    <div class="cool-auto-complete-window">-->
<!--                        <input class="cool-auto-complete-window-input" data-key="basLocStsQueryBylocSts"-->
<!--                               onkeyup="autoLoad2(this.getAttribute('data-key'))">-->
<!--                        <select class="cool-auto-complete-window-select" data-key="basLocStsQueryBylocStsSelect"-->
<!--                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
<!--                        </select>-->
<!--                    </div>-->
<!--                </div>-->
<!--            </div>-->
        </div>
        <!--  -->
        <div style="text-align: center; margin-top: 20px">
            <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
src/main/webapp/views/mat/mat.html
@@ -196,27 +196,27 @@
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">组托上限</label>
                    <label class="layui-form-label layui-form-required">单位</label>
                    <div class="layui-input-block">
                        <input name="upQty" placeholder="请输入最大组托数量" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                        <input name="unit" placeholder="请输入单位" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">配置</label>
                    <label class="layui-form-label">规格</label>
                    <div class="layui-input-block">
                        <input name="specs" placeholder="请输入配置" class="layui-input">
                        <input name="specs" placeholder="请输入规格" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱净重</label>
                    <label class="layui-form-label">品牌</label>
                    <div class="layui-input-block">
                        <input name="weight" placeholder="请输入单箱净重格" class="layui-input">
                        <input name="brand" placeholder="请输入单箱净重格" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱体积</label>
                    <label class="layui-form-label">型号</label>
                    <div class="layui-input-block">
                        <input name="volume" placeholder="请输入单箱体积" class="layui-input">
                        <input name="model" placeholder="请输入型号" class="layui-input">
                    </div>
                </div>
            </div>
@@ -251,12 +251,12 @@
                        <input name="memo" placeholder="请输入备注" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱毛重</label>
                    <div class="layui-input-block">
                        <input name="manLength" placeholder="请输入单箱毛重" class="layui-input">
                    </div>
                </div>
<!--                <div class="layui-form-item">-->
<!--                    <label class="layui-form-label">单箱毛重</label>-->
<!--                    <div class="layui-input-block">-->
<!--                        <input name="manLength" placeholder="请输入单箱毛重" class="layui-input">-->
<!--                    </div>-->
<!--                </div>-->
<!--                <div class="layui-form-item">-->
<!--                    <label class="layui-form-label">单箱体积</label>-->
<!--                    <div class="layui-input-block">-->