zwl
2025-09-12 7e10622ead5bd8b3ce0c9fda39d22ae0e938e030
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java
@@ -2,10 +2,11 @@
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.Mat;
import com.zy.asrs.common.wms.service.MatService;
import com.zy.asrs.common.wms.entity.*;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.framework.annotations.ManagerAuth;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
@@ -25,11 +26,31 @@
    private MatService matService;
    @Autowired
    private TreeUtils treeUtils;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @RequestMapping(value = "/mat/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") Long id) {
        return R.ok(matService.getById(id));
    }
    @RequestMapping(value = "/mat/auth")
    @ManagerAuth
    public R find(@RequestParam("matnr") String matnr) {
        Mat one = matService.getOne(new LambdaQueryWrapper<Mat>()
                .eq(Mat::getMatnr, matnr)
                .eq(Mat::getHostId, getHostId()));
        if (Cools.isEmpty(one)){
            return R.error("未查询到相关物料");
        }
        return R.ok(one);
    }
    @RequestMapping(value = "/mat/page/auth")
@@ -39,15 +60,16 @@
                  @RequestParam(required = false) String condition,
                  @RequestParam(required = false) String timeRange,
                  @RequestParam Map<String, Object> param) {
        LambdaQueryWrapper<Mat> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Mat::getHostId, getHostId());
        if (!Cools.isEmpty(condition)) {
            wrapper.like(Mat::getId, condition);
        }
        QueryWrapper<Mat> wrapper = new QueryWrapper<>();
//        convert(param, wrapper);
        wrapper.eq("host_id", getHostId());
//        if (!Cools.isEmpty(condition)) {
//            wrapper.like(Mat::getId, condition);
//        }
        if (!Cools.isEmpty(timeRange)) {
            String[] range = timeRange.split(RANGE_TIME_LINK);
            wrapper.ge(Mat::getCreateTime, DateUtils.convert(range[0]));
            wrapper.le(Mat::getCreateTime, DateUtils.convert(range[1]));
            wrapper.ge("create_time", DateUtils.convert(range[0]));
            wrapper.le("create_time", DateUtils.convert(range[1]));
        }
        Object tagId = param.get("tag_id");
        ArrayList<Long> nodes = new ArrayList<>();
@@ -55,20 +77,53 @@
            tagId = getOriginTag().getId();
        }
        treeUtils.getTagIdList(Long.parseLong(tagId.toString()), nodes);
        wrapper.in(Mat::getTagId, nodes);
        wrapper.in("tag_id", nodes);
        if (!Cools.isEmpty(param.get("matnr"))) {
            wrapper.eq(Mat::getMatnr, param.get("matnr"));
            wrapper.like("matnr", param.get("matnr"));
        }
        if (!Cools.isEmpty(param.get("maktx"))) {
            wrapper.eq(Mat::getMaktx, param.get("maktx"));
            wrapper.like("maktx", param.get("maktx"));
        }
        if (!Cools.isEmpty(param.get("decrees"))) {
            wrapper.like("decrees", param.get("decrees"));
        }
//        if (!Cools.isEmpty(param.get("owner$"))) {
//            wrapper.eq("owner", param.get("owner$"));
//        }
        param.remove("matnr");
        param.remove("maktx");
        param.remove("decrees");
//        param.remove("owner$");
        allLike(Mat.class, param.keySet(), wrapper, condition);
        return R.ok(matService.page(new Page<>(curr, limit), wrapper));
    }
//    private <T> void convert(Map<String, Object> map, QueryWrapper<T> wrapper){
//        for (Map.Entry<String, Object> entry : map.entrySet()){
//            String val = String.valueOf(entry.getValue());
//            if (val.contains(RANGE_TIME_LINK)){
//                String[] dates = val.split(RANGE_TIME_LINK);
//                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
//                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
//            } else {
//                if (entry.getKey().equals("locNo")) {
//                    wrapper.eq("loc_no", String.valueOf(entry.getValue()));
//                } else {
//                    wrapper.like(entry.getKey(), String.valueOf(entry.getValue()));
//                }
//            }
//        }
//    }
    @RequestMapping(value = "/mat/add/auth")
    @ManagerAuth
    public R add(Mat mat) {
        int count = matService.count(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, mat.getMatnr()));
        if(count > 0){
            return R.error("当前物料号已存在");
        }
        mat.setHostId(getHostId());
        matService.save(mat);
        return R.ok();
@@ -123,10 +178,152 @@
        LambdaQueryWrapper<Mat> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Mat::getHostId, getHostId());
        if (!Cools.isEmpty(condition)) {
            wrapper.like(Mat::getId, condition);
            wrapper.like(Mat::getMatnr, condition);
        }
        matService.page(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(String.valueOf(item.getId()), item.getId())));
        matService.page(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(item.getMatnr(), item.getId())));
        return R.ok().add(vos);
    }
    @RequestMapping(value = "/mat/covert/{id}/auth")
    @ManagerAuth
    public R covert(@PathVariable("id") String id) {
        Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getId, id).eq(Mat::getHostId, getHostId()));
        if (mat == null) {
            return R.ok();
        }
        OrderDetl orderDetl = new OrderDetl();
        orderDetl.sync(mat);
        orderDetl.setBatch("");
        orderDetl.setAnfme(0.0D);
        return R.ok().add(orderDetl);
    }
    @RequestMapping(value = "/mat/list/pda/page/auth")
    @ManagerAuth
    public R pdaPageList(@RequestParam(required = true)Long tagId,
                         @RequestParam(defaultValue = "1")Integer curr,
                         @RequestParam(defaultValue = "10")Integer limit){
        LambdaQueryWrapper<Mat> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Mat::getHostId, getHostId());
        wrapper.orderBy(true, false,Mat::getCreateTime);
        return R.ok().add(matService.page(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/mat/pad/search")
    @ManagerAuth
    public R padSearch(@RequestParam("matnr") String matnr) {
        List<Mat> list = matService.list(new LambdaQueryWrapper<Mat>()
                .like(Mat::getMatnr, matnr)
                .eq(Mat::getHostId, getHostId()));
        if (list.isEmpty()){
            return R.error("未查询到相关物料");
        }
        return R.ok(list);
    }
    @RequestMapping(value = "/mat/pad/searchLoc")
    @ManagerAuth
    public R padSearchLoc(@RequestParam("matnr") String matnr) {
        List<LocDetl> list = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getMatnr, matnr).eq(LocDetl::getHostId, getHostId()));
        ArrayList<LocDetl> locDetls = new ArrayList<>();
        for (LocDetl locDetl : list) {
            LocMast one = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, locDetl.getLocNo()).eq(LocMast::getHostId, locDetl.getHostId()));
            if (one == null) {
                continue;
            }
            if (!one.getLocSts().equals("F")) {
                continue;
            }
            locDetls.add(locDetl);
        }
        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());
                if(!Cools.isEmpty(mat.getSpecs())){
                    locDetl.setSpecs(mat.getSpecs());
                }else{
                    locDetl.setSpecs("");
                }
                if(!Cools.isEmpty(mat.getModel())){
                    locDetl.setModel(mat.getModel());
                }else {
                    locDetl.setModel("");
                }
                if(!Cools.isEmpty(mat.getSku())){
                    locDetl.setSku(mat.getSku());
                }else {
                    locDetl.setSku("");
                }
                //图号
                if(!Cools.isEmpty(mat.getImgNum())){
                    locDetl.setItemNum(mat.getImgNum());
                }else {
                    locDetl.setItemNum("");
                }
//                if(!Cools.isEmpty(mat.getWeight())){
//                    locDetl.setWeight(Double.parseDouble(mat.getWeight()));
//                }else {
//                    locDetl.setWeight(0.0);
//                }
//                if(!Cools.isEmpty(mat.getLength())){
//                    locDetl.setLength(Double.parseDouble(mat.getLength()));
//                }else {
//                    locDetl.setLength(0.0);
//                }
                locDetlService.updateById(locDetl);
            }
        }
        return R.ok();
    }
    @PostMapping("/mat/sync")
    @ManagerAuth
    public R synchronous(@RequestBody Mat data) {
        // 检查是否有任务中使用了该物料
        int wrkCount = wrkDetlService.count(new LambdaQueryWrapper<WrkDetl>()
                .eq(WrkDetl::getMatnr, data.getMatnr()));
        if (wrkCount > 0) {
            return R.error("该物料正在被任务使用,禁止同步");
        }
        // 查询对应库存明细
        List<LocDetl> locDetls = locDetlService.list(
                new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getMatnr, data.getMatnr())
        );
        for (LocDetl locDetl : locDetls) {
            locDetl.setMaktx(data.getMaktx());
            locDetl.setSpecs(Cools.isEmpty(data.getSpecs()) ? "" : data.getSpecs());
            locDetl.setModel(Cools.isEmpty(data.getModel()) ? "" : data.getModel());
            locDetl.setSku(Cools.isEmpty(data.getSku()) ? "" : data.getSku());
            locDetl.setItemNum(Cools.isEmpty(data.getImgNum()) ? "" : data.getImgNum());
            // 若需要同步重量和长度,取消注释
            // locDetl.setWeight(Cools.isEmpty(data.getWeight()) ? 0.0 : Double.parseDouble(data.getWeight()));
            // locDetl.setLength(Cools.isEmpty(data.getLength()) ? 0.0 : Double.parseDouble(data.getLength()));
            locDetlService.updateById(locDetl);
        }
        return R.ok();
    }
}