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<WaitPakin>().
|
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<WaitPakin>()
|
.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<WaitPakin>()
|
.eq("supplier", combMat.getSupplier())
|
.eq("matnr", combMat.getMatNo())
|
.eq("mnemonic", param.getMnemonic())
|
.isNull("zpallet"));
|
} else {
|
Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>();
|
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<WaitPakin>().
|
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<WaitPakin>()
|
.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<WaitPakin>()
|
.eq("supplier", combMat.getSupplier())
|
.eq("matnr", combMat.getMatNo())
|
.eq("mnemonic", combMat.getMnemonic())
|
.isNull("zpallet"));
|
} else {
|
Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>();
|
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("更新数据失败");
|
}
|
|
}
|
|
}
|
|
|
}
|
}
|