Java导出合并单元格
1、 要求单元格格式:
2、详细代码
public class MyElectricAccountingBiz extends BaseBiz<MyElectricAccountingMapper, MyElectricAccounting> {
/**
* @version:v1.0.1
*/
public HashDto getRefrigerationList(Dto dto) {
List<HashDto> list = mapper.getAllRefrigeration(dto);
Map<String, String> hashMap = Maps.newHashMap();
List<HashDto> allElectricityData = mapper.getAllElectricityData(dto);
//获取页面传递的开始时间和结束时间
String startTime = dto.getString("startTime");
String endTime = dto.getString("endTime");
//获取两个时间之间的所有日期的集合,同时添加到map集合中
List<String> betweenTimeList = getBetweenTime(startTime, endTime, hashMap);
Map<String, Map<String, String>> collect = null;
if (CollectionUtil.isNotEmpty(hashMap)) {
collect = allElectricityData.stream().collect(Collectors.groupingBy
(e -> e.getString("instrumentName"), Collectors.toMap(e -> e.getString("readDate"),
e -> e.getString("consumeValue"), (key1, key2) -> key1)));
}
//处理list中的map集合
List<HashDto> refrigerationMergeNum = mapper.getRefrigerationMergeNum(dto);
List<HashDto> refrigerationMergeInfo = mapper.getRefrigerationMergeInfo(dto);
handleMapOfList(dto, list, hashMap, collect, refrigerationMergeNum, refrigerationMergeInfo, betweenTimeList);
HashDto hashDto = new HashDto();
//将时间的集合放进map集合
hashDto.put("dateList", betweenTimeList);
//将数据的集合放进map集合
hashDto.put("dataList", list);
return hashDto;
}
/**
* @version:v1.0.1
*/
public ObjectRestResponse exportAmmoniaData(Dto dto, HttpServletResponse response) {
HashDto refrigerationList = this.getRefrigerationList(dto);
List<HashDto> list = (List<HashDto>) refrigerationList.getList("dataList");
//处理表头
List<String> dateList = (List<String>) refrigerationList.getList("dateList");
List<String> headList = Lists.newArrayList("核算主体", "核算明细", "仪表名称", "制冷机房名称");
//处理数据
Map<Integer, String> headMap = new HashMap<>();
headMap.put(0, "accountingSubject");
headMap.put(1, "accountingWorkshop");
headMap.put(2, "instrumentName");
headMap.put(3, "refrigerationName");
for (int i = 0; i < dateList.size(); i++) {
headList.add(dateList.get(i));
headMap.put(4 + i, dateList.get(i));
}
headList.add("总计(kw/h)");
headMap.put(headList.size() - 1, "colTotal");
List<HashDto> mergeNum = mapper.getRefrigerationMergeNum(dto);
String titleName = "";
String startTime = dto.getString("startTime");
String endTime = dto.getString("endTime");
if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
titleName = "制冷机房的电表数据(" + startTime + " - " + endTime + ")";
} else {
titleName = "制冷机房的电表数据(总消耗)";
}
exportMergeExcel(response, list, headList, headMap, mergeNum,
"氨压机", titleName, "制冷机房的电能消耗.xls");
return new ObjectRestResponse().rel(true).message("导出成功!");
}
/**
* @version:v1.0.1
*/
public HashDto getEvaporatorData(Dto dto) {
List<HashDto> list = mapper.getAllEvaporatorName(dto);
Map<String, String> hashMap = Maps.newHashMap();
//获取页面传递的开始时间和结束时间
String startTime = dto.getString("startTime");
String endTime = dto.getString("endTime");
//获取两个时间之间的所有日期的集合,同时添加到map集合中
List<String> betweenTimeList = getBetweenTime(startTime, endTime, hashMap);
List<HashDto> allElectricityData = mapper.getAllElectricityData(dto);
Map<String, Map<String, String>> collect = allElectricityData.stream().collect(Collectors.groupingBy
(e -> e.getString("instrumentName"), Collectors.toMap(e -> e.getString("readDate"),
e -> e.getString("consumeValue"), (key1, key2) -> key1)));
//处理list中的map集合
List<HashDto> evaporatorMergeNum = mapper.getEvaporatorMergeNum(dto);
List<HashDto> evaporatorMergeInfo = mapper.getEvaporatorMergeInfo(dto);
handleMapOfList(dto, list, hashMap, collect, evaporatorMergeNum, evaporatorMergeInfo, betweenTimeList);
HashDto hashDto = new HashDto();
//将时间的集合放进map集合
hashDto.put("dateList", betweenTimeList);
//将数据的集合放进map集合
hashDto.put("dataList", list);
return hashDto;
}
/**
* @version:v1.0.1
*/
public ObjectRestResponse exportEvaporatorData(Dto dto, HttpServletResponse response) {
HashDto evaporatorData = this.getEvaporatorData(dto);
List<HashDto> list = (List<HashDto>) evaporatorData.getList("dataList");
//处理表头
List<String> dateList = (List<String>) evaporatorData.getList("dateList");
List<String> headList = Lists.newArrayList("核算主体", "核算明细", "仪表名称", "蒸发器名称", "配电柜名称");
//创建map集合顺序存放对应的字段名
Map<Integer, String> headMap = new HashMap<>();
headMap.put(0, "accountingSubject");
headMap.put(1, "accountingWorkshop");
headMap.put(2, "instrumentName");
headMap.put(3, "evaporatorName");
headMap.put(4, "distributionCabinetName");
for (int i = 0; i < dateList.size(); i++) {
headList.add(dateList.get(i));
headMap.put(5 + i, dateList.get(i));
}
headList.add("总计(kw/h)");
headMap.put(headList.size() - 1, "colTotal");
List<HashDto> mergeNum = mapper.getEvaporatorMergeNum(dto);
String titleName = "";
String startTime = dto.getString("startTime");
String endTime = dto.getString("endTime");
if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
titleName = "蒸发器的电表数据(" + startTime + " - " + endTime + ")";
} else {
titleName = "蒸发器的电表数据(总消耗)";
}
exportMergeExcel(response, list, headList, headMap, mergeNum,
"蒸发器", titleName, "蒸发器的电能消耗.xls");
return new ObjectRestResponse().rel(true).message("导出成功!");
}
/**
* @version:v1.0.1
*/
private void exportMergeExcel(HttpServletResponse response,
List<HashDto> list,
List<String> headList,
Map<Integer, String> headMap,
List<HashDto> hashDtos,
String sheetName,
String titleName,
String fileName) {
/* List<HashDto> list 原始数据
* List<String> headList 表头数据
* Map<Integer, String> headMap 表头对应
* List<HashDto> hashDtos 合并的数据
* */
String headStr = headMap.get(3);
int lastCol = 3;
if (!headStr.equals("refrigerationName")) {
lastCol = 4;
}
//创建工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(sheetName);
//设置列宽
sheet.setColumnWidth(0, 3000);
sheet.setColumnWidth(1, 5500);
sheet.setColumnWidth(2, 4000);
if (headStr.equals("refrigerationName")) {
sheet.setColumnWidth(3, 6000);
} else {
sheet.setColumnWidth(3, 13000);
}
if (lastCol == 4) {
sheet.setColumnWidth(lastCol, 9500);
}
for (int i = lastCol + 1; i < headList.size() - 1; i++) {
sheet.setColumnWidth(i, 2800);
}
sheet.setColumnWidth(headList.size() - 1, 5000);
HSSFRow firstRow = sheet.createRow(0);
//行高设置成460px
firstRow.setHeight((short) 460);
CellRangeAddress region = new CellRangeAddress(0, 0, (short) 0, (short) headList.size() - 1); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
sheet.addMergedRegion(region);
HSSFCell firstRowCell = firstRow.createCell(0);
firstRowCell.setCellValue(titleName);
//添加标题样式
HSSFCellStyle titleCellStyle = workbook.createCellStyle();
//设置居中
titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//设置字体大小
HSSFFont font = workbook.createFont();
font.setFontName("仿宋_GB2312");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font.setFontHeightInPoints((short) 15); //字体大小
titleCellStyle.setFont(font);//选择需要用到的字体格式
//设置第一行样式
firstRowCell.setCellStyle(titleCellStyle);
//创建全局样式
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//添加边框
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
//创建标题行
HSSFRow headRow = sheet.createRow(1);
//行高设置成360px
headRow.setHeight((short) 360);
for (int i = 0; i < headList.size(); i++) {
HSSFCell headRowCell = headRow.createCell(i);
headRowCell.setCellValue(headList.get(i));
headRowCell.setCellStyle(cellStyle);
}
int firstRowSpan = 0;
int firstRowStart = 0;
int secondRowStart = 0;
int secondRowSpan = 0;
//第一列的对比初始值
String upCompareField = "";
//第二行对比初始值
String preString = "";
//创建数据行
HSSFRow dataRow;
HSSFCell cell;
for (int i = 0; i < list.size(); i++) {
dataRow = sheet.createRow(i + 2);
HashDto hashDto2 = list.get(i);
for (int j = 0; j < headList.size(); j++) {
cell = dataRow.createCell(j);
String value = hashDto2.getString(headMap.get(j));
if (value.endsWith("合计(kw/h)")) {
sheet.addMergedRegion(new CellRangeAddress(2 + i, 2 + i, (short) 2, (short) lastCol));
}
cell.setCellValue(value);
//行高设置成360px
dataRow.setHeight((short) 360);
cell.setCellStyle(cellStyle);
//第一列每行中的对比值
String compareField = "";
if (j == 0) {
if (compareField.equals(upCompareField)) {
firstRowSpan++;
} else {
upCompareField = compareField;
firstRowStart = firstRowSpan;
firstRowSpan = 0;
}
}
}
for (HashDto hashDto : hashDtos) {
String secondValue = list.get(i).getString(headMap.get(1));
String countStr = hashDto.getString(headMap.get(1));
if (StringUtils.isNotEmpty(countStr)) {
if (countStr.equals(secondValue)) {
String countNum = hashDto.getString("countNum");
if (StringUtils.isNotEmpty(countNum)) {
int count = Integer.parseInt(countNum);
if (!secondValue.equals(preString)) {
sheet.addMergedRegion(new CellRangeAddress(2 + secondRowStart, 2 + count + secondRowStart, (short) 1, (short) 1));
secondRowStart += count;
secondRowStart += 1;
preString = secondValue;
}
}
}
}
}
}
sheet.addMergedRegion(new CellRangeAddress(firstRowStart + 2, firstRowSpan + 1, (short) 0, (short) 0));
//合并最后一行的单元格格式
sheet.addMergedRegion(new CellRangeAddress(list.size() + 1, list.size() + 1, 1, lastCol));
//写入excel表
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
workbook.write(response.getOutputStream());
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* @version:v1.0.1
*/
public static List<String> getBetweenTime(String startTime, String endTime, Map<String, String> hashMap) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> betweenTime = new ArrayList<String>();
try {
Date sdate = sdf.parse(startTime);
Date edate = sdf.parse(endTime);
Calendar sCalendar = Calendar.getInstance();
sCalendar.setTime(sdate);
int year = sCalendar.get(Calendar.YEAR);
int month = sCalendar.get(Calendar.MONTH);
int day = sCalendar.get(Calendar.DATE);
sCalendar.set(year, month, day, 0, 0, 0);
Calendar eCalendar = Calendar.getInstance();
eCalendar.setTime(edate);
year = eCalendar.get(Calendar.YEAR);
month = eCalendar.get(Calendar.MONTH);
day = eCalendar.get(Calendar.DATE);
eCalendar.set(year, month, day, 0, 0, 0);
while (sCalendar.before(eCalendar)) {
String date = sdf.format(sCalendar.getTime());
betweenTime.add(date);
hashMap.put(date, "0.00");
sCalendar.add(Calendar.DAY_OF_YEAR, 1);
}
betweenTime.add(sdf.format(eCalendar.getTime()));
hashMap.put(sdf.format(eCalendar.getTime()), "0.00");
} catch (Exception e) {
e.printStackTrace();
}
return betweenTime;
}
/**
* @version:v1.0.1
*/
private void handleMapOfList(Dto dto,
List<HashDto> list,
Map<String, String> hashMap,
Map<String, Map<String, String>> collect,
List<HashDto> mergeNumList,
List<HashDto> mergeInfoList,
List<String> betweenTimeList) {
/*
* list -》源数据集合
* hashMap -》存放查询时间段所有日期的对象
* collect -》处理后的键值对数据集合
* mergeNumList -》合并数量的集合
* mergeInfoList -》合并信息的集合
* betweenTimeList -》存放查询时间段所有日期的集合
* */
//让Double类型保留两位输出
DecimalFormat df = new DecimalFormat("0.00");
if (CollectionUtil.isNotEmpty(list)) {
//创建一个对象用来存放总计数据
HashDto totalHashDto = new HashDto();
Double totalAll = 0.00;
for (HashDto hashDto : list) {
hashDto.put("countNum", 0.00);
hashDto.putAll(hashMap);
String name = hashDto.getString("instrumentName");
Double sum = 0.00;
if (CollectionUtil.isNotEmpty(collect)) {
Map<String, String> stringStringMap = collect.get(name);
if (CollectionUtil.isNotEmpty(stringStringMap)) {
hashDto.putAll(stringStringMap);
for (Map.Entry<String, String> stringStringEntry : stringStringMap.entrySet()) {
String value = stringStringEntry.getValue();
if (StringUtils.isNotEmpty(value)) {
sum += Double.parseDouble(value);
}
}
}
}
//让Double类型保留两位输出
Double count = Double.parseDouble(df.format(sum));
hashDto.put("colTotal", df.format(count));
}
for (HashDto hashDto : mergeNumList) {
String accountingSubject = hashDto.getString("accountingSubject");
String accountingWorkshop = hashDto.getString("accountingWorkshop");
Double sum = 0.00;
hashDto.putAll(hashMap);
hashDto.put("instrumentName", accountingSubject + " - " + accountingWorkshop + " - 合计(kw/h)");
totalHashDto.put("accountingSubject", accountingSubject);
totalHashDto.put("accountingWorkshop", accountingSubject + " - 总计(kw/h)");
if (CollectionUtil.isNotEmpty(mergeInfoList)) {
for (HashDto hashDto1 : mergeInfoList) {
String accountingSubject1 = hashDto1.getString("accountingSubject");
String accountingWorkshop1 = hashDto1.getString("accountingWorkshop");
if (accountingSubject.equals(accountingSubject1) && accountingWorkshop.equals(accountingWorkshop1)) {
String countNum = hashDto.getString("countNum");
String consumeValue = hashDto1.getString("consumeValue");
String readDate = hashDto1.getString("readDate");
if (StringUtils.isNotEmpty(readDate) && CollectionUtil.isNotEmpty(collect)) {
sum += Double.parseDouble(consumeValue);
hashDto.put(readDate, df.format(Double.parseDouble(consumeValue)));
}
}
}
}
//让Double类型保留两位输出
Double count = Double.parseDouble(df.format(sum));
hashDto.put("colTotal", df.format(count));
list.add(hashDto);
totalHashDto.put("countNum", list.size());
}
//将list集合按照核算主体,核算详情排序
Collections.sort(list, new Comparator<Map>() {
@Override
public int compare(Map o1, Map o2) {
int result = o1.get("accountingSubject").toString().compareTo(o2.get("accountingSubject").toString());
int result2 = o1.get("accountingWorkshop").toString().compareTo(o2.get("accountingWorkshop").toString());
return result2 == 0 ? o1.get("countNum").toString().compareTo(o2.get("countNum").toString()) : result2;
}
});
//为集合添加一个合计数据
for (String readDate : betweenTimeList) {
Double total = 0.00;
for (HashDto hashDto : list) {
String instrumentName = hashDto.getString("instrumentName");
if (instrumentName.endsWith("合计(kw/h)")) {
Double value = Double.parseDouble(hashDto.getString(readDate));
total += value;
}
}
totalAll += total;
//让Double类型保留两位输出
Double count = Double.parseDouble(df.format(total));
totalHashDto.put(readDate, df.format(count));
}
//让Double类型保留两位输出
Double count = Double.parseDouble(df.format(totalAll));
totalHashDto.put("colTotal", df.format(count));
list.add(totalHashDto);
}
}
}
3、mapper层映射
<?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.cn.platform.slaughter.device.mapper.electric.MyElectricAccountingMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.cn.platform.slaughter.device.entity.electric.MyElectricAccounting" id="myElectricAccountingMap">
<result property="id" column="id"/>
<result property="accountingSubject" column="accounting_subject"/>
<result property="accountingWorkshop" column="accounting_workshop"/>
<result property="instrumentName" column="instrument_name"/>
<result property="instrumentUse" column="instrument_use"/>
<result property="factoryCode" column="factory_code"/>
</resultMap>
<sql id="Base_Column_List">
id, accounting_subject, accounting_workshop, instrument_name, instrument_use, factory_code
</sql>
<select id="getList" resultMap="myElectricAccountingMap" parameterType="map">
select
<include refid="Base_Column_List" />
from
my_electric_accounting
<where>
<if test="id != null and id != ''">
and id = #{id}
</if>
<if test="accountingSubject != null and accountingSubject != ''">
and accounting_subject = #{accountingSubject}
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and accounting_workshop = #{accountingWorkshop}
</if>
<if test="instrumentName != null and instrumentName != ''">
and instrument_name = #{instrumentName}
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and instrument_use = #{instrumentUse}
</if>
<if test="factoryCode != null and factoryCode != ''">
and factory_code = #{factoryCode}
</if>
</where>
</select>
<!--获取氨压机对照的制冷机房名称-->
<select id="getAllRefrigeration" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT
t2.accounting_subject AS accountingSubject,
t2.accounting_workshop AS accountingWorkshop,
t2.instrument_name AS instrumentName,
t2.instrument_use AS instrumentUse,
t1.refrigeration_name AS refrigerationName
FROM
my_base_refrigeration_evaporator t1
LEFT JOIN my_electric_accounting t2 ON t1.instrument_name = t2.instrument_name
<where>
t1.refrigeration_name IS NOT NULL
AND t1.refrigeration_name != ''
<if test="accountingSubject != null and accountingSubject != ''">
and t2.accounting_subject LIKE CONCAT('%',#{accountingSubject},'%')
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and t2.accounting_workshop LIKE CONCAT('%',#{accountingWorkshop},'%')
</if>
<if test="instrumentName != null and instrumentName != ''">
and t2.instrument_name LIKE CONCAT('%',#{instrumentName},'%')
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and t2.instrument_use LIKE CONCAT('%',#{instrumentUse},'%')
</if>
<if test="factoryCode != null and factoryCode != ''">
and t2.factory_code = #{factoryCode}
</if>
<if test="refrigerationName != null and refrigerationName != ''">
and t1.refrigeration_name LIKE CONCAT('%',#{refrigerationName},'%')
</if>
</where>
</select>
<!--获取所有的蒸发器对应的电表数据-->
<select id="getAllEvaporatorName" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT
t2.accounting_subject AS accountingSubject,
t2.accounting_workshop AS accountingWorkshop,
t2.instrument_name AS instrumentName,
t2.instrument_use AS instrumentUse,
t1.evaporator_name AS evaporatorName,
t1.distribution_cabinet_name AS distributionCabinetName
FROM
my_base_refrigeration_evaporator t1
LEFT JOIN my_electric_accounting t2 ON t1.instrument_name = t2.instrument_name
<where>
t1.evaporator_name IS NOT NULL
AND t1.evaporator_name !=''
<if test="accountingSubject != null and accountingSubject != ''">
and t2.accounting_subject LIKE CONCAT('%',#{accountingSubject},'%')
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and t2.accounting_workshop LIKE CONCAT('%',#{accountingWorkshop},'%')
</if>
<if test="instrumentName != null and instrumentName != ''">
and t2.instrument_name LIKE CONCAT('%',#{instrumentName},'%')
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and t2.instrument_use LIKE CONCAT('%',#{instrumentUse},'%')
</if>
<if test="factoryCode != null and factoryCode != ''">
and t2.factory_code = #{factoryCode}
</if>
<if test="evaporatorName != null and evaporatorName != ''">
and t1.evaporator_name LIKE CONCAT('%',#{evaporatorName},'%')
</if>
<if test="distributionCabinetName != null and distributionCabinetName != ''">
and t1.distribution_cabinet_name LIKE CONCAT('%',#{distributionCabinetName},'%')
</if>
</where>
</select>
<!--获取能耗数据-->
<select id="getAllElectricityData" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT DISTINCT
CONVERT ( VARCHAR ( 10 ), read_date, 23 ) AS readDate,
CONVERT ( VARCHAR ( 20 ), CONVERT ( DECIMAL ( 18, 2 ), SUM ( consume_value ) ) ) AS consumeValue,
instrument_name AS instrumentName
FROM
my_energy_consume_for_day
<where>
<if test="startTime != null and startTime != ''">
<![CDATA[ and CONVERT(VARCHAR(10),read_date,23) >= #{startTime} ]]>
</if>
<if test="endTime != null and endTime != ''">
<![CDATA[ and CONVERT(VARCHAR(10),read_date,23) <= #{endTime} ]]>
</if>
<if test="factoryCode != null and factoryCode != ''">
and slaughter_factory_code = #{factoryCode}
</if>
</where>
GROUP BY
read_date,
instrument_name,
consume_value
</select>
<!--获取蒸发器需要合并的数量-->
<select id="getEvaporatorMergeNum" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT
t1.accounting_subject AS accountingSubject,
t1.accounting_workshop AS accountingWorkshop,
COUNT ( t1.accounting_workshop ) AS countNum
FROM
my_electric_accounting t1
LEFT JOIN my_base_refrigeration_evaporator t2 ON t1.instrument_name = t2.instrument_name
WHERE
t2.evaporator_name IS NOT NULL
AND t2.evaporator_name != ''
<if test="accountingSubject != null and accountingSubject != ''">
and t1.accounting_subject LIKE CONCAT('%',#{accountingSubject},'%')
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and t1.accounting_workshop LIKE CONCAT('%',#{accountingWorkshop},'%')
</if>
<if test="instrumentName != null and instrumentName != ''">
and t1.instrument_name LIKE CONCAT('%',#{instrumentName},'%')
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and t1.instrument_use LIKE CONCAT('%',#{instrumentUse},'%')
</if>
<if test="factoryCode != null and factoryCode != ''">
and t1.factory_code = #{factoryCode}
</if>
<if test="evaporatorName != null and evaporatorName != ''">
and t2.evaporator_name LIKE CONCAT('%',#{evaporatorName},'%')
</if>
<if test="distributionCabinetName != null and distributionCabinetName != ''">
and t2.distribution_cabinet_name LIKE CONCAT('%',#{distributionCabinetName},'%')
</if>
GROUP BY
t1.accounting_subject,
t1.accounting_workshop
</select>
<!--获取蒸发器需要合并的信息-->
<select id="getEvaporatorMergeInfo" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT
t1.accounting_subject AS accountingSubject,
t1.accounting_workshop AS accountingWorkshop,
CONVERT(DECIMAL(18,2), SUM ( t2.consume_value )) AS consumeValue,
CONVERT(varchar(10),t2.read_date,23) AS readDate
FROM
my_electric_accounting t1
LEFT JOIN my_energy_consume_for_day t2 ON t1.instrument_name = t2.instrument_name
LEFT JOIN my_base_refrigeration_evaporator t3 ON t2.instrument_name= t3.instrument_name
WHERE
t3.evaporator_name IS NOT NULL
AND t3.evaporator_name != ''
<if test="accountingSubject != null and accountingSubject != ''">
and t1.accounting_subject LIKE CONCAT('%',#{accountingSubject},'%')
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and t1.accounting_workshop LIKE CONCAT('%',#{accountingWorkshop},'%')
</if>
<if test="instrumentName != null and instrumentName != ''">
and t1.instrument_name LIKE CONCAT('%',#{instrumentName},'%')
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and t1.instrument_use LIKE CONCAT('%',#{instrumentUse},'%')
</if>
<if test="factoryCode != null and factoryCode != ''">
and t1.factory_code = #{factoryCode}
and t2.slaughter_factory_code = #{factoryCode}
</if>
<if test="evaporatorName != null and evaporatorName != ''">
and t3.evaporator_name LIKE CONCAT('%',#{evaporatorName},'%')
</if>
<if test="startTime != null and startTime != ''">
<![CDATA[ and CONVERT(VARCHAR(10),t2.read_date,23) >= #{startTime} ]]>
</if>
<if test="endTime != null and endTime != ''">
<![CDATA[ and CONVERT(VARCHAR(10),t2.read_date,23) <= #{endTime} ]]>
</if>
<if test="distributionCabinetName != null and distributionCabinetName != ''">
and t3.distribution_cabinet_name LIKE CONCAT('%',#{distributionCabinetName},'%')
</if>
GROUP BY
t1.accounting_subject,
t1.accounting_workshop,
t2.read_date
</select>
<!--获取氨压机需要合并的数量-->
<select id="getRefrigerationMergeNum" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT
t1.accounting_subject AS accountingSubject,
t1.accounting_workshop AS accountingWorkshop,
COUNT ( t1.accounting_workshop ) AS countNum
FROM
my_electric_accounting t1
LEFT JOIN my_base_refrigeration_evaporator t2 ON t1.instrument_name = t2.instrument_name
WHERE
t2.refrigeration_name IS NOT NULL
AND t2.refrigeration_name != ''
<if test="accountingSubject != null and accountingSubject != ''">
and t1.accounting_subject LIKE CONCAT('%',#{accountingSubject},'%')
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and t1.accounting_workshop LIKE CONCAT('%',#{accountingWorkshop},'%')
</if>
<if test="instrumentName != null and instrumentName != ''">
and t1.instrument_name LIKE CONCAT('%',#{instrumentName},'%')
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and t1.instrument_use LIKE CONCAT('%',#{instrumentUse},'%')
</if>
<if test="factoryCode != null and factoryCode != ''">
and t1.factory_code = #{factoryCode}
</if>
<if test="refrigerationName != null and refrigerationName != ''">
and t2.refrigeration_name LIKE CONCAT('%',#{refrigerationName},'%')
</if>
GROUP BY
t1.accounting_subject,
t1.accounting_workshop
</select>
<!--获取氨压机需要合并的信息-->
<select id="getRefrigerationMergeInfo" resultType="com.muyuan.platform.common.typewrap.HashDto">
SELECT
accounting_subject AS accountingSubject,
accounting_workshop AS accountingWorkshop,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( t2.consume_value ) ) AS consumeValue,
CONVERT ( VARCHAR ( 10 ), t2.read_date, 23 ) AS readDate
FROM
my_electric_accounting t1
LEFT JOIN my_energy_consume_for_day t2 ON t1.instrument_name = t2.instrument_name
LEFT JOIN my_base_refrigeration_evaporator t3 ON t2.instrument_name = t3.instrument_name
WHERE
t3.refrigeration_name IS NOT NULL
AND t3.refrigeration_name != ''
<if test="accountingSubject != null and accountingSubject != ''">
and t1.accounting_subject LIKE CONCAT('%',#{accountingSubject},'%')
</if>
<if test="accountingWorkshop != null and accountingWorkshop != ''">
and t1.accounting_workshop LIKE CONCAT('%',#{accountingWorkshop},'%')
</if>
<if test="instrumentName != null and instrumentName != ''">
and t1.instrument_name LIKE CONCAT('%',#{instrumentName},'%')
</if>
<if test="instrumentUse != null and instrumentUse != ''">
and t1.instrument_use LIKE CONCAT('%',#{instrumentUse},'%')
</if>
<if test="factoryCode != null and factoryCode != ''">
and t1.factory_code = #{factoryCode}
and t2.slaughter_factory_code = #{factoryCode}
</if>
<if test="refrigerationName != null and refrigerationName != ''">
and t3.refrigeration_name LIKE CONCAT('%',#{refrigerationName},'%')
</if>
<if test="startTime != null and startTime != ''">
<![CDATA[ and CONVERT(VARCHAR(10),t2.read_date,23) >= #{startTime} ]]>
</if>
<if test="endTime != null and endTime != ''">
<![CDATA[ and CONVERT(VARCHAR(10),t2.read_date,23) <= #{endTime} ]]>
</if>
GROUP BY
t1.accounting_subject,
t1.accounting_workshop,
t2.read_date
</select>
</mapper>