package zy.cloud.wms.manager.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; 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.*; 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; @Autowired private MatService matService; @Override @Transactional public R stockIn(StockInParam param, Long userId) { Node node = nodeService.selectByUuid(param.getNodeId()); if (node == null) { return R.error("货位不存在"); } List combs = combService.selectList(new EntityWrapper().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().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 pakouts = pakoutService.selectList(new EntityWrapper().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 custOrders = custOrderService.selectList(new EntityWrapper() .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 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()().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().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().eq("wrk_no", pakout.getWrkNo()))) { throw new CoolException("删除拣货单失败"); } return R.ok("拣货单已取消"); } @Override @Transactional public R initOrder(InitOrderParam param, Long userId) { if (custOrderService.selectCount(new EntityWrapper().eq("number", param.getNumber())) > 0) { return R.error("抱歉单号已存在,请修改单号"); } Date now = new Date(); for (PakinMatDto dto : param.getList()){ Mat mat = matService.selectByMatnr(dto.getMatnr()); if (mat == null) { continue; } CustOrder custOrder = new CustOrder( param.getNumber(), // 销售单号 DateUtils.convert(now), // 单据日期[非空] param.getCustomerTypeId(), // 客户编号 null, // 经手人编号[空] dto.getMatnr(), // 商品编号 dto.getCount(), // 商品数量 Cools.isEmpty(mat.getName())?0.0D:Double.parseDouble(mat.getName()), // 商品单价 null, // 商品备注[空] 1, // 状态 now, // 添加时间 now, // 修改时间 null // 备注 ); if (!custOrderService.insert(custOrder)) { throw new CoolException("保存销售订单失败"); } } return R.ok("生成销售订单" + param.getNumber() + "成功"); } }