#
luxiaotao1123
2020-06-19 61593c7f55cf24d81746aa041e60d0ccccd8b80a
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -8,8 +8,10 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
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.service.*;
import com.zy.common.model.LocDetlDto;
import com.zy.common.model.OutLocDto;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
@@ -42,6 +44,10 @@
    private StaDescService staDescService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private MatCodeService matCodeService;
    @Autowired
    private AdjDetlService adjDetlService;
    @Override
    @Transactional
@@ -116,19 +122,19 @@
        // 目标站点状态检测
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
        List<LocDetl> locDetls = new ArrayList<>();
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl locDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(locDetl.getLocNo(), locDetl.getMatnr())) {
            if (!Cools.isEmpty(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getCount())) {
                LocDetl sqlParam = new LocDetl();
                sqlParam.setLocNo(locDetl.getLocNo());
                sqlParam.setMatnr(locDetl.getMatnr());
                LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam));
                if (null != one) locDetls.add(one);
                if (null != one) locDetlDtos.add(new LocDetlDto(one, locDetl.getCount()));
            }
        }
        if (!locDetls.isEmpty()) {
        if (!locDetlDtos.isEmpty()) {
            // 启动出库开始
            stockOut(staNo, locDetls, userId);
            stockOut(staNo, locDetlDtos, userId);
        } else {
            throw new CoolException("库位物料不存在");
        }
@@ -136,20 +142,18 @@
    @Override
    @Transactional
    public void stockOut(BasDevp staNo, List<LocDetl> locDetls, Long userId) {
        // 生成工作号
        int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Long userId) {
        // 合并同类项
        Set<String> locNos = new HashSet<>();
        locDetls.forEach(locDetl -> locNos.add(locDetl.getLocNo()));
        locDetlDtos.forEach(dto -> locNos.add(dto.getLocDetl().getLocNo()));
        List<OutLocDto> dtos = new ArrayList<>();
        for (String locNo : locNos) {
            List<LocDetl> list = new ArrayList<>();
            Iterator<LocDetl> iterator = locDetls.iterator();
            List<LocDetlDto> list = new ArrayList<>();
            Iterator<LocDetlDto> iterator = locDetlDtos.iterator();
            while (iterator.hasNext()) {
                LocDetl locDetl = iterator.next();
                if (locNo.equals(locDetl.getLocNo())) {
                    list.add(locDetl);
                LocDetlDto dto = iterator.next();
                if (locNo.equals(dto.getLocDetl().getLocNo())) {
                    list.add(dto);
                    iterator.remove();
                }
            }
@@ -168,6 +172,8 @@
            if (Cools.isEmpty(staDesc)) {
                throw new CoolException("出库路径不存在");
            }
            // 生成工作号
            int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
            // 生成工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
@@ -192,19 +198,20 @@
                throw new CoolException("保存工作档失败,出库库位号:"+dto.getLocNo());
            }
            // 生成工作档明细
            for (LocDetl locDetl : dto.getLocDetls()) {
            for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
                if (detlDto.getCount() <= 0.0D) {continue;}
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(new Date());
                wrkDetl.setMatnr(locDetl.getMatnr());
                wrkDetl.setAnfme(locDetl.getAnfme());
                wrkDetl.setZmatid(locDetl.getZmatid());
                wrkDetl.setTbpos(locDetl.getTbpos());
                wrkDetl.setTbnum(locDetl.getTbnum());
                wrkDetl.setLgnum(locDetl.getLgnum());
                wrkDetl.setAltme(locDetl.getAltme());
                wrkDetl.setBname(locDetl.getBname());
                wrkDetl.setMaktx(locDetl.getMaktx());
                wrkDetl.setMatnr(detlDto.getLocDetl().getMatnr());
                wrkDetl.setAnfme(detlDto.getCount()); // 数量
                wrkDetl.setZmatid(detlDto.getLocDetl().getZmatid());
                wrkDetl.setTbpos(detlDto.getLocDetl().getTbpos());
                wrkDetl.setTbnum(detlDto.getLocDetl().getTbnum());
                wrkDetl.setLgnum(detlDto.getLocDetl().getLgnum());
                wrkDetl.setAltme(detlDto.getLocDetl().getAltme());
                wrkDetl.setBname(detlDto.getLocDetl().getBname());
                wrkDetl.setMaktx(detlDto.getLocDetl().getMaktx());
                wrkDetl.setAppeTime(new Date());
                wrkDetl.setAppeUser(userId);
                wrkDetl.setModiTime(new Date());
@@ -393,6 +400,13 @@
            wrkDetl.setIoTime(new Date());
            wrkDetl.setMatnr(locDetl.getMatnr());
            wrkDetl.setAnfme(locDetl.getAnfme());
            wrkDetl.setZmatid(locDetl.getZmatid());
            wrkDetl.setTbpos(locDetl.getTbpos());
            wrkDetl.setTbnum(locDetl.getTbnum());
            wrkDetl.setLgnum(locDetl.getLgnum());
            wrkDetl.setAltme(locDetl.getAltme());
            wrkDetl.setBname(locDetl.getBname());
            wrkDetl.setMaktx(locDetl.getMaktx());
            wrkDetl.setAppeTime(new Date());
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(new Date());
@@ -421,7 +435,7 @@
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("预约目标库位入库失败,状态:"+loc.getLocType$());
            throw new CoolException("移转失败,目标库位状态:"+loc.getLocType$());
        }
    }
@@ -451,6 +465,86 @@
    @Override
    @Transactional
    public void adjustLocDetl(LocDetlAdjustParam param, Long userId) {
        LocMast locMast = locMastService.selectById(param.getLocNo());
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("库位不存在");
        }
        for (LocDetlAdjustParam.LocDetlAdjust adjust : param.getList()) {
            if (Cools.isEmpty(adjust.getMatnr())) {
                throw new CoolException(BaseRes.PARAM);
            }
            LocDetl sqlParam = new LocDetl();
            sqlParam.setLocNo(locMast.getLocNo());
            sqlParam.setMatnr(adjust.getMatnr());
            LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam));
            // 保存新库存明细
            if (Cools.isEmpty(one)) {
                if (adjust.getCount() == 0){
                    continue;
                }
                MatCode matCode = matCodeService.selectById(adjust.getMatnr());
                LocDetl locDetl = new LocDetl();
                locDetl.setLocNo(locMast.getLocNo());
                locDetl.setMatnr(matCode.getMatNo());
                locDetl.setMaktx(matCode.getMatName()); // 物料描述
                locDetl.setAnfme(adjust.getCount()); // 数量
                locDetl.setAltme(matCode.getStr1()); // 单位
                // todo:luxiaoao
                locDetl.setLgnum("待定"); // 仓库号
                locDetl.setTbnum(0); // 转储请求编号
                locDetl.setTbpos(0); // 行项目
                locDetl.setZmatid("待定"); // 物料标签ID
                locDetl.setZpallet("待定"); // 托盘条码
                locDetl.setModiUser(userId); // 操作人员信息
                locDetl.setModiTime(new Date());
                locDetl.setAppeUser(userId);
                locDetl.setAppeTime(new Date());
                if (!locDetlService.insert(locDetl)) {
                    throw new CoolException("保存库存明细失败");
                }
                // 保存调整记录
                AdjDetl adjDetl = new AdjDetl();
                adjDetl.setLocNo(locDetl.getLocNo());
                adjDetl.setMatNo(locDetl.getMatnr());
                adjDetl.setOriQty(0.0D);
                adjDetl.setAdjQty(adjust.getCount());
                adjDetlService.save(adjDetl, userId);
            // 修改原库存明细
            } else {
                // 如果数量修改,则更新库存明细
                if (!adjust.getCount().equals(one.getAnfme())) {
                    // 当数量被修改为 0 时,直接清除库存明细
                    if (adjust.getCount() == 0) {
                        if (!locDetlService.delete(new EntityWrapper<>(one))) {
                            throw new CoolException("清除库存明细失败");
                        }
                    } else {
                        LocDetl sqlParam1 = new LocDetl();
                        sqlParam1.setAnfme(adjust.getCount());
                        sqlParam1.setModiTime(new Date());
                        sqlParam1.setModiUser(userId);
                        if (!locDetlService.update(sqlParam1, new EntityWrapper<LocDetl>()
                                .eq("loc_no", locMast.getLocNo())
                                .eq("matnr", adjust.getMatnr()))) {
                            throw new CoolException("修改库存明细失败");
                        }
                    }
                    // 保存调整记录
                    AdjDetl adjDetl = new AdjDetl();
                    adjDetl.setLocNo(locMast.getLocNo());
                    adjDetl.setMatNo(adjust.getMatnr());
                    adjDetl.setOriQty(one.getAnfme());
                    adjDetl.setAdjQty(adjust.getCount());
                    adjDetlService.save(adjDetl, userId);
                }
            }
        }
    }
    @Override
    @Transactional
    public void cancelWrkMast(String workNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        if (Cools.isEmpty(wrkMast)){