package com.nanometer.smartlab.controller; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.nanometer.smartlab.dao.OpeApplyDao; import com.nanometer.smartlab.dao.OpeReagentCodeDao; import com.nanometer.smartlab.entity.*; import com.nanometer.smartlab.entity.enumtype.ApplyStatus; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.service.*; import com.nanometer.smartlab.util.Constants; import com.nanometer.smartlab.util.FacesUtils; import com.nanometer.smartlab.util.StringToolUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.primefaces.context.RequestContext; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.*; /** * 标签打印 */ @Controller @Scope("session") public class BarcodeMngController extends BaseController { private static Logger logger = Logger.getLogger(BarcodeMngController.class); @Resource private BaseMetaService baseMetaService; @Resource private SysUserService sysUserService; private LazyDataModel dataModel; private OpeOrder opeOrder; private List selectedViewList; private String orderCode; private String orderName; private String applyCode; private Integer orderStatus; private List reagentCodeList; @Resource private OpeReagentCodeDao opeReagentCodeDao; @Resource private OpeApplyService opeApplyService; private List viewReagentCodeList; public void onPrintBarcodeClick(){ if (this.selectedViewList == null || this.selectedViewList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectedViewList.size() > 1) { FacesUtils.warn("只能选择一个数据进行打印。"); return; } List reagentCodes=this.opeReagentCodeDao.getReagentCodeByApplyId(this.selectedViewList.get(0).getId()); if(reagentCodes.size()==0){ FacesUtils.warn("未生成标签编码"); return; } //生成标签 for(OpeReagentCode opeReagentCode:reagentCodes){ List rCodes=new ArrayList<>(); int startCode=opeReagentCode.getStartCode(); int endCode=opeReagentCode.getEndCode(); for(int i=startCode;i<=endCode;i++){ String lastCode= StringToolUtils.addZeroForNum(String.valueOf(i),4); String rcode=String.format("%s%s",opeReagentCode.getCodePrex(),lastCode); rCodes.add(rcode); } opeReagentCode.setReagentCodes(rCodes); //获取试剂信息 opeReagentCode.setReagent(opeApplyService.getReagentByApplyId(opeReagentCode.getApplyId())); } this.reagentCodeList=reagentCodes; RequestContext.getCurrentInstance().execute("PF('dialogPrintReagentCode').show()"); } public void onPrintSingleBarcodeClick(String reagentCode){ ListtmpList=this.reagentCodeList; List rCodes=new ArrayList<>(); rCodes.add(reagentCode); tmpList.get(0).setReagentCodes(rCodes); this.reagentCodeList=tmpList; RequestContext.getCurrentInstance().execute("PF('dialogPrintReagentCode').show()"); } public void onViewBarcodeClick(){ if (this.selectedViewList == null || this.selectedViewList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectedViewList.size() > 1) { FacesUtils.warn("只能选择一个数据进行打印。"); return; } List reagentCodes=this.opeReagentCodeDao.getReagentCodeByApplyId(this.selectedViewList.get(0).getId()); if(reagentCodes.size()==0){ FacesUtils.warn("未生成标签编码"); return; } List reagentCodeList=new ArrayList<>(); for(OpeReagentCode opeReagentCode:reagentCodes) { //获取试剂信息 SysReagent reagent=opeApplyService.getReagentByApplyId(opeReagentCode.getApplyId()); //生成标签 List rCodes=new ArrayList<>(); int startCode=opeReagentCode.getStartCode(); int endCode=opeReagentCode.getEndCode(); for (int i = startCode; i <= endCode; i++) { Map reagentMap = new HashMap(); String lastCode = StringToolUtils.addZeroForNum(String.valueOf(i), 4); String rcode = String.format("%s%s", opeReagentCode.getCodePrex(), lastCode); rCodes.add(rcode); reagentMap.put("applyId", opeReagentCode.getApplyId()); reagentMap.put("reagentCode", rcode); reagentMap.put("name", reagent.getName()); reagentMap.put("cas", reagent.getCas()); reagentMap.put("reagentCharacter", reagent.getReagentCharacter()); reagentCodeList.add(reagentMap); } opeReagentCode.setReagentCodes(rCodes); //获取试剂信息 opeReagentCode.setReagent(reagent); } this.viewReagentCodeList=reagentCodeList; this.reagentCodeList=reagentCodes; RequestContext.getCurrentInstance().execute("PF('viewPrintReagentCodeList').show()"); } public String getQrcode(String reagentCode){ QrConfig qrConfig=new QrConfig(50,50); //设置边距,即二维码和边框的距离 qrConfig.setMargin(1); // qrConfig.setForeColor(Color.WHITE.getRGB()); // qrConfig.setBackColor(Color.BLACK.getRGB()); byte[] image= QrCodeUtil.generatePng(reagentCode,qrConfig); String base64Image= Base64.getEncoder().encodeToString(image); return base64Image; } 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 = opeApplyService.getOpeApplyCountWithOrder(applyCode,orderCode, orderName); this.setRowCount(count); if (count > 0) { list = opeApplyService.getOpeApplyListWithOrder(applyCode,orderCode, orderName, first, pageSize); } } catch (Exception e) { logger.error(e); } selectedViewList = null; return list; } @Override public OpeApply getRowData(String rowKey) { Long id=Long.valueOf(rowKey); Iterator iterator = this.iterator(); if (iterator != null) { OpeApply opeApply = null; while (iterator.hasNext()) { opeApply = iterator.next(); if (id.equals(opeApply.getId())) { return opeApply; } } } return null; } }; } return dataModel; } public OpeOrder getOpeOrder() { return opeOrder; } public void setOpeOrder(OpeOrder opeOrder) { this.opeOrder = opeOrder; } public String getOrderCode() { return orderCode; } public void setOrderCode(String orderCode) { this.orderCode = orderCode; } public String getOrderName() { return orderName; } public void setOrderName(String orderName) { this.orderName = orderName; } public String getApplyCode(){ return applyCode; } public void setApplyCode(String applyCode){ this.applyCode=applyCode; } public List getSelectedViewList(){ return selectedViewList; } public void setSelectedViewList(List selectedViewList){ this.selectedViewList=selectedViewList; } public List getReagentCodeList() { return reagentCodeList; } public List getViewReagentCodeList() { return viewReagentCodeList; } }