package com.zy.asrs.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.BaseRes;
|
import com.core.common.Cools;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.entity.param.CombParam;
|
import com.zy.asrs.entity.param.MobileAdjustParam;
|
import com.zy.asrs.service.*;
|
import com.zy.common.model.DetlDto;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 移动端服务核心类
|
* Created by vincent on 2020/6/28
|
*/
|
@Slf4j
|
@Service
|
public class AgvMobileServiceImpl implements AgvMobileService {
|
|
@Autowired
|
private MatService matService;
|
@Autowired
|
private AgvWaitPakinService agvWaitPakinService;
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private AgvBasDevpService agvBasDevpService;
|
|
|
@Override
|
@Transactional
|
public String comb(CombParam param, Long userId) {
|
if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
|
throw new CoolException(BaseRes.PARAM);
|
}
|
|
if (agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().
|
eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
|
throw new CoolException(param.getBarcode() + "数据正在进行入库");
|
}
|
|
Date now = new Date();
|
//无单组托
|
if (Cools.isEmpty(param.getOrderNo())) {
|
List<DetlDto> detlDtos = new ArrayList<>();
|
param.getCombMats().forEach(elem -> {
|
DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
|
if (DetlDto.has(detlDtos, detlDto)) {
|
DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
|
assert one != null;
|
one.setAnfme(one.getAnfme() + detlDto.getAnfme());
|
} else {
|
detlDtos.add(detlDto);
|
}
|
});
|
|
detlDtos.forEach(detlDto -> {
|
Mat mat = matService.selectByMatnr(detlDto.getMatnr());
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
|
}
|
AgvWaitPakin waitPakin = new AgvWaitPakin();
|
waitPakin.sync(mat);
|
waitPakin.setBatch(detlDto.getBatch());
|
waitPakin.setZpallet(param.getBarcode()); // 托盘码
|
waitPakin.setIoStatus("N"); // 入出状态
|
waitPakin.setAnfme(detlDto.getAnfme()); // 数量
|
waitPakin.setStatus("Y"); // 状态
|
waitPakin.setAppeUser(userId);
|
waitPakin.setAppeTime(now);
|
waitPakin.setModiUser(userId);
|
waitPakin.setModiTime(now);
|
if (!agvWaitPakinService.insert(waitPakin)) {
|
throw new CoolException("保存入库通知档失败");
|
}
|
});
|
}else {
|
//关联组托
|
Order order = orderService.selectByNo(param.getOrderNo());
|
if (order.getSettle() > 2) {
|
throw new CoolException("单据编号已过期");
|
}
|
// 生成入库通知档
|
List<DetlDto> detlDtos = new ArrayList<>();
|
param.getCombMats().forEach(elem -> {
|
|
// 订单明细数量校验
|
OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch());
|
if (elem.getAnfme() > orderDetl.getEnableQty()) {
|
throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
|
}
|
// 修改订单明细数量
|
if (!orderDetlService.increase(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) {
|
throw new CoolException("修改单据明细数量失败");
|
}
|
|
DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
|
if (DetlDto.has(detlDtos, detlDto)) {
|
DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
|
assert one != null;
|
one.setAnfme(one.getAnfme() + detlDto.getAnfme());
|
} else {
|
detlDtos.add(detlDto);
|
}
|
});
|
for (DetlDto detlDto : detlDtos) {
|
Mat mat = matService.selectByMatnr(detlDto.getMatnr());
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
|
}
|
AgvWaitPakin waitPakin = new AgvWaitPakin();
|
waitPakin.sync(mat);
|
waitPakin.setOrderNo(order.getOrderNo()); // 单据编号
|
waitPakin.setBatch(detlDto.getBatch()); // 序列码
|
waitPakin.setZpallet(param.getBarcode()); // 托盘码
|
waitPakin.setIoStatus("N"); // 入出状态
|
waitPakin.setAnfme(detlDto.getAnfme()); // 数量
|
waitPakin.setStatus("Y"); // 状态
|
waitPakin.setAppeUser(userId);
|
waitPakin.setAppeTime(now);
|
waitPakin.setModiUser(userId);
|
waitPakin.setModiTime(now);
|
if (!agvWaitPakinService.insert(waitPakin)) {
|
throw new CoolException("保存入库通知档失败");
|
}
|
}
|
orderService.updateSettle(order.getId(), 2L, userId);
|
}
|
|
if(StringUtils.isEmpty(param.getLocno())){
|
return "组托成功";
|
}else {
|
combBinding(param.getBarcode(),param.getLocno());
|
return "组托成功,绑定站点成功";
|
}
|
|
}
|
|
@Override
|
@Transactional
|
public void adjust(MobileAdjustParam param, Long userId) {
|
|
}
|
|
@Override
|
@Transactional
|
public void packComb(CombParam param, Long userId) {
|
|
}
|
|
@Override
|
public void combBinding(String barcode, String stationCode) {
|
EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>();
|
wrapper.eq("dev_no",stationCode);
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(wrapper);
|
if(agvBasDevp == null){
|
throw new CoolException(stationCode + "站点信息错误");
|
}
|
if(!"O".equals(agvBasDevp.getLocSts())){
|
throw new CoolException(stationCode + "该站点货位状态非空");
|
}
|
|
agvBasDevp.setBarcode(barcode);
|
agvBasDevp.setLocSts("F");
|
agvBasDevpService.update(agvBasDevp,wrapper);
|
}
|
|
public List<AgvBasDevp> getAgvBasDevpByFloor(int floor) {
|
EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>();
|
wrapper.eq("floor",floor).eq("cache_shelves","Y").eq("sts_loc","F");
|
return agvBasDevpService.selectList(wrapper);
|
}
|
|
}
|