|
|
@@ -1,24 +1,32 @@
|
|
|
package com.tld.service.impl;
|
|
|
|
|
|
-import com.github.pagehelper.PageHelper;
|
|
|
-import com.github.pagehelper.PageInfo;
|
|
|
-import com.tld.mapper.WarehouseTransferMapper;
|
|
|
-import com.tld.mapper.WarehousingMapper;
|
|
|
-import com.tld.model.Notice;
|
|
|
-import com.tld.model.WarehouseTransfer;
|
|
|
+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.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
|
|
|
@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
public class WarehouseTransferServiceImpl implements WarehouseTransferService {
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private WarehouseTransferMapper warehouseTransferMapper;
|
|
|
+ //移库
|
|
|
+ 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<String, Object> getWarehouseTransfer(WarehouseTransfer warehouseTransfer) {
|
|
|
@@ -34,4 +42,179 @@ public class WarehouseTransferServiceImpl implements WarehouseTransferService {
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> getRecommend(WarehouseTransfer warehouseTransfer) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ try{
|
|
|
+ Dictionary dictionary = dictionaryMapper.getWarehouseInfo(warehouseTransfer);
|
|
|
+ if(dictionary.getName().equals("原材料库")){
|
|
|
+ map.put("msg", "500");
|
|
|
+ map.put("errMsg", "请扫描标签");
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ List<Inventory> 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<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<>();
|
|
|
+ for(AskGoods askGoods : list){
|
|
|
+ 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());//库位编号
|
|
|
+ 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数据子表信息
|
|
|
+ }
|
|
|
+ String warehouseTransfer = codeGenerateYK(); //移库单
|
|
|
+ WarehouseTransfer warehouseTransferF = warehouseTransferMapper.getWarehouseTransferDetailedF(askGoodsId);//查询父表移库单申请
|
|
|
+ WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer()
|
|
|
+ .setWarehouseTransferId(warehouseTransferF.getWarehouseTransferId()) //移库单id
|
|
|
+ .setWarehouseTransferCode(warehouseTransfer)//移库单编号
|
|
|
+ .setAskGoodsWarehouseId(warehouseTransferF.getAskGoodsWarehouseId()) //要货仓库id
|
|
|
+ .setWarehouseTransferType(warehouseTransferF.getWarehouseTransferType()); //移库类型
|
|
|
+ warehouseTransferMapper.addReturnGsWarehouseTransferF(warehouseTransfer1);//新增返回gs数据子表信息
|
|
|
+ warehousingMapper.addStorage(warehousing);//入库流水
|
|
|
+ map.put("data", warehouseTransfer);
|
|
|
+ map.put("msg", "200");
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ map.put("msg", "500");
|
|
|
+ map.put("errMsg", "失败");
|
|
|
+ } finally {
|
|
|
+ //释放锁
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> warehousing(String uniqueCode, String type) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ try{
|
|
|
+ //入库信息
|
|
|
+ List<WarehousingVirtual> list = new LinkedList<>();
|
|
|
+ List<WarehousingVirtual> warehousingVirtualList = warehousingMapper.getVirtual(uniqueCode, type);
|
|
|
+ //查询入库所需要的信息
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ //查询部门编号
|
|
|
+ List<User> 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());
|
|
|
+ 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);//删除临时表数据
|
|
|
+
|
|
|
+ String warehouseTransfer = codeGenerateYK(); //移库单
|
|
|
+ WarehouseTransfer warehouseTransferF = warehouseTransferMapper.getWarehouseTransferDetailedF(warehousingVirtualList.get(0).getWarehouseTransferId());//查询父表移库单申请
|
|
|
+ WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer()
|
|
|
+ .setWarehouseTransferId(warehouseTransferF.getWarehouseTransferId()) //移库单id
|
|
|
+ .setWarehouseTransferCode(warehouseTransfer)//移库单编号
|
|
|
+ .setAskGoodsWarehouseId(warehouseTransferF.getAskGoodsWarehouseId()) //要货仓库id
|
|
|
+ .setWarehouseTransferType(warehouseTransferF.getWarehouseTransferType()); //移库类型
|
|
|
+ warehouseTransferMapper.addReturnGsWarehouseTransferF(warehouseTransfer1);//新增返回gs数据子表信息
|
|
|
+ map.put("data", warehouseTransfer);
|
|
|
+ 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();
|
|
|
+ }
|
|
|
}
|