自动化立体仓库 - WMS系统
#
lsh
2024-06-13 85ca24ecedb4a27118491cac2f6cb38dd80743de
#
15个文件已修改
450 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocMastController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasWhs.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocMast.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/RowLastnoType.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/LocMastInitParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasWhsMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasWhsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasWhsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 309 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasWhsMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locMast/locMast.js 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/stoMan/stoQue.js 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast.html 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast_detail.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/stoMan/stoQue.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -10,9 +10,11 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.entity.BasWhs;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.param.LocMastInitParam;
import com.zy.asrs.service.BasWhsService;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
@@ -32,6 +34,8 @@
    private LocMastService locMastService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private BasWhsService basWhsService;
    @RequestMapping(value = "/locMast/init/pwd")
    public R locMastInitPwd(@RequestParam(required = false) String pwd) {
@@ -177,6 +181,10 @@
//    @Transactional
    public R init(LocMastInitParam param) {
        List<LocMast> list = new ArrayList<>();
        BasWhs basWhs = basWhsService.selectByIdentifying(param.getIdentifying());
        if (Cools.isEmpty(basWhs)){
            return R.error("库型不存在!!!");
        }
        for (int r=param.getStartRow(); r<=param.getEndRow(); r++){
            for (int b=param.getStartBay(); b<=param.getEndBay(); b++) {
                for (int l=param.getStartLev(); l<=param.getEndLev(); l++) {
@@ -212,6 +220,7 @@
                    locMast.setAppeTime(now);
                    locMast.setModiUser(getUserId());
                    locMast.setModiTime(now);
                    locMast.setWhsType(basWhs.getId());
                    list.add(locMast);
                }
            }
src/main/java/com/zy/asrs/entity/BasWhs.java
@@ -61,6 +61,12 @@
    @TableField("appe_time")
    private Date appeTime;
    /**
     * 标识
     */
    @ApiModelProperty(value= "标识")
    private String identifying;
    public BasWhs() {}
    public BasWhs(String whsDesc,Long modiUser,Date modiTime,Long appeUser,Date appeTime) {
@@ -159,5 +165,11 @@
        this.appeTime = appeTime;
    }
    public String getIdentifying() {
        return identifying;
    }
    public void setIdentifying(String identifying) {
        this.identifying = identifying;
    }
}
src/main/java/com/zy/asrs/entity/LocMast.java
@@ -80,6 +80,12 @@
    private Integer lev1;
    /**
     * 组
     */
    @ApiModelProperty(value= "组")
    private Integer gro1;
    /**
     * 满板
     */
    @ApiModelProperty(value= "满板")
src/main/java/com/zy/asrs/entity/RowLastnoType.java
@@ -9,11 +9,6 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.core.common.SpringUtils;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
import java.text.SimpleDateFormat;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -77,9 +72,9 @@
    private Date appeTime;
    /**
     * 库型 0: 标准堆垛机库  1: 平库  2: 穿梭板  3: 四向车  4: AGV  5: 未知
     * 库型 1: 标准堆垛机库  2: 平库  3: 穿梭板  4: 四向车  5: AGV  0: 未知
     */
    @ApiModelProperty(value= "库型 0: 标准堆垛机库  1: 平库  2: 穿梭板  3: 四向车  4: AGV  5: 未知  ")
    @ApiModelProperty(value= "库型 1: 标准堆垛机库  2: 平库  3: 穿梭板  4: 四向车  5: AGV  0: 未知  ")
    private Integer type;
    public RowLastnoType() {}
src/main/java/com/zy/asrs/entity/param/LocMastInitParam.java
@@ -46,6 +46,8 @@
    private Integer endCrn;
    private String identifying;
    public Integer getStartRow() {
        if (null == startRow) {
            throw new CoolException(BaseRes.PARAM);
src/main/java/com/zy/asrs/mapper/BasWhsMapper.java
@@ -3,10 +3,13 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.BasWhs;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasWhsMapper extends BaseMapper<BasWhs> {
    BasWhs selectByIdentifying(@Param("identifying") String identifying);
}
src/main/java/com/zy/asrs/service/BasWhsService.java
@@ -4,5 +4,5 @@
import com.zy.asrs.entity.BasWhs;
public interface BasWhsService extends IService<BasWhs> {
    BasWhs selectByIdentifying(String Identifying);
}
src/main/java/com/zy/asrs/service/impl/BasWhsServiceImpl.java
@@ -1,5 +1,6 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.entity.BasWhs;
import com.zy.asrs.mapper.BasWhsMapper;
@@ -8,5 +9,8 @@
@Service("basWhsService")
public class BasWhsServiceImpl extends ServiceImpl<BasWhsMapper, BasWhs> implements BasWhsService {
    @Override
    public BasWhs selectByIdentifying(String identifying) {
        return this.baseMapper.selectByIdentifying(identifying);
    }
}
src/main/java/com/zy/common/service/CommonService.java
@@ -125,14 +125,11 @@
            RowLastno rowLastno = rowLastnoService.selectById(whsType);
            RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
            /**
             * 库型 0: 标准堆垛机库  1: 平库  2: 穿梭板  3: 四向车  4: AGV  5: 未知
             * 库型 1: 标准堆垛机库  2: 平库  3: 穿梭板  4: 四向车  5: AGV  0: 未知
             */
            switch (rowLastnoType.getType()){
                case 0:
                    return getLocNoRun(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0);
                case 1:
                    log.error("站点={} 未查询到对应的规则",sourceStaNo);
                    break;
                    return getLocNoRun(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0);
                case 2:
                    log.error("站点={} 未查询到对应的规则",sourceStaNo);
                    break;
@@ -140,8 +137,7 @@
                    log.error("站点={} 未查询到对应的规则",sourceStaNo);
                    break;
                case 4:
                    log.error("站点={} 未查询到对应的规则",sourceStaNo);
                    break;
                    return getLocNoRun2(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0);
                case 5:
                    log.error("站点={} 未查询到对应的规则",sourceStaNo);
                    break;
@@ -453,4 +449,303 @@
        startupDto.setLocNo(locNo);
        return startupDto;
    }
    /**
     * 检索库位号
     *
     * @param whsType     类型 1:双深式货架
     * @param staDescId   路径ID
     * @param sourceStaNo 源站
     * @param matnr       物料号集合
     * @return locNo 检索到的库位号
     */
    @Transactional
    public StartupDto getLocNoRun2(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
        if (Cools.isEmpty(matnr)) {  //物料号
            matnr = "";
        }
        if (Cools.isEmpty(batch)) {  //批次
            batch = "";
        }
        if (Cools.isEmpty(grade)) {  //备用
            grade = "";
        }
        // 初始化参数
        int crnNo = 0;      //堆垛机号
        int nearRow = 0;    //最浅库位排
        int curRow = 0;     //最深库位排
        int rowCount = 0;   //轮询轮次
        LocMast locMast = null;     // 目标库位
        StartupDto startupDto = new StartupDto();
        RowLastno rowLastno = rowLastnoService.selectById(whsType);
        int sRow = rowLastno.getsRow();
        int eRow = rowLastno.geteRow();
        int crnNumber = rowLastno.getCrnQty();
        if (Cools.isEmpty(rowLastno)) {
            throw new CoolException("数据异常,请联系管理员");
        }
        // ===============>>>> 开始执行
        curRow = rowLastno.getCurrentRow();
        if (!Cools.isEmpty(moveCrnNo) && moveCrnNo!=0){
            crnNumber = moveCrnNo;
            if (times==0){
                curRow = moveCrnNo*4-1;
            }else {
                curRow = moveCrnNo*4-2;
            }
        }
        //此程序用于优化堆垛机异常时的运行时间
        for (int i = times; i < crnNumber*2; i++) {
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(whsType, curRow, crnNumber);
            curRow = locNecessaryParameters[1];
            crnNo = locNecessaryParameters[2];
            if (basCrnpService.checkSiteError(crnNo, true)) {
                rowCount =  locNecessaryParameters[0];
                nearRow = locNecessaryParameters[3];
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type",100));
                if (locMasts.size()-crnCountO<=2){
                    times++;
                    continue;
                }
                break;
            } else {
                times++;
            }
        }
        if (nearRow == 0) {
            throw new CoolException("无可用堆垛机");
        }
        boolean signRule1 = false;
        boolean signRule2 = false;
        if (Utils.BooleanWhsTypeStaIoType(rowLastno)){
            // 靠近摆放规则 --- 同天同规格物料 //分离版
            if (!Cools.isEmpty(matnr) &&  staDescId == 1){
                signRule1 = true;
            }
            // 靠近摆放规则 --- 同天同规格物料 //互通版
            if (!Cools.isEmpty(matnr) && staDescId == 1) {
                signRule2 = true;
            }
            if (!Cools.isEmpty(matnr) &&  (staDescId == 11 || staDescId == 111)) {
                signRule1 = true;
            }
        }
        if (signRule1){
            if (nearRow!=curRow){
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
                for (LocMast locMast1:locMasts){
                    //获取巷道
                    List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow);
                    //获取目标库位所在巷道最浅非空库位
                    LocMast locMastF = locMastService.selectLocByLocStsPakInF(curRow,nearRow,groupOutsideLocCrn);
                    if (!Cools.isEmpty(locMastF) && locMastF.getLocSts().equals("F")){
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMastF.getLocNo()));
                        if (!Cools.isEmpty(locDetl) && matnr.equals(locDetl.getMatnr()) && batch.equals(Cools.isEmpty(locDetl.getBatch()) ? "" : locDetl.getBatch()) && grade.equals(Cools.isEmpty(locDetl.getBrand()) ? "" : locDetl.getBrand())) {
                            //获取目标库位所在巷道最浅非空库位
                            locMast = locMastService.selectLocByLocStsPakInO(curRow,nearRow,groupOutsideLocCrn);
                            break;
                        }
                    }
                }
            }
        }else if (signRule2){
            List<String> locNos = locDetlService.getSameDetlToday(matnr, sRow, eRow);
            for (String locNo : locNos) {
                if (Utils.isShallowLoc(slaveProperties, locNo)) {
                    continue;
                }
                String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
                // 检测目标库位是否为空库位
                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
                    if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
                            locMast = shallowLoc;
                            crnNo = locMast.getCrnNo();
                            break;
                        }
                    }
                }
            }
        }
//        // 靠近摆放规则 --- 空托  //分离版
//        if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) {
//            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
//            for (LocMast locMast1:locMasts){
//                if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
//                    continue;
//                }
//                String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo());
//                LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc));
//                if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("D")){
//                    locMast = locMast1;
//                    break;
//                }
//            }
//        }
        // 靠近摆放规则 --- 空托 //互通版
        if (staDescId == 10  && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow));
            if (!locMasts.isEmpty()) {
                for (LocMast loc : locMasts) {
                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
                        continue;
                    }
                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
                    // 检测目标库位是否为空库位
                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
                        if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
                                locMast = shallowLoc;
                                crnNo = locMast.getCrnNo();
                                break;
                            }
                        }
                    }
                }
            }
        }
        Wrapper<StaDesc> wrapper = null;
        StaDesc staDesc = null;
        BasDevp staNo = null;
        if (Utils.BooleanWhsTypeSta(rowLastno, staDescId)) {
            // 获取目标站
            wrapper = new EntityWrapper<StaDesc>()
                    .eq("type_no", staDescId)
                    .eq("stn_no", sourceStaNo)
                    .eq("crn_no", crnNo);
            staDesc = staDescService.selectOne(wrapper);
            if (Cools.isEmpty(staDesc)) {
                log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
//                throw new CoolException("入库路径不存在");
                crnNo = 0;
            }else {
                staNo = basDevpService.selectById(staDesc.getCrnStn());
                if (!staNo.getAutoing().equals("Y")) {
                    log.error("目标站"+staDesc.getCrnStn()+"不可用");
//                throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
                    crnNo = 0;
                }
                startupDto.setStaNo(staNo.getDevNo());
            }
            // 更新库位排号
            if (Cools.isEmpty(locMast)){
                rowLastno.setCurrentRow(curRow);
                rowLastnoService.updateById(rowLastno);
            }
        }
        // 开始查找库位 ==============================>>
        // 1.按规则查找库位
        if (Cools.isEmpty(locMast) && crnNo != 0) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", nearRow)
                    .eq("loc_sts", "O")
                    .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"));
                    if (!Cools.isEmpty(locMast2)) {
                        locMast = locMast2;
                        break;
                    }
                } else {
                    if (!Cools.isEmpty(locMast1)) {
                        locMast = locMast1;
                        break;
                    }
                }
            }
            if (Cools.isEmpty(locMast) && Utils.BooleanWhsTypeStaIoType(rowLastno)){
                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"));
                        if (!Cools.isEmpty(locMast2)) {
                            locMast = locMast2;
                            break;
                        } else {
                            locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                    .eq("loc_no", shallowLoc).eq("loc_sts", "F"));
                            if (!Cools.isEmpty(locMast2)) {
                                locMast = locMast2;
                                break;
                            } else {
                                locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                        .eq("loc_no", shallowLoc).eq("loc_sts", "D"));
                                if (!Cools.isEmpty(locMast2)) {
                                    locMast = locMast2;
                                    break;
                                }
                            }
                        }
                    } else {
                        if (!Cools.isEmpty(locMast1)) {
                            locMast = locMast1;
                            break;
                        }
                    }
                }
            }
        }
        if (!Cools.isEmpty(locMast) && !basCrnpService.checkSiteError(crnNo, true)) {
            locMast = null;
        }
        // 递归查询
        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
            // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归
            if (times < rowCount*2) {
                times = times + 1;
                return getLocNoRun(whsType, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times);
            }
//            // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位
//            if (locTypeDto.getLocType1() < 2) {
//                int i = locTypeDto.getLocType1() + 1;
//                locTypeDto.setLocType1((short)i);
//                return getLocNo(1, staDescId, sourceStaNo, matnr,batch,grade, locTypeDto, 0);
//            }
            log.error("系统没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times);
            throw new CoolException("没有空库位");
        }
        String locNo = locMast.getLocNo();
        // 生成工作号
        int workNo = getWorkNo(0);
        // 返回dto
        startupDto.setWorkNo(workNo);
        startupDto.setCrnNo(crnNo);
        startupDto.setSourceStaNo(sourceStaNo);
        startupDto.setLocNo(locNo);
        return startupDto;
    }
}
src/main/resources/mapper/BasWhsMapper.xml
@@ -10,7 +10,15 @@
        <result column="modi_time" property="modiTime" />
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="identifying" property="identifying" />
    </resultMap>
    <select id="selectByIdentifying" resultMap="BaseResultMap">
        select top 1 *
        from asr_bas_whs
        where 1=1
        and identifying = #{identifying}
    </select>
</mapper>
src/main/webapp/static/js/locMast/locMast.js
@@ -21,30 +21,30 @@
        cols: [[
            {type: 'checkbox', fixed: 'left'}
//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
            ,{field: 'locNo', align: 'center',title: '库位号',sort:true}
            ,{field: 'locSts$', align: 'center',title: '库位状态',width:200}
            // ,{field: 'whsType$', align: 'center',title: '库位类型'}
            ,{field: 'locNo', align: 'center',title: '库位号',sort:true, hide:false}
            ,{field: 'locSts$', align: 'center',title: '库位状态',width:200, hide:false}
            ,{field: 'whsType$', align: 'center',title: '库位类型',width:200, hide:false}
            // ,{field: 'pltType', align: 'center',title: ''}
            // ,{field: 'ctnType', align: 'center',title: ''}
            // ,{field: 'locSts', align: 'center',title: ''}
            // ,{field: 'sheetNo', align: 'center',title: ''}
            ,{field: 'crnNo', align: 'center',title: '堆垛机号'}
            ,{field: 'row1', align: 'center',title: '排', sort:true}
            ,{field: 'bay1', align: 'center',title: '列', sort:true}
            ,{field: 'lev1', align: 'center',title: '层', sort:true}
            ,{field: 'crnNo', align: 'center',title: '堆垛机号', hide:false}
            ,{field: 'row1', align: 'center',title: '排', sort:true, hide:false}
            ,{field: 'bay1', align: 'center',title: '列', sort:true, hide:false}
            ,{field: 'lev1', align: 'center',title: '层', sort:true, hide:false}
            ,{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 ";}
                    html += ">";
                    return html;
                },width:80}
                },width:80, hide:false}
            // ,{field: 'outEnable', align: 'center',title: ''}
            // ,{field: 'ioTime$', align: 'center',title: ''}
            // ,{field: 'firstTime$', align: 'center',title: ''}
            ,{field: 'ioTime$', align: 'center',title: 'ioTime', hide:true}
            // ,{field: 'firstTime$', align: 'center',title: '', hide:true}
            ,{field: 'modiUser$', align: 'center',title: '修改人员', hide:true}
            ,{field: 'modiTime$', align: 'center',title: '修改时间', hide:true}
            // ,{field: 'appeUser$', align: 'center',title: '创建者',event: 'appeUser', style: 'text-decoration: underline;cursor:pointer'}
            // ,{field: 'appeTime$', align: 'center',title: '添加时间'}
            ,{field: 'appeUser$', align: 'center',title: '创建者',event: 'appeUser', style: 'text-decoration: underline;cursor:pointer', hide:true}
            ,{field: 'appeTime$', align: 'center',title: '添加时间', hide:true}
            // ,{field: 'errorTime$', align: 'center',title: ''}
            // ,{field: 'errorMemo', align: 'center',title: ''}
            // ,{field: 'ctnKind', align: 'center',title: ''}
@@ -54,9 +54,9 @@
            // ,{field: 'barcode', align: 'center',title: ''}
            // ,{field: 'PdcType', align: 'center',title: ''}
            // ,{field: 'ctnNo', align: 'center',title: ''}
            ,{field: 'locType1$', align: 'center',title: '大小类型'}
            // ,{field: 'locType2$', align: 'center',title: '宽窄类型'}
            // ,{field: 'locType3$', align: 'center',title: '轻重类型'}
            ,{field: 'locType1$', align: 'center',title: '高低类型', hide:true}
            ,{field: 'locType2$', align: 'center',title: '宽窄类型', hide:true}
            ,{field: 'locType3$', align: 'center',title: '轻重类型', hide:true}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:100}
        ]],
src/main/webapp/static/js/stoMan/stoQue.js
@@ -26,23 +26,25 @@
        cellMinWidth: 50,
        cols: [[
            {type: 'checkbox'}
            ,{field: 'locNo', align: 'center',title: '库位号'}
            ,{field: 'locSts$', align: 'center',title: '库位状态', width: 180, style: 'color: #8E2323'}
            // ,{field: 'whsType$', align: 'center',title: '库位类型'}
            ,{field: 'crnNo', align: 'center',title: '堆垛机号'}
            ,{field: 'row1', align: 'center',title: '排'}
            ,{field: 'bay1', align: 'center',title: '列'}
            ,{field: 'lev1', align: 'center',title: '层'}
            ,{field: 'locNo', align: 'center',title: '库位号', hide:false}
            ,{field: 'locSts$', align: 'center',title: '库位状态', width: 180, style: 'color: #8E2323', hide:false}
            ,{field: 'whsType$', align: 'center',title: '库位类型', width: 180, style: 'color: #8E2323', hide:false}
            ,{field: 'crnNo', align: 'center',title: '堆垛机号', sort:true, hide:false}
            ,{field: 'row1', align: 'center',title: '排', sort:true, hide:true}
            ,{field: 'bay1', align: 'center',title: '列', sort:true, hide:true}
            ,{field: 'lev1', align: 'center',title: '层', sort:true, hide:true}
            ,{field: 'fullPlt', align: 'center',title: '满板', templet:function(row){
                    var html = "<input value='fullPlt' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
                    if(row.fullPlt === 'Y'){html += " checked ";}
                    html += "disabled='disabled' >";
                    return html;
                },width:80}
            ,{field: 'barcode', align: 'center',title: '条码号'}
            ,{field: 'locType1$', align: 'center',title: '大小类型'}
            ,{field: 'modiUser$', align: 'center',title: '修改人员'}
            ,{field: 'modiTime$', align: 'center',title: '修改时间', width: 180}
            ,{field: 'barcode', align: 'center',title: '条码号', hide:false}
            ,{field: 'locType1$', align: 'center',title: '高低类型', hide:true}
            ,{field: 'locType2$', align: 'center',title: '宽窄类型', hide:true}
            ,{field: 'locType3$', align: 'center',title: '轻重类型', hide:true}
            ,{field: 'modiUser$', align: 'center',title: '修改人员', hide:true}
            ,{field: 'modiTime$', align: 'center',title: '修改时间', width: 180, hide:false}
            ,{ fixed: 'right', title:'操作', align: 'center', toolbar: '#operate'}
        ]],
        request: {
src/main/webapp/views/locMast/locMast.html
@@ -41,6 +41,17 @@
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline cool-auto-complete">
            <input id="whsType" name="whs_type" class="layui-input" type="text"  style="display: none">
            <input id="whsType$" 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="basWhsQueryBywhsType" onkeyup="autoLoad2(this.getAttribute('data-key'))">
                <select class="cool-auto-complete-window-select" data-key="basWhsQueryBywhsTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                </select>
            </div>
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <select name="loc_type1" id="loc_type1" class="layui-input" type="text" placeholder="库位类型" autocomplete="off">
                <!--                    <option style="display: none"></option>-->
@@ -86,7 +97,7 @@
        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>
        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">删除</button>
        <button class="layui-btn layui-btn-primary" id="btn-init" lay-event="init">初始化</button>
        <button class="layui-btn layui-btn-sm" id="btn-convertSize" lay-event="convertSize">大小库位转换</button>
<!--        <button class="layui-btn layui-btn-sm" id="btn-convertSize" lay-event="convertSize">大小库位转换</button>-->
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">导出</button>
    </div>
</script>
src/main/webapp/views/locMast/locMast_detail.html
@@ -35,11 +35,11 @@
                <input id="locType" class="layui-input" type="text" >
            </div>
        </div>
        <div class="layui-inline"  style="width:80%; display: none">
            <label class="layui-form-label">库位类型:</label>
        <div class="layui-inline"  style="width:80%">
            <label class="layui-form-label"><span class="not-null">*</span>库位类型:</label>
            <div class="layui-input-inline cool-auto-complete">
                <input id="whsType" class="layui-input" type="text" style="display: none">
                <input id="whsType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
                <input id="whsType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur() disabled="disabled">
                <div class="cool-auto-complete-window">
                    <input class="cool-auto-complete-window-input" data-key="basWhsQueryBywhsType" onkeyup="autoLoad(this.getAttribute('data-key'))">
                    <select class="cool-auto-complete-window-select" data-key="basWhsQueryBywhsTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
src/main/webapp/views/stoMan/stoQue.html
@@ -44,6 +44,17 @@
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline cool-auto-complete">
            <input id="whsType" name="whs_type" class="layui-input" type="text"  style="display: none">
            <input id="whsType$" 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="basWhsQueryBywhsType" onkeyup="autoLoad2(this.getAttribute('data-key'))">
                <select class="cool-auto-complete-window-select" data-key="basWhsQueryBywhsTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                </select>
            </div>
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <select name="loc_type1" id="loc_type1" class="layui-input" type="text" placeholder="库位类型" autocomplete="off">
                <!--                    <option style="display: none"></option>-->