自动化立体仓库 - WMS系统
#
zhou zhou
2025-12-26 221fc4d27eee086473de9d5b6d7150843e1c6e6d
src/main/java/com/zy/asrs/service/impl/MatBarcodeServiceImpl.java
@@ -1,28 +1,244 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.entity.MatBarcode;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.MatBarcodeMapper;
import com.zy.asrs.service.MatBarcodeService;
import com.zy.asrs.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@Service("MatBarcodeService")
public class MatBarcodeServiceImpl extends ServiceImpl<MatBarcodeMapper, MatBarcode> implements MatBarcodeService {
    @Autowired
    private MatBarcodeMapper matBarcodeMapper;
    @Autowired
    private MatBarcodeService matBarcodeService;
    @Autowired
    private MatService matService;
    @Autowired
    private HalfBarcodeService halfBarcodeService;
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private WrkMastService wrkMastService;
    @Override
    public MatBarcode selectbyMatnr(String matnr) {
        return this.baseMapper.selectByMatnr(matnr);
    }
    @Transactional
    @Override
    public void deleteMatBarcode(List<MatBarcode> list) {
        for (MatBarcode matBarcode : list) {
            //对于已经有库存 组托档 工作档的数据 不允许解绑
//            Integer locCount = locDetlService.selectCountByMatNr(matBarcode.getMatnr());
//            Integer waitCount = waitPakinService.selectCountByMatNr(matBarcode.getMatnr());
//            Integer wrkCount = wrkDetlService.selectCountByMatNr(matBarcode.getMatnr());
//            if (locCount > 0 || waitCount > 0){
//                throw new CoolException("库存/组托档存在该模具,不能解绑,商品模具名称:" + matBarcode.getMatnr() + "托盘码:" + matBarcode.getZpallet());
//            }
//            Integer wrkNo = wrkDetlService.selectWrkNoByMatnr(matBarcode.getMatnr());
//            if (wrkNo != null){
//                WrkMast wrkMast = wrkMastService.selectById(wrkNo);
//                if (wrkMast == null){
//                    throw new CoolException("工作档异常,有工作明细档无工作档");
//                }
//                if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 101){
//                    throw new CoolException("工作档不是全板出库/拣料出库");
//                }
//                if (wrkMast.getWrkSts() != 14 && wrkMast.getWrkSts() != 15){
//                    throw new CoolException("工作档未完成");
//                }
//            }
            //对于已经有库存 组托档 工作档的数据 不允许解绑
            Integer locCount = locDetlService.selectCountByMatNr(matBarcode.getMatnr());
//            Integer waitCount = waitPakinService.selectCountByMatNr(matBarcode.getMatnr());
//            if (locCount > 0 || waitCount > 0){
//                throw new CoolException("库存/组托档存在该模具,不能解绑,商品模具名称:" + matBarcode.getMatnr() + "托盘码:" + matBarcode.getZpallet());
//            }
            //对模具的规格做处理得到厚度
            Integer thickness = 0;
            if (!Cools.isEmpty(matBarcode.getSpecs())){
                String[] split = matBarcode.getSpecs().split("\\*");
                thickness = Integer.parseInt(split[1]);
            }
            HalfBarcode halfBarcode = halfBarcodeService.selectByZpallet(matBarcode.getZpallet());
            // 如果模具没有库存 更新半托信息 数量 可放厚度
            if (halfBarcode != null && locCount <= 0){
                halfBarcode.setAnfme(halfBarcode.getAnfme() - 1);
                halfBarcode.setPrice(halfBarcode.getPrice() + thickness);
                if (!halfBarcodeService.half(halfBarcode)){
                    throw new CoolException("更新半托信息失败");
                }
            }
            matBarcodeMapper.deleteByMatnr(matBarcode.getMatnr());
        }
    }
    @Override
    public void addBarcodeMatnr(WaitPakin waitPakin) {
        Mat mat = matService.selectById(waitPakin.getModiUser());
        if (mat == null){
            throw new CoolException("物料不存在,请先添加物料数据");
        }
        MatBarcode matBarcode = matBarcodeMapper.selectByMatnr(mat.getMatnr());
        if (matBarcode != null){
            throw new CoolException("该物料已经绑定托盘,请勿重复绑定");
        }
        if (mat.getColor().equals("报废")){
            throw new CoolException("该物料已报废,请勿绑定");
        }
        //对于已经组托过的 模具 不允许再次绑定
        Integer waitPakinCount = waitPakinService.selectByBarcodeAndMatnr(waitPakin.getMatnr());
        if (waitPakinCount >= 1){
            throw new CoolException("该模具已经组托,商品模具名称:" + waitPakin.getMatnr());
        }
        //对于已经有库存的模具 不允许再次绑定
        List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", waitPakin.getMatnr()));
        if (!Cools.isEmpty(locDetlList)) {
            throw new CoolException("该模具已经入库,商品模具名称:" + waitPakin.getMatnr());
        }
        //对于已经有工作档的模具 不允许再次绑定
        List<WrkDetl> wrkDetlList = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("matnr", waitPakin.getMatnr()));
        if (!Cools.isEmpty(wrkDetlList)) {
            throw new CoolException("该模具已经存在工作档,商品模具名称:" + waitPakin.getMatnr());
        }
//        HalfBarcode halfBarcode = halfBarcodeService.selectByZpallet(waitPakin.getBarcode());
        //对模具的规格做处理得到厚度
//        Integer thickness = 0;
//        if (!Cools.isEmpty(mat.getSpecs())){
//            String[] split = mat.getSpecs().split("\\*");
//            thickness = Integer.parseInt(split[1]);
//        }
//        if (halfBarcode == null){
//            HalfBarcode hb = new HalfBarcode();
//            hb.setZpallet(waitPakin.getBarcode());
//            hb.setSpecs(waitPakin.getBarcode().substring(0,1));
//            hb.setAnfme(1);
//            if (Integer.parseInt(waitPakin.getBarcode().substring(0,1))==6){
//                hb.setPrice(2650 - thickness);
//            }else if(Integer.parseInt(waitPakin.getBarcode().substring(0,1))==7){
//                hb.setPrice(1750 - thickness);
//            }else if(Integer.parseInt(waitPakin.getBarcode().substring(0,1))==8){
//                hb.setPrice(800 - thickness);
//            }
//            if (!halfBarcodeService.insert(hb)){
//                throw new CoolException("更新半托信息失败");
//            }
//        }else {
//            if (Integer.parseInt(waitPakin.getBarcode().substring(0,1))==6){
//                halfBarcode.setAnfme(halfBarcode.getAnfme() + 1);
//                halfBarcode.setPrice(2650 - thickness);
//            }else if(Integer.parseInt(waitPakin.getBarcode().substring(0,1))==7){
//                halfBarcode.setAnfme(halfBarcode.getAnfme() + 1);
//                halfBarcode.setPrice(1750 - thickness);
//            }else if(Integer.parseInt(waitPakin.getBarcode().substring(0,1))==8){
//                halfBarcode.setAnfme(halfBarcode.getAnfme() + 1);
//                halfBarcode.setPrice(800 - thickness);
//            }
//            if (!halfBarcodeService.half(halfBarcode)){
//                throw new CoolException("更新半托信息失败");
//            }
//        }
        MatBarcode mb=new MatBarcode();
        mb.setZpallet(waitPakin.getBarcode());
        mb.setMatnr(mat.getMatnr());
        mb.setMaktx(mat.getMaktx());
        mb.setSpecs(mat.getSpecs());
        mb.setModel(mat.getModel());
        if (!matBarcodeService.insert(mb)){
            throw new CoolException("物料托盘绑定失败");
        }
    }
    @Override
    public void addBarcodeMatnrTwo(Mat mat) {
        Mat m = matService.selectById(mat);
        if (m == null){
            throw new CoolException("物料不存在,请先添加物料数据");
        }
        MatBarcode matBarcode = matBarcodeMapper.selectByMatnr(mat.getMatnr());
        if (matBarcode != null){
            throw new CoolException("该物料已经绑定托盘,请勿重复绑定");
        }
        if (mat.getColor().equals("报废")){
            throw new CoolException("该物料已报废,请勿绑定");
        }
//        HalfBarcode halfBarcode = halfBarcodeService.selectByZpallet(mat.getUnit());
        //对模具的规格做处理得到厚度
//        Integer thickness = 0;
//        if (!Cools.isEmpty(mat.getSpecs())){
//            String[] split = mat.getSpecs().split("\\*");
//            thickness = Integer.parseInt(split[1]);
//        }
//        if (halfBarcode == null){
//            HalfBarcode hb = new HalfBarcode();
//            hb.setZpallet(mat.getUnit());
//            hb.setSpecs(mat.getUnit().substring(0,1));
//            hb.setAnfme(1);
//            if (Integer.parseInt(mat.getUnit().substring(0,1))==6){
//                hb.setPrice(2650 - thickness);
//            }else if(Integer.parseInt(mat.getUnit().substring(0,1))==7){
//                hb.setPrice(1750 - thickness);
//            }else if(Integer.parseInt(mat.getUnit().substring(0,1))==8){
//                hb.setPrice(800 - thickness);
//            }
//            if (!halfBarcodeService.insert(hb)){
//                throw new CoolException("更新半托信息失败");
//            }
//        }else {
//            if (Integer.parseInt(mat.getUnit().substring(0,1))==6){
//                halfBarcode.setAnfme(halfBarcode.getAnfme() + 1);
//                halfBarcode.setPrice(halfBarcode.getPrice()- thickness);
//            }else if(Integer.parseInt(mat.getUnit().substring(0,1))==7){
//                halfBarcode.setAnfme(halfBarcode.getAnfme() + 1);
//                halfBarcode.setPrice(halfBarcode.getPrice()- thickness);
//            }else if(Integer.parseInt(mat.getUnit().substring(0,1))==8){
//                halfBarcode.setAnfme(halfBarcode.getAnfme() + 1);
//                halfBarcode.setPrice(halfBarcode.getPrice()- thickness);
//            }
//            if (!halfBarcodeService.half(halfBarcode)){
//                throw new CoolException("更新半托信息失败");
//            }
//        }
        MatBarcode mb=new MatBarcode();
        mb.setZpallet(mat.getUnit());
        mb.setMatnr(mat.getMatnr());
        mb.setMaktx(mat.getMaktx());
        mb.setSpecs(mat.getSpecs());
        mb.setModel(mat.getName());
        if (!matBarcodeService.insert(mb)){
            throw new CoolException("物料托盘绑定失败");
        }
    }
    @Override
    public String page(Map<String, Object> param) {
        Integer pageNo = Integer.valueOf(param.get("curr").toString());
        Integer pageSize = Integer.valueOf(param.get("limit").toString());
        String barcode = (String) param.get("zpallet");
        Integer spec = Integer.valueOf(param.get("spec").toString());
        return matBarcodeMapper.page(pageNo,pageSize,barcode,spec);
    }
    @Override
    public List<MatBarcode> select100() {
        return this.baseMapper.select100();
    }
}