Procházet zdrojové kódy

1增加用水性质销售报表

Xiaojh před 4 roky
rodič
revize
8b93b261c8

+ 41 - 4
smart-city-platform/src/main/java/com/bz/smart_city/commom/util/ExcelUtil.java

@@ -1,6 +1,7 @@
 package com.bz.smart_city.commom.util;
 
 import com.bz.smart_city.entity.DeviceTemp;
+import org.apache.ibatis.jdbc.Null;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.usermodel.*;
@@ -29,6 +30,8 @@ public class ExcelUtil {
 
     private List<Object[]> dataList = new ArrayList<Object[]>();
 
+    private List<String> eList = new ArrayList<String>();
+
     HttpServletResponse response;
 
     //构造方法,传入要导出的数据
@@ -37,6 +40,12 @@ public class ExcelUtil {
         this.rowName = rowName;
         this.title = title;
     }
+    public ExcelUtil(String title, String[] rowName, List<Object[]> dataList,List<String>list) {
+        this.dataList = dataList;
+        this.rowName = rowName;
+        this.title = title;
+        this.eList = list;
+    }
 
     /*
      * 导出数据
@@ -65,9 +74,23 @@ public class ExcelUtil {
                 cellTiltle.setCellStyle(columnTopStyle);
                 cellTiltle.setCellValue(title);
 
+
+                HSSFRow rowRowName = null;
+                if(eList != null && eList.size() > 0){
+                    for(int i=0; i<eList.size(); i++){
+                        Row searchFormRow = sheet.createRow(2+i);
+                        Cell searchFormCell = searchFormRow.createCell(0);
+                        searchFormCell.setCellValue(eList.get(i));
+                        sheet.addMergedRegion(new CellRangeAddress(searchFormRow.getRowNum(),
+                                searchFormRow.getRowNum(), 0, dataList.size()-2));
+                    }
+                    rowRowName = sheet.createRow(4);                // 在索引4的位置创建行(最顶端的行开始的第二行)
+                }else{
+                    rowRowName = sheet.createRow(2);                // 在索引2的位置创建行(最顶端的行开始的第二行)
+                }
+
                 // 定义所需列数
                 int columnNum = rowName.length;
-                HSSFRow rowRowName = sheet.createRow(2);                // 在索引2的位置创建行(最顶端的行开始的第二行)
 
                 // 将列头设置到sheet的单元格中
                 for (int n = 0; n < columnNum; n++) {
@@ -80,9 +103,14 @@ public class ExcelUtil {
 
                 //将查询出的数据设置到sheet对应的单元格中
                 for (int i = 0; i < listPage.size(); i++) {
-
                     Object[] obj = listPage.get(i);//遍历每个对象
-                    HSSFRow row = sheet.createRow(i + 3);//创建所需的行数
+                    HSSFRow row = null;
+                    if(eList != null && eList.size() > 0){
+                        row = sheet.createRow(i + 5);//创建所需的行数
+                    }else{
+                        row = sheet.createRow(i + 3);//创建所需的行数
+                    }
+
 
                     for (int j = 0; j < obj.length; j++) {
                         HSSFCell cell = null;   //设置单元格的数据类型
@@ -113,11 +141,21 @@ public class ExcelUtil {
                         }
                         if (currentRow.getCell(colNum) != null) {
                             HSSFCell currentCell = currentRow.getCell(colNum);
+                            String numbers = "";
+
                             if (currentCell.getCellTypeEnum() == CellType.STRING) {
                                 int length = calculateLength(currentCell.getStringCellValue());
                                 if (columnWidth < length) {
                                     columnWidth = length;
                                 }
+                                if(eList != null && eList.size() > 0){
+                                    if(rowNum == 4){
+                                        numbers = currentCell != null ? currentCell.getStringCellValue() : "";
+                                    }
+                                    if(numbers.equals("序号")){
+                                        columnWidth = 18;
+                                    }
+                                }
                             }
                         }
                     }
@@ -126,7 +164,6 @@ public class ExcelUtil {
                     }else {
                         sheet.setColumnWidth(colNum, columnWidth * 256);
                     }
-
                 }
                 //剔除
                 dataList.subList(0, pointsDataLimit).clear();

+ 49 - 0
smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/PayReportController.java

@@ -6,6 +6,8 @@ import com.bz.smart_city.commom.model.ResultStatus;
 import com.bz.smart_city.dto.pay.PayArrearagedetailsReportDto;
 import com.bz.smart_city.dto.pay.PayOperatordetailsReportDto;
 import com.bz.smart_city.dto.pay.PayTransactiondetailsReportDto;
+import com.bz.smart_city.dto.pay.PayWaterPropertyReportDto;
+import com.bz.smart_city.entity.pay.PayWaterPropertyReport;
 import com.bz.smart_city.service.pay.PayReportService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -122,6 +124,53 @@ public class PayReportController {
     }
 
 
+    @ApiOperation(value = "用水性质销售统计报表")
+    @GetMapping("/getWaterPropertySaleReport")
+    public AjaxMessage<Pagination<PayWaterPropertyReportDto>> getWaterPropertySaleReport(
+            @ApiParam(value = "机构ID", required = false) @RequestParam(required = false) Integer officeId,
+            @ApiParam(value = "收费员", required = false) @RequestParam(required = false) Integer userId,
+            @ApiParam(value = "起始时间", required = false,defaultValue = "2020-01-01") @RequestParam(required = false) String startDate,
+            @ApiParam(value = "结束时间", required = false,defaultValue = "2020-01-30") @RequestParam(required = false) String endDate,
+            @ApiParam(value = "用水类别", required = false) @RequestParam(required = false) Integer watercategoryId,
+            @ApiParam(value = "页数,非必传,默认第一页", required = false, defaultValue = "1") @RequestParam(required = false, defaultValue = "1") int pageNum,
+            @ApiParam(value = "条数,非必传,默认10条", required = false, defaultValue = "20") @RequestParam(required = false, defaultValue = "10") int pageSize
+    ){
+        PayWaterPropertyReport  inParams = new PayWaterPropertyReport();
+        inParams.setOfficeId(officeId);
+        inParams.setUserId(userId);
+        inParams.setStartDate(startDate);
+        inParams.setEndDate(endDate);
+        inParams.setWatercategoryId(watercategoryId);
+
+        Pagination<PayWaterPropertyReportDto> pagination = payReportService.getWaterPropertySaleReport(inParams,pageNum,pageSize);
+        return  new AjaxMessage<>(ResultStatus.OK,pagination);
+    }
+
+
+    @ApiOperation(value = "用水性质销售统计报表导出")
+    @GetMapping("/exportWaterPropertySale")
+    public void exportWaterPropertySale(
+            @ApiParam(value = "机构ID", required = false) @RequestParam(required = false) Integer officeId,
+            @ApiParam(value = "机构名称", required = false) @RequestParam(required = false) String officeName,
+            @ApiParam(value = "收费员Id", required = false) @RequestParam(required = false) Integer userId,
+            @ApiParam(value = "收费员名称", required = false) @RequestParam(required = false) String userName,
+            @ApiParam(value = "起始时间", required = false,defaultValue = "2020-01-01") @RequestParam(required = false) String startDate,
+            @ApiParam(value = "结束时间", required = false,defaultValue = "2020-01-30") @RequestParam(required = false) String endDate,
+            @ApiParam(value = "用水类别Id", required = false) @RequestParam(required = false) Integer watercategoryId,
+            @ApiParam(value = "用水类别名称", required = false) @RequestParam(required = false) String watercategoryName,
+            HttpServletResponse httpServletResponse
+    ){
+        PayWaterPropertyReport inParams = new PayWaterPropertyReport();
+        inParams.setOfficeId(officeId);
+        inParams.setOfficeName(officeName);
+        inParams.setUserId(userId);
+        inParams.setUserName(userName);
+        inParams.setStartDate(startDate);
+        inParams.setEndDate(endDate);
+        inParams.setWatercategoryId(watercategoryId);
+        inParams.setWatercategoryName(watercategoryName);
+        payReportService.WaterPropertySaleExcel(inParams,httpServletResponse);
+    }
     @ApiOperation(value = "欠费用户明细报表导出")
     @GetMapping("/exportDebt")
     public void exportDebt(

+ 7 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/PayReportMapper.java

@@ -3,7 +3,10 @@ package com.bz.smart_city.dao.pay;
 import com.bz.smart_city.dto.pay.PayArrearagedetailsReportDto;
 import com.bz.smart_city.dto.pay.PayOperatordetailsReportDto;
 import com.bz.smart_city.dto.pay.PayTransactiondetailsReportDto;
+import com.bz.smart_city.dto.pay.PayWaterPropertyReportDto;
+import com.bz.smart_city.entity.pay.PayWaterPropertyReport;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -20,4 +23,8 @@ public interface PayReportMapper {
 
     List<PayArrearagedetailsReportDto>getPayArrearagedetailsReportList(PayArrearagedetailsReportDto inParams);
 
+    List<PayWaterPropertyReportDto> getWaterPropertySaleReport(PayWaterPropertyReportDto inParams);
+    List<PayWaterPropertyReportDto> getTranInfoReport(@Param("inParams") PayWaterPropertyReport inParams);
+    List<PayWaterPropertyReportDto> getReceviceInfoReport(@Param("inParams") PayWaterPropertyReport inParams);
+
 }

+ 37 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/PayWaterPropertyReportDto.java

@@ -0,0 +1,37 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * @author xjh
+ * @version 1.0
+ * @date 2020/11/25 9:40
+ */
+@Data
+@ApiModel("用水性质销售统计报表DTO")
+public class PayWaterPropertyReportDto {
+    @ApiModelProperty("用水性质ID")
+    private String waterpropertyId;
+    @ApiModelProperty("用水性质编号")
+    private String waterpropertyName;//用水性质编号
+    @ApiModelProperty("购水次数")
+    private Integer frequency;//购水次数
+    @ApiModelProperty("购水量")
+    private Integer amount;//购水量
+    @ApiModelProperty("定额水费")
+    private BigDecimal sfee;//定额水费
+    @ApiModelProperty("排污费")
+    private BigDecimal wsfee;//排污费
+    @ApiModelProperty("源水费")
+    private String ysfee;//源水费
+    @ApiModelProperty("附加费")
+    private String fjfee;//附加费
+    @ApiModelProperty("购水金额")
+    private BigDecimal receivedamount;//购水金额
+
+}

+ 56 - 0
smart-city-platform/src/main/java/com/bz/smart_city/entity/pay/PayWaterPropertyReport.java

@@ -0,0 +1,56 @@
+package com.bz.smart_city.entity.pay;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * @author xjh
+ * @version 1.0
+ * @date 2020/11/25 14:40
+ */
+@Data
+@ApiModel("用水性质销售统计报表entity")
+public class PayWaterPropertyReport {
+    @ApiModelProperty("用水性质ID")
+    private String waterpropertyId;
+    @ApiModelProperty("用水性质编号")
+    private String waterpropertyName;//用水性质编号
+    @ApiModelProperty("购水次数")
+    private Integer frequency;//购水次数
+    @ApiModelProperty("购水量")
+    private Integer amount;//购水量
+    @ApiModelProperty("定额水费")
+    private BigDecimal sfee;//定额水费
+    @ApiModelProperty("排污费")
+    private BigDecimal wsfee;//排污费
+    @ApiModelProperty("源水费")
+    private String ysfee;//源水费
+    @ApiModelProperty("附加费")
+    private String fjfee;//附加费
+    @ApiModelProperty("购水金额")
+    private BigDecimal receivedamount;//购水金额
+    @ApiModelProperty("客户ID")
+    private BigInteger customerId;
+    @ApiModelProperty("水司ID")
+    private BigInteger siteId;
+    @ApiModelProperty("机构ID")
+    private Integer officeId;
+    @ApiModelProperty("机构名称")
+    private String officeName;
+    @ApiModelProperty("用户ID")
+    private Integer userId;
+    @ApiModelProperty("用户名称")
+    private String userName;
+    @ApiModelProperty("起始时间")
+    private String startDate;
+    @ApiModelProperty("结束时间")
+    private String endDate;
+    @ApiModelProperty("用水类别ID")
+    private Integer watercategoryId;
+    @ApiModelProperty("用水类别名称")
+    private String watercategoryName;
+}

+ 281 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/PayReportServiceImpl.java

@@ -7,6 +7,7 @@ import com.bz.smart_city.commom.util.UserUtil;
 import com.bz.smart_city.dao.pay.PayReportMapper;
 import com.bz.smart_city.dto.LoginUser;
 import com.bz.smart_city.dto.pay.*;
+import com.bz.smart_city.entity.pay.PayWaterPropertyReport;
 import com.bz.smart_city.service.pay.PayAgenttransactionService;
 import com.bz.smart_city.service.pay.PayReportService;
 import com.github.pagehelper.PageHelper;
@@ -17,8 +18,11 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.text.SimpleDateFormat;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
@@ -181,6 +185,282 @@ public class PayReportServiceImpl implements PayReportService {
         return pg;
         //return new Pagination<>(reList);
     }
+    /**
+     * 用水性质销售报表
+     * @param payWaterPropertyReport
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @Override
+    public Pagination<PayWaterPropertyReportDto> getWaterPropertySaleReport(PayWaterPropertyReport payWaterPropertyReport, int pageNum, int pageSize)
+    {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        BigInteger customerId = new BigInteger(String.valueOf(loginUser.getCustomerId()));
+        payWaterPropertyReport.setCustomerId(customerId);
+        BigInteger siteId = new BigInteger(String.valueOf(loginUser.getSiteId()));
+        payWaterPropertyReport.setSiteId(siteId);
+
+        Pagination<PayWaterPropertyReportDto> pg = new Pagination<>();
+        //组装账户交易明细+实收记录
+        List<PayWaterPropertyReportDto> list = new ArrayList<PayWaterPropertyReportDto>();
+        //获取账户交易明细记录
+        List<PayWaterPropertyReportDto> tList = payReportMapper.getTranInfoReport(payWaterPropertyReport);
+        //获取实收记录
+        List<PayWaterPropertyReportDto> rList = payReportMapper.getReceviceInfoReport(payWaterPropertyReport);
+        if(tList != null && tList.size() > 0){
+            //遍历交易明细
+            for(int i=0; i < tList.size(); i++){
+                if(rList != null && rList.size() > 0){
+                    //遍历实收
+                    Iterator<PayWaterPropertyReportDto> it = rList.iterator();
+                    while (it.hasNext()){
+                        //实收+交易明细 = 总额
+                        //排除预存抵扣(payway!=5),交易状态=入账(state=1),是否作废=否(iscanceled=0)
+                        PayWaterPropertyReportDto dt = it.next();
+                        if(tList.get(i).getWaterpropertyId().equals(dt.getWaterpropertyId())){
+                            //购水次数
+                            tList.get(i).setFrequency(tList.get(i).getFrequency() + dt.getFrequency());
+                            //购水金额
+                            tList.get(i).setReceivedamount(tList.get(i).getReceivedamount().add(dt.getReceivedamount()));
+                            //购水量
+                            tList.get(i).setAmount(tList.get(i).getAmount() + dt.getAmount());
+                            //水费
+                            tList.get(i).setSfee(dt.getSfee());
+                            //污水费
+                            tList.get(i).setWsfee(dt.getWsfee());
+                            //源水费
+                            tList.get(i).setYsfee("0.000");
+                            //附加费
+                            tList.get(i).setFjfee("0.000");
+                            //已经取值过的可以移除
+                            it.remove();
+                        }
+                    }
+                }
+            }
+        }
+        list.addAll(tList);
+        //组装汇总记录
+        if(tList != null && tList.size() >0){
+            Integer frequency = 0;//购水次数
+            Integer amount = 0; //购水量
+            BigDecimal df = new BigDecimal("0.000");
+            BigDecimal sfee = df;//水费
+            BigDecimal wsfee = sfee;//污水费
+            String ysfee = "0.000";//源水费
+            String fjfee = "0.000";//附加费
+            BigDecimal receivedamount = df;//购水金额
+            for(PayWaterPropertyReportDto dto : tList){
+                frequency = frequency + dto.getFrequency();
+                amount = amount + dto.getAmount();
+                sfee = sfee.add(dto.getSfee());
+                wsfee = wsfee.add(dto.getWsfee());
+                receivedamount = receivedamount.add(dto.getReceivedamount());
+            }
+            PayWaterPropertyReportDto dto = new PayWaterPropertyReportDto();
+            dto.setWaterpropertyName("购水合计");
+            dto.setFrequency(frequency);
+            dto.setAmount(amount);
+            dto.setSfee(sfee);
+            dto.setWsfee(wsfee);
+            dto.setYsfee(ysfee);
+            dto.setFjfee(fjfee);
+            dto.setReceivedamount(receivedamount);
+            list.add(dto);
+            dto = new PayWaterPropertyReportDto();
+            dto.setWaterpropertyName("赠水合计");
+            dto.setFrequency(0);
+            dto.setAmount(0);
+            dto.setSfee(df);
+            dto.setWsfee(df);
+            dto.setYsfee("0.000");
+            dto.setFjfee("0.000");
+            dto.setReceivedamount(df);
+            list.add(dto);
+            dto = new PayWaterPropertyReportDto();
+            dto.setWaterpropertyName("总计");
+            dto.setFrequency(frequency);
+            dto.setAmount(amount);
+            dto.setSfee(sfee);
+            dto.setWsfee(wsfee);
+            dto.setYsfee(ysfee);
+            dto.setFjfee(fjfee);
+            dto.setReceivedamount(receivedamount);
+            list.add(dto);
+        }
+        pg.setTotal(list.size());
+        pg.setList(list);
+        return pg;
+    }
+
+    /**
+     * 用水性质销售报表导出
+     * @param payWaterPropertyReport
+     * @return
+     */
+    @Override
+    public void WaterPropertySaleExcel(PayWaterPropertyReport payWaterPropertyReport, HttpServletResponse httpServletResponse){
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        BigInteger customerId = new BigInteger(String.valueOf(loginUser.getCustomerId()));
+        payWaterPropertyReport.setCustomerId(customerId);
+        BigInteger siteId = new BigInteger(String.valueOf(loginUser.getSiteId()));
+        payWaterPropertyReport.setSiteId(siteId);
+
+        String title = "用水性质销售报表";//表头名称
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        //列名
+        String[] rowsName = new String[]{"序号","用水性质编号","购水次数","购水量(吨)","定额水费(元)","排污费(元)","源水费(元)","附加费(元)","购水金额(元)"};
+        //组装账户交易明细+实收记录
+        List<PayWaterPropertyReportDto> list = new ArrayList<PayWaterPropertyReportDto>();
+        //获取账户交易明细记录
+        List<PayWaterPropertyReportDto> tList = payReportMapper.getTranInfoReport(payWaterPropertyReport);
+        //获取实收记录
+        List<PayWaterPropertyReportDto> rList = payReportMapper.getReceviceInfoReport(payWaterPropertyReport);
+        if(tList != null && tList.size() > 0){
+            //遍历交易明细
+            for(int i=0; i < tList.size(); i++){
+                if(rList != null && rList.size() > 0){
+                    //遍历实收
+                    Iterator<PayWaterPropertyReportDto> it = rList.iterator();
+                    while (it.hasNext()){
+                        //实收+交易明细 = 总额
+                        //排除预存抵扣(payway!=5),交易状态=入账(state=1),是否作废=否(iscanceled=0)
+                        PayWaterPropertyReportDto dt = it.next();
+                        if(tList.get(i).getWaterpropertyId().equals(dt.getWaterpropertyId())){
+                            //购水次数
+                            tList.get(i).setFrequency(tList.get(i).getFrequency() + dt.getFrequency());
+                            //购水金额
+                            tList.get(i).setReceivedamount(tList.get(i).getReceivedamount().add(dt.getReceivedamount()));
+                            //购水量
+                            tList.get(i).setAmount(tList.get(i).getAmount() + dt.getAmount());
+                            //水费
+                            tList.get(i).setSfee(dt.getSfee());
+                            //污水费
+                            tList.get(i).setWsfee(dt.getWsfee());
+                            //源水费
+                            tList.get(i).setYsfee("0.000");
+                            //附加费
+                            tList.get(i).setFjfee("0.000");
+                            //已经取值过的可以移除
+                            it.remove();
+                        }
+                    }
+                }
+            }
+        }
+        list.addAll(tList);
+        //组装汇总记录
+        if(tList != null && tList.size() >0){
+            Integer frequency = 0;//购水次数
+            Integer amount = 0; //购水量
+            BigDecimal db = new BigDecimal("0.000");
+            BigDecimal sfee = db;//水费
+            BigDecimal wsfee = sfee;//污水费
+            String ysfee = "0.000";//源水费
+            String fjfee = "0.000";//附加费
+            BigDecimal receivedamount = db;//购水金额
+            for(PayWaterPropertyReportDto dto : tList){
+                frequency = frequency + dto.getFrequency();
+                amount = amount + dto.getAmount();
+                sfee = sfee.add(dto.getSfee());
+                wsfee = wsfee.add(dto.getWsfee());
+                receivedamount = receivedamount.add(dto.getReceivedamount());
+            }
+            PayWaterPropertyReportDto dto = new PayWaterPropertyReportDto();
+            dto.setWaterpropertyName("购水合计");
+            dto.setFrequency(frequency);
+            dto.setAmount(amount);
+            dto.setSfee(sfee);
+            dto.setWsfee(wsfee);
+            dto.setYsfee(ysfee);
+            dto.setFjfee(fjfee);
+            dto.setReceivedamount(receivedamount);
+            list.add(dto);
+            dto = new PayWaterPropertyReportDto();
+            dto.setWaterpropertyName("赠水合计");
+            dto.setFrequency(0);
+            dto.setAmount(0);
+            dto.setSfee(db);
+            dto.setWsfee(db);
+            dto.setYsfee("0.000");
+            dto.setFjfee("0.000");
+            dto.setReceivedamount(db);
+            list.add(dto);
+            dto = new PayWaterPropertyReportDto();
+            dto.setWaterpropertyName("总计");
+            dto.setFrequency(frequency);
+            dto.setAmount(amount);
+            dto.setSfee(sfee);
+            dto.setWsfee(wsfee);
+            dto.setYsfee(ysfee);
+            dto.setFjfee(fjfee);
+            dto.setReceivedamount(receivedamount);
+            list.add(dto);
+        }
+
+        List<Object[]> dataList = newArrayList();
+        Object[] objs = null;
+        BigDecimal db =  new BigDecimal("0.0");
+        for(int i=0; i<list.size() ; i++){
+            PayWaterPropertyReportDto dto = list.get(i);
+            objs = new Object[rowsName.length];
+            objs[0] = i;
+            objs[1] = dto != null && StringUtils.isNotBlank(dto.getWaterpropertyName()) ? dto.getWaterpropertyName() : "";//用水性质编号
+            objs[2] = dto != null && dto.getFrequency() != null ? dto.getFrequency() : 0;//购水次数
+            objs[3] = dto != null && dto.getAmount() != null ? dto.getAmount() : 0;//购水量
+            objs[4] = dto != null && dto.getSfee() != null ? dto.getSfee() : db;//水费
+            objs[5] = dto != null && dto.getWsfee() != null ? dto.getWsfee() : db;//污水处理费
+            objs[6] = "0.000";//源水费
+            objs[7] = "0.000";//附加费
+            objs[8] = dto != null && dto.getReceivedamount() != null ? dto.getReceivedamount() : db;//购水金额
+            dataList.add(objs);
+        }
+
+        String message="";
+        List<String> eList = new ArrayList<String>();
+        if(StringUtils.isNoneBlank(payWaterPropertyReport.getWatercategoryName())){
+            message = message + "用水类型:"+payWaterPropertyReport.getWatercategoryName();
+        }else{
+            message = message + "用水类型:(全部冷热水)";
+        }
+        if(StringUtils.isNotBlank(payWaterPropertyReport.getWaterpropertyName())){
+            message = message + "       用水性质所属类别:"+payWaterPropertyReport.getWaterpropertyName();
+        }else{
+            message = message + "       用水性质所属类别:全部类别";
+        }
+        //第一行
+        eList.add(message);
+        message="";
+
+        if(StringUtils.isNotBlank(payWaterPropertyReport.getOfficeName())){
+            message = message + "销售网点:"+payWaterPropertyReport.getOfficeName();
+        }else{
+            message = message + "销售网点:全部网点";
+        }
+        if(StringUtils.isNotBlank(payWaterPropertyReport.getUserName())){
+            message = message + "      操作员:"+payWaterPropertyReport.getOfficeName();
+        }else{
+            message = message + "      操作员:全部操作员";
+        }
+        if(StringUtils.isNotBlank(payWaterPropertyReport.getStartDate())){
+            message = message + "   统计日期:"+payWaterPropertyReport.getStartDate();
+        }
+        if(StringUtils.isNotBlank(payWaterPropertyReport.getEndDate())){
+            message = message + " 至 "+payWaterPropertyReport.getEndDate();
+        }
+        message = message + "   列印日期:"+new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+        eList.add(message);
+
+        ExcelUtil excelUtil = new ExcelUtil(title, rowsName, dataList,eList);
+        try {
+            excelUtil.export(httpServletResponse);
+        } catch (Exception e) {
+            throw new ServiceException(-900, "导出异常");
+        }
+    }
+
 
     /**
      * 导出用户欠费明细表
@@ -259,6 +539,7 @@ public class PayReportServiceImpl implements PayReportService {
         }
     }
 
+
     /**
      * 导出操作员明细表
      * @param payOperatordetailsReportDto

+ 6 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/pay/PayReportService.java

@@ -4,6 +4,8 @@ import com.bz.smart_city.commom.model.Pagination;
 import com.bz.smart_city.dto.pay.PayArrearagedetailsReportDto;
 import com.bz.smart_city.dto.pay.PayOperatordetailsReportDto;
 import com.bz.smart_city.dto.pay.PayTransactiondetailsReportDto;
+import com.bz.smart_city.dto.pay.PayWaterPropertyReportDto;
+import com.bz.smart_city.entity.pay.PayWaterPropertyReport;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -19,9 +21,13 @@ public interface PayReportService {
 
     Pagination<PayArrearagedetailsReportDto> getPayArrearagedetailsReport(PayArrearagedetailsReportDto payArrearagedetailsReportDto, int pageNum, int pageSize);
 
+    Pagination<PayWaterPropertyReportDto> getWaterPropertySaleReport(PayWaterPropertyReport payWaterPropertyReport, int pageNum, int pageSize);
+
     void getDebtListExcel(PayArrearagedetailsReportDto payArrearagedetailsReportDto, HttpServletResponse httpServletResponse);
 
     void getOperatordetListExcel(PayOperatordetailsReportDto payOperatordetailsReportDto, HttpServletResponse httpServletResponse);
 
     void getTranExcel(PayTransactiondetailsReportDto payTransactiondetailsReportDto,HttpServletResponse httpServletResponse);
+
+    void WaterPropertySaleExcel(PayWaterPropertyReport payWaterPropertyReport, HttpServletResponse httpServletResponse);
 }

+ 202 - 0
smart-city-platform/src/main/resources/mapper/pay/PayReportMapper.xml

@@ -198,5 +198,207 @@
         ORDER BY accountnumber asc
     </select>
 
+    <select id="getTranInfoReport" resultType="com.bz.smart_city.dto.pay.PayWaterPropertyReportDto">
+        SELECT
+            p.id as "waterpropertyId",
+            p.name as "waterpropertyName",
+            ifnull(count(distinct a.payseriesno),0) "frequency",
+            ifnull(round(sum(a.transamount),3),'0.000') as "receivedamount",
+            ifnull(FLOOR(sum(a.transamount)/p.totalprice_l1),0) as "amount",
+            '0.000' as "sfee",
+            '0.000' as "wsfee",
+            '0.000' as "ysfee",
+            '0.000' as "fjfee"
+        FROM
+        pay_pay_transactiondetails a
+        left join pay_pay_received r on a.received_id = r.id
+        left join pay_base_customerandmeterrela c on c.account_id = a.account_id
+        left join pay_base_waterproperty p on p.id = c.waterproperty_id
+        left join pay_base_watercategory w on w.id = p.category_id
+        left join sc_organization o on o.id = c.office_id
+        left join sc_user u on u.id = a.create_by
+        <where>
+            a.payway != 5
+            AND a.state = 1
+            AND a.canceledrecord_id IS NULL
+            and (a.iscanceled = 0 or a.iscanceled is null)
+            <if test="inParams.customerId != null and inParams.customerId != ''">
+                AND a.customer_id =#{inParams.customerId}
+            </if>
+            <if test="inParams.siteId != null and inParams.siteId != ''">
+                AND a.site_id =#{inParams.siteId}
+            </if>
+            <if test="inParams.startDate != null and inParams.startDate != null">
+                AND DATE_FORMAT(a.transtime,'%Y-%m-%d') &gt;=#{inParams.startDate}
+            </if>
+            <if test="inParams.endDate != null and inParams.endDate != null">
+                AND DATE_FORMAT(a.transtime,'%Y-%m-%d') &lt;=#{inParams.endDate}
+            </if>
+            <if test="inParams.officeId != null and inParams.officeId != ''">
+                and o.id =#{inParams.officeId}
+            </if>
+            <if test="inParams.userId != null and inParams.userId != ''">
+                and u.id =#{inParams.userId}
+            </if>
+            <if test="inParams.watercategoryId != null and inParams.watercategoryId != ''">
+                and w.id =#{inParams.watercategoryId}
+            </if>
+        </where>
+        GROUP BY c.waterproperty_id
+    </select>
 
+    <select id="getReceviceInfoReport" resultType="com.bz.smart_city.dto.pay.PayWaterPropertyReportDto">
+        select
+            p.id as "waterpropertyId",
+            p.name as "waterpropertyName",
+            ifnull(count(distinct a.payseriesno),0) "frequency",
+            ifnull(round(sum(a.receivedamount),3),'0.000') as "receivedamount",
+            ifnull(FLOOR(sum(a.receivedamount)/p.totalprice_l1),0) as "amount",
+            ifnull(round(sum(case when a.feetype = 1 then a.receivedamount end),3),'0.000') as "sfee",
+            ifnull(round(sum(case when a.feetype = 4 then a.receivedamount end),3),'0.000') as "wsfee",
+            '0.000' as "ysfee",
+            '0.000' as "fjfee"
+        from pay_pay_received a
+        left join pay_base_customerandmeterrela c on c.account_id = a.account_id
+        left join pay_base_waterproperty p on p.id = c.waterproperty_id
+        left join pay_base_watercategory w on w.id = p.category_id
+        left join sc_organization o on o.id = c.office_id
+        left join sc_user u on u.id = a.create_by
+        <where>
+            a.payway != 5 and a.state =  1 and canceledrecord_id is null and iscanceled = 0
+            <if test="inParams.customerId != null and inParams.customerId != ''">
+                AND a.customer_id =#{inParams.customerId}
+            </if>
+            <if test="inParams.siteId != null and inParams.siteId != ''">
+                AND a.site_id =#{inParams.siteId}
+            </if>
+            <if test="inParams.startDate != null and inParams.startDate != null">
+                AND DATE_FORMAT(a.create_date,'%Y-%m-%d') &gt;=#{inParams.startDate}
+            </if>
+            <if test="inParams.endDate != null and inParams.endDate != null">
+                AND DATE_FORMAT(a.create_date,'%Y-%m-%d') &lt;=#{inParams.endDate}
+            </if>
+            <if test="inParams.officeId != null and inParams.officeId != ''">
+                and o.id =#{inParams.officeId}
+            </if>
+            <if test="inParams.userId != null and inParams.userId != ''">
+                and u.id =#{inParams.userId}
+            </if>
+            <if test="inParams.watercategoryId != null and inParams.watercategoryId != ''">
+                and w.id =#{inParams.watercategoryId}
+            </if>
+        </where>
+        GROUP BY c.waterproperty_id
+    </select>
+
+    <select id="getWaterPropertySaleReport" resultType="com.bz.smart_city.dto.pay.PayWaterPropertyReportDto">
+        create table tranTab
+        (
+            SELECT
+                p.id as "waterpropertyId",
+                p.name as "waterpropertyName",
+                count(distinct a.payseriesno) "frequency",
+                round(sum(a.transamount),3) as "receivedamount",
+                FLOOR(sum(a.transamount)/p.totalprice_l1) as "amount"
+            FROM
+                pay_pay_transactiondetails a
+                left join pay_pay_received r on a.received_id = r.id
+                left join pay_base_customerandmeterrela c on c.account_id = a.account_id
+                left join pay_base_waterproperty p on p.id = c.waterproperty_id
+                left join pay_base_watercategory w on w.id = p.category_id
+                left join sc_organization o on o.id = c.office_id
+                left join sc_user u on u.id = a.create_by
+            WHERE
+                a.payway != 5
+                AND a.state = 1
+                AND a.canceledrecord_id IS NULL
+                and (a.iscanceled = 0 or a.iscanceled is null)
+                AND a.YEAR ='2020'
+                AND a.MONTH ='12'
+                AND a.site_id ='22'
+                AND a.customer_id ='47'
+            GROUP BY c.waterproperty_id
+        );
+        Create table receTab
+        (
+            select
+                p.id as "waterpropertyId",
+                p.name as "waterpropertyName",
+                count(distinct a.payseriesno) "frequency",
+                round(sum(a.receivedamount),3) as "receivedamount",
+                FLOOR(sum(a.receivedamount)/p.totalprice_l1) as "amount",
+                round(sum(case when a.feetype = 1 then a.receivedamount end),3) as "sfee",
+                round(sum(case when a.feetype = 4 then a.receivedamount end),3) as "wsfee",
+                '0.000' as "ysfee",
+                '0.000' as "fjfee"
+            from pay_pay_received a
+            left join pay_base_customerandmeterrela c on c.account_id = a.account_id
+                left join pay_base_waterproperty p on p.id = c.waterproperty_id
+                left join pay_base_watercategory w on w.id = p.category_id
+                left join sc_organization o on o.id = c.office_id
+                left join sc_user u on u.id = a.create_by
+            where
+            a.payway != 5 and a.state =  1 and canceledrecord_id is null and iscanceled = 0
+            and a.year = '2020' and a.month = '12' and a.site_id = '22' and a.customer_id = '47'
+            GROUP BY c.waterproperty_id
+        );
+        create table tab
+        (
+            select
+                a.waterpropertyId as "waterpropertyId",
+                a.waterpropertyName as "waterpropertyName",
+                (ifnull(a.frequency,0) + ifnull(b.frequency,0)) as "frequency",
+                (IFNULL(a.receivedamount,0)+ifnull(b.receivedamount,0)) as "receivedamount",
+                (ifnull(a.amount,0)+ifnull(b.amount,0)) as "amount",
+                ifnull(b.sfee,'0.000') as "sfee",
+                ifnull(b.wsfee,'0.000') as "wsfee",
+                ifnull(b.ysfee,'0.000') as "ysfee",
+                ifnull(b.fjfee,'0.000') as "fjfee"
+            from tranTab a
+            left join receTab b on a.waterpropertyId = b.waterpropertyId
+        );
+        select
+            a.waterpropertyName as "waterpropertyName",
+            a.frequency as "frequency",
+            a.receivedamount as "receivedamount",
+            a.amount as "amount",
+            a.sfee as "sfee",
+            a.wsfee as "wsfee",
+            a.ysfee as "ysfee",
+            a.fjfee as "fjfee"
+        from tab a
+        union all
+        select
+            '购水合计' as "waterpropertyName",
+            sum(b.frequency) as "frequency",
+            sum(b.receivedamount) as "receivedamount",
+            sum(b.amount) as "amount",
+            sum(b.sfee) as "sfee",
+            sum(b.wsfee) as "wsfee",
+            '0.000' as "ysfee",
+            '0.000' as "fjfee"
+        from tab b
+        union all
+        select
+            '赠水合计' as "waterpropertyName",
+            '0' as "frequency",
+            '0.000' as "receivedamount",
+            '0' as "amount",
+            '0.000' as "sfee",
+            '0.000' as "wsfee",
+            '0.000' as "ysfee",
+            '0.000' as "fjfee"
+        from dual
+        union all
+        select
+            '总计' as "waterpropertyName",
+            sum(c.frequency) as "frequency",
+            sum(c.receivedamount) as "receivedamount",
+            sum(c.amount) as "amount",
+            sum(c.sfee) as "sfee",
+            sum(c.wsfee) as "wsfee",
+            '0.000' as "ysfee",
+            '0.000' as "fjfee"
+        from tab c;
+    </select>
 </mapper>