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 getSysReagentList(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize) { try { Map params = new HashMap(); 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 getSysReagentListNew(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize,String productSn) { try { Map params = new HashMap(); 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 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 favorList(SysUser user, String name, String cas, String supplierId, String productSn, Integer favorFlag, Integer first, Integer pageSize) { Map 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 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 reagentList(SysUser user, String name, String cas, String supplierId, String productSn, int first, int pageSize,int count) { Map 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 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 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 sysReagents=sysReagentDao.reagentSimpleInfoList(params); commonPage.setList(sysReagents); return commonPage; } @Override public String getReagentUnitByReagentId(String reagentId) { return sysReagentDao.getReagentUnitByReagentId(reagentId); } @Override public List getReagent(String name, String cas, String factory, String specifications, String packing) { Map 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 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 detail) { List 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 list, Integer type) throws Exception { Map 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 selectAll(String name, String cas, String supplierId, Integer type, String productSn) { Map params = new HashMap(); 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 params = new HashMap(); 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 params = new HashMap(); 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 sysReagentList) { try { if (sysReagentList == null || sysReagentList.size() == 0) { return false; } List ids = new ArrayList(); 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 sysReagentList) { try { int i = 0; for (SysReagent sysReagent:sysReagentList ) { List 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 query(){ return this.sysReagentDao.query(); } @Override public Map getReagentDetail(String id) { return sysReagentDao.getSysReagentDetail(id); } @Override public int insertSysReagentList2(List 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); } } }