package zy.cloud.wms.manager.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.Cools;
|
import com.core.common.R;
|
import com.core.common.SnowflakeIdWorker;
|
import com.core.exception.CoolException;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import zy.cloud.wms.common.model.OrderStoDto;
|
import zy.cloud.wms.common.service.MainService;
|
import zy.cloud.wms.common.utils.VersionUtils;
|
import zy.cloud.wms.manager.entity.*;
|
import zy.cloud.wms.manager.entity.param.InitPakoutParam;
|
import zy.cloud.wms.manager.entity.param.StockConfirmParam;
|
import zy.cloud.wms.manager.entity.param.StockInParam;
|
import zy.cloud.wms.manager.entity.param.StockOutParam;
|
import zy.cloud.wms.manager.entity.result.StoPrintVo;
|
import zy.cloud.wms.manager.service.*;
|
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* Created by vincent on 2021/2/25
|
*/
|
@Service("workService")
|
public class WorkServiceImpl implements WorkService {
|
|
@Autowired
|
private MainService mainService;
|
@Autowired
|
private NodeService nodeService;
|
@Autowired
|
private CombService combService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private CustOrderService custOrderService;
|
@Autowired
|
private PakoutService pakoutService;
|
@Autowired
|
private SnowflakeIdWorker snowflakeIdWorker;
|
|
@Override
|
@Transactional
|
public R stockIn(StockInParam param, Long userId) {
|
Node node = nodeService.selectByUuid(param.getNodeId());
|
if (node == null) {
|
return R.error("货位不存在");
|
}
|
List<Comb> combs = combService.selectList(new EntityWrapper<Comb>().eq("zpallet", param.getZpallet()).eq("io_status", 1));
|
if (Cools.isEmpty(combs)) {
|
return R.error("物料不存在");
|
}
|
Date now = new Date();
|
for (Comb comb : combs) {
|
// 改变组托档状态
|
comb.setIoStatus(4);
|
comb.setUpdateBy(userId);
|
comb.setUpdateTime(now);
|
boolean update = combService.update(comb, new EntityWrapper<Comb>().eq("zpallet", param.getZpallet()).eq("matnr", comb.getMatnr()));
|
if (!update) {
|
throw new CoolException("修改托盘资料档失败");
|
}
|
// 更新货位库存明细
|
LocDetl locDetl = new LocDetl();
|
locDetl.setLocNo(node.getName());
|
locDetl.setNodeId(node.getId());
|
locDetl.setZpallet(param.getZpallet());
|
locDetl.setAnfme(comb.getAnfme());
|
VersionUtils.setLocDetl(locDetl, comb);
|
locDetl.setStatus(1);
|
locDetl.setCreateBy(userId);
|
locDetl.setCreateTime(now);
|
locDetl.setUpdateBy(userId);
|
locDetl.setUpdateTime(now);
|
boolean insert = locDetlService.insert(locDetl);
|
if (!insert) {
|
throw new CoolException("新增库存明细档失败");
|
}
|
}
|
return R.ok();
|
}
|
|
@Override
|
public R stockOutCheck(String number, Long userId) {
|
return null;
|
}
|
|
@Override
|
public R stockOutPrint(StockOutParam param, Long userId) {
|
List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>().eq("doc_num", param.getNumber()));
|
Double total = 0.0D;
|
String custName = "";
|
for (Pakout pakout : pakouts) {
|
total = pakout.getAnfme() + total;
|
custName = pakout.getCustName();
|
}
|
StoPrintVo vo = new StoPrintVo();
|
vo.setDocNum(param.getNumber());
|
vo.setList(pakouts);
|
vo.setTotal(total);
|
vo.setCustName("浙江中扬立库技术有限公司");
|
vo.setWorkerName("陆晓涛");
|
return R.ok().add(vo);
|
}
|
|
@Override
|
public R stockOut(StockOutParam param, Long userId) {
|
List<CustOrder> custOrders = custOrderService.selectList(new EntityWrapper<CustOrder>()
|
.eq("number", param.getNumber())
|
.eq("status", 1)
|
);
|
OrderStoDto dto = new OrderStoDto();
|
dto.setNumber(param.getNumber());
|
dto.setCustOrders(custOrders);
|
// 开始整理出库数据
|
mainService.stockOutProcess(dto);
|
return R.ok();
|
}
|
|
@Override
|
@Transactional
|
public R stockOutComplete(StockConfirmParam param, Long userId) {
|
// 修改出库单状态
|
if (!pakoutService.stockOutComplete(param.getWrkNo(), param.getNumber(), userId)) {
|
return R.error("保存数据失败");
|
}
|
// todo:修改库存数量
|
|
return R.ok();
|
}
|
|
@Override
|
@Transactional
|
public R initPakout(List<InitPakoutParam> params, Long userId) {
|
if (!Cools.isEmpty(params)) {
|
Date now = new Date();
|
for (InitPakoutParam param : params) {
|
LocDetl locDetl = locDetlService.getLocDetl(param.getNodeId(), param.getMatnr());
|
// 保存出库通知单
|
Pakout pakout = new Pakout();
|
pakout.setWrkSts(1L);
|
pakout.setAnfme(param.getCount());
|
pakout.setWrkNo(String.valueOf(snowflakeIdWorker.nextId()));
|
VersionUtils.setPakout(pakout, locDetl);
|
pakout.setCreateTime(now);
|
pakout.setCreateBy(userId);
|
pakout.setUpdateTime(now);
|
pakout.setUpdateBy(userId);
|
pakout.setStatus(1);
|
if (!pakoutService.insert(pakout)) {
|
throw new CoolException("生成拣货单失败");
|
}
|
if (param.getCount() > locDetl.getAnfme()) {
|
throw new CoolException("库存不足");
|
} else if (param.getCount()<locDetl.getAnfme()) {
|
// 修改库存明细数量
|
if (!locDetlService.reduceStock(locDetl.getNodeId(), param.getMatnr(), param.getCount())) {
|
throw new CoolException("修改库存明细数量失败");
|
}
|
} else {
|
// 删除库存明细
|
if (!locDetlService.removeStock(locDetl.getNodeId(), param.getMatnr())) {
|
throw new CoolException("删除库存明细失败");
|
}
|
}
|
}
|
}
|
return R.ok();
|
}
|
|
@Override
|
public R completePakout(String wrkNo, Long userId) {
|
Pakout pakout = pakoutService.selectOne(new EntityWrapper<Pakout>().eq("wrk_no", wrkNo));
|
if (null != pakout) {
|
if (pakoutService.stockOutComplete(wrkNo, null, userId)) {
|
return R.ok("拣货单已完成");
|
}
|
}
|
return R.error();
|
}
|
|
@Override
|
@Transactional
|
public R cancelPakout(String wrkNo, Long userId) {
|
Pakout pakout = pakoutService.selectOne(new EntityWrapper<Pakout>().eq("wrk_no", wrkNo));
|
if (null != pakout) {
|
LocDetl locDetl = locDetlService.getLocDetl(pakout.getNodeId(), pakout.getMatnr());
|
if (locDetl == null) {
|
LocDetl oldLocDetl = new LocDetl();
|
VersionUtils.setLocDetl(oldLocDetl, pakout);
|
oldLocDetl.setCreateTime(new Date());
|
oldLocDetl.setCreateBy(userId);
|
oldLocDetl.setUpdateTime(new Date());
|
oldLocDetl.setUpdateBy(userId);
|
if (!locDetlService.insert(oldLocDetl)) {
|
throw new CoolException("恢复库存明细失败");
|
}
|
} else {
|
if (!locDetlService.incrementStock(locDetl.getNodeId(), locDetl.getMatnr(), pakout.getAnfme())) {
|
throw new CoolException("恢复库存明细失败");
|
}
|
}
|
} else {
|
return R.error("拣货单已失效,取消失败!");
|
}
|
if (!pakoutService.delete(new EntityWrapper<Pakout>().eq("wrk_no", pakout.getWrkNo()))) {
|
throw new CoolException("删除拣货单失败");
|
}
|
return R.ok("拣货单已取消");
|
}
|
|
}
|