Commit 787e59e7 by wangweidong

meter计量修改部分优化

parent 92b0684a
package com.patzn.cloud.service.lims.hmhj.controller;
import com.patzn.cloud.service.hmhj.entity.EntrustReportTemplateConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustReportTemplateConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* 报告模板配置 前端控制器
*
* @author wwd
* @since 2021-05-06
*/
@Api(tags = "报告模板配置")
@RestController
@RequestMapping("/v1/report_template_config")
public class EntrustReportTemplateConfigController extends ServiceController {
@Autowired
private IEntrustReportTemplateConfigService entrustReportTemplateConfigService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<EntrustReportTemplateConfig>> getPage(EntrustReportTemplateConfig entrustReportTemplateConfig) {
return success(entrustReportTemplateConfigService.page(getPage(), entrustReportTemplateConfig));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@GetMapping("/{id}")
public RestResult<EntrustReportTemplateConfig> get(@PathVariable("id") Long id) {
return success(entrustReportTemplateConfigService.getById(id));
}
@ApiOperation("根据 id 修改信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@PutMapping("/{id}")
public RestResult<Boolean> edit(@PathVariable("id") Long id, EntrustReportTemplateConfig entrustReportTemplateConfig) {
entrustReportTemplateConfig.setId(id);
return success(entrustReportTemplateConfigService.updateById(entrustReportTemplateConfig));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(EntrustReportTemplateConfig entrustReportTemplateConfig) {
return success(entrustReportTemplateConfigService.save(entrustReportTemplateConfig));
}
@ApiOperation("根据 ids 删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "主键列表", required = true, paramType = "query", allowMultiple = true, dataTypeClass = Long.class),
})
@DeleteMapping("/")
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(entrustReportTemplateConfigService.removeByIds(ids));
}
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.entity.EntrustReportTemplateConfig;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wwd
* @since 2021-05-06
*/
public interface EntrustReportTemplateConfigMapper extends BatchMapper<EntrustReportTemplateConfig> {
}
package com.patzn.cloud.service.lims.hmhj.original;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateConfig;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import org.apache.commons.collections4.ListUtils;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MoreSheetMoreOperation implements Operation {
private OriginalTemplate template;
private List<EntrustSampleItemVO> voList;
private Entrust entrust ;
private List<OriginalTemplateConfig> configList;
private XSSFWorkbook xssfWorkbook;
public MoreSheetMoreOperation(OriginalTemplate template, List<EntrustSampleItemVO> voList, Entrust entrust, List<OriginalTemplateConfig> configList, XSSFWorkbook xssfWorkbook) {
this.template = template;
this.voList = voList;
this.entrust = entrust;
this.configList = configList;
this.xssfWorkbook = xssfWorkbook;
}
@Override
public void doMakeOriginal() {
Integer templateSampleNum = template.getTemplateSampleNum();
Map<String, String> mapReplace = new HashMap<>();
mapReplace.put("#{client}",entrust.getClient());
List<List<EntrustSampleItemVO>> relList= ListUtils.partition(voList,templateSampleNum);
int templateSheetMum = xssfWorkbook.getNumberOfSheets();
XSSFSheet sheetMy = xssfWorkbook.getSheetAt(0);
boolean first = true;
List<EntrustSampleItemVO> firstList = null;
for (List<EntrustSampleItemVO> expVOList:relList) {
XSSFSheet sheet=null;
if (first){
sheet = sheetMy;
firstList = expVOList;
first = false;
continue;
}else{
sheet = xssfWorkbook.cloneSheet(0,sheetMy.getSheetName()+(templateSheetMum));
}
Map<String,String> mapReplaceMy = new HashMap<>();
for (int i = 0; i < templateSampleNum; i++) {
mapReplaceMy.put("#{sampleCode"+i+"}","");
}
mapReplaceMy.put("#{client}",entrust.getClient());
int entitySize = expVOList.size();
for (int j = 0; j < entitySize; j++) {
EntrustSampleItemVO vo = expVOList.get(j);
mapReplaceMy.put("#{sampleCode"+j+"}", StringHandleUtils.getString(vo.getSampleCode()));
}
HSSFWorkbookUtil.replaceModel(mapReplaceMy,xssfWorkbook,sheet);
templateSheetMum++;
}
int firstSize = firstList.size();
Map<String,String> mapReplaceMy = new HashMap<>();
for (int i = 0; i < templateSampleNum; i++) {
mapReplaceMy.put("#{sampleCode"+i+"}","");
}
mapReplaceMy.put("#{client}",entrust.getClient());
for (int j = 0; j < firstSize; j++) {
EntrustSampleItemVO vo = firstList.get(j);
mapReplaceMy.put("#{sampleCode"+j+"}",StringHandleUtils.getString(vo.getSampleCode()));
}
HSSFWorkbookUtil.replaceModel(mapReplaceMy,xssfWorkbook,sheetMy);
}
}
package com.patzn.cloud.service.lims.hmhj.original;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateConfig;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MoreSheetOneOperation implements Operation {
private OriginalTemplate template;
private List<EntrustSampleItemVO> voList;
private Entrust entrust ;
private List<OriginalTemplateConfig> configList;
private XSSFWorkbook xssfWorkbook;
public MoreSheetOneOperation(OriginalTemplate template, List<EntrustSampleItemVO> voList, Entrust entrust, List<OriginalTemplateConfig> configList, XSSFWorkbook xssfWorkbook) {
this.template = template;
this.voList = voList;
this.entrust = entrust;
this.configList = configList;
this.xssfWorkbook = xssfWorkbook;
}
@Override
public void doMakeOriginal() {
Map<String, String> mapReplace = new HashMap<>();
mapReplace.put("#{client}",entrust.getClient());
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
xssfSheet.setForceFormulaRecalculation(true);
int index = 0;
EntrustSampleItemVO firstVO = null;
int sheetNum = xssfWorkbook.getNumberOfSheets();
for (EntrustSampleItemVO vo:voList) {
if (index==0){
index++;
firstVO = vo;
continue;
}
XSSFSheet sheet = xssfWorkbook.cloneSheet(0);
index++;
}
int nextSample = sheetNum;
boolean start = true;
for (EntrustSampleItemVO vo:voList) {
if (start){
start = false;
continue;
}
XSSFSheet sheet = xssfWorkbook.getSheetAt(nextSample);
xssfWorkbook.setSheetName(nextSample,vo.getSampleCode());
mapReplace.put("#{sampleCode}",vo.getSampleCode());
HSSFWorkbookUtil.replaceModel(mapReplace,xssfWorkbook,sheet);
nextSample++;
}
mapReplace.put("#{sampleCode}",firstVO.getSampleCode());
HSSFWorkbookUtil.replaceModel(mapReplace,xssfWorkbook,xssfSheet);
}
}
package com.patzn.cloud.service.lims.hmhj.original;
public interface Operation {
void doMakeOriginal();
}
package com.patzn.cloud.service.lims.hmhj.original;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateConfig;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;
public class OriginalFactory {
private OriginalTemplate template;
private List<EntrustSampleItemVO> voList;
private Entrust entrust ;
private List<OriginalTemplateConfig> configList;
private XSSFWorkbook xssfWorkbook;
public OriginalFactory(OriginalTemplate template, List<EntrustSampleItemVO> voList, Entrust entrust, List<OriginalTemplateConfig> configList, XSSFWorkbook xssfWorkbook) {
this.template = template;
this.voList = voList;
this.entrust = entrust;
this.configList = configList;
this.xssfWorkbook = xssfWorkbook;
}
public Operation getOperation(){
if (null==template.getMoreSheet() || 0 == template.getMoreSheet()){
if (null == template.getSampleBeginRow()|| null==template.getSampleMergerNum()||null==template.getTemplateSampleNum()){
return null;
}
if (voList.size()<template.getTemplateSampleNum()){
return new SingleSheetLittleOperation(template,voList,entrust,configList,xssfWorkbook);
}else{
return new SingleSheetMoreOperation(template,voList,entrust,configList,xssfWorkbook);
}
}else{
Integer templateSampleNum = template.getTemplateSampleNum();
if (null == templateSampleNum || 1==templateSampleNum){
return new MoreSheetOneOperation(template,voList,entrust,configList,xssfWorkbook);
}else{
return new MoreSheetMoreOperation(template,voList,entrust,configList,xssfWorkbook);
}
}
}
}
package com.patzn.cloud.service.lims.hmhj.original;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.HashMap;
import java.util.Map;
public final class OriginalUtil {
public final static String initFormula(String formula,Integer i){
formula = formula.replace("#{sn}",(i+1)+"");
if (formula.contains("#{sneven1}")){
if (StringHandleUtils.isEven(i)){
formula= formula.replace("#{sneven1}",(i+1)+"");
}else{
formula= formula.replace("#{sneven1}",i+"");
}
}
if (formula.contains("#{snodd1}")){
if (!StringHandleUtils.isEven(i)){
formula= formula.replace("#{snodd1}",(i+1)+"");
}else{
formula= formula.replace("#{snodd1}",i+"");
}
}
if (formula.contains("#{sn+1}")){
formula= formula.replace("#{sn+1}",(i+2)+"");
}
if (formula.contains("#{sn+2}")){
formula= formula.replace("#{sn+2}",(i+3)+"");
}
if (formula.contains("#{sn+3}")){
formula= formula.replace("#{sn+3}",(i+4)+"");
}
if (formula.contains("#{sn+4}")){
formula= formula.replace("#{sn+4}",(i+5)+"");
}
if (formula.contains("#{sn+5}")){
formula= formula.replace("#{sn+5}",(i+6)+"");
}
if (formula.contains("#{sn+6}")){
formula= formula.replace("#{sn+6}",(i+7)+"");
}
if (formula.contains("#{sn+7}")){
formula= formula.replace("#{sn+7}",(i+8)+"");
}
return formula;
}
public final static void doReplace(XSSFWorkbook xssfWorkbook, Entrust entrust){
Map<String, String> mapReplace = new HashMap<>();
mapReplace.put("#{client}",entrust.getClient());
HSSFWorkbookUtil.replaceModel(mapReplace,xssfWorkbook,0);
}
}
package com.patzn.cloud.service.lims.hmhj.original;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateConfig;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SingleSheetLittleOperation implements Operation {
private OriginalTemplate template;
private List<EntrustSampleItemVO> voList;
private Entrust entrust ;
private List<OriginalTemplateConfig> configList;
private XSSFWorkbook xssfWorkbook;
public SingleSheetLittleOperation(OriginalTemplate template, List<EntrustSampleItemVO> voList, Entrust entrust, List<OriginalTemplateConfig> configList, XSSFWorkbook xssfWorkbook) {
this.template = template;
this.voList = voList;
this.entrust = entrust;
this.configList = configList;
this.xssfWorkbook = xssfWorkbook;
}
@Override
public void doMakeOriginal() {
OriginalUtil.doReplace(xssfWorkbook,entrust);
XSSFSheet sheetOne = xssfWorkbook.getSheetAt(0);
sheetOne.setForceFormulaRecalculation(true);
Integer beginRow = template.getSampleBeginRow();
int sampleMergerNum = template.getSampleMergerNum();
int templateSampleNum = template.getTemplateSampleNum();
for (EntrustSampleItemVO vo:voList) {
XSSFRow xssfRow = sheetOne.getRow(beginRow);
for (OriginalTemplateConfig config:configList) {
XSSFCell cell = xssfRow.getCell(config.getColumnPlace());
if ("sn".equals(config.getDataAttribute())){
continue;
}
if (StringUtils.isBlank(config.getDataAttribute())){
continue;
}
cell.setCellValue(StringHandleUtils.getFieldIfNummReturnBlankValueByFieldName(config.getDataAttribute(),vo));
}
beginRow+=sampleMergerNum;
}
Integer sampleBgMum = template.getSampleBeginRow();
for (OriginalTemplateConfig config:configList) {
if (null == config.getMergeRowNum()){
config.setMergeRowNum(1);
}
String formula = config.getFormula();
if (StringUtils.isBlank(formula)){
continue;
}
Integer columnPlace = config.getColumnPlace();
if (null == config.getColumnPlace()){
continue;
}
if (null == config.getMergeRowNum()){
continue;
}
Integer mergeRowNum = config.getMergeRowNum();
int formulaNum = template.getSampleBeginRow()+sampleMergerNum*templateSampleNum-1 ;
for (int i =sampleBgMum ; i <= formulaNum; i+=mergeRowNum) {
XSSFRow row = sheetOne.getRow(i);
XSSFCell cell = row.getCell(columnPlace);
cell.setCellFormula(OriginalUtil.initFormula(formula,i));
}
}
}
}
package com.patzn.cloud.service.lims.hmhj.original;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateConfig;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SingleSheetMoreOperation implements Operation {
private OriginalTemplate template;
private List<EntrustSampleItemVO> voList;
private Entrust entrust ;
private List<OriginalTemplateConfig> configList;
private XSSFWorkbook xssfWorkbook;
public SingleSheetMoreOperation(OriginalTemplate template, List<EntrustSampleItemVO> voList, Entrust entrust, List<OriginalTemplateConfig> configList, XSSFWorkbook xssfWorkbook) {
this.template = template;
this.voList = voList;
this.entrust = entrust;
this.configList = configList;
this.xssfWorkbook = xssfWorkbook;
}
@Override
public void doMakeOriginal() {
OriginalUtil.doReplace(xssfWorkbook,entrust);
XSSFSheet sheetOne = xssfWorkbook.getSheetAt(0);
sheetOne.setForceFormulaRecalculation(true);
Integer beginRow = template.getSampleBeginRow();
int sampleMergerNum = template.getSampleMergerNum();
int templateSampleNum = template.getTemplateSampleNum();
int insertRow = beginRow+sampleMergerNum*templateSampleNum;
XSSFRow zeroRow = sheetOne.getRow(beginRow);
XSSFCellStyle cellStyle = zeroRow.getCell(0).getCellStyle();
int lastCellNum = zeroRow.getLastCellNum();
int insertCount = voList.size()-templateSampleNum;
for (int m = 0 ; m<insertCount ;m++) {
for (int i = 0; i < sampleMergerNum; i++) {
sheetOne.shiftRows(insertRow, sheetOne.getLastRowNum(), 1,true,false);
XSSFRow row = sheetOne.createRow(insertRow);
row.setHeight(zeroRow.getHeight());
for (int j = 0; j < lastCellNum; j++) {
XSSFCell xssfCell = row.createCell(j);
xssfCell.setCellStyle(cellStyle);
}
insertRow++;
}
}
int sn = 1;
for (EntrustSampleItemVO vo:voList) {
XSSFRow xssfRow = sheetOne.getRow(beginRow);
for (OriginalTemplateConfig config:configList) {
if (null == config.getColumnPlace()){
continue;
}
XSSFCell cell = xssfRow.getCell(config.getColumnPlace());
if ("sn".equals(config.getDataAttribute())){
cell.setCellValue(sn);
}else{
cell.setCellValue(StringHandleUtils.getFieldIfNummReturnBlankValueByFieldName(config.getDataAttribute(),vo));
}
}
beginRow+=sampleMergerNum;
sn++;
}
for (OriginalTemplateConfig config:configList) {
if (null==config.getMergeRowNum()){
config.setMergeRowNum(1);
}
if (StringUtils.isNotBlank(config.getFormula())&&null != config.getColumnPlace() && null != config.getMergeRowNum()){
Integer sampleBgMum = template.getSampleBeginRow();
Integer mergeRowNum = config.getMergeRowNum();
int formulaNum = template.getSampleBeginRow()+sampleMergerNum*voList.size()-1 ;
for (int i =sampleBgMum ; i <= formulaNum; i+=mergeRowNum) {
XSSFRow row = sheetOne.getRow(i);
if (null == row){
continue;
}
XSSFCell cell = row.getCell(config.getColumnPlace());
if (null == cell){
continue;
}
String formula = config.getFormula();
cell.setCellFormula(OriginalUtil.initFormula(formula,i));
}
}
}
for (OriginalTemplateConfig config:configList) {
if (null==config.getMergeRowNum()){
config.setMergeRowNum(1);
}
if (null == config.getMergeBegin()){
continue;
}
if (null == config.getMergeEnd()){
continue;
}
int step= config.getMergeRowNum();
if (step==1 && config.getMergeEnd() == config.getMergeBegin()){
continue;
}
if (null != config.getColumnPlace() && null != config.getMergeRowNum()){
Integer sampleBgMum = template.getSampleBeginRow()+templateSampleNum*sampleMergerNum;
Integer sampleEnMum = template.getSampleBeginRow()+voList.size()*sampleMergerNum-1;
while (sampleBgMum<=sampleEnMum) {
sheetOne.addMergedRegion(new CellRangeAddress(sampleBgMum,sampleBgMum+step-1,config.getMergeBegin(),config.getMergeEnd()));
sampleBgMum=sampleBgMum+step;
}
}
}
}
}
package com.patzn.cloud.service.lims.hmhj.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.entity.EntrustReportTemplateConfig;
import java.util.List;
/**
* 服务类
*
* @author wwd
* @since 2021-05-06
*/
public interface IEntrustReportTemplateConfigService extends IBaseService<EntrustReportTemplateConfig> {
Page<EntrustReportTemplateConfig> page(Page<EntrustReportTemplateConfig> page, EntrustReportTemplateConfig entrustReportTemplateConfig);
boolean removeByIds(List<Long> ids);
}
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.patzn.cloud.service.hmhj.entity.EntrustReportTemplateConfig;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustReportTemplateConfigMapper;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustReportTemplateConfigService;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import java.util.List;
/**
* 服务实现类
*
* @author wwd
* @since 2021-05-06
*/
@Service
public class EntrustReportTemplateConfigServiceImpl extends BaseServiceImpl<EntrustReportTemplateConfigMapper, EntrustReportTemplateConfig> implements IEntrustReportTemplateConfigService {
@Override
public Page<EntrustReportTemplateConfig> page(Page<EntrustReportTemplateConfig> page, EntrustReportTemplateConfig entrustReportTemplateConfig) {
Wrapper wrapper = new EntityWrapper<>(entrustReportTemplateConfig);
return this.page(page, wrapper);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.patzn.cloud.service.lims.hmhj.mapper.EntrustReportTemplateConfigMapper">
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment