瀏覽代碼

问题修改

zhs 2 年之前
父節點
當前提交
f7018395eb

+ 2 - 0
build.gradle

@@ -36,6 +36,8 @@ dependencies {
     implementation 'org.apache.poi:poi-ooxml:3.16'
     //接口调用
     implementation 'org.apache.httpcomponents:httpclient:4.5.2'
+    //redisson锁
+    implementation 'org.redisson:redisson:3.16.8'
     implementation fileTree(dir:'lib',includes:['*jar'])
     annotationProcessor 'org.projectlombok:lombok'
     developmentOnly 'org.springframework.boot:spring-boot-devtools'

+ 26 - 0
src/main/java/com/tld/config/MyRedissonConfig.java

@@ -0,0 +1,26 @@
+package com.tld.config;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MyRedissonConfig {
+    /**
+     * 所有对Redisson的使用都是通过RedissonClient对象
+     * @return
+     */
+    @Bean(destroyMethod = "shutdown")
+    public RedissonClient redissonClient(){
+        // 创建配置 指定redis地址及节点信息
+        Config config = new Config();
+        config.useSingleServer().setAddress("redis://8.142.144.205:6379").setPassword("#09SilverB");
+        //redis集群使用
+//        config.useClusterServers().addNodeAddress("redis://8.142.144.205:6379");
+        // 根据config创建出RedissonClient实例
+        RedissonClient redissonClient = Redisson.create(config);
+        return redissonClient;
+    }
+}

+ 31 - 5
src/main/java/com/tld/controller/AskGoodsController.java

@@ -3,11 +3,9 @@ package com.tld.controller;
 import com.tld.model.AskGoods;
 import com.tld.service.AskGoodsService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 /**
@@ -56,7 +54,35 @@ public class AskGoodsController {
      * @return 返回结果
      */
     @PostMapping("addAskGoodsVitrual")
-    public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods){
+    public Map<String, Object> addAskGoodsVitrual(@RequestBody AskGoods askGoods){
         return askGoodsService.addAskGoodsVitrual(askGoods);
     }
+
+    /**
+     * 出库
+     */
+    @GetMapping("OutOfLibrary")
+    public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId){
+        return askGoodsService.OutOfLibrary(uniqueCode, type, askGoodsId);
+    }
+
+    /**
+     * 查询出库流水
+     * askGoods 参数
+     * @return 返回结果
+     */
+    @GetMapping("getRemoval")
+    public Map<String, Object> getRemoval(AskGoods askGoods){
+        return askGoodsService.getRemoval(askGoods);
+    }
+
+    /**
+     * 导出流水
+     * @param askGoods 参数
+     * @param response
+     */
+    @GetMapping("export")
+    public void userExport(AskGoods askGoods, HttpServletResponse response){
+        askGoodsService.export(askGoods, response);
+    }
 }

+ 13 - 0
src/main/java/com/tld/controller/GsPlugOutController.java

@@ -1,5 +1,6 @@
 package com.tld.controller;
 
+import com.tld.service.AskGoodsService;
 import com.tld.service.WarehousingService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -15,6 +16,9 @@ public class GsPlugOutController {
     //入库
     @Autowired
     private WarehousingService warehousingService;
+    //出库
+    @Autowired
+    private AskGoodsService askGoodsService;
 
     /**
      * 入库回传
@@ -24,4 +28,13 @@ public class GsPlugOutController {
     public void plugOutWarehousing(String orderNumber){
         warehousingService.plugOutWarehousing(orderNumber);
     }
+
+    /**
+     * 出库回传
+     * @param removalCode 参数
+     */
+    @GetMapping("plugOutRemoval")
+    public void plugOutRemoval(String removalCode){
+        askGoodsService.plugOutRemoval(removalCode);
+    }
 }

+ 5 - 6
src/main/java/com/tld/controller/WarehousingController.java

@@ -1,5 +1,6 @@
 package com.tld.controller;
 
+import com.tld.model.AskGoods;
 import com.tld.model.Storage;
 import com.tld.model.WarehousingVirtual;
 import com.tld.service.WarehousingService;
@@ -53,13 +54,12 @@ public class WarehousingController {
 
     /**
      * 删除虚拟数据
-     * @param wllbCode 物料编号
-     * @param serial 连翻号
+     * @param warehousingVirtual 参数
      * @return 返回结果
      */
-    @PostMapping("delWarehousingVirtual")
-    public Map<String, Object> delWarehousingVirtual(@RequestBody String wllbCode, String serial, String producDate, String suppId){
-        return warehousingService.delWarehousingVirtual(wllbCode, serial, producDate, suppId);
+    @DeleteMapping("delWarehousingVirtual")
+    public Map<String, Object> delWarehousingVirtual(@RequestBody WarehousingVirtual warehousingVirtual){
+        return warehousingService.delWarehousingVirtual(warehousingVirtual);
     }
 
     /**
@@ -89,5 +89,4 @@ public class WarehousingController {
     public void userExport(Storage storage, HttpServletResponse response){
         warehousingService.export(storage, response);
     }
-
 }

+ 34 - 0
src/main/java/com/tld/mapper/AskGoodsMapper.java

@@ -2,8 +2,10 @@ package com.tld.mapper;
 
 import com.tld.model.AskGoods;
 import com.tld.model.Inventory;
+import com.tld.model.ReturRemoval;
 import com.tld.model.StorageLocation;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -40,4 +42,36 @@ public interface AskGoodsMapper {
     AskGoods getAsknInfo(AskGoods askGoods);
 
     int getAskInfoNumVitrual(AskGoods askGoods);
+
+    int getInventoryAlready(AskGoods askGoods);
+
+    List<AskGoods> getVirtualUniqueCode(@Param("uniqueCode")String uniqueCode, @Param("type")String type, @Param("askGoodsId")String askGoodsId);
+
+    void deleteInventory(Inventory inventory);
+
+    void updateInventory(Inventory inventory);
+
+    void deleteVirtual(String id);
+
+    void addRemoval(AskGoods askGoods);
+
+    String getMaterialId(String wllbCode);
+
+    AskGoods getAskDetailed(String askGoodsId, String materialId);
+
+    void addReturnGsRemoval(ReturRemoval returRemoval);
+
+    AskGoods getAskDetailedF(String askGoodsId);
+
+    void addReturnGsRemovalF(ReturRemoval returRemoval1);
+
+    int getReturnRemovalCount();
+
+    Map<String, Object> plugOutRemoval(String removalCode);
+
+    Map<String, Object> getRemovalz(String askGoodsId);
+
+    List<AskGoods> getRemoval(AskGoods askGoods);
+
+    List<Map<String, Object>> export(AskGoods askGoods);
 }

+ 2 - 0
src/main/java/com/tld/mapper/StorageLocationMapper.java

@@ -16,4 +16,6 @@ public interface StorageLocationMapper {
     void updateStorage(StorageLocation storageLocation);
 
     List<Map<String, Object>> export(StorageLocation storageLocation);
+
+    int getStorageCount(StorageLocation storageLocation);
 }

+ 1 - 1
src/main/java/com/tld/mapper/WarehousingMapper.java

@@ -23,7 +23,7 @@ public interface WarehousingMapper {
 
     List<StorageLocation> getIsNotSisableLocation(String isNotDisable);
 
-    void delWarehousingVirtual(@Param("wllbCode")String wllbCode, @Param("serial")String serial, @Param("producDate")String producDate, @Param("suppId")String suppId);
+    void delWarehousingVirtual(WarehousingVirtual warehousingVirtual);
 
     List<WarehousingVirtual> getVirtual(String uniqueCode);
 

+ 16 - 0
src/main/java/com/tld/model/AskGoods.java

@@ -67,6 +67,10 @@ public class AskGoods implements Serializable {
      * 申请部门
      */
     private String departmentName;
+    /**
+     * 部门
+     */
+    private String department;
     /**
      * 来源类型
      */
@@ -115,5 +119,17 @@ public class AskGoods implements Serializable {
      * 生产日期
      */
     private String producDate;
+    /**
+     * 物料code
+     */
+    private String wllbCode;
+    /**
+     * 页数
+     */
+    private int page;
+    /**
+     * 条数
+     */
+    private int limit;
 
 }

+ 75 - 0
src/main/java/com/tld/model/ReturRemoval.java

@@ -0,0 +1,75 @@
+package com.tld.model;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 返回gs数据出库
+ */
+@Data
+@Accessors(chain = true)
+@SuppressWarnings("serial")
+public class ReturRemoval implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+    /**
+     * 要货单id
+     */
+    private String askGoodsId;
+    /**
+     * 出库单编号
+     */
+    private String removalCode;
+    /**
+     * 来源类型
+     */
+    private String sourceType;
+    /**
+     * 移动类型
+     */
+    private String moveType;
+    /**
+     * 分录单id
+     */
+    private String askId;
+    /**
+     * 物料id
+     */
+    private String materialId;
+    /**
+     * wbs
+     */
+    private String wbs;
+    /**
+     * 出库数量
+     */
+    private String num;
+    /**
+     * gs分录单id
+     */
+    private String entryNumber;
+    /**
+     * 年
+     */
+    private String year;
+    /**
+     * 月
+     */
+    private String month;
+    /**
+     * 日期
+     */
+    private String time;
+    /**
+     * 是否红单
+     */
+    private String isNotRed;
+    /**
+     * 库存编号
+     */
+    private String storageLocationCode;
+}

+ 4 - 0
src/main/java/com/tld/model/ReturnWarehousing.java

@@ -72,4 +72,8 @@ public class ReturnWarehousing implements Serializable {
      * 日期
      */
     private String time;
+    /**
+     * 是否红单
+     */
+    private String isNotRed;
 }

+ 4 - 0
src/main/java/com/tld/model/Storage.java

@@ -92,6 +92,10 @@ public class Storage implements Serializable {
      * 结束时间
      */
     private String endTime;
+    /**
+     * 物料名称
+     */
+    private String materialName;
     /**
      * 页数
      */

+ 9 - 0
src/main/java/com/tld/service/AskGoodsService.java

@@ -2,6 +2,7 @@ package com.tld.service;
 
 import com.tld.model.AskGoods;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 public interface AskGoodsService {
@@ -14,4 +15,12 @@ public interface AskGoodsService {
     Map<String, Object> getMaterialCk(AskGoods askGoods);
 
     Map<String, Object> addAskGoodsVitrual(AskGoods askGoods);
+
+    Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId);
+
+    void plugOutRemoval(String removalCode);
+
+    Map<String, Object> getRemoval(AskGoods askGoods);
+
+    void export(AskGoods askGoods, HttpServletResponse response);
 }

+ 1 - 1
src/main/java/com/tld/service/WarehousingService.java

@@ -11,7 +11,7 @@ public interface WarehousingService {
 
     Map<String, Object> addWarehousingVirtual(WarehousingVirtual warehousingVirtual);
 
-    Map<String, Object> delWarehousingVirtual(String wllbCode, String serial, String producDate, String suppId);
+    Map<String, Object> delWarehousingVirtual(WarehousingVirtual warehousingVirtual);
 
     Map<String, Object> warehousing(String uniqueCode);
 

+ 150 - 2
src/main/java/com/tld/service/impl/AskGoodsServiceImpl.java

@@ -1,13 +1,20 @@
 package com.tld.service.impl;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.tld.excel.ExcelUtils;
 import com.tld.mapper.AskGoodsMapper;
 import com.tld.model.AskGoods;
 import com.tld.model.Inventory;
-import com.tld.model.StorageLocation;
+import com.tld.model.ReturRemoval;
 import com.tld.service.AskGoodsService;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 @Service
@@ -15,6 +22,9 @@ public class AskGoodsServiceImpl implements AskGoodsService {
 
     @Autowired
     private AskGoodsMapper askGoodsMapper;
+    //redis锁
+    @Autowired
+    private RedissonClient redissonClient;
 
     @Override
     public Map<String, Object> addAskGoods(AskGoods askGoods) {
@@ -103,9 +113,16 @@ public class AskGoodsServiceImpl implements AskGoodsService {
             Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
             AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量
             int alreadyNum =  askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
+            int inventoryAlready =  askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
+            int inventorySurplus = Integer.parseInt(inventory.getAmount()) - inventoryAlready; //库存剩余数量
             int surplusNum = Integer.parseInt(askGoods1.getNum()) - alreadyNum; //剩余要扫描数量
 
-
+            if(surplusNum >= inventorySurplus){
+                askGoods.setNum(String.valueOf(inventorySurplus));
+            } else {
+                askGoods.setNum(String.valueOf(surplusNum));
+            }
+            askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
             askGoodsMapper.addAskGoodsVitrual(askGoods);
             map.put("msg", "200");
         }catch (Exception e){
@@ -115,4 +132,135 @@ public class AskGoodsServiceImpl implements AskGoodsService {
         }
         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);
+            for(AskGoods askGoods : list){
+                Inventory inventory = askGoodsMapper.getInventory(askGoods);
+                //如果出库库存等于虚拟表库存则删除此库存
+                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
+                AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
+                ReturRemoval returRemoval = new ReturRemoval()
+                        .setMaterialId(materialId)
+                        .setAskGoodsId(askGoodsId)
+                        .setWbs(askGoods1.getWbs())
+                        .setNum(askGoods.getNum())
+                        .setEntryNumber(askGoods1.getEntryNumber())
+                        .setAskId(askGoods1.getId())
+                        .setStorageLocationCode(askGoods.getStorageLocationCode());
+                askGoodsMapper.addRemoval(askGoods);//插入出库流水
+                askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
+                askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
+            }
+            //查询要货单父级信息
+            AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId);
+            String removalCode = codeGenerateCk();
+            ReturRemoval returRemoval1 = new ReturRemoval()
+                    .setAskGoodsId(askGoods3.getAskGoodsId())
+                    .setRemovalCode(removalCode)
+                    .setSourceType(askGoods3.getSourceType())
+                    .setMoveType(askGoods3.getMoveType());
+            askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
+            map.put("data", removalCode);
+            map.put("msg", "200");
+        }catch (Exception e){
+            e.printStackTrace();
+            map.put("msg", "500");
+            map.put("errMsg", "失败");
+        } finally {
+            //释放锁
+            lock.unlock();
+        }
+        return map;
+    }
+
+    @Override
+    public void plugOutRemoval(String removalCode) {
+        try{
+            Map<String, Object> map = askGoodsMapper.plugOutRemoval(removalCode);
+            Calendar cal = Calendar.getInstance();
+            int year = cal.get(Calendar.YEAR);
+            int month = cal.get(Calendar.MONTH) + 1;
+            int day = cal.get(Calendar.DATE) ;
+            map.put("child", askGoodsMapper.getRemovalz(map.get("askGoodsId").toString()));
+            map.put("isNotRed", "0");
+            map.put("year", year);
+            map.put("month", month);
+            map.put("time", year + "-" + month + "-" + day);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public Map<String, Object> getRemoval(AskGoods askGoods) {
+        Map<String, Object> map = new HashMap<>();
+        try{
+            //查询数据
+            PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
+            PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods));
+            map.put("data", list);
+            map.put("msg", "200");
+        }catch (Exception e){
+            e.printStackTrace();
+            map.put("msg", "500");
+            map.put("errMsg", "失败");
+        }
+        return map;
+    }
+
+    @Override
+    public void export(AskGoods askGoods, HttpServletResponse response) {
+        try{
+            //导出数据汇总
+            List<List<Object>> sheetDataList = new ArrayList<>();
+            //表头数据
+            List<Object> head = Arrays.asList("物料名称", "供应商名称", "连翻号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量");
+            //查询数据
+            PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
+            PageInfo<Map<String, Object>> list = new PageInfo<>(askGoodsMapper.export(askGoods));
+            sheetDataList.add(head);
+            for(Map<String, Object> userMap : list.getList()){
+                List<Object> listSheet = new ArrayList<>();
+                for(String key: userMap.keySet()){
+                    listSheet.add(userMap.get(key));
+                }
+                sheetDataList.add(listSheet);
+            }
+            //当前时间
+            Date time = new Date();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
+            ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 出库单生成
+     * @return
+     */
+    public String codeGenerateCk(){
+        StringBuilder stringBuilder = new StringBuilder("CK");
+        Date date = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
+        stringBuilder.append(sdf.format(date));
+        int count = askGoodsMapper.getReturnRemovalCount();
+        for(int i = 0; i < 4 - (count + "").length(); i++){
+            stringBuilder.append("0");
+        }
+        return (stringBuilder.append(count + 1)).toString();
+    }
 }

+ 6 - 0
src/main/java/com/tld/service/impl/StorageLocationServiceImpl.java

@@ -41,6 +41,12 @@ public class StorageLocationServiceImpl implements StorageLocationService {
     public Map<String, Object> addStorage(StorageLocation storageLocation) {
         Map<String, Object> map = new HashMap<>();
         try{
+            int count = storageLocationMapper.getStorageCount(storageLocation);
+            if(count != 0){
+                map.put("msg", "500");
+                map.put("errMsg", "编号存在!");
+                return map;
+            }
             storageLocationMapper.addStorage(storageLocation);
             map.put("msg", "200");
         }catch (Exception e){

+ 12 - 19
src/main/java/com/tld/service/impl/WarehousingServiceImpl.java

@@ -10,9 +10,7 @@ import com.tld.service.WarehousingService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
 import javax.servlet.http.HttpServletResponse;
-import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -48,14 +46,18 @@ public class WarehousingServiceImpl implements WarehousingService {
                 listMaterialClass = warehousingMapper.getMaterialClassType(wllbCode);
             }
             StringBuffer stringBuffer = new StringBuffer();
-            for(int i = 0; i < listMaterialClass.size(); i++){
+            List<Integer> listString = new LinkedList<>();//库存剩余数量
+            for(int i = 0; i < listMaterialClass.size(); i++) {
                 Map<String, Object> map1 = warehousingMapper.getScanNum(listMaterialClass.get(i).getStorageLocationCode(), num);
-                if(Integer.parseInt(String.valueOf(map1.get("scanNum"))) < Integer.parseInt(String.valueOf(map1.get("storageLocationCapacity")))){
+                if(Double.parseDouble(String.valueOf(map1.get("scanNum"))) < Double.parseDouble(String.valueOf(map1.get("storageLocationCapacity")))){
                     stringBuffer.append(listMaterialClass.get(i).getStorageLocationCode() + ",");
+                    int surplusNum = (int) (Double.parseDouble(String.valueOf(map1.get("storageLocationCapacity"))) - Double.parseDouble(String.valueOf(map1.get("scanNum"))) + Double.parseDouble(num));
+                    listString.add(surplusNum);
                 }
             }
             List<StorageLocation> list = warehousingMapper.recommend(stringBuffer.toString());
             map.put("data", list);
+            map.put("listString", listString);//返回库位剩余数量
             map.put("msg", "200");
         } catch (Exception e){
             e.printStackTrace();
@@ -82,10 +84,10 @@ public class WarehousingServiceImpl implements WarehousingService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> delWarehousingVirtual(String wllbCode, String serial, String producDate, String suppId) {
+    public Map<String, Object> delWarehousingVirtual(WarehousingVirtual warehousingVirtual) {
         Map<String, Object> map = new HashMap<>();
         try{
-            warehousingMapper.delWarehousingVirtual(wllbCode, serial, producDate, suppId);
+            warehousingMapper.delWarehousingVirtual(warehousingVirtual);
             map.put("msg", "200");
         } catch (Exception e){
             e.printStackTrace();
@@ -155,7 +157,7 @@ public class WarehousingServiceImpl implements WarehousingService {
                                 .setWbs(receiveGoods1.getWbs())
                                 .setReceiveGoodsId(receiveGoods1.getId())
                                 .setMaterialId(receiveGoods1.getMaterialId())
-                                .setStorageCode(codeGenerate())
+                                .setStorageCode(codeGenerateRk())
                                 .setOrderNumber(receiveGoods1.getOrderNumber());
                         warehousingMapper.addReturnWarehousing(returnWarehousing);
                         //判断是否有已存在的采购单号
@@ -189,6 +191,7 @@ public class WarehousingServiceImpl implements WarehousingService {
                 returnWarehousing.setYear(String.valueOf(year));
                 returnWarehousing.setMonth(String.valueOf(month));
                 returnWarehousing.setTime(year + "-" + month + "-" + day);
+                returnWarehousing.setIsNotRed("0");
                 list.add(returnWarehousing);
             }
         }catch (Exception e){
@@ -196,16 +199,6 @@ public class WarehousingServiceImpl implements WarehousingService {
         }
     }
 
-    public static void main(String[] args) {
-        Calendar cal = Calendar.getInstance();
-        int year = cal.get(Calendar.YEAR);
-        int month = cal.get(Calendar.MONTH) + 1;
-        int day = cal.get(Calendar.DATE) ;
-        System.out.println(year);
-        System.out.println(month);
-        System.out.println(day);
-    }
-
     @Override
     public Map<String, Object> warehousingFlowing(Storage storage) {
         Map<String, Object> map = new HashMap<>();
@@ -243,7 +236,7 @@ public class WarehousingServiceImpl implements WarehousingService {
             //导出数据汇总
             List<List<Object>> sheetDataList = new ArrayList<>();
             //表头数据
-            List<Object> head = Arrays.asList("物料编号", "供应商名称", "连翻号", "生产日期", "生产批次", "容量", "序列号", "类型", "用户名称", "部门", "库位名称", "入库日期");
+            List<Object> head = Arrays.asList("物料名称", "供应商名称", "连翻号", "生产日期", "生产批次", "容量", "序列号", "类型", "用户名称", "部门", "库位名称", "入库日期");
             //查询数据
             PageHelper.startPage(storage.getPage(), storage.getLimit());
             PageInfo<Map<String, Object>> list = new PageInfo<>(warehousingMapper.export(storage));
@@ -268,7 +261,7 @@ public class WarehousingServiceImpl implements WarehousingService {
      * 入库单生成
      * @return
      */
-    public String codeGenerate(){
+    public String codeGenerateRk(){
         StringBuilder stringBuilder = new StringBuilder("RK");
         Date date = new Date();
         SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");

+ 151 - 6
src/main/resources/mapper/AskGoodsMapper.xml

@@ -34,7 +34,7 @@
     </insert>
     <!-- 查询生产领料单 -->
     <select id="getAskGoodsfList" resultType="com.tld.model.AskGoods">
-        select ask_goods_id,ask_goods_code from tld_ask_goods_f order by sqrq desc
+        select ask_goods_id,ask_goods_code,department from tld_ask_goods_f order by sqrq desc
     </select>
     <!-- 查询指定生产单的物料 -->
     <select id="getAskGoodsMaterial" resultType="com.tld.model.AskGoods">
@@ -52,12 +52,12 @@
     </select>
     <!-- 物料库位选择 -->
     <select id="getMaterialCk" resultType="com.tld.model.Inventory">
-        select * from tld_inventory where material_id = #{materialId}
+        select * from tld_inventory where material_id = #{materialId} order by scrq
     </select>
     <!-- 新增出库虚拟表 -->
     <insert id="addAskGoodsVitrual">
-        insert into tld_ask_goods_vitrual(unique_code,supplier_id,serial,wllb_code,produc_date,ask_goods_id,type)
-        values(uniqueCode,supplierId,serial,wllbCode,producDate,askGoodsId,#{type})
+        insert into tld_ask_goods_vitrual(unique_code,supplier_id,serial,wllb_code,produc_date,ask_goods_id,type,storage_location_code,num,user_id,department)
+        values(#{uniqueCode},#{supplierId},#{serial},#{wllbCode},#{producDate},#{askGoodsId},#{type},#{storageLocationCode},#{num},#{userId},#{department})
     </insert>
     <!-- 查询指定库存内容 -->
     <select id="getInventory" resultType="com.tld.model.Inventory">
@@ -76,7 +76,7 @@
     <select id="getScanIsNot" resultType="java.util.Map">
         select
             (select amount from tld_inventory where supplier_id = #{supplierId} and serial = #{uniqueCode} and wllb_code = #{wllbCode} and produc_date = #{producDate}) as inventoryNum,
-            (select num from tld_ask_goods_vitrual where supplier_id = #{supplierId} and serial = #{uniqueCode} and wllb_code = #{wllbCode} and produc_date = #{producDate}) as virtualNum
+            (select sum(num) from tld_ask_goods_vitrual where supplier_id = #{supplierId} and serial = #{uniqueCode} and wllb_code = #{wllbCode} and produc_date = #{producDate} and type = #{type}) as virtualNum
         from dual
     </select>
     <!-- 查询指定送货单信息 -->
@@ -90,6 +90,151 @@
     </select>
     <!-- 查询已扫描总数 -->
     <select id="getAskInfoNumVitrual" resultType="int">
-        select sum(num) from tld_ask_goods_vitrual where wllb_code = #{materialCode} and ask_goods_id = #{askGoodsId}
+        select sum(num) from tld_ask_goods_vitrual where wllb_code = #{materialCode} and ask_goods_id = #{askGoodsId} and type = #{type}
+    </select>
+    <!-- 查询此库存在虚拟表里占用的数量 -->
+    <select id="getInventoryAlready" resultType="int">
+        select sum(num) from tld_ask_goods_vitrual where supplier_id = #{supplierId} and serial = #{uniqueCode} and wllb_code = #{wllbCode} and produc_date = #{producDate} and type = #{type}
+    </select>
+    <!-- 查询虚拟表指定pda跟状态的的数据 -->
+    <select id="getVirtualUniqueCode" resultType="com.tld.model.AskGoods">
+        select * from tld_ask_goods_vitrual where unique_code = #{uniqueCode} and type = #{type} and ask_goods_id = #{askGoodsId}
+    </select>
+    <!-- 删除库存 -->
+    <delete id="deleteInventory">
+        delete from tld_inventory where id = #{id}
+    </delete>
+    <!-- 修改库存数量 -->
+    <update id="updateInventory">
+        UPDATE tld_inventory
+        SET amount = ( SELECT a.amount FROM (select (amount - ${amount}) as amount from tld_inventory WHERE id = #{id}) as a )
+        WHERE
+            id = #{id}
+    </update>
+    <!-- 删除虚拟表出库记录 -->
+    <delete id="deleteVirtual">
+        delete from tld_ask_goods_vitrual where id = #{id}
+    </delete>
+    <!-- 插入出库流水 -->
+    <insert id="addRemoval">
+        insert into tld_removal(wllb_code,supplier_id,serial,num,type,user_id,storage_location_code,scrq,process,ask_goods_id,produc_date,department)
+        values(#{materialCode},#{supplierId},#{serial},#{num},#{type},#{userId},#{storageLocationCode},now(),#{process},#{askGoodsId},#{producDate},#{department})
+    </insert>
+    <!-- 查询指定物料类型的id -->
+    <select id="getMaterialId" resultType="String">
+        select tld_id from tld_material where code = #{wllbCode}
+    </select>
+    <!-- 查询要料申请单内容 -->
+    <select id="getAskDetailed" resultType="com.tld.model.AskGoods">
+        select *
+        from tld_ask_goods
+        where ask_goods_id = #{askGoodsId} and material_id = #{materialId}
+    </select>
+    <!-- 新增返回gs数据字表信息 -->
+    <insert id="addReturnGsRemoval">
+        insert into tld_return_gs_removal_z(material_id,wbs,num,entry_number,ask_goods_id,ask_id,storage_location_code)
+        values(#{materialId},#{wbs},#{num},#{entryNumber},#{askGoodsId},#{askId},#{storageLocationCode})
+    </insert>
+    <!-- 查询要货单父级信息 -->
+    <select id="getAskDetailedF" resultType="com.tld.model.AskGoods">
+        select * from tld_ask_goods_f where ask_goods_id = #{askGoodsId}
+    </select>
+    <!-- 新增返回gs数据父表信息 -->
+    <insert id="addReturnGsRemovalF">
+        insert into tld_ask_goods_f(ask_goods_id,removal_code,source_type,move_type,scrq)
+        values(#{askGoodsId},#{removalCode},#{sourceType},#{movetype},now())
+    </insert>
+    <!-- 查询当天出库数量 -->
+    <select id="getReturnRemovalCount" resultType="int">
+        select count(*) from tld_return_gs_removal where scrq BETWEEN CONCAT(CURDATE(),' 00:00:00') AND CONCAT(CURDATE(),' 23:59:59');
+    </select>
+    <!-- 查询回传数据 -->
+    <select id="plugOutRemoval" resultType="java.util.Map">
+        select
+            id,
+            ask_goods_id as askGoodsId,
+            removal_code as removalCode,
+            source_type as sourceType,
+            move_type as moveType
+        from tld_return_gs_removal where removal_code = #{removalCode}
+    </select>
+    <!-- 查询字表回传数据 -->
+    <select id="getRemovalz" resultType="java.util.Map">
+        select
+            material_id as materialId,
+            wbs,
+            num,
+            entry_number as entryNumber,
+            ask_goods_id as askGoodsId,
+            ask_id as askId
+        from tld_return_gs_removal_z where ask_goods_id = #{askGoodsId}
+    </select>
+    <!-- 查询出库流水 -->
+    <select id="getRemoval" resultType="com.tld.model.AskGoods">
+        select
+            a.id,
+            b.name as materialName,
+            a.wllb_code,
+            h.name as supplierName,
+            a.serial,
+            a.type,
+            c.user_name as userName,
+            e.name as departmentName,
+            g.storage_location_name as storageLocationName,
+            a.scrq,
+            a.num
+        from tld_removal a
+        left join tld_material b on a.wllb_code = b.code
+        left join tld_user c on a.user_id = c.id
+        left join tld_department e on a.department = e.tld_id
+        left join tld_storage_location g on a.storage_location_code = g.storage_location_code
+        left join tld_customer h on a.supplier_id = h.code
+        <trim prefix="WHERE" prefixOverrides="and |or">
+            <if test="wllbCode != null and wllbCode != ''">
+                and a.wllb_code = #{wllbCode}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and a.scrq <![CDATA[>=]]> #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and a.scrq <![CDATA[<=]]> #{endTime}
+            </if>
+            <if test="type != null and type != ''">
+                and a.type like CONCAT(CONCAT('%', #{type}), '%')
+            </if>
+        </trim>
+    </select>
+    <!-- 导出 -->
+    <select id="export" resultType="java.util.LinkedHashMap">
+        select
+            b.name as materialName,
+            h.name as supplierName,
+            a.serial,
+            a.type,
+            c.user_name as userName,
+            e.name as departmentName,
+            g.storage_location_name as storageLocationName,
+            a.scrq,
+            a.num
+        from tld_removal a
+        left join tld_material b on a.wllb_code = b.code
+        left join tld_user c on a.user_id = c.id
+        left join tld_department e on a.department = e.tld_id
+        left join tld_storage_location g on a.storage_location_code = g.storage_location_code
+        left join tld_customer h on a.supplier_id = h.code
+        <trim prefix="WHERE" prefixOverrides="and |or">
+            <if test="wllbCode != null and wllbCode != ''">
+                and a.wllb_code = #{wllbCode}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and a.scrq <![CDATA[>=]]> #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and a.scrq <![CDATA[<=]]> #{endTime}
+            </if>
+            <if test="type != null and type != ''">
+                and a.type like CONCAT(CONCAT('%', #{type}), '%')
+            </if>
+        </trim>
     </select>
 </mapper>

+ 4 - 0
src/main/resources/mapper/StorageLocationMapper.xml

@@ -104,4 +104,8 @@
             </if>
         </trim>
     </select>
+    <!-- 查询编号是否存在 -->
+    <select id="getStorageCount" resultType="int">
+        select count(*) from tld_storage_location where storage_location_code = #{storageLocationCode}
+    </select>
 </mapper>

+ 8 - 7
src/main/resources/mapper/WarehousingMapper.xml

@@ -28,12 +28,12 @@
     <select id="getScanNum" resultType="java.util.Map">
         SELECT
             (ifnull(sum(a.num), 0) + ${num} + ifnull(c.amount, 0)) as scanNum,
-            b.storage_location_capacity as storageLocationCapacity
+            ifnull(b.storage_location_capacity, 0) as storageLocationCapacity
         FROM
             tld_warehousing_virtual a
-            join tld_storage_location b on a.storage_location_code = b.storage_location_code
-            left join tld_inventory c on a.storage_location_code = c.storage_location_code
-        where a.storage_location_code = #{storageLocationCode}
+            right join tld_storage_location b on a.storage_location_code = b.storage_location_code
+            left join tld_inventory c on b.storage_location_code = c.storage_location_code
+        where b.storage_location_code = #{storageLocationCode}
     </select>
     <!-- 查询 -->
     <select id="recommend" resultType="com.tld.model.StorageLocation">
@@ -97,10 +97,10 @@
     </insert>
     <!-- 插入库存 -->
     <insert id="addInventory">
-        insert into tld_inventory(storage_location_code,wllb_class,material_id,amount,totime,hold,amount_lock,account_sleeve,wbs,supplier_id,serial,wllb_code,produc_date)
+        insert into tld_inventory(storage_location_code,wllb_class,material_id,amount,totime,hold,amount_lock,account_sleeve,wbs,supplier_id,serial,wllb_code,produc_date,scrq)
         values
         <foreach collection="list" index="index" item="item" separator=",">
-            (#{item.storageLocationCode},#{item.wllbClass},#{item.materialId},#{item.num},now(),'0','0',#{item.accountSleeve},#{item.wbs},#{item.suppId},#{item.serial},#{item.wllbCode},#{item.producDate})
+            (#{item.storageLocationCode},#{item.wllbClass},#{item.materialId},#{item.num},now(),'0','0',#{item.accountSleeve},#{item.wbs},#{item.suppId},#{item.serial},#{item.wllbCode},#{item.producDate}, now())
         </foreach>
     </insert>
     <!-- 删除临时表数据 -->
@@ -124,6 +124,7 @@
     <select id="warehousingFlowing" resultType="com.tld.model.Storage">
         select
             a.id,
+            b.name as materialName,
             a.wllb_code,
             h.name as supplierName,
             a.serial,
@@ -161,7 +162,7 @@
     <!-- 查询导出内容 -->
     <select id="export" resultType="java.util.LinkedHashMap">
         select
-            a.wllb_code,
+            b.name as materialName,
             h.name as supplierName,
             a.serial,
             a.produc_date,