自动化立体仓库 - WMS系统
pang.jiabao
2024-12-18 1a88411d65508409011cdedb4d8d8b74bb60baa6
库位冻结/解冻,库存冻结/解冻
21个文件已修改
1个文件已添加
494 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocDetlController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocMastController.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/FrozenParam.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocMast.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locDetl/locDetl.js 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locMast/locMast.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/stoMan/stoQue.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locDetl/locDetl.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast.html 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast_detail.html 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locDetlCheckQuery.html 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locDetlQuery.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/stoMan/stoQue.html 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -12,6 +12,7 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.entity.FrozenParam;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocOwner;
import com.zy.asrs.entity.Mat;
@@ -252,6 +253,26 @@
        return R.ok();
    }
    @PostMapping(value = "/locDetl/frozenInventory")
    @ManagerAuth(memo = "库存冻结")
    public R frozen(@RequestBody List<FrozenParam> param){
        if (param.size() == 0)  {
            return R.parse("未收到数据");
        }
        return locDetlService.frozenInventory(param);
    }
    @PostMapping(value = "/locDetl/unfreezeInventory")
    @ManagerAuth(memo = "库存解冻")
    public R unfreeze(@RequestBody List<FrozenParam> param){
        if (param.size() == 0)  {
            return R.parse("未收到数据");
        }
        return locDetlService.unfreezeInventory(param);
    }
    @RequestMapping(value = "/locDetl/export/auth")
    @ManagerAuth(memo = "库位明细导出")
    public R export(@RequestBody JSONObject param){
src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -10,21 +10,18 @@
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.core.exception.CoolException;
import com.zy.asrs.entity.*;
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;
import com.zy.asrs.mapper.LocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.common.entity.Parameter;
import com.zy.common.model.Shelves;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.*;
@RestController
@@ -36,6 +33,15 @@
    private LocDetlService locDetlService;
    @Autowired
    private BasWhsService basWhsService;
    @Resource
    private WrkMastService wrkMastService;
    @Resource
    private AdjDetlService adjDetlService;
    @Resource
    private LocDetlMapper locDetlMapper;
    @RequestMapping(value = "/locMast/init/pwd")
    public R locMastInitPwd(@RequestParam(required = false) String pwd) {
@@ -107,22 +113,67 @@
    @RequestMapping(value = "/locMast/update/auth")
    @ManagerAuth(memo = "库位修改")
    public R update(LocMast locMast){
        if (Cools.isEmpty(locMast) || null==locMast.getLocNo()){
            return R.error();
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                .eq("source_loc_no", locMast.getLocNo())
                .or().eq("loc_no", locMast.getLocNo()));
        if(!Cools.isEmpty(wrkMast)){
            return  R.error("该库位正在作业,请先处理工作档");
        }
        LocMast oldLocMast = locMastService.selectById(locMast.getLocNo());
        if (locMast.getLocSts().equals("F") && (oldLocMast.getLocSts().equals("D") || oldLocMast.getLocSts().equals("O"))) {
            return R.error("当前操作已被阻止,请联系管理员");
        }
        Date now = new Date();
        // 有物料时修改为空库位或者空板库位,则删除库存明细
        if (oldLocMast.getLocSts().equals("R") || oldLocMast.getLocSts().equals("F")) {
        if (oldLocMast.getLocSts().equals("R") || oldLocMast.getLocSts().equals("F") || oldLocMast.getLocSts().equals("S")) {
            if (locMast.getLocSts().equals("O") || locMast.getLocSts().equals("D")) {
                locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                for (LocDetl locDetl : locDetls) {
                    // 保存调整记录
                    AdjDetl adjDetl = new AdjDetl();
                    adjDetl.setLocNo(locDetl.getLocNo());
                    adjDetl.setMatnr(locDetl.getMatnr());
                    adjDetl.setBatch(locDetl.getBatch());
                    adjDetl.setOriQty(locDetl.getAnfme());
                    adjDetl.setAdjQty(0.0D);
                    adjDetl.setModiTime(now);
                    adjDetl.setModiUser(getUserId());
                    adjDetl.setAppeTime(now);
                    adjDetl.setAppeUser(getUserId());
                    if (!adjDetlService.insert(adjDetl)) {
                        throw new CoolException("服务器错误,请联系管理员");
                    }
                }
                if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()))) {
                    throw new CoolException("服务器错误,请联系管理员");
                }
                locMast.setBarcode("");
            }
        }
        locMast.setModiUser(getUserId());
        locMast.setModiTime(new Date());
        locMastService.updateById(locMast);
        locMast.setModiTime(now);
        AdjDetl adjDetl = new AdjDetl();
        adjDetl.setLocNo(locMast.getLocNo());
        adjDetl.setMatnr("原库位状态:" + oldLocMast.getLocSts());
        adjDetl.setBatch("更改库位状态为:" + locMast.getLocSts());
        adjDetl.setModiTime(now);
        adjDetl.setModiUser(getUserId());
        if (!adjDetlService.insert(adjDetl)) {
            throw new CoolException("库位调整记录失败");
        }
        // 库位冻结->冻结所有库存
        if (locMast.getFrozen() == 1 && oldLocMast.getFrozen() == 0 && locMast.getLocSts().equals("F") && oldLocMast.getLocSts().equals("F")) {
            locDetlMapper.updateDetlFrozenByLocNo(oldLocMast.getLocNo());
        }
        if(!locMastService.updateById(locMast)) {
            throw new CoolException("服务器错误,请联系管理员");
        }
        return R.ok();
    }
src/main/java/com/zy/asrs/entity/FrozenParam.java
New file
@@ -0,0 +1,28 @@
package com.zy.asrs.entity;
import lombok.Data;
/**
 * @author pang.jiabao
 * @description 库存冻结/解冻 dto
 * @createDate 2024/12/17 9:24
 */
@Data
public class FrozenParam {
    /**
     * 库位号
     */
    private String locNo;
    /**
     * 商品编号
     */
    private String matnr;
    /**
     * 批次
     */
    private String batch;
}
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -183,6 +183,12 @@
    @ApiModelProperty(value= "备用3")
    private String standby3;
    /**
     * 是否冻结
     */
    @ApiModelProperty(value= "是否冻结,0.未冻结,1.已冻结")
    private Integer frozen;
    public String getLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.locNo);
@@ -295,4 +301,16 @@
        Synchro.Copy(source, this);
    }
    public String getFrozen$() {
        if (null == this.frozen){ return null; }
        switch (this.frozen){
            case 0:
                return "未冻结";
            case 1:
                return "已冻结";
            default:
                return null;
        }
    }
}
src/main/java/com/zy/asrs/entity/LocMast.java
@@ -182,6 +182,19 @@
    @TableField("ctn_no")
    private String ctnNo;
    /**
     * 是否冻结
     */
    @ApiModelProperty(value= "是否冻结,0.未冻结,1.已冻结")
    private Integer frozen;
    /**
     * 冻结备注
     */
    @ApiModelProperty(value= "冻结备注")
    @TableField("frozen_memo")
    private String frozenMemo;
    public String getWhsType$(){
        BasWhsService service = SpringUtils.getBean(BasWhsService.class);
@@ -296,4 +309,16 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
    }
    public String getFrozen$() {
        if (null == this.frozen){ return null; }
        switch (this.frozen){
            case 0:
                return "未冻结";
            case 1:
                return "已冻结";
            default:
                return null;
        }
    }
}
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -86,4 +86,18 @@
    List<LocDetl> selectLocDetlUnilateralMoveShuttleY(@Param("matnr")String matnr,@Param("batch")String batch,@Param("grade")String grade);
    List<LocDetl> selectLocDetlUnilateralMoveShuttleN(@Param("matnr")String matnr,@Param("batch")String batch,@Param("grade")String grade);
    /**
     * 根据库位号更新库存明细为冻结状态
     */
    void updateDetlFrozenByLocNo(@Param("locNo") String locNo);
    /**
     * 冻结/解冻库存明细
     * @param locNo 库位号
     * @param matnr 物料编码
     * @param batch 批次
     * @param frozen 0解冻,1冻结
     */
    void frozenInventory(@Param("locNo") String locNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("frozen") int frozen);
}
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -53,4 +53,11 @@
//    LocMast selectLocByLocStsPakInO2(@Param("locNos") List<String> locNos,@Param("whsType") Long whsType);
    LocMast selectLocByLocStsPakInO2(@Param("crnNo") Integer crnNo,@Param("bay") Integer bay,@Param("lev") Integer lev,@Param("gro") Integer gro,@Param("whsType") Long whsType);
    /**
     * 查找第一个冻结的库位
     * @param locNoList 库位号集合
     * @return 库位号
     */
    String findFirstFrozenLocNo(@Param("locNoList") List<String> locNoList);
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.core.common.R;
import com.zy.asrs.entity.FrozenParam;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.result.LocDetlAll;
import com.zy.asrs.entity.result.LocDetlDTO;
@@ -78,4 +80,14 @@
    List<Map<String, Object>> selectLocDetlUnilateralMoveShuttleMap(Integer crnNo);
    List<LocDetl> selectLocDetlUnilateralMoveShuttle(String matnr,String batch,String grade,Integer crnNo);
    /**
     * 冻结库存
     */
    R frozenInventory(List<FrozenParam> param);
    /**
     * 库存解冻
     */
    R unfreezeInventory(List<FrozenParam> param);
}
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.R;
import com.zy.asrs.entity.FrozenParam;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.result.LocDetlAll;
import com.zy.asrs.entity.result.LocDetlDTO;
@@ -162,4 +164,24 @@
        }
        return this.baseMapper.selectLocDetlUnilateralMoveShuttleN(matnr,batch,grade);
    }
    @Override
    public R frozenInventory(List<FrozenParam> param) {
        for(FrozenParam obj : param) {
            this.baseMapper.frozenInventory(obj.getLocNo(), obj.getMatnr(), obj.getBatch(), 1);
        }
        return R.ok("冻结库存完成!");
    }
    @Override
    public R unfreezeInventory(List<FrozenParam> param) {
        for(FrozenParam obj : param) {
            this.baseMapper.frozenInventory(obj.getLocNo(), obj.getMatnr(), obj.getBatch(), 0);
        }
        return R.ok("库存解冻完成!");
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -12,6 +12,7 @@
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -27,6 +28,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -85,6 +87,9 @@
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Resource
    private LocMastMapper locMastMapper;
    @Override
    @Transactional
@@ -181,6 +186,12 @@
            }
        }
        if (!locDetlDtos.isEmpty()) {
            // 库位号集合
            List<String> locNoList = param.getLocDetls().stream().map(StockOutParam.LocDetl::getLocNo).distinct().collect(Collectors.toList());
            String firstFrozenLocNo = locMastMapper.findFirstFrozenLocNo(locNoList);
            if (firstFrozenLocNo != null) {
                throw new CoolException(firstFrozenLocNo + "库位已被冻结!");
            }
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") ){
                // 启动出库开始 101.出库
@@ -522,6 +533,13 @@
        if (Cools.isEmpty(param.getOutSite())) {
            throw new CoolException("站点不存在");
        }
        // 库位冻结不能出库
        String firstFrozenLocNo = locMastMapper.findFirstFrozenLocNo(param.getLocNos());
        if (firstFrozenLocNo != null) {
            throw new CoolException(firstFrozenLocNo + "库位已被冻结!");
        }
        for (String locNo : param.getLocNos()) {
            // 获取工作号
            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
@@ -658,6 +676,12 @@
            }
        }
        if (!locDetlDtos.isEmpty()) {
            // 库位号集合
            List<String> locNoList = param.getLocDetls().stream().map(StockOutParam.LocDetl::getLocNo).distinct().collect(Collectors.toList());
            String firstFrozenLocNo = locMastMapper.findFirstFrozenLocNo(locNoList);
            if (firstFrozenLocNo != null) {
                throw new CoolException(firstFrozenLocNo + "库位已被冻结!");
            }
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
            if (locMast.getLocSts().equals("F")){
                // 启动出库开始 107.盘点出库
@@ -682,6 +706,19 @@
        if (Cools.isEmpty(loc)){
            throw new CoolException("未找到库位");
        }
        // 判断库位是否冻结
        String sourceLocFrozen = locMastMapper.findFirstFrozenLocNo(Arrays.asList(sourceLoc.getLocNo(),loc.getLocNo()));
        if (sourceLocFrozen != null) {
            throw new CoolException(sourceLocFrozen + "库位已被冻结!");
        }
        // 判断库存是否冻结
        Optional<LocDetl> first = locDetls.stream().filter(locDetl -> locDetl.getFrozen() == 1).findFirst();
        if (first.isPresent()) {
            LocDetl locDetl = first.get();
            throw new CoolException(locDetl.getLocNo() + "," + locDetl.getMatnr() + "," + locDetl.getBatch() + "库存明细已被冻结!");
        }
        if (!loc.getLocSts().equals("O") || (!sourceLoc.getLocSts().equals("F") && !sourceLoc.getLocSts().equals("D"))){
            throw new CoolException("库位状态已改变");
        }
src/main/resources/mapper/LocDetlMapper.xml
@@ -44,6 +44,7 @@
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="memo" property="memo" />
        <result column="frozen" property="frozen" />
        <result column="standby1" property="standby1" />
        <result column="standby2" property="standby2" />
        <result column="standby3" property="standby3" />
@@ -376,6 +377,12 @@
        FROM asr_loc_detl a
        INNER JOIN man_mat b ON a.matnr=#{matnrOld} AND b.matnr=#{matnr};
    </update>
    <update id="updateDetlFrozenByLocNo">
        update asr_loc_detl set frozen = 1 where loc_no = #{locNo} and frozen = 0
    </update>
    <update id="frozenInventory">
        update asr_loc_detl set frozen = #{frozen} where loc_no = #{locNo} and matnr = #{matnr} and batch = #{batch}
    </update>
    <select id="selectSameDetlTodayBatch" resultType="java.lang.String">
        SELECT ld.loc_no FROM asr_loc_detl ld
src/main/resources/mapper/LocMastMapper.xml
@@ -34,7 +34,8 @@
        <result column="mk" property="mk" />
        <result column="barcode" property="barcode" />
        <result column="ctn_no" property="ctnNo" />
        <result column="frozen" property="frozen" />
        <result column="frozen_memo" property="frozenMemo" />
    </resultMap>
    <select id="queryFreeLocMast" resultMap="BaseResultMap">
@@ -192,5 +193,11 @@
        and gro1 = #{gro}
        AND loc_sts in ('O') order by row1
    </select>
    <select id="findFirstFrozenLocNo" resultType="java.lang.String">
        select top 1 loc_no  from asr_loc_mast where frozen = 1 and loc_no in
        <foreach collection="locNoList" item="item" index="index" separator="," open="(" close=")">
            #{item}
        </foreach>
    </select>
</mapper>
src/main/webapp/static/js/common.js
@@ -255,5 +255,14 @@
    ,{field: 'source$', align: 'center',title: '制购', hide: true}
    ,{field: 'check$', align: 'center',title: '要求检验', hide: true}
    ,{field: 'danger$', align: 'center',title: '危险品', hide: true}
    ,{field: 'frozen$', align: 'center',title: '冻结否',
        templet: function(d) {
            // 根据条件判断字体颜色
            if (d.frozen$ === '已冻结') {
                return '<span style="color: #34a8de;">' +d.frozen$ + '</span>';
            } else {
                return '<span">' +d.frozen$ + '</span>';
            }
        }}
]
src/main/webapp/static/js/locDetl/locDetl.js
@@ -1,6 +1,7 @@
var pageCurr;
function getCol() {
    var cols = [
        {type: 'checkbox'},
        {field: 'locNo$', align: 'center',title: '库位号'}
        ,{field: 'storeDate', align: 'center',title: '库龄(天)', sort:true}
        ,{field: 'matnr', align: 'center',title: '商品编号', sort:true}
@@ -35,7 +36,15 @@
        ,{field: 'source$', align: 'center',title: '制购', hide: true}
        ,{field: 'check$', align: 'center',title: '要求检验', hide: true}
        ,{field: 'danger$', align: 'center',title: '危险品', hide: true}
        ,{field: 'frozen$', align: 'center',title: '冻结否',
            templet: function(d) {
                // 根据条件判断字体颜色
                if (d.frozen$ === '已冻结') {
                    return '<span style="color: #34a8de;">' +d.frozen$ + '</span>';
                } else {
                    return '<span">' +d.frozen$ + '</span>';
                }
            }}
    ];
    // cols.push.apply(cols, detlCols);
@@ -212,6 +221,78 @@
                    });
                });
                break;
                // 冻结
            case 'frozen':
                let frozenData = checkStatus.data;
                console.log(frozenData)
                if (frozenData.length === 0){
                    layer.msg('请选择数据');
                } else {
                    layer.confirm('确定冻结库存吗?', function(){
                        let requestData = frozenData.map(obj => ({
                            locNo: obj.locNo,
                            matnr: obj.matnr,
                            batch: obj.batch
                            })
                        );
                        $.ajax({
                            url: baseUrl+"/locDetl/frozenInventory",
                            headers: {'token': localStorage.getItem('token')},
                            data: JSON.stringify(requestData),
                            dataType:'json',
                            contentType:'application/json;charset=UTF-8',
                            method: 'POST',
                            traditional:true,
                            success: function (res) {
                                if (res.code === 200){
                                    layer.closeAll();
                                    tableReload(false);
                                } else if (res.code === 403){
                                    top.location.href = baseUrl+"/";
                                } else {
                                    layer.msg(res.msg)
                                }
                            }
                        })
                    });
                }
                break;
                // 解冻
            case 'unfreeze':
                let unfreezeData = checkStatus.data;
                console.log(unfreezeData)
                if (unfreezeData.length === 0){
                    layer.msg('请选择数据');
                } else {
                    layer.confirm('确定解冻库存吗?', function(){
                        let requestData = unfreezeData.map(obj => ({
                                locNo: obj.locNo,
                                matnr: obj.matnr,
                                batch: obj.batch
                            })
                        );
                        $.ajax({
                            url: baseUrl+"/locDetl/unfreezeInventory",
                            headers: {'token': localStorage.getItem('token')},
                            data: JSON.stringify(requestData),
                            dataType:'json',
                            contentType:'application/json;charset=UTF-8',
                            method: 'POST',
                            traditional:true,
                            success: function (res) {
                                if (res.code === 200){
                                    layer.closeAll();
                                    tableReload(false);
                                } else if (res.code === 403){
                                    top.location.href = baseUrl+"/";
                                } else {
                                    layer.msg(res.msg)
                                }
                            }
                        })
                    });
                }
                break;
        }
    });
src/main/webapp/static/js/locMast/locMast.js
@@ -24,6 +24,16 @@
            ,{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: 'frozen$', align: 'center',title: '冻结状态',
                templet: function(d) {
                    // 根据条件判断字体颜色
                    if (d.frozen$ === '已冻结') {
                        return '<span style="color: #34a8de;">' +d.frozen$ + '</span>';
                    } else {
                        return '<span">' +d.frozen$ + '</span>';
                    }
                }}
            ,{field: 'frozenMemo', align: 'center',title: '冻结原因'}
            // ,{field: 'pltType', align: 'center',title: ''}
            // ,{field: 'ctnType', align: 'center',title: ''}
            // ,{field: 'locSts', align: 'center',title: ''}
@@ -461,7 +471,8 @@
            barcode: $('#barcode').val(),
            PdcType: $('#PdcType').val(),
            ctnNo: $('#ctnNo').val(),
            frozen: $('#frozen').val(),
            frozenMemo: $('#frozenMemo').val()
        };
        $.ajax({
            url: baseUrl+"/locMast/"+name+"/auth",
src/main/webapp/static/js/stoMan/stoQue.js
@@ -29,6 +29,16 @@
            ,{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: 'frozen$', align: 'center',title: '冻结状态',
                templet: function(d) {
                    // 根据条件判断字体颜色
                    if (d.frozen$ === '已冻结') {
                        return '<span style="color: #34a8de;">' +d.frozen$ + '</span>';
                    } else {
                        return '<span">' +d.frozen$ + '</span>';
                    }
                }}
            ,{field: 'frozenMemo', align: 'center',title: '冻结原因'}
            ,{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}
src/main/webapp/views/locDetl/locDetl.html
@@ -9,6 +9,14 @@
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
        #frozen-btn {
            display: none;
        }
        #unfreeze-btn{
            display: none;
        }
    </style>
</head>
<body>
@@ -34,6 +42,17 @@
            <input class="layui-input" type="text" name="specs" placeholder="规格" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <select name="frozen" class="layui-input" type="text" autocomplete="off">
                <!--                    <option style="display: none"></option>-->
                <option value="">冻结否</option>
                <option value="0">未冻结</option>
                <option value="1">已冻结</option>
            </select>
        </div>
    </div>
<!--    <div class="layui-inline">-->
<!--        <div class="layui-input-inline">-->
<!--            <input class="layui-input" type="text" name="row" placeholder="排数" autocomplete="off">-->
@@ -61,7 +80,9 @@
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">导出</button>
        <button class="layui-btn layui-btn-primary layui-bg-blue layui-btn-sm" id="frozen-btn" lay-event="frozen" style="margin-top: 1px">冻结</button>
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="unfreeze-btn" lay-event="unfreeze" style="margin-top: 1px">解冻</button>
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 1px">导出</button>
    </div>
</script>
src/main/webapp/views/locMast/locMast.html
@@ -55,7 +55,7 @@
        <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>-->
                <option value=""></option>
                <option value="">库位类型</option>
                <option value="1">低库位</option>
                <option value="2">高库位</option>
            </select>
@@ -76,10 +76,18 @@
            <input class="layui-input" type="text" name="bay1" placeholder="列" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="lev1" placeholder="层" autocomplete="off">
        </div>
<!--    <div class="layui-inline">-->
<!--        <div class="layui-input-inline">-->
<!--            <input class="layui-input" type="text" name="lev1" placeholder="层" autocomplete="off">-->
<!--        </div>-->
<!--    </div>-->
    <div class="layui-input-inline">
        <select name="frozen" class="layui-input" type="text" autocomplete="off">
            <!--                    <option style="display: none"></option>-->
            <option value="">冻结否</option>
            <option value="0">未冻结</option>
            <option value="1">已冻结</option>
        </select>
    </div>
    <!-- 待添加 -->
    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
src/main/webapp/views/locMast/locMast_detail.html
@@ -77,6 +77,23 @@
                <input id="sheetNo" class="layui-input" type="text">
            </div>
        </div>
        <!-- 冻结 -->
        <div class="layui-inline"  style="width:80%;">
            <label class="layui-form-label">冻结</label>
            <div class="layui-input-inline">
                <select id="frozen" name="frozen">
                    <option style="display: none"></option>
                    <option value="0">未冻结</option>
                    <option value="1">已冻结</option>
                </select>
            </div>
        </div>
        <div class="layui-inline"  style="width:80%;">
            <label class="layui-form-label">冻结原因:</label>
            <div class="layui-input-inline">
                <input id="frozenMemo" class="layui-input" type="text" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline"  style="width:80%;">
            <label class="layui-form-label">堆垛机号:</label>
            <div class="layui-input-inline">
src/main/webapp/views/pakStore/locDetlCheckQuery.html
@@ -81,9 +81,18 @@
                <input class="layui-input" type="text" name="specs" placeholder="规格"  autocomplete="off">
            </div>
        </div>
<!--        <div class="layui-inline">-->
<!--            <div class="layui-input-inline">-->
<!--                <input class="layui-input" type="text" name="maktx" placeholder="物料描述" autocomplete="off">-->
<!--            </div>-->
<!--        </div>-->
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="maktx" placeholder="物料描述" autocomplete="off">
                <select name="frozen" class="layui-input" type="text" autocomplete="off">
                    <option value="">冻结否</option>
                    <option value="0">未冻结</option>
                    <option value="1">已冻结</option>
                </select>
            </div>
        </div>
        <!-- 日期范围 -->
@@ -186,6 +195,11 @@
                        layer.msg("请选择数据", {icon: 2});
                        return;
                    }
                    if (data.some(obj => obj.frozen === 1)) {
                        layer.msg("冻结的库存不允许出库!");
                        return;
                    }
                    let locNos = [];
                    data.forEach(function(elem) {
                        locNos.push(elem.locNo);
src/main/webapp/views/pakStore/locDetlQuery.html
@@ -77,6 +77,15 @@
                <input class="layui-input" type="text" name="maktx" placeholder="物料描述" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <select name="frozen" class="layui-input" type="text" autocomplete="off">
                    <option value="">冻结否</option>
                    <option value="0">未冻结</option>
                    <option value="1">已冻结</option>
                </select>
            </div>
        </div>
        <!-- 日期范围 -->
        <div class="layui-inline" style="width: 300px">
            <div class="layui-input-inline">
@@ -177,6 +186,11 @@
                        layer.msg("请选择数据");
                        return;
                    }
                    if (data.some(obj => obj.frozen === 1)) {
                        layer.msg("冻结的库存不允许出库!");
                        return;
                    }
                    parent.addTableData(data);
                    break;
            }
src/main/webapp/views/stoMan/stoQue.html
@@ -75,10 +75,18 @@
        </div>
    </div>
    <!-- 日期范围 -->
    <div class="layui-inline" style="width: 300px">
        <div class="layui-input-inline">
            <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
        </div>
<!--    <div class="layui-inline" style="width: 300px">-->
<!--        <div class="layui-input-inline">-->
<!--            <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">-->
<!--        </div>-->
<!--    </div>-->
    <div class="layui-input-inline">
        <select name="frozen" class="layui-input" type="text" autocomplete="off">
            <!--                    <option style="display: none"></option>-->
            <option value="">冻结否</option>
            <option value="0">未冻结</option>
            <option value="1">已冻结</option>
        </select>
    </div>
    <!-- 待添加 -->
    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">