diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java index 23e2dde61..10cc3940f 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java @@ -1,10 +1,8 @@ package com.iformall.controller; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxPropertyContract; import com.iformall.domain.vo.WxBillAll; import com.iformall.service.WxBillAllService; -import com.iformall.service.WxPropertyContractService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import org.slf4j.Logger; @@ -15,6 +13,8 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.Map; /** @@ -42,5 +42,12 @@ public class WxBillAllController extends BaseController Map result = wxBillAllService.listAsPage(wxBillAll, pageNum, pageSize); return new ResultData(result); } - + + @GetMapping("exportBill") + public void exportBill(@ModelAttribute WxBillAll wxBillAll,HttpServletRequest request, HttpServletResponse response){ + wxBillAll.setTenantId(getTenantId()); + wxBillAllService.exportBill(request,response,wxBillAll); + } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index 8274880db..8ef27a43d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -3,6 +3,8 @@ package com.iformall.service; import com.iformall.common.ResultData; import com.iformall.domain.vo.WxBillAll; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -19,4 +21,6 @@ public interface WxBillAllService { void updateBill(Map bill); + void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillAll wxBillAll); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java index 001138594..3eef7c166 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -1,5 +1,6 @@ package com.iformall.service.impl; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -13,12 +14,24 @@ import com.iformall.enums.EnumBillTypeParam; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; +import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -81,8 +94,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { //分页-页数、条数 PageHelper.startPage(pageIndex, pageSize); //查询 - List> rentContractData = wxBillAllMapper.list(record); - PageInfo> pageInfo = new PageInfo<>(rentContractData); + List> billList = wxBillAllMapper.list(record); + PageInfo> pageInfo = new PageInfo<>(billList); //返回值 Map result = new HashMap<>(); result.put("billInfo", billInfo); @@ -189,6 +202,121 @@ public class WxBillAllServiceImpl implements WxBillAllService { } } + @Override + public void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillAll wxBillAll) { + //得到当前月 + String month = DateUtils.getSystemTime("yyyy-MM"); + //设置查询参数-当前月 + wxBillAll.setMonth(month); + //查询 + List> billList = wxBillAllMapper.list(wxBillAll); + + XSSFWorkbook workbook; + String filepath = Constant.fileDirectory; + File savefile = new File(filepath); + if (!savefile.exists()) { + savefile.mkdirs(); + } + String filename = UUID.randomUUID() + ".xlsx"; + filepath = filepath + filename; + + try { + File file = new File(filepath); + workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet("账单"); + Row row = sheet.createRow(0); + Cell shopNumberCell = row.createCell(0); + Cell merchantNameCell = row.createCell(1); + Cell billNameCell = row.createCell(2); + Cell needPayCell = row.createCell(3); + Cell receivePayCell = row.createCell(4); + Cell oweCell = row.createCell(5); + Cell receiveDateCell = row.createCell(6); + Cell expiredDayCell = row.createCell(7); + Cell statusCell = row.createCell(8); + + shopNumberCell.setCellValue("商铺号"); + merchantNameCell.setCellValue("商户名称"); + billNameCell.setCellValue("费用类型"); + needPayCell.setCellValue("实际应收金额(元)"); + receivePayCell.setCellValue("实收金额(元)"); + oweCell.setCellValue("欠缴金额(元)"); + receiveDateCell.setCellValue("缴款截止日期"); + expiredDayCell.setCellValue("过期时间"); + statusCell.setCellValue("账单状态"); + + for (int i = 0,size=billList.size(); i < size; i++) { + row = sheet.createRow(i + 1); + shopNumberCell = row.createCell(0); + merchantNameCell = row.createCell(1); + billNameCell = row.createCell(2); + needPayCell = row.createCell(3); + receivePayCell = row.createCell(4); + oweCell = row.createCell(5); + receiveDateCell = row.createCell(6); + expiredDayCell = row.createCell(7); + statusCell = row.createCell(8); + Map billMap = billList.get(i); + logger.info(billMap.toString()); + shopNumberCell.setCellValue(billMap.get("shopNumber").toString()); + merchantNameCell.setCellValue(billMap.get("merchantName").toString()); + billNameCell.setCellValue(billMap.get("name").toString()); + BigDecimal needPay = new BigDecimal(billMap.get("needPay").toString()).divide(new BigDecimal(100)); + needPayCell.setCellValue(needPay.toString()); + BigDecimal receivePay = new BigDecimal(billMap.get("receivePay").toString()).divide(new BigDecimal(100)); + receivePayCell.setCellValue(receivePay.toString()); + BigDecimal owe = new BigDecimal(billMap.get("owe").toString()).divide(new BigDecimal(100)); + oweCell.setCellValue(owe.toString()); + String receiveDate = DateUtils.date2String((Date) billMap.get("receiveDate"), "yyyy-MM-dd"); + receiveDateCell.setCellValue(receiveDate); + expiredDayCell.setCellValue(billMap.get("expiredDay").toString()); + statusCell.setCellValue(EnumBillDailyStatus.getEnum((Integer) billMap.get("status")).getMessage()); + + } + + FileOutputStream fileOut = new FileOutputStream(file); + workbook.write(fileOut); + fileOut.close(); + workbook.close(); + downFile(filepath, filename, response, request); + FileUtils.forceDelete(file); + } catch (Exception e) { + e.printStackTrace(); + } + + + } + + public void downFile(String filePath, String filename, HttpServletResponse response, + HttpServletRequest req) throws IOException { + try { + response.reset(); + response.setContentType("bin"); + String agent = req.getHeader("user-agent"); + if (agent.contains("Firefox")) { + response.setHeader("Content-disposition", + "attachment; filename=" + + new String(filename.getBytes("GB2312"), + "ISO-8859-1")); + } else { + response + .setHeader("Content-disposition", + "attachment; filename=" + + java.net.URLEncoder.encode(filename, + "UTF-8")); + } + // 循环取出流中的数据 + byte[] b = new byte[1024]; + int len; + InputStream inStream = new FileInputStream(filePath); + while ((len = inStream.read(b)) > 0) + response.getOutputStream().write(b, 0, len); + inStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + private int updateBillOther(Map bill) { logger.info("updateBillOther params:"+bill.toString()); Object id = bill.get("id"); diff --git a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml index ce74eee5b..a347f731d 100644 --- a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml @@ -14,11 +14,11 @@ union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_property_deposit union - select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type, '' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=1 + select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=1 union - select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=2 + select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=2 union - select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_other + select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_other ) bill left join wx_merchant m on bill.merchant_id=m.id left join wx_shop s on bill.shop_id=s.id @@ -46,11 +46,11 @@ union select id,merchant_id,shop_id,tenant_id,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_property_deposit union - select id,merchant_id,shop_id,tenant_id,5 bill_type_value,'水费' bill_type, '' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=1 + select id,merchant_id,shop_id,tenant_id,5 bill_type_value,'水费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=1 union - select id,merchant_id,shop_id,tenant_id,6 bill_type_value,'电费' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=2 + select id,merchant_id,shop_id,tenant_id,6 bill_type_value,'电费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=2 union - select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_other + select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_other ) bill where bill.tenant_id=#{tenantId} and bill.status=#{status} @@ -73,11 +73,11 @@ union select id,merchant_id,shop_id,tenant_id,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_property_deposit union - select id,merchant_id,shop_id,tenant_id,5 bill_type_value,'水费' bill_type, '' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=1 + select id,merchant_id,shop_id,tenant_id,5 bill_type_value,'水费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=1 union - select id,merchant_id,shop_id,tenant_id,6 bill_type_value,'电费' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=2 + select id,merchant_id,shop_id,tenant_id,6 bill_type_value,'电费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_daily where type=2 union - select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_other + select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status from wx_bill_other ) bill where bill.tenant_id=#{tenantId} and bill.status=#{status} @@ -103,11 +103,11 @@ union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime from wx_bill_property_deposit union - select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type, '' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=1 + select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type, 0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=1 union - select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=2 + select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_daily where type=2 union - select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,'' need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_other + select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime from wx_bill_other ) bill left join wx_merchant m on bill.merchant_id=m.id left join wx_shop s on bill.shop_id=s.id