| | |
| | | |
| | | 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 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.Comb; |
| | | import zy.cloud.wms.manager.entity.CustOrder; |
| | | import zy.cloud.wms.manager.entity.LocDetl; |
| | | import zy.cloud.wms.manager.entity.Node; |
| | | 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.*; |
| | | 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; |
| | |
| | | private LocDetlService locDetlService; |
| | | @Autowired |
| | | private CustOrderService custOrderService; |
| | | @Autowired |
| | | private PakoutService pakoutService; |
| | | @Autowired |
| | | private SnowflakeIdWorker snowflakeIdWorker; |
| | | @Autowired |
| | | private MatService matService; |
| | | |
| | | @Override |
| | | @Transactional |
| | |
| | | } |
| | | |
| | | @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 stockOutPreview(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); |
| | | return R.ok().add(mainService.stockOutPreview(dto)); |
| | | } |
| | | |
| | | @Override |
| | | public R stockOut(StockOutParam param, Long userId) { |
| | | List<CustOrder> custOrders = custOrderService.selectList(new EntityWrapper<CustOrder>() |
| | | .eq("number", param.getNumber()) |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R stockOutComplete(StockConfirmParam param, Long userId) { |
| | | |
| | | |
| | | // 修改出库单状态 |
| | | if (!pakoutService.stockOutComplete(param.getWrkNo(), param.getNumber(), userId)) { |
| | | return R.error("保存数据失败"); |
| | | } |
| | | // todo:修改库存数量 |
| | | // 修改单据状态 |
| | | if (!custOrderService.updateStatus(param.getNumber(), 4)) { |
| | | throw new CoolException("修改单据状态失败"); |
| | | } |
| | | 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 |
| | | @Transactional |
| | | 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)) { |
| | | |
| | | boolean complete = true; |
| | | List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>().eq("doc_num", pakout.getDocNum())); |
| | | for (Pakout item : pakouts) { |
| | | if (item.getWrkSts() != 3) { |
| | | complete = false; |
| | | break; |
| | | } |
| | | } |
| | | if (complete) { |
| | | // 修改单据状态 |
| | | if (!custOrderService.updateStatus(pakout.getDocNum(), 4)) { |
| | | throw new CoolException("修改单据状态失败"); |
| | | } |
| | | } |
| | | |
| | | 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("删除拣货单失败"); |
| | | } |
| | | |
| | | // 取消销售订单 |
| | | List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>().eq("doc_num", pakout.getDocNum())); |
| | | if (Cools.isEmpty(pakouts)){ |
| | | // 修改单据状态 |
| | | if (!custOrderService.updateStatus(pakout.getDocNum(), 3)) { |
| | | throw new CoolException("修改单据状态失败"); |
| | | } |
| | | } |
| | | return R.ok("拣货单已取消"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R initOrder(InitOrderParam param, Long userId) { |
| | | if (custOrderService.selectCount(new EntityWrapper<CustOrder>().eq("number", param.getNumber()).ne("bType_id", param.getCustomerTypeId())) > 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() + "成功"); |
| | | } |
| | | |
| | | } |