package com.nanometer.smartlab.service;
|
|
import com.nanometer.smartlab.dao.SysReagentDao;
|
import com.nanometer.smartlab.entity.OpeWarehouseReserve;
|
import com.nanometer.smartlab.entity.SysReagent;
|
import com.nanometer.smartlab.entity.SysUser;
|
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.model.CommonPage;
|
import com.nanometer.smartlab.util.ExcelUtils;
|
import com.nanometer.smartlab.util.IDUtils;
|
import com.nanometer.smartlab.util.MessageUtil;
|
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 javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
/**
|
* Created by johnny on 17/11/29.
|
*/
|
@Service("sysReagentService")
|
public class SysReagentServiceImpl implements SysReagentService {
|
|
private static Logger logger = Logger.getLogger(SysReagentService.class);
|
|
@Resource(name = "sysReagentDao")
|
SysReagentDao sysReagentDao;
|
@Resource
|
OpeWarehouseReserveService opeWarehouseReserveService;
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public List<SysReagent> getSysReagentList(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
if (StringUtils.isNotBlank(name)) {
|
params.put("name", "%" + name + "%");
|
}
|
if (StringUtils.isNotBlank(cas)) {
|
params.put("cas", "%" + cas + "%");
|
}
|
if (StringUtils.isNotBlank(supplierId)) {
|
params.put("supplierId", supplierId);
|
}
|
if(type!=null){
|
params.put("type", type);
|
}
|
params.put("first", first);
|
params.put("pageSize", pageSize);
|
return this.sysReagentDao.getSysReagentList(params);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize,String productSn) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("supplierId", supplierId);
|
params.put("type", type);
|
params.put("first", first);
|
params.put("pageSize", pageSize);
|
params.put("productSn", productSn);
|
return this.sysReagentDao.getSysReagentListNew(params);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
/**
|
* @Description: 收藏与未收藏 0未收藏 1收藏 统计个数
|
* @date 2020/12/1 17:04
|
*/
|
@Override
|
public int favorCount(SysUser user, String name, String cas, String supplierId, String productSn, Integer favorFlag) {
|
|
Map<String, Object> params = new HashMap<>();
|
params.put("user", user.getId());
|
params.put("favorFlag", favorFlag);
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("supplierId", supplierId);
|
params.put("productSn", productSn);
|
return sysReagentDao.favorCount(params);
|
}
|
|
/**
|
* @Description: 收藏与未收藏 0未收藏 1收藏 统计详情
|
* @date 2020/12/1 17:04
|
*/
|
@Override
|
public List<SysReagent> favorList(SysUser user, String name, String cas, String supplierId, String productSn, Integer favorFlag, Integer first, Integer pageSize) {
|
Map<String, Object> params = new HashMap<>();
|
params.put("user", user.getId());
|
params.put("favorFlag", favorFlag);
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("supplierId", supplierId);
|
params.put("productSn", productSn);
|
params.put("first", first);
|
params.put("pageSize", pageSize);
|
return sysReagentDao.favorList(params);
|
}
|
|
@Override
|
public int reagentCount(SysUser user, String name, String cas, String supplierId, String productSn) {
|
Map<String, Object> params = new HashMap<>();
|
params.put("user", user.getId());
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("supplierId", supplierId);
|
params.put("productSn", productSn);
|
return sysReagentDao.reagentCount(params);
|
}
|
|
@Override
|
public List<SysReagent> reagentList(SysUser user, String name, String cas, String supplierId, String productSn, int first, int pageSize,int count) {
|
Map<String, Object> params = new HashMap<>();
|
params.put("user", user.getId());
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("supplierId", supplierId);
|
params.put("productSn", productSn);
|
params.put("first", first);
|
params.put("pageSize", pageSize);
|
params.put("MaxSize", count);
|
return sysReagentDao.reagentList(params);
|
}
|
|
@Override
|
public CommonPage<SysReagent> reagentList(Integer pageNum,Integer pageSize,String name,String cas){
|
if(pageNum==null||pageNum<1){
|
pageNum=1;
|
}
|
if(pageSize==null||pageSize<1){
|
pageSize=10;
|
}
|
if(pageSize>50){
|
pageSize=50;
|
}
|
Map<String, Object> params = new HashMap<>();
|
|
params.put("name",name);
|
params.put("cas",cas);
|
params.put("first", (pageNum-1)*pageSize);
|
params.put("pageSize", pageSize);
|
CommonPage commonPage=new CommonPage();
|
commonPage.setPageNum(pageNum);
|
commonPage.setPageSize(pageSize);
|
Long total=new Long(sysReagentDao.reagentSimpleInfoCount(params));
|
commonPage.setTotal(total);
|
commonPage.setTotalPage(CommonPage.getTotalPage(total,pageSize));
|
List<SysReagent> sysReagents=sysReagentDao.reagentSimpleInfoList(params);
|
commonPage.setList(sysReagents);
|
return commonPage;
|
}
|
|
@Override
|
public String getReagentUnitByReagentId(String reagentId) {
|
return sysReagentDao.getReagentUnitByReagentId(reagentId);
|
}
|
|
@Override
|
public List<SysReagent> getReagent(String name, String cas, String factory, String specifications, String packing) {
|
Map<String, String> params = new HashMap<>();
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("factory", factory);
|
params.put("specifications", specifications);
|
params.put("packing", packing);
|
return sysReagentDao.getReagent(params);
|
}
|
|
@Override
|
public List<SysReagent> selectReagentSafetyNum() {
|
|
return sysReagentDao.selectReagentSafetyNum();
|
}
|
|
@Override
|
public void updateSafetyNum(SysReagent sysReagent) {
|
sysReagentDao.updateSafetyNum(sysReagent.getId(), sysReagent.getSafetynum());
|
}
|
|
|
/**
|
* @Description: 根据detail的信息获取试剂的id
|
* @date 2021/6/21 9:45
|
*/
|
@Override
|
public SysReagent getReagentByDetail(Map<String, Object> detail) {
|
List<SysReagent> reagentIds = sysReagentDao.countReagentByDetail(detail);
|
if (reagentIds.size() != 1) {
|
return null;
|
}
|
return reagentIds.get(0);
|
}
|
|
@Override
|
public SysReagent getRowData(String rowKey) {
|
return sysReagentDao.getRowData(rowKey);
|
}
|
|
@Override
|
public SysReagent getSysReagentListNewRowData(String rowKey) {
|
return sysReagentDao.getSysReagentListNewRowData(rowKey);
|
}
|
|
@Override
|
public boolean export2Excel(List<Map> list, Integer type) throws Exception {
|
Map<String,String> map = new LinkedHashMap<>();
|
if (type == 0){
|
map.put("kind", "种类");
|
map.put("name", "名称");
|
map.put("productSn", "产品编号");
|
map.put("cas", "CAS");
|
map.put("reagentType", "试剂类型");
|
map.put("reagentCharacter", "危险性质");
|
map.put("supplierName", "供应商");
|
map.put("productHomeName", "厂家");
|
map.put("reagentFormat", "规格");
|
map.put("reagentUnit", "包装");
|
map.put("price", "含税售价");
|
map.put("perBox", "每箱数量");
|
ExcelUtils.export2Excel(list,"耗材列表",map);
|
}else {
|
map.put("kind", "种类");
|
map.put("name", "试剂名称");
|
map.put("control_products_name", "管制品");
|
map.put("productSn", "产品编号");
|
map.put("cas", "CAS");
|
map.put("reagentType", "试剂类型");
|
map.put("reagentCharacter", "危险性质");
|
map.put("supplierName", "供应商");
|
map.put("productHomeName", "厂家");
|
map.put("reagentFormat", "规格");
|
map.put("reagentUnit", "包装");
|
map.put("price", "含税售价");
|
// map.put("originprice", "原始售价");
|
map.put("perBox", "每箱数量");
|
map.put("safetynum", "安全库存");
|
ExcelUtils.export2Excel(list,"试剂列表",map);
|
}
|
return true;
|
}
|
|
@Override
|
public List<Map> selectAll(String name, String cas, String supplierId, Integer type, String productSn) {
|
Map<String, Object> params = new HashMap<String, Object>();
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("supplierId", supplierId);
|
params.put("type", type);
|
params.put("productSn", productSn);
|
return sysReagentDao.selectAll(params);
|
}
|
|
@Override
|
public void updateSysReagentPrice(String reagentId, BigDecimal applyPrice) {
|
sysReagentDao.updateSysReagentPriceById(reagentId, applyPrice);
|
}
|
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
if (StringUtils.isNotBlank(name)) {
|
params.put("name", "%" + name + "%");
|
}
|
if (StringUtils.isNotBlank(cas)) {
|
params.put("cas", "%" + cas + "%");
|
}
|
if(type!=null){
|
params.put("type", type);
|
}
|
params.put("supplierId", supplierId);
|
return this.sysReagentDao.getSysReagentTotalCount(params);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
|
public int getSysReagentTotalCountNew(String name, String cas, String supplierId,Integer type,String productSn) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
params.put("name", name);
|
params.put("cas", cas);
|
params.put("type", type);
|
params.put("supplierId", supplierId);
|
params.put("productSn", productSn);
|
return this.sysReagentDao.getSysReagentTotalCountNew(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 SysReagent getSysReagent(String id) {
|
try {
|
return this.sysReagentDao.getSysReagent(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 SysReagent insertSysReagent(SysReagent sysReagent) {
|
try {
|
if (sysReagent.getId() == null) {
|
sysReagent.setId(IDUtils.uuid());
|
}
|
sysReagent.setName(sysReagent.getName().trim());
|
this.sysReagentDao.insertSysReagent(sysReagent);
|
return sysReagent;
|
} 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 updateSysReagent(SysReagent sysReagent) {
|
try {
|
sysReagent.setName(sysReagent.getName().trim());
|
int row = this.sysReagentDao.updateSysReagent(sysReagent);
|
|
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 deleteSysReagent(List<SysReagent> sysReagentList) {
|
try {
|
if (sysReagentList == null || sysReagentList.size() == 0) {
|
return false;
|
}
|
|
List<String> ids = new ArrayList<String>();
|
for (SysReagent sysReagent : sysReagentList) {
|
//判断试剂在库中是否存在
|
int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCount(sysReagent.getId(), sysReagent.getSupplierId());
|
if (count > 0) {
|
throw new Exception();
|
}
|
ids.add(sysReagent.getId());
|
}
|
|
int row = this.sysReagentDao.deleteSysReagent(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);
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new BusinessException(ExceptionEnumCode.SYS_ERR,"试剂在库中已经有了不能删除");
|
}
|
}
|
|
@Override
|
@Transactional
|
public int insertSysReagentList(List<SysReagent> sysReagentList) {
|
try {
|
int i = 0;
|
for (SysReagent sysReagent:sysReagentList
|
) {
|
List<SysReagent> sysReagentTmpl = sysReagentDao.getSysReagentByCas(sysReagent);
|
if(sysReagentTmpl.size()>0){
|
for (SysReagent sr : sysReagentTmpl) {
|
sysReagent.setId(sr.getId());
|
this.sysReagentDao.updateSysReagentForExport(sysReagent);
|
}
|
}else{
|
if (sysReagent.getId() == null) {
|
sysReagent.setId(IDUtils.uuid());
|
}
|
this.sysReagentDao.insertSysReagent(sysReagent);
|
}
|
i++;
|
}
|
return i;
|
|
} 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);
|
}
|
}
|
|
|
@Override
|
public List<SysReagent> query(){
|
return this.sysReagentDao.query();
|
}
|
|
@Override
|
public Map getReagentDetail(String id) {
|
return sysReagentDao.getSysReagentDetail(id);
|
}
|
|
@Override
|
public int insertSysReagentList2(List<SysReagent> sysReagentList) {
|
try {
|
int i = 0;
|
for (SysReagent sysReagent:sysReagentList
|
) {
|
SysReagent sysReagentTmpl = new SysReagent();
|
sysReagentTmpl = sysReagentDao.getSysReagentByCas2(sysReagent);
|
if(sysReagentTmpl!=null){
|
sysReagent.setId(sysReagentTmpl.getId());
|
this.sysReagentDao.updateSysReagentForExport(sysReagent);
|
}else{
|
if (sysReagent.getId() == null) {
|
sysReagent.setId(IDUtils.uuid());
|
}
|
this.sysReagentDao.insertSysReagent(sysReagent);
|
}
|
i++;
|
}
|
return i;
|
|
} 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);
|
}
|
}
|
}
|