Преглед изворни кода

优化代码 加入 费用抄表导出功能

java110 пре 5 година
родитељ
комит
cc7ea8cafd

+ 118 - 0
java110-bean/src/main/java/com/java110/dto/meterWater/ImportExportMeterWaterDto.java

@@ -0,0 +1,118 @@
+package com.java110.dto.meterWater;
+
+import com.java110.dto.PageDto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName FloorDto
+ * @Description 水电费数据层封装
+ * @Author wuxw
+ * @Date 2019/4/24 8:52
+ * @Version 1.0
+ * add by wuxw 2019/4/24
+ **/
+public class ImportExportMeterWaterDto extends PageDto implements Serializable {
+
+    private String remark;
+    private String curReadingTime;
+    private String curDegrees;
+    private String meterType;
+    private String preDegrees;
+    private String preReadingTime;
+    private String communityId;
+    private String objType;
+    private String floorNum;
+    private String unitNum;
+    private String roomNum;
+
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getCurReadingTime() {
+        return curReadingTime;
+    }
+
+    public void setCurReadingTime(String curReadingTime) {
+        this.curReadingTime = curReadingTime;
+    }
+
+    public String getCurDegrees() {
+        return curDegrees;
+    }
+
+    public void setCurDegrees(String curDegrees) {
+        this.curDegrees = curDegrees;
+    }
+
+    public String getMeterType() {
+        return meterType;
+    }
+
+    public void setMeterType(String meterType) {
+        this.meterType = meterType;
+    }
+
+    public String getPreDegrees() {
+        return preDegrees;
+    }
+
+    public void setPreDegrees(String preDegrees) {
+        this.preDegrees = preDegrees;
+    }
+
+    public String getPreReadingTime() {
+        return preReadingTime;
+    }
+
+    public void setPreReadingTime(String preReadingTime) {
+        this.preReadingTime = preReadingTime;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getObjType() {
+        return objType;
+    }
+
+    public void setObjType(String objType) {
+        this.objType = objType;
+    }
+
+    public String getFloorNum() {
+        return floorNum;
+    }
+
+    public void setFloorNum(String floorNum) {
+        this.floorNum = floorNum;
+    }
+
+    public String getUnitNum() {
+        return unitNum;
+    }
+
+    public void setUnitNum(String unitNum) {
+        this.unitNum = unitNum;
+    }
+
+    public String getRoomNum() {
+        return roomNum;
+    }
+
+    public void setRoomNum(String roomNum) {
+        this.roomNum = roomNum;
+    }
+}

+ 17 - 3
service-fee/src/main/java/com/java110/fee/api/MeterWaterApi.java

@@ -30,8 +30,8 @@ public class MeterWaterApi {
     public ResponseEntity<String> queryPreMeterWater(@RequestParam(value = "communityId") String communityId,
                                                      @RequestParam(value = "objId") String objId,
                                                      @RequestParam(value = "objType") String objType,
-                                                     @RequestParam(value = "roomNum" ,required = false) String roomNum,
-                                                     @RequestParam(value = "meterType",required = false) String meterType) {
+                                                     @RequestParam(value = "roomNum", required = false) String roomNum,
+                                                     @RequestParam(value = "meterType", required = false) String meterType) {
         MeterWaterDto meterWaterDto = new MeterWaterDto();
         meterWaterDto.setObjId(objId);
         meterWaterDto.setObjType(objType);
@@ -39,6 +39,20 @@ public class MeterWaterApi {
         meterWaterDto.setRow(1);
         meterWaterDto.setCommunityId(communityId);
         meterWaterDto.setMeterType(meterType);
-        return queryPreMeterWaterImpl.query(meterWaterDto,roomNum);
+        return queryPreMeterWaterImpl.query(meterWaterDto, roomNum);
+    }
+
+    /**
+     * 查询 导出模板数据
+     *
+     * @param communityId 小区ID
+     * @return
+     * @serviceCode /meterWater/queryExportRoomAndMeterWater
+     * @path /app/meterWater/queryExportRoomAndMeterWater
+     */
+    @RequestMapping(value = "/queryExportRoomAndMeterWater", method = RequestMethod.GET)
+    public ResponseEntity<String> queryExportRoomAndMeterWater(@RequestParam(value = "communityId") String communityId,
+                                                               @RequestParam(value = "meterType") String meterType) {
+        return  queryPreMeterWaterImpl.queryExportRoomAndMeterWater(communityId,meterType);
     }
 }

+ 11 - 2
service-fee/src/main/java/com/java110/fee/bmo/meterWater/IQueryPreMeterWater.java

@@ -1,6 +1,5 @@
 package com.java110.fee.bmo.meterWater;
 
-import com.alibaba.fastjson.JSONObject;
 import com.java110.dto.meterWater.MeterWaterDto;
 import org.springframework.http.ResponseEntity;
 
@@ -11,8 +10,18 @@ public interface IQueryPreMeterWater {
 
     /**
      * 查询记录
+     *
      * @param meterWaterDto 表信息
      * @return
      */
-    ResponseEntity<String> query(MeterWaterDto meterWaterDto,String roomNum);
+    ResponseEntity<String> query(MeterWaterDto meterWaterDto, String roomNum);
+
+    /**
+     * 查询导出房屋表读数
+     *
+     * @param communityId
+     * @param meterType
+     * @return
+     */
+    ResponseEntity<String> queryExportRoomAndMeterWater(String communityId, String meterType);
 }

+ 30 - 0
service-fee/src/main/java/com/java110/fee/bmo/meterWater/impl/QueryPreMeterWaterImpl.java

@@ -2,12 +2,16 @@ package com.java110.fee.bmo.meterWater.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.java110.dto.RoomDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.meterWater.ImportExportMeterWaterDto;
 import com.java110.dto.meterWater.MeterWaterDto;
 import com.java110.dto.parking.ParkingSpaceDto;
 import com.java110.fee.bmo.meterWater.IQueryPreMeterWater;
 import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.fee.IMeterWaterInnerServiceSMO;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
@@ -16,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -48,6 +53,31 @@ public class QueryPreMeterWaterImpl implements IQueryPreMeterWater {
         return ResultVo.createResponseEntity(1, total, meterWaterDtos);
     }
 
+    @Override
+    public ResponseEntity<String> queryExportRoomAndMeterWater(String communityId, String meterType) {
+        RoomDto roomDto = new RoomDto();
+        roomDto.setCommunityId(communityId);
+        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+        MeterWaterDto meterWaterDto = null;
+        List<ImportExportMeterWaterDto> importExportMeterWaterDtos = new ArrayList<>();
+        ImportExportMeterWaterDto importExportMeterWaterDto = null;
+        for (RoomDto tmpRoomDto : roomDtos) {
+            meterWaterDto = new MeterWaterDto();
+            meterWaterDto.setMeterType(meterType);
+            meterWaterDto.setObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+            List<MeterWaterDto> meterWaterDtos = meterWaterInnerServiceSMOImpl.queryMeterWaters(meterWaterDto);
+            importExportMeterWaterDto = BeanConvertUtil.covertBean(tmpRoomDto, ImportExportMeterWaterDto.class);
+            String preDegree = meterWaterDtos == null ? "0" : meterWaterDtos.get(0).getCurDegrees();
+            String preReadTime = meterWaterDtos == null ? DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)
+                    : meterWaterDtos.get(0).getCurReadingTime();
+
+            importExportMeterWaterDto.setPreDegrees(preDegree);
+            importExportMeterWaterDto.setPreReadingTime(preReadTime);
+            importExportMeterWaterDtos.add(importExportMeterWaterDto);
+        }
+        return ResultVo.createResponseEntity(1, importExportMeterWaterDtos.size(), importExportMeterWaterDtos);
+    }
+
     private boolean freshFeeDtoParam(MeterWaterDto meterWaterDto, String roomNum) {
 
         if (StringUtil.isEmpty(roomNum)) {

+ 53 - 0
service-front/src/main/java/com/java110/front/components/assetImport/ImportMeterWaterFeeComponent.java

@@ -0,0 +1,53 @@
+package com.java110.front.components.assetImport;
+
+import com.java110.core.context.IPageData;
+import com.java110.front.controller.CallComponentController;
+import com.java110.front.smo.assetExport.IExportMeterWaterSMO;
+import com.java110.front.smo.assetExport.IExportRoomSMO;
+import com.java110.front.smo.assetImport.IImportRoomFeeSMO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 添加应用组件
+ */
+@Component("importMeterWaterFee")
+public class ImportMeterWaterFeeComponent {
+
+    private final static Logger logger = LoggerFactory.getLogger(CallComponentController.class);
+
+
+    @Autowired
+    private IImportRoomFeeSMO importRoomFeeSMOImpl;
+
+    @Autowired
+    private IExportMeterWaterSMO exportMeterWaterSMOImpl;
+
+    /**
+     * 添加应用数据
+     *
+     * @param pd 页面数据封装
+     * @return ResponseEntity 对象
+     */
+    public ResponseEntity<String> importData(IPageData pd, MultipartFile uploadFile) throws Exception {
+
+        return importRoomFeeSMOImpl.importExcelData(pd, uploadFile);
+    }
+
+    /**
+     * 添加应用数据
+     *
+     * @param pd 页面数据封装
+     * @return ResponseEntity 对象
+     */
+    public ResponseEntity<Object> exportData(IPageData pd) throws Exception {
+
+        return exportMeterWaterSMOImpl.exportExcelData(pd);
+    }
+
+
+}

+ 22 - 0
service-front/src/main/java/com/java110/front/smo/assetExport/IExportMeterWaterSMO.java

@@ -0,0 +1,22 @@
+package com.java110.front.smo.assetExport;
+
+import com.java110.core.context.IPageData;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * @ClassName IAssetImportSMO
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/23 23:13
+ * @Version 1.0
+ * add by wuxw 2019/9/23
+ **/
+public interface IExportMeterWaterSMO {
+
+    /**
+     * 导入excel数据
+     * @param pd 前台数据封装
+     * @return ResponseEntity
+     */
+    public ResponseEntity<Object> exportExcelData(IPageData pd) throws Exception;
+}

+ 173 - 0
service-front/src/main/java/com/java110/front/smo/assetExport/impl/ExportMeterWaterSMOImpl.java

@@ -0,0 +1,173 @@
+package com.java110.front.smo.assetExport.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.component.BaseComponentSMO;
+import com.java110.core.context.IPageData;
+import com.java110.entity.component.ComponentValidateResult;
+import com.java110.front.smo.assetExport.IExportMeterWaterSMO;
+import com.java110.utils.constant.ServiceConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+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.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * @ClassName AssetImportSmoImpl
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/23 23:14
+ * @Version 1.0
+ * add by wuxw 2019/9/23
+ **/
+@Service("exportMeterWaterSMOImpl")
+public class ExportMeterWaterSMOImpl extends BaseComponentSMO implements IExportMeterWaterSMO {
+    private final static Logger logger = LoggerFactory.getLogger(ExportMeterWaterSMOImpl.class);
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Override
+    public ResponseEntity<Object> exportExcelData(IPageData pd) throws Exception {
+
+        ComponentValidateResult result = this.validateStoreStaffCommunityRelationship(pd, restTemplate);
+
+        Assert.hasKeyAndValue(JSONObject.parseObject(pd.getReqData()), "communityId", "请求中未包含小区");
+        Assert.hasKeyAndValue(JSONObject.parseObject(pd.getReqData()), "meterType", "请求中未包含费用项目");
+
+        Workbook workbook = null;  //工作簿
+        //工作表
+        workbook = new XSSFWorkbook();
+        //获取楼信息
+        getMeterWater(pd, result, workbook);
+
+
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        MultiValueMap headers = new HttpHeaders();
+        headers.add("content-type", "application/octet-stream;charset=UTF-8");
+        headers.add("Content-Disposition", "attachment;filename=feeImport_" + DateUtil.getyyyyMMddhhmmssDateString() + ".xlsx");
+        headers.add("Pargam", "no-cache");
+        headers.add("Cache-Control", "no-cache");
+        //headers.add("Content-Disposition", "attachment; filename=" + outParam.getString("fileName"));
+        headers.add("Accept-Ranges", "bytes");
+        byte[] context = null;
+        try {
+            workbook.write(os);
+            context = os.toByteArray();
+            os.close();
+            workbook.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+            // 保存数据
+            return new ResponseEntity<Object>("导出失败", HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+        // 保存数据
+        return new ResponseEntity<Object>(context, headers, HttpStatus.OK);
+    }
+
+
+    /**
+     * 查询存在的房屋信息
+     * room.queryRooms
+     *
+     * @param pd
+     * @param result
+     * @return
+     */
+    private JSONArray getExistsRoom(IPageData pd, ComponentValidateResult result) {
+        String apiUrl = "";
+        ResponseEntity<String> responseEntity = null;
+        JSONObject reqJson = JSONObject.parseObject(pd.getReqData());
+        apiUrl = ServiceConstant.SERVICE_API_URL + "/api/meterWater/queryExportRoomAndMeterWater?page=1&row=10000&communityId="
+                + result.getCommunityId() + "&meterType=" + reqJson.getString("meterType");
+        responseEntity = this.callCenterService(restTemplate, pd, "", apiUrl, HttpMethod.GET);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) { //跳过 保存单元信息
+            return null;
+        }
+
+        JSONObject savedRoomInfoResults = JSONObject.parseObject(responseEntity.getBody());
+
+
+        if (!savedRoomInfoResults.containsKey("data")) {
+            return null;
+        }
+
+
+        return savedRoomInfoResults.getJSONArray("data");
+
+    }
+
+    /**
+     * 获取 房屋信息
+     *
+     * @param componentValidateResult
+     * @param workbook
+     */
+    private void getMeterWater(IPageData pd, ComponentValidateResult componentValidateResult, Workbook workbook) {
+        Sheet sheet = workbook.createSheet("房屋费用信息");
+        Row row = sheet.createRow(0);
+        Cell cell0 = row.createCell(0);
+        cell0.setCellValue("上期度数: 请填写上期表读数 ;\n上期读表时间: " +
+                "格式为YYYY-MM-DD; \n本期度数: 本次表读数;\n本期读表时间: 格式为YYYY-MM-DD; " +
+                "\n注意:所有单元格式为文本");
+        CellStyle cs = workbook.createCellStyle();
+        cs.setWrapText(true);  //关键
+        cell0.setCellStyle(cs);
+        row.setHeight((short) (200 * 10));
+        row = sheet.createRow(1);
+        row.createCell(0).setCellValue("楼栋编号");
+        row.createCell(1).setCellValue("单元编号");
+        row.createCell(2).setCellValue("房屋编码");
+        row.createCell(3).setCellValue("上期度数");
+        row.createCell(4).setCellValue("上期读表时间");
+        row.createCell(5).setCellValue("本期度数");
+        row.createCell(6).setCellValue("本期读表时间");
+        row.createCell(7).setCellValue("备注");
+
+        //查询楼栋信息
+        JSONArray rooms = this.getExistsRoom(pd, componentValidateResult);
+        if (rooms == null) {
+            CellRangeAddress region = new CellRangeAddress(0, 0, 0, 6);
+            sheet.addMergedRegion(region);
+            return;
+        }
+
+        for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex + 2);
+            row.createCell(0).setCellValue(rooms.getJSONObject(roomIndex).getString("floorNum"));
+            row.createCell(1).setCellValue(rooms.getJSONObject(roomIndex).getString("unitNum"));
+            row.createCell(2).setCellValue(rooms.getJSONObject(roomIndex).getString("roomNum"));
+            row.createCell(3).setCellValue(rooms.getJSONObject(roomIndex).getString("preDegrees"));
+            row.createCell(4).setCellValue(rooms.getJSONObject(roomIndex).getString("preReadingTime"));
+            row.createCell(5).setCellValue("");
+            row.createCell(6).setCellValue("");
+            row.createCell(7).setCellValue("");
+        }
+
+        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 6);
+        sheet.addMergedRegion(region);
+    }
+
+    public RestTemplate getRestTemplate() {
+        return restTemplate;
+    }
+
+    public void setRestTemplate(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+}