package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.BasAgv; import com.zy.asrs.entity.MatCode; import com.zy.asrs.entity.WaitPakin; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.service.BasAgvService; import com.zy.asrs.service.MatCodeService; import com.zy.asrs.service.MobileService; import com.zy.asrs.service.WaitPakinService; import com.zy.asrs.utils.VersionUtils; import com.zy.common.model.agv.AgvCommand; import com.zy.common.model.agv.AgvResult; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.Date; /** * 移动端服务核心类 * Created by vincent on 2020/6/28 */ @Slf4j @Service public class MobileServiceImpl implements MobileService { @Value("${agv.url}") private String agvUrl; @Autowired private MatCodeService matCodeService; @Autowired private WaitPakinService waitPakinService; @Autowired private BasAgvService basAgvService; @Override @Transactional public void comb(CombParam param, Long userId) { if (Cools.isEmpty(param.getBarcode())) { throw new CoolException(BaseRes.PARAM); } if (Cools.isEmpty(param.getCombMats()) && Cools.isEmpty(param.getProductCode())) { throw new CoolException(BaseRes.PARAM); } int count = waitPakinService.selectCount(new EntityWrapper(). eq("zpallet", param.getBarcode()).eq("io_status", "N")); if (count > 0) { throw new CoolException("条码数据已存在"); } if (Cools.isEmpty(param.getBillNo())) { if (Cools.isEmpty(param.getProductCode())) { for (CombParam.CombMat combMat : param.getCombMats()) { MatCode matCode = matCodeService.selectById(combMat.getMatNo()); if (Cools.isEmpty(matCode)) { throw new CoolException("物料数据错误"); } WaitPakin waitPakin = new WaitPakin(); waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setStatus("Y"); // 状态 waitPakin.setAnfme(combMat.getCount()); // 数量 waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(new Date()); waitPakin.setModiUser(userId); waitPakin.setModiTime(new Date()); VersionUtils.setWaitPakIn(waitPakin, matCode); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存数据失败"); } } // 小车入库搬运命令 ---------------------------------------------------- if (!Cools.isEmpty(param.getAgvSite())) { BasAgv idleAgv = basAgvService.selectIdleAgv(); AgvCommand command = new AgvCommand(); command.setAgvId(idleAgv.getAgvId()); command.setInterCode(basAgvService.getAgvWorkNo()); command.setBeginLoc(String.valueOf(param.getAgvSite())); command.setEndLoc("1088"); log.info(JSON.toJSONString(command)); String result; try { result = new HttpHandler.Builder() .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty") .setJson(JSON.toJSONString(command)) .build() .doPost(); } catch (IOException e) { e.printStackTrace(); throw new CoolException("访问AGV接口失败"); } AgvResult agvResult = JSON.parseObject(result, AgvResult.class); log.info(JSON.toJSONString(agvResult)); if (!agvResult.getResult()) { log.error("agv命令发送失败[agvId={}],错误信息={}", command.getAgvId(), agvResult.getExplain()); throw new CoolException("agv命令发送失败[agvId=" + command.getAgvId() + "],错误信息=" + agvResult.getExplain()); } } } else { WaitPakin waitPakin = new WaitPakin(); waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setStatus("Y"); // 状态 waitPakin.setAnfme((double) 1); // 数量 waitPakin.setIoStatus("N"); // 入出状态 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(new Date()); waitPakin.setModiUser(userId); waitPakin.setModiTime(new Date()); waitPakin.setMatnr(param.getProductCode()); // 物料编号 waitPakin.setMaktx(param.getProductCode()); // 物料描述 waitPakin.setLgnum(param.getProductCode()); // 规格 waitPakin.setType(param.getProductCode()); // 物料类别 waitPakin.setMnemonic(param.getProductCode()); // 助记码 waitPakin.setSupplier(param.getProductCode()); // 默认供应商 waitPakin.setWarehouse(param.getProductCode()); // 默认仓库 waitPakin.setBrand(param.getProductCode()); // 品牌 waitPakin.setAltme(param.getProductCode()); // 单位 if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存数据失败"); } } } else { // 关联通知单组托 for (CombParam.CombMat combMat : param.getCombMats()) { WaitPakin one = waitPakinService.selectOne(new EntityWrapper() .eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .isNull("zpallet")); if (one == null) { throw new CoolException("通知单不存在" + combMat.getMatNo() + "数据!"); } if (combMat.getCount() > one.getAnfme()) { throw new CoolException(combMat.getMatNo() + "物料数量不足!"); } MatCode matCode = matCodeService.selectById(combMat.getMatNo()); if (Cools.isEmpty(matCode)) { throw new CoolException("物料数据错误"); } WaitPakin waitPakin = one.clone(); waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setAnfme(combMat.getCount()); // 数量 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(new Date()); waitPakin.setModiUser(userId); waitPakin.setModiTime(new Date()); waitPakin.setSupplier(combMat.getSupplier()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存数据失败"); } // 减少通知单上该物料组托数量 if (waitPakin.getAnfme() >= one.getAnfme()) { waitPakinService.delete(new EntityWrapper() .eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .eq("mnemonic", param.getMnemonic()) .isNull("zpallet")); } else { Wrapper wrapper = new EntityWrapper(); if ("".equals(param.getMnemonic())) { wrapper.eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .isNull("zpallet"); } else { wrapper.eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .eq("mnemonic", param.getMnemonic()) .isNull("zpallet"); } WaitPakin pakin = new WaitPakin(); pakin.setAnfme(one.getAnfme() - waitPakin.getAnfme()); if (!waitPakinService.update(pakin, wrapper)) { throw new CoolException("更新数据失败"); } } } // 小车入库搬运命令 ---------------------------------------------------- if (!Cools.isEmpty(param.getCombMats()) && !Cools.isEmpty(param.getAgvSite())) { BasAgv idleAgv = basAgvService.selectIdleAgv(); AgvCommand command = new AgvCommand(); command.setAgvId(idleAgv.getAgvId()); command.setInterCode(basAgvService.getAgvWorkNo()); command.setBeginLoc(String.valueOf(param.getAgvSite())); command.setEndLoc("1088"); log.info(JSON.toJSONString(command)); String result; try { result = new HttpHandler.Builder() .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty") .setJson(JSON.toJSONString(command)) .build() .doPost(); } catch (IOException e) { e.printStackTrace(); throw new CoolException("访问AGV接口失败"); } AgvResult agvResult = JSON.parseObject(result, AgvResult.class); log.info(JSON.toJSONString(agvResult)); if (!agvResult.getResult()) { log.error("agv命令发送失败[agvId={}],错误信息={}", command.getAgvId(), agvResult.getExplain()); throw new CoolException("agv命令发送失败[agvId=" + command.getAgvId() + "],错误信息=" + agvResult.getExplain()); } } } } @Override @Transactional public void combBatch(CombParam param, Long userId) { if (Cools.isEmpty(param.getBarcode())) { throw new CoolException(BaseRes.PARAM); } if (Cools.isEmpty(param.getCombMats()) && Cools.isEmpty(param.getProductCode())) { throw new CoolException(BaseRes.PARAM); } int count = waitPakinService.selectCount(new EntityWrapper(). eq("zpallet", param.getBarcode()).eq("io_status", "N")); if (count > 0) { throw new CoolException("条码数据已存在"); } // 关联通知单组托 for (CombParam.CombMat combMat : param.getCombMats()) { WaitPakin one = waitPakinService.selectOne(new EntityWrapper() .eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .isNull("zpallet")); if (one == null) { throw new CoolException("通知单不存在" + combMat.getMatNo() + "数据!"); } if (combMat.getCount() > one.getAnfme()) { throw new CoolException(combMat.getMatNo() + "物料数量不足!"); } MatCode matCode = matCodeService.selectById(combMat.getMatNo()); if (Cools.isEmpty(matCode)) { throw new CoolException("物料数据错误"); } WaitPakin waitPakin = one.clone(); waitPakin.setZpallet(param.getBarcode()); // 托盘码 waitPakin.setAnfme(combMat.getCount()); // 数量 waitPakin.setAppeUser(userId); waitPakin.setAppeTime(new Date()); waitPakin.setModiUser(userId); waitPakin.setModiTime(new Date()); waitPakin.setSupplier(combMat.getSupplier()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("保存数据失败"); } // 减少通知单上该物料组托数量 if (waitPakin.getAnfme() >= one.getAnfme()) { waitPakinService.delete(new EntityWrapper() .eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .eq("mnemonic", combMat.getMnemonic()) .isNull("zpallet")); } else { Wrapper wrapper = new EntityWrapper(); if ("".equals(param.getMnemonic())) { wrapper.eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .isNull("zpallet"); } else { wrapper.eq("supplier", combMat.getSupplier()) .eq("matnr", combMat.getMatNo()) .eq("mnemonic", combMat.getMnemonic()) .isNull("zpallet"); } WaitPakin pakin = new WaitPakin(); pakin.setAnfme(one.getAnfme() - waitPakin.getAnfme()); pakin.setSupplier(combMat.getSupplier()); pakin.setMatnr(combMat.getMatNo()); pakin.setMnemonic(combMat.getMnemonic()); if (!waitPakinService.update(pakin, wrapper)) { throw new CoolException("更新数据失败"); } } } // 小车入库搬运命令 ---------------------------------------------------- if (!Cools.isEmpty(param.getCombMats()) && !Cools.isEmpty(param.getAgvSite())) { BasAgv idleAgv = basAgvService.selectIdleAgv(); AgvCommand command = new AgvCommand(); command.setAgvId(idleAgv.getAgvId()); command.setInterCode(basAgvService.getAgvWorkNo()); command.setBeginLoc(String.valueOf(param.getAgvSite())); command.setEndLoc("1088"); log.info(JSON.toJSONString(command)); String result; try { result = new HttpHandler.Builder() .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty") .setJson(JSON.toJSONString(command)) .build() .doPost(); } catch (IOException e) { e.printStackTrace(); throw new CoolException("访问AGV接口失败"); } AgvResult agvResult = JSON.parseObject(result, AgvResult.class); log.info(JSON.toJSONString(agvResult)); if (!agvResult.getResult()) { log.error("agv命令发送失败[agvId={}],错误信息={}", command.getAgvId(), agvResult.getExplain()); throw new CoolException("agv命令发送失败[agvId=" + command.getAgvId() + "],错误信息=" + agvResult.getExplain()); } } } }