123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- 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 org.springframework.transaction.annotation.Transactional;
- import javax.servlet.http.HttpServletRequest;
- 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 DeliveryMapper deliveryMapper;
- //用户
- private final UserMapper userMapper;
- @Override
- public Map<String, Object> getWarehouseTransfer(WarehouseTransfer warehouseTransfer) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<WarehouseTransfer> list = warehouseTransferMapper.getWarehouseTransfer(warehouseTransfer);
- List<Integer> scanNum = new LinkedList<>();
- Map<String, Object> mapVal = new HashMap<>();
- for(WarehouseTransfer warehouseTransfer1 : list){
- if(warehouseTransfer1.getAskType().equals("0") || warehouseTransfer1.getAskType().equals("1")
- || warehouseTransfer1.getAskType().equals("2")){
- warehouseTransfer1.setUniqueCode(warehouseTransfer.getUniqueCode());
- warehouseTransfer.setMaterialCode(warehouseTransfer.getMaterialCode());
- scanNum.add(warehouseTransferMapper.getScanNum(warehouseTransfer1));//扫描总数
- mapVal.put(warehouseTransfer1.getWarehouseTransferId(), 0);
- } else {
- warehouseTransfer1.setUniqueCode(warehouseTransfer.getUniqueCode());
- warehouseTransfer.setMaterialCode(warehouseTransfer.getMaterialCode());
- scanNum.add(warehouseTransferMapper.getScanNumWare(warehouseTransfer1));//扫描总数
- mapVal.put(warehouseTransfer1.getWarehouseTransferId(), 1);
- }
- }
- map.put("scanNum", scanNum);
- map.put("type", mapVal);
- 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<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
- Map<String, Object> map = new HashMap<>();
- //redis并发锁
- RLock lock = redissonClient.getLock(uniqueCode);
- lock.lock();
- try{
- List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
- //入库信息
- List<WarehousingVirtual> warehousing = new LinkedList<>();
- String warehouseTransferCode = codeGenerateYK(); //移库单
- for(AskGoods askGoods : list){
- askGoods.setStorageCode(warehouseTransferCode);
- //查询物料信息
- MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialCode(askGoods.getWllbCode()));
- Inventory inventory = null;
- askGoods.setCompanyNumber(askGoods.getAccountSleeve());
- askGoods.setMaterialId(material.getTldId());
- //判断是否是三大仓库(半成品、产成品、原材料)之外的仓库 如果是则不需要查询库存
- String warehouseType = warehouseTransferMapper.getStorageLocationWarehouse(askGoods.getStorageLocationCode());
- if(!warehouseType.equals("10")) {
- if(material.getPartType().equals("原材料")) {
- inventory = askGoodsMapper.getInventory(askGoods);
- } else if(material.getPartType().equals("产成品")) {
- inventory = deliveryMapper.getInventoryHalf(askGoods);
- } else if(material.getPartType().equals("半成品")) {
- if(askGoodsMapper.getInventoryInfo(askGoods).size() != 0){
- inventory = askGoodsMapper.getInventoryInfo(askGoods).get(0);
- } else {
- inventory = null;
- }
- } else if (material.getPartType().equals("低值易耗品")){
- inventory = deliveryMapper.getInventoryHalf(askGoods);
- }
- if(inventory == null){
- map.put("msg", "500");
- map.put("errMsg", "库存不存在");
- return map;
- }
- //如果出库库存等于虚拟表库存则删除此库存
- if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(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, askGoods.getEntryNumber());//查询移库申请内容
- //入库流水信息
- 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.getDepartment())//部门
- .setStorageLocationCode(askGoods.getStorageLocationCodeRk())//库位编号
- .setStorageCode(warehouseTransferCode)//移库单号
- .setWbs(warehouseTransfer.getWbs())//wbs
- .setMaterialId(materialId)//物料id
- .setAccountSleeve(warehouseTransfer.getAccountSleeve())//公司
- .setWllbClass(material.getWllbClass())
- .setAttribute(askGoods.getAttribute());
- warehousing.add(WarehousingVirtual1);
- askGoods.setStorageLocationCode(askGoods.getStorageLocationCode());
- askGoodsMapper.addRemoval(askGoods);//插入出库流水
- askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
- Double scanNum = Double.parseDouble(warehouseTransfer.getOutNum()) + Double.parseDouble(askGoods.getNum());
- String typeVal = "0";
- if(Double.doubleToLongBits(scanNum) == Double.doubleToLongBits(Double.parseDouble(warehouseTransfer.getNum()))){
- typeVal = "1";
- }
- warehouseTransferMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId, typeVal, askGoods.getEntryNumber());//修改出库数量
- if(askGoods.getStorageLocationCodeRk().indexOf("XNKW") != -1){
- Inventory inventory2 = warehouseTransferMapper.getInventoryVitrual(askGoods);
- String code = warehouseTransferMapper.getWarehouseTransferCodeType(warehouseTransfer.getAskGoodsWarehouseId());
- if(material.getPartType().equals("产成品") && code.equals("2")){
- //入库信息
- List<WarehousingVirtual> warehousingVal = new LinkedList<>();
- WarehousingVirtual warehousingVirtual = warehousing.get(warehousing.size() - 1);
- warehousingVirtual.setSuppId("");
- warehousingVal.add(warehousingVirtual);
- warehousingMapper.addInventory(warehousingVal);//库存
- } else {
- if(inventory2 != null ){
- Inventory inventory1 = new Inventory()
- .setNum(askGoods.getNum())
- .setMaterialId(materialId)
- .setStorageLocationCode(askGoods.getStorageLocationCodeRk());
- warehousingMapper.updateVitrualNum(inventory1);
- } else {
- //入库信息
- List<WarehousingVirtual> warehousingVal = new LinkedList<>();
- WarehousingVirtual warehousingVirtual = warehousing.get(warehousing.size() - 1);
- warehousingVirtual.setSuppId("").setSerial("");
- warehousingVal.add(warehousingVirtual);
- warehousingMapper.addInventory(warehousingVal);//库存
- }
- }
- }
- 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);//入库流水
- if(list.get(0).getStorageLocationCodeRk().indexOf("XNKW") > 0){
- warehousingMapper.addInventory(warehousing);//库存
- }
- map.put("data", warehouseTransferCode);
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- } finally {
- //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
- //释放锁
- lock.unlock();
- }
- }
- return map;
- }
- @Override
- public Map<String, Object> warehousing(String uniqueCode, String type, String askGoodsId) {
- Map<String, Object> map = new HashMap<>();
- try{
- //入库信息
- List<WarehousingVirtual> list = new LinkedList<>();
- List<WarehousingVirtual> warehousingVirtualList = warehousingMapper.getVirtual(uniqueCode, type, askGoodsId);
- String warehouseTransferCode = codeGenerateYK(); //移库单
- //查询入库所需要的信息
- for(WarehousingVirtual warehousingVirtual : warehousingVirtualList) {
- //查询物料信息
- Notice notice = new Notice().setMaterialCode(warehousingVirtual.getWllbCode());
- MaterialClass material = warehousingMapper.getMaterial(notice);
- //查询采购单信息
- String materialId = askGoodsMapper.getMaterialId(warehousingVirtual.getWllbCode());//查询物料id
- WarehouseTransfer warehouseTransfer = warehouseTransferMapper.getWarehouseTransferDetailed(warehousingVirtual.getWarehouseTransferId(), materialId, warehousingVirtual.getEntryNumber());//查询移库申请内容
- if(warehouseTransfer != null) {
- //WBS
- warehousingVirtual.setWbs(warehouseTransfer.getWbs());
- //账套
- warehousingVirtual.setAccountSleeve(warehouseTransfer.getAccountSleeve());
- }
- //查询部门编号
- List<User> listUser = userMapper.getAllUser(new User().setId(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);
- Double scanNum = Double.parseDouble(warehouseTransfer.getOutNum()) + Double.parseDouble(warehousingVirtual.getNum());
- String typeVal = "0";
- if(Double.doubleToLongBits(scanNum) == Double.doubleToLongBits(Double.parseDouble(warehouseTransfer.getNum()))){
- typeVal = "1";
- }
- warehouseTransferMapper.updateOutNum(warehousingVirtual.getNum(), warehousingVirtual.getWarehouseTransferId(), materialId, typeVal, warehousingVirtual.getEntryNumber());//修改出库数量
- AskGoods askGoods = new AskGoods()
- .setStorageLocationCode(warehousingVirtual.getStorageLocationCodeCk())
- .setSupplierId(warehousingVirtual.getSuppId())
- .setSerial(warehousingVirtual.getSerial())
- .setNum(warehousingVirtual.getNum())
- .setType(warehousingVirtual.getType())
- .setUserId(warehousingVirtual.getUserId())
- .setWllbCode(warehousingVirtual.getWllbCode())
- .setStorageCode(warehouseTransferCode)
- .setWbs(warehousingVirtual.getWbs())
- .setProducDate(warehousingVirtual.getProducDate())
- .setDepartment(listUser.get(0).getDepartmentId())
- .setAskGoodsId(warehousingVirtual.getWarehouseTransferId())
- .setCompanyNumber(warehouseTransfer.getAccountSleeve());
- Inventory inventory = new Inventory();
- String code = warehouseTransferMapper.getWarehouseTransferCodeType(warehouseTransfer.getAskGoodsWarehouseId());
- //判断是否是三大仓库(半成品、产成品、原材料)之外的仓库 如果是则不需要查询库存
- String warehouseType = warehouseTransferMapper.getStorageLocationWarehouse(askGoods.getStorageLocationCode());
- if(!warehouseType.equals("10")) {
- if(material.getPartType().equals("原材料")){
- inventory = askGoodsMapper.getInventoryWarehousing(askGoods);
- } else if(material.getPartType().equals("产成品")){
- if(code.equals("2")){
- askGoods.setSerial("");
- }
- inventory = deliveryMapper.getInventoryHalf(askGoods);
- } else if(material.getPartType().equals("半成品")){
- inventory = askGoodsMapper.getInventoryWarehousing(askGoods);
- }
- //如果出库库存等于虚拟表库存则删除此库存
- if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.getAmount()))){
- askGoodsMapper.deleteInventory(inventory);
- } else {
- inventory.setAmount(askGoods.getNum());
- askGoodsMapper.updateInventory(inventory);
- }
- }
- askGoodsMapper.addRemoval(askGoods);//插入出库流水
- 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
- */
- @Override
- public Map<String, Object> delWarehouseTransfer(String id, HttpServletRequest request) {
- Map<String, Object> map = new HashMap<>();
- try {
- String userId = request.getHeader("userId");
- Map<String, Object> mapVal = warehouseTransferMapper.getWarehouseTransfers(id);
- if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
- map.put("msg", "500");
- map.put("errMsg", "此单据已出库!");
- return map;
- }
- LogData logData = new LogData()
- .setUserId(userId)
- .setData(mapVal.toString())
- .setType("0")
- .setDocumentType("移库单");
- dictionaryMapper.addLogdata(logData);
- warehouseTransferMapper.delWarehouseTransfer(id);
- map.put("msg", "200");
- } catch (Exception e) {
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- @Override
- public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- askGoods.setAccountSleeve(askGoods.getCompanyNumber());
- List<Inventory> inventory = askGoodsMapper.getInventoryInfo(askGoods);
- if(inventory.size() == 0){
- map.put("msg", "500");
- map.put("errMsg", "库存数量不足");
- return map;
- }
- askGoodsMapper.addAskGoodsVitrual(askGoods);
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- }
- return map;
- }
- @Override
- public Map<String, Object> getMaterialCk(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<Inventory> list = new LinkedList<>();
- for(Inventory inventory : warehouseTransferMapper.getMaterialWarehouseTransfer(askGoods)){
- AskGoods askGoods1 = warehouseTransferMapper.getAsk(inventory);
- if(askGoods1 != null){
- if( Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits( 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<String, Object> getWarehouseTransferCode(WarehouseTransfer warehouseTransfer) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<WarehouseTransfer> list = warehouseTransferMapper.getWarehouseTransferCode(warehouseTransfer);
- map.put("data", list);
- 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("YKCZ");
- 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();
- }
- }
|