gdg
2021-02-03 94e89a3391c7f28d9002fbcc0cafdbf6d05d7e73
src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
@@ -1,8 +1,12 @@
package com.nanometer.smartlab.service;
import com.nanometer.smartlab.dao.BaseMetaDao;
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;
@@ -34,6 +38,20 @@
    @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;
    @Transactional(propagation = Propagation.REQUIRED)
    public List<SysWarehouse> getSysWarehouseList(String type, String name, Integer first, Integer pageSize) {
@@ -170,4 +188,154 @@
    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) {
        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());
            opeReagentStatusService.updateReagentStatus(ors);
        });
    }
}