package com.nanometer.smartlab.controller; import com.nanometer.smartlab.entity.*; import com.nanometer.smartlab.entity.enumtype.DangerousFlag; import com.nanometer.smartlab.entity.enumtype.ReagentTypeFlag; import com.nanometer.smartlab.entity.enumtype.Type; import com.nanometer.smartlab.service.*; import com.nanometer.smartlab.util.Constants; import com.nanometer.smartlab.util.FacesUtils; import com.nanometer.smartlab.util.IDUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.primefaces.context.RequestContext; import org.primefaces.event.FileUploadEvent; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import org.primefaces.model.UploadedFile; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import javax.faces.context.FacesContext; import javax.faces.event.ActionListener; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * Created by johnny on 17/11/29. */ @Controller @Scope("session") public class ReagentMngController extends BaseController { private static Logger logger = Logger.getLogger(ReagentMngController.class); @Resource private SysReagentService sysReagentService; @Resource private SysSupplierService sysSupplierService; @Resource private BaseMetaService baseMetaService; @Resource private OpeApplyService opeApplyService; @Resource private OpeOrderService opeOrderService; @Resource private OpeLaboratoryReserveService opeLaboratoryReserveService; @Resource private OpeWarehouseReserveService opeWarehouseReserveService; @Resource private OpeReagentStatusService opeReagentStatusService; private LazyDataModel dataModel; private SysReagent sysReagent; private List selectedList; private String name; private Long supplierId; private String cas; private List supplierSelectList; private List typeList; private String productSn; public List getTypeList() { if (this.typeList == null) { this.typeList = Arrays.asList(Type.values()); } return typeList; } public void setTypeList(List typeList) { this.typeList = typeList; } private List products; private List codeList; private List sysSupplierList; private List dangerousFlagSelectList; private List reagentTypeFlagList; private Integer type; public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } private int action; /*@PostConstruct public void init(){ System.out.println("系统启动中。。。加载codeMap"); //List list=sysReagentService.getSysReagentList(); *//* List codeList = codeService.selectAll(); for (Code code : codeList) { codeMap.put(code.getKey(), code.getValue()); }*//* }*/ public String getCas() { return cas; } public void setCas(String cas) { this.cas = cas; } public void initPage() { this.initSupplierSelectList(); } private void initSupplierSelectList() { this.supplierSelectList = this.sysSupplierService.getSysSupplierList(); this.products = baseMetaService.getBaseMetaList("product_name"); } public void query(){ List list=this.sysReagentService.query(); Map map=new HashMap<>(); List list2 =new ArrayList<>(); Map> result=new HashMap<>(); for (int i=0;i0){ List res=result.get(key); res.add(re); result.put(key,res); }else { List res=new ArrayList<>(); res.add(re); res.add(map.get(key)); result.put(key,res); } }else { map.put(key,re); } } } System.out.println("map================="+map.size()); System.out.println("list2================="+list2.size()); for(int i=0;i> data=new ArrayList<>(); for (String key : result.keySet()) { data.add(result.get(key)); List arr=result.get(key); List last=new ArrayList<>(); if(arr!=null && arr.size()>1){ SysReagent max=arr.get(0); for(int i=1;i> data){ ServletOutputStream out = null; InputStream is = null; try { FacesContext ctx = FacesContext.getCurrentInstance(); ctx.responseComplete(); String contentType = "application/x-download"; HttpServletResponse response = (HttpServletResponse) ctx .getExternalContext().getResponse(); response.setContentType(contentType); StringBuffer contentDisposition = new StringBuffer(); contentDisposition.append("attachment;"); contentDisposition.append("filename=\""); contentDisposition.append("申购管理.xls"); contentDisposition.append("\""); response.setHeader( "Content-Disposition", new String(contentDisposition.toString().getBytes( System.getProperty("file.encoding")), "ISO8859-1")); out = response.getOutputStream(); List headerList = new ArrayList<>(); headerList.add("试剂名称"); headerList.add("cas"); headerList.add("规格"); headerList.add("包装"); headerList.add("供应商"); headerList.add("价格1"); headerList.add("价格2"); headerList.add("价格3"); headerList.add("价格4"); HSSFWorkbook hssfWorkbook =exportExcelNew(headerList, data); hssfWorkbook.write(out); out.flush(); ctx.responseComplete(); }catch (Exception e) { if(is!=null){ try { is.close(); } catch (IOException e1) { e1.printStackTrace(); } } if(out!=null){ try { out.close(); } catch (IOException e1) { e1.printStackTrace(); } } e.printStackTrace(); }finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } public HSSFWorkbook exportExcelNew(List headerList,List> dataList){ HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); Integer total = null; HSSFSheet sheet = hssfWorkbook.createSheet("重复试剂"); HSSFRow titlerRow = sheet.createRow(0); for(int i = 0; i < headerList.size(); i++) { titlerRow.createCell(i).setCellValue(headerList.get(i)); } for (int i = 0; i < dataList.size(); i++) { HSSFRow dataRow = sheet.createRow(i + 1); List list=dataList.get(i); SysReagent re=list.get(0); dataRow.createCell(0).setCellValue(re.getName()); dataRow.createCell(1).setCellValue(re.getCas()); dataRow.createCell(2).setCellValue(re.getFormatName()); dataRow.createCell(3).setCellValue(re.getMainMetering()+re.getUnitName()); dataRow.createCell(4).setCellValue(re.getProductHomeName()); for(int j=0;j getReagentTypeBaseMeta(String keyword) { final String key = keyword.toLowerCase(); List list=baseMetaService.getBaseMetaList("reagent_type"); return list.stream().filter(i-> (i.getMetaKey().toLowerCase().contains(key) || i.getMetaValue().toLowerCase().contains(key))) .collect(Collectors.toList()); } public List getReagentCharacterBaseMeta(String keyword){ final String key = keyword.toLowerCase(); List list=baseMetaService.getBaseMetaList("reagent_character"); return list.stream().filter(i-> (i.getMetaKey().toLowerCase().contains(key) || i.getMetaValue().toLowerCase().contains(key))) .collect(Collectors.toList()); } //自动获取厂商 public List getProductName(String keyword){ final String key = keyword.toLowerCase(); List list=baseMetaService.getBaseMetaList("product_name"); return list.stream().filter(i-> (i.getMetaKey().toLowerCase().contains(key) || i.getMetaValue().toLowerCase().contains(key))) .collect(Collectors.toList()); } //自动获取供应商 public List getSuppliers(String type){ List list=sysSupplierService.getSysSupplierList(); List results=new ArrayList<>(); for (SysSupplier sup:list) { if(sup.getName().indexOf(type)>-1){ SysSupplier re=new SysSupplier(); re.setName(sup.getName()); re.setId(sup.getId()); results.add(re); } } return results; } //自动获取规格 public List getReagentFormat(String keyword){ final String key = keyword.toLowerCase(); List list=baseMetaService.getBaseMetaList("reagent_format"); return list.stream().filter(i-> (i.getMetaKey().toLowerCase().contains(key) || i.getMetaValue().toLowerCase().contains(key))) .collect(Collectors.toList()); } //自动获取主计量单位 public List getReagentUnit(String keyword){ final String key = keyword.toLowerCase(); List list=baseMetaService.getBaseMetaList("reagent_unit"); return list.stream().filter(i-> (i.getMetaKey().toLowerCase().contains(key) || i.getMetaValue().toLowerCase().contains(key))) .collect(Collectors.toList()); } //自动获取管制品control_products public List getControlProducts(String keyword){ final String key = keyword.toLowerCase(); List list=baseMetaService.getBaseMetaList("control_products"); return list.stream().filter(i-> (i.getMetaKey().toLowerCase().contains(key) || i.getMetaValue().toLowerCase().contains(key))) .collect(Collectors.toList()); } public void onEditBtnClick() { if (this.selectedList == null || this.selectedList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectedList.size() > 1) { FacesUtils.warn("只能选择一个数据进行修改。"); return; } this.sysReagent = this.sysReagentService.getSysReagent(this.selectedList.get(0).getId()); this.action = Constants.ACTION_EDIT; RequestContext.getCurrentInstance().execute("PF('dialog').show()"); } public void onSaveBtnClick() { //System.out.println(this.sysReagent.getReagentType()); try { // 新建 if (this.action == Constants.ACTION_ADD) { if (this.sysReagent == null) { FacesUtils.warn("新建对象为空。"); return; } this.sysReagent.setType(1); this.sysReagentService.insertSysReagent(this.sysReagent); FacesUtils.info("新建成功。"); RequestContext.getCurrentInstance().execute("PF('dialog').hide()"); // 修改 } else if (this.action == Constants.ACTION_EDIT) { if (this.sysReagent == null) { FacesUtils.warn("修改对象为空。"); return; } if(this.sysReagent.getControlProducts().equals("")){ this.sysReagent.setControlProducts(null); } this.sysReagentService.updateSysReagent(this.sysReagent); FacesUtils.info("修改成功。"); RequestContext.getCurrentInstance().execute("PF('dialog').hide()"); } } catch (Exception e) { logger.error("操作失败。", e); FacesUtils.warn("操作失败。"); } } public void onDeleteBtnClick() { try { if (this.selectedList == null || this.selectedList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } this.sysReagentService.deleteSysReagent(this.selectedList); FacesUtils.info("删除成功。"); } catch (Exception e) { logger.error("操作失败。", e); FacesUtils.warn("操作失败。"); } } //判断字典表里是否存在这组键值对 public Long getId(String groupCode,String metaValue){ Long id=null; if(this.codeList.size()>0){ for (BaseMeta bm:this.codeList){ if(bm.getGroupCode().equals(groupCode)&&bm.getMetaValue().equals(metaValue)){ id=bm.getId(); } } } return id; } //判断字典表里计量单位是否存在这组键值对,忽略大小写 public Long getIdForUnit(String groupCode,String metaValue){ Long id=null; if(this.codeList.size()>0){ for (BaseMeta bm:this.codeList){ if(bm.getGroupCode().equals(groupCode)&&bm.getMetaValue().toUpperCase().equals(metaValue.toUpperCase())){ id=bm.getId(); } } } return id; } //判断是否存在改供应商 public Long getSysSupplierId(String name){ Long id=null; for (SysSupplier sup:this.sysSupplierList) { if(sup.getName().equals(name)){ id=sup.getId(); } } return id; } public void uploadFile2(FileUploadEvent event) { System.out.println("=========耗材导入开始====="); this.codeList=baseMetaService.getAllBaseMeta(); try{ UploadedFile file = event.getFile(); InputStream is=file.getInputstream(); boolean isExcel2003=true; if (file.getFileName().matches("^.+\\.(?i)(xlsx)$")) { isExcel2003 = false; } Workbook wb=null; if(isExcel2003) { wb = new HSSFWorkbook(is); }else{ wb = new XSSFWorkbook(is); } Sheet sheet=wb.getSheetAt(0); List sysReagentsList = new ArrayList<>(); int totalRows = sheet.getPhysicalNumberOfRows(); Row row=null; int totalCells=0; String dangours = ""; totalCells=sheet.getRow(0).getLastCellNum(); if(totalCells>7){ FacesUtils.warn("导入表格格式不正确"); return; } for (int i = 1; i < totalRows; i++) { SysReagent sysReagent = new SysReagent(); List valuesList=new ArrayList(); row=sheet.getRow(i); // totalCells= row.getLastCellNum(); // if(totalCells>7){ // FacesUtils.warn("导入表格格式不正确"); // return; // } for (int t = 0; t < totalCells; t++) { String cellInfo=""; String groupCode = ""; if (row.getCell(t) != null) { if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) { cellInfo = String.valueOf(row.getCell(t).getNumericCellValue()); } else { cellInfo = row.getCell(t).getStringCellValue(); } } if(t==3){ String numberStr = ""; String ChartStr = ""; char[] strArr = cellInfo.toCharArray(); int index=-1; label:for(int k=0;k'9'){ index=k; break label; } } numberStr=cellInfo.substring(0,index); ChartStr=cellInfo.substring(index,cellInfo.length()); valuesList.add(numberStr); valuesList.add(ChartStr.toUpperCase()); }else if(t==5){ Long id=null; if(!StringUtils.isBlank(cellInfo)){ SysSupplier sysSupplier=sysSupplierService.getSysSupplierByName(cellInfo); if(sysSupplier==null){//新建供应商 FacesUtils.warn("未查询到供该应商信息-"+cellInfo); return; } id=sysSupplier.getId(); } valuesList.add(id); }else { valuesList.add(cellInfo); } } if (valuesList.size() != 8){ FacesUtils.warn("excel数据解析格式失败"); return; } System.out.println("value : "+valuesList); sysReagent.setName(valuesList.get(0).toString());//试剂名称 sysReagent.setProductHome(valuesList.get(1).toString());//厂家 sysReagent.setProductSn(valuesList.get(2).toString());//产品编号 sysReagent.setCas(valuesList.get(2).toString());//产品编号 if(!valuesList.get(3).equals("")){ sysReagent.setMainMetering(new BigDecimal(valuesList.get(3).toString()));//包装(数值) } sysReagent.setReagentUnit(valuesList.get(4).toString());//包装(单位) if(!valuesList.get(5).equals("")){ sysReagent.setPrice(BigDecimal.valueOf(Double.parseDouble(valuesList.get(5).toString())));//含税单价 } if(StringUtils.isNotBlank(valuesList.get(6).toString())){ sysReagent.setSupplierId(Long.valueOf(valuesList.get(6).toString()));//供应商id } if(StringUtils.isNotBlank(valuesList.get(7).toString())){ sysReagent.setReagentFormat(valuesList.get(7).toString());//规格 } DangerousFlag d; d = DangerousFlag.NORMAL; sysReagent.setDangerousFlag(d); sysReagent.setType(0); sysReagentsList.add(sysReagent); } sysReagentService.insertSysReagentList2(sysReagentsList); FacesUtils.info("导入成功。"); } catch (Exception ex) { ex.printStackTrace(); FacesUtils.info("导入失败,"+ex.getMessage()); } } //导入 public void uploadFile(FileUploadEvent event) { this.codeList=baseMetaService.getAllBaseMeta(); this.sysSupplierList=sysSupplierService.getSysSupplierList(); try{ UploadedFile file = event.getFile(); InputStream is=file.getInputstream(); boolean isExcel2003=true; if (file.getFileName().matches("^.+\\.(?i)(xlsx)$")) { isExcel2003 = false; } Workbook wb=null; if(isExcel2003) { wb = new HSSFWorkbook(is); }else{ wb = new XSSFWorkbook(is); } Sheet sheet=wb.getSheetAt(0); List sysReagentsList = new ArrayList<>(); int totalRows = sheet.getPhysicalNumberOfRows(); Row row=null; int totalCells=0; String dangours = ""; for (int i = 1; i < totalRows; i++) { SysReagent sysReagent = new SysReagent(); List valuesList=new ArrayList(); row=sheet.getRow(i); totalCells= row.getPhysicalNumberOfCells(); //System.out.println("====="+totalCells); // 目前导入文件11列,不满足条件的情况跳过 /*if (totalCells != 12) { throw new Exception("导入文件格式不正确"); }*/ for (int t = 0; t <= totalCells; t++) { //System.out.println(row.getCell(t)); String cellInfo=""; String groupCode = ""; if (row.getCell(t) != null) { if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) { cellInfo = String.valueOf(row.getCell(t).getNumericCellValue()); } else { cellInfo = row.getCell(t).getStringCellValue(); } } if(t == 4){ String numberStr = ""; String ChartStr = ""; char[] strArr = cellInfo.toCharArray(); for (char string : strArr) { // 判断是否为字母 if ((string+"").matches("^[a-zA-Z\\u4e00-\\u9fa5]|[μ]+$")||(string+"").equals("/")){ ChartStr += string; } } numberStr = cellInfo.replace(ChartStr, ""); valuesList.add(numberStr); valuesList.add(ChartStr.toUpperCase()); }else if(t == 11){ Long id=getSysSupplierId(cellInfo); if(id == null && cellInfo!=null && cellInfo!="") { SysSupplier sup=new SysSupplier(); // sup.setId(IDUtils.uuid()); sup.setName(cellInfo); sup.setPersonName(""); sup.setPhone(""); sup.setMemo(""); sysSupplierService.insertSysSupplier(sup); id=sup.getId(); this.sysSupplierList.add(sup); this.supplierSelectList.add(sup); } valuesList.add(String.valueOf(id)); }/*else if(t == 9){ valuesList.add(sysSupplierService.getSysSupplierIdByname(cellInfo)); }*/else{ //if(cellInfo!=null) valuesList.add(cellInfo); } } /* if (valuesList.size() != 13){ break; }*/ sysReagent.setProductSn(valuesList.get(0));//产品编号 sysReagent.setName(valuesList.get(1));//试剂名称 sysReagent.setControlProducts(valuesList.get(2));//管制品 sysReagent.setReagentFormat(valuesList.get(3));//规格型号 if(!valuesList.get(4).equals("")){ sysReagent.setMainMetering(new BigDecimal(valuesList.get(4)));//包装(数值) } sysReagent.setReagentUnit(valuesList.get(5));//包装(单位) if(!valuesList.get(6).equals("")){ sysReagent.setPrice(BigDecimal.valueOf(Double.parseDouble(valuesList.get(6))));//含税单价 } sysReagent.setCas(valuesList.get(7));//CAS号 sysReagent.setReagentCharacter(valuesList.get(8));//危险性质 if(!valuesList.get(9).equals("")){ sysReagent.setPerBox((int)Double.parseDouble(valuesList.get(9)));//每箱数量 } sysReagent.setProductHome(valuesList.get(10));//厂家 sysReagent.setReagentType(valuesList.get(11));//试剂类型 sysReagent.setSupplierId(Long.valueOf(valuesList.get(12)));//供应商 DangerousFlag d; if(dangours.equals("普货")){ d = DangerousFlag.NORMAL; }else{ d = DangerousFlag.DANGEROUS; } sysReagent.setDangerousFlag(d); sysReagent.setType(1); sysReagentsList.add(sysReagent); } sysReagentService.insertSysReagentList(sysReagentsList); FacesUtils.info("导入成功。"); } catch (Exception ex) { ex.printStackTrace(); FacesUtils.info("导入失败。"); } } public LazyDataModel getDataModel() { if (this.dataModel == null) { this.dataModel = new LazyDataModel() { @Override public List load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) { List list = null; try { int count = sysReagentService.getSysReagentTotalCountNew(name, cas, supplierId,getType(),productSn); this.setRowCount(count); if (count > 0) { list = sysReagentService.getSysReagentListNew(name, cas, supplierId,getType(), first, pageSize,productSn); } selectedList = new ArrayList<> (); } catch (Exception e) { logger.error(e); } return list; } @Override public SysReagent getRowData(String rowKey) { // Iterator iterator = this.iterator(); // if (iterator != null) { // SysReagent sr = null; // while (iterator.hasNext()) { // sr = iterator.next(); // if (rowKey.equals(sr.getId())) { // return sr; // } // } // } Long id=Long.valueOf(rowKey); return sysReagentService.getSysReagent(id); } }; } return dataModel; } public void export2Excel() { List list = sysReagentService.selectAll(name, cas, supplierId,getType(), productSn); try{ boolean isexport = sysReagentService.export2Excel(list,getType()); if (isexport){ } }catch (Exception e){ e.printStackTrace(); FacesUtils.warn("导出失败"); } } public SysReagent getSysReagent() { return sysReagent; } public void setSysReagent(SysReagent sysReagent) { this.sysReagent = sysReagent; } public List getSelectedList() { return this.selectedList; } public void setSelectedList(List selectedList) { this.selectedList = selectedList; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getSupplierId() { return supplierId; } public void setSupplierId(Long supplierId) { this.supplierId = supplierId; } public List getSupplierSelectList() { if (this.supplierSelectList == null) { this.initSupplierSelectList(); } return supplierSelectList; } public List getProducts() { if(this.products == null) { this.initSupplierSelectList(); } return products; } public void setProducts(List products) { this.products = products; } public int getAction() { return action; } public List getDangerousFlagSelectList() { if (this.dangerousFlagSelectList == null) { this.dangerousFlagSelectList = Arrays.asList(DangerousFlag.values()); } return dangerousFlagSelectList; } public List getReagentTypeFlagList() { if (this.reagentTypeFlagList == null) { this.reagentTypeFlagList = Arrays.asList(ReagentTypeFlag.values()); } return reagentTypeFlagList; } public void setDangerousFlagSelectList(List dangerousFlagSelectList) { this.dangerousFlagSelectList = dangerousFlagSelectList; } public String getProductSn() { return productSn; } public void setProductSn(String productSn) { this.productSn = productSn; } public void openUpdateSafetyNumDialog() { if (this.selectedList == null || this.selectedList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectedList.size() > 1) { FacesUtils.warn("只能选择一个数据进行修改。"); return; } this.sysReagent = this.sysReagentService.getSysReagent(this.selectedList.get(0).getId()); if (this.sysReagent.getType() != 1) { FacesUtils.warn("只能选择试剂设置安全库存。"); return; } RequestContext.getCurrentInstance().execute("PF('dialog-setSafetynum').show()"); } public void updateSafetyNum(){ if (this.sysReagent.getSafetynum() == null) { FacesUtils.warn("请输入安全库存。"); return; } sysReagentService.updateSafetyNum(this.sysReagent); FacesUtils.warn("修改成功。"); RequestContext.getCurrentInstance().execute("PF('dialog-setSafetynum').hide()"); } }