From cf6b965a86065a537a40c74f67e88a04447d2582 Mon Sep 17 00:00:00 2001
From: 李宇 <986321569@qq.com>
Date: 星期一, 12 七月 2021 18:00:38 +0800
Subject: [PATCH] 修改导入申购

---
 src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java |  226 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 220 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
index dbd05ef..bfcc6c4 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
@@ -1,8 +1,13 @@
 package com.nanometer.smartlab.service;
 
+import com.nanometer.smartlab.dao.BaseMetaDao;
+import com.nanometer.smartlab.dao.OpeReagentStatusDao;
 import com.nanometer.smartlab.dao.SysWarehouseDao;
-import com.nanometer.smartlab.entity.SysWarehouse;
+import com.nanometer.smartlab.entity.*;
+import com.nanometer.smartlab.entity.dto.InWarehouseInfoDto;
+import com.nanometer.smartlab.entity.dto.ReagentReceivingDto;
 import com.nanometer.smartlab.entity.dto.SysWarehouseDto;
+import com.nanometer.smartlab.entity.enumtype.*;
 import com.nanometer.smartlab.exception.AlarmCode;
 import com.nanometer.smartlab.exception.AlarmException;
 import com.nanometer.smartlab.exception.BusinessException;
@@ -19,10 +24,8 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * Created by cmower on 17/11/20.
@@ -34,6 +37,24 @@
 
     @Resource(name = "sysWarehouseDao")
     SysWarehouseDao sysWarehouseDao;
+    @Resource
+    DangerousEncodeService dangerousEncodeService;
+    @Resource
+    BaseMetaService baseMetaService;
+    @Resource
+    BaseMetaDao baseMetaDao;
+    @Resource
+    SysReagentService sysReagentService;
+    @Resource
+    OpeReagentStatusService opeReagentStatusService;
+    @Resource
+    OpeUseFlowService opeUseFlowService;
+    @Resource
+    OpeWarehouseReserveService opeWarehouseReserveService;
+    @Resource
+    private SysLaboratoryService sysLaboratoryService;
+    @Resource
+    private OpeReagentStatusDao opeReagentStatusDao;
 
     @Transactional(propagation = Propagation.REQUIRED)
     public List<SysWarehouse> getSysWarehouseList(String type, String name, Integer first, Integer pageSize) {
@@ -150,7 +171,7 @@
 	public List<SysWarehouse> getAllSysWarehouseList() {
 		return this.sysWarehouseDao.getAllSysWarehouseList();
 	}
-	
+
 	@Transactional(propagation = Propagation.REQUIRED)
     public boolean isSysWarehouseExist(String barCode, String editId) {
         try {
@@ -170,4 +191,197 @@
     public List<SysWarehouseDto> getWarehouseList() {
         return sysWarehouseDao.selectWarehouse();
     }
+
+    @Override
+    @Transactional
+    public void putInWarehouse(InWarehouseInfoDto inWarehouseInfo) throws Exception {
+        List<String> codes = inWarehouseInfo.getReagentCode();
+        if (codes !=null && codes.size()>0){
+            //
+            codes.forEach(code->{
+             //获取试剂名称码 5到8位
+                String reagentCode = code.substring(4, 8);
+                //获取厂商编码 第3位
+                String factoryCode = code.substring(2, 3);
+                //获取规格  第4位
+                String specificationsCode = code.substring(3, 4);
+                //获取包装  第19位
+                String packingCode = code.substring(18, 19);
+
+                //厂商
+                BaseMeta factory = baseMetaService
+                        .getBaseMeta("encode_replace_"+ReplaceDictType.factory.getKey(), factoryCode,null);
+                //规格
+                BaseMeta specifications = baseMetaService
+                        .getBaseMeta("encode_replace_"+ReplaceDictType.specifications.getKey(), specificationsCode,null);
+                //厂商信息
+                BaseMeta packing= baseMetaService
+                        .getBaseMeta("encode_replace_"+ReplaceDictType.packing.getKey(), packingCode,null);
+
+                //Todo 校验
+                DangerousEncode dangerousEncode = new DangerousEncode();
+                //数据库存储的前缀00空着
+                dangerousEncode.setReagentCode("00"+reagentCode);
+                List<DangerousEncode> dangerousEncodes =
+                        dangerousEncodeService.selectAll(dangerousEncode,null,null);
+
+                String reagentName = dangerousEncodes.get(0).getReagentName();
+                String cas = dangerousEncodes.get(0).getCas();
+                //危险性质 reagent_character
+                String dangerousInfo = dangerousEncodes.get(0).getMemo();
+                BaseMeta meta = baseMetaService.getBaseMeta("reagent_character", null, dangerousInfo);
+                BaseMeta baseMeta = new BaseMeta();
+                if (meta == null){
+                    baseMeta.setId(IDUtils.uuid());
+                    baseMeta.setGroupId("reagent_character");
+                    baseMeta.setValidFlag(ValidFlag.VALID);
+                    baseMeta.setMetaValue(dangerousInfo);
+                    baseMeta.setMetaKey(dangerousInfo);
+                    baseMetaService.insertBaseMeta(baseMeta);
+                }else{
+                    baseMeta = meta;
+                }
+
+                //查找是否存在试剂
+                List<SysReagent> reagent = sysReagentService
+                        .getReagent(reagentName, cas, factory.getId(), specifications.getId(), packing.getId());
+
+                    OpeReagentStatus ors = new OpeReagentStatus();
+                if (reagent != null &&reagent.size()>0){
+                    //存在试剂
+                    String reagentId = reagent.get(0).getId();
+                    ors.setReagentId(reagentId);
+
+                }else{
+                    //试剂不存在
+                    SysReagent sr = new SysReagent();
+                    sr.setId(IDUtils.uuid());
+                    sr.setCas(cas);
+                    sr.setName(reagentName);
+                    sr.setProductHome(factory.getId());
+                    sr.setReagentFormat(specifications.getId());
+                    sr.setReagentUnit(packing.getId());
+                    //危险性质
+                    sr.setReagentCharacter(baseMeta.getId());
+                    //设备生成试剂类型 为3
+                    sr.setType(3);
+                    sr.setDangerousFlag(DangerousFlag.NORMAL);
+                    SysReagent sysReagent = sysReagentService.insertSysReagent(sr);
+                    String reagentId = sysReagent.getId();
+                    ors.setReagentId(reagentId);
+                }
+
+                ors.setId(IDUtils.uuid());
+                //入仓库
+                ors.setStatus(ArrivalStatus.WAREHOUSE);
+                //批号
+                ors.setArticleNumber(inWarehouseInfo.getArticleNumber());
+                ors.setValidFlag(ValidFlag.VALID);
+                ors.setContainerId(inWarehouseInfo.getContainerId());
+                ors.setHouseId(inWarehouseInfo.getWarehouseId());
+                ors.setUserId(inWarehouseInfo.getUser());
+                ors.setReagentCode(code);
+                opeReagentStatusService.insertOpeReagentStatus(ors);
+
+                //更新试剂流向
+                OpeUseFlow opeUseFlow = new OpeUseFlow();
+                //入仓库
+                opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE);
+                opeUseFlow.setContainerId(inWarehouseInfo.getContainerId());
+                opeUseFlow.setHouseId(inWarehouseInfo.getWarehouseId());
+                opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+                opeUseFlow.setReagentCode(code);
+                //持有者
+                opeUseFlow.setUserId(inWarehouseInfo.getUser());
+                Map<String, String> metaMap = new HashMap<>();
+                metaMap.put("groupId", "operate_status");
+                metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
+                List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
+                opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+                opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+
+                //更新仓库库存
+                // 仓库库存update
+                OpeWarehouseReserve opeWarehouseReserve = opeWarehouseReserveService
+                        .getOpeWarehouseReserve2(ors.getReagentId(), inWarehouseInfo.getArticleNumber(), inWarehouseInfo.getWarehouseId());
+                if (opeWarehouseReserve == null) {
+                    opeWarehouseReserve = new OpeWarehouseReserve();
+                    opeWarehouseReserve.setReagentId(ors.getReagentId());
+                    opeWarehouseReserve.setArticleNumber(inWarehouseInfo.getArticleNumber());
+                    opeWarehouseReserve.setReserve(0);
+                    opeWarehouseReserve.setWarehouseId(inWarehouseInfo.getWarehouseId());
+                    opeWarehouseReserve.setUserId("admin");
+                }
+                //库存加1
+                opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + 1);
+                if (StringUtils.isBlank(opeWarehouseReserve.getId())) {
+                    this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve);
+                } else {
+                    this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
+                }
+
+            });
+        }
+
+    }
+
+    @Override
+    @Transactional
+    public void reagentReceiving(ReagentReceivingDto reagentReceiving) {
+        String number = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
+        String receiptNum = "BS" + number;
+
+        reagentReceiving.getReagentCode().forEach(code->{
+                //
+            OpeReagentStatus ors = opeReagentStatusService.getOpeReagentStatusByReagentCode(code);
+            //1.更新试剂状态  在仓库-》领用
+//            ors.setStatus(ArrivalStatus.PERSONAL);
+            ors.setContainerId(reagentReceiving.getLabContainerId());
+            ors.setHouseId(reagentReceiving.getLabId());
+            ors.setUserId(reagentReceiving.getApplyUserId());
+
+            if (opeReagentStatusService.isAllowWarehouseUse(ors)) {
+                // 减少库存
+                OpeWarehouseReserve opeWarehouseReserve = opeWarehouseReserveService.getOpeWarehouseReserve(
+                        ors.getReagent().getId(), ors.getArticleNumber());
+                opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
+                opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
+            }
+            ors.setStatus(ArrivalStatus.NOREGISTER);
+            opeReagentStatusDao.updateOpeReagentStatusDao(ors);
+            OpeUseFlow opeUseFlow = new OpeUseFlow();
+            opeUseFlow.setReagentCode(ors.getReagentCode());
+            opeUseFlow.setStatus(ors.getStatus());
+            opeUseFlow.setHouseId(ors.getHouseId());
+            opeUseFlow.setContainerId(ors.getContainerId());
+            opeUseFlow.setUserId(ors.getUserId());
+            opeUseFlow.setPlace(ors.getPlace());
+            opeUseFlow.setRemainder(ors.getRemainder());
+            //新增 领用单号
+            opeUseFlow.setReceiptNumber(receiptNum);
+
+            Map<String, String> metaMap = new HashMap<>();
+            metaMap.put("groupId", "operate_status");
+            metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+            List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
+            opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+            this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+
+        });
+
+    }
+
+    @Override
+    @Transactional
+    public void updateSysWarehouse2(SysWarehouse sysWarehouse, SysLaboratory sysLaboratory) {
+        //1.0更新自己
+        this.updateSysWarehouse(sysWarehouse);
+        //2.更新实验室
+        sysLaboratory.setInfoCode(sysWarehouse.getInfoCode());
+        sysLaboratory.setBarCode(sysWarehouse.getBarCode());
+        sysLaboratory.setLocation1(sysWarehouse.getLocation1());
+        sysLaboratory.setLocation2(sysWarehouse.getLocation2());
+        sysLaboratory.setDepartment(sysWarehouse.getDepartment());
+        sysLaboratoryService.updateSysLaboratory(sysLaboratory);
+    }
 }

--
Gitblit v1.9.2