package com.nanometer.smartlab.service;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import com.google.common.collect.ImmutableBiMap;
|
import com.google.common.collect.Maps;
|
import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
|
import com.nanometer.smartlab.dao.SysLaboratoryDao;
|
import com.nanometer.smartlab.entity.SysLaboratory;
|
import com.nanometer.smartlab.entity.SysLaboratoryContainer;
|
import com.nanometer.smartlab.entity.SysWarehouse;
|
import com.nanometer.smartlab.util.Constants;
|
import org.apache.commons.lang.StringUtils;
|
import org.apache.log4j.Logger;
|
import org.springframework.dao.DataAccessException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DuplicateKeyException;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
|
import com.nanometer.smartlab.entity.SysWarehouseContainer;
|
import com.nanometer.smartlab.exception.AlarmCode;
|
import com.nanometer.smartlab.exception.AlarmException;
|
import com.nanometer.smartlab.exception.BusinessException;
|
import com.nanometer.smartlab.exception.ExceptionEnumCode;
|
import com.nanometer.smartlab.util.IDUtils;
|
import com.nanometer.smartlab.util.MessageUtil;
|
|
/**
|
* Created by cmower on 17/11/20.
|
*/
|
@Service("sysWarehouseContainerService")
|
public class SysWarehouseContainerServiceImpl implements SysWarehouseContainerService {
|
|
private static Logger logger = Logger.getLogger(SysWarehouseContainerService.class);
|
|
@Resource(name = "sysWarehouseContainerDao")
|
SysWarehouseContainerDao sysWarehouseContainerDao;
|
@Resource
|
SysLaboratoryContainerDao sysLaboratoryContainerDao;
|
@Resource
|
SysLaboratoryDao sysLaboratoryDao;
|
@Resource
|
BaseMetaService baseMetaService;
|
@Resource
|
SysWarehouseService sysWarehouseService;
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseType, String warehouseName, String warehouseId, Integer first, Integer pageSize) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
if (StringUtils.isNotBlank(warehouseType)) {
|
params.put("warehouseType", warehouseType);
|
}
|
if (StringUtils.isNotBlank(warehouseName)) {
|
params.put("warehouseName", "%" + warehouseName + "%");
|
}
|
if (StringUtils.isNotBlank(warehouseId)) {
|
params.put("warehouseId", warehouseId);
|
}
|
params.put("first", first);
|
params.put("pageSize", pageSize);
|
return this.sysWarehouseContainerDao.getSysWarehouseContainerList(params);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseId){
|
return getSysWarehouseContainerList(null,null,warehouseId,null,null);
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public int getSysWarehouseContainerTotalCount(String warehouseType, String warehouseName) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
if (StringUtils.isNotBlank(warehouseType)) {
|
params.put("warehouseType", warehouseType);
|
}
|
if (StringUtils.isNotBlank(warehouseName)) {
|
params.put("warehouseName", "%" + warehouseName + "%");
|
}
|
return this.sysWarehouseContainerDao.getSysWarehouseContainerTotalCount(params);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public SysWarehouseContainer getSysWarehouseContainer(String id) {
|
try {
|
return this.sysWarehouseContainerDao.getSysWarehouseContainer(id);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public SysWarehouseContainer insertSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) {
|
try {
|
if (sysWarehouseContainer.getId() == null) {
|
sysWarehouseContainer.setId(IDUtils.uuid());
|
}
|
this.sysWarehouseContainerDao.insertSysWarehouseContainer(sysWarehouseContainer);
|
return sysWarehouseContainer;
|
} catch (DuplicateKeyException ex) {
|
logger.warn(ex.getMessage(), ex);
|
throw new AlarmException(AlarmCode.DATA_DUPLICATE, MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
|
} catch (DataIntegrityViolationException ex) {
|
logger.warn(ex.getMessage(), ex);
|
throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
|
} catch (DataAccessException ex) {
|
logger.error(ex.getMessage(), ex);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
|
}
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public boolean updateSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) {
|
try {
|
int row = this.sysWarehouseContainerDao.updateSysWarehouseContainer(sysWarehouseContainer);
|
|
if (row == 0) {
|
return false;
|
}
|
return true;
|
} catch (DuplicateKeyException ex) {
|
logger.warn(ex.getMessage(), ex);
|
throw new AlarmException(AlarmCode.DATA_DUPLICATE, MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
|
} catch (DataIntegrityViolationException ex) {
|
logger.warn(ex.getMessage(), ex);
|
throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
|
} catch (DataAccessException ex) {
|
logger.error(ex.getMessage(), ex);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
|
}
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public boolean deleteSysWarehouseContainer(List<SysWarehouseContainer> sysWarehouseContainerList) {
|
try {
|
if (sysWarehouseContainerList == null || sysWarehouseContainerList.size() == 0) {
|
return false;
|
}
|
|
List<String> ids = new ArrayList<String>();
|
for (SysWarehouseContainer sysWarehouseContainer : sysWarehouseContainerList) {
|
ids.add(sysWarehouseContainer.getId());
|
}
|
|
int row = this.sysWarehouseContainerDao.deleteSysWarehouseContainers(ids);
|
if (row == 0) {
|
return false;
|
}
|
|
return true;
|
} catch (DataIntegrityViolationException ex) {
|
logger.warn(ex.getMessage(), ex);
|
throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
|
} catch (DataAccessException ex) {
|
logger.error(ex.getMessage(), ex);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
|
}
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public boolean isSysWarehouseContainerExist(String containerCode, String editId) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
params.put("containerCode", containerCode);
|
params.put("editId", editId);
|
|
int count = this.sysWarehouseContainerDao.getSysWarehouseContainerTotalCount(params);
|
return count > 0;
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
@Override
|
@Transactional(readOnly = true)
|
public List<SysWarehouseContainer> getSysWarehouseContainerInfoList(String startTime, String endTime){
|
Map<String, String> params = ImmutableBiMap.of("startTime",startTime,"endTime",endTime);
|
return sysWarehouseContainerDao.getSysWarehouseContainerInfoList(params);
|
}
|
|
@Override
|
@Transactional(propagation = Propagation.REQUIRED)
|
public SysWarehouseContainer getSysWarehouseContainerByContainerCode(String containerCode) {
|
try {
|
return this.sysWarehouseContainerDao.getSysWarehouseContainerByContainerCode(containerCode);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR,
|
MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
@Override
|
@Transactional
|
public void insertSysWarehouseContainer2(SysWarehouseContainer sysWarehouseContainer) {
|
//0.新建自己
|
this.insertSysWarehouseContainer(sysWarehouseContainer);
|
SysWarehouse sysWarehouse = sysWarehouseService.getSysWarehouse(sysWarehouseContainer.getWarehouseId());
|
//1.新建实验室
|
SysLaboratory sl = new SysLaboratory();
|
|
sl.setId(IDUtils.uuid());
|
sl.setType(baseMetaService.getBaseMetaList(Constants.BASE_META_GROUP_LABORATORY_TYPE).get(0).getId());
|
//判断是否已经存在该名称实验室
|
SysLaboratory sysLaboratory = sysLaboratoryDao.getSysLaboratoryByName(sysWarehouse.getName());
|
if (sysLaboratory == null) {
|
//新建实验室
|
sl.setName(sysWarehouse.getName());
|
sl.setInfoCode(sysWarehouse.getInfoCode());
|
sl.setBarCode(sysWarehouse.getBarCode());
|
sl.setLocation1(sysWarehouse.getLocation1());
|
sl.setLocation2(sysWarehouse.getLocation2());
|
sl.setDepartment(sysWarehouse.getDepartment());
|
sysLaboratoryDao.insertSysLaboratory(sl);
|
}else{
|
sl.setId(sysLaboratory.getId());
|
}
|
|
//新建临时存储库
|
Map<String,Object> params = new HashMap<>();
|
params.put("containerCode", sysWarehouseContainer.getContainerCode());
|
int count = sysLaboratoryContainerDao.getSysLaboratoryContainerTotalCount(params);
|
//判断是否已经存在该条码柜子
|
if (count < 1) {
|
SysLaboratoryContainer slc = new SysLaboratoryContainer();
|
slc.setId(IDUtils.uuid());
|
// (#{id}, #{laboratoryId}, #{type}, #{containerCode}, #{infoCode}, #{structure},
|
// #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode},#{project})
|
slc.setLaboratoryId(sl.getId());
|
slc.setType(sysWarehouseContainer.getType());
|
slc.setContainerCode(sysWarehouseContainer.getContainerCode());
|
slc.setInfoCode(sysWarehouseContainer.getInfoCode());
|
slc.setStructure(sysWarehouseContainer.getStructure());
|
slc.setName(sysWarehouseContainer.getName());
|
slc.setCharacterLeft(sysWarehouseContainer.getCharacterLeft());
|
slc.setCharacterRight(sysWarehouseContainer.getCharacterRight());
|
slc.setControllerCode(sysWarehouseContainer.getControllerCode());
|
sysLaboratoryContainerDao.insertSysLaboratoryContainer(slc);
|
}
|
|
}
|
|
@Override
|
@Transactional
|
public void updateSysWarehouseContainer2(SysWarehouseContainer sysWarehouseContainer) {
|
//1.更新自己
|
this.updateSysWarehouseContainer(sysWarehouseContainer);
|
//2.更新实验室临时货柜 by ContainerCode
|
SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(sysWarehouseContainer.getContainerCode());
|
sysLaboratoryContainer.setName(sysWarehouseContainer.getName());
|
sysLaboratoryContainer.setInfoCode(sysWarehouseContainer.getInfoCode());
|
sysLaboratoryContainer.setControllerCode(sysWarehouseContainer.getControllerCode());
|
sysLaboratoryContainer.setStructure(sysWarehouseContainer.getStructure());
|
sysLaboratoryContainer.setCharacterRight(sysWarehouseContainer.getCharacterRight());
|
sysLaboratoryContainer.setCharacterLeft(sysWarehouseContainer.getCharacterLeft());
|
sysLaboratoryContainerDao.updateSysLaboratoryContainer(sysLaboratoryContainer);
|
|
}
|
|
@Override
|
@Transactional
|
public void deleteSysWarehouseContainer2(List<SysWarehouseContainer> selectedList) {
|
//1.删除自己
|
this.deleteSysWarehouseContainer(selectedList);
|
List<String> ids = new ArrayList<>();
|
for (SysWarehouseContainer swc : selectedList) {
|
SysLaboratoryContainer slc = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(swc.getContainerCode());
|
if (slc != null) {
|
ids.add(slc.getId());
|
}
|
}
|
//2.删除实验室临时存储柜
|
if (ids.size() > 0){
|
sysLaboratoryContainerDao.deleteSysLaboratoryContainers(ids);
|
}
|
}
|
|
|
}
|