package com.zy.asrs.common.wms.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.zy.asrs.common.domain.dto.DetlDto;
|
import com.zy.asrs.common.domain.param.MobileAdjustParam;
|
import com.zy.asrs.common.openapi.entity.param.CombParam;
|
import com.zy.asrs.common.wms.entity.*;
|
import com.zy.asrs.common.wms.service.*;
|
import com.zy.asrs.framework.common.BaseRes;
|
import com.zy.asrs.framework.common.Cools;
|
import com.zy.asrs.framework.exception.CoolException;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.Iterator;
|
import java.util.List;
|
|
/**
|
* 移动端服务核心类
|
*/
|
@Slf4j
|
@Service
|
public class MobileServiceImpl implements MobileService {
|
|
@Autowired
|
private WaitPakinService waitPakinService;
|
@Autowired
|
private MatService matService;
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private BasDevpService basDevpService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
|
@Override
|
@Transactional
|
public void comb(CombParam param, Long userId, Long hostId) {
|
if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
|
throw new CoolException(BaseRes.PARAM);
|
}
|
// 判断是否有相同条码的数据
|
if (waitPakinService.count(new LambdaQueryWrapper<WaitPakin>().
|
eq(WaitPakin::getZpallet, param.getBarcode()).eq(WaitPakin::getIoStatus, "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);
|
}
|
});
|
|
|
for (DetlDto detlDto : detlDtos) {
|
Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, hostId));
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
|
}
|
WaitPakin waitPakin = new WaitPakin();
|
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 (!waitPakinService.save(waitPakin)) {
|
throw new CoolException("保存入库通知档失败");
|
}
|
}
|
// 关联组托
|
} else {
|
Order order = orderService.selectByNo(param.getOrderNo(), hostId);
|
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(), hostId, 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.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, hostId));
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
|
}
|
WaitPakin waitPakin = new WaitPakin();
|
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 (!waitPakinService.save(waitPakin)) {
|
throw new CoolException("保存入库通知档失败");
|
}
|
}
|
orderService.updateSettle(order.getId(), 2L, userId, hostId);
|
}
|
|
}
|
|
@Override
|
public void adjust(MobileAdjustParam param, Long userId, Long hostId) {
|
BasDevp basDevp = basDevpService.getOne(new LambdaQueryWrapper<BasDevp>().eq(BasDevp::getDevNo, param.getStaNo()).eq(BasDevp::getHostId, hostId));
|
if (null == basDevp || basDevp.getWrkNo() == null) {
|
throw new CoolException(param.getStaNo() + "盘点站无效");
|
}
|
if (!param.getWrkNo().equals(basDevp.getWrkNo())) {
|
throw new CoolException(param.getStaNo() + "盘点站更新,请重新检索");
|
}
|
WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, param.getWrkNo()).eq(WrkMast::getHostId, hostId));
|
if (wrkMast.getWrkSts() < 10) {
|
throw new CoolException("盘点无效,任务已盘点再入库");
|
}
|
Date now = new Date();
|
List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
|
|
List<WrkDetl> list = param.getWrkDetls();
|
|
// 修改数量
|
Iterator<WrkDetl> iterator = wrkDetls.iterator();
|
while (iterator.hasNext()) {
|
WrkDetl wrkDetl = iterator.next();
|
Iterator<WrkDetl> iterator1 = list.iterator();
|
while (iterator1.hasNext()) {
|
WrkDetl wrkDetl1 = iterator1.next();
|
if (wrkDetl1.getAnfme() == 0) {
|
iterator1.remove();
|
}
|
if (wrkDetl.getMatnr().equals(wrkDetl1.getMatnr()) && Cools.eq(wrkDetl.getBatch(), wrkDetl1.getBatch())) {
|
if (!wrkDetl.getAnfme().equals(wrkDetl1.getAnfme())) {
|
// todo 盘点记录、保存调整记录
|
// 修改明细
|
if (!wrkDetlService.updateAnfme(wrkDetl1.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
|
throw new CoolException(wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "序列码修改数量失败");
|
}
|
}
|
iterator.remove();
|
iterator1.remove();
|
}
|
}
|
}
|
|
// 删除明细
|
for (WrkDetl wrkDetl : wrkDetls) {
|
// todo 盘点记录、保存调整记录
|
if (!wrkDetlService.updateAnfme(-1.0D, wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
|
throw new CoolException("删除" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "序列码任务明细失败");
|
}
|
}
|
|
// 添加明细
|
for (WrkDetl wrkDetl : list) {
|
if (wrkDetl.getAnfme() == 0.0D) { continue; }
|
// todo 盘点记录、保存调整记录
|
String orderNo = wrkDetl.getOrderNo();
|
Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, wrkDetl.getMatnr()).eq(Mat::getHostId, hostId));
|
wrkDetl.sync(mat);
|
wrkDetl.setOrderNo(orderNo);
|
wrkDetl.setModiTime(now);
|
wrkDetl.setModiUser(userId);
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setAppeUser(userId);
|
if (!wrkDetlService.save(wrkDetl)) {
|
throw new CoolException("添加" + wrkMast.getWrkNo() + "盘点任务," + wrkDetl.getMatnr() + "商品," + wrkDetl.getBatch() + "序列码任务明细失败");
|
}
|
}
|
|
// 修改盘点任务主档状态
|
wrkMast.setFullPlt(wrkDetlService.count(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId)) != 0 ? "Y" : "N");
|
wrkMast.setModiTime(now);
|
wrkMast.setModiUser(String.valueOf(userId));
|
if (!wrkMastService.updateById(wrkMast)) {
|
throw new CoolException("修改盘点任务主档失败");
|
}
|
|
}
|
}
|