cp
2024-11-05 40caddc08252ad3276832a14a69cfaf9f71b08c8
完善
11个文件已修改
289 ■■■■ 已修改文件
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/LocDetlController.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/static/js/common.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/static/js/mat/mat.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/index.html 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/mat/mat.html 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/pakStore/locDetlQuery.html 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java
@@ -18,9 +18,9 @@
     */
    void adjust(MobileAdjustParam param, Long userId, Long hostId);
    R WarehouseIn(String locNo, String barcode,Long hostId);
    R WarehouseIn(String locNo, String barcode,Long hostId,Long userId);
    R WarehouseOut(CombParam combParam, Long hostId);
    R WarehouseOut(CombParam combParam, Long hostId,Long userId);
    R WarehouseOutV1(CombParam combParam, Long hostId,Long userId);
    R WarehouseOutPickMergeV1(WarehouseOutPickMergeParam param, Long hostId,Long userId);
    R WarehouseOutMergeBoardMany(WarehouseOutMergeBoardManyParam param, Long hostId,Long userId);
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java
@@ -251,36 +251,76 @@
    @Override
    @Transactional
    public R WarehouseIn(String locNo, String barcode,Long hostId) {
    public R WarehouseIn(String locNo, String barcode,Long hostId,Long userId) {
        //判断库位状态
        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, locNo).eq(LocMast::getHostId,hostId).eq(LocMast::getWhsType,1L));
        if (Cools.isEmpty(locMast)){
            return R.error("该库位不存在");
        }
        if (!locMast.getLocSts().equals("O")){
            return R.error("该库位状态为:"+locMast.getLocSts()+",禁止入库");
        }
//        if (!locMast.getLocSts().equals("O")){
//            return R.error("该库位状态为:"+locMast.getLocSts()+",禁止入库");
//        }
        //查询组托数据
        List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getZpallet, barcode).eq(WaitPakin::getHostId, hostId));
        if (Cools.isEmpty(list)){
            return R.error("未找到组托信息");
        }
        Date now = new Date();
        //插入库存数据
        for (WaitPakin waitPakin: list){
            Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, waitPakin.getMatnr()).eq(Mat::getHostId, hostId));
            LocDetl locDetl = new LocDetl();
            locDetl.sync(mat);
            locDetl.setLocNo(locNo);
            //处理库存信息
            AdjDetl adjDetl = new AdjDetl();
            Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>()
                    .eq(Mat::getMatnr, waitPakin.getMatnr()).eq(Mat::getHostId, hostId));
            LocDetl locDetl1=locDetlService.getOne(new LambdaQueryWrapper<LocDetl>()
                    .eq(LocDetl::getMatnr,waitPakin.getMatnr())
                    .eq(LocDetl::getHostId,hostId)
                    .eq(LocDetl::getLocNo,locNo));
            double i=0.0;
            if(!Cools.isEmpty(locDetl1)){
                i=locDetl1.getAnfme();
                locDetl1.setAnfme(locDetl1.getAnfme()+waitPakin.getAnfme());
                locDetlService.updateById(locDetl1);
                adjDetl.setMatnr(locDetl1.getMatnr());
                adjDetl.setBatch(locDetl1.getBatch());
                adjDetl.setAdjQty(locDetl1.getAnfme());
            }else{
                LocDetl locDetl = new LocDetl();
                locDetl.sync(mat);
                locDetl.setLocNo(locNo);
//            locDetl.setBarcode(waitPakin.getBarcode());
            locDetl.setZpallet(waitPakin.getZpallet());
            locDetl.setAnfme(waitPakin.getAnfme());
            locDetl.setBatch(waitPakin.getBatch());
                locDetl.setZpallet(waitPakin.getZpallet());
                locDetl.setAnfme(waitPakin.getAnfme());
                locDetl.setBatch(waitPakin.getBatch());
//            locDetl.setWeight(waitPakin.getWeight());
            locDetl.setHostId(hostId);
            locDetl.setModiTime(now);
            locDetl.setAppeTime(now);
            locDetlService.save(locDetl);
                locDetl.setHostId(hostId);
                locDetl.setModiTime(now);
                locDetl.setAppeTime(now);
                locDetlService.save(locDetl);
                adjDetl.setMatnr(locDetl.getMatnr());
                adjDetl.setBatch(locDetl.getBatch());
                adjDetl.setAdjQty(locDetl.getAnfme());
            }
            try {
                adjDetl.setLocNo(locNo);
                adjDetl.setOriQty(i);
                adjDetl.setMemo("平庫上架");
                adjDetl.setModiUser(userId);
                adjDetl.setAppeUser(userId);
                adjDetl.setAppeTime(new Date());
                adjDetl.setModiTime(new Date());
                adjDetl.setOrderNo(waitPakin.getOrderNo());
                if (!adjDetlService.save(adjDetl)) {
                    throw new CoolException("保存库存调整记录失败");
                }
            }catch (Exception e){
                e.printStackTrace();
                throw new CoolException("更新库存数据出错" + e.getMessage());
            }
            //是否属于订单数据
            if (!Cools.isEmpty(waitPakin.getOrderNo())){
                Order order = orderService.selectByNo(waitPakin.getOrderNo(), hostId);
@@ -320,7 +360,7 @@
    @Override
    @Transactional
    public R WarehouseOut(CombParam combParam, Long hostId) {
    public R WarehouseOut(CombParam combParam, Long hostId , Long userId) {
        //判断库位状态
        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, combParam.getLocno()).eq(LocMast::getHostId,hostId).eq(LocMast::getWhsType,1L));
        if (Cools.isEmpty(locMast)){
@@ -371,6 +411,8 @@
                orderService.checkComplete(combParam.getOrderNo(), hostId);
            }
            try {
                double i=0.0;
                double j=locDetl.getAnfme();
                //处理库存信息
                if (combMat.getAnfme().equals(locDetl.getAnfme())){
                    //库存相等删除数据
@@ -383,8 +425,32 @@
                    }
                }else {
                    BigDecimal subtract = BigDecimal.valueOf(locDetl.getAnfme()).subtract(BigDecimal.valueOf(combMat.getAnfme()));
                    i=subtract.byteValue();
                    locDetl.setAnfme(subtract.doubleValue());
                    locDetlService.updateById(locDetl);
                }
                try {
                    //处理库存信息
                    AdjDetl adjDetl = new AdjDetl();
                    adjDetl.setLocNo(locDetl.getLocNo());
                    adjDetl.setMatnr(locDetl.getMatnr());
                    adjDetl.setBatch(locDetl.getBatch());
                    adjDetl.setOriQty(j);
                    adjDetl.setAdjQty(i);
                    adjDetl.setMemo("平庫下架");
                    adjDetl.setModiUser(userId);
                    adjDetl.setAppeUser(userId);
                    adjDetl.setAppeTime(new Date());
                    adjDetl.setModiTime(new Date());
                    adjDetl.setOrderNo(combParam.getOrderNo());
                    adjDetl.setHostId(hostId);
                    if (!adjDetlService.save(adjDetl)) {
                        throw new CoolException("保存库存调整记录失败");
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    throw new CoolException("更新库存数据出错" + e.getMessage());
                }
            }catch (Exception e){
                throw new CoolException("更新库存数据出错"+e.getMessage());
@@ -461,7 +527,7 @@
                adjDetl.setMatnr(locDetl.getMatnr());
                adjDetl.setBatch(locDetl.getBatch());
                adjDetl.setOriQty(locDetl.getAnfme());
                adjDetl.setMemo("WarehouseOutV1-pick");
                adjDetl.setMemo("并板途中拣料");
                adjDetl.setModiUser(userId);
                adjDetl.setAppeUser(userId);
                adjDetl.setAppeTime(new Date());
@@ -637,7 +703,7 @@
                        adjDetl.setBatch(locDetl.getBatch());
                        adjDetl.setOriQty(originAnfme);
                        adjDetl.setAdjQty(locDetl.getAnfme());
                        adjDetl.setMemo("WarehouseOutV1-pick");
                        adjDetl.setMemo("拣料途中并板");
                        adjDetl.setModiUser(userId);
                        adjDetl.setAppeUser(userId);
                        adjDetl.setAppeTime(new Date());
zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml
@@ -73,6 +73,7 @@
        </if>
        and b.host_id = #{hostId}
        and b.loc_sts = 'F'
        and b.row1 in (1,2,3,4)
        order by b.row1
    </select>
@@ -114,6 +115,7 @@
        where 1=1
        and b.loc_sts = 'F'
        and b.host_id = #{map.hostId}
        and b.row1 in (1,2,3,4)
        <include refid="stockOutCondition"></include>
    </select>
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/LocDetlController.java
@@ -299,20 +299,56 @@
    @RequestMapping(value = "/stock/out/list/auth")
    @ManagerAuth
    public R stockOutList(@RequestParam(defaultValue = "1")Integer curr,
                          @RequestParam(defaultValue = "10")Integer limit,
                          @RequestParam Map<String, Object> param){
        if (!Cools.isEmpty(param.get("modi_time"))){
            String val = String.valueOf(param.get("modi_time"));
            if (val.contains(RANGE_TIME_LINK)) {
                String[] dates = val.split(RANGE_TIME_LINK);
                param.put("startTime", DateUtils.convert(dates[0]));
                param.put("endTime", DateUtils.convert(dates[1]));
                param.remove("modi_time");
    public R stockOutList(@RequestParam(defaultValue = "1") Integer curr,
                          @RequestParam(defaultValue = "10") Integer limit,
                          @RequestParam(required = false)String orderByField,
                          @RequestParam(required = false)String orderByType,
                          @RequestParam(required = false) String condition,
                          @RequestParam(required = false) String timeRange,
                          @RequestParam Map<String, Object> param) {
        QueryWrapper<LocDetl> wrapper = new QueryWrapper<>();
        if (!Cools.isEmpty(param.get("decrees"))) {
            ArrayList<String> mats = new ArrayList<>();
            List<Mat> decrees = matService.list(new LambdaQueryWrapper<Mat>().like(Mat::getDecrees, param.get("decrees")));
            if (decrees.isEmpty()) {
                mats.add("-1");
            }else {
                for (Mat mat : decrees) {
                    mats.add(mat.getMatnr());
                }
            }
            wrapper.in("matnr", mats);
            param.remove("decrees");
        }
        param.put("hostId", getHostId());
        return R.ok(locDetlService.getStockOut(curr, limit, param));
        convert(param,wrapper);
        wrapper.eq("host_id", getHostId());
//        if (!Cools.isEmpty(condition)) {
//            wrapper.like(LocDetl::getLocNo, condition);
//        }
        if (!Cools.isEmpty(timeRange)) {
            String[] range = timeRange.split(RANGE_TIME_LINK);
            wrapper.ge("appe_time", DateUtils.convert(range[0]));
            wrapper.le("appe_time", DateUtils.convert(range[1]));
        }
        if (!Cools.isEmpty(param.get("locNo"))) {
            wrapper.like("loc_no", param.get("locNo"));
        }
        if (!Cools.isEmpty(param.get("zpallet"))) {
            wrapper.like("zpallet", param.get("zpallet"));
        }
        if (!Cools.isEmpty(orderByField)){
            wrapper.orderBy(true, "asc".equals(orderByType), humpToLine(orderByField));
        }
        param.remove("locNo");
        param.remove("owner");
        param.remove("matnr");
        allLike(LocDetl.class, param.keySet(), wrapper, condition);
        return R.ok(locDetlService.page(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/locDetl/statis/export")
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java
@@ -5,13 +5,11 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.common.utils.TreeUtils;
import com.zy.asrs.common.wms.entity.LocDetl;
import com.zy.asrs.common.wms.entity.LocMast;
import com.zy.asrs.common.wms.entity.Mat;
import com.zy.asrs.common.wms.entity.OrderDetl;
import com.zy.asrs.common.wms.entity.*;
import com.zy.asrs.common.wms.service.LocDetlService;
import com.zy.asrs.common.wms.service.LocMastService;
import com.zy.asrs.common.wms.service.MatService;
import com.zy.asrs.common.wms.service.WrkMastService;
import com.zy.asrs.framework.annotations.ManagerAuth;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
@@ -35,6 +33,8 @@
    private LocDetlService locDetlService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private WrkMastService wrkMastService;
    @RequestMapping(value = "/mat/{id}/auth")
    @ManagerAuth
@@ -242,4 +242,30 @@
        return R.ok(locDetls);
    }
    @GetMapping("/mat/synchronous")
    @ManagerAuth
    public R synchronous(){
        int wrkConut=wrkMastService.count(new LambdaQueryWrapper<WrkMast>());
        if(wrkConut>0){
            return R.error("有工作中的任務,禁止同步库存信息");
        }
        List<Mat> mats=matService.list();
        for (Mat mat:mats
             ) {
            List<LocDetl>locDetls=locDetlService.list(new LambdaQueryWrapper<LocDetl>()
                    .eq(LocDetl::getMatnr,mat.getMatnr()));
            for (LocDetl locDetl:locDetls
                 ) {
                locDetl.setMaktx(mat.getMaktx());
                locDetl.setSpecs(mat.getSpecs());
                locDetl.setModel(mat.getModel());
                locDetl.setSku(mat.getSku());
                locDetl.setItemNum(mat.getImgNum());//图号
                locDetl.setWeight(Double.parseDouble(mat.getWeight()));
                locDetl.setLength(Double.parseDouble(mat.getLength()));
                locDetlService.updateById(locDetl);
            }
        }
        return R.ok();
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java
@@ -66,16 +66,28 @@
    @Autowired
    private MatService matService;
    /**
     * 平庫上架
     * @param locNo
     * @param barcode
     * @return
     */
    @RequestMapping("/pda/WarehouseIn")
    @ManagerAuth
    public R WarehouseIn(@RequestParam String locNo, @RequestParam String barcode) {
        return mobileService.WarehouseIn(locNo, barcode, getHostId());
        return mobileService.WarehouseIn(locNo, barcode, getHostId(), getUserId());
    }
    /**
     * 平庫下架
     * @param combParam
     * @return
     */
    @RequestMapping("/pda/WarehouseOut")
    @ManagerAuth
    public R WarehouseOut(@RequestBody CombParam combParam) {
        return mobileService.WarehouseOut(combParam, getHostId());
        return mobileService.WarehouseOut(combParam, getHostId(), getUserId());
    }
    @RequestMapping("/outBound/mat/list")
@@ -520,7 +532,7 @@
        return R.ok().add(maps);
    }
    @RequestMapping("/outBound/mat/list")
    @RequestMapping("/outBound/order/list")
    @ManagerAuth(memo = "获取出库订单")
    public R outBound(@RequestParam(required = false) String matnr,@RequestParam(required = false) String orderNo){
        List<DocType> docTypes = docTypeService.list(new LambdaQueryWrapper<DocType>().like(DocType::getPakout, 1));
@@ -671,8 +683,13 @@
                throw new CoolException("保存工作档明细失败");
            }
            Order order = orderService.selectByNo(matParam.getOrderNo(), getHostId());
            if (order == null) {
                throw new CoolException("Order is not exits");
            }
            //更新订单工作数量
            orderDetlService.increaseWorkQtyByOrderNo(matParam.getOrderNo(), matParam.getMatnr(), matParam.getBatch(), matParam.getUseCount(), getHostId());
            orderService.updateSettle(order.getId(), 2L, getUserId(), getHostId());
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, param.getLocNo()).eq(LocMast::getHostId, getHostId()));
zy-asrs-wms/src/main/webapp/static/js/common.js
@@ -204,7 +204,7 @@
    , {field: 'brand', align: 'center', title: '品牌', hide: true}
    , {field: 'unit', align: 'center', title: '单位', hide: true}
    , {field: 'price', align: 'center', title: '单价', hide: true}
    , {field: 'sku', align: 'center', title: 'sku', hide: true}
    , {field: 'sku', align: 'center', title: '俗称', hide: false}
    , {field: 'units', align: 'center', title: '单位量', hide: true}
    , {field: 'barcode', align: 'center', title: '托盘码', hide: true}
    , {field: 'origin', align: 'center', title: '产地', hide: true}
@@ -260,7 +260,7 @@
    , {field: 'brand', align: 'center', title: '品牌', hide: true}
    , {field: 'unit', align: 'center', title: '单位', hide: true}
    , {field: 'price', align: 'center', title: '单价', hide: true}
    , {field: 'sku', align: 'center', title: 'sku', hide: true}
    , {field: 'sku', align: 'center', title: '俗称', hide: false}
    , {field: 'units', align: 'center', title: '单位量', hide: true}
    , {field: 'barcode', align: 'center', title: '托盘码', hide: true}
    , {field: 'origin', align: 'center', title: '产地', hide: true}
zy-asrs-wms/src/main/webapp/static/js/mat/mat.js
@@ -364,6 +364,18 @@
        tableReload(false);
    });
    // 同步庫存
    form.on('submit(synchronous)', function (data) {
        layer.confirm('确认同步庫存?', function(){
            http.get(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:1}, function (res) {
                $(".layui-laypage-btn")[0].click();
                layer.msg(data.wrkNo + res.msg);
            })
            layer.closeAll();
        });
    });
    // 时间选择器
    layDate.render({
        elem: '#createTime\\$',
zy-asrs-wms/src/main/webapp/views/index.html
@@ -169,22 +169,22 @@
      }
    });
    $.ajax({
      url: baseUrl + "/license/getLicenseDays",
      headers: {'token': localStorage.getItem('token')},
      method: 'POST',
      success: function (res) {
        if (res.code == 200) {
          let days = res.data
          if (days <= 30) {
            $("#licenseShow").show()
            $("#licenseDays").html(days)
          }
        }else {
          top.location.href = baseUrl + "/login";
        }
      }
    });
    // $.ajax({
    //   url: baseUrl + "/license/getLicenseDays",
    //   headers: {'token': localStorage.getItem('token')},
    //   method: 'POST',
    //   success: function (res) {
    //     if (res.code == 200) {
    //       let days = res.data
    //       if (days <= 30) {
    //         $("#licenseShow").show()
    //         $("#licenseDays").html(days)
    //       }
    //     }else {
    //       top.location.href = baseUrl + "/login";
    //     }
    //   }
    // });
    // 默认加载主页
    index.loadHome({
zy-asrs-wms/src/main/webapp/views/mat/mat.html
@@ -117,6 +117,9 @@
                            <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                                <i class="layui-icon">&#xe666;</i>重置
                            </button>
                            <button class="layui-btn icon-btn" lay-filter="synchronous" lay-submit>
                                <i class="layui-icon">&#xe666;</i>同步庫存
                            </button>
                        </div>
                    </div>
                    <table class="layui-hide" id="mat" lay-filter="mat"></table>
@@ -276,6 +279,12 @@
                        <input name="height" placeholder="高度" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">俗称</label>
                    <div class="layui-input-block">
                        <input name="sku" placeholder="俗称" class="layui-input">
                    </div>
                </div>
            </div>
        </div>
zy-asrs-wms/src/main/webapp/views/pakStore/locDetlQuery.html
@@ -92,6 +92,13 @@
                <input class="layui-input" type="text" name="owner" placeholder="货主" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">
            </div>
        </div>
        <!-- 待添加 -->
        <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
            <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>