自动化立体仓库 - WMS系统
#
whycq
2024-07-29 5677bbf8ba92c286d59b90321c863c14255c734e
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
@@ -11,6 +12,8 @@
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.entity.result.ZphjcdgzVo;
import com.zy.asrs.entity.result.ZphjcdwcVo;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
@@ -28,6 +31,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2022/4/9
@@ -69,6 +73,8 @@
    @Autowired
    private WrkDetlSingleService wrkDetlSingleService;
    @Autowired
    private WrkMastLogService wrkMastLogService;
    @Autowired
    private WrkMastStaService wrkMastStaService;
    @Autowired
    private WrkMastStaLogService wrkMastStaLogService;
@@ -76,6 +82,8 @@
    private StaDescService staDescService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private ApiLogService apiLogService;
    @Override
    @Transactional
@@ -999,7 +1007,7 @@
        // 根据源站点寻找库位
//        StartupDto dto = commonService.getLocNo(1, 1, param.getPalletizingNo(), null,null,null, locTypeDto);
        StartupDto dto = commonService.getLocNo(1, param.getPalletizingNo(), locTypeDto);
        StartupDto dto = commonService.getLocNo(1, param.getPalletizingNo(), locTypeDto,0);
        // 返回GWCS目标信息
        pushStaNoToGwcs(param.getPalletizingNo(),dto.getStaNo(),dto.getWorkNo());
@@ -1037,26 +1045,26 @@
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            obj.getRolls().forEach(roll -> {
                Mat mat = matService.selectByMatnr(roll.getSpecs());
                if (mat == null) {
                    mat = new Mat();
                    mat.setTagId(6L);
                    mat.setMatnr(roll.getSpecs());
                    mat.setMaktx(roll.getSpecs());
                    mat.setSpecs(roll.getSpecs());
                    mat.setStatus(1);
                    mat.setCreateTime(now);
                    mat.setUpdateTime(now);
                    if (!matService.insert(mat)) {
                        throw new CoolException("物料导入失败!");
                    }
                }
//                Mat mat = matService.selectByMatnr(roll.getSpecs());
//                if (mat == null) {
//                    mat = new Mat();
//                    mat.setTagId(6L);
//                    mat.setMatnr(roll.getSpecs());
//                    mat.setMaktx(roll.getSpecs());
//                    mat.setSpecs(roll.getSpecs());
//                    mat.setStatus(1);
//                    mat.setCreateTime(now);
//                    mat.setUpdateTime(now);
//                    if (!matService.insert(mat)) {
//                        throw new CoolException("物料导入失败!");
//                    }
//                }
                wrkDetl.setWrkNo(wrkMast.getWrkNo());
                wrkDetl.setMatnr(roll.getSpecs()); // 规格
                wrkDetl.setMaktx(roll.getSpecs()); //规格
                wrkDetl.setBatch(roll.getBoxNo()); // 箱号
                wrkDetl.setModel(roll.getRollNo()); // 卷号
                wrkDetl.setBrand(""); // 木箱类型
                wrkDetl.setBrand(obj.getPackageGroupNo()); // 包装组号
                wrkDetl.setZpallet(param.getBarcode()); // 托盘吗
                wrkDetl.setOrigin(obj.getBoxPos()); // 木箱在托盘位置
                wrkDetl.setWeight(roll.getNetWeight()); // 净重
@@ -1295,10 +1303,131 @@
        return "出库成功";
    }
    @Autowired
    private ApiLogService apiLogService;
    @Override
    @Transactional
    public R zphjDw(ZphjckdwParam param) {
        // 根据任务号得到工作主档
        if (Cools.isEmpty(param.getWorkNo())) {
            throw new CoolException("工作号不能为空!");
        }
        WrkMast wrkMast = wrkMastService.selectById(param.getWorkNo());
        if (wrkMast == null) {
            throw new CoolException("工作档不存在!");
        }
        if (wrkMast.getWrkSts() != 2 || wrkMast.getIoType() != 103) {
            throw new CoolException("工作档当前状态不为2/出库类型不为拣料!");
        }
        // 更新工作档状态2.设备上走->42.等待码垛
        wrkMast.setWrkSts(42L);
        wrkMastService.updateById(wrkMast);
    private void pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo) {
        // 查询要拆的位置,只有一个
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        List<String> collect = wrkDetls.stream().map(WrkDetl::getOrigin).distinct().collect(Collectors.toList());
        String position = collect.get(0);
        // 返回拆垛规则
        ZphjcdgzVo zphjcdgzVo = new ZphjcdgzVo();
        zphjcdgzVo.setWorkNo(wrkMast.getWrkNo());
        zphjcdgzVo.setPosition(position);
        return R.ok(zphjcdgzVo);
    }
    @Override
    @Transactional
    public R zphjCdwc(ZphjcdwcParam param) {
        if (Cools.isEmpty(param.getWorkNo())) {
            throw new CoolException("工作号不能为空!");
        }
        WrkMast wrkMast = wrkMastService.selectById(param.getWorkNo());
        if (wrkMast == null) {
            throw new CoolException("工作档不存在!");
        }
        if (wrkMast.getWrkSts() != 42 || wrkMast.getIoType() != 103) {
            throw new CoolException("工作档当前状态不为42/出库类型不为拣料!");
        }
        // 保存工作主档历史档
        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
            throw new CoolException("保存工作主档历史档失败");
        }
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", wrkMast.getIoType() - 50)
                .eq("stn_no", wrkMast.getStaNo()) // 作业站点 = 拣料出库的目标站
                .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            throw new CoolException("入库路径不存在");
        }
        // 堆垛机站点(目标站)
        Integer staNo = staDesc.getCrnStn();
        // 更新工作类型103->53
        wrkMast.setIoType(53);
        wrkMast.setWrkSts(52L); // 工作状态42->52.设备上走(拆垛完成)
        // 目标站点源站点转换
        wrkMast.setSourceStaNo(wrkMast.getStaNo());
        wrkMast.setStaNo(staNo);
        // 目标库位=源库位
        wrkMast.setLocNo(wrkMast.getSourceLocNo());
        // 源库位清除
        wrkMast.setSourceLocNo("");
        wrkMast.setModiTime(new Date());
        int outStaNo = 0; // 出库源站点
        if (staNo == 3044 || staNo == 3045) {
             outStaNo = 3046;
        } else if(staNo == 3040 || staNo == 3041) {
             outStaNo = 3042;
        }
        if (outStaNo == 0) {
            throw new CoolException("出库源站点转换有误:" + staNo);
        }
        // 获取出库物料
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        int descFlag = getType(wrkDetls);
        // get0原托盘回流信息,get1拆垛出来物料出库信息
        List<ZphjcdwcVo> zphjcdwcVos = new ArrayList<>();
        ZphjcdwcVo zphjcdwcVo1 = new ZphjcdwcVo();
        zphjcdwcVo1.setWorkNo(wrkMast.getWrkNo());
        zphjcdwcVo1.setStaNo(wrkMast.getStaNo());
        zphjcdwcVo1.setSourceStaNo(wrkMast.getSourceStaNo());
        zphjcdwcVos.add(zphjcdwcVo1);
        ZphjcdwcVo zphjcdwcVo2 = new ZphjcdwcVo();
        zphjcdwcVo2.setSourceStaNo(outStaNo);
        zphjcdwcVo2.setStaNo(3106); // 3106/3077
        zphjcdwcVo2.setDescFlag(descFlag);
        zphjcdwcVos.add(zphjcdwcVo2);
        // 更新工作主档
        wrkMastService.updateById(wrkMast);
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        locMast.setLocSts("Q");
        locMast.setModiTime(new Date());
        if (!locMastService.updateById(locMast)) {
            throw new CoolException("修改库位状态失败");
        }
        // 下发回库的目标站点和拆垛的出库目标站点给gwcs
        return R.ok(zphjcdwcVos);
    }
    /**
     * 根据出库物料明细判断是否去贴标(单卷贴标,多卷不贴标)
     * @param wrkDetls 物料明细
     * @return 0.多卷不贴标路径,1.单卷贴标路径
     */
    private int getType(List<WrkDetl> wrkDetls) {
        return wrkDetls.size() > 1 ? 0 : 1; // 一条记录就是一卷
    }
    public void pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo) {
        boolean success = false;
        // 获取请求头
        Map<String, Object> headers = getHeaders();
@@ -1312,8 +1441,8 @@
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(MesConstant.URL)
                    .setPath(MesConstant.PAKIN_URL)
                    .setUri(MesConstant.GWCS_IP_PORT)
                    .setPath(MesConstant.GWCS_FPKW_URL)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
@@ -1337,10 +1466,10 @@
                // 保存接口日志
                apiLogService.save(
                        "入库",
                        MesConstant.URL + MesConstant.PAKIN_URL,
                        MesConstant.GWCS_IP_PORT + MesConstant.GWCS_FPKW_URL,
                        null,
                        "127.0.0.1",
                        jsonObject.toJSONString(),
                        body,
                        response,
                        success
                );