package com.tld.service.impl; import com.tld.mapper.*; import com.tld.model.*; import com.tld.model.Dictionary; import com.tld.service.WarehouseTransferService; import lombok.RequiredArgsConstructor; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; @Service @RequiredArgsConstructor public class WarehouseTransferServiceImpl implements WarehouseTransferService { //移库 private final WarehouseTransferMapper warehouseTransferMapper; //redis锁 private final RedissonClient redissonClient; //出库 private final AskGoodsMapper askGoodsMapper; //入库 private final WarehousingMapper warehousingMapper; //字典 private final DictionaryMapper dictionaryMapper; //用户 private final UserMapper userMapper; @Override public Map getWarehouseTransfer(WarehouseTransfer warehouseTransfer) { Map map = new HashMap<>(); try{ List list = warehouseTransferMapper.getWarehouseTransfer(warehouseTransfer); map.put("data", list); map.put("msg", "200"); } catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "服务器请求异常,请稍后再试"); } return map; } @Override public Map getRecommend(WarehouseTransfer warehouseTransfer) { Map map = new HashMap<>(); try{ Dictionary dictionary = dictionaryMapper.getWarehouseInfo(warehouseTransfer); if(dictionary.getName().equals("原材料库")){ map.put("msg", "500"); map.put("errMsg", "请扫描标签"); return map; } List list = new LinkedList<>(); for(Inventory inventory : warehouseTransferMapper.getMaterialCk(warehouseTransfer)){ AskGoods askGoods1 = warehouseTransferMapper.getAsk(inventory); if(askGoods1 != null){ if(Double.parseDouble(askGoods1.getNum()) != Double.parseDouble(inventory.getAmount())){ list.add(inventory); } } else { list.add(inventory); } } map.put("data", list); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } return map; } @Override public Map OutOfLibrary(String uniqueCode, String type, String askGoodsId) { Map map = new HashMap<>(); //redis并发锁 RLock lock = redissonClient.getLock(uniqueCode); lock.lock(); try{ List list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId); //入库信息 // List warehousing = new LinkedList<>(); String warehouseTransferCode = codeGenerateYK(); //移库单 for(AskGoods askGoods : list){ askGoods.setStorageCode(warehouseTransferCode); Inventory inventory = askGoodsMapper.getInventory(askGoods); if(inventory == null){ throw new Exception("库存不存在"); } //如果出库库存等于虚拟表库存则删除此库存 if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){ askGoodsMapper.deleteInventory(inventory); } else { inventory.setAmount(askGoods.getNum()); askGoodsMapper.updateInventory(inventory); } String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id WarehouseTransfer warehouseTransfer = warehouseTransferMapper.getWarehouseTransferDetailed(askGoodsId, materialId);//查询移库申请内容 // //入库流水信息 // WarehousingVirtual WarehousingVirtual1 = new WarehousingVirtual() // .setWllbCode(askGoods.getWllbCode()) //物料code // .setSuppId(askGoods.getSupplierId())//供应商id // .setSerial(askGoods.getSerial())//连翻号 // .setProducDate(askGoods.getProducDate())//批次 // .setNum(askGoods.getNum())//入库数量 // .setSeq("0") // .setType(askGoods.getType())//入库类型 // .setUserId(askGoods.getUserId())//用户 // .setDepartmentId(askGoods.getDepartmentId())//部门 // .setStorageLocationCode(askGoods.getStorageLocationCode())//库位编号 // .setStorageCode(warehouseTransferCode)//移库单号 // .setWbs(warehouseTransfer.getWbs());//wbs // warehousing.add(WarehousingVirtual1); askGoodsMapper.addRemoval(askGoods);//插入出库流水 askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存 warehouseTransferMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量 WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer() .setWarehouseTransferId(warehouseTransfer.getWarehouseTransferId()) //移库单id .setEntryNumber(warehouseTransfer.getEntryNumber())//分录号 .setSupplyWarehouseId(warehouseTransfer.getSupplyWarehouseId())//供货仓库id .setMaterialId(materialId)//物料id .setWbs(warehouseTransfer.getWbs())//wbs .setOutNum(askGoods.getNum()); //出库数量 warehouseTransferMapper.addReturnGsWarehouseTransfer(warehouseTransfer1);//新增返回gs数据子表信息 } WarehouseTransfer warehouseTransferF = warehouseTransferMapper.getWarehouseTransferDetailedF(askGoodsId);//查询父表移库单申请 WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer() .setWarehouseTransferId(warehouseTransferF.getWarehouseTransferId()) //移库单id .setWarehouseTransferCode(warehouseTransferCode)//移库单编号 .setAskGoodsWarehouseId(warehouseTransferF.getAskGoodsWarehouseId()) //要货仓库id .setWarehouseTransferType(warehouseTransferF.getWarehouseTransferType()); //移库类型 warehouseTransferMapper.addReturnGsWarehouseTransferF(warehouseTransfer1);//新增返回gs数据父表信息 // warehousingMapper.addStorage(warehousing);//入库流水 map.put("data", warehouseTransferCode); map.put("msg", "200"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "失败"); } finally { //释放锁 lock.unlock(); } return map; } @Override public Map warehousing(String uniqueCode, String type) { Map map = new HashMap<>(); try{ //入库信息 List list = new LinkedList<>(); List warehousingVirtualList = warehousingMapper.getVirtual(uniqueCode, type); String warehouseTransferCode = codeGenerateYK(); //移库单 //查询入库所需要的信息 for(WarehousingVirtual warehousingVirtual : warehousingVirtualList) { //查询采购单信息 String materialId = askGoodsMapper.getMaterialId(warehousingVirtual.getWllbCode());//查询物料id WarehouseTransfer warehouseTransfer = warehouseTransferMapper.getWarehouseTransferDetailed(warehousingVirtual.getWarehouseTransferId(), materialId);//查询移库申请内容 if(warehouseTransfer != null) { //WBS warehousingVirtual.setWbs(warehouseTransfer.getWbs()); warehousingVirtual.setWbs(warehouseTransfer.getWbs()); } //查询部门编号 List listUser = userMapper.getAllUser(new User().setId(Integer.parseInt(warehousingVirtual.getUserId()))); warehousingVirtual.setDepartmentId(listUser.get(0).getDepartmentId()); //查询物料分类 WarehousingVirtual warehousingVirtual1 = warehousingMapper.getWlClass(warehousingVirtual); warehousingVirtual.setWllbClass(warehousingVirtual1.getWllbClass()); warehousingVirtual.setMaterialId(warehousingVirtual1.getMaterialId()); warehousingVirtual.setStorageCode(warehouseTransferCode); list.add(warehousingVirtual); warehouseTransferMapper.updateOutNum(warehousingVirtual.getNum(), warehousingVirtual.getWarehouseTransferId(), materialId);//修改出库数量 WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer() .setWarehouseTransferId(warehouseTransfer.getWarehouseTransferId()) //移库单id .setEntryNumber(warehouseTransfer.getEntryNumber())//分录号 .setSupplyWarehouseId(warehouseTransfer.getSupplyWarehouseId())//供货仓库id .setMaterialId(materialId)//物料id .setWbs(warehouseTransfer.getWbs())//wbs .setOutNum(warehousingVirtual.getNum()); //出库数量 warehouseTransferMapper.addReturnGsWarehouseTransfer(warehouseTransfer1);//新增返回gs数据子表信息 } //入库 warehousingMapper.addStorage(list);//入库流水 warehousingMapper.addInventory(list);//库存 warehousingMapper.delVirtual(uniqueCode);//删除临时表数据 WarehouseTransfer warehouseTransferF = warehouseTransferMapper.getWarehouseTransferDetailedF(warehousingVirtualList.get(0).getWarehouseTransferId());//查询父表移库单申请 WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer() .setWarehouseTransferId(warehouseTransferF.getWarehouseTransferId()) //移库单id .setWarehouseTransferCode(warehouseTransferCode)//移库单编号 .setAskGoodsWarehouseId(warehouseTransferF.getAskGoodsWarehouseId()) //要货仓库id .setWarehouseTransferType(warehouseTransferF.getWarehouseTransferType()); //移库类型 warehouseTransferMapper.addReturnGsWarehouseTransferF(warehouseTransfer1);//新增返回gs数据父表信息 map.put("data", warehouseTransferCode); map.put("msg", "200"); } catch (Exception e){ e.printStackTrace(); map.put("msg", "500"); map.put("errMsg", "服务器请求异常,请稍后再试"); } return map; } /** * 移库单生成 * @return */ public String codeGenerateYK(){ StringBuilder stringBuilder = new StringBuilder("YK"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); stringBuilder.append(sdf.format(date)); int count = warehouseTransferMapper.getReturnWarehouseTransferCount(); for(int i = 0; i < 4 - (count + "").length(); i++){ stringBuilder.append("0"); } return (stringBuilder.append(count + 1)).toString(); } }